Documentation Source Text

Hex Artifact Content
Login

Artifact 8402694ede2e4b464ece6f5fb81b659d44107bb6:


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 5b 63 6f 6d 70 6f 75 6e 64  te and [compound
14800 20 53 45 4c 45 43 54 5d 0a 71 75 65 72 69 65 73   SELECT].queries
14810 20 28 71 75 65 72 69 65 73 20 77 69 74 68 20 6b   (queries with k
14820 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49  eywords like UNI
14830 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61 72  ON or EXCEPT) ar
14840 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61  e allowed as sca
14850 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73 2e 0a  lar.subqueries..
14860 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d  .<h3>Table Colum
14870 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70  n Names</h3>..<p
14880 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  >^A column name 
14890 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68  can be any of th
148a0 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20  e names defined 
148b0 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  in the [CREATE T
148c0 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
148d0 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  or one of the fo
148e0 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20  llowing special 
148f0 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62  identifiers: "<b
14900 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62  >ROWID</b>",."<b
14910 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c  >OID</b>", or "<
14920 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a  b>_ROWID_</b>"..
14930 5e 54 68 65 73 65 20 73 70 65 63 69 61 6c 20 69  ^These special i
14940 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64  dentifiers all d
14950 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71  escribe the.uniq
14960 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28  ue integer key (
14970 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73  the [rowid]) ass
14980 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65  ociated with eve
14990 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79  ry .row of every
149a0 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65   table..^The spe
149b0 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
149c0 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74   only refer to t
149d0 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68  he row key if th
149e0 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
149f0 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20  .statement does 
14a00 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61  not define a rea
14a10 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68  l column with th
14a20 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68  e same name..^Th
14a30 65 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75  e rowid can be u
14a40 73 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72  sed anywhere a r
14a50 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61  egular.column ca
14a60 6e 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  n be used.</p>..
14a70 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73  <p>^A [SELECT] s
14a80 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73  tatement used as
14a90 20 65 69 74 68 65 72 20 61 20 73 63 61 6c 61 72   either a scalar
14aa0 20 73 75 62 71 75 65 72 79 20 6f 72 20 61 73 20   subquery or as 
14ab0 74 68 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20  the .right-hand 
14ac0 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
14ad0 2c 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53  , NOT IN or EXIS
14ae0 54 53 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  TS expression ma
14af0 79 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72  y contain .refer
14b00 65 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73  ences to columns
14b10 20 69 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75   in the outer qu
14b20 65 72 79 2e 20 53 75 63 68 20 61 20 73 75 62 71  ery. Such a subq
14b30 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73  uery is known as
14b40 0a 61 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75  .a correlated su
14b50 62 71 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65  bquery. ^A corre
14b60 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
14b70 73 20 72 65 65 76 61 6c 75 61 74 65 64 20 65 61  s reevaluated ea
14b80 63 68 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75  ch time.its resu
14b90 6c 74 20 69 73 20 72 65 71 75 69 72 65 64 2e 20  lt is required. 
14ba0 5e 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64  ^An uncorrelated
14bb0 20 73 75 62 71 75 65 72 79 20 69 73 20 65 76 61   subquery is eva
14bc0 6c 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65  luated only once
14bd0 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20  .and the result 
14be0 72 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73  reused as necess
14bf0 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ary...<tcl>hd_fr
14c00 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20  agment castexpr 
14c10 7b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  {CAST expression
14c20 7d 20 7b 43 41 53 54 7d 20 7b 63 61 73 74 7d 20  } {CAST} {cast} 
14c30 7b 43 41 53 54 20 6f 70 65 72 61 74 6f 72 7d 3c  {CAST operator}<
14c40 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65  /tcl>.<h3>CAST e
14c50 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a  xpressions</h3>.
14c60 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70 72 65  .<p>A CAST expre
14c70 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
14c80 6d 20 22 43 41 53 54 28 26 6c 74 3b 65 78 70 72  m "CAST(&lt;expr
14c90 26 67 74 3b 20 41 53 20 26 6c 74 3b 74 79 70 65  &gt; AS &lt;type
14ca0 2d 6e 61 6d 65 26 67 74 3b 29 22 0a 69 73 20 75  -name&gt;)".is u
14cb0 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  sed to convert t
14cc0 68 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b  he value of &lt;
14cd0 65 78 70 72 26 67 74 3b 20 74 6f 20 0a 61 20 64  expr&gt; to .a d
14ce0 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72 61 67  ifferent [storag
14cf0 65 20 63 6c 61 73 73 5d 20 73 70 65 63 69 66 69  e class] specifi
14d00 65 64 20 62 79 20 26 6c 74 3b 74 79 70 65 2d 6e  ed by &lt;type-n
14d10 61 6d 65 26 67 74 3b 2e 0a 5e 41 20 43 41 53 54  ame&gt;..^A CAST
14d20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 73   conversion is s
14d30 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 63 6f  imilar to the co
14d40 6e 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61  nversion that ta
14d50 6b 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61  kes.place when a
14d60 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74   [column affinit
14d70 79 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f  y] is applied to
14d80 20 61 20 76 61 6c 75 65 20 65 78 63 65 70 74 20   a value except 
14d90 74 68 61 74 20 77 69 74 68 0a 74 68 65 20 43 41  that with.the CA
14da0 53 54 20 6f 70 65 72 61 74 6f 72 20 74 68 65 20  ST operator the 
14db0 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61 79  conversion alway
14dc0 73 20 74 61 6b 65 73 20 70 6c 61 63 65 20 65 76  s takes place ev
14dd0 65 6e 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72  en if the conver
14de0 73 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20 69  sion.lossy and i
14df0 72 72 65 76 65 72 73 69 62 6c 65 2c 20 77 68 65  rreversible, whe
14e00 72 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66 69  reas column affi
14e10 6e 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67 65  nity only change
14e20 73 20 74 68 65 20 64 61 74 61 20 74 79 70 65 0a  s the data type.
14e30 6f 66 20 61 20 76 61 6c 75 65 20 69 66 20 74 68  of a value if th
14e40 65 20 63 68 61 6e 67 65 20 69 73 20 6c 6f 73 73  e change is loss
14e50 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72 73 69  less and reversi
14e60 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ble...<p>^If the
14e70 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78   value of &lt;ex
14e80 70 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c 20  pr&gt; is NULL, 
14e90 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
14ea0 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70 72  of the CAST.expr
14eb0 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e  ession is also N
14ec0 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ULL. ^Otherwise,
14ed0 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61   the storage cla
14ee0 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ss of the result
14ef0 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62  .is determined b
14f00 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 5b  y applying the [
14f10 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65 72 6d  rules for determ
14f20 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66  ining column aff
14f30 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20 26 6c  inity] to.the &l
14f40 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 2e  t;type-name&gt;.
14f50 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
14f60 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41  1>.<tr>.  <th> A
14f70 66 66 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74  ffinity of &lt;t
14f80 79 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c  ype-name&gt;.  <
14f90 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50  th> Conversion P
14fa0 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20  rocessing.<tr>. 
14fb0 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74   <td> NONE .  <t
14fc0 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61  d> ^Casting a va
14fd0 6c 75 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70  lue to a &lt;typ
14fe0 65 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20  e-name&gt; with 
14ff0 6e 6f 20 61 66 66 69 6e 69 74 79 20 63 61 75 73  no affinity caus
15000 65 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a  es the value to.
15010 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69    be converted i
15020 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61  nto a BLOB.  ^Ca
15030 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20  sting to a BLOB 
15040 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73  consists of firs
15050 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20  t casting.  the 
15060 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e  value to TEXT in
15070 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20   the [encoding] 
15080 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
15090 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e  connection, then
150a0 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  .  interpreting 
150b0 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79  the resulting by
150c0 74 65 20 73 65 71 75 65 6e 63 65 20 61 73 20 61  te sequence as a
150d0 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66   BLOB instead of
150e0 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a   as TEXT...<tr>.
150f0 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74    <td> TEXT.  <t
15100 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c  d> ^To cast a BL
15110 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54  OB value to TEXT
15120 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  , the sequence o
15130 66 20 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b  f bytes that mak
15140 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20  e up the.  BLOB 
15150 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
15160 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75  s text encoded u
15170 73 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  sing the databas
15180 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70  e encoding..  <p
15190 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e  >.   ^Casting an
151a0 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
151b0 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54   value into TEXT
151c0 20 72 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c   renders the val
151d0 75 65 20 61 73 20 69 66 20 76 69 61 20 0a 20 20  ue as if via .  
151e0 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69    [sqlite3_snpri
151f0 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20 74 68  ntf()] except th
15200 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  at the resulting
15210 20 54 45 58 54 20 75 73 65 73 20 74 68 65 20 5b   TEXT uses the [
15220 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20  encoding] of.   
15230 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
15240 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a  nnection...<tr>.
15250 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74    <td> REAL.  <t
15260 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  d> ^When casting
15270 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
15280 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c   a REAL, the val
15290 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76  ue is first conv
152a0 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20  erted to.       
152b0 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70   TEXT..       <p
152c0 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61  >^When casting a
152d0 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52   TEXT value to R
152e0 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74  EAL, the longest
152f0 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78   possible prefix
15300 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20   of.        the 
15310 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
15320 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
15330 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69   a real number i
15340 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
15350 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58  .        the TEX
15360 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  T value and the 
15370 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65  remainder ignore
15380 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20  d. ^Any leading 
15390 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20  spaces in the.  
153a0 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65        TEXT value
153b0 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65   are ignored whe
153c0 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f  n converging fro
153d0 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20  m TEXT to REAL. 
153e0 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a 20 20  ^(If there is.  
153f0 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20        no prefix 
15400 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65  that can be inte
15410 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61  rpreted as a rea
15420 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  l number, the re
15430 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20  sult of the.    
15440 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69      conversion i
15450 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20  s 0.0.)^..<tr>. 
15460 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20   <td> INTEGER.  
15470 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69  <td> ^When casti
15480 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20  ng a BLOB value 
15490 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20  to INTEGER, the 
154a0 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63  value is first c
154b0 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20  onverted to.    
154c0 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20      TEXT..      
154d0 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e   <p>^When castin
154e0 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74  g a TEXT value t
154f0 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c  o INTEGER, the l
15500 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  ongest possible 
15510 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20  prefix of.      
15520 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74    the value that
15530 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
15540 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
15550 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72  r number is extr
15560 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20  acted from.     
15570 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75     the TEXT valu
15580 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
15590 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e  der ignored. ^An
155a0 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73  y leading spaces
155b0 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20   in the.        
155c0 54 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20  TEXT value when 
155d0 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20  converting from 
155e0 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20  TEXT to INTEGER 
155f0 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66  are ignored. ^If
15600 20 74 68 65 72 65 0a 20 20 20 20 20 20 20 20 69   there.        i
15610 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74  s no prefix that
15620 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
15630 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
15640 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  r number, the re
15650 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20  sult.        of 
15660 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
15670 73 20 30 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e  s 0...      <p>^
15680 41 20 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c  A cast of a REAL
15690 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49   value into an I
156a0 4e 54 45 47 45 52 20 72 65 73 75 6c 74 73 20 69  NTEGER results i
156b0 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20  n the integer.  
156c0 20 20 20 20 62 65 74 77 65 65 6e 20 74 68 65 20      between the 
156d0 52 45 41 4c 20 76 61 6c 75 65 20 61 6e 64 20 7a  REAL value and z
156e0 65 72 6f 20 74 68 61 74 20 69 73 20 63 6c 6f 73  ero that is clos
156f0 65 73 74 20 74 6f 20 74 68 65 20 52 45 41 4c 20  est to the REAL 
15700 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49 66  value..      ^If
15710 20 61 20 52 45 41 4c 20 69 73 20 67 72 65 61 74   a REAL is great
15720 65 72 20 74 68 61 6e 20 74 68 65 20 67 72 65 61  er than the grea
15730 74 65 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69  test possible si
15740 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67  gned.      integ
15750 65 72 20 28 2b 39 32 32 33 33 37 32 30 33 36 38  er (+92233720368
15760 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
15770 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
15780 20 67 72 65 61 74 65 73 74 20 70 6f 73 73 69 62   greatest possib
15790 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20  le.      signed 
157a0 69 6e 74 65 67 65 72 20 61 6e 64 20 69 66 20 74  integer and if t
157b0 68 65 20 52 45 41 4c 20 69 73 20 6c 65 73 73 20  he REAL is less 
157c0 74 68 61 6e 20 74 68 65 20 6c 65 61 73 74 20 70  than the least p
157d0 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20  ossible signed. 
157e0 20 20 20 20 20 69 6e 74 65 67 65 72 20 28 2d 39       integer (-9
157f0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
15800 30 38 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  08) then the res
15810 75 6c 74 20 69 73 20 74 68 65 20 6c 65 61 73 74  ult is the least
15820 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20   possible.      
15830 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a  signed integer..
15840 0a 20 20 20 20 20 20 3c 70 3e 50 72 69 6f 72 20  .      <p>Prior 
15850 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  to SQLite versio
15860 6e 20 33 2e 38 2e 32 2c 20 63 61 73 74 69 6e 67  n 3.8.2, casting
15870 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20 67 72   a REAL value gr
15880 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20 20 20  eater than.     
15890 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37   +92233720368547
158a0 37 35 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e 20  75807.0 into an 
158b0 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74 65 64  integer resulted
158c0 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65 67   in the most neg
158d0 61 74 69 76 65 0a 20 20 20 20 20 20 69 6e 74 65  ative.      inte
158e0 67 65 72 2c 20 2d 39 32 32 33 33 37 32 30 33 36  ger, -9223372036
158f0 38 35 34 37 37 35 38 30 38 2e 20 20 54 68 69 73  854775808.  This
15900 20 62 65 68 61 76 69 6f 72 20 77 61 73 20 6d 65   behavior was me
15910 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65 20 74  ant to emulate t
15920 68 65 0a 20 20 20 20 20 20 62 65 68 61 76 69 6f  he.      behavio
15930 72 20 6f 66 20 78 38 36 2f 78 36 34 20 68 61 72  r of x86/x64 har
15940 64 77 61 72 65 20 77 68 65 6e 20 64 6f 69 6e 67  dware when doing
15950 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
15960 63 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  cast...<tr>.  <t
15970 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64  d> NUMERIC.  <td
15980 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58  > ^Casting a TEX
15990 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20  T or BLOB value 
159a0 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72  into NUMERIC fir
159b0 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64  st does a forced
159c0 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  .   conversion i
159d0 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65  nto REAL but the
159e0 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72  n further conver
159f0 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  ts the result in
15a00 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20  to INTEGER if.  
15a10 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
15a20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d   conversion from
15a30 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52   REAL to INTEGER
15a40 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64   is lossless and
15a50 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20   reversible..   
15a60 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
15a70 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69   context in SQLi
15a80 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d  te where the NUM
15a90 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52  ERIC and INTEGER
15aa0 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20   [affinities].  
15ab0 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e   behave differen
15ac0 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73  tly..   <p> ^Cas
15ad0 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49  ting a REAL or I
15ae0 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20  NTEGER value to 
15af0 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d  NUMERIC is a no-
15b00 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65  op, even if a re
15b10 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c  al.   value coul
15b20 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  d be losslessly 
15b30 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
15b40 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a  integer...</tr>.
15b50 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e  .</table>..<p>^N
15b60 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73  ote that the res
15b70 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67  ult from casting
15b80 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61   any non-BLOB va
15b90 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42  lue into a .BLOB
15ba0 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
15bb0 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
15bc0 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
15bd0 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75   a non-BLOB valu
15be0 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  e.may be differe
15bf0 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  nt depending on 
15c00 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61  whether the data
15c10 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20  base [encoding] 
15c20 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36  is UTF-8,.UTF-16
15c30 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e  be, or UTF-16le.
15c40 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
15c50 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20  ent booleanexpr 
15c60 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  {boolean express
15c70 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42  ion}</tcl>.<h3>B
15c80 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f  oolean Expressio
15c90 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ns</h3>..<p>The 
15ca0 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61  SQL language fea
15cb0 74 75 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f  tures several co
15cc0 6e 74 65 78 74 73 20 77 68 65 72 65 20 61 6e 20  ntexts where an 
15cd0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65  expression is .e
15ce0 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
15cf0 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65   result converte
15d00 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28  d to a boolean (
15d10 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76  true or false) v
15d20 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74  alue. These.cont
15d30 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c  exts are:..  <ul
15d40 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57  >.    <li> the W
15d50 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61  HERE clause of a
15d60 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20   SELECT, UPDATE 
15d70 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  or DELETE statem
15d80 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
15d90 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  e ON or USING cl
15da0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69  ause of a join i
15db0 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
15dc0 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
15dd0 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
15de0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
15df0 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
15e00 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
15e10 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67   of an SQL trigg
15e20 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e  er, and.    <li>
15e30 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
15e40 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73   or clauses of s
15e50 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65 73 73  ome CASE express
15e60 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c  ions..  </ul>..<
15e70 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74  p>^(To convert t
15e80 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e  he results of an
15e90 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20   SQL expression 
15ea0 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  to a boolean val
15eb0 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74  ue, SQLite.first
15ec0 20 63 61 73 74 73 20 74 68 65 20 72 65 73 75 6c   casts the resul
15ed0 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76  t to a NUMERIC v
15ee0 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65  alue in the same
15ef0 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54   way as a .[CAST
15f00 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20   expression]. A 
15f10 4e 55 4c 4c 20 6f 72 20 7a 65 72 6f 20 76 61 6c  NULL or zero val
15f20 75 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75  ue (integer valu
15f30 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75  e 0 or real valu
15f40 65 20 30 2e 30 29 20 69 73 0a 63 6f 6e 73 69 64  e 0.0) is.consid
15f50 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65  ered to be false
15f60 2e 20 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  . All other valu
15f70 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
15f80 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28  d true.)^..<p>^(
15f90 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
15fa0 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e   values NULL, 0.
15fb0 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20  0, 0, 'english' 
15fc0 61 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20  and '0' are all 
15fd0 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65  considered.to be
15fe0 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75   false.)^ ^(Valu
15ff0 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20  es 1, 1.0, 0.1, 
16000 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69  -0.1 and '1engli
16010 73 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72  sh' are consider
16020 65 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29  ed to .be true.)
16030 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73  ^..<h3>Functions
16040 3c 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b  </h3>.<p>^Both [
16050 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d  corefunc|simple]
16060 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67   and [aggfunc|ag
16070 67 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f  gregate] functio
16080 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ns are supported
16090 2e 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74  ..(For presentat
160a0 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69  ion purposes, si
160b0 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  mple functions a
160c0 72 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69  re further subdi
160d0 76 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65  vided into.[core
160e0 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63  func | core func
160f0 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65  tions] and [date
16100 66 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65  func | date-time
16110 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41   functions].).^A
16120 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
16130 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
16140 61 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  any expression. 
16150 20 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f   ^Simple functio
16160 6e 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75  ns return.a resu
16170 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62  lt immediately b
16180 61 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e  ased on their in
16190 70 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74  puts.  ^Aggregat
161a0 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20  e functions.may 
161b0 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20  only be used in 
161c0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
161d0 6e 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  nt.  ^Aggregate 
161e0 66 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74  functions comput
161f0 65 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61  e.their result a
16200 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f  cross all rows o
16210 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
16220 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 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 23 23 0a 53 65 63 74  ###########.Sect
16280 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69  ion {Core Functi
16290 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a  ons} corefunc {*
162a0 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66  corefunc}.proc f
162b0 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b  uncdef {syntax k
162c0 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a  eywords desc} {.
162d0 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d    hd_puts {<tr>}
162e0 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
162f0 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69  \s+} [string tri
16300 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20  m $syntax] {<br 
16310 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  />} syntax.  reg
16320 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a  sub -all {\(([^*
16330 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20  )]+)\)} $syntax 
16340 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79  {(<i>\1</i>)} sy
16350 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61  ntax.  regsub -a
16360 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b  ll {,} $syntax {
16370 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78  </i>,<i>} syntax
16380 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
16390 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24  <i>\.\.\.</i>} $
163a0 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e  syntax {...} syn
163b0 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20 22 3c  tax.  hd_puts "<
163c0 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c  td valign=\"top\
163d0 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74 5c  " align=\"right\
163e0 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c 22 3e  " width=\"120\">
163f0 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68  ".  if {[llength
16400 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20   $keywords]==0} 
16410 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61  {.    regexp {[a
16420 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e  -z_]+} $syntax n
16430 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d  ame.    hd_fragm
16440 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65  ent $name *$name
16450 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20   "${name}() SQL 
16460 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c  function".  } el
16470 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61  se {.    set fra
16480 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b  gname [lindex $k
16490 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72  eywords 0].    r
164a0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d  egsub -all {[^a-
164b0 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d  z]} $fragname {}
164c0 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64   fragname.    hd
164d0 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e  _fragment $fragn
164e0 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f  ame.    eval hd_
164f0 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67  keywords [string
16500 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b   map {\n { }} $k
16510 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68  eywords].  }.  h
16520 64 5f 70 75 74 73 20 22 24 73 79 6e 74 61 78 3c  d_puts "$syntax<
16530 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74 73 20  /td>".  hd_puts 
16540 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  {<td valign="top
16550 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65  ">}.  hd_resolve
16560 20 24 64 65 73 63 0a 20 20 68 64 5f 70 75 74 73   $desc.  hd_puts
16570 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a   {</td></tr>}.}.
16580 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63  </tcl>..<p>The c
16590 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68  ore functions sh
165a0 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76  own below are av
165b0 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
165c0 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c  lt. .[datefunc |
165d0 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69 6d 65   Date &amp; Time
165e0 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 0a   functions] and.
165f0 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72 65  [aggfunc | aggre
16600 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20  gate functions] 
16610 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73  are documented s
16620 65 70 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61  eparately.  An.a
16630 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64  pplication may d
16640 65 66 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c  efine additional
16650 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74  .functions writt
16660 65 6e 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65  en in C and adde
16670 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
16680 65 20 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74  e engine using.t
16690 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  he [sqlite3_crea
166a0 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41  te_function()] A
166b0 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  PI.</p>..<table 
166c0 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
166d0 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66  ding=10>.<tcl>.f
166e0 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29 7d 20  uncdef {abs(X)} 
166f0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62 73 28  {} {.  ^The abs(
16700 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
16710 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75 74 65  rns the absolute
16720 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6e 75   value of the nu
16730 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65 6e 74  meric.  argument
16740 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72 65 74   X.  ^Abs(X) ret
16750 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58 20 69  urns NULL if X i
16760 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41 62 73  s NULL. .  ^(Abs
16770 28 58 29 20 72 65 74 75 72 6e 20 30 2e 30 20 69  (X) return 0.0 i
16780 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20  f X is a string 
16790 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61 74 20 63  or blob.  that c
167a0 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
167b0 65 64 20 74 6f 20 61 20 6e 75 6d 65 72 69 63 20  ed to a numeric 
167c0 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20 58 20  value.)^  ^If X 
167d0 69 73 20 74 68 65 20 0a 20 20 69 6e 74 65 67 65  is the .  intege
167e0 72 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  r -9223372036854
167f0 37 37 35 38 30 38 20 74 68 65 6e 20 61 62 73 28  775808 then abs(
16800 58 29 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74  X) throws an int
16810 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20  eger overflow.  
16820 65 72 72 6f 72 20 73 69 6e 63 65 20 74 68 65 72  error since ther
16830 65 20 69 73 20 6e 6f 20 65 71 75 69 76 61 6c 65  e is no equivale
16840 6e 74 20 70 6f 73 69 74 69 76 65 20 36 34 2d 62  nt positive 64-b
16850 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e  it two complemen
16860 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63  t value..}..func
16870 64 65 66 20 7b 63 68 61 6e 67 65 73 28 29 7d 20  def {changes()} 
16880 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e  {} {.  ^The chan
16890 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ges() function r
168a0 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
168b0 72 20 6f 66 20 64 61 74 61 62 61 73 65 20 72 6f  r of database ro
168c0 77 73 20 74 68 61 74 20 77 65 72 65 20 63 68 61  ws that were cha
168d0 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73 65 72 74  nged.  or insert
168e0 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79  ed or deleted by
168f0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
16900 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53  ly completed INS
16910 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f  ERT, DELETE,.  o
16920 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
16930 6e 74 2c 20 65 78 63 6c 75 73 69 76 65 20 6f 66  nt, exclusive of
16940 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c   statements in l
16950 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72 69 67 67  ower-level trigg
16960 65 72 73 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e  ers..  ^The chan
16970 67 65 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ges() SQL functi
16980 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
16990 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69  around the [sqli
169a0 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20  te3_changes()]. 
169b0 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20   C/C++ function 
169c0 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77  and hence follow
169d0 73 20 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73  s the same rules
169e0 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68   for counting ch
169f0 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65  anges..}..funcde
16a00 66 20 7b 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e  f {char(X1,X2,..
16a10 2e 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28  .,XN)} {} {.  ^(
16a20 54 68 65 20 63 68 61 72 28 58 31 2c 58 32 2c 2e  The char(X1,X2,.
16a30 2e 2e 2c 58 4e 29 20 66 75 6e 63 74 69 6f 6e 20  ..,XN) function 
16a40 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
16a50 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 63 68 61   composed of cha
16a60 72 61 63 74 65 72 73 20 68 61 76 69 6e 67 20 74  racters having t
16a70 68 65 0a 20 20 20 75 6e 69 63 6f 64 65 20 63 6f  he.   unicode co
16a80 64 65 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20  de point values 
16a90 6f 66 20 69 6e 74 65 67 65 72 73 20 58 31 20 74  of integers X1 t
16aa0 68 72 6f 75 67 68 20 58 4e 2c 20 72 65 73 70 65  hrough XN, respe
16ab0 63 74 69 76 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75  ctively.)^.}..fu
16ac0 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28  ncdef {coalesce(
16ad0 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20  X,Y,...)} {} {. 
16ae0 20 5e 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29   ^The coalesce()
16af0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
16b00 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20  s a copy of its 
16b10 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61  first non-NULL a
16b20 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55  rgument, or.  NU
16b30 4c 4c 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65  LL if all argume
16b40 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e  nts are NULL.  ^
16b50 43 6f 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20  Coalesce() must 
16b60 68 61 76 65 20 61 74 20 6c 65 61 73 74 20 0a 20  have at least . 
16b70 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a   2 arguments..}.
16b80 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58  .funcdef {glob(X
16b90 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
16ba0 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74   glob(X,Y) funct
16bb0 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
16bc0 74 20 74 6f 20 74 68 65 0a 20 20 65 78 70 72 65  t to the.  expre
16bd0 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42  ssion "<b>Y GLOB
16be0 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20   X</b>"..  Note 
16bf0 74 68 61 74 20 74 68 65 20 58 20 61 6e 64 20 59  that the X and Y
16c00 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 72   arguments are r
16c10 65 76 65 72 73 65 64 20 69 6e 20 74 68 65 20 67  eversed in the g
16c20 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  lob() function. 
16c30 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65   relative to the
16c40 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70   infix [GLOB] op
16c50 65 72 61 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68  erator..  ^If th
16c60 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
16c70 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e  e_function()] in
16c80 74 65 72 66 61 63 65 20 69 73 20 75 73 65 64 20  terface is used 
16c90 74 6f 0a 20 20 6f 76 65 72 72 69 64 65 20 74 68  to.  override th
16ca0 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63  e glob(X,Y) func
16cb0 74 69 6f 6e 20 77 69 74 68 20 61 6e 20 61 6c 74  tion with an alt
16cc0 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65  ernative impleme
16cd0 6e 74 61 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74  ntation then.  t
16ce0 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74  he [GLOB] operat
16cf0 6f 72 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74  or will invoke t
16d00 68 65 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69  he alternative i
16d10 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d  mplementation..}
16d20 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c  ..funcdef {ifnul
16d30 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  l(X,Y)} {} {.  ^
16d40 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e  The ifnull() fun
16d50 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
16d60 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72 73  copy of its firs
16d70 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d  t non-NULL argum
16d80 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69  ent, or.  NULL i
16d90 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73  f both arguments
16da0 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e   are NULL.  ^Ifn
16db0 75 6c 6c 28 29 20 6d 75 73 74 20 68 61 76 65 20  ull() must have 
16dc0 65 78 61 63 74 6c 79 20 32 20 61 72 67 75 6d 65  exactly 2 argume
16dd0 6e 74 73 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75  nts..  ^The ifnu
16de0 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  ll() function is
16df0 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b   equivalent to [
16e00 63 6f 61 6c 65 73 63 65 28 29 5d 20 77 69 74 68  coalesce()] with
16e10 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a   two arguments..
16e20 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 6e 73 74  }..funcdef {inst
16e30 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  r(X,Y)} {} {.  ^
16e40 54 68 65 20 69 6e 73 74 72 28 58 2c 59 29 20 66  The instr(X,Y) f
16e50 75 6e 63 74 69 6f 6e 20 66 69 6e 64 73 20 74 68  unction finds th
16e60 65 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e  e first occurren
16e70 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20 77  ce of string Y w
16e80 69 74 68 69 6e 20 0a 20 20 73 74 72 69 6e 67 20  ithin .  string 
16e90 58 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  X and returns th
16ea0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 72 69 6f  e number of prio
16eb0 72 20 63 68 61 72 61 63 74 65 72 73 20 70 6c 75  r characters plu
16ec0 73 20 31 2c 20 6f 72 20 30 20 69 66 0a 20 20 59  s 1, or 0 if.  Y
16ed0 20 69 73 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e   is nowhere foun
16ee0 64 20 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 4f  d within X..  ^O
16ef0 72 2c 20 69 66 20 58 20 61 6e 64 20 59 20 61 72  r, if X and Y ar
16f00 65 20 62 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68  e both BLOBs, th
16f10 65 6e 20 69 6e 73 74 72 28 58 2c 59 29 20 72 65  en instr(X,Y) re
16f20 74 75 72 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65  turns one.  more
16f30 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72   than the number
16f40 20 62 79 74 65 73 20 70 72 69 6f 72 20 74 6f 20   bytes prior to 
16f50 74 68 65 20 66 69 72 73 74 20 6f 63 63 75 72 72  the first occurr
16f60 65 6e 63 65 20 6f 66 20 59 2c 20 6f 72 20 30 20  ence of Y, or 0 
16f70 69 66 0a 20 20 59 20 64 6f 65 73 20 6e 6f 74 20  if.  Y does not 
16f80 6f 63 63 75 72 20 61 6e 79 77 68 65 72 65 20 77  occur anywhere w
16f90 69 74 68 69 6e 20 58 2e 0a 20 20 5e 49 66 20 62  ithin X..  ^If b
16fa0 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 58 20  oth arguments X 
16fb0 61 6e 64 20 59 20 74 6f 20 69 6e 73 74 72 28 58  and Y to instr(X
16fc0 2c 59 29 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c  ,Y) are non-NULL
16fd0 20 61 6e 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f   and are not BLO
16fe0 42 73 0a 20 20 74 68 65 6e 20 62 6f 74 68 20 61  Bs.  then both a
16ff0 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  re interpreted a
17000 73 20 73 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66  s strings..  ^If
17010 20 65 69 74 68 65 72 20 58 20 6f 72 20 59 20 61   either X or Y a
17020 72 65 20 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72  re NULL in instr
17030 28 58 2c 59 29 20 74 68 65 6e 20 74 68 65 20 72  (X,Y) then the r
17040 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d  esult is NULL..}
17050 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65 78 28 58  ..funcdef {hex(X
17060 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68  )} {} {.  ^The h
17070 65 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e  ex() function in
17080 74 65 72 70 72 65 74 73 20 69 74 73 20 61 72 67  terprets its arg
17090 75 6d 65 6e 74 20 61 73 20 61 20 42 4c 4f 42 20  ument as a BLOB 
170a0 61 6e 64 20 72 65 74 75 72 6e 73 0a 20 20 61 20  and returns.  a 
170b0 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73 20  string which is 
170c0 74 68 65 20 75 70 70 65 72 2d 63 61 73 65 20 68  the upper-case h
170d0 65 78 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65  exadecimal rende
170e0 72 69 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e 74  ring of the cont
170f0 65 6e 74 20 6f 66 0a 20 20 74 68 61 74 20 62 6c  ent of.  that bl
17100 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ob..}..funcdef {
17110 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
17120 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  d()} {} {.  ^The
17130 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77   last_insert_row
17140 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  id() function re
17150 74 75 72 6e 73 20 74 68 65 20 5b 52 4f 57 49 44  turns the [ROWID
17160 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61 73 74 20  ].  of the last 
17170 72 6f 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20  row insert from 
17180 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
17190 6e 65 63 74 69 6f 6e 20 77 68 69 63 68 20 69 6e  nection which in
171a0 76 6f 6b 65 64 20 74 68 65 0a 20 20 66 75 6e 63  voked the.  func
171b0 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73  tion..  ^The las
171c0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
171d0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
171e0 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
171f0 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  d the.  [sqlite3
17200 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
17210 69 64 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65  id()] C/C++ inte
17220 72 66 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  rface function..
17230 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67  }..funcdef {leng
17240 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46  th(X)} {} {.  ^F
17250 6f 72 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75  or a string valu
17260 65 20 58 2c 20 74 68 65 20 6c 65 6e 67 74 68 28  e X, the length(
17270 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
17280 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
17290 66 20 0a 20 20 63 68 61 72 61 63 74 65 72 73 20  f .  characters 
172a0 28 6e 6f 74 20 62 79 74 65 73 29 20 69 6e 20 58  (not bytes) in X
172b0 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69   prior to the fi
172c0 72 73 74 20 4e 55 4c 20 63 68 61 72 61 63 74 65  rst NUL characte
172d0 72 2e 0a 20 20 53 69 6e 63 65 20 53 51 4c 69 74  r..  Since SQLit
172e0 65 20 73 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74  e strings do not
172f0 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69   normally contai
17300 6e 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73  n NUL characters
17310 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 0a  , the length(X).
17320 20 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20    function will 
17330 75 73 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74  usually return t
17340 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
17350 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
17360 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20   the string X.. 
17370 20 5e 46 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c   ^For a blob val
17380 75 65 20 58 2c 20 6c 65 6e 67 74 68 28 58 29 20  ue X, length(X) 
17390 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
173a0 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
173b0 68 65 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58  he blob..  ^If X
173c0 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65   is NULL then le
173d0 6e 67 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e  ngth(X) is NULL.
173e0 0a 20 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65  .  ^If X is nume
173f0 72 69 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28  ric then length(
17400 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c  X) returns the l
17410 65 6e 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e  ength of a strin
17420 67 0a 20 20 72 65 70 72 65 73 65 6e 74 61 74 69  g.  representati
17430 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  on of X..}..func
17440 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c  def {like(X,Y) l
17450 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b  ike(X,Y,Z)} {} {
17460 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66  .  ^The like() f
17470 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
17480 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
17490 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20  .  "<b>Y LIKE X 
174a0 26 23 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39  &#91;ESCAPE Z&#9
174b0 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69  3;</b>" expressi
174c0 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f  on. .  ^If the o
174d0 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63  ptional ESCAPE c
174e0 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
174f0 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b  , then the.  lik
17500 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  e() function is 
17510 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72  invoked with thr
17520 65 65 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e  ee arguments.  ^
17530 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73  Otherwise, it is
17540 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20  .  invoked with 
17550 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e  two arguments on
17560 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ly. Note that th
17570 65 20 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65  e X and Y parame
17580 74 65 72 73 20 61 72 65 0a 20 20 72 65 76 65 72  ters are.  rever
17590 73 65 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28  sed in the like(
175a0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74  ) function relat
175b0 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78  ive to the infix
175c0 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72   [LIKE] operator
175d0 2e 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65  ..  ^The [sqlite
175e0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
175f0 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63  n()] interface c
17600 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76  an be used to ov
17610 65 72 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b  erride the.  lik
17620 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  e() function and
17630 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65 20   thereby change 
17640 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
17650 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70   the.  [LIKE] op
17660 65 72 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76  erator.  When ov
17670 65 72 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b  erriding the lik
17680 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74  e() function, it
17690 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e   may be importan
176a0 74 0a 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20  t.  to override 
176b0 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64  both the two and
176c0 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20   three argument 
176d0 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20  versions of the 
176e0 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69  like() .  functi
176f0 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64  on. Otherwise, d
17700 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61  ifferent code ma
17710 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69  y be called to i
17720 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b  mplement the.  [
17730 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64  LIKE] operator d
17740 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
17750 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53  her or not an ES
17760 43 41 50 45 20 63 6c 61 75 73 65 20 77 61 73 20  CAPE clause was 
17770 0a 20 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a  .  specified..}.
17780 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c  ..funcdef {likel
17790 69 68 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b  ihood(X,Y)} {} {
177a0 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f  .  ^The likeliho
177b0 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  od(X,Y) function
177c0 20 72 65 74 75 72 6e 73 20 61 72 67 75 6d 65 6e   returns argumen
177d0 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20  t X unchanged.. 
177e0 20 5e 28 54 68 65 20 76 61 6c 75 65 20 59 20 69   ^(The value Y i
177f0 6e 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59  n likelihood(X,Y
17800 29 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61  ) must be a floa
17810 74 69 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74  ting point const
17820 61 6e 74 0a 20 20 62 65 74 77 65 65 6e 20 30 2e  ant.  between 0.
17830 30 20 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75  0 and 1.0, inclu
17840 73 69 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c  sive.)^.  ^The l
17850 69 6b 65 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e  ikelihood(X) fun
17860 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
17870 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
17880 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d  enerator.  optim
17890 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68 61  izes away so tha
178a0 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f  t it consumes no
178b0 20 43 50 55 20 63 79 63 6c 65 73 20 64 75 72 69   CPU cycles duri
178c0 6e 67 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74  ng run-time.  (t
178d0 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63  hat is, during c
178e0 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33  alls to [sqlite3
178f0 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68  _step()])..  ^Th
17900 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65  e purpose of the
17910 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29   likelihood(X,Y)
17920 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20   function is to 
17930 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20  provide a hint. 
17940 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c   to the query pl
17950 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61  anner that the a
17960 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62  rgument X is a b
17970 6f 6f 6c 65 61 6e 20 74 68 61 74 20 69 73 0a 20  oolean that is. 
17980 20 74 72 75 65 20 77 69 74 68 20 61 20 70 72 6f   true with a pro
17990 62 61 62 69 6c 69 74 79 20 6f 66 20 61 70 70 72  bability of appr
179a0 6f 78 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e  oximately Y..  ^
179b0 28 54 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58  (The [unlikely(X
179c0 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  )] function is s
179d0 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69  hort-hand for li
179e0 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32  kelihood(X,0.062
179f0 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66  5).)^.}..funcdef
17a00 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e   {load_extension
17a10 28 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  (X) load_extensi
17a20 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  on(X,Y)} {} {.  
17a30 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
17a40 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  ion(X,Y) functio
17a50 6e 20 6c 6f 61 64 73 20 5b 53 51 4c 69 74 65 20  n loads [SQLite 
17a60 65 78 74 65 6e 73 69 6f 6e 73 5d 20 6f 75 74 20  extensions] out 
17a70 6f 66 20 74 68 65 20 73 68 61 72 65 64 0a 20 20  of the shared.  
17a80 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d  library file nam
17a90 65 64 20 58 20 75 73 69 6e 67 20 74 68 65 20 65  ed X using the e
17aa0 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e  ntry point Y.  ^
17ab0 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f  The result of lo
17ac0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20  ad_extension(). 
17ad0 20 69 73 20 61 6c 77 61 79 73 20 61 20 4e 55 4c   is always a NUL
17ae0 4c 2e 20 20 5e 49 66 20 59 20 69 73 20 6f 6d 69  L.  ^If Y is omi
17af0 74 74 65 64 20 74 68 65 6e 20 74 68 65 20 64 65  tted then the de
17b00 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e  fault entry poin
17b10 74 20 6e 61 6d 65 20 69 73 20 75 73 65 64 2e 0a  t name is used..
17b20 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
17b30 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  nsion() function
17b40 20 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70   raises an excep
17b50 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65  tion if the exte
17b60 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f 0a 20  nsion fails to. 
17b70 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c   load or initial
17b80 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a  ize correctly...
17b90 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65    <p>^The load_e
17ba0 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74  xtension() funct
17bb0 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ion will fail if
17bc0 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61   the extension a
17bd0 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f  ttempts to .  mo
17be0 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61  dify or delete a
17bf0 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f  n SQL function o
17c00 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
17c10 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78  ence.  ^The.  ex
17c20 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20  tension can add 
17c30 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  new functions or
17c40 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
17c50 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74  nces, but cannot
17c60 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c  .  modify or del
17c70 65 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e  ete existing fun
17c80 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74  ctions or collat
17c90 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65  ing sequences be
17ca0 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75  cause.  those fu
17cb0 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63  nctions and/or c
17cc0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
17cd0 65 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64  es might be used
17ce0 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20   elsewhere.  in 
17cf0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75  the currently ru
17d00 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d  nning SQL statem
17d10 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e  ent.  To load an
17d20 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a   extension that.
17d30 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c    changes or del
17d40 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f  etes functions o
17d50 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
17d60 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20  ences, use the. 
17d70 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65   [sqlite3_load_e
17d80 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61  xtension()] C-la
17d90 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a  nguage API.</p>.
17da0 0a 20 20 3c 70 3e 46 6f 72 20 73 65 63 75 72 69  .  <p>For securi
17db0 74 79 20 72 65 61 73 6f 6e 73 2c 20 65 78 74 65  ty reasons, exte
17dc0 6e 73 69 6f 6e 20 6c 6f 61 64 65 64 20 69 73 20  nsion loaded is 
17dd0 74 75 72 6e 65 64 20 6f 66 66 20 62 79 20 64 65  turned off by de
17de0 66 61 75 6c 74 20 61 6e 64 20 6d 75 73 74 0a 20  fault and must. 
17df0 20 62 65 20 65 6e 61 62 6c 65 64 20 62 79 20 61   be enabled by a
17e00 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 5b   prior call to [
17e10 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
17e20 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d  oad_extension()]
17e30 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66  .</p>.}..funcdef
17e40 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b   {lower(X)} {} {
17e50 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72 28 58 29  .  ^The lower(X)
17e60 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17e70 73 20 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69  s a copy of stri
17e80 6e 67 20 58 20 77 69 74 68 20 61 6c 6c 20 41 53  ng X with all AS
17e90 43 49 49 20 63 68 61 72 61 63 74 65 72 73 0a 20  CII characters. 
17ea0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f   converted to lo
17eb0 77 65 72 20 63 61 73 65 2e 20 20 5e 54 68 65 20  wer case.  ^The 
17ec0 64 65 66 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e  default built-in
17ed0 20 6c 6f 77 65 72 28 29 20 66 75 6e 63 74 69 6f   lower() functio
17ee0 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53  n works.  for AS
17ef0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 6f  CII characters o
17f00 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61 73 65  nly.  To do case
17f10 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20   conversions on 
17f20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68 61 72  non-ASCII.  char
17f30 61 63 74 65 72 73 2c 20 6c 6f 61 64 20 74 68 65  acters, load the
17f40 20 49 43 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a   ICU extension..
17f50 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72 69  }..funcdef {ltri
17f60 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d  m(X) ltrim(X,Y)}
17f70 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72   {} {.  ^The ltr
17f80 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
17f90 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
17fa0 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
17fb0 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
17fc0 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
17fd0 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
17fe0 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64  rom the left sid
17ff0 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  e of X..  ^If th
18000 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
18010 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69 6d 28 58  omitted, ltrim(X
18020 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73  ) removes spaces
18030 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73   from the left s
18040 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66  ide.  of X..}..f
18050 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c  uncdef {max(X,Y,
18060 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46  ...)} {*maxCoreF
18070 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20  unc *max {max() 
18080 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  SQL function}} {
18090 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
180a0 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e  gument max() fun
180b0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
180c0 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20  e argument with 
180d0 74 68 65 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76  the .  maximum v
180e0 61 6c 75 65 2c 20 6f 72 20 72 65 74 75 72 6e 20  alue, or return 
180f0 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61 72 67 75  NULL if any argu
18100 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20  ment is NULL. . 
18110 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
18120 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74  ment max() funct
18130 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73  ion searches its
18140 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
18150 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20  left to right.  
18160 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
18170 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63  that defines a c
18180 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
18190 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
181a0 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63  collating.  func
181b0 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
181c0 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  ing comparisons.
181d0 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68    ^If none of th
181e0 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d  e arguments to m
181f0 61 78 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20  ax().  define a 
18200 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
18210 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e  on, then the BIN
18220 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ARY collating fu
18230 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  nction is used..
18240 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d    Note that <b>m
18250 61 78 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69  ax()</b> is a si
18260 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68  mple function wh
18270 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72  en.  it has 2 or
18280 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20   more arguments 
18290 62 75 74 20 6f 70 65 72 61 74 65 73 20 61 73 20  but operates as 
182a0 61 6e 0a 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63  an.  [minAggFunc
182b0 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e   | aggregate fun
182c0 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20  ction] if given 
182d0 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72  only a single ar
182e0 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64  gument..}..funcd
182f0 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29  ef {min(X,Y,...)
18300 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20  } {*minCoreFunc 
18310 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20  *min {min() SQL 
18320 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
18330 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65  The multi-argume
18340 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f  nt min() functio
18350 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
18360 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a  gument with the.
18370 20 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e    minimum value.
18380 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
18390 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e  gument min() fun
183a0 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69  ction searches i
183b0 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  ts arguments fro
183c0 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a  m left to right.
183d0 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e    for an argumen
183e0 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61  t that defines a
183f0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
18400 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61  ion and uses tha
18410 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75  t collating.  fu
18420 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
18430 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e  tring comparison
18440 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20  s.  ^If none of 
18450 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  the arguments to
18460 20 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20   min().  define 
18470 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
18480 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42  tion, then the B
18490 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
184a0 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
184b0 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62  ..  Note that <b
184c0 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20  >min()</b> is a 
184d0 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
184e0 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20  when.  it has 2 
184f0 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
18500 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61  s but operates a
18510 73 20 61 6e 20 0a 20 20 5b 6d 61 78 41 67 67 46  s an .  [maxAggF
18520 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20  unc | aggregate 
18530 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76  function] if giv
18540 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67  en.  only a sing
18550 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a  le argument..}..
18560 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28  funcdef {nullif(
18570 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
18580 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75  e nullif(X,Y) fu
18590 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 69  nction returns i
185a0 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  ts first argumen
185b0 74 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  t if the argumen
185c0 74 73 20 61 72 65 0a 20 20 64 69 66 66 65 72 65  ts are.  differe
185d0 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74  nt and NULL if t
185e0 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  he arguments are
185f0 20 74 68 65 20 73 61 6d 65 2e 20 20 5e 54 68 65   the same.  ^The
18600 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e   nullif(X,Y) fun
18610 63 74 69 6f 6e 0a 20 20 73 65 61 72 63 68 65 73  ction.  searches
18620 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66   its arguments f
18630 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
18640 74 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e  t for an argumen
18650 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61  t that defines a
18660 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  .  collating fun
18670 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74  ction and uses t
18680 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  hat collating fu
18690 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
186a0 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73  tring.  comparis
186b0 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69 74 68 65  ons.  ^If neithe
186c0 72 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75  r argument to nu
186d0 6c 6c 69 66 28 29 20 64 65 66 69 6e 65 73 20 61  llif() defines a
186e0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
186f0 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68 65 20 42  ion.  then the B
18700 49 4e 41 52 59 20 69 73 20 75 73 65 64 2e 0a 7d  INARY is used..}
18710 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72 69 6e 74  ..funcdef {print
18720 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d 20 7b  f(FORMAT,...)} {
18730 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70 72 69 6e  } {.  ^(The prin
18740 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 20 53  tf(FORMAT,...) S
18750 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b  QL function work
18760 73 20 6c 69 6b 65 20 74 68 65 20 5b 73 71 6c 69  s like the [sqli
18770 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 5d 20 43  te3_mprintf()] C
18780 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66 75 6e 63  -language.  func
18790 74 69 6f 6e 20 61 6e 64 20 74 68 65 20 70 72 69  tion and the pri
187a0 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 66  ntf() function f
187b0 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64  rom the standard
187c0 20 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a 20 20   C library.)^.  
187d0 54 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  The first argume
187e0 6e 74 20 69 73 20 61 20 66 6f 72 6d 61 74 20 73  nt is a format s
187f0 74 72 69 6e 67 20 74 68 61 74 20 73 70 65 63 69  tring that speci
18800 66 69 65 73 20 68 6f 77 20 74 6f 20 63 6f 6e 73  fies how to cons
18810 74 72 75 63 74 20 74 68 65 20 6f 75 74 70 75 74  truct the output
18820 0a 20 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20  .  string using 
18830 76 61 6c 75 65 73 20 74 61 6b 65 6e 20 66 72 6f  values taken fro
18840 6d 20 73 75 62 73 65 71 75 65 6e 74 20 61 72 67  m subsequent arg
18850 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20 74 68 65  uments.  ^If the
18860 20 46 4f 52 4d 41 54 20 61 72 67 75 6d 65 6e 74   FORMAT argument
18870 20 69 73 0a 20 20 6d 69 73 73 69 6e 67 20 6f 72   is.  missing or
18880 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
18890 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 20  esult is NULL.  
188a0 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61 74 20 69  ^The %n format i
188b0 73 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72  s silently ignor
188c0 65 64 20 61 6e 64 0a 20 20 64 6f 65 73 20 6e 6f  ed and.  does no
188d0 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20 61 72 67  t consume an arg
188e0 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20 25 70 20  ument.  ^The %p 
188f0 66 6f 72 6d 61 74 20 69 73 20 61 6e 20 61 6c 69  format is an ali
18900 61 73 20 66 6f 72 20 25 58 2e 20 20 5e 54 68 65  as for %X.  ^The
18910 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20 69 73 20   %z format.  is 
18920 69 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20  interchangeable 
18930 77 69 74 68 20 25 73 2e 20 20 5e 28 49 66 20 74  with %s.  ^(If t
18940 68 65 72 65 20 61 72 65 20 74 6f 6f 20 66 65 77  here are too few
18950 20 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 74 68   arguments in th
18960 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74 2c  e argument list,
18970 0a 20 20 6d 69 73 73 69 6e 67 20 61 72 67 75 6d  .  missing argum
18980 65 6e 74 73 20 61 72 65 20 61 73 73 75 6d 65 64  ents are assumed
18990 20 74 6f 20 68 61 76 65 20 61 20 4e 55 4c 4c 20   to have a NULL 
189a0 76 61 6c 75 65 2c 20 77 68 69 63 68 20 69 73 20  value, which is 
189b0 74 72 61 6e 73 6c 61 74 65 64 20 69 6e 74 6f 0a  translated into.
189c0 20 20 30 20 6f 72 20 30 2e 30 20 66 6f 72 20 6e    0 or 0.0 for n
189d0 75 6d 65 72 69 63 20 66 6f 72 6d 61 74 73 20 6f  umeric formats o
189e0 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  r an empty strin
189f0 67 20 66 6f 72 20 25 73 2e 29 5e 0a 7d 0a 20 20  g for %s.)^.}.  
18a00 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75 6f 74 65  ..funcdef {quote
18a10 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
18a20 20 71 75 6f 74 65 28 58 29 20 66 75 6e 63 74 69   quote(X) functi
18a30 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 74  on returns the t
18a40 65 78 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c 69  ext of an SQL li
18a50 74 65 72 61 6c 20 77 68 69 63 68 0a 20 20 69 73  teral which.  is
18a60 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74   the value of it
18a70 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61  s argument suita
18a80 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f  ble for inclusio
18a90 6e 20 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73 74  n into an SQL st
18aa0 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69  atement..  ^Stri
18ab0 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64  ngs are surround
18ac0 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f  ed by single-quo
18ad0 74 65 73 20 77 69 74 68 20 65 73 63 61 70 65 73  tes with escapes
18ae0 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f   on interior quo
18af0 74 65 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e  tes.  as needed.
18b00 20 20 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63    ^BLOBs are enc
18b10 6f 64 65 64 20 61 73 20 68 65 78 61 64 65 63 69  oded as hexadeci
18b20 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20 20  mal literals..  
18b30 5e 53 74 72 69 6e 67 73 20 77 69 74 68 20 65 6d  ^Strings with em
18b40 62 65 64 64 65 64 20 4e 55 4c 20 63 68 61 72 61  bedded NUL chara
18b50 63 74 65 72 73 20 63 61 6e 6e 6f 74 20 62 65 20  cters cannot be 
18b60 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 73  represented as s
18b70 74 72 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c 73  tring.  literals
18b80 20 69 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e 63   in SQL and henc
18b90 65 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 73  e the returned s
18ba0 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73  tring literal is
18bb0 20 74 72 75 6e 63 61 74 65 64 20 70 72 69 6f 72   truncated prior
18bc0 0a 20 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  .  to the first 
18bd0 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  NUL..}..funcdef 
18be0 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a  {random()} {} {.
18bf0 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29 20    ^The random() 
18c00 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
18c10 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d   a pseudo-random
18c20 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74 77 65   integer.  betwe
18c30 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  en -922337203685
18c40 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39 32 32  4775808 and +922
18c50 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
18c60 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61  ..}..funcdef {ra
18c70 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20  ndomblob(N)} {} 
18c80 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62  {.  ^The randomb
18c90 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20  lob(N) function 
18ca0 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65  return an N-byte
18cb0 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67   blob containing
18cc0 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20   pseudo-random. 
18cd0 20 62 79 74 65 73 2e 20 5e 49 66 20 4e 20 69 73   bytes. ^If N is
18ce0 20 6c 65 73 73 20 74 68 61 6e 20 31 20 74 68 65   less than 1 the
18cf0 6e 20 61 20 31 2d 62 79 74 65 20 72 61 6e 64 6f  n a 1-byte rando
18d00 6d 20 62 6c 6f 62 20 69 73 20 72 65 74 75 72 6e  m blob is return
18d10 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20  ed...  <p>Hint: 
18d20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61   applications ca
18d30 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61  n generate globa
18d40 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74  lly unique ident
18d50 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74  ifiers.  using t
18d60 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67  his function tog
18d70 65 74 68 65 72 20 77 69 74 68 20 5b 68 65 78 28  ether with [hex(
18d80 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77  )] and/or.  [low
18d90 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a  er()] like this:
18da0 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75  </p>..  <blockqu
18db0 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f  ote>.  hex(rando
18dc0 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f  mblob(16))<br></
18dd0 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28  br>.  lower(hex(
18de0 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29  randomblob(16)))
18df0 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  .  </blockquote>
18e00 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70  .}..funcdef {rep
18e10 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20  lace(X,Y,Z)} {} 
18e20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c 61 63 65  {.  ^The replace
18e30 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e  (X,Y,Z) function
18e40 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
18e50 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73  g formed by subs
18e60 74 69 74 75 74 69 6e 67 0a 20 20 73 74 72 69 6e  tituting.  strin
18e70 67 20 5a 20 66 6f 72 20 65 76 65 72 79 20 6f 63  g Z for every oc
18e80 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69  currence of stri
18e90 6e 67 20 59 20 69 6e 20 73 74 72 69 6e 67 20 58  ng Y in string X
18ea0 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d  .  ^The [BINARY]
18eb0 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  .  collating seq
18ec0 75 65 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f  uence is used fo
18ed0 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20  r comparisons.  
18ee0 5e 49 66 20 59 20 69 73 20 61 6e 20 65 6d 70 74  ^If Y is an empt
18ef0 79 0a 20 20 73 74 72 69 6e 67 20 74 68 65 6e 20  y.  string then 
18f00 72 65 74 75 72 6e 20 58 20 75 6e 63 68 61 6e 67  return X unchang
18f10 65 64 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f  ed.  ^If Z is no
18f20 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20  t initially.  a 
18f30 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 63 61  string, it is ca
18f40 73 74 20 74 6f 20 61 20 55 54 46 2d 38 20 73 74  st to a UTF-8 st
18f50 72 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 70 72  ring prior to pr
18f60 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e  ocessing..}..fun
18f70 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29 20 72  cdef {round(X) r
18f80 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  ound(X,Y)} {} {.
18f90 20 20 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c 59    ^The round(X,Y
18fa0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18fb0 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  ns a floating-po
18fc0 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20 72 6f  int.  value X ro
18fd0 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67 69 74  unded to Y digit
18fe0 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f  s to the right o
18ff0 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  f the decimal po
19000 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65 20 59  int..  ^If the Y
19010 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69   argument is omi
19020 74 74 65 64 2c 20 69 74 20 69 73 20 61 73 73 75  tted, it is assu
19030 6d 65 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a  med to be 0..}..
19040 66 75 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58  funcdef {rtrim(X
19050 29 20 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  ) rtrim(X,Y)} {}
19060 20 7b 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28   {.  ^The rtrim(
19070 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
19080 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
19090 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
190a0 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
190b0 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
190c0 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
190d0 20 74 68 65 20 72 69 67 68 74 20 73 69 64 65 20   the right side 
190e0 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20  of X..  ^If the 
190f0 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  Y argument is om
19100 69 74 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20  itted, rtrim(X) 
19110 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66  removes spaces f
19120 72 6f 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20  rom the right.  
19130 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75  side of X..}..fu
19140 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58  ncdef {soundex(X
19150 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
19160 6f 75 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69  oundex(X) functi
19170 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
19180 69 6e 67 20 74 68 61 74 20 69 73 20 74 68 65 20  ing that is the 
19190 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67  soundex encoding
191a0 20 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e   .  of the strin
191b0 67 20 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69  g X..  ^The stri
191c0 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72 65 74  ng "?000" is ret
191d0 75 72 6e 65 64 20 69 66 20 74 68 65 20 61 72 67  urned if the arg
191e0 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72  ument is NULL or
191f0 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41   contains.  no A
19200 53 43 49 49 20 61 6c 70 68 61 62 65 74 69 63 20  SCII alphabetic 
19210 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28  characters..  ^(
19220 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
19230 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51   omitted from SQ
19240 4c 69 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e  Lite by default.
19250 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76  .  It is only av
19260 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b  ailable if the [
19270 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20  SQLITE_SOUNDEX] 
19280 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
19290 69 6f 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68  ion.  is used wh
192a0 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62 75 69  en SQLite is bui
192b0 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lt.)^.}..funcdef
192c0 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65   {sqlite_compile
192d0 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b  option_get(N)} {
192e0 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74  } {.  ^The sqlit
192f0 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
19300 67 65 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69  get() SQL functi
19310 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
19320 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71  around the.  [sq
19330 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
19340 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b  ion_get()] C/C++
19350 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68   function..  ^Th
19360 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
19370 6e 73 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70  ns the N-th comp
19380 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
19390 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51  used to build SQ
193a0 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69  Lite.  or NULL i
193b0 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61  f N is out of ra
193c0 6e 67 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 74  nge.  See also t
193d0 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69  he [compile_opti
193e0 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a  ons pragma]..}..
193f0 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
19400 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
19410 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ed(X)} {} {.  ^T
19420 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  he sqlite_compil
19430 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 20 53  eoption_used() S
19440 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  QL function is a
19450 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
19460 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63  the.  [sqlite3_c
19470 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65  ompileoption_use
19480 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74  d()] C/C++ funct
19490 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65  ion..  ^When the
194a0 20 61 72 67 75 6d 65 6e 74 20 58 20 74 6f 20 73   argument X to s
194b0 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
194c0 69 6f 6e 5f 75 73 65 64 28 58 29 20 69 73 20 61  ion_used(X) is a
194d0 20 73 74 72 69 6e 67 20 77 68 69 63 68 0a 20 20   string which.  
194e0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
194f0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
19500 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74 69  tion, this routi
19510 6e 65 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  ne returns true 
19520 28 31 29 20 6f 72 0a 20 20 66 61 6c 73 65 20 28  (1) or.  false (
19530 30 29 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  0) depending on 
19540 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
19550 68 61 74 20 6f 70 74 69 6f 6e 20 77 61 73 20 75  hat option was u
19560 73 65 64 20 64 75 72 69 6e 67 20 74 68 65 0a 20  sed during the. 
19570 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64   build..}..funcd
19580 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63  ef {sqlite_sourc
19590 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  e_id()} {} {.  ^
195a0 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75 72 63  The sqlite_sourc
195b0 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  e_id() function 
195c0 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
195d0 20 74 68 61 74 20 69 64 65 6e 74 69 66 69 65 73   that identifies
195e0 20 74 68 65 0a 20 20 73 70 65 63 69 66 69 63 20   the.  specific 
195f0 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73  version of the s
19600 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61 74 20  ource code that 
19610 77 61 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c  was used to buil
19620 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c  d the SQLite.  l
19630 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20 73 74  ibrary.  ^The st
19640 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79  ring returned by
19650 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69   sqlite_source_i
19660 64 28 29 20 62 65 67 69 6e 73 20 77 69 74 68 0a  d() begins with.
19670 20 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74    the date and t
19680 69 6d 65 20 74 68 61 74 20 74 68 65 20 73 6f 75  ime that the sou
19690 72 63 65 20 63 6f 64 65 20 77 61 73 20 63 68 65  rce code was che
196a0 63 6b 65 64 20 69 6e 20 61 6e 64 20 69 73 20 66  cked in and is f
196b0 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20 53  ollows by.  an S
196c0 48 41 31 20 68 61 73 68 20 74 68 61 74 20 75 6e  HA1 hash that un
196d0 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65  iquely identifie
196e0 73 20 74 68 65 20 73 6f 75 72 63 65 20 74 72 65  s the source tre
196f0 65 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69  e.  ^This functi
19700 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77  on is.  an SQL w
19710 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
19720 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63  e [sqlite3_sourc
19730 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61  eid()] C interfa
19740 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ce..}..funcdef {
19750 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
19760 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
19770 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66  lite_version() f
19780 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
19790 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69  the version stri
197a0 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ng for the SQLit
197b0 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68 61 74  e.  library that
197c0 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54   is running.  ^T
197d0 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
197e0 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72  an SQL.  wrapper
197f0 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c   around the [sql
19800 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28  ite3_libversion(
19810 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a  )] C-interface..
19820 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73  }..funcdef {subs
19830 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72  tr(X,Y,Z) substr
19840 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
19850 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29  he substr(X,Y,Z)
19860 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
19870 73 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66  s a substring of
19880 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20   input string X 
19890 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69  that begins.  wi
198a0 74 68 20 74 68 65 20 59 2d 74 68 20 63 68 61 72  th the Y-th char
198b0 61 63 74 65 72 20 61 6e 64 20 77 68 69 63 68 20  acter and which 
198c0 69 73 20 5a 20 63 68 61 72 61 63 74 65 72 73 20  is Z characters 
198d0 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73  long..  ^If Z is
198e0 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75   omitted then su
198f0 62 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e  bstr(X,Y) return
19900 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73  s all characters
19910 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64   through the end
19920 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  .  of the string
19930 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74   X beginning wit
19940 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54  h the Y-th..  ^T
19950 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61  he left-most cha
19960 72 61 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e  racter of X is n
19970 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20  umber 1.  ^If Y 
19980 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68  is negative.  th
19990 65 6e 20 74 68 65 20 66 69 72 73 74 20 63 68 61  en the first cha
199a0 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75  racter of the su
199b0 62 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64  bstring is found
199c0 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f   by counting fro
199d0 6d 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61  m the.  right ra
199e0 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65  ther than the le
199f0 66 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65  ft.  ^If Z is ne
19a00 67 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68  gative then.  th
19a10 65 20 61 62 73 28 5a 29 20 63 68 61 72 61 63 74  e abs(Z) charact
19a20 65 72 73 20 70 72 65 63 65 64 69 6e 67 20 74 68  ers preceding th
19a30 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72  e Y-th character
19a40 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20   are returned.. 
19a50 20 5e 49 66 20 58 20 69 73 20 61 20 73 74 72 69   ^If X is a stri
19a60 6e 67 20 74 68 65 6e 20 63 68 61 72 61 63 74 65  ng then characte
19a70 72 73 20 69 6e 64 69 63 65 73 20 72 65 66 65 72  rs indices refer
19a80 20 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38   to actual UTF-8
19a90 20 0a 20 20 63 68 61 72 61 63 74 65 72 73 2e 20   .  characters. 
19aa0 20 5e 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42   ^If X is a BLOB
19ab0 20 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65   then the indice
19ac0 73 20 72 65 66 65 72 20 74 6f 20 62 79 74 65 73  s refer to bytes
19ad0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f  ..}..funcdef {to
19ae0 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b  tal_changes()} {
19af0 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c  } {.  ^The total
19b00 5f 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74  _changes() funct
19b10 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
19b20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68  number of row ch
19b30 61 6e 67 65 73 0a 20 20 63 61 75 73 65 64 20 62  anges.  caused b
19b40 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
19b50 20 6f 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61   or DELETE.  sta
19b60 74 65 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68  tements since th
19b70 65 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61  e current databa
19b80 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61  se connection wa
19b90 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69  s opened..  ^Thi
19ba0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  s function is a 
19bb0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
19bc0 68 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61  he [sqlite3_tota
19bd0 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43  l_changes()].  C
19be0 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
19bf0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d  }..funcdef {trim
19c00 28 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b  (X) trim(X,Y)} {
19c10 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28  } {.  ^The trim(
19c20 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
19c30 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
19c40 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
19c50 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
19c60 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
19c70 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
19c80 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e   both ends of X.
19c90 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
19ca0 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
19cb0 2c 20 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65  , trim(X) remove
19cc0 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f  s spaces from bo
19cd0 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a  th ends of X..}.
19ce0 0a 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66  .funcdef {typeof
19cf0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
19d00 20 74 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74   typeof(X) funct
19d10 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
19d20 72 69 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61  ring that indica
19d30 74 65 73 20 74 68 65 20 5b 64 61 74 61 74 79 70  tes the [datatyp
19d40 65 5d 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72  e] of.  the expr
19d50 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22  ession X: "null"
19d60 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65  , "integer", "re
19d70 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20  al", "text", or 
19d80 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64  "blob"..}..funcd
19d90 65 66 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d  ef {unlikely(X)}
19da0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c   {} {.  ^The unl
19db0 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
19dc0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
19dd0 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67  gument X unchang
19de0 65 64 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b  ed..  ^The unlik
19df0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
19e00 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20  is a no-op that 
19e10 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
19e20 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61  or.  optimizes a
19e30 77 61 79 20 73 6f 20 74 68 61 74 20 69 74 20 63  way so that it c
19e40 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63  onsumes no CPU c
19e50 79 63 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74  ycles at.  run-t
19e60 69 6d 65 20 28 74 68 61 74 20 69 73 2c 20 64 75  ime (that is, du
19e70 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73  ring calls to [s
19e80 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e  qlite3_step()]).
19e90 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20  .  ^The purpose 
19ea0 6f 66 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28  of the unlikely(
19eb0 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74  X) function is t
19ec0 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74  o provide a hint
19ed0 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  .  to the query 
19ee0 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65  planner that the
19ef0 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61   argument X is a
19f00 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20   boolean value. 
19f10 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
19f20 20 6e 6f 74 20 74 72 75 65 2e 20 5e 28 54 68 65   not true. ^(The
19f30 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e   unlikely(X) fun
19f40 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
19f50 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69  ent.  to [likeli
19f60 68 6f 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29  hood](X, 0.0625)
19f70 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
19f80 75 6e 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b  unicode(X)} {} {
19f90 0a 20 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28  .  ^The unicode(
19fa0 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
19fb0 72 6e 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20  rns the numeric 
19fc0 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69  unicode code poi
19fd0 6e 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  nt corresponding
19fe0 20 74 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20   to.  the first 
19ff0 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
1a000 20 73 74 72 69 6e 67 20 58 2e 20 20 49 66 20 74   string X.  If t
1a010 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75  he argument to u
1a020 6e 69 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74  nicode(X) is not
1a030 20 61 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e   a string.  then
1a040 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 75   the result is u
1a050 6e 64 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e  ndefined..}..fun
1a060 63 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20  cdef {upper(X)} 
1a070 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65  {} {.  ^The uppe
1a080 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  r(X) function re
1a090 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
1a0a0 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 69  input string X i
1a0b0 6e 20 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c  n which all .  l
1a0c0 6f 77 65 72 2d 63 61 73 65 20 41 53 43 49 49 20  ower-case ASCII 
1a0d0 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20 63  characters are c
1a0e0 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65 69  onverted to thei
1a0f0 72 20 75 70 70 65 72 2d 63 61 73 65 20 65 71 75  r upper-case equ
1a100 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63  ivalent..}..func
1a110 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29  def {zeroblob(N)
1a120 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65  } {} {.  ^The ze
1a130 72 6f 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69  roblob(N) functi
1a140 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f  on returns a BLO
1a150 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  B consisting of 
1a160 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e  N bytes of 0x00.
1a170 0a 20 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65  .  SQLite manage
1a180 73 20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62  s these zeroblob
1a190 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74  s very efficient
1a1a0 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63  ly.  Zeroblobs c
1a1b0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20  an be used to.  
1a1c0 72 65 73 65 72 76 65 20 73 70 61 63 65 20 66 6f  reserve space fo
1a1d0 72 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73  r a BLOB that is
1a1e0 20 6c 61 74 65 72 20 77 72 69 74 74 65 6e 20 75   later written u
1a1f0 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33  sing .  [sqlite3
1a200 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69  _blob_open() | i
1a210 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20  ncremental BLOB 
1a220 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51  I/O]..  ^This SQ
1a230 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d  L function is im
1a240 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20  plemented using 
1a250 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73  the [sqlite3_res
1a260 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a  ult_zeroblob()].
1a270 20 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74    routine from t
1a280 68 65 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  he C/C++ interfa
1a290 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  ce..}.</tcl>.</t
1a2a0 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  able>..<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 23 23 0a 53 65 63 74  ###########.Sect
1a300 69 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69  ion {Date And Ti
1a310 6d 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61  me Functions} da
1a320 74 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e  tefunc {*datefun
1a330 63 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  c}.hd_keywords {
1a340 64 61 74 65 28 29 20 53 51 4c 20 66 75 6e 63 74  date() SQL funct
1a350 69 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c  ion} {time() SQL
1a360 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65   function}.hd_ke
1a370 79 77 6f 72 64 73 20 7b 64 61 74 65 74 69 6d 65  ywords {datetime
1a380 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1a390 20 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20 53 51   {julianday() SQ
1a3a0 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b  L function}.hd_k
1a3b0 65 79 77 6f 72 64 73 20 7b 73 74 72 66 74 69 6d  eywords {strftim
1a3c0 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
1a3d0 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51  }.</tcl>..<p>.SQ
1a3e0 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 66 69  Lite supports fi
1a3f0 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ve date and time
1a400 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f   functions as fo
1a410 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e  llows:.</p>..<p>
1a420 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  .<ol>.<li> ^(<b>
1a430 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  date(</b><i>time
1a440 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
1a450 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
1a460 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
1a470 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69  li>.<li> ^(<b>ti
1a480 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  me(</b><i>timest
1a490 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1a4a0 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1a4b0 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1a4c0 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65  >.<li> ^(<b>date
1a4d0 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  time(</b><i>time
1a4e0 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
1a4f0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
1a500 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
1a510 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75  li>.<li> ^(<b>ju
1a520 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74  lianday(</b><i>t
1a530 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
1a540 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
1a550 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e  ..</i><b>)</b>)^
1a560 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62   </li>.<li> ^(<b
1a570 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69  >strftime(</b><i
1a580 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74 72  >format, timestr
1a590 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
1a5a0 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
1a5b0 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
1a5c0 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c  .</ol>..<p>.^All
1a5d0 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20 74   five date and t
1a5e0 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 61  ime functions ta
1a5f0 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e 67  ke a time string
1a600 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e   as an argument.
1a610 20 0a 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69   .^The time stri
1a620 6e 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  ng is followed b
1a630 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d  y zero or more m
1a640 6f 64 69 66 69 65 72 73 2e 20 0a 5e 54 68 65 20  odifiers. .^The 
1a650 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74  strftime() funct
1a660 69 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61  ion also takes a
1a670 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61   format string a
1a680 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  s its first argu
1a690 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  ment..</p>..<p>.
1a6a0 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  The date and tim
1a6b0 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  e functions use 
1a6c0 61 20 73 75 62 73 65 74 20 6f 66 0a 5b 68 74 74  a subset of.[htt
1a6d0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1a6e0 2e 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36  .org/wiki/ISO_86
1a6f0 30 31 20 7c 20 49 53 30 2d 38 36 30 31 5d 20 64  01 | IS0-8601] d
1a700 61 74 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72  ate and time.for
1a710 6d 61 74 73 2e 0a 5e 54 68 65 20 64 61 74 65 28  mats..^The date(
1a720 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1a730 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20 74  ns the date in t
1a740 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59  his format: YYYY
1a750 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69  -MM-DD. .^The ti
1a760 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  me() function re
1a770 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61  turns the time a
1a780 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68  s HH:MM:SS. .^Th
1a790 65 20 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e  e datetime() fun
1a7a0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59  ction returns "Y
1a7b0 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
1a7c0 53 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69  SS". .^(The juli
1a7d0 61 6e 64 61 79 28 29 20 66 75 6e 63 74 69 6f 6e  anday() function
1a7e0 20 72 65 74 75 72 6e 73 20 74 68 65 20 0a 5b 68   returns the .[h
1a7f0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1a800 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
1a810 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20  an_day | Julian 
1a820 64 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65  day] - the.numbe
1a830 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20  r of days since 
1a840 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63  noon in Greenwic
1a850 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34  h on November 24
1a860 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68  , 4714 B.C. .([h
1a870 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1a880 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c  ia.org/wiki/Prol
1a890 65 70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f  eptic_Gregorian_
1a8a0 63 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65  calendar | Prole
1a8b0 70 74 69 63 20 47 72 65 67 6f 72 69 61 6e 20 63  ptic Gregorian c
1a8c0 61 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68  alendar]).)^.^Th
1a8d0 65 20 73 74 72 66 74 69 6d 65 28 29 20 72 6f 75  e strftime() rou
1a8e0 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65  tine returns the
1a8f0 20 64 61 74 65 20 66 6f 72 6d 61 74 74 65 64 20   date formatted 
1a900 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68  according to .th
1a910 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
1a920 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
1a930 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
1a940 0a 5e 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72  .^The format str
1a950 69 6e 67 20 73 75 70 70 6f 72 74 73 20 74 68 65  ing supports the
1a960 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62   most common sub
1a970 73 74 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64  stitutions found
1a980 20 69 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f   in the .[http:/
1a990 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f  /opengroup.org/o
1a9a0 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38  nlinepubs/007908
1a9b0 37 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65  799/xsh/strftime
1a9c0 2e 68 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65  .html | strftime
1a9d0 28 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f  () function].fro
1a9e0 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  m the standard C
1a9f0 20 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74 77   library plus tw
1aa00 6f 20 6e 65 77 20 73 75 62 73 74 69 74 75 74 69  o new substituti
1aa10 6f 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a  ons, %f and %J..
1aa20 5e 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ^(The following 
1aa30 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69  is a complete li
1aa40 73 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72 66  st of valid strf
1aa50 74 69 6d 65 28 29 20 73 75 62 73 74 69 74 75 74  time() substitut
1aa60 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ions:.</p>..<blo
1aa70 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
1aa80 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70  border="0" cellp
1aa90 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73  adding="0" cells
1aaa0 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
1aab0 3c 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 31  <td><td width="1
1aac0 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  0"><td></tr>..<t
1aad0 72 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74  r><td> %d <td><t
1aae0 64 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a  d> day of month:
1aaf0 20 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20   00.<tr><td> %f 
1ab00 3c 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f  <td><td> fractio
1ab10 6e 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e  nal seconds: SS.
1ab20 53 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20  SSS.<tr><td> %H 
1ab30 3c 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30  <td><td> hour: 0
1ab40 30 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25  0-24 .<tr><td> %
1ab50 6a 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  j <td><td> day o
1ab60 66 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36 0a  f year: 001-366.
1ab70 3c 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e  <tr><td> %J <td>
1ab80 3c 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20  <td> Julian day 
1ab90 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20  number.<tr><td> 
1aba0 25 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74  %m <td><td> mont
1abb0 68 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64  h: 01-12.<tr><td
1abc0 3e 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69  > %M <td><td> mi
1abd0 6e 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e  nute: 00-59.<tr>
1abe0 3c 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e  <td> %s <td><td>
1abf0 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
1ac00 39 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74  970-01-01.<tr><t
1ac10 64 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73  d> %S <td><td> s
1ac20 65 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74  econds: 00-59.<t
1ac30 72 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74  r><td> %w <td><t
1ac40 64 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20 30  d> day of week 0
1ac50 2d 36 20 77 69 74 68 20 53 75 6e 64 61 79 3d 3d  -6 with Sunday==
1ac60 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74  0.<tr><td> %W <t
1ac70 64 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20 79  d><td> week of y
1ac80 65 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c  ear: 00-53.<tr><
1ac90 74 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20  td> %Y <td><td> 
1aca0 79 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39 0a  year: 0000-9999.
1acb0 3c 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e  <tr><td> %% <td>
1acc0 3c 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a  <td> %.</table>.
1acd0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1ace0 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68  .<p>.^(Notice th
1acf0 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74  at all other dat
1ad00 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1ad10 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72  ions can be expr
1ad20 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f  essed.in terms o
1ad30 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f  f strftime():.</
1ad40 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1ad50 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
1ad60 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  0" cellpadding="
1ad70 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  0" cellspacing="
1ad80 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46  0">.<tr><td><b>F
1ad90 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77  unction</b><td w
1ada0 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62  idth="30"><td><b
1adb0 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66  >Equivalent strf
1adc0 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c  time()</b>.<tr><
1add0 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20  td>   date(...) 
1ade0 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73       <td><td>  s
1adf0 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25  trftime('%Y-%m-%
1ae00 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64  d', ...).<tr><td
1ae10 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20  >   time(...)   
1ae20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72     <td><td>  str
1ae30 66 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27  ftime('%H:%M:%S'
1ae40 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
1ae50 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20    datetime(...) 
1ae60 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1ae70 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48  ime('%Y-%m-%d %H
1ae80 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74  :%M:%S', ...).<t
1ae90 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64  r><td>   juliand
1aea0 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e  ay(...) <td><td>
1aeb0 20 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c    strftime('%J',
1aec0 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c   ...).</table>.<
1aed0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1aee0 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61  <p>.The only rea
1aef0 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69  sons for providi
1af00 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68  ng functions oth
1af10 65 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65  er than strftime
1af20 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e  () is.for conven
1af30 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66  ience and for ef
1af40 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a  ficiency..</p>..
1af50 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73  <h3>Time Strings
1af60 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69  </h3>..<p>^(A ti
1af70 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65  me string can be
1af80 20 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66   in any of the f
1af90 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73  ollowing formats
1afa0 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
1afb0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
1afc0 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  i>.<li> <i>YYYY-
1afd0 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a  MM-DD HH:MM</i>.
1afe0 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1aff0 44 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a  DD HH:MM:SS</i>.
1b000 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1b010 44 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  DD HH:MM:SS.SSS<
1b020 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1b030 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
1b040 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  b><i>HH:MM</i>.<
1b050 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1b060 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e  D</i><b>T</b><i>
1b070 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
1b080 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1b090 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
1b0a0 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
1b0b0 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e  li> <i>HH:MM</i>
1b0c0 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53  .<li> <i>HH:MM:S
1b0d0 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  S</i>.<li> <i>HH
1b0e0 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
1b0f0 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c  li> <b>now</b>.<
1b100 6c 69 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44  li> <i>DDDDDDDDD
1b110 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c  D</i>.</ol>)^..<
1b120 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35  p>.^In formats 5
1b130 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65 20   through 7, the 
1b140 22 54 22 20 69 73 20 61 20 6c 69 74 65 72 61 6c  "T" is a literal
1b150 20 63 68 61 72 61 63 74 65 72 20 73 65 70 61 72   character separ
1b160 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65 20  ating .the date 
1b170 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61 73  and the time, as
1b180 20 72 65 71 75 69 72 65 64 20 62 79 20 0a 5b 68   required by .[h
1b190 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72  ttp://www.w3c.or
1b1a0 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69  g/TR/NOTE-dateti
1b1b0 6d 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20  me | ISO-8601]. 
1b1c0 0a 5e 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f  .^Formats 8 thro
1b1d0 75 67 68 20 31 30 20 74 68 61 74 20 73 70 65 63  ugh 10 that spec
1b1e0 69 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20  ify only a time 
1b1f0 61 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66  assume a date of
1b200 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f   .2000-01-01. Fo
1b210 72 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74 72  rmat 11, the str
1b220 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f  ing 'now', is co
1b230 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nverted into the
1b240 20 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20 61   .current date a
1b250 6e 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69  nd time as obtai
1b260 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75  ned from the xCu
1b270 72 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64  rrentTime method
1b280 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33  .of the [sqlite3
1b290 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20  _vfs] object in 
1b2a0 75 73 65 2e 0a 5e 54 68 65 20 27 6e 6f 77 27 20  use..^The 'now' 
1b2b0 61 72 67 75 6d 65 6e 74 20 74 6f 20 64 61 74 65  argument to date
1b2c0 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
1b2d0 6f 6e 73 20 61 6c 77 61 79 73 20 72 65 74 75 72  ons always retur
1b2e0 6e 73 20 65 78 61 63 74 6c 79 20 74 68 65 0a 73  ns exactly the.s
1b2f0 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 6d 75  ame value for mu
1b300 6c 74 69 70 6c 65 20 69 6e 76 6f 63 61 74 69 6f  ltiple invocatio
1b310 6e 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ns within the sa
1b320 6d 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70  me [sqlite3_step
1b330 28 29 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74 74 70  ()] call..^[http
1b340 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
1b350 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e  org/wiki/Coordin
1b360 61 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54  ated_Universal_T
1b370 69 6d 65 20 7c 20 55 6e 69 76 65 72 73 61 6c 20  ime | Universal 
1b380 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65  Coordinated Time
1b390 20 28 55 54 43 29 5d 20 69 73 20 75 73 65 64 2e   (UTC)] is used.
1b3a0 20 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69 73 20   .^Format 12 is 
1b3b0 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  the .[http://en.
1b3c0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1b3d0 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20  ki/Julian_day | 
1b3e0 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
1b3f0 72 5d 0a 65 78 70 72 65 73 73 65 64 20 61 73 20  r].expressed as 
1b400 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
1b410 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70   value..</p>..<p
1b420 3e 0a 46 6f 72 6d 61 74 73 20 32 20 74 68 72 6f  >.Formats 2 thro
1b430 75 67 68 20 31 30 20 6d 61 79 20 62 65 20 6f 70  ugh 10 may be op
1b440 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
1b450 64 20 62 79 20 61 20 74 69 6d 65 7a 6f 6e 65 20  d by a timezone 
1b460 69 6e 64 69 63 61 74 6f 72 20 6f 66 20 74 68 65  indicator of the
1b470 20 66 6f 72 6d 0a 22 3c 69 3e 26 23 39 31 3b 2b   form."<i>&#91;+
1b480 2d 26 23 39 33 3b 48 48 3a 4d 4d 3c 2f 69 3e 22  -&#93;HH:MM</i>"
1b490 20 6f 72 20 6a 75 73 74 20 22 3c 69 3e 5a 3c 2f   or just "<i>Z</
1b4a0 69 3e 22 2e 20 20 54 68 65 20 64 61 74 65 20 61  i>".  The date a
1b4b0 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1b4c0 73 20 75 73 65 20 55 54 43 20 6f 72 20 22 7a 75  s use UTC or "zu
1b4d0 6c 75 22 0a 74 69 6d 65 20 69 6e 74 65 72 6e 61  lu".time interna
1b4e0 6c 6c 79 2c 20 61 6e 64 20 73 6f 20 74 68 65 20  lly, and so the 
1b4f0 22 5a 22 20 73 75 66 66 69 78 20 69 73 20 61 20  "Z" suffix is a 
1b500 6e 6f 2d 6f 70 2e 20 20 41 6e 79 20 6e 6f 6e 2d  no-op.  Any non-
1b510 7a 65 72 6f 20 22 48 48 3a 4d 4d 22 20 73 75 66  zero "HH:MM" suf
1b520 66 69 78 20 69 73 0a 73 75 62 74 72 61 63 74 65  fix is.subtracte
1b530 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 69 63  d from the indic
1b540 61 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69  ated date and ti
1b550 6d 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  me in order to c
1b560 6f 6d 70 75 74 65 20 7a 75 6c 75 20 74 69 6d 65  ompute zulu time
1b570 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61  ..For example, a
1b580 6c 6c 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ll of the follow
1b590 69 6e 67 20 74 69 6d 65 20 73 74 72 69 6e 67 73  ing time strings
1b5a0 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a   are equivalent:
1b5b0 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1b5c0 74 65 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30  te>.2013-10-07 0
1b5d0 38 3a 32 33 3a 31 39 2e 31 32 30 3c 62 72 3e 0a  8:23:19.120<br>.
1b5e0 32 30 31 33 2d 31 30 2d 30 37 54 30 38 3a 32 33  2013-10-07T08:23
1b5f0 3a 31 39 2e 31 32 30 5a 3c 62 72 3e 0a 32 30 31  :19.120Z<br>.201
1b600 33 2d 31 30 2d 30 37 20 30 34 3a 32 33 3a 31 39  3-10-07 04:23:19
1b610 2e 31 32 30 2d 30 34 3a 30 30 3c 62 72 3e 0a 32  .120-04:00<br>.2
1b620 34 35 36 35 37 32 2e 38 34 39 35 32 36 38 35 0a  456572.84952685.
1b630 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
1b640 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61 74 73 20  p>.^(In formats 
1b650 34 2c 20 37 2c 20 61 6e 64 20 31 30 2c 20 74 68  4, 7, and 10, th
1b660 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63  e fractional sec
1b670 6f 6e 64 73 20 76 61 6c 75 65 20 53 53 2e 53 53  onds value SS.SS
1b680 53 20 63 61 6e 20 68 61 76 65 0a 6f 6e 65 20 6f  S can have.one o
1b690 72 20 6d 6f 72 65 20 64 69 67 69 74 73 20 66 6f  r more digits fo
1b6a0 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 65 63 69  llowing the deci
1b6b0 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 45 78 61 63  mal point.  Exac
1b6c0 74 6c 79 20 74 68 72 65 65 20 64 69 67 69 74 73  tly three digits
1b6d0 20 61 72 65 0a 73 68 6f 77 6e 20 69 6e 20 74 68   are.shown in th
1b6e0 65 20 65 78 61 6d 70 6c 65 73 20 62 65 63 61 75  e examples becau
1b6f0 73 65 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73  se only the firs
1b700 74 20 74 68 72 65 65 20 64 69 67 69 74 73 20 61  t three digits a
1b710 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 74  re significant.t
1b720 6f 20 74 68 65 20 72 65 73 75 6c 74 2c 20 62 75  o the result, bu
1b730 74 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69  t the input stri
1b740 6e 67 20 63 61 6e 20 68 61 76 65 20 66 65 77 65  ng can have fewe
1b750 72 20 6f 72 20 6d 6f 72 65 20 74 68 61 6e 20 74  r or more than t
1b760 68 72 65 65 20 64 69 67 69 74 73 0a 61 6e 64 20  hree digits.and 
1b770 74 68 65 20 64 61 74 65 2f 74 69 6d 65 20 66 75  the date/time fu
1b780 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 74 69  nctions will sti
1b790 6c 6c 20 6f 70 65 72 61 74 65 20 63 6f 72 72 65  ll operate corre
1b7a0 63 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61 72 6c  ctly.)^.Similarl
1b7b0 79 2c 20 66 6f 72 6d 61 74 20 31 32 20 69 73 20  y, format 12 is 
1b7c0 73 68 6f 77 6e 20 77 69 74 68 20 31 30 20 73 69  shown with 10 si
1b7d0 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
1b7e0 2c 20 62 75 74 20 74 68 65 20 64 61 74 65 2f 74  , but the date/t
1b7f0 69 6d 65 0a 66 75 6e 63 74 69 6f 6e 73 20 77 69  ime.functions wi
1b800 6c 6c 20 72 65 61 6c 6c 79 20 61 63 63 65 70 74  ll really accept
1b810 20 61 73 20 6d 61 6e 79 20 6f 72 20 61 73 20 66   as many or as f
1b820 65 77 20 64 69 67 69 74 73 20 61 73 20 61 72 65  ew digits as are
1b830 20 6e 65 63 65 73 73 61 72 79 20 74 6f 0a 72 65   necessary to.re
1b840 70 72 65 73 65 6e 74 20 74 68 65 20 4a 75 6c 69  present the Juli
1b850 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 2e 0a 3c  an day number..<
1b860 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65  /p>..<h3>Modifie
1b870 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  rs</h3>..<p>^The
1b880 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e   time string can
1b890 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
1b8a0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64  zero or more mod
1b8b0 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74  ifiers that .alt
1b8c0 65 72 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74  er date and/or t
1b8d0 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64 69 66  ime. ^Each modif
1b8e0 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66 6f  ier.is a transfo
1b8f0 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
1b900 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 74  applied to the t
1b910 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69 74 73  ime value to its
1b920 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65 72   left..^Modifier
1b930 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 66 72  s are applied fr
1b940 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
1b950 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f 72  ; order is impor
1b960 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61 69  tant..^(The avai
1b970 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73 20  lable modifiers 
1b980 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c  are as follows.<
1b990 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e  /p>..<ol>.<li> N
1b9a0 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e  NN days.<li> NNN
1b9b0 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20   hours.<li> NNN 
1b9c0 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e  minutes.<li> NNN
1b9d0 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c  .NNNN seconds.<l
1b9e0 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c  i> NNN months.<l
1b9f0 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69  i> NNN years.<li
1ba00 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68  > start of month
1ba10 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 79  .<li> start of y
1ba20 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  ear.<li> start o
1ba30 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64  f day.<li> weekd
1ba40 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70  ay N.<li> unixep
1ba50 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69  och.<li> localti
1ba60 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f  me.<li> utc .</o
1ba70 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69  l>)^..<p>^The fi
1ba80 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69 65 72  rst six modifier
1ba90 73 20 28 31 20 74 68 72 6f 75 67 68 20 36 29 20  s (1 through 6) 
1baa0 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68 65 20  .simply add the 
1bab0 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75 6e 74  specified amount
1bac0 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68 65 20   of time to the 
1bad0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 0a 73  date and time .s
1bae0 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
1baf0 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73 74  preceding timest
1bb00 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69 65  ring and modifie
1bb10 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20 22  rs..^Note that "
1bb20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74  &plusmn;NNN mont
1bb30 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65 6e  hs" works by ren
1bb40 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67 69  dering the origi
1bb50 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74 68  nal date into.th
1bb60 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72  e YYYY-MM-DD for
1bb70 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65 20  mat, adding the 
1bb80 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74  &plusmn;NNN to t
1bb90 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75  he MM month valu
1bba0 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a  e, then.normaliz
1bbb0 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e 20  ing the result. 
1bbc0 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78 61 6d   ^Thus, for exam
1bbd0 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32 30  ple, the data 20
1bbe0 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69 65  01-03-31 modifie
1bbf0 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27 20  d.by '+1 month' 
1bc00 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64 73  initially yields
1bc10 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75 74   2001-04-31, but
1bc20 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73 20   April only has 
1bc30 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20 64  30 days.so the d
1bc40 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a 65  ate is normalize
1bc50 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31 2e  d to 2001-05-01.
1bc60 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65 66 66    ^A similar eff
1bc70 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e 0a  ect occurs when.
1bc80 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
1bc90 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32 39  e is February 29
1bca0 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20 61   of a leapyear a
1bcb0 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72 20  nd the modifier 
1bcc0 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65 61  is.&plusmn;N yea
1bcd0 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e 6f  rs where N is no
1bce0 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  t a multiple of 
1bcf0 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  four.</p>..<p>^T
1bd00 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d 6f  he "start of" mo
1bd10 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f 75  difiers (7 throu
1bd20 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65 20  gh 9) shift the 
1bd30 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20 0a  date backwards .
1bd40 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
1bd50 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
1bd60 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20 64  month, year or d
1bd70 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ay.</p>..<p>^The
1bd80 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69 66   "weekday" modif
1bd90 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68 65  ier advances the
1bda0 20 64 61 74 65 20 66 6f 72 77 61 72 64 20 74 6f   date forward to
1bdb0 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20 0a   the next date .
1bdc0 77 68 65 72 65 20 74 68 65 20 77 65 65 6b 64 61  where the weekda
1bdd0 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20 53  y number is N. S
1bde0 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64  unday is 0, Mond
1bdf0 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f 20  ay is 1, and so 
1be00 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  forth.</p>..<p>^
1be10 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  The "unixepoch" 
1be20 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e  modifier (11) on
1be30 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69  ly works if it i
1be40 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
1be50 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67  ws .a timestring
1be60 20 69 6e 20 74 68 65 20 44 44 44 44 44 44 44 44   in the DDDDDDDD
1be70 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69  DD format. .^Thi
1be80 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73 65  s modifier cause
1be90 73 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44  s the DDDDDDDDDD
1bea0 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65 74   to be interpret
1beb0 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c  ed not .as a Jul
1bec0 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 61  ian day number a
1bed0 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f  s it normally wo
1bee0 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a 5b  uld be, but as.[
1bef0 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1bf00 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69  dia.org/wiki/Uni
1bf10 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54 69  x_time | Unix Ti
1bf20 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65  me] - the .numbe
1bf30 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
1bf40 63 65 20 31 39 37 30 2e 20 20 49 66 20 74 68 65  ce 1970.  If the
1bf50 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1bf60 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66  ifier does not.f
1bf70 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72 69  ollow a timestri
1bf80 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 44  ng of the form D
1bf90 44 44 44 44 44 44 44 44 44 20 77 68 69 63 68 20  DDDDDDDDD which 
1bfa0 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6e 75  expresses the nu
1bfb0 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20  mber.of seconds 
1bfc0 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69 66  since 1970 or if
1bfd0 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72 73   other modifiers
1bfe0 0a 73 65 70 61 72 61 74 65 20 74 68 65 20 22 75  .separate the "u
1bff0 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1c000 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44 44  er from prior DD
1c010 44 44 44 44 44 44 44 44 20 74 68 65 6e 20 74 68  DDDDDDDD then th
1c020 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e.behavior is un
1c030 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74 6f 20  defined..Due to 
1c040 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69 74 61  precision limita
1c050 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20 62 79  tions imposed by
1c060 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
1c070 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34 2d 62  ions use.of 64-b
1c080 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74 68 65  it integers, the
1c090 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1c0a0 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73  ifier only works
1c0b0 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77 65   for.dates betwe
1c0c0 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30  en 0000-01-01 00
1c0d0 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32 2d  :00:00 and 5352-
1c0e0 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20 28  11-01 10:52:47 (
1c0f0 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36  unix times.of -6
1c100 32 31 36 37 32 31 39 32 30 30 20 74 68 72 6f 75  2167219200 throu
1c110 67 68 20 31 30 36 37 35 31 39 39 31 36 37 29 2e  gh 10675199167).
1c120 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 6c  </p>..<p>^The "l
1c130 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69  ocaltime" modifi
1c140 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73 20  er (12) assumes 
1c150 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  the time string 
1c160 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69  to its left is i
1c170 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  n.Universal Coor
1c180 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
1c190 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74  C) and adjusts t
1c1a0 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73  he time.string s
1c1b0 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c 61  o that it displa
1c1c0 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49  ys localtime.  I
1c1d0 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f  f "localtime".fo
1c1e0 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61  llows a time tha
1c1f0 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68  t is not UTC, th
1c200 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
1c210 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28  is undefined..^(
1c220 54 68 65 20 22 75 74 63 22 20 69 73 20 74 68 65  The "utc" is the
1c230 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f   opposite of "lo
1c240 63 61 6c 74 69 6d 65 22 2e 20 20 22 75 74 63 22  caltime".  "utc"
1c250 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 74 68   assumes that th
1c260 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73 20  e string.to its 
1c270 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65 20 6c  left is in the l
1c280 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e  ocal timezone an
1c290 64 20 61 64 6a 75 73 74 73 20 74 68 61 74 20 73  d adjusts that s
1c2a0 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20 55  tring to be in U
1c2b0 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72 69  TC.)^.If the pri
1c2c0 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74  or string is not
1c2d0 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20 74   in localtime, t
1c2e0 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
1c2f0 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65 66  f "utc" is.undef
1c300 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45  ined.</p>..<h3>E
1c310 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28  xamples</h3>..^(
1c320 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
1c330 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a  urrent date.<p>.
1c340 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c  .<blockquote>SEL
1c350 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b  ECT date('now');
1c360 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1c370 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1c380 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74 68  e last day of th
1c390 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e  e current month.
1c3a0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1c3b0 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e  e>SELECT date('n
1c3c0 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f  ow','start of mo
1c3d0 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c  nth','+1 month',
1c3e0 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f  '-1 day');.</blo
1c3f0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1c400 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  >Compute the dat
1c410 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e  e and time given
1c420 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d   a unix timestam
1c430 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f 70  p 1092941466.</p
1c440 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1c450 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65 74      SELECT datet
1c460 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c 20  ime(1092941466, 
1c470 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f  'unixepoch');.</
1c480 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1c490 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1c4a0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69  date and time gi
1c4b0 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73  ven a unix times
1c4c0 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2c  tamp 1092941466,
1c4d0 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65   and .compensate
1c4e0 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20   for your local 
1c4f0 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c  timezone.</p>..<
1c500 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1c510 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30  LECT datetime(10
1c520 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65  92941466, 'unixe
1c530 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d  poch', 'localtim
1c540 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  e');.</blockquot
1c550 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
1c560 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 75  te the current u
1c570 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f  nix timestamp.</
1c580 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1c590 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
1c5a0 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a  me('%s','now');.
1c5b0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1c5c0 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1c5d0 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73  e number of days
1c5e0 20 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e 69   since the signi
1c5f0 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44 65 63  ng of the US Dec
1c600 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65  laration.of Inde
1c610 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c  pendence.</p>..<
1c620 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1c630 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28 27  LECT julianday('
1c640 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61  now') - julianda
1c650 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29 3b  y('1776-07-04');
1c660 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1c670 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1c680 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63  he number of sec
1c690 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61 72  onds since a par
1c6a0 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69  ticular moment i
1c6b0 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c  n 2004:</p>..<bl
1c6c0 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1c6d0 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27  CT strftime('%s'
1c6e0 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74 69  ,'now') - strfti
1c6f0 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30 31  me('%s','2004-01
1c700 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a  -01 02:34:56');.
1c710 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1c720 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74  .^(<p>.Compute t
1c730 68 65 20 64 61 74 65 20 6f 66 20 74 68 65 20 66  he date of the f
1c740 69 72 73 74 20 54 75 65 73 64 61 79 20 69 6e 20  irst Tuesday in 
1c750 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65 20  October.for the 
1c760 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f  current year..</
1c770 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1c780 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 28 27  .  SELECT date('
1c790 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 79  now','start of y
1c7a0 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27  ear','+9 months'
1c7b0 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c  ,'weekday 2');.<
1c7c0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1c7d0 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1c7e0 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20   time since the 
1c7f0 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65  unix epoch in se
1c800 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72  conds .(like str
1c810 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
1c820 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65  ) except include
1c830 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  s fractional par
1c840 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  t):</p>..<blockq
1c850 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28  uote>.  SELECT (
1c860 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29  julianday('now')
1c870 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36   - 2440587.5)*86
1c880 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  400.0;.</blockqu
1c890 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76 65  ote>)^..<h3>Cave
1c8a0 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68 33  ats And Bugs</h3
1c8b0 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74  >..<p>The comput
1c8c0 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74  ation of local t
1c8d0 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61 76  ime depends heav
1c8e0 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d 20  ily on the whim 
1c8f0 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73 20  .of politicians 
1c900 61 6e 64 20 69 73 20 74 68 75 73 20 64 69 66 66  and is thus diff
1c910 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f 72  icult to get cor
1c920 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f  rect for .all lo
1c930 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73 20  cales. ^In this 
1c940 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
1c950 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
1c960 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e  ibrary .function
1c970 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 69   localtime_r() i
1c980 73 20 75 73 65 64 20 74 6f 20 61 73 73 69 73 74  s used to assist
1c990 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61 74   in the calculat
1c9a0 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69  ion of .local ti
1c9b0 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63 61  me.  ^(The .loca
1c9c0 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e 63  ltime_r() C func
1c9d0 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e  tion normally on
1c9e0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65 61  ly works for yea
1c9f0 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30 20  rs.between 1970 
1ca00 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64 61  and 2037. For da
1ca10 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 69 73  tes outside this
1ca20 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a   range, SQLite .
1ca30 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70 20  attempts to map 
1ca40 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61 6e  the year into an
1ca50 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61 72   equivalent year
1ca60 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72 61   within .this ra
1ca70 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c 63  nge, do the calc
1ca80 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61  ulation, then ma
1ca90 70 20 74 68 65 20 79 65 61 72 20 62 61 63 6b 2e  p the year back.
1caa0 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68  )^</p>...<p>^(Th
1cab0 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e  ese functions on
1cac0 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74 65  ly work for date
1cad0 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30  s between 0000-0
1cae0 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61 6e  1-01 00:00:00.an
1caf0 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33 3a  d 9999-12-31 23:
1cb00 35 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20 64  59:59 (julidan d
1cb10 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31 30  ay numbers 17210
1cb20 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33 37  59.5 through 537
1cb30 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64  3484.5).)^.For d
1cb40 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 61  ates outside tha
1cb50 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65 73  t range, the res
1cb60 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66 75  ults of these.fu
1cb70 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64 65  nctions are unde
1cb80 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e  fined.</p>..<p>N
1cb90 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73  on-Vista Windows
1cba0 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20   platforms only 
1cbb0 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20  support one set 
1cbc0 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56  of DST rules. .V
1cbd0 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72  ista only suppor
1cbe0 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72  ts two. Therefor
1cbf0 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74  e, on these plat
1cc00 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63  forms, .historic
1cc10 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69  al DST calculati
1cc20 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f  ons will be inco
1cc30 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d  rrect. .For exam
1cc40 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20  ple, in the US, 
1cc50 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54 20  in 2007 the DST 
1cc60 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a  rules changed. .
1cc70 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
1cc80 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c  s platforms appl
1cc90 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20 44  y the new 2007 D
1cca0 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c  ST rules .to all
1ccb0 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73 20   previous years 
1ccc0 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64  as well. Vista d
1ccd0 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74  oes somewhat bet
1cce0 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75  ter.getting resu
1ccf0 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b  lts correct back
1cd00 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74   to 1986, when t
1cd10 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c  he rules were al
1cd20 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a  so changed.</p>.
1cd30 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c  .<p>All internal
1cd40 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73   computations as
1cd50 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70 3a  sume the .[http:
1cd60 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1cd70 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61  rg/wiki/Gregoria
1cd80 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72 65  n_calendar | Gre
1cd90 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d  gorian calendar]
1cda0 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20  .system.  It is 
1cdb0 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61  also assumed tha
1cdc0 74 20 65 76 65 72 79 0a 64 61 79 20 69 73 20 65  t every.day is e
1cdd0 78 61 63 74 6c 79 20 38 36 34 30 30 20 73 65 63  xactly 86400 sec
1cde0 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e  onds in duration
1cdf0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 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 23 23 0a 53 65 63 74  ###########.Sect
1ce50 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46  ion {Aggregate F
1ce60 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e  unctions} aggfun
1ce70 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f 74  c {*aggfunc}.</t
1ce80 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67  cl>..<p>.The agg
1ce90 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1cea0 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65   shown below are
1ceb0 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65   available by de
1cec0 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e  fault.  Addition
1ced0 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e  al.aggregate fun
1cee0 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69  ctions written i
1cef0 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64 65 64  n C may be added
1cf00 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c   using the .[sql
1cf10 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
1cf20 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e  tion()]</a>.API.
1cf30 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e  </p>..<p>.^In an
1cf40 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  y aggregate func
1cf50 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20  tion that takes 
1cf60 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
1cf70 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74  t, that argument
1cf80 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64  .can be preceded
1cf90 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
1cfa0 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73  DISTINCT.  ^In s
1cfb0 75 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69  uch cases, dupli
1cfc0 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72  cate.elements ar
1cfd0 65 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72  e filtered befor
1cfe0 65 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 69  e being passed i
1cff0 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74  nto the aggregat
1d000 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72  e function..^For
1d010 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75   example, the fu
1d020 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69  nction "count(di
1d030 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20  stinct X)" will 
1d040 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
1d050 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61  r.of distinct va
1d060 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58  lues of column X
1d070 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
1d080 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
1d090 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20  non-null.values 
1d0a0 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70  in column X..</p
1d0b0 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  >..<table border
1d0c0 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31  =0 cellpadding=1
1d0d0 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66  0>.<tcl>.funcdef
1d0e0 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76 67 20   {avg(X)} {*avg 
1d0f0 7b 61 76 67 28 29 20 61 67 67 72 65 67 61 74 65  {avg() aggregate
1d100 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1d110 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e 63 74  ^The avg() funct
1d120 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
1d130 65 20 61 76 65 72 61 67 65 20 76 61 6c 75 65 20  e average value 
1d140 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  of all non-NULL 
1d150 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20  <i>X</i> within 
1d160 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53 74 72  a.  group.  ^Str
1d170 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c  ing and BLOB val
1d180 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  ues that do not 
1d190 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72  look like number
1d1a0 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70 72 65  s are.  interpre
1d1b0 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54 68 65  ted as 0..  ^The
1d1c0 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29   result of avg()
1d1d0 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f   is always a flo
1d1e0 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
1d1f0 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61  e as long as.  a
1d200 74 20 74 68 65 72 65 20 69 73 20 61 74 20 6c 65  t there is at le
1d210 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c  ast one non-NULL
1d220 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66 20 61   input even if a
1d230 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72 65 20  ll.  inputs are 
1d240 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68 65 20  integers.  ^The 
1d250 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20  result of avg() 
1d260 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f  is NULL if and o
1d270 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65 20 61  nly if.  there a
1d280 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  re no non-NULL i
1d290 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63  nputs.  .}..func
1d2a0 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f  def {count(X) co
1d2b0 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20  unt(*)} {*count 
1d2c0 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61  {count() aggrega
1d2d0 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
1d2e0 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58 29 20    ^The count(X) 
1d2f0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1d300 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68  .  a count of th
1d310 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65  e number of time
1d320 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69  s.  that <i>X</i
1d330 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e  > is not NULL in
1d340 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20   a group.  ^The 
1d350 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f  count(*) functio
1d360 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72 67  n.  (with no arg
1d370 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73 20  uments) returns 
1d380 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
1d390 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
1d3a0 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65  group..}..funcde
1d3b0 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  f {group_concat(
1d3c0 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  X) group_concat(
1d3d0 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70  X,Y)} {.  *group
1d3e0 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63  _concat {group_c
1d3f0 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67 61 74  oncat() aggregat
1d400 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a  e function}.} {.
1d410 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e    ^The group_con
1d420 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  cat() function r
1d430 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e  eturns.  a strin
1d440 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20 63  g which is the c
1d450 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a  oncatenation of.
1d460 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76    all non-NULL v
1d470 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69  alues of <i>X</i
1d480 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65 74 65  >.  ^If paramete
1d490 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72  r <i>Y</i> is pr
1d4a0 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69 74 20  esent then.  it 
1d4b0 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73  is used as the s
1d4c0 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74 77 65  eparator.  betwe
1d4d0 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  en instances of 
1d4e0 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f  <i>X</i>.  ^A co
1d4f0 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75 73 65  mma (",") is use
1d500 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74  d as the separat
1d510 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e  or.  if <i>Y</i>
1d520 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20 54 68   is omitted.  Th
1d530 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63  e order of the c
1d540 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c 65 6d  oncatenated elem
1d550 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69 74 72  ents is.  arbitr
1d560 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ary..}..funcdef 
1d570 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67  {max(X)} {*maxAg
1d580 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b  gFunc *agg_max {
1d590 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20  max() aggregate 
1d5a0 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
1d5b0 54 68 65 20 6d 61 78 28 29 20 61 67 67 72 65 67  The max() aggreg
1d5c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  ate function.  r
1d5d0 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d  eturns the maxim
1d5e0 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20  um value of all 
1d5f0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
1d600 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69  oup..  ^The maxi
1d610 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65  mum value is the
1d620 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c   value that woul
1d630 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 6c 61  d be returned la
1d640 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52  st in an.  ORDER
1d650 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d 65 20   BY on the same 
1d660 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67  column.  ^Aggreg
1d670 61 74 65 20 6d 61 78 28 29 20 72 65 74 75 72 6e  ate max() return
1d680 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64  s NULL .  if and
1d690 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61   only if there a
1d6a0 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  re no non-NULL v
1d6b0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
1d6c0 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
1d6d0 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67  min(X)} {*minAgg
1d6e0 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d  Func *agg_min {m
1d6f0 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20 66  in() aggregate f
1d700 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1d710 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65 67 61  he min() aggrega
1d720 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  te function.  re
1d730 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75  turns the minimu
1d740 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  m non-NULL value
1d750 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
1d760 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e  n the group..  ^
1d770 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75  The minimum valu
1d780 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e  e is the first n
1d790 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68  on-NULL value th
1d7a0 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61 72 0a  at would appear.
1d7b0 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59    in an ORDER BY
1d7c0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a   of the column..
1d7d0 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 69 6e    ^Aggregate min
1d7e0 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20  () returns NULL 
1d7f0 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74  if and only if t
1d800 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
1d810 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e  NULL.  values in
1d820 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66   the group..}..f
1d830 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20 74  uncdef {sum(X) t
1d840 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75  otal(X)} {.  *su
1d850 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61  mFunc *sum *tota
1d860 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67 72 65  l.  {sum() aggre
1d870 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20  gate function}. 
1d880 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67   {total() aggreg
1d890 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20  ate function}.} 
1d8a0 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29 20 61  {.  ^The sum() a
1d8b0 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67 72 65  nd total() aggre
1d8c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20  gate functions. 
1d8d0 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66 20 61   return sum of a
1d8e0 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  ll non-NULL valu
1d8f0 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
1d900 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61 72 65  .  ^If there are
1d910 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70   no non-NULL inp
1d920 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d  ut rows then sum
1d930 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c  () returns.  NUL
1d940 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65  L but total() re
1d950 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c  turns 0.0..  NUL
1d960 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c  L is not normall
1d970 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75  y a helpful resu
1d980 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f  lt for the sum o
1d990 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20  f no rows.  but 
1d9a0 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64  the SQL standard
1d9b0 20 72 65 71 75 69 72 65 73 20 69 74 20 61 6e 64   requires it and
1d9c0 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51   most other.  SQ
1d9d0 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
1d9e0 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d  es implement sum
1d9f0 28 29 20 74 68 61 74 20 77 61 79 20 73 6f 20 53  () that way so S
1da00 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e  QLite does it in
1da10 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20   the.  same way 
1da20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63  in order to be c
1da30 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65  ompatible.   The
1da40 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f   non-standard to
1da50 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  tal() function. 
1da60 20 69 73 20 70 72 6f 76 69 64 65 64 20 61 73 20   is provided as 
1da70 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79  a convenient way
1da80 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20   to work around 
1da90 74 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62  this design prob
1daa0 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c  lem.  in the SQL
1dab0 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a   language.</p>..
1dac0 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74    <p>^The result
1dad0 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61   of total() is a
1dae0 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67  lways a floating
1daf0 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20   point value..  
1db00 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73  ^The result of s
1db10 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67  um() is an integ
1db20 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20  er value if all 
1db30 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20  non-NULL inputs 
1db40 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20  are integers..  
1db50 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f  ^If any input to
1db60 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65   sum() is neithe
1db70 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  r an integer or 
1db80 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75  a NULL.  then su
1db90 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c  m() returns a fl
1dba0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
1dbb0 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74  ue.  which might
1dbc0 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61   be an approxima
1dbd0 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65  tion to the true
1dbe0 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e   sum.</p>..  <p>
1dbf0 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f  ^Sum() will thro
1dc00 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76  w an "integer ov
1dc10 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f  erflow" exceptio
1dc20 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a  n if all inputs.
1dc30 20 20 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f    are integers o
1dc40 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20  r NULL.  and an 
1dc50 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
1dc60 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20 70   occurs at any p
1dc70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20  oint during the 
1dc80 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e  computation..  ^
1dc90 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68  Total() never th
1dca0 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20  rows an integer 
1dcb0 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63  overflow..}.</tc
1dcc0 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63  l>.</table>..<tc
1dcd0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
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 23  ################
1dd20 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54  #.Section INSERT
1dd30 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54 20   insert {INSERT 
1dd40 2a 49 4e 53 45 52 54 73 7d 0a 0a 52 65 63 75 72  *INSERTs}..Recur
1dd50 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
1dd60 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 0a 3c 2f  m insert-stmt.</
1dd70 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 53  tcl>..<p>The INS
1dd80 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  ERT statement co
1dd90 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62 61 73  mes in three bas
1dda0 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e  ic forms.  .<ul>
1ddb0 0a 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 66 69 72  .<li><p>^The fir
1ddc0 73 74 20 66 6f 72 6d 20 28 77 69 74 68 20 74 68  st form (with th
1ddd0 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77 6f  e "VALUES" keywo
1dde0 72 64 29 20 63 72 65 61 74 65 73 20 6f 6e 65 20  rd) creates one 
1ddf0 6f 72 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77 73  or more.new rows
1de00 20 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67 20   in.an existing 
1de10 74 61 62 6c 65 2e 20 5e 49 66 20 6e 6f 20 63 6f  table. ^If no co
1de20 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65  lumn-list is spe
1de30 63 69 66 69 65 64 20 74 68 65 6e 20 74 68 65 20  cified then the 
1de40 6e 75 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65 73  number.of values
1de50 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 65   inserted into e
1de60 61 63 68 20 72 6f 77 0a 6d 75 73 74 20 62 65 20  ach row.must be 
1de70 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
1de80 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1de90 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
1dea0 5e 49 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68  ^In this case.th
1deb0 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
1dec0 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d  uating the left-
1ded0 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
1dee0 69 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66 0a  in each term of.
1def0 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74 20  the VALUES list 
1df00 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
1df10 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63   the left-most c
1df20 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 65 61 63  olumn of the eac
1df30 68 20 6e 65 77 20 72 6f 77 2c 0a 61 6e 64 20 66  h new row,.and f
1df40 6f 72 74 68 20 66 6f 72 20 65 61 63 68 20 73 75  orth for each su
1df50 62 73 65 71 75 65 6e 74 20 65 78 70 72 65 73 73  bsequent express
1df60 69 6f 6e 2e 20 5e 49 66 20 61 0a 63 6f 6c 75 6d  ion. ^If a.colum
1df70 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66  n-list is specif
1df80 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75  ied, then the nu
1df90 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69  mber of values i
1dfa0 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  n each term of t
1dfb0 68 65 0a 56 41 4c 55 45 20 6c 69 73 74 20 6d 75  he.VALUE list mu
1dfc0 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d  st match the num
1dfd0 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64  ber of.specified
1dfe0 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20   columns. ^Each 
1dff0 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c  of the named col
1e000 75 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65 77 20  umns of the new 
1e010 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64  row is populated
1e020 0a 77 69 74 68 20 74 68 65 20 72 65 73 75 6c 74  .with the result
1e030 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  s of evaluating 
1e040 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
1e050 67 20 56 41 4c 55 45 53 20 65 78 70 72 65 73 73  g VALUES express
1e060 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75  ion. ^Table.colu
1e070 6d 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  mns that do not 
1e080 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f  appear in the co
1e090 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 70 6f  lumn list are po
1e0a0 70 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65  pulated with the
1e0b0 20 64 65 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20   default.column 
1e0c0 76 61 6c 75 65 20 28 73 70 65 63 69 66 69 65 64  value (specified
1e0d0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
1e0e0 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
1e0f0 74 65 6d 65 6e 74 29 2c 20 6f 72 20 77 69 74 68  tement), or with
1e100 20 4e 55 4c 4c 20 69 66 0a 6e 6f 20 64 65 66 61   NULL if.no defa
1e110 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70 65  ult value is spe
1e120 63 69 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e  cified...<li><p>
1e130 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
1e140 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74  of the INSERT st
1e150 61 74 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73  atement contains
1e160 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1e170 65 6e 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61  ent.instead of a
1e180 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20   VALUES clause. 
1e190 5e 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20  ^A new entry is 
1e1a0 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
1e1b0 65 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68  e table for each
1e1c0 0a 72 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74  .row of data ret
1e1d0 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69  urned by executi
1e1e0 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  ng the SELECT st
1e1f0 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63  atement. ^If a c
1e200 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70  olumn-list is.sp
1e210 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d  ecified, the num
1e220 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1e230 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
1e240 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20  the SELECT must 
1e250 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74  be the same.as t
1e260 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  he number of ite
1e270 6d 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ms in the column
1e280 2d 6c 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73  -list. ^Otherwis
1e290 65 2c 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d  e, if no column-
1e2a0 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69 65  list is.specifie
1e2b0 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  d, the number of
1e2c0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1e2d0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45  result of the SE
1e2e0 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68 65  LECT must be the
1e2f0 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d   same.as the num
1e300 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1e310 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e  n the table. ^An
1e320 79 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  y SELECT stateme
1e330 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 5b 63  nt, including.[c
1e340 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 5d  ompound SELECTs]
1e350 20 61 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74   and SELECT stat
1e360 65 6d 65 6e 74 73 20 77 69 74 68 20 5b 4f 52 44  ements with [ORD
1e370 45 52 20 42 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c  ER BY] and/or [L
1e380 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 2c 20 0a  IMIT] clauses, .
1e390 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 61  may be used in a
1e3a0 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
1e3b0 6e 74 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 2e  nt of this form.
1e3c0 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 74 68 69  ..<li><p>The thi
1e3d0 72 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e  rd form of an IN
1e3e0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69  SERT statement i
1e3f0 73 20 77 69 74 68 20 44 45 46 41 55 4c 54 20 56  s with DEFAULT V
1e400 41 4c 55 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53  ALUES..^(The INS
1e410 45 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20  ERT ... DEFAULT 
1e420 56 41 4c 55 45 53 20 73 74 61 74 65 6d 65 6e 74  VALUES statement
1e430 20 69 6e 73 65 72 74 73 20 61 20 73 69 6e 67 6c   inserts a singl
1e440 65 20 6e 65 77 20 72 6f 77 20 69 6e 74 6f 20 74  e new row into t
1e450 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29  he.named table.)
1e460 5e 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ^ ^Each column o
1e470 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73  f the new row is
1e480 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20   populated with 
1e490 69 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75  its default valu
1e4a0 65 2c 0a 6f 72 20 77 69 74 68 20 61 20 4e 55 4c  e,.or with a NUL
1e4b0 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c 74 20  L if no default 
1e4c0 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69  value is specifi
1e4d0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
1e4e0 65 20 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69 74  e column.definit
1e4f0 69 6f 6e 20 69 6e 20 74 68 65 20 43 52 45 41 54  ion in the CREAT
1e500 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
1e510 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54  t...</ul>..<p>^T
1e520 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
1e530 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
1e540 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61  ws the specifica
1e550 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72  tion of an alter
1e560 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e  native.constrain
1e570 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
1e580 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
1e590 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
1e5a0 69 73 20 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f  is one INSERT co
1e5b0 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73  mmand..See the s
1e5c0 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f  ection titled.[O
1e5d0 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20  N CONFLICT] for 
1e5e0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1e5f0 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70  mation..For comp
1e600 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d  atibility with M
1e610 79 53 51 4c 2c 20 5e 74 68 65 20 70 61 72 73 65  ySQL, ^the parse
1e620 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65  r allows the use
1e630 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b   of the.single k
1e640 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22  eyword <a href="
1e650 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d  lang_replace.htm
1e660 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61  l">REPLACE</a> a
1e670 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20  s an .alias for 
1e680 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41  "INSERT OR REPLA
1e690 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f  CE"...<p>^(The o
1e6a0 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 64 61 74 61  ptional "<i>data
1e6b0 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  base-name</i><b>
1e6c0 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78 20 6f 6e  .</b>" prefix on
1e6d0 20 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61   the <i>table-na
1e6e0 6d 65 3c 2f 69 3e 0a 69 73 20 73 75 70 70 6f 72  me</i>.is suppor
1e6f0 74 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20  t for top-level 
1e700 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
1e710 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20  s only.)^  ^The 
1e720 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20  table name must 
1e730 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64 20 66  be.unqualified f
1e740 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  or INSERT statem
1e750 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72 20  ents that occur 
1e760 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45 20 54  within [CREATE T
1e770 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
1e780 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20  ts..^Similarly, 
1e790 74 68 65 20 22 44 45 46 41 55 4c 54 20 56 41 4c  the "DEFAULT VAL
1e7a0 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65  UES" form of the
1e7b0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1e7c0 74 20 69 73 20 73 75 70 70 6f 72 74 65 64 20 66  t is supported f
1e7d0 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53  or.top-level INS
1e7e0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
1e7f0 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20  nly and not for 
1e800 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
1e810 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67 65 72  s within.trigger
1e820 73 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  s..<p>..<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 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1e880 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43  tion {ON CONFLIC
1e890 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69  T clause} confli
1e8a0 63 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c  ct {{conflict cl
1e8b0 61 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49  ause} {ON CONFLI
1e8c0 43 54 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  CT}}..RecursiveB
1e8d0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e  ubbleDiagram con
1e8e0 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74  flict-clause.</t
1e8f0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  cl>..<p>The ON C
1e900 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1e910 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65  s not a separate
1e920 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49   SQL command.  I
1e930 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64  t is a.non-stand
1e940 61 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20  ard clause that 
1e950 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61  can appear in ma
1e960 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d  ny other SQL com
1e970 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76  mands..It is giv
1e980 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69  en its own secti
1e990 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d  on in this docum
1e9a0 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69  ent because it i
1e9b0 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74  s not.part of st
1e9c0 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74  andard SQL and t
1e9d0 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e  herefore might n
1e9e0 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c  ot be familiar.<
1e9f0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e  /p>..<p>^The syn
1ea00 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  tax for the ON C
1ea10 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1ea20 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65  s as shown above
1ea30 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20   for.the CREATE 
1ea40 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  TABLE command.  
1ea50 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20  ^For the INSERT 
1ea60 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61  and.UPDATE comma
1ea70 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  nds, the keyword
1ea80 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20  s "ON CONFLICT" 
1ea90 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20  are replaced by 
1eaa0 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65  "OR" so that.the
1eab0 20 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f   syntax reads mo
1eac0 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46  re naturally.  F
1ead0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74  or example, inst
1eae0 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f  ead of."INSERT O
1eaf0 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
1eb00 45 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45  E" we have "INSE
1eb10 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54  RT OR IGNORE"..T
1eb20 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e  he keywords chan
1eb30 67 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69  ge but the meani
1eb40 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65  ng of the clause
1eb50 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74   is the same.eit
1eb60 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70  her way.</p>..<p
1eb70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
1eb80 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
1eb90 74 6f 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f  to UNIQUE and NO
1eba0 54 20 4e 55 4c 4c 0a 63 6f 6e 73 74 72 61 69 6e  T NULL.constrain
1ebb0 74 73 20 28 61 6e 64 20 74 6f 20 50 52 49 4d 41  ts (and to PRIMA
1ebc0 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  RY KEY constrain
1ebd0 74 73 20 77 68 69 63 68 20 66 6f 72 20 74 68 65  ts which for the
1ebe0 20 70 75 72 70 6f 73 65 73 20 0a 6f 66 20 74 68   purposes .of th
1ebf0 69 73 20 73 65 63 74 69 6f 6e 20 61 72 65 20 74  is section are t
1ec00 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73  he same thing as
1ec10 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
1ec20 6e 74 73 29 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e  nts)..The ON CON
1ec30 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 20  FLICT algorithm 
1ec40 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c 79 20 74  does not.apply t
1ec50 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  o [FOREIGN KEY c
1ec60 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a 54 68 65  onstraints]..The
1ec70 72 65 20 61 72 65 20 66 69 76 65 20 63 6f 6e 66  re are five conf
1ec80 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
1ec90 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f 69 63 65  algorithm choice
1eca0 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f  s:.ROLLBACK, ABO
1ecb0 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45  RT, FAIL, IGNORE
1ecc0 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e  , and REPLACE..^
1ecd0 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 66  The default conf
1ece0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
1ecf0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f  algorithm is ABO
1ed00 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61  RT.  This.is wha
1ed10 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e  t they mean:</p>
1ed20 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f  ..<dl>.<dt><b>RO
1ed30 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a  LLBACK</b></dt>.
1ed40 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
1ed50 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
1ed60 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1ed70 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 4f 4c   occurs, the ROL
1ed80 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e  LBACK.resolution
1ed90 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74   algorithm abort
1eda0 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  s the current SQ
1edb0 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  L statement with
1edc0 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  .an SQLITE_CONST
1edd0 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20  RAINT error and 
1ede0 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68 65 20 63  rolls back the c
1edf0 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
1ee00 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72 61 6e 73  on..^If no trans
1ee10 61 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76 65  action is.active
1ee20 20 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65   (other than the
1ee30 20 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61 63   implied transac
1ee40 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72 65  tion that is cre
1ee50 61 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f  ated on every.co
1ee60 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 65 20  mmand) then the 
1ee70 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f 6c 75 74  ROLLBACK resolut
1ee80 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f  ion algorithm wo
1ee90 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
1eea0 74 68 65 0a 41 42 4f 52 54 20 61 6c 67 6f 72 69  the.ABORT algori
1eeb0 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  thm.</p></dd>..<
1eec0 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c  dt><b>ABORT</b><
1eed0 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
1eee0 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65  en an applicable
1eef0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1ef00 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
1ef10 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c 75 74 69  e ABORT.resoluti
1ef20 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f  on algorithm abo
1ef30 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
1ef40 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 77 69  SQL statement.wi
1ef50 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e  th an SQLITE_CON
1ef60 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e  STRAINT error an
1ef70 64 20 62 61 63 6b 73 20 6f 75 74 20 61 6e 79 20  d backs out any 
1ef80 63 68 61 6e 67 65 73 0a 6d 61 64 65 20 62 79 20  changes.made by 
1ef90 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20  the current SQL 
1efa0 73 74 61 74 65 6d 65 6e 74 3b 20 62 75 74 20 63  statement; but c
1efb0 68 61 6e 67 65 73 20 63 61 75 73 65 64 0a 62 79  hanges caused.by
1efc0 20 70 72 69 6f 72 20 53 51 4c 20 73 74 61 74 65   prior SQL state
1efd0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  ments within the
1efe0 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f   same transactio
1eff0 6e 20 61 72 65 20 70 72 65 73 65 72 76 65 64 20  n are preserved 
1f000 61 6e 64 20 74 68 65 0a 74 72 61 6e 73 61 63 74  and the.transact
1f010 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69  ion remains acti
1f020 76 65 2e 0a 54 68 69 73 20 69 73 20 74 68 65 20  ve..This is the 
1f030 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
1f040 20 61 6e 64 20 74 68 65 20 62 65 68 61 76 69 6f   and the behavio
1f050 72 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  r specified by t
1f060 68 65 20 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e  he SQL.standard.
1f070 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
1f080 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a  b>FAIL</b></dt>.
1f090 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
1f0a0 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
1f0b0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1f0c0 20 6f 63 63 75 72 73 2c 20 74 68 65 20 46 41 49   occurs, the FAI
1f0d0 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  L.resolution alg
1f0e0 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68  orithm aborts th
1f0f0 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
1f100 61 74 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a  atement with an.
1f110 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
1f120 54 20 65 72 72 6f 72 2e 20 20 5e 42 75 74 20 74  T error.  ^But t
1f130 68 65 20 46 41 49 4c 20 72 65 73 6f 6c 75 74 69  he FAIL resoluti
1f140 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b  on does not.back
1f150 20 6f 75 74 20 70 72 69 6f 72 20 63 68 61 6e 67   out prior chang
1f160 65 73 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  es of the SQL st
1f170 61 74 65 6d 65 6e 74 20 74 68 61 74 20 66 61 69  atement that fai
1f180 6c 65 64 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20  led nor does.it 
1f190 65 6e 64 20 74 68 65 20 74 72 61 6e 73 61 63 74  end the transact
1f1a0 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c  ion..^For exampl
1f1b0 65 2c 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a  e, if an UPDATE.
1f1c0 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e  statement encoun
1f1d0 74 65 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69  tered a constrai
1f1e0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20  nt violation on 
1f1f0 74 68 65 20 31 30 30 74 68 20 72 6f 77 20 74 68  the 100th row th
1f200 61 74 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74  at.it attempts t
1f210 6f 20 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74  o update, then t
1f220 68 65 20 66 69 72 73 74 20 39 39 20 72 6f 77 20  he first 99 row 
1f230 63 68 61 6e 67 65 73 20 61 72 65 20 70 72 65 73  changes are pres
1f240 65 72 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65  erved.but change
1f250 73 20 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e  s to rows 100 an
1f260 64 20 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f  d beyond never o
1f270 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  ccur.</p></dd>..
1f280 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62  <dt><b>IGNORE</b
1f290 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
1f2a0 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
1f2b0 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
1f2c0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
1f2d0 0a 74 68 65 20 49 47 4e 4f 52 45 20 72 65 73 6f  .the IGNORE reso
1f2e0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
1f2f0 20 73 6b 69 70 73 20 74 68 65 20 6f 6e 65 20 72   skips the one r
1f300 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ow that contains
1f310 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  .the constraint 
1f320 76 69 6f 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f  violation and co
1f330 6e 74 69 6e 75 65 73 20 70 72 6f 63 65 73 73 69  ntinues processi
1f340 6e 67 20 73 75 62 73 65 71 75 65 6e 74 20 72 6f  ng subsequent ro
1f350 77 73 0a 6f 66 20 74 68 65 20 53 51 4c 20 73 74  ws.of the SQL st
1f360 61 74 65 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f  atement as if no
1f370 74 68 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67  thing went wrong
1f380 2e 0a 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66  ..Other rows bef
1f390 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20 74 68  ore and after th
1f3a0 65 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61  e row that.conta
1f3b0 69 6e 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  ined the constra
1f3c0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
1f3d0 65 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  e inserted or up
1f3e0 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20  dated.normally. 
1f3f0 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74  ^No error is ret
1f400 75 72 6e 65 64 20 77 68 65 6e 20 74 68 65 20 49  urned when the I
1f410 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20 72  GNORE conflict r
1f420 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69  esolution.algori
1f430 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e  thm is used.</p>
1f440 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45  </dd>..<dt><b>RE
1f450 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  PLACE</b></dt>.<
1f460 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 20 55  dd><p> ^When a U
1f470 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
1f480 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
1f490 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 61  s, the REPLACE a
1f4a0 6c 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65 73  lgorithm.deletes
1f4b0 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f   pre-existing ro
1f4c0 77 73 20 74 68 61 74 20 61 72 65 20 63 61 75 73  ws that are caus
1f4d0 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69  ing the constrai
1f4e0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69  nt violation.pri
1f4f0 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 20  or to inserting 
1f500 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68 65 20  or updating the 
1f510 63 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64 20  current row and 
1f520 74 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74  the command cont
1f530 69 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e 67  inues .executing
1f540 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61   normally..^If a
1f550 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
1f560 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
1f570 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41  ccurs, the REPLA
1f580 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f  CE conflict.reso
1f590 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63 65 73 20  lution replaces 
1f5a0 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77  the NULL value w
1f5b0 69 74 68 0a 74 68 65 20 64 65 66 61 75 6c 74 20  ith.the default 
1f5c0 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63  value for that c
1f5d0 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65  olumn, or if the
1f5e0 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64   column has no d
1f5f0 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68  efault.value, th
1f600 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67  en the ABORT alg
1f610 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 0a  orithm is used..
1f620 5e 49 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73  ^If a CHECK cons
1f630 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1f640 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50   occurs, the REP
1f650 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
1f660 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74  solution.algorit
1f670 68 6d 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20  hm always works 
1f680 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a  like ABORT.</p>.
1f690 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45  .<p>^When the RE
1f6a0 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72  PLACE conflict r
1f6b0 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65  esolution strate
1f6c0 67 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20  gy deletes rows 
1f6d0 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69  in order to.sati
1f6e0 73 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  sfy a constraint
1f6f0 2c 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  , [CREATE TRIGGE
1f700 52 20 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67  R | delete trigg
1f710 65 72 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64  ers] fire if and
1f720 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73   only if.[recurs
1f730 69 76 65 5f 74 72 69 67 67 65 72 73 20 70 72 61  ive_triggers pra
1f740 67 6d 61 20 7c 20 72 65 63 75 72 73 69 76 65 20  gma | recursive 
1f750 74 72 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e  triggers] are en
1f760 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  abled.</p>..<p>^
1f770 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64  The [sqlite3_upd
1f780 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74  ate_hook | updat
1f790 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69  e hook] is not i
1f7a0 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20  nvoked for rows 
1f7b0 74 68 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64  that.are deleted
1f7c0 20 62 79 20 74 68 65 20 52 45 50 4c 41 43 45 20   by the REPLACE 
1f7d0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
1f7e0 69 6f 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e  ion strategy.  ^
1f7f0 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45  Nor does.REPLACE
1f800 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b   increment the [
1f810 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20  sqlite3_changes 
1f820 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  | change counter
1f830 5d 2e 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e  ]..The exception
1f840 61 6c 20 62 65 68 61 76 69 6f 72 73 20 64 65 66  al behaviors def
1f850 69 6e 65 64 20 69 6e 20 74 68 69 73 20 70 61 72  ined in this par
1f860 61 67 72 61 70 68 20 6d 69 67 68 74 20 63 68 61  agraph might cha
1f870 6e 67 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65  nge .in a future
1f880 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f   release.</p>.</
1f890 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67  dl>..<p>^The alg
1f8a0 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64  orithm specified
1f8b0 20 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73   in the OR claus
1f8c0 65 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  e of an INSERT o
1f8d0 72 20 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64  r UPDATE.overrid
1f8e0 65 73 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d  es any algorithm
1f8f0 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 20   specified in a 
1f900 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49  CREATE TABLE..^I
1f910 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69  f no algorithm i
1f920 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 79 77  s specified anyw
1f930 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20  here, the ABORT 
1f940 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
1f950 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<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 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1f9b0 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69  tion REINDEX rei
1f9c0 6e 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 52 65  ndex REINDEX..Re
1f9d0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
1f9e0 67 72 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d  gram reindex-stm
1f9f0 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
1fa00 65 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  e REINDEX comman
1fa10 64 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c  d is used to del
1fa20 65 74 65 20 61 6e 64 20 72 65 63 72 65 61 74 65  ete and recreate
1fa30 20 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63   indices from sc
1fa40 72 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75  ratch..This is u
1fa50 73 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64  seful when the d
1fa60 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63  efinition of a c
1fa70 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
1fa80 65 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c  e has changed..<
1fa90 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
1faa0 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20  REINDEX keyword 
1fab0 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20  is not followed 
1fac0 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73  by a collation-s
1fad0 65 71 75 65 6e 63 65 20 6f 72 20 64 61 74 61 62  equence or datab
1fae0 61 73 65 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e  ase .object iden
1faf0 74 69 66 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c  tifier, then all
1fb00 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20   indices in all 
1fb10 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1fb20 65 73 20 61 72 65 20 72 65 62 75 69 6c 74 2e 0a  es are rebuilt..
1fb30 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e  .<p>^If the REIN
1fb40 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 66  DEX keyword is f
1fb50 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c  ollowed by a col
1fb60 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20  lation-sequence 
1fb70 6e 61 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69  name, then.all i
1fb80 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74  ndices in all at
1fb90 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1fba0 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 61   that use the na
1fbb0 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  med collation se
1fbc0 71 75 65 6e 63 65 73 0a 61 72 65 20 72 65 63 72  quences.are recr
1fbd0 65 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c  eated. ..<p>^Or,
1fbe0 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
1fbf0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1fc00 20 52 45 49 4e 44 45 58 20 69 64 65 6e 74 69 66   REINDEX identif
1fc10 69 65 73 20 61 20 73 70 65 63 69 66 69 63 20 0a  ies a specific .
1fc20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2c 20  database table, 
1fc30 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
1fc40 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1fc50 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
1fc60 61 72 65 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49  are rebuilt. .^I
1fc70 66 20 69 74 20 69 64 65 6e 74 69 66 69 65 73 20  f it identifies 
1fc80 61 20 73 70 65 63 69 66 69 63 20 64 61 74 61 62  a specific datab
1fc90 61 73 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  ase index, then 
1fca0 6a 75 73 74 20 74 68 61 74 20 69 6e 64 65 78 20  just that index 
1fcb0 69 73 20 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c  is recreated...<
1fcc0 70 3e 5e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61  p>^If no <i>data
1fcd0 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73  base-name</i> is
1fce0 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74   specified and t
1fcf0 68 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68  here exists both
1fd00 20 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65   a table or.inde
1fd10 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f  x and a collatio
1fd20 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  n sequence of th
1fd30 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65  e specified name
1fd40 2c 20 53 51 4c 69 74 65 20 69 6e 74 65 72 70 72  , SQLite interpr
1fd50 65 74 73 0a 74 68 69 73 20 61 73 20 61 20 72 65  ets.this as a re
1fd60 71 75 65 73 74 20 74 6f 20 72 65 62 75 69 6c 64  quest to rebuild
1fd70 20 74 68 65 20 69 6e 64 69 63 65 73 20 74 68 61   the indices tha
1fd80 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20  t use the named 
1fd90 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1fda0 63 65 2e 0a 54 68 69 73 20 61 6d 62 69 67 75 69  ce..This ambigui
1fdb0 74 79 20 69 6e 20 74 68 65 20 73 79 6e 74 61 78  ty in the syntax
1fdc0 20 6d 61 79 20 62 65 20 61 76 6f 69 64 65 64 20   may be avoided 
1fdd0 62 79 20 61 6c 77 61 79 73 20 73 70 65 63 69 66  by always specif
1fde0 79 69 6e 67 20 61 0a 3c 69 3e 64 61 74 61 62 61  ying a.<i>databa
1fdf0 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e  se-name</i> when
1fe00 20 72 65 69 6e 64 65 78 69 6e 67 20 61 20 73 70   reindexing a sp
1fe10 65 63 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20  ecific table or 
1fe20 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  index...<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 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1fe80 63 74 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65  ction REPLACE re
1fe90 70 6c 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c  place REPLACE..<
1fea0 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  /tcl>..<p>^The R
1feb0 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69  EPLACE command i
1fec0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1fed0 68 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  he "[ON CONFLICT
1fee0 20 7c 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50   | INSERT OR REP
1fef0 4c 41 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f  LACE]".variant o
1ff00 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63  f the [INSERT] c
1ff10 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61  ommand.  .This a
1ff20 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64  lias is provided
1ff30 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69   for compatibili
1ff40 74 79 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  ty other SQL dat
1ff50 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20  abase engines.  
1ff60 53 65 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54  See the .[INSERT
1ff70 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65  ] command docume
1ff80 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69  ntation for addi
1ff90 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
1ffa0 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e  on.</p>  ..<tcl>
1ffb0 0a 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 23 23 23 23 23 23 23 23  ################
20000 0a 53 65 63 74 69 6f 6e 20 7b 57 49 54 48 20 63  .Section {WITH c
20010 6c 61 75 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f  lause} with {{co
20020 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
20030 73 73 69 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52  ssions} WITH}..R
20040 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
20050 61 67 72 61 6d 20 77 69 74 68 2d 63 6c 61 75 73  agram with-claus
20060 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d  e.</tcl>..<p>Com
20070 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73  mon Table Expres
20080 73 69 6f 6e 73 20 6f 72 20 43 54 45 73 20 61 63  sions or CTEs ac
20090 74 20 6c 69 6b 65 20 74 65 6d 70 6f 72 61 72 79  t like temporary
200a0 20 5b 76 69 65 77 73 5d 20 74 68 61 74 20 65 78   [views] that ex
200b0 69 73 74 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65  ist.only for the
200c0 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73   duration of a s
200d0 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
200e0 65 6e 74 2e 20 20 54 68 65 72 65 20 61 72 65 20  ent.  There are 
200f0 74 77 6f 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d  two kinds of.com
20100 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
20110 73 69 6f 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79  sions: "ordinary
20120 22 20 61 6e 64 20 22 72 65 63 75 72 73 69 76 65  " and "recursive
20130 22 2e 20 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d  ". Ordinary .com
20140 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
20150 73 69 6f 6e 73 20 61 72 65 20 68 65 6c 70 66 75  sions are helpfu
20160 6c 20 66 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65  l for making.que
20170 72 69 65 73 20 65 61 73 69 65 72 20 74 6f 20 75  ries easier to u
20180 6e 64 65 72 73 74 61 6e 64 20 62 79 20 66 61 63  nderstand by fac
20190 74 6f 72 69 6e 67 0a 73 75 62 71 75 65 72 69 65  toring.subquerie
201a0 73 20 6f 75 74 20 6f 66 20 74 68 65 20 6d 61 69  s out of the mai
201b0 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  n SQL statement.
201c0 0a 52 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f  .Recursive commo
201d0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
201e0 6f 6e 73 0a 70 72 6f 76 69 64 65 20 74 68 65 20  ons.provide the 
201f0 61 62 69 6c 69 74 79 20 74 6f 20 64 6f 20 68 69  ability to do hi
20200 65 72 61 72 63 68 69 63 61 6c 20 6f 72 0a 72 65  erarchical or.re
20210 63 75 72 73 69 76 65 20 71 75 65 72 69 65 73 20  cursive queries 
20220 6f 66 20 74 72 65 65 73 20 61 6e 64 20 67 72 61  of trees and gra
20230 70 68 73 2c 20 61 20 63 61 70 61 62 69 6c 69 74  phs, a capabilit
20240 79 0a 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 74  y.that is not ot
20250 68 65 72 77 69 73 65 20 61 76 61 69 6c 61 62 6c  herwise availabl
20260 65 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  e in the SQL lan
20270 67 75 61 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63  guage...<p>All c
20280 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
20290 65 73 73 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72  essions (ordinar
202a0 79 20 61 6e 64 20 72 65 63 75 72 73 69 76 65 29  y and recursive)
202b0 20 61 72 65 20 0a 63 72 65 61 74 65 64 20 62 79   are .created by
202c0 20 70 72 65 70 65 6e 64 69 6e 67 20 61 20 57 49   prepending a WI
202d0 54 48 20 63 6c 61 75 73 65 20 69 6e 20 66 72 6f  TH clause in fro
202e0 6e 74 20 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d  nt of a [SELECT]
202f0 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c  , [INSERT], [DEL
20300 45 54 45 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45  ETE],.or [UPDATE
20310 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 20  ] statement.  A 
20320 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75  single WITH clau
20330 73 65 20 63 61 6e 20 73 70 65 63 69 66 79 20 6f  se can specify o
20340 6e 65 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f  ne or more.commo
20350 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
20360 6f 6e 73 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69  ons, some of whi
20370 63 68 20 61 72 65 20 6f 72 64 69 6e 61 72 79 20  ch are ordinary 
20380 61 6e 64 20 73 6f 6d 65 20 6f 66 20 77 68 69 63  and some of whic
20390 68 0a 61 72 65 20 72 65 63 75 72 73 69 76 65 2e  h.are recursive.
203a0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
203b0 6e 74 20 6f 72 64 69 6e 61 72 79 63 74 65 20 7b  nt ordinarycte {
203c0 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  ordinary common 
203d0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
203e0 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64  s}</tcl>.<h3>Ord
203f0 69 6e 61 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62  inary Common Tab
20400 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f  le Expressions</
20410 68 33 3e 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e  h3>..<p>An ordin
20420 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
20430 20 65 78 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b   expression work
20440 73 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  s as if it were 
20450 61 20 5b 76 69 65 77 5d 20 74 68 61 74 0a 65 78  a [view] that.ex
20460 69 73 74 73 20 66 6f 72 20 74 68 65 20 64 75 72  ists for the dur
20470 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c  ation of a singl
20480 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72  e statement.  Or
20490 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
204a0 62 6c 65 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  ble.expressions 
204b0 61 72 65 20 75 73 65 66 75 6c 20 66 6f 72 20 66  are useful for f
204c0 61 63 74 6f 72 69 6e 67 20 6f 75 74 20 73 75 62  actoring out sub
204d0 71 75 65 72 69 65 73 20 61 6e 64 20 6d 61 6b 69  queries and maki
204e0 6e 67 20 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53  ng the overall.S
204f0 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 65 61 73  QL statement eas
20500 69 65 72 20 74 6f 20 72 65 61 64 20 61 6e 64 20  ier to read and 
20510 75 6e 64 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e  understand...<p>
20520 41 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61  A WITH clause ca
20530 6e 20 63 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61  n contain ordina
20540 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ry common table 
20550 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 65 6e  expressions even
20560 20 69 66 0a 69 74 20 69 6e 63 6c 75 64 65 73 20   if.it includes 
20570 74 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65  the RECURSIVE ke
20580 79 77 6f 72 64 2e 20 20 54 68 65 20 75 73 65 20  yword.  The use 
20590 6f 66 20 52 45 43 55 52 53 49 56 45 20 64 6f 65  of RECURSIVE doe
205a0 73 20 6e 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d  s not force.comm
205b0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
205c0 69 6f 6e 73 20 74 6f 20 62 65 20 72 65 63 75 72  ions to be recur
205d0 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f  sive...<tcl>.hd_
205e0 66 72 61 67 6d 65 6e 74 20 72 65 63 75 72 73 69  fragment recursi
205f0 76 65 63 74 65 20 7b 72 65 63 75 72 73 69 76 65  vecte {recursive
20600 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
20610 70 72 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65  pressions} \.{re
20620 63 75 72 73 69 76 65 20 71 75 65 72 79 7d 0a 3c  cursive query}.<
20630 2f 74 63 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73  /tcl>.<h3>Recurs
20640 69 76 65 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65  ive Common Table
20650 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   Expressions</h3
20660 3e 0a 0a 3c 70 3e 41 20 72 65 63 75 72 73 69 76  >..<p>A recursiv
20670 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
20680 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
20690 20 75 73 65 64 20 74 6f 20 77 72 69 74 65 20 61   used to write a
206a0 20 71 75 65 72 79 20 74 68 61 74 0a 77 61 6c 6b   query that.walk
206b0 73 20 61 20 74 72 65 65 20 6f 72 20 67 72 61 70  s a tree or grap
206c0 68 2e 20 20 41 20 72 65 63 75 72 73 69 76 65 20  h.  A recursive 
206d0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
206e0 72 65 73 73 69 6f 6e 20 68 61 73 20 74 68 65 20  ression has the 
206f0 73 61 6d 65 0a 62 61 73 69 63 20 73 79 6e 74 61  same.basic synta
20700 78 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79  x as an ordinary
20710 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
20720 70 72 65 73 73 69 6f 6e 2c 20 62 75 74 20 77 69  pression, but wi
20730 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  th the following
20740 0a 61 64 64 69 74 69 6f 6e 61 6c 20 66 65 61 74  .additional feat
20750 75 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  ures:..<ol>.<li>
20760 20 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74   The "[select-st
20770 6d 74 5d 22 0a 20 20 20 20 20 6d 75 73 74 20 62  mt]".     must b
20780 65 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65  e a [compound se
20790 6c 65 63 74 5d 20 77 68 65 72 65 20 74 68 65 20  lect] where the 
207a0 72 69 67 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70  right-most [comp
207b0 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 20 69  ound-operator] i
207c0 73 0a 20 20 20 20 20 65 69 74 68 65 72 20 55 4e  s.     either UN
207d0 49 4f 4e 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c  ION or UNION ALL
207e0 2e 0a 3c 6c 69 3e 20 54 68 65 20 74 61 62 6c 65  ..<li> The table
207f0 20 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65   named on the le
20800 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20  ft-hand side of 
20810 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20 6d  the AS keyword m
20820 75 73 74 20 61 70 70 65 61 72 0a 20 20 20 20 20  ust appear.     
20830 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20  exactly once in 
20840 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
20850 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73  of the right-mos
20860 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t SELECT stateme
20870 6e 74 0a 20 20 20 20 20 6f 66 20 74 68 65 20 63  nt.     of the c
20880 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20  ompound select, 
20890 61 6e 64 20 6e 6f 77 68 65 72 65 20 65 6c 73 65  and nowhere else
208a0 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70  ..</ol>..<p>To p
208b0 75 74 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61  ut it another wa
208c0 79 2c 20 61 20 72 65 63 75 72 73 69 76 65 20 63  y, a recursive c
208d0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
208e0 65 73 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b  ession must.look
208f0 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77   like the follow
20900 69 6e 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72  ing:..<tcl>Recur
20910 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
20920 6d 20 72 65 63 75 72 73 69 76 65 2d 63 74 65 3c  m recursive-cte<
20930 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 65 20 72 65 66  /tcl>..<p>We ref
20940 65 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  er to the table 
20950 6e 61 6d 65 64 20 62 79 20 74 68 65 20 63 74 65  named by the cte
20960 2d 74 61 62 6c 65 2d 6e 61 6d 65 20 69 6e 20 61  -table-name in a
20970 20 72 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d 6f   recursive.commo
20980 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
20990 6f 6e 20 61 73 20 74 68 65 20 22 72 65 63 75 72  on as the "recur
209a0 73 69 76 65 20 74 61 62 6c 65 22 2e 0a 49 6e 20  sive table"..In 
209b0 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 63 74  the recursive-ct
209c0 65 20 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d  e bubble diagram
209d0 20 61 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75   above, the recu
209e0 72 73 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74  rsive.table must
209f0 20 61 70 70 65 61 72 20 65 78 61 63 74 6c 79 20   appear exactly 
20a00 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  once in the FROM
20a10 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 72   clause of the r
20a20 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 0a  ecursive-select.
20a30 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20 61 70 70  and must not app
20a40 65 61 72 20 61 6e 79 77 68 65 72 65 20 65 6c 73  ear anywhere els
20a50 65 20 69 6e 20 65 69 74 68 65 72 20 74 68 65 20  e in either the 
20a60 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 6f  initial-select o
20a70 72 20 74 68 65 0a 72 65 63 75 72 73 69 76 65 2d  r the.recursive-
20a80 73 65 6c 65 63 74 2c 20 69 6e 63 6c 75 64 69 6e  select, includin
20a90 67 20 73 75 62 71 75 65 72 69 65 73 2e 20 20 54  g subqueries.  T
20aa0 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  he initial-selec
20ab0 74 20 6d 61 79 20 62 65 0a 61 20 5b 63 6f 6d 70  t may be.a [comp
20ac0 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2c 20 62 75  ound select], bu
20ad0 74 20 69 74 20 6d 61 79 20 6e 6f 74 20 69 6e 63  t it may not inc
20ae0 6c 75 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59  lude an ORDER BY
20af0 2c 20 4c 49 4d 49 54 2c 20 6f 72 20 4f 46 46 53  , LIMIT, or OFFS
20b00 45 54 2e 0a 54 68 65 20 72 65 63 75 72 73 69 76  ET..The recursiv
20b10 65 2d 73 65 6c 65 63 74 20 6d 75 73 74 20 62 65  e-select must be
20b20 20 61 20 73 69 6d 70 6c 65 20 73 65 6c 65 63 74   a simple select
20b30 2c 20 6e 6f 74 20 61 20 63 6f 6d 70 6f 75 6e 64  , not a compound
20b40 2e 20 20 54 68 65 0a 72 65 63 75 72 73 69 76 65  .  The.recursive
20b50 2d 73 65 6c 65 63 74 20 69 73 20 61 6c 6c 6f 77  -select is allow
20b60 65 64 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 6e  ed to include an
20b70 20 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54   ORDER BY, LIMIT
20b80 2c 20 61 6e 64 2f 6f 72 20 4f 46 46 53 45 54 2e  , and/or OFFSET.
20b90 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63 20 61  ..<p>The basic a
20ba0 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 63 6f 6d  lgorithm for com
20bb0 70 75 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  puting the conte
20bc0 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  nt of the recurs
20bd0 69 76 65 20 74 61 62 6c 65 0a 69 73 20 61 73 20  ive table.is as 
20be0 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c  follows:..<ol>.<
20bf0 6c 69 3e 20 52 75 6e 20 74 68 65 20 69 6e 69 74  li> Run the init
20c00 69 61 6c 2d 73 65 6c 65 63 74 20 61 6e 64 20 61  ial-select and a
20c10 64 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 74  dd the results t
20c20 6f 20 61 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20  o a queue..<li> 
20c30 57 68 69 6c 65 20 74 68 65 20 71 75 65 75 65 20  While the queue 
20c40 69 73 20 6e 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f  is not empty:.<o
20c50 6c 20 74 79 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e  l type="a">.<li>
20c60 20 45 78 74 72 61 63 74 20 61 20 73 69 6e 67 6c   Extract a singl
20c70 65 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 71  e row from the q
20c80 75 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72  ueue..<li> Inser
20c90 74 20 74 68 61 74 20 73 69 6e 67 6c 65 20 72 6f  t that single ro
20ca0 77 20 69 6e 74 6f 20 74 68 65 20 72 65 63 75 72  w into the recur
20cb0 73 69 76 65 20 74 61 62 6c 65 0a 3c 6c 69 3e 20  sive table.<li> 
20cc0 50 72 65 74 65 6e 64 20 74 68 61 74 20 74 68 65  Pretend that the
20cd0 20 73 69 6e 67 6c 65 20 72 6f 77 20 6a 75 73 74   single row just
20ce0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68   extracted is th
20cf0 65 20 6f 6e 6c 79 0a 20 20 20 20 20 72 6f 77 20  e only.     row 
20d00 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  in the recursive
20d10 20 74 61 62 6c 65 20 61 6e 64 20 72 75 6e 20 74   table and run t
20d20 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
20d30 65 63 74 2c 0a 20 20 20 20 20 61 64 64 69 6e 67  ect,.     adding
20d40 20 61 6c 6c 20 72 65 73 75 6c 74 73 20 74 6f 20   all results to 
20d50 74 68 65 20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e  the queue..</ol>
20d60 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62  .</ol>..<p>The b
20d70 61 73 69 63 20 70 72 6f 63 65 64 75 72 65 20 61  asic procedure a
20d80 62 6f 76 65 20 6d 61 79 20 6d 6f 64 69 66 69 65  bove may modifie
20d90 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d by the followi
20da0 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 72 75  ng additional ru
20db0 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  les:..<ul>.<li><
20dc0 70 3e 0a 20 20 49 66 20 61 20 55 4e 49 4f 4e 20  p>.  If a UNION 
20dd0 6f 70 65 72 61 74 6f 72 20 63 6f 6e 6e 65 63 74  operator connect
20de0 73 20 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65  s the initial-se
20df0 6c 65 63 74 20 77 69 74 68 20 74 68 65 0a 20 20  lect with the.  
20e00 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
20e10 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 64 64 20  , then only add 
20e20 72 6f 77 73 20 74 6f 20 74 68 65 20 71 75 65 75  rows to the queu
20e30 65 20 69 66 20 6e 6f 20 69 64 65 6e 74 69 63 61  e if no identica
20e40 6c 20 72 6f 77 20 68 61 73 0a 20 20 62 65 65 6e  l row has.  been
20e50 20 70 72 65 76 69 6f 75 73 6c 79 20 61 64 64 65   previously adde
20e60 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20  d to the queue. 
20e70 20 52 65 70 65 61 74 65 64 20 72 6f 77 73 20 61   Repeated rows a
20e80 72 65 20 64 69 73 63 61 72 64 65 64 20 62 65 66  re discarded bef
20e90 6f 72 65 20 62 65 69 6e 67 0a 20 20 61 64 64 65  ore being.  adde
20ea0 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 20 65  d to the queue e
20eb0 76 65 6e 20 69 66 20 74 68 65 20 72 65 70 65 61  ven if the repea
20ec0 74 65 64 20 72 6f 77 73 20 68 61 76 65 20 61 6c  ted rows have al
20ed0 72 65 61 64 79 20 62 65 65 6e 20 65 78 74 72 61  ready been extra
20ee0 63 74 65 64 0a 20 20 66 72 6f 6d 20 74 68 65 20  cted.  from the 
20ef0 71 75 65 75 65 20 62 79 20 74 68 65 20 72 65 63  queue by the rec
20f00 75 72 73 69 6f 6e 20 73 74 65 70 2e 20 20 49 66  ursion step.  If
20f10 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73   the operator is
20f20 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74 68   UNION ALL,.  th
20f30 65 6e 20 61 6c 6c 20 72 6f 77 73 20 67 65 6e 65  en all rows gene
20f40 72 61 74 65 64 20 62 79 20 62 6f 74 68 20 74 68  rated by both th
20f50 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  e initial-select
20f60 20 61 6e 64 20 74 68 65 0a 20 20 72 65 63 75 72   and the.  recur
20f70 73 69 76 65 2d 73 65 6c 65 63 74 20 61 72 65 20  sive-select are 
20f80 61 6c 77 61 79 73 20 61 64 64 65 64 20 74 6f 20  always added to 
20f90 74 68 65 20 71 75 65 75 65 20 65 76 65 6e 20 69  the queue even i
20fa0 66 20 74 68 65 79 20 61 72 65 20 72 65 70 65 61  f they are repea
20fb0 74 73 2e 0a 20 20 57 68 65 6e 20 64 65 74 65 72  ts..  When deter
20fc0 6d 69 6e 69 6e 67 20 69 66 20 61 20 72 6f 77 20  mining if a row 
20fd0 69 73 20 72 65 70 65 61 74 65 64 2c 20 4e 55 4c  is repeated, NUL
20fe0 4c 20 76 61 6c 75 65 73 20 63 6f 6d 70 61 72 65  L values compare
20ff0 0a 20 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20  .  equal to one 
21000 61 6e 6f 74 68 65 72 20 61 6e 64 20 6e 6f 74 20  another and not 
21010 65 71 75 61 6c 20 74 6f 20 61 6e 79 20 6f 74 68  equal to any oth
21020 65 72 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70  er value..<li><p
21030 3e 0a 20 20 54 68 65 20 4c 49 4d 49 54 20 63 6c  >.  The LIMIT cl
21040 61 75 73 65 2c 20 69 66 20 70 72 65 73 65 6e 74  ause, if present
21050 2c 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  , determines the
21060 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
21070 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 20 20 77  of rows that.  w
21080 69 6c 6c 20 65 76 65 72 20 62 65 20 61 64 64 65  ill ever be adde
21090 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
210a0 76 65 20 74 61 62 6c 65 20 69 6e 20 73 74 65 70  ve table in step
210b0 20 32 62 2e 0a 20 20 4f 6e 63 65 20 74 68 65 20   2b..  Once the 
210c0 6c 69 6d 69 74 20 69 73 20 72 65 61 63 68 65 64  limit is reached
210d0 2c 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20  , the recursion 
210e0 73 74 6f 70 73 2e 0a 20 20 41 20 6c 69 6d 69 74  stops..  A limit
210f0 20 6f 66 20 7a 65 72 6f 20 6d 65 61 6e 73 20 74   of zero means t
21100 68 61 74 20 6e 6f 20 72 6f 77 73 20 61 72 65 20  hat no rows are 
21110 65 76 65 72 20 61 64 64 65 64 20 74 6f 20 74 68  ever added to th
21120 65 0a 20 20 72 65 63 75 72 73 69 76 65 20 74 61  e.  recursive ta
21130 62 6c 65 2c 20 61 6e 64 20 61 20 6e 65 67 61 74  ble, and a negat
21140 69 76 65 20 6c 69 6d 69 74 20 6d 65 61 6e 73 20  ive limit means 
21150 61 6e 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75 6d  an unlimited num
21160 62 65 72 20 6f 66 20 72 6f 77 73 0a 20 20 6d 61  ber of rows.  ma
21170 79 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68  y be added to th
21180 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
21190 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65  e..<li><p>.  The
211a0 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
211b0 69 66 20 69 74 20 69 73 20 70 72 65 73 65 6e 74  if it is present
211c0 20 61 6e 64 20 68 61 73 20 61 20 70 6f 73 69 74   and has a posit
211d0 69 76 65 20 76 61 6c 75 65 20 4e 2c 20 70 72 65  ive value N, pre
211e0 76 65 6e 74 73 20 74 68 65 0a 20 20 66 69 72 73  vents the.  firs
211f0 74 20 4e 20 72 6f 77 73 20 66 72 6f 6d 20 62 65  t N rows from be
21200 69 6e 67 20 61 64 64 65 64 20 74 6f 20 74 68 65  ing added to the
21210 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
21220 2e 0a 20 20 54 68 65 20 66 69 72 73 74 20 4e 20  ..  The first N 
21230 72 6f 77 73 20 61 72 65 20 73 74 69 6c 6c 20 70  rows are still p
21240 72 6f 63 65 73 73 65 64 20 62 79 20 74 68 65 20  rocessed by the 
21250 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
21260 3b 20 74 68 65 79 0a 20 20 6a 75 73 74 20 61 72  ; they.  just ar
21270 65 20 6e 6f 74 20 61 64 64 65 64 20 74 6f 20 74  e not added to t
21280 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
21290 6c 65 2e 20 20 52 6f 77 73 20 61 72 65 20 6e 6f  le.  Rows are no
212a0 74 20 63 6f 75 6e 74 65 64 20 74 6f 77 61 72 64  t counted toward
212b0 0a 20 20 66 75 6c 66 69 6c 6c 69 6e 67 20 74 68  .  fulfilling th
212c0 65 20 4c 49 4d 49 54 20 75 6e 74 69 6c 20 61 6c  e LIMIT until al
212d0 6c 20 4f 46 46 53 45 54 20 72 6f 77 73 20 68 61  l OFFSET rows ha
212e0 76 65 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e  ve been skipped.
212f0 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 6e  .<li><p>.  If an
21300 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
21310 20 69 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20   is present, it 
21320 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6f  determines the o
21330 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
21340 77 73 0a 20 20 61 72 65 20 65 78 74 72 61 63 74  ws.  are extract
21350 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75  ed from the queu
21360 65 20 69 6e 20 73 74 65 70 20 32 61 2e 20 20 49  e in step 2a.  I
21370 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 52  f there is no OR
21380 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 0a 20  DER BY clause,. 
21390 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20   then the order 
213a0 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72  in which rows ar
213b0 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 75  e extracted is u
213c0 6e 64 65 66 69 6e 65 64 2e 20 20 28 49 6e 20 74  ndefined.  (In t
213d0 68 65 20 63 75 72 72 65 6e 74 0a 20 20 69 6d 70  he current.  imp
213e0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
213f0 20 71 75 65 75 65 20 62 65 63 6f 6d 65 73 20 61   queue becomes a
21400 20 46 49 46 4f 20 69 66 20 74 68 65 20 4f 52 44   FIFO if the ORD
21410 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
21420 6f 6d 69 74 74 65 64 2c 0a 20 20 62 75 74 20 61  omitted,.  but a
21430 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75  pplications shou
21440 6c 64 20 6e 6f 74 20 64 65 70 65 6e 64 20 6f 6e  ld not depend on
21450 20 74 68 61 74 20 66 61 63 74 20 73 69 6e 63 65   that fact since
21460 20 69 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65   it might change
21470 2e 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68  .).</ul>..<tcl>h
21480 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78 31  d_fragment rcex1
21490 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65 63 75 72  </tcl>.<h4>Recur
214a0 73 69 76 65 20 51 75 65 72 79 20 45 78 61 6d 70  sive Query Examp
214b0 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  les</h4>..<p>The
214c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79   following query
214d0 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 69 6e 74   returns all int
214e0 65 67 65 72 73 20 62 65 74 77 65 65 6e 20 31 20  egers between 1 
214f0 61 6e 64 20 31 30 30 30 30 30 30 3a 0a 0a 3c 62  and 1000000:..<b
21500 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
21510 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
21520 20 63 6e 74 28 78 29 20 41 53 20 28 56 41 4c 55   cnt(x) AS (VALU
21530 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  ES(1) UNION ALL 
21540 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20  SELECT x+1 FROM 
21550 63 6e 74 20 57 48 45 52 45 20 78 3c 31 30 30 30  cnt WHERE x<1000
21560 30 30 30 29 0a 53 45 4c 45 43 54 20 78 20 46 52  000).SELECT x FR
21570 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f  OM cnt;.</pre></
21580 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
21590 43 6f 6e 73 69 64 65 72 20 68 6f 77 20 74 68 69  Consider how thi
215a0 73 20 71 75 65 72 79 20 77 6f 72 6b 73 2e 20 20  s query works.  
215b0 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  The initial-sele
215c0 63 74 0a 72 75 6e 73 20 66 69 72 73 74 20 61 6e  ct.runs first an
215d0 64 20 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67  d returns a sing
215e0 6c 65 20 72 6f 77 0a 77 69 74 68 20 61 20 73 69  le row.with a si
215f0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 22 31 22 2e  ngle column "1".
21600 20 20 54 68 69 73 20 6f 6e 65 20 72 6f 77 20 69    This one row i
21610 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71  s added to the q
21620 75 65 75 65 2e 20 20 49 6e 0a 73 74 65 70 20 32  ueue.  In.step 2
21630 61 2c 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  a, that one row 
21640 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f  is extracted fro
21650 6d 20 74 68 65 20 71 75 65 75 65 20 61 6e 64 20  m the queue and 
21660 61 64 64 65 64 20 74 6f 20 22 63 6e 74 22 2e 0a  added to "cnt"..
21670 54 68 65 6e 20 74 68 65 20 72 65 63 75 72 73 69  Then the recursi
21680 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e  ve-select is run
21690 20 69 6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77   in accordance w
216a0 69 74 68 20 73 74 65 70 20 32 63 20 67 65 6e 65  ith step 2c gene
216b0 72 61 74 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20  rating.a single 
216c0 6e 65 77 20 72 6f 77 20 77 69 74 68 20 76 61 6c  new row with val
216d0 75 65 20 22 32 22 20 74 6f 20 61 64 64 20 74 6f  ue "2" to add to
216e0 20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 65   the queue.  The
216f0 20 71 75 65 75 65 20 73 74 69 6c 6c 0a 68 61 73   queue still.has
21700 20 6f 6e 65 20 72 6f 77 2c 20 73 6f 20 73 74 65   one row, so ste
21710 70 20 32 20 72 65 70 65 61 74 73 2e 20 20 54 68  p 2 repeats.  Th
21720 65 20 22 32 22 20 72 6f 77 20 69 73 20 65 78 74  e "2" row is ext
21730 72 61 63 74 65 64 20 61 6e 64 20 61 64 64 65 64  racted and added
21740 20 74 6f 20 74 68 65 0a 72 65 63 75 72 73 69 76   to the.recursiv
21750 65 20 74 61 62 6c 65 20 62 79 20 73 74 65 70 73  e table by steps
21760 20 32 61 20 61 6e 64 20 32 62 2e 20 20 54 68 65   2a and 2b.  The
21770 6e 20 74 68 65 20 72 6f 77 20 63 6f 6e 74 61 69  n the row contai
21780 6e 69 6e 67 20 32 20 69 73 20 75 73 65 64 20 0a  ning 2 is used .
21790 61 73 20 69 66 20 69 74 20 77 65 72 65 20 74 68  as if it were th
217a0 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65  e complete conte
217b0 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  nt of the recurs
217c0 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  ive table and th
217d0 65 20 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c  e .recursive-sel
217e0 65 63 74 20 69 73 20 72 75 6e 20 61 67 61 69 6e  ect is run again
217f0 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  , resulting in a
21800 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20   row with value 
21810 22 33 22 20 62 65 69 6e 67 20 61 64 64 65 64 0a  "3" being added.
21820 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 54  to the queue.  T
21830 68 69 73 20 72 65 70 65 61 74 73 20 39 39 39 39  his repeats 9999
21840 39 39 20 74 69 6d 65 73 20 75 6e 74 69 6c 20 66  99 times until f
21850 69 6e 61 6c 6c 79 20 61 74 20 73 74 65 70 20 32  inally at step 2
21860 61 20 74 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65  a the.only value
21870 20 6f 6e 20 74 68 65 20 71 75 65 75 65 20 69 73   on the queue is
21880 20 61 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e   a row containin
21890 67 20 31 30 30 30 30 30 30 2e 20 20 54 68 61 74  g 1000000.  That
218a0 20 72 6f 77 20 69 73 0a 65 78 74 72 61 63 74 65   row is.extracte
218b0 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74  d and added to t
218c0 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
218d0 6c 65 2e 20 20 42 75 74 20 74 68 69 73 20 74 69  le.  But this ti
218e0 6d 65 2c 20 74 68 65 0a 57 48 45 52 45 20 63 6c  me, the.WHERE cl
218f0 61 75 73 65 20 63 61 75 73 65 73 20 74 68 65 20  ause causes the 
21900 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
21910 20 74 6f 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f   to return no ro
21920 77 73 2c 20 73 6f 20 74 68 65 0a 71 75 65 75 65  ws, so the.queue
21930 20 72 65 6d 61 69 6e 73 20 65 6d 70 74 79 20 61   remains empty a
21940 6e 64 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  nd the recursion
21950 20 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f   stops...<p><b>O
21960 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65  ptimization note
21970 3a 3c 2f 62 3e 0a 49 6e 20 74 68 65 20 64 69 73  :</b>.In the dis
21980 63 75 73 73 69 6f 6e 20 61 62 6f 76 65 2c 20 73  cussion above, s
21990 74 61 74 65 6d 65 6e 74 73 20 6c 69 6b 65 20 22  tatements like "
219a0 69 6e 73 65 72 74 20 74 68 65 20 72 6f 77 20 69  insert the row i
219b0 6e 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76  nto.the recursiv
219c0 65 20 74 61 62 6c 65 22 20 73 68 6f 75 6c 64 20  e table" should 
219d0 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 20 63 6f  be understood co
219e0 6e 63 65 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20  nceptually, not 
219f0 6c 69 74 65 72 61 6c 6c 79 2e 0a 49 74 20 73 6f  literally..It so
21a00 75 6e 64 73 20 61 73 20 69 66 20 53 51 4c 69 74  unds as if SQLit
21a10 65 20 69 73 20 61 63 63 75 6d 75 6c 61 74 69 6e  e is accumulatin
21a20 67 20 61 20 68 75 67 65 20 74 61 62 6c 65 0a 63  g a huge table.c
21a30 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6d 69  ontaining one mi
21a40 6c 6c 69 6f 6e 20 72 6f 77 73 2c 20 74 68 65 6e  llion rows, then
21a50 20 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64 20   going back and 
21a60 73 63 61 6e 6e 69 6e 67 20 74 68 61 74 20 74 61  scanning that ta
21a70 62 6c 65 0a 66 72 6f 6d 20 74 6f 70 20 74 6f 20  ble.from top to 
21a80 62 6f 74 74 6f 6d 20 74 6f 20 67 65 6e 65 72 61  bottom to genera
21a90 74 65 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  te the result.  
21aa0 57 68 61 74 20 72 65 61 6c 6c 79 20 68 61 70 70  What really happ
21ab0 65 6e 73 0a 69 73 20 74 68 61 74 20 74 68 65 20  ens.is that the 
21ac0 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
21ad0 73 65 65 73 20 74 68 61 74 20 76 61 6c 75 65 73  sees that values
21ae0 20 69 6e 20 74 68 65 0a 22 63 6e 74 22 20 72 65   in the."cnt" re
21af0 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 61 72  cursive table ar
21b00 65 20 6f 6e 6c 79 20 75 73 65 64 20 6f 6e 63 65  e only used once
21b10 2e 20 20 53 6f 20 61 73 20 65 61 63 68 20 72 6f  .  So as each ro
21b20 77 20 69 73 20 61 64 64 65 64 20 74 6f 0a 74 68  w is added to.th
21b30 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
21b40 65 2c 20 74 68 61 74 20 72 6f 77 20 69 73 20 69  e, that row is i
21b50 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 74 75 72  mmediately retur
21b60 6e 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  ned as a result 
21b70 6f 66 20 74 68 65 20 6d 61 69 6e 0a 53 45 4c 45  of the main.SELE
21b80 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  CT statement and
21b90 20 74 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e   then discarded.
21ba0 20 20 53 51 4c 69 74 65 20 64 6f 65 73 20 3c 65    SQLite does <e
21bb0 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d  m>not</em> accum
21bc0 75 6c 61 74 65 0a 61 20 74 65 6d 70 6f 72 61 72  ulate.a temporar
21bd0 79 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  y table containi
21be0 6e 67 20 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77  ng a million row
21bf0 73 2e 20 20 56 65 72 79 20 6c 69 74 74 6c 65 20  s.  Very little 
21c00 6d 65 6d 6f 72 79 20 69 73 0a 6e 65 65 64 65 64  memory is.needed
21c10 20 74 6f 20 72 75 6e 20 74 68 65 20 61 62 6f 76   to run the abov
21c20 65 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65  e example.  Howe
21c30 76 65 72 2c 20 69 66 20 74 68 65 20 65 78 61 6d  ver, if the exam
21c40 70 6c 65 20 68 61 64 20 75 73 65 64 0a 55 4e 49  ple had used.UNI
21c50 4f 4e 20 69 6e 73 74 65 61 64 20 6f 66 20 55 4e  ON instead of UN
21c60 49 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51  ION ALL, then SQ
21c70 4c 69 74 65 20 77 6f 75 6c 64 20 68 61 76 65 20  Lite would have 
21c80 68 61 64 20 74 6f 20 6b 65 65 70 20 61 72 6f 75  had to keep arou
21c90 6e 64 0a 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c  nd.all previousl
21ca0 79 20 67 65 6e 65 72 61 74 65 64 20 63 6f 6e 74  y generated cont
21cb0 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ent in order to 
21cc0 63 68 65 63 6b 20 66 6f 72 20 64 75 70 6c 69 63  check for duplic
21cd0 61 74 65 73 2e 0a 46 6f 72 20 74 68 69 73 20 72  ates..For this r
21ce0 65 61 73 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65  eason, programme
21cf0 72 73 20 73 68 6f 75 6c 64 20 73 74 72 69 76 65  rs should strive
21d00 20 74 6f 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c   to use UNION AL
21d10 4c 20 69 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49  L instead.of UNI
21d20 4f 4e 20 77 68 65 6e 20 66 65 61 73 69 62 6c 65  ON when feasible
21d30 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20  ...<p>Here is a 
21d40 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65  variation on the
21d50 20 70 72 65 76 69 6f 75 73 20 65 78 61 6d 70 6c   previous exampl
21d60 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
21d70 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
21d80 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53  SIVE.  cnt(x) AS
21d90 20 28 0a 20 20 20 20 20 53 45 4c 45 43 54 20 31   (.     SELECT 1
21da0 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  .     UNION ALL.
21db0 20 20 20 20 20 53 45 4c 45 43 54 20 78 2b 31 20       SELECT x+1 
21dc0 46 52 4f 4d 20 63 6e 74 0a 20 20 20 20 20 20 4c  FROM cnt.      L
21dd0 49 4d 49 54 20 31 30 30 30 30 30 30 0a 20 20 29  IMIT 1000000.  )
21de0 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63  .SELECT x FROM c
21df0 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  nt;.</pre></bloc
21e00 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72  kquote>..<p>Ther
21e10 65 20 61 72 65 20 74 77 6f 20 64 69 66 66 65 72  e are two differ
21e20 65 6e 63 65 73 20 69 6e 20 74 68 69 73 20 76 61  ences in this va
21e30 72 69 61 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e  riation.  The in
21e40 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a  itial-select is.
21e50 22 53 45 4c 45 43 54 20 31 22 20 69 6e 73 74 65  "SELECT 1" inste
21e60 61 64 20 6f 66 20 22 56 41 4c 55 45 53 28 31 29  ad of "VALUES(1)
21e70 22 2e 20 20 42 75 74 20 74 68 6f 73 65 20 61 72  ".  But those ar
21e80 65 20 6a 75 73 74 20 64 69 66 66 65 72 65 6e 74  e just different
21e90 0a 73 79 6e 74 61 78 65 73 20 66 6f 72 20 73 61  .syntaxes for sa
21ea0 79 69 6e 67 20 65 78 61 63 74 6c 79 20 74 68 65  ying exactly the
21eb0 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 54 68   same thing.  Th
21ec0 65 20 6f 74 68 65 72 20 63 68 61 6e 67 65 20 69  e other change i
21ed0 73 20 74 68 61 74 20 74 68 65 0a 72 65 63 75 72  s that the.recur
21ee0 73 69 6f 6e 20 69 73 20 73 74 6f 70 70 65 64 20  sion is stopped 
21ef0 62 79 20 61 20 4c 49 4d 49 54 20 72 61 74 68 65  by a LIMIT rathe
21f00 72 20 74 68 61 6e 20 61 20 57 48 45 52 45 20 63  r than a WHERE c
21f10 6c 61 75 73 65 2e 20 20 54 68 65 20 75 73 65 20  lause.  The use 
21f20 6f 66 0a 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74  of.LIMIT means t
21f30 68 61 74 20 77 68 65 6e 20 74 68 65 20 6f 6e 65  hat when the one
21f40 2d 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69  -millionth row i
21f50 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 22  s added to the "
21f60 63 6e 74 22 20 74 61 62 6c 65 0a 28 61 6e 64 20  cnt" table.(and 
21f70 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
21f80 6d 61 69 6e 20 53 45 4c 45 43 54 2c 20 74 68 61  main SELECT, tha
21f90 6e 6b 73 20 74 6f 20 74 68 65 20 71 75 65 72 79  nks to the query
21fa0 20 6f 70 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e   optimizer).then
21fb0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73   the recursion s
21fc0 74 6f 70 73 20 69 6d 6d 65 64 69 61 74 65 6c 79  tops immediately
21fd0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68   regardless of h
21fe0 6f 77 20 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67  ow many rows mig
21ff0 68 74 20 62 65 0a 6c 65 66 74 20 69 6e 20 74 68  ht be.left in th
22000 65 20 71 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72  e queue.  On mor
22010 65 20 63 6f 6d 70 6c 65 78 20 71 75 65 72 69 65  e complex querie
22020 73 2c 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69  s, it can someti
22030 6d 65 73 20 62 65 0a 64 69 66 66 69 63 75 6c 74  mes be.difficult
22040 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
22050 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
22060 20 77 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79   will eventually
22070 20 63 61 75 73 65 20 74 68 65 0a 71 75 65 75 65   cause the.queue
22080 20 74 6f 20 64 72 61 69 6e 20 61 6e 64 20 74 68   to drain and th
22090 65 20 72 65 63 75 72 73 69 6f 6e 20 74 6f 20 74  e recursion to t
220a0 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 74  erminate.  But t
220b0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
220c0 77 69 6c 6c 0a 61 6c 77 61 79 73 20 73 74 6f 70  will.always stop
220d0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 2e 20   the recursion. 
220e0 20 53 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 70   So it is good p
220f0 72 61 63 74 69 63 65 20 74 6f 20 61 6c 77 61 79  ractice to alway
22100 73 20 69 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49  s include a.LIMI
22110 54 20 63 6c 61 75 73 65 20 61 73 20 61 20 73 61  T clause as a sa
22120 66 65 74 79 20 69 66 20 61 6e 20 75 70 70 65 72  fety if an upper
22130 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 73 69   bound on the si
22140 7a 65 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  ze of the recurs
22150 69 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a  ion .is known...
22160 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
22170 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34   rcex2</tcl>.<h4
22180 3e 48 69 65 72 61 72 63 68 69 63 61 6c 20 51 75  >Hierarchical Qu
22190 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34  ery Examples</h4
221a0 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 61  >..<p>Consider a
221b0 20 74 61 62 6c 65 20 74 68 61 74 20 64 65 73 63   table that desc
221c0 72 69 62 65 73 20 74 68 65 20 6d 65 6d 62 65 72  ribes the member
221d0 73 20 6f 66 20 61 6e 20 6f 72 67 61 6e 69 7a 61  s of an organiza
221e0 74 69 6f 6e 20 61 73 0a 77 65 6c 6c 20 61 73 20  tion as.well as 
221f0 74 68 65 20 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d  the chain-of-com
22200 6d 61 6e 64 20 77 69 74 68 69 6e 20 74 68 61 74  mand within that
22210 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a   organization:..
22220 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
22230 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  >.CREATE TABLE o
22240 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20  rg(.  name TEXT 
22250 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62  PRIMARY KEY,.  b
22260 6f 73 73 20 54 45 58 54 20 52 45 46 45 52 45 4e  oss TEXT REFEREN
22270 43 45 53 20 6f 72 67 2c 0a 20 20 68 65 69 67 68  CES org,.  heigh
22280 74 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74 68 65  t INT,.  -- othe
22290 72 20 63 6f 6e 74 65 6e 74 20 6f 6d 69 74 74 65  r content omitte
222a0 64 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d.);.</pre></blo
222b0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65  ckquote>..<p>Eve
222c0 72 79 20 6d 65 6d 62 65 72 20 69 6e 20 74 68 65  ry member in the
222d0 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61   organization ha
222e0 73 20 61 20 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f  s a name, and mo
222f0 73 74 20 6d 65 6d 62 65 72 73 20 68 61 76 65 0a  st members have.
22300 61 20 73 69 6e 67 6c 65 20 62 6f 73 73 2e 20 20  a single boss.  
22310 28 54 68 65 20 68 65 61 64 20 6f 66 20 74 68 65  (The head of the
22320 20 77 68 6f 6c 65 20 6f 72 67 61 6e 69 7a 61 74   whole organizat
22330 69 6f 6e 20 68 61 73 20 61 20 4e 55 4c 4c 0a 22  ion has a NULL."
22340 62 6f 73 73 22 20 66 69 65 6c 64 2e 29 20 54 68  boss" field.) Th
22350 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 22 6f  e rows of the "o
22360 72 67 22 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  rg" table form a
22370 20 74 72 65 65 2e 0a 0a 3c 70 3e 48 65 72 65 20   tree...<p>Here 
22380 69 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20  is a query that 
22390 63 6f 6d 70 75 74 65 73 20 74 68 65 20 61 76 65  computes the ave
223a0 72 61 67 65 20 68 65 69 67 68 74 20 6f 76 65 72  rage height over
223b0 20 65 76 65 72 79 6f 6e 65 0a 69 6e 20 41 6c 69   everyone.in Ali
223c0 63 65 27 73 20 6f 72 67 61 6e 69 7a 61 74 69 6f  ce's organizatio
223d0 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 20 41 6c 69  n, including Ali
223e0 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ce:..<blockquote
223f0 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
22400 52 53 49 56 45 0a 20 20 77 6f 72 6b 73 5f 66 6f  RSIVE.  works_fo
22410 72 5f 61 6c 69 63 65 28 6e 29 20 41 53 20 28 0a  r_alice(n) AS (.
22420 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63      VALUES('Alic
22430 65 27 29 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20  e').    UNION.  
22440 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
22450 4f 4d 20 6f 72 67 2c 20 77 6f 72 6b 73 5f 66 6f  OM org, works_fo
22460 72 5f 61 6c 69 63 65 0a 20 20 20 20 20 57 48 45  r_alice.     WHE
22470 52 45 20 6f 72 67 2e 62 6f 73 73 3d 77 6f 72 6b  RE org.boss=work
22480 73 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a 20 20  s_for_alice.n.  
22490 29 0a 53 45 4c 45 43 54 20 61 76 67 28 68 65 69  ).SELECT avg(hei
224a0 67 68 74 29 20 46 52 4f 4d 20 6f 72 67 0a 20 57  ght) FROM org. W
224b0 48 45 52 45 20 6f 72 67 2e 6e 61 6d 65 20 49 4e  HERE org.name IN
224c0 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65   works_for_alice
224d0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
224e0 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65  uote>..<p>The ne
224f0 78 74 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20  xt example uses 
22500 74 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c  two .common tabl
22510 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
22520 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
22530 6c 61 75 73 65 2e 20 20 0a 54 68 65 20 66 6f 6c  lause.  .The fol
22540 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 72 65 63  lowing table rec
22550 6f 72 64 73 20 61 20 66 61 6d 69 6c 79 20 74 72  ords a family tr
22560 65 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ee:..<blockquote
22570 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
22580 42 4c 45 20 66 61 6d 69 6c 79 28 0a 20 20 6e 61  BLE family(.  na
22590 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  me TEXT PRIMARY 
225a0 4b 45 59 2c 0a 20 20 6d 6f 6d 20 54 45 58 54 20  KEY,.  mom TEXT 
225b0 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c  REFERENCES famil
225c0 79 2c 0a 20 20 64 61 64 20 54 45 58 54 20 52 45  y,.  dad TEXT RE
225d0 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c  FERENCES family,
225e0 0a 20 20 62 6f 72 6e 20 44 41 54 45 54 49 4d 45  .  born DATETIME
225f0 2c 0a 20 20 64 69 65 64 20 44 41 54 45 54 49 4d  ,.  died DATETIM
22600 45 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66 20 73 74  E, -- NULL if st
22610 69 6c 6c 20 61 6c 69 76 65 0a 20 20 2d 2d 20 6f  ill alive.  -- o
22620 74 68 65 72 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a  ther content.);.
22630 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
22640 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 66 61 6d  te>..<p>The "fam
22650 69 6c 79 22 20 74 61 62 6c 65 20 69 73 20 73 69  ily" table is si
22660 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 65 61 72  milar to the ear
22670 6c 69 65 72 20 22 6f 72 67 22 20 74 61 62 6c 65  lier "org" table
22680 20 65 78 63 65 70 74 20 74 68 61 74 20 0a 6e 6f   except that .no
22690 77 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20  w there are two 
226a0 70 61 72 65 6e 74 73 20 74 6f 20 65 61 63 68 20  parents to each 
226b0 6d 65 6d 62 65 72 2e 0a 57 65 20 77 61 6e 74 20  member..We want 
226c0 74 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69 76 69  to know all livi
226d0 6e 67 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20  ng ancestors of 
226e0 41 6c 69 63 65 2c 20 66 72 6f 6d 20 6f 6c 64 65  Alice, from olde
226f0 73 74 20 74 6f 20 79 6f 75 6e 67 65 73 74 2e 0a  st to youngest..
22700 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  An ordinary comm
22710 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22720 69 6f 6e 2c 20 22 70 61 72 65 6e 74 5f 6f 66 22  ion, "parent_of"
22730 2c 20 69 73 20 64 65 66 69 6e 65 64 20 66 69 72  , is defined fir
22740 73 74 2e 20 20 54 68 61 74 0a 6f 72 64 69 6e 61  st.  That.ordina
22750 72 79 20 43 54 45 20 69 73 20 61 20 76 69 65 77  ry CTE is a view
22760 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
22770 64 20 74 6f 20 66 69 6e 64 20 61 6c 6c 20 70 61  d to find all pa
22780 72 65 6e 74 73 20 6f 66 20 61 6e 79 0a 69 6e 64  rents of any.ind
22790 69 76 69 64 75 61 6c 2e 20 20 54 68 61 74 20 6f  ividual.  That o
227a0 72 64 69 6e 61 72 79 20 43 54 45 20 69 73 20 74  rdinary CTE is t
227b0 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20  hen used in the 
227c0 22 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69  "ancestor_of_ali
227d0 63 65 22 0a 72 65 63 75 72 73 69 76 65 20 43 54  ce".recursive CT
227e0 45 2e 20 20 54 68 65 20 72 65 63 75 72 73 69 76  E.  The recursiv
227f0 65 20 43 54 45 20 69 73 20 74 68 65 6e 20 75 73  e CTE is then us
22800 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20  ed in the final 
22810 71 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  query:..<blockqu
22820 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
22830 45 43 55 52 53 49 56 45 0a 20 20 70 61 72 65 6e  ECURSIVE.  paren
22840 74 5f 6f 66 28 6e 61 6d 65 2c 20 70 61 72 65 6e  t_of(name, paren
22850 74 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43  t) AS.    (SELEC
22860 54 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d  T name, mom FROM
22870 20 66 61 6d 69 6c 79 20 55 4e 49 4f 4e 20 53 45   family UNION SE
22880 4c 45 43 54 20 6e 61 6d 65 2c 20 64 61 64 20 46  LECT name, dad F
22890 52 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a 20 20 61  ROM family),.  a
228a0 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
228b0 28 6e 61 6d 65 29 20 41 53 0a 20 20 20 20 28 53  (name) AS.    (S
228c0 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f  ELECT parent FRO
228d0 4d 20 70 61 72 65 6e 74 5f 6f 66 20 57 48 45 52  M parent_of WHER
228e0 45 20 6e 61 6d 65 3d 27 41 6c 69 63 65 27 0a 20  E name='Alice'. 
228f0 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
22900 20 20 20 53 45 4c 45 43 54 20 70 61 72 65 6e 74     SELECT parent
22910 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20   FROM parent_of 
22920 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 5f 6f 66  JOIN ancestor_of
22930 5f 61 6c 69 63 65 20 55 53 49 4e 47 28 6e 61 6d  _alice USING(nam
22940 65 29 29 0a 53 45 4c 45 43 54 20 66 61 6d 69 6c  e)).SELECT famil
22950 79 2e 6e 61 6d 65 20 46 52 4f 4d 20 61 6e 63 65  y.name FROM ance
22960 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c 20 66  stor_of_alice, f
22970 61 6d 69 6c 79 0a 20 57 48 45 52 45 20 61 6e 63  amily. WHERE anc
22980 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e  estor_of_alice.n
22990 61 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a  ame=family.name.
229a0 20 20 20 41 4e 44 20 64 69 65 64 20 49 53 20 4e     AND died IS N
229b0 55 4c 4c 0a 20 4f 52 44 45 52 20 42 59 20 62 6f  ULL. ORDER BY bo
229c0 72 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  rn;.</pre></bloc
229d0 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64  kquote>..<tcl>hd
229e0 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c  _fragment rcex2<
229f0 2f 74 63 6c 3e 0a 3c 68 34 3e 51 75 65 72 69 65  /tcl>.<h4>Querie
22a00 73 20 41 67 61 69 6e 73 74 20 41 20 47 72 61 70  s Against A Grap
22a10 68 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76 65 72  h</h4>..<p>A ver
22a20 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73  sion control sys
22a30 74 65 6d 20 28 56 43 53 29 20 77 69 6c 6c 20 74  tem (VCS) will t
22a40 79 70 69 63 61 6c 6c 79 20 73 74 6f 72 65 20 74  ypically store t
22a50 68 65 20 65 76 6f 6c 76 69 6e 67 0a 76 65 72 73  he evolving.vers
22a60 69 6f 6e 73 20 6f 66 20 61 20 70 72 6f 6a 65 63  ions of a projec
22a70 74 20 61 73 20 61 20 64 69 72 65 63 74 65 64 20  t as a directed 
22a80 61 63 79 63 6c 69 63 20 67 72 61 70 68 20 28 44  acyclic graph (D
22a90 41 47 29 2e 20 20 43 61 6c 6c 20 65 61 63 68 0a  AG).  Call each.
22aa0 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 70  version of the p
22ab0 72 6f 6a 65 63 74 20 61 20 22 63 68 65 63 6b 69  roject a "checki
22ac0 6e 22 2e 20 20 41 20 73 69 6e 67 6c 65 0a 63 68  n".  A single.ch
22ad0 65 63 6b 69 6e 20 63 61 6e 20 68 61 76 65 20 7a  eckin can have z
22ae0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 72 65  ero or more pare
22af0 6e 74 73 2e 20 20 4d 6f 73 74 20 63 68 65 63 6b  nts.  Most check
22b00 69 6e 73 20 28 65 78 63 65 70 74 20 74 68 65 0a  ins (except the.
22b10 66 69 72 73 74 29 20 68 61 76 65 20 61 20 73 69  first) have a si
22b20 6e 67 6c 65 20 70 61 72 65 6e 74 2c 20 62 75 74  ngle parent, but
22b30 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
22b40 61 20 6d 65 72 67 65 2c 20 61 20 63 68 65 63 6b  a merge, a check
22b50 69 6e 0a 6d 69 67 68 74 20 68 61 76 65 20 74 77  in.might have tw
22b60 6f 20 6f 72 20 74 68 72 65 65 20 6f 72 20 6d 6f  o or three or mo
22b70 72 65 20 70 61 72 65 6e 74 73 2e 20 20 41 20 73  re parents.  A s
22b80 63 68 65 6d 61 20 74 6f 20 6b 65 65 70 20 74 72  chema to keep tr
22b90 61 63 6b 20 6f 66 0a 63 68 65 63 6b 69 6e 73 20  ack of.checkins 
22ba0 61 6e 64 20 74 68 65 20 6f 72 64 65 72 20 69 6e  and the order in
22bb0 20 77 68 69 63 68 20 74 68 65 79 20 6f 63 63 75   which they occu
22bc0 72 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d  r might look som
22bd0 65 74 68 69 6e 67 20 6c 69 6b 65 0a 74 68 69 73  ething like.this
22be0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
22bf0 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
22c00 45 20 63 68 65 63 6b 69 6e 28 0a 20 20 69 64 20  E checkin(.  id 
22c10 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
22c20 4b 45 59 2c 0a 20 20 6d 74 69 6d 65 20 49 4e 54  KEY,.  mtime INT
22c30 45 47 45 52 20 2d 2d 20 74 69 6d 65 73 74 61 6d  EGER -- timestam
22c40 70 20 77 68 65 6e 20 74 68 69 73 20 63 68 65 63  p when this chec
22c50 6b 69 6e 20 6f 63 63 75 72 72 65 64 0a 29 3b 0a  kin occurred.);.
22c60 43 52 45 41 54 45 20 54 41 42 4c 45 20 64 65 72  CREATE TABLE der
22c70 69 76 65 64 66 72 6f 6d 28 0a 20 20 78 66 72 6f  ivedfrom(.  xfro
22c80 6d 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55  m INTEGER NOT NU
22c90 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68  LL REFERENCES ch
22ca0 65 63 6b 69 6e 2c 20 2d 2d 20 70 61 72 65 6e 74  eckin, -- parent
22cb0 20 63 68 65 63 6b 69 6e 0a 20 20 78 74 6f 20 49   checkin.  xto I
22cc0 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20  NTEGER NOT NULL 
22cd0 52 45 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b  REFERENCES check
22ce0 69 6e 2c 20 20 20 2d 2d 20 64 65 72 69 76 65 64  in,   -- derived
22cf0 20 63 68 65 63 6b 69 6e 0a 20 20 50 52 49 4d 41   checkin.  PRIMA
22d00 52 59 20 4b 45 59 28 78 66 72 6f 6d 2c 78 74 6f  RY KEY(xfrom,xto
22d10 29 0a 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45  ).);.CREATE INDE
22d20 58 20 64 65 72 69 76 65 64 66 72 6f 6d 5f 62 61  X derivedfrom_ba
22d30 63 6b 20 4f 4e 20 64 65 72 69 76 65 64 66 72 6f  ck ON derivedfro
22d40 6d 28 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f  m(xto,xfrom);.</
22d50 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
22d60 3e 0a 0a 3c 70 3e 54 68 69 73 20 67 72 61 70 68  >..<p>This graph
22d70 20 69 73 20 61 63 79 63 6c 69 63 2e 20 20 41 6e   is acyclic.  An
22d80 64 20 77 65 20 61 73 73 75 6d 65 20 74 68 61 74  d we assume that
22d90 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 65 76   the mtime of ev
22da0 65 72 79 0a 63 68 69 6c 64 20 63 68 65 63 6b 69  ery.child checki
22db0 6e 20 69 73 20 6e 6f 20 6c 65 73 73 20 74 68 61  n is no less tha
22dc0 6e 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 61  n the mtime of a
22dd0 6c 6c 20 69 74 73 20 70 61 72 65 6e 74 73 2e 20  ll its parents. 
22de0 20 42 75 74 0a 75 6e 6c 69 6b 65 20 74 68 65 20   But.unlike the 
22df0 65 61 72 6c 69 65 72 20 65 78 61 6d 70 6c 65 73  earlier examples
22e00 2c 20 74 68 69 73 20 67 72 61 70 68 20 6d 69 67  , this graph mig
22e10 68 74 20 68 61 76 65 20 6d 75 6c 74 69 70 6c 65  ht have multiple
22e20 20 70 61 74 68 73 20 6f 66 0a 64 69 66 66 65 72   paths of.differ
22e30 69 6e 67 20 6c 65 6e 67 74 68 73 20 62 65 74 77  ing lengths betw
22e40 65 65 6e 20 61 6e 79 20 74 77 6f 20 63 68 65 63  een any two chec
22e50 6b 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e  kins...<p>We wan
22e60 74 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20 74 77  t to know the tw
22e70 65 6e 74 79 20 6d 6f 73 74 20 72 65 63 65 6e 74  enty most recent
22e80 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 69   ancestors in ti
22e90 6d 65 20 28 6f 75 74 20 6f 66 0a 74 68 65 20 74  me (out of.the t
22ea0 68 6f 75 73 61 6e 64 73 20 61 6e 64 20 74 68 6f  housands and tho
22eb0 75 73 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74  usands of ancest
22ec0 6f 72 73 20 69 6e 20 74 68 65 20 77 68 6f 6c 65  ors in the whole
22ed0 20 44 41 47 29 20 66 6f 72 0a 63 68 65 63 6b 69   DAG) for.checki
22ee0 6e 20 22 40 42 41 53 45 4c 49 4e 45 22 2e 20 20  n "@BASELINE".  
22ef0 28 41 20 71 75 65 72 79 20 73 69 6d 69 6c 61 72  (A query similar
22f00 20 74 6f 20 74 68 69 73 20 69 73 20 75 73 65 64   to this is used
22f10 0a 62 79 20 74 68 65 20 3c 61 20 68 72 65 66 3d  .by the <a href=
22f20 22 68 74 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73  "http://www.foss
22f30 69 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73  il-scm.org/">Fos
22f40 73 69 6c 3c 2f 61 3e 20 56 43 53 20 74 6f 0a 73  sil</a> VCS to.s
22f50 68 6f 77 20 74 68 65 20 4e 20 6d 6f 73 74 20 72  how the N most r
22f60 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20  ecent ancestors 
22f70 6f 66 20 61 20 63 68 65 63 6b 2e 20 20 46 6f 72  of a check.  For
22f80 20 65 78 61 6d 70 6c 65 3a 0a 3c 61 20 68 72 65   example:.<a hre
22f90 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71  f="http://www.sq
22fa0 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d  lite.org/src/tim
22fb0 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d  eline?p=trunk&n=
22fc0 33 30 22 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 73  30">http://www.s
22fd0 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69  qlite.org/src/ti
22fe0 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e  meline?p=trunk&n
22ff0 3d 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63  =30</a>.)..<bloc
23000 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
23010 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 61 6e  H RECURSIVE.  an
23020 63 65 73 74 6f 72 28 69 64 2c 6d 74 69 6d 65 29  cestor(id,mtime)
23030 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
23040 20 69 64 2c 20 6d 74 69 6d 65 20 46 52 4f 4d 20   id, mtime FROM 
23050 63 68 65 63 6b 69 6e 20 57 48 45 52 45 20 69 64  checkin WHERE id
23060 3d 40 42 41 53 45 4c 49 4e 45 0a 20 20 20 20 55  =@BASELINE.    U
23070 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20  NION.    SELECT 
23080 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f  derivedfrom.xfro
23090 6d 2c 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65  m, checkin.mtime
230a0 0a 20 20 20 20 20 20 46 52 4f 4d 20 61 6e 63 65  .      FROM ance
230b0 73 74 6f 72 2c 20 64 65 72 69 76 65 64 66 72 6f  stor, derivedfro
230c0 6d 2c 20 63 68 65 63 6b 69 6e 0a 20 20 20 20 20  m, checkin.     
230d0 57 48 45 52 45 20 61 6e 63 65 73 74 6f 72 2e 69  WHERE ancestor.i
230e0 64 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 74  d=derivedfrom.xt
230f0 6f 0a 20 20 20 20 20 20 20 41 4e 44 20 63 68 65  o.       AND che
23100 63 6b 69 6e 2e 69 64 3d 64 65 72 69 76 65 64 66  ckin.id=derivedf
23110 72 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20 20 20 4f  rom.xfrom.     O
23120 52 44 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e  RDER BY checkin.
23130 6d 74 69 6d 65 20 44 45 53 43 0a 20 20 20 20 20  mtime DESC.     
23140 4c 49 4d 49 54 20 32 30 0a 20 20 29 0a 53 45 4c  LIMIT 20.  ).SEL
23150 45 43 54 20 2a 20 46 52 4f 4d 20 63 68 65 63 6b  ECT * FROM check
23160 69 6e 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72  in JOIN ancestor
23170 20 55 53 49 4e 47 28 69 64 29 3b 0a 3c 2f 70 72   USING(id);.</pr
23180 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
23190 0a 3c 70 3e 0a 54 68 65 20 22 4f 52 44 45 52 20  .<p>.The "ORDER 
231a0 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65  BY checkin.mtime
231b0 20 44 45 53 43 22 20 74 65 72 6d 20 69 6e 20 74   DESC" term in t
231c0 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
231d0 65 63 74 20 6d 61 6b 65 73 0a 74 68 65 20 71 75  ect makes.the qu
231e0 65 72 79 20 72 75 6e 20 6d 75 63 68 20 66 61 73  ery run much fas
231f0 74 65 72 20 62 79 20 70 72 65 76 65 6e 74 69 6e  ter by preventin
23200 67 20 69 74 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77  g it from follow
23210 69 6e 67 0a 62 72 61 6e 63 68 65 73 20 74 68 61  ing.branches tha
23220 74 20 6d 65 72 67 65 20 63 68 65 63 6b 69 6e 73  t merge checkins
23230 0a 66 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20  .from long ago. 
23240 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 66 6f   The ORDER BY fo
23250 72 63 65 73 20 74 68 65 20 72 65 63 75 72 73 69  rces the recursi
23260 76 65 2d 73 65 6c 65 63 74 20 74 6f 20 66 6f 63  ve-select to foc
23270 75 73 0a 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72  us.on the most r
23280 65 63 65 6e 74 20 63 68 65 63 6b 69 6e 73 2c 20  ecent checkins, 
23290 74 68 65 20 6f 6e 65 73 20 77 65 20 77 61 6e 74  the ones we want
232a0 2e 20 20 57 69 74 68 6f 75 74 20 74 68 65 20 4f  .  Without the O
232b0 52 44 45 52 20 42 59 0a 6f 6e 20 74 68 65 20 72  RDER BY.on the r
232c0 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
232d0 20 6f 6e 65 20 77 6f 75 6c 64 20 62 65 20 66 6f   one would be fo
232e0 72 63 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 20  rced to compute 
232f0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 73 65 74  the complete set
23300 20 6f 66 0a 74 68 6f 75 73 61 6e 64 73 20 6f 66   of.thousands of
23310 20 61 6e 63 65 73 74 6f 72 73 2c 20 73 6f 72 74   ancestors, sort
23320 20 74 68 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69   them all by mti
23330 6d 65 2c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  me, then take th
23340 65 20 74 6f 70 20 74 77 65 6e 74 79 2e 0a 54 68  e top twenty..Th
23350 65 20 4f 52 44 45 52 20 42 59 20 65 73 73 65 6e  e ORDER BY essen
23360 74 69 61 6c 6c 79 20 73 65 74 73 20 75 70 20 61  tially sets up a
23370 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
23380 74 68 61 74 0a 66 6f 72 63 65 73 20 74 68 65 20  that.forces the 
23390 72 65 63 75 72 73 69 76 65 20 71 75 65 72 79 20  recursive query 
233a0 74 6f 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d  to look at the m
233b0 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73  ost recent ances
233c0 74 6f 72 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f  tors first,.allo
233d0 77 69 6e 67 20 74 68 65 20 75 73 65 20 6f 66 20  wing the use of 
233e0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74  a LIMIT clause t
233f0 6f 20 72 65 73 74 72 69 63 74 20 74 68 65 20 73  o restrict the s
23400 63 6f 70 65 20 6f 66 20 74 68 65 0a 71 75 65 72  cope of the.quer
23410 79 20 74 6f 20 6a 75 73 74 20 74 68 65 20 63 68  y to just the ch
23420 65 63 6b 69 6e 73 20 6f 66 20 69 6e 74 65 72 65  eckins of intere
23430 73 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  st...<tcl>hd_fra
23440 67 6d 65 6e 74 20 77 69 74 68 6f 72 64 65 72 62  gment withorderb
23450 79 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74  y</tcl>.<h4>Cont
23460 72 6f 6c 6c 69 6e 67 20 44 65 70 74 68 2d 46 69  rolling Depth-Fi
23470 72 73 74 20 56 65 72 73 75 73 20 42 72 65 61 64  rst Versus Bread
23480 74 68 2d 46 69 72 73 74 20 53 65 61 72 63 68 20  th-First Search 
23490 4f 66 20 61 20 54 72 65 65 0a 55 73 69 6e 67 20  Of a Tree.Using 
234a0 4f 52 44 45 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c  ORDER BY</h4>..<
234b0 70 3e 41 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  p>An ORDER BY cl
234c0 61 75 73 65 20 6f 6e 20 74 68 65 20 72 65 63 75  ause on the recu
234d0 72 73 69 76 65 2d 73 65 6c 65 63 74 20 63 61 6e  rsive-select can
234e0 20 62 65 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   be used to cont
234f0 72 6f 6c 0a 77 68 65 74 68 65 72 20 74 68 65 20  rol.whether the 
23500 73 65 61 72 63 68 20 6f 66 20 61 20 74 72 65 65  search of a tree
23510 20 69 73 20 64 65 70 74 68 2d 66 69 72 73 74 20   is depth-first 
23520 6f 72 20 62 72 65 61 64 74 68 2d 66 69 72 73 74  or breadth-first
23530 2e 20 20 54 6f 0a 69 6c 6c 75 73 74 72 61 74 65  .  To.illustrate
23540 2c 20 77 65 20 77 69 6c 6c 20 75 73 65 20 61 20  , we will use a 
23550 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65  variation on the
23560 20 22 6f 72 67 22 20 74 61 62 6c 65 20 66 72 6f   "org" table fro
23570 6d 20 61 6e 20 65 78 61 6d 70 6c 65 0a 61 62 6f  m an example.abo
23580 76 65 2c 20 77 69 74 68 6f 75 74 20 74 68 65 20  ve, without the 
23590 22 68 65 69 67 68 74 22 20 63 6f 6c 75 6d 6e 2c  "height" column,
235a0 20 61 6e 64 20 77 69 74 68 20 73 6f 6d 65 20 72   and with some r
235b0 65 61 6c 20 64 61 74 61 20 69 6e 73 65 72 74 65  eal data inserte
235c0 64 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  d:..<blockquote>
235d0 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
235e0 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54  LE org(.  name T
235f0 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
23600 0a 20 20 62 6f 73 73 20 54 45 58 54 20 52 45 46  .  boss TEXT REF
23610 45 52 45 4e 43 45 53 20 6f 72 67 0a 29 20 57 49  ERENCES org.) WI
23620 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 49 4e 53  THOUT ROWID;.INS
23630 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
23640 55 45 53 28 27 41 6c 69 63 65 27 2c 4e 55 4c 4c  UES('Alice',NULL
23650 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f  );.INSERT INTO o
23660 72 67 20 56 41 4c 55 45 53 28 27 42 6f 62 27 2c  rg VALUES('Bob',
23670 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54  'Alice');.INSERT
23680 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
23690 28 27 43 69 6e 64 79 27 2c 27 41 6c 69 63 65 27  ('Cindy','Alice'
236a0 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f  );.INSERT INTO o
236b0 72 67 20 56 41 4c 55 45 53 28 27 44 61 76 65 27  rg VALUES('Dave'
236c0 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20  ,'Bob');.INSERT 
236d0 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
236e0 27 45 6d 6d 61 27 2c 27 42 6f 62 27 29 3b 0a 49  'Emma','Bob');.I
236f0 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
23700 41 4c 55 45 53 28 27 46 72 65 64 27 2c 27 43 69  ALUES('Fred','Ci
23710 6e 64 79 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  ndy');.INSERT IN
23720 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 47  TO org VALUES('G
23730 61 69 6c 27 2c 27 43 69 6e 64 79 27 29 3b 0a 3c  ail','Cindy');.<
23740 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
23750 65 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61  e>..<p>Here is a
23760 20 71 75 65 72 79 20 74 6f 20 73 68 6f 77 20 74   query to show t
23770 68 65 20 74 72 65 65 20 73 74 72 75 63 74 75 72  he tree structur
23780 65 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66  e in a breadth-f
23790 69 72 73 74 20 70 61 74 74 65 72 6e 3a 0a 0a 3c  irst pattern:..<
237a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
237b0 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
237c0 20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61    under_alice(na
237d0 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20  me,level) AS (. 
237e0 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65     VALUES('Alice
237f0 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41  ',0).    UNION A
23800 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72  LL.    SELECT or
23810 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c  g.name, under_al
23820 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20  ice.level+1.    
23830 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20    FROM org JOIN 
23840 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f  under_alice ON o
23850 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c  rg.boss=under_al
23860 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52  ice.name.     OR
23870 44 45 52 20 42 59 20 32 0a 20 20 29 0a 53 45 4c  DER BY 2.  ).SEL
23880 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e  ECT substr('....
23890 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a  ......',1,level*
238a0 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20  3) || name FROM 
238b0 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70  under_alice;.</p
238c0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
238d0 0a 0a 3c 70 3e 54 68 65 20 22 4f 52 44 45 52 20  ..<p>The "ORDER 
238e0 42 59 20 32 22 20 28 77 68 69 63 68 20 6d 65 61  BY 2" (which mea
238f0 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 22  ns the same as "
23900 4f 52 44 45 52 20 42 59 20 75 6e 64 65 72 5f 61  ORDER BY under_a
23910 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 22 29 0a 63  lice.level+1").c
23920 61 75 73 65 73 20 68 69 67 68 65 72 20 6c 65 76  auses higher lev
23930 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e  els in the organ
23940 69 7a 61 74 69 6f 6e 20 63 68 61 72 74 20 28 77  ization chart (w
23950 69 74 68 20 73 6d 61 6c 6c 65 72 20 22 6c 65 76  ith smaller "lev
23960 65 6c 22 20 76 61 6c 75 65 73 29 0a 74 6f 20 62  el" values).to b
23970 65 20 70 72 6f 63 65 73 73 65 64 20 66 69 72 73  e processed firs
23980 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20  t, resulting in 
23990 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20  a breadth-first 
239a0 73 65 61 72 63 68 2e 20 20 54 68 65 20 6f 75 74  search.  The out
239b0 70 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  put is:..<blockq
239c0 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65  uote><pre>.Alice
239d0 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79  ....Bob....Cindy
239e0 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e  .......Dave.....
239f0 2e 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65  ..Emma.......Fre
23a00 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70  d.......Gail.</p
23a10 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
23a20 0a 0a 3c 70 3e 42 75 74 20 69 66 20 77 65 20 63  ..<p>But if we c
23a30 68 61 6e 67 65 20 74 68 65 20 4f 52 44 45 52 20  hange the ORDER 
23a40 42 59 20 63 6c 61 75 73 65 20 74 6f 20 61 64 64  BY clause to add
23a50 20 74 68 65 20 22 44 45 53 43 22 20 6d 6f 64 69   the "DESC" modi
23a60 66 69 65 72 2c 20 74 68 61 74 20 77 69 6c 6c 0a  fier, that will.
23a70 63 61 75 73 65 20 6c 6f 77 65 72 20 6c 65 76 65  cause lower leve
23a80 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69  ls in the organi
23a90 7a 61 74 69 6f 6e 20 28 77 69 74 68 20 6c 61 72  zation (with lar
23aa0 67 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75  ger "level" valu
23ab0 65 73 29 20 74 6f 20 62 65 0a 70 72 6f 63 65 73  es) to be.proces
23ac0 73 65 64 20 66 69 72 73 74 20 62 79 20 74 68 65  sed first by the
23ad0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
23ae0 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20  t, resulting in 
23af0 61 20 64 65 70 74 68 2d 66 69 72 73 74 20 73 65  a depth-first se
23b00 61 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  arch:..<blockquo
23b10 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
23b20 43 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f  CURSIVE.  under_
23b30 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c  alice(name,level
23b40 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
23b50 53 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20  S('Alice',0).   
23b60 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
23b70 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20  ELECT org.name, 
23b80 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65  under_alice.leve
23b90 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f  l+1.      FROM o
23ba0 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c  rg JOIN under_al
23bb0 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d  ice ON org.boss=
23bc0 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65  under_alice.name
23bd0 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32  .     ORDER BY 2
23be0 20 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a 20 20 29   <b>DESC</b>.  )
23bf0 0a 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 27  .SELECT substr('
23c00 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65  ..........',1,le
23c10 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46  vel*3) || name F
23c20 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b  ROM under_alice;
23c30 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
23c40 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74  ote>..<p>The out
23c50 70 75 74 20 6f 66 20 74 68 69 73 20 72 65 76 69  put of this revi
23c60 73 65 64 20 71 75 65 72 79 20 69 73 3a 0a 0a 3c  sed query is:..<
23c70 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
23c80 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e  .Alice....Bob...
23c90 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45  ....Dave.......E
23ca0 6d 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e  mma....Cindy....
23cb0 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61  ...Fred.......Ga
23cc0 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  il.</pre></block
23cd0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20  quote>..<p>When 
23ce0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
23cf0 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66  use is omitted f
23d00 72 6f 6d 20 74 68 65 20 72 65 63 75 72 73 69 76  rom the recursiv
23d10 65 2d 73 65 6c 65 63 74 2c 20 74 68 65 0a 71 75  e-select, the.qu
23d20 65 75 65 20 62 65 68 61 76 65 73 20 61 73 20 61  eue behaves as a
23d30 20 46 49 46 4f 2c 20 77 68 69 63 68 20 72 65 73   FIFO, which res
23d40 75 6c 74 73 20 69 6e 20 61 20 62 72 65 61 64 74  ults in a breadt
23d50 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 0a  h-first search..
23d60 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
23d70 6e 74 20 6d 61 6e 64 65 6c 62 72 6f 74 20 7b 63  nt mandelbrot {c
23d80 6f 6d 70 75 74 65 20 74 68 65 20 4d 61 6e 64 65  ompute the Mande
23d90 6c 62 72 6f 74 20 73 65 74 7d 3c 2f 74 63 6c 3e  lbrot set}</tcl>
23da0 0a 3c 68 34 3e 4f 75 74 6c 61 6e 64 69 73 68 20  .<h4>Outlandish 
23db0 52 65 63 75 72 73 69 76 65 20 51 75 65 72 79 20  Recursive Query 
23dc0 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c  Examples</h4>..<
23dd0 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p>The following 
23de0 71 75 65 72 79 20 63 6f 6d 70 75 74 65 73 20 61  query computes a
23df0 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  n approximation 
23e00 6f 66 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f  of the Mandelbro
23e10 74 20 53 65 74 0a 61 6e 64 20 6f 75 74 70 75 74  t Set.and output
23e20 73 20 74 68 65 20 72 65 73 75 6c 74 20 61 73 20  s the result as 
23e30 41 53 43 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f  ASCII-art:..<blo
23e40 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
23e50 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 78  TH RECURSIVE.  x
23e60 61 78 69 73 28 78 29 20 41 53 20 28 56 41 4c 55  axis(x) AS (VALU
23e70 45 53 28 2d 32 2e 30 29 20 55 4e 49 4f 4e 20 41  ES(-2.0) UNION A
23e80 4c 4c 20 53 45 4c 45 43 54 20 78 2b 30 2e 30 35  LL SELECT x+0.05
23e90 20 46 52 4f 4d 20 78 61 78 69 73 20 57 48 45 52   FROM xaxis WHER
23ea0 45 20 78 3c 31 2e 32 29 2c 0a 20 20 79 61 78 69  E x<1.2),.  yaxi
23eb0 73 28 79 29 20 41 53 20 28 56 41 4c 55 45 53 28  s(y) AS (VALUES(
23ec0 2d 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  -1.0) UNION ALL 
23ed0 53 45 4c 45 43 54 20 79 2b 30 2e 31 20 46 52 4f  SELECT y+0.1 FRO
23ee0 4d 20 79 61 78 69 73 20 57 48 45 52 45 20 79 3c  M yaxis WHERE y<
23ef0 31 2e 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c 20  1.0),.  m(iter, 
23f00 63 78 2c 20 63 79 2c 20 78 2c 20 79 29 20 41 53  cx, cy, x, y) AS
23f10 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 30 2c   (.    SELECT 0,
23f20 20 78 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20   x, y, 0.0, 0.0 
23f30 46 52 4f 4d 20 78 61 78 69 73 2c 20 79 61 78 69  FROM xaxis, yaxi
23f40 73 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  s.    UNION ALL.
23f50 20 20 20 20 53 45 4c 45 43 54 20 69 74 65 72 2b      SELECT iter+
23f60 31 2c 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d 79  1, cx, cy, x*x-y
23f70 2a 79 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a 79  *y + cx, 2.0*x*y
23f80 20 2b 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20 20   + cy FROM m .  
23f90 20 20 20 57 48 45 52 45 20 28 78 2a 78 20 2b 20     WHERE (x*x + 
23fa0 79 2a 79 29 20 3c 20 34 2e 30 20 41 4e 44 20 69  y*y) < 4.0 AND i
23fb0 74 65 72 3c 32 38 0a 20 20 29 2c 0a 20 20 6d 32  ter<28.  ),.  m2
23fc0 28 69 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41  (iter, cx, cy) A
23fd0 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 6d  S (.    SELECT m
23fe0 61 78 28 69 74 65 72 29 2c 20 63 78 2c 20 63 79  ax(iter), cx, cy
23ff0 20 46 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42 59   FROM m GROUP BY
24000 20 63 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20 61   cx, cy.  ),.  a
24010 28 74 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c  (t) AS (.    SEL
24020 45 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  ECT group_concat
24030 28 20 73 75 62 73 74 72 28 27 20 2e 2b 2a 23 27  ( substr(' .+*#'
24040 2c 20 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34  , 1+min(iter/7,4
24050 29 2c 20 31 29 2c 20 27 27 29 20 0a 20 20 20 20  ), 1), '') .    
24060 46 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59  FROM m2 GROUP BY
24070 20 63 79 0a 20 20 29 0a 53 45 4c 45 43 54 20 67   cy.  ).SELECT g
24080 72 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69  roup_concat(rtri
24090 6d 28 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d  m(t),x'0a') FROM
240a0 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63   a;.</pre></bloc
240b0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74  kquote>..<p>In t
240c0 68 69 73 20 71 75 65 72 79 2c 20 74 68 65 20 22  his query, the "
240d0 78 61 78 69 73 22 20 61 6e 64 20 22 79 61 78 69  xaxis" and "yaxi
240e0 73 22 20 43 54 45 73 20 64 65 66 69 6e 65 20 74  s" CTEs define t
240f0 68 65 20 67 72 69 64 20 6f 66 20 70 6f 69 6e 74  he grid of point
24100 73 20 66 6f 72 0a 77 68 69 63 68 20 74 68 65 20  s for.which the 
24110 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 20 77  Mandelbrot Set w
24120 69 6c 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61  ill be approxima
24130 74 65 64 2e 20 20 45 61 63 68 20 72 6f 77 20 69  ted.  Each row i
24140 6e 20 74 68 65 0a 22 6d 28 69 74 65 72 2c 63 78  n the."m(iter,cx
24150 2c 63 79 2c 78 2c 79 29 22 20 43 54 45 20 6d 65  ,cy,x,y)" CTE me
24160 61 6e 73 20 74 68 61 74 20 61 66 74 65 72 20 22  ans that after "
24170 69 74 65 72 22 20 69 74 65 72 61 74 69 6f 6e 73  iter" iterations
24180 2c 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74  , the Mandelbrot
24190 0a 69 74 65 72 61 74 69 6f 6e 20 73 74 61 72 74  .iteration start
241a0 69 6e 67 20 61 74 20 63 78 2c 63 79 20 68 61 73  ing at cx,cy has
241b0 20 72 65 61 63 68 65 64 20 70 6f 69 6e 74 20 78   reached point x
241c0 2c 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20  ,y.  The number 
241d0 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 0a 69 6e  of iterations.in
241e0 20 74 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73   this example is
241f0 20 6c 69 6d 69 74 65 64 20 74 6f 20 32 38 20 28   limited to 28 (
24200 77 68 69 63 68 20 73 65 76 65 72 65 6c 79 20 6c  which severely l
24210 69 6d 69 74 73 20 74 68 65 20 72 65 73 6f 6c 75  imits the resolu
24220 74 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d 70  tion of.the comp
24230 75 74 61 74 69 6f 6e 2c 20 62 75 74 20 69 73 20  utation, but is 
24240 73 75 66 66 69 63 69 65 6e 74 20 66 6f 72 20 6c  sufficient for l
24250 6f 77 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 41 53  ow-resolution AS
24260 43 49 49 2d 61 72 74 20 6f 75 74 70 75 74 29 2e  CII-art output).
24270 0a 54 68 65 20 22 6d 32 28 69 74 65 72 2c 63 78  .The "m2(iter,cx
24280 2c 63 79 29 22 20 43 54 45 20 68 6f 6c 64 73 20  ,cy)" CTE holds 
24290 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
242a0 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
242b0 20 72 65 61 63 68 65 64 20 77 68 65 6e 0a 73 74   reached when.st
242c0 61 72 74 69 6e 67 20 61 74 20 70 6f 69 6e 74 20  arting at point 
242d0 63 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20  cx,cy..Finally, 
242e0 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
242f0 22 61 28 74 29 22 20 43 54 45 20 68 6f 6c 64 73  "a(t)" CTE holds
24300 20 61 20 73 74 72 69 6e 67 20 0a 77 68 69 63 68   a string .which
24310 20 69 73 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e   is a single lin
24320 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20  e of the output 
24330 41 53 43 49 49 2d 61 72 74 2e 0a 54 68 65 20 53  ASCII-art..The S
24340 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
24350 61 74 20 74 68 65 20 65 6e 64 20 6a 75 73 74 20  at the end just 
24360 71 75 65 72 69 65 73 20 74 68 65 20 22 61 22 20  queries the "a" 
24370 43 54 45 20 74 6f 0a 72 65 74 72 69 65 76 65 20  CTE to.retrieve 
24380 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 41 53 43  all lines of ASC
24390 49 49 2d 61 72 74 2c 20 6f 6e 65 20 62 79 20 6f  II-art, one by o
243a0 6e 65 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20  ne...<p>Running 
243b0 74 68 65 20 71 75 65 72 79 20 61 62 6f 76 65 20  the query above 
243c0 69 6e 20 61 6e 20 53 51 4c 69 74 65 20 5b 63 6f  in an SQLite [co
243d0 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c  mmand-line shell
243e0 5d 20 72 65 73 75 6c 74 73 0a 69 6e 20 74 68 65  ] results.in the
243f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74 70 75   following outpu
24400 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  t:..<blockquote>
24410 3c 70 72 65 3e 0a 20 20 20 20 20 20 20 20 20 20  <pre>.          
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24430 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a            ....#.
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24460 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20     ..#*...      
24470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24480 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23             ..+##
24490 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ##+..           
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244b0 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e   .......+####...
244c0 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20  .   +.          
244d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244e0 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23   ..##+*#########
244f0 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20  #+.++++.        
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23    .+.###########
24520 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20  #######+..      
24530 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e          ........
24540 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23  .....+##########
24550 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20  #########+.+.   
24560 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e             ..++.
24570 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23  .#.....*########
24580 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a  #############+..
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
245a0 2b 23 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23  +#######++######
245b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
245c0 23 2e 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e  #..          ...
245d0 2e 2b 2a 23 23 23 23 23 23 23 23 23 23 23 23 23  .+*#############
245e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
245f0 23 23 23 2e 0a 20 23 23 23 23 23 23 23 23 23 23  ###.. ##########
24600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24620 23 23 23 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20  ###....         
24630 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23   ....+*#########
24640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24650 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20  #######..       
24660 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23        ...+######
24670 23 2b 2b 23 23 23 23 23 23 23 23 23 23 23 23 23  #++#############
24680 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20  ##########..    
24690 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e            ..++..
246a0 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23  #.....*#########
246b0 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20  ############+.. 
246c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
246d0 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23  ..........+#####
246e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e  ##############+.
246f0 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
24700 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23              .+.#
24710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24720 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
24730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
24740 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b  .##+*##########+
24750 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20  .++++.          
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e    .......+####..
24780 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20  ..   +.         
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b          ..+####+
247b0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20       ..#*...    
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24800 2e 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20  ....#.          
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24820 20 20 20 20 20 20 20 20 20 20 2b 2e 0a 3c 2f 70            +..</p
24830 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
24840 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
24850 6e 74 20 73 75 64 6f 6b 75 20 7b 73 6f 6c 76 65  nt sudoku {solve
24860 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d   Sudoku puzzles}
24870 20 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69 73 20   </tcl>.<p>This 
24880 6e 65 78 74 20 71 75 65 72 79 20 73 6f 6c 76 65  next query solve
24890 73 20 61 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c  s a Sudoku puzzl
248a0 65 2e 20 20 54 68 65 20 73 74 61 74 65 20 6f 66  e.  The state of
248b0 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73 0a 64   the puzzle is.d
248c0 65 66 69 6e 65 64 20 62 79 20 61 6e 20 38 31 2d  efined by an 81-
248d0 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67  character string
248e0 20 66 6f 72 6d 65 64 20 62 79 20 72 65 61 64 69   formed by readi
248f0 6e 67 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ng entries from 
24900 74 68 65 0a 70 75 7a 7a 6c 65 20 62 6f 78 20 72  the.puzzle box r
24910 6f 77 20 62 79 20 72 6f 77 20 66 72 6f 6d 20 6c  ow by row from l
24920 65 66 74 20 74 6f 20 72 69 67 68 74 20 61 6e 64  eft to right and
24930 20 74 68 65 6e 20 66 72 6f 6d 20 74 6f 70 20 74   then from top t
24940 6f 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20  o bottom..Blank 
24950 73 71 75 61 72 65 73 20 69 6e 20 74 68 65 20 70  squares in the p
24960 75 7a 7a 6c 65 20 61 72 65 20 64 65 6e 6f 74 65  uzzle are denote
24970 64 20 62 79 20 61 20 22 2e 22 20 63 68 61 72 61  d by a "." chara
24980 63 74 65 72 2e 20 20 0a 54 68 75 73 20 74 68 65  cter.  .Thus the
24990 20 69 6e 70 75 74 20 73 74 72 69 6e 67 3a 0a 0a   input string:..
249a0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 2e  <blockquote>.53.
249b0 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e  .7....6..195....
249c0 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e  98....6.8...6...
249d0 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e  34..8.3..17...2.
249e0 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34  ..6.6....28....4
249f0 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c  19..5....8..79.<
24a00 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
24a10 3e 43 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20  >Corresponds to 
24a20 61 20 70 75 7a 7a 6c 65 20 6c 69 6b 65 20 74 68  a puzzle like th
24a30 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
24a40 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
24a50 22 31 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "1" cellpadding=
24a60 22 35 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74  "5">.<tr><td>5<t
24a70 64 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>3<td> <td> <td
24a80 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >7<td> <td> <td>
24a90 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c   <td>.<tr><td>6<
24aa0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 3c 74  td> <td> <td>1<t
24ab0 64 3e 39 3c 74 64 3e 35 3c 74 64 3e 20 3c 74 64  d>9<td>5<td> <td
24ac0 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20  > <td>.<tr><td> 
24ad0 3c 74 64 3e 39 3c 74 64 3e 38 3c 74 64 3e 20 3c  <td>9<td>8<td> <
24ae0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
24af0 64 3e 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e  d>6<td>.<tr><td>
24b00 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  8<td> <td> <td> 
24b10 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>6<td> <td> <
24b20 74 64 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74  td> <td>3.<tr><t
24b30 64 3e 34 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>4<td> <td> <td
24b40 3e 38 3c 74 64 3e 20 3c 74 64 3e 33 3c 74 64 3e  >8<td> <td>3<td>
24b50 20 3c 74 64 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e   <td> <td>1.<tr>
24b60 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>7<td> <td> <
24b70 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 20 3c 74  td> <td>2<td> <t
24b80 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 0a 3c 74  d> <td> <td>6.<t
24b90 72 3e 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e  r><td> <td>6<td>
24ba0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20   <td> <td> <td> 
24bb0 3c 74 64 3e 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c  <td>2<td>8<td>.<
24bc0 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  tr><td> <td> <td
24bd0 3e 20 3c 74 64 3e 34 3c 74 64 3e 31 3c 74 64 3e  > <td>4<td>1<td>
24be0 39 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 35  9<td> <td> <td>5
24bf0 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c  .<tr><td> <td> <
24c00 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74  td> <td> <td>8<t
24c10 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64  d> <td> <td>7<td
24c20 3e 39 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  >9.</table>.</bl
24c30 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
24c40 69 73 20 69 73 20 74 68 65 20 71 75 65 72 79 20  is is the query 
24c50 74 68 61 74 20 73 6f 6c 76 65 73 20 74 68 65 20  that solves the 
24c60 70 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71  puzzle:..<blockq
24c70 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
24c80 52 45 43 55 52 53 49 56 45 0a 20 20 69 6e 70 75  RECURSIVE.  inpu
24c90 74 28 73 75 64 29 20 41 53 20 28 0a 20 20 20 20  t(sud) AS (.    
24ca0 56 41 4c 55 45 53 28 27 35 33 2e 2e 37 2e 2e 2e  VALUES('53..7...
24cb0 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e  .6..195....98...
24cc0 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38  .6.8...6...34..8
24cd0 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36  .3..17...2...6.6
24ce0 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35  ....28....419..5
24cf0 2e 2e 2e 2e 38 2e 2e 37 39 27 29 0a 20 20 29 2c  ....8..79').  ),
24d00 0a 20 20 64 69 67 69 74 73 28 7a 2c 20 6c 70 29  .  digits(z, lp)
24d10 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53   AS (.    VALUES
24d20 28 27 31 27 2c 20 31 29 0a 20 20 20 20 55 4e 49  ('1', 1).    UNI
24d30 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 0a 20 20  ON ALL SELECT.  
24d40 20 20 43 41 53 54 28 6c 70 2b 31 20 41 53 20 54    CAST(lp+1 AS T
24d50 45 58 54 29 2c 20 6c 70 2b 31 20 46 52 4f 4d 20  EXT), lp+1 FROM 
24d60 64 69 67 69 74 73 20 57 48 45 52 45 20 6c 70 3c  digits WHERE lp<
24d70 39 0a 20 20 29 2c 0a 20 20 78 28 73 2c 20 69 6e  9.  ),.  x(s, in
24d80 64 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  d) AS (.    SELE
24d90 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75  CT sud, instr(su
24da0 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70  d, '.') FROM inp
24db0 75 74 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  ut.    UNION ALL
24dc0 0a 20 20 20 20 53 45 4c 45 43 54 0a 20 20 20 20  .    SELECT.    
24dd0 20 20 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69    substr(s, 1, i
24de0 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75  nd-1) || z || su
24df0 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 0a  bstr(s, ind+1),.
24e00 20 20 20 20 20 20 69 6e 73 74 72 28 20 73 75 62        instr( sub
24e10 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29  str(s, 1, ind-1)
24e20 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28   || z || substr(
24e30 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29  s, ind+1), '.' )
24e40 0a 20 20 20 20 20 46 52 4f 4d 20 78 2c 20 64 69  .     FROM x, di
24e50 67 69 74 73 20 41 53 20 7a 0a 20 20 20 20 57 48  gits AS z.    WH
24e60 45 52 45 20 69 6e 64 3e 30 0a 20 20 20 20 20 20  ERE ind>0.      
24e70 41 4e 44 20 4e 4f 54 20 45 58 49 53 54 53 20 28  AND NOT EXISTS (
24e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 45 4c  .            SEL
24e90 45 43 54 20 31 0a 20 20 20 20 20 20 20 20 20 20  ECT 1.          
24ea0 20 20 20 20 46 52 4f 4d 20 64 69 67 69 74 73 20      FROM digits 
24eb0 41 53 20 6c 70 0a 20 20 20 20 20 20 20 20 20 20  AS lp.          
24ec0 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73     WHERE z.z = s
24ed0 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31  ubstr(s, ((ind-1
24ee0 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 0a  )/9)*9 + lp, 1).
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f00 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28  OR z.z = substr(
24f10 73 2c 20 28 28 69 6e 64 2d 31 29 25 39 29 20 2b  s, ((ind-1)%9) +
24f20 20 28 6c 70 2d 31 29 2a 39 20 2b 20 31 2c 20 31   (lp-1)*9 + 1, 1
24f30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
24f40 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74    OR z.z = subst
24f50 72 28 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f 33  r(s, (((ind-1)/3
24f60 29 20 25 20 33 29 20 2a 20 33 0a 20 20 20 20 20  ) % 3) * 3.     
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f80 20 20 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32 37     + ((ind-1)/27
24f90 29 20 2a 20 32 37 20 2b 20 6c 70 0a 20 20 20 20  ) * 27 + lp.    
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fb0 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f 20      + ((lp-1) / 
24fc0 33 29 20 2a 20 36 2c 20 31 29 0a 20 20 20 20 20  3) * 6, 1).     
24fd0 20 20 20 20 29 0a 20 20 29 0a 53 45 4c 45 43 54      ).  ).SELECT
24fe0 20 73 20 46 52 4f 4d 20 78 20 57 48 45 52 45 20   s FROM x WHERE 
24ff0 69 6e 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ind=0;.</pre></b
25000 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
25010 68 65 20 22 69 6e 70 75 74 22 20 43 54 45 20 64  he "input" CTE d
25020 65 66 69 6e 65 73 20 74 68 65 20 69 6e 70 75 74  efines the input
25030 20 70 75 7a 7a 6c 65 2e 0a 54 68 65 20 22 64 69   puzzle..The "di
25040 67 69 74 73 22 20 43 54 45 20 64 65 66 69 6e 65  gits" CTE define
25050 73 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 68  s a table that h
25060 6f 6c 64 73 20 61 6c 6c 20 64 69 67 69 74 73 20  olds all digits 
25070 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 2e  between 1 and 9.
25080 0a 54 68 65 20 77 6f 72 6b 20 6f 66 20 73 6f 6c  .The work of sol
25090 76 69 6e 67 20 74 68 65 20 70 75 7a 7a 6c 65 20  ving the puzzle 
250a0 69 73 20 75 6e 64 65 72 74 61 6b 65 6e 20 62 79  is undertaken by
250b0 20 74 68 65 20 22 78 22 20 43 54 45 2e 0a 41 6e   the "x" CTE..An
250c0 20 65 6e 74 72 79 20 69 6e 20 78 28 73 2c 69 6e   entry in x(s,in
250d0 64 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  d) means that th
250e0 65 20 38 31 2d 63 68 61 72 61 63 74 65 72 20 73  e 81-character s
250f0 74 72 69 6e 67 20 22 73 22 20 69 73 20 61 20 76  tring "s" is a v
25100 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a  alid.sudoku puzz
25110 6c 65 20 28 69 74 20 68 61 73 20 6e 6f 20 63 6f  le (it has no co
25120 6e 66 6c 69 63 74 73 29 20 61 6e 64 20 74 68 61  nflicts) and tha
25130 74 20 74 68 65 20 66 69 72 73 74 20 75 6e 6b 6e  t the first unkn
25140 6f 77 6e 20 63 68 61 72 61 63 74 65 72 0a 69 73  own character.is
25150 20 61 74 20 70 6f 73 69 74 69 6f 6e 20 22 69 6e   at position "in
25160 64 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20 69 66  d", or ind==0 if
25170 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 20 70   all character p
25180 6f 73 69 74 69 6f 6e 73 20 61 72 65 20 66 69 6c  ositions are fil
25190 6c 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f 61 6c  led in..The goal
251a0 2c 20 74 68 65 6e 2c 20 69 73 20 74 6f 20 63 6f  , then, is to co
251b0 6d 70 75 74 65 20 65 6e 74 72 69 65 73 20 66 6f  mpute entries fo
251c0 72 20 22 78 22 20 77 69 74 68 20 61 6e 20 22 69  r "x" with an "i
251d0 6e 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68  nd" of 0...<p>Th
251e0 65 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73 20 62  e solver works b
251f0 79 20 61 64 64 69 6e 67 20 6e 65 77 20 65 6e 74  y adding new ent
25200 72 69 65 73 20 74 6f 20 74 68 65 20 22 78 22 20  ries to the "x" 
25210 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e  recursive table.
25220 0a 47 69 76 65 6e 20 70 72 69 6f 72 20 65 6e 74  .Given prior ent
25230 72 69 65 73 2c 20 74 68 65 20 72 65 63 75 72 73  ries, the recurs
25240 69 76 65 2d 73 65 6c 65 63 74 20 74 72 69 65 73  ive-select tries
25250 20 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20 73 69   to fill in a si
25260 6e 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74 69 6f  ngle new.positio
25270 6e 20 77 69 74 68 20 61 6c 6c 20 76 61 6c 75 65  n with all value
25280 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  s between 1 and 
25290 39 20 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20  9 that actually 
252a0 77 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70 6f 73  work in that.pos
252b0 69 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 70  ition.  The comp
252c0 6c 69 63 61 74 65 64 20 22 4e 4f 54 20 45 58 49  licated "NOT EXI
252d0 53 54 53 22 20 73 75 62 71 75 65 72 79 20 69 73  STS" subquery is
252e0 20 74 68 65 20 6d 61 67 69 63 20 74 68 61 74 0a   the magic that.
252f0 66 69 67 75 72 65 73 20 6f 75 74 20 77 68 65 74  figures out whet
25300 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20  her or not each 
25310 63 61 6e 64 69 64 61 74 65 20 22 73 22 20 73 74  candidate "s" st
25320 72 69 6e 67 20 69 73 20 61 20 76 61 6c 69 64 0a  ring is a valid.
25330 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f 72  sudoku puzzle or
25340 20 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 69   not...<p>The fi
25350 6e 61 6c 20 61 6e 73 77 65 72 20 69 73 20 66 6f  nal answer is fo
25360 75 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 66  und by looking f
25370 6f 72 20 61 20 73 74 72 69 6e 67 20 77 69 74 68  or a string with
25380 20 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68 65 20   ind==0..If the 
25390 6f 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b 75 20  original sudoku 
253a0 70 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f 74 20  problem did not 
253b0 68 61 76 65 20 61 20 75 6e 69 71 75 65 20 73 6f  have a unique so
253c0 6c 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74 68 65  lution, then.the
253d0 20 71 75 65 72 79 20 77 69 6c 6c 20 72 65 74 75   query will retu
253e0 72 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20  rn all possible 
253f0 73 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66 20 74  solutions.  If t
25400 68 65 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f 62  he original prob
25410 6c 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76 61 62  lem.was unsolvab
25420 6c 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f 77 73  le, then no rows
25430 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65   will be returne
25440 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  d.  In this case
25450 2c 20 74 68 65 20 75 6e 69 71 75 65 0a 61 6e 73  , the unique.ans
25460 77 65 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  wer is:..<blockq
25470 75 6f 74 65 3e 0a 35 33 34 36 37 38 39 31 32 36  uote>.5346789126
25480 37 32 31 39 35 33 34 38 31 39 38 33 34 32 35 36  7219534819834256
25490 37 38 35 39 37 36 31 34 32 33 34 32 36 38 35 33  7859761423426853
254a0 37 39 31 37 31 33 39 32 34 38 35 36 39 36 31 35  7917139248569615
254b0 33 37 32 38 34 32 38 37 34 31 39 36 33 35 33 34  3728428741963534
254c0 35 32 38 36 31 37 39 0a 3c 2f 62 6c 6f 63 6b 71  5286179.</blockq
254d0 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 6f  uote>..<p>The so
254e0 6c 75 74 69 6f 6e 20 77 61 73 20 63 6f 6d 70 75  lution was compu
254f0 74 65 64 20 69 6e 20 6c 65 73 73 20 74 68 61 6e  ted in less than
25500 20 33 30 30 20 6d 69 6c 6c 69 73 65 63 6f 6e 64   300 millisecond
25510 73 20 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a 77 6f  s on a modern.wo
25520 72 6b 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e  rkstation...<h3>
25530 4c 69 6d 69 74 61 74 69 6f 6e 73 20 41 6e 64 20  Limitations And 
25540 43 61 76 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75  Caveats</h3>..<u
25550 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57  l>.<li><p>.The W
25560 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f  ITH clause canno
25570 74 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e  t be used within
25580 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47   a [CREATE TRIGG
25590 45 52 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65  ER]..<li><p>.The
255a0 20 57 49 54 48 20 63 6c 61 75 73 65 20 6d 75 73   WITH clause mus
255b0 74 20 61 70 70 65 61 72 20 61 74 20 74 68 65 20  t appear at the 
255c0 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 74  beginning of a t
255d0 6f 70 2d 6c 65 76 65 6c 20 5b 53 45 4c 45 43 54  op-level [SELECT
255e0 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 61  ] statement.or a
255f0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
25600 6f 66 20 61 20 73 75 62 71 75 65 72 79 2e 20 20  of a subquery.  
25610 54 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  The WITH clause 
25620 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 70 65 6e  cannot be prepen
25630 64 65 64 20 74 6f 0a 74 68 65 20 73 65 63 6f 6e  ded to.the secon
25640 64 20 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20  d or subsequent 
25650 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
25660 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20   of a [compound 
25670 73 65 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e  select]..<li><p>
25680 0a 54 68 65 20 53 51 4c 3a 31 39 39 39 20 73 70  .The SQL:1999 sp
25690 65 63 20 72 65 71 75 69 72 65 73 20 74 68 61 74  ec requires that
256a0 20 74 68 65 20 52 45 43 55 52 53 49 56 45 20 6b   the RECURSIVE k
256b0 65 79 77 6f 72 64 20 66 6f 6c 6c 6f 77 20 57 49  eyword follow WI
256c0 54 48 20 69 6e 20 61 6e 79 0a 57 49 54 48 20 63  TH in any.WITH c
256d0 6c 61 75 73 65 20 74 68 61 74 20 69 6e 63 6c 75  lause that inclu
256e0 64 65 73 20 61 20 72 65 63 75 72 73 69 76 65 20  des a recursive 
256f0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
25700 72 65 73 73 69 6f 6e 2e 20 20 48 6f 77 65 76 65  ression.  Howeve
25710 72 2c 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69  r, for.compatibi
25720 6c 69 74 79 20 77 69 74 68 20 53 71 6c 53 65 72  lity with SqlSer
25730 76 65 72 20 61 6e 64 20 4f 72 61 63 6c 65 2c 20  ver and Oracle, 
25740 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
25750 65 6e 66 6f 72 63 65 20 74 68 69 73 20 72 75 6c  enforce this rul
25760 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a  e..</ul>..<tcl>.
25770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
257a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
257b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
257c0 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73  Section SELECT s
257d0 65 6c 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75  elect {SELECT qu
257e0 65 72 79 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  ery}..RecursiveB
257f0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c  ubbleDiagram sel
25800 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ect-stmt.</tcl>.
25810 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20  ..<p>The SELECT 
25820 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
25830 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 64  d to query the d
25840 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65  atabase.  The.re
25850 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54  sult of a SELECT
25860 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   is zero or more
25870 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68   rows of data wh
25880 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73  ere each row.has
25890 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20   a fixed number 
258a0 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20 53  of columns.  A S
258b0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
258c0 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 0a 61 6e  does not make.an
258d0 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  y changes to the
258e0 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 54   database...<p>T
258f0 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74  he "[select-stmt
25900 5d 22 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  ]" syntax diagra
25910 6d 20 61 62 6f 76 65 20 61 74 74 65 6d 70 74 73  m above attempts
25920 20 74 6f 20 73 68 6f 77 20 61 73 20 6d 75 63 68   to show as much
25930 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54 20 73   of the.SELECT s
25940 74 61 74 65 6d 65 6e 74 20 73 79 6e 74 61 78 20  tatement syntax 
25950 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e 20 61  as possible in a
25960 20 73 69 6e 67 6c 65 20 64 69 61 67 72 61 6d 2c   single diagram,
25970 20 62 65 63 61 75 73 65 20 73 6f 6d 65 20 72 65   because some re
25980 61 64 65 72 73 0a 66 69 6e 64 20 74 68 61 74 20  aders.find that 
25990 68 65 6c 70 66 75 6c 2e 20 20 54 68 65 20 66 6f  helpful.  The fo
259a0 6c 6c 6f 77 69 6e 67 20 22 5b 66 61 63 74 6f 72  llowing "[factor
259b0 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22  ed-select-stmt]"
259c0 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69   is an alternati
259d0 76 65 0a 73 79 6e 74 61 78 20 64 69 61 67 72 61  ve.syntax diagra
259e0 6d 73 20 74 68 61 74 20 65 78 70 72 65 73 73 65  ms that expresse
259f0 73 20 74 68 65 20 73 61 6d 65 20 73 79 6e 74 61  s the same synta
25a00 78 20 62 75 74 20 74 72 69 65 73 20 74 6f 20 62  x but tries to b
25a10 72 65 61 6b 20 74 68 65 20 73 79 6e 74 61 78 20  reak the syntax 
25a20 0a 64 6f 77 6e 20 69 6e 74 6f 20 73 6d 61 6c 6c  .down into small
25a30 65 72 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74 63 6c  er chunks...<tcl
25a40 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  >.RecursiveBubbl
25a50 65 44 69 61 67 72 61 6d 20 2d 2d 69 6e 69 74 69  eDiagram --initi
25a60 61 6c 6c 79 2d 68 69 64 64 65 6e 20 66 61 63 74  ally-hidden fact
25a70 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74  ored-select-stmt
25a80 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74   select-core.</t
25a90 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61  cl>..<p>Note tha
25aa0 74 20 74 68 65 72 65 20 61 72 65 20 70 61 74 68  t there are path
25ab0 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 73 79  s through the sy
25ac0 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 74 68  ntax diagrams th
25ad0 61 74 0a 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77  at.are not allow
25ae0 65 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20  ed in practice. 
25af0 20 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73 3a 0a   Some examples:.
25b00 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41 4c 55  <ul>.<li>A [VALU
25b10 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 20 62  ES] clause can b
25b20 65 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  e the first elem
25b30 65 6e 74 20 69 6e 20 61 20 5b 63 6f 6d 70 6f 75  ent in a [compou
25b40 6e 64 20 53 45 4c 45 43 54 5d 0a 20 20 20 20 74  nd SELECT].    t
25b50 68 61 74 20 75 73 65 73 20 61 20 5b 57 49 54 48  hat uses a [WITH
25b60 5d 20 63 6c 61 75 73 65 2c 20 62 75 74 20 61 20  ] clause, but a 
25b70 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
25b80 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  that consists of
25b90 0a 20 20 20 20 6a 75 73 74 20 61 20 5b 56 41 4c  .    just a [VAL
25ba0 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 6e  UES] clause cann
25bb0 6f 74 20 62 65 20 70 72 65 63 65 64 65 64 20 62  ot be preceded b
25bc0 79 20 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73  y a [WITH] claus
25bd0 65 2e 0a 3c 6c 69 3e 54 68 65 20 5b 57 49 54 48  e..<li>The [WITH
25be0 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20 6f 63  ] clause must oc
25bf0 63 75 72 20 6f 6e 20 74 68 65 20 66 69 72 73 74  cur on the first
25c00 20 53 45 4c 45 43 54 20 6f 66 20 61 20 5b 63 6f   SELECT of a [co
25c10 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2e 0a  mpound SELECT]..
25c20 20 20 20 20 49 74 20 63 61 6e 6e 6f 74 20 66 6f      It cannot fo
25c30 6c 6c 6f 77 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  llow a [compound
25c40 2d 6f 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f 75 6c  -operator]..</ul
25c50 3e 0a 54 68 65 73 65 20 61 6e 64 20 6f 74 68 65  >.These and othe
25c60 72 20 73 69 6d 69 6c 61 72 20 73 79 6e 74 61 78  r similar syntax
25c70 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 72   restrictions ar
25c80 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 74  e described in t
25c90 68 65 20 74 65 78 74 2e 0a 0a 3c 70 3e 54 68 65  he text...<p>The
25ca0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
25cb0 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f  t is the most co
25cc0 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e  mplicated comman
25cd0 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  d in the SQL lan
25ce0 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74  guage..To make t
25cf0 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65  he description e
25d00 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c  asier to follow,
25d10 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73   some of the pas
25d20 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63  sages below desc
25d30 72 69 62 65 0a 74 68 65 20 77 61 79 20 74 68 65  ribe.the way the
25d40 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62   data returned b
25d50 79 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  y a SELECT state
25d60 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e  ment is determin
25d70 65 64 20 61 73 20 61 20 73 65 72 69 65 73 20 6f  ed as a series o
25d80 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20 69  f.steps. It is i
25d90 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70  mportant to keep
25da0 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68   in mind that th
25db0 69 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c  is is purely ill
25dc0 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70  ustrative -.in p
25dd0 72 61 63 74 69 63 65 20 6e 65 69 74 68 65 72 20  ractice neither 
25de0 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f  SQLite nor any o
25df0 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20  ther SQL engine 
25e00 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 66  is required to f
25e10 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61  ollow .this or a
25e20 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69 66 69  ny other specifi
25e30 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 74 63 6c  c process...<tcl
25e40 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 69 6d  >hd_fragment sim
25e50 70 6c 65 73 65 6c 65 63 74 20 7b 73 69 6d 70 6c  pleselect {simpl
25e60 65 20 53 45 4c 45 43 54 7d 3c 2f 74 63 6c 3e 0a  e SELECT}</tcl>.
25e70 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63  <h3>Simple Selec
25e80 74 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33  t Processing</h3
25e90 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 6f  >..<p>The core o
25ea0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
25eb0 6d 65 6e 74 20 69 73 20 61 20 22 73 69 6d 70 6c  ment is a "simpl
25ec0 65 20 53 45 4c 45 43 54 22 20 73 68 6f 77 6e 20  e SELECT" shown 
25ed0 62 79 20 74 68 65 0a 5b 73 65 6c 65 63 74 2d 63  by the.[select-c
25ee0 6f 72 65 5d 20 61 6e 64 20 5b 73 69 6d 70 6c 65  ore] and [simple
25ef0 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 20 73 79  -select-stmt] sy
25f00 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 62 65  ntax diagrams be
25f10 6c 6f 77 2e 20 20 0a 49 6e 20 70 72 61 63 74 69  low.  .In practi
25f20 63 65 2c 20 6d 6f 73 74 20 53 45 4c 45 43 54 20  ce, most SELECT 
25f30 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 73  statements are s
25f40 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
25f50 74 65 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c 3e 0a  tements...<tcl>.
25f60 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
25f70 69 61 67 72 61 6d 20 73 69 6d 70 6c 65 2d 73 65  iagram simple-se
25f80 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74  lect-stmt select
25f90 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -core.</tcl>..<p
25fa0 3e 47 65 6e 65 72 61 74 69 6e 67 20 74 68 65 20  >Generating the 
25fb0 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73 69 6d  results of a sim
25fc0 70 6c 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65  ple SELECT.state
25fd0 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74 65  ment is presente
25fe0 64 20 61 73 20 61 20 66 6f 75 72 20 73 74 65 70  d as a four step
25ff0 20 70 72 6f 63 65 73 73 20 69 6e 20 74 68 65 20   process in the 
26000 64 65 73 63 72 69 70 74 69 6f 6e 20 62 65 6c 6f  description belo
26010 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20  w:..<ol>.  <li> 
26020 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65 5d  <p>[FROM clause]
26030 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65   processing: The
26040 20 69 6e 70 75 74 20 64 61 74 61 20 66 6f 72 20   input data for 
26050 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  the simple SELEC
26060 54 20 69 73 0a 20 20 20 20 20 20 20 64 65 74 65  T is.       dete
26070 72 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e 70 75  rmined. The inpu
26080 74 20 64 61 74 61 20 69 73 20 65 69 74 68 65 72  t data is either
26090 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69   implicitly a si
260a0 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20 30 0a  ngle row with 0.
260b0 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 28         columns (
260c0 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 46  if there is no F
260d0 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72 20 69  ROM clause) or i
260e0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
260f0 74 68 65 20 46 52 4f 4d 0a 20 20 20 20 20 20 20  the FROM.       
26100 63 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c  clause..  <li> <
26110 70 3e 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d  p>[WHERE clause]
26120 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65   processing: The
26130 20 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 66   input data is f
26140 69 6c 74 65 72 65 64 20 75 73 69 6e 67 20 74 68  iltered using th
26150 65 20 57 48 45 52 45 0a 20 20 20 20 20 20 20 63  e WHERE.       c
26160 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
26170 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47  .  .  <li> <p>[G
26180 52 4f 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59  ROUP BY|GROUP BY
26190 2c 20 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73  , HAVING and res
261a0 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65  ult-column expre
261b0 73 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e  ssion] processin
261c0 67 3a 20 0a 20 20 20 20 20 20 20 54 68 65 20 73  g: .       The s
261d0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
261e0 73 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79  s is computed by
261f0 20 61 67 67 72 65 67 61 74 69 6e 67 20 74 68 65   aggregating the
26200 20 64 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20   data according 
26210 74 6f 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52  to.       any GR
26220 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e  OUP BY clause an
26230 64 20 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68  d calculating th
26240 65 20 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70  e result-set exp
26250 72 65 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65  ressions for the
26260 0a 20 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20  .       rows of 
26270 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70  the filtered inp
26280 75 74 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20  ut dataset.  .  
26290 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43  <li> <p>[DISTINC
262a0 54 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b  T|DISTINCT/ALL k
262b0 65 79 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69  eyword] processi
262c0 6e 67 3a 20 49 66 20 74 68 65 20 71 75 65 72 79  ng: If the query
262d0 20 69 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20   is a "SELECT.  
262e0 20 20 20 20 20 44 49 53 54 49 4e 43 54 22 20 71       DISTINCT" q
262f0 75 65 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20  uery, duplicate 
26300 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
26310 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66   from the set of
26320 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f   result rows..</
26330 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  ol>..<p>There ar
26340 65 20 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73  e two types of s
26350 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
26360 74 65 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61  tement - aggrega
26370 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72  te and .non-aggr
26380 65 67 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e  egate queries. ^
26390 41 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  A simple SELECT 
263a0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20  statement is an 
263b0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
263c0 69 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65  if.it contains e
263d0 69 74 68 65 72 20 61 20 47 52 4f 55 50 20 42 59  ither a GROUP BY
263e0 20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f   clause or one o
263f0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
26400 20 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68   functions.in th
26410 65 20 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f  e result-set. ^O
26420 74 68 65 72 77 69 73 65 2c 20 69 66 20 61 20 73  therwise, if a s
26430 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e  imple SELECT con
26440 74 61 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61  tains no aggrega
26450 74 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  te.functions or 
26460 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
26470 65 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61  e, it is a non-a
26480 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a  ggregate query..
26490 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d  .<p><b>1. Determ
264a0 69 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74  ination of input
264b0 20 64 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75   data (FROM clau
264c0 73 65 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c  se processing).<
264d0 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  /b>.<tcl>hd_frag
264e0 6d 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c  ment fromclause<
264f0 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65  /tcl>.<tcl>hd_ke
26500 79 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61  ywords {FROM cla
26510 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  use}</tcl>..<p>T
26520 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 75 73  he input data us
26530 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53  ed by a simple S
26540 45 4c 45 43 54 20 71 75 65 72 79 20 69 73 20 61  ELECT query is a
26550 20 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e   set of <i>N</i>
26560 20 72 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d   rows .each <i>M
26570 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64  </i> columns wid
26580 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20  e...<p>^(If the 
26590 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f  FROM clause is o
265a0 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69  mitted from a si
265b0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
265c0 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  ement, then the 
265d0 0a 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 69  .input data is i
265e0 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67  mplicitly a sing
265f0 6c 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75  le row zero colu
26600 6d 6e 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e  mns wide)^ (i.e.
26610 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a   <i>N</i>=1 and.
26620 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70  <i>M</i>=0)...<p
26630 3e 49 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73  >If a FROM claus
26640 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
26650 74 68 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63  the data on whic
26660 68 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  h a simple SELEC
26670 54 20 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73  T query.operates
26680 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20   comes from the 
26690 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  one or more tabl
266a0 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
266b0 20 28 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65   (SELECT stateme
266c0 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73  nts.in parenthes
266d0 69 73 29 20 73 70 65 63 69 66 69 65 64 20 66 6f  is) specified fo
266e0 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d  llowing the FROM
266f0 20 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62   keyword. ^A sub
26700 71 75 65 72 79 20 73 70 65 63 69 66 69 65 64 0a  query specified.
26710 69 6e 20 74 68 65 20 74 61 62 6c 65 2d 6f 72 2d  in the table-or-
26720 73 75 62 71 75 65 72 79 20 66 6f 6c 6c 6f 77 69  subquery followi
26730 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  ng the FROM clau
26740 73 65 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20  se in a .simple 
26750 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
26760 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69   is.handled as i
26770 66 20 69 74 20 77 61 73 20 61 20 74 61 62 6c 65  f it was a table
26780 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
26790 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
267a0 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73   executing the.s
267b0 75 62 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e  ubquery statemen
267c0 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20  t. ^Each column 
267d0 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 20  of the subquery 
267e0 68 61 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69  has the.[collati
267f0 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  on|collation seq
26800 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66 69  uence] and [affi
26810 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 72  nity] of the cor
26820 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65  responding expre
26830 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62  ssion.in the sub
26840 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e  query statement.
26850 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69  ..<p>^If there i
26860 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20  s only a single 
26870 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
26880 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 0a 63 6c  y in the FROM.cl
26890 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 69  ause, then the i
268a0 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20 62  nput data used b
268b0 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
268c0 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 63 6f  tement is the co
268d0 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61  ntents of the.na
268e0 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66 20 74  med table. ^If t
268f0 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74 68 61  here is more tha
26900 6e 20 6f 6e 65 20 74 61 62 6c 65 20 6f 72 20 73  n one table or s
26910 75 62 71 75 65 72 79 20 69 6e 20 46 52 4f 4d 20  ubquery in FROM 
26920 63 6c 61 75 73 65 0a 74 68 65 6e 20 74 68 65 20  clause.then the 
26930 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 6c 6c 20  contents of all 
26940 74 61 62 6c 65 73 20 61 6e 64 2f 6f 72 20 73 75  tables and/or su
26950 62 71 75 65 72 69 65 73 0a 61 72 65 20 6a 6f 69  bqueries.are joi
26960 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c  ned into a singl
26970 65 20 64 61 74 61 73 65 74 20 66 6f 72 20 74 68  e dataset for th
26980 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
26990 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65  statement to ope
269a0 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79  rate on..Exactly
269b0 20 68 6f 77 20 74 68 65 20 64 61 74 61 20 69 73   how the data is
269c0 20 63 6f 6d 62 69 6e 65 64 20 64 65 70 65 6e 64   combined depend
269d0 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69  s on the specifi
269e0 63 20 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  c [join-operator
269f0 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73  ] and.[join-cons
26a00 74 72 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20  traint] used to 
26a10 63 6f 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c  connect the tabl
26a20 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
26a30 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41   together...<p>A
26a40 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69  ll joins in SQLi
26a50 74 65 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20  te are based on 
26a60 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
26a70 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66  oduct of the lef
26a80 74 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64  t and.right-hand
26a90 20 64 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20   datasets. ^The 
26aa0 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63  columns of the c
26ab0 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
26ac0 20 64 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e   dataset are, in
26ad0 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65   .order, all the
26ae0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
26af0 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65  left-hand datase
26b00 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c  t followed by al
26b10 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66  l the columns.of
26b20 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
26b30 64 61 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20  dataset. ^There 
26b40 69 73 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20  is a row in the 
26b50 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
26b60 74 20 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64  t dataset.formed
26b70 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61   by combining ea
26b80 63 68 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e  ch unique combin
26b90 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66  ation of a row f
26ba0 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e  rom the left-han
26bb0 64 20 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  d .and right-han
26bc0 64 20 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e  d datasets. ^(In
26bd0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
26be0 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64   the left-hand d
26bf0 61 74 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20  ataset consists 
26c00 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61  of.<i>N<sub><sma
26c10 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c  ll>left</small><
26c20 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f  /sub></i> rows o
26c30 66 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61  f .<i>M<sub><sma
26c40 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c  ll>left</small><
26c50 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e  /sub></i> column
26c60 73 2c 20 61 6e 64 20 74 68 65 20 72 69 67 68 74  s, and the right
26c70 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66  -hand dataset of
26c80 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>N<sub><small
26c90 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
26ca0 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66  sub></i> rows of
26cb0 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>M<sub><small
26cc0 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
26cd0 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  sub></i> columns
26ce0 2c 20 74 68 65 6e 20 74 68 65 20 63 61 72 74 65  , then the carte
26cf0 73 69 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20  sian product is 
26d00 61 0a 64 61 74 61 73 65 74 20 6f 66 20 0a 3c 69  a.dataset of .<i
26d10 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65  >N<sub><small>le
26d20 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ft</small></sub>
26d30 26 74 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c 73 6d  &times;N<sub><sm
26d40 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c  all>right</small
26d50 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f 77 73  ></sub></i>.rows
26d60 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e  , each containin
26d70 67 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61  g .<i>M<sub><sma
26d80 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c  ll>left</small><
26d90 2f 73 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73 6d 61  /sub>+M<sub><sma
26da0 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
26db0 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d  </sub></i> colum
26dc0 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ns.)^..<p>^If th
26dd0 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  e join-operator 
26de0 69 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c  is "CROSS JOIN",
26df0 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22   "INNER JOIN", "
26e00 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61  JOIN" or a comma
26e10 0a 28 22 2c 22 29 20 61 6e 64 20 74 68 65 72 65  .(",") and there
26e20 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49   is no ON or USI
26e30 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  NG clause, then 
26e40 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
26e50 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79  e join is.simply
26e60 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
26e70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65  roduct of the le
26e80 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
26e90 64 20 64 61 74 61 73 65 74 73 2e 20 0a 49 66 20  d datasets. .If 
26ea0 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 64 6f  join-operator do
26eb0 65 73 20 68 61 76 65 20 4f 4e 20 6f 72 20 55 53  es have ON or US
26ec0 49 4e 47 20 63 6c 61 75 73 65 73 2c 20 74 68 6f  ING clauses, tho
26ed0 73 65 20 61 72 65 20 68 61 6e 64 6c 65 64 20 61  se are handled a
26ee0 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74 68 65 20  ccording to.the 
26ef0 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74  following bullet
26f00 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20   points:..<ul>. 
26f10 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
26f20 65 72 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61  ere is an ON cla
26f30 75 73 65 20 74 68 65 6e 20 74 68 65 20 4f 4e 20  use then the ON 
26f40 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a 20 20  expression is.  
26f50 20 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 66       evaluated f
26f60 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
26f70 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
26f80 64 75 63 74 20 61 73 20 61 20 0a 20 20 20 20 20  duct as a .     
26f90 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65    [boolean expre
26fa0 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77  ssion]. Only row
26fb0 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
26fc0 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
26fd0 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20  ates to .       
26fe0 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65  true are include
26ff0 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73  d from the datas
27000 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  et.)^..  <li> <p
27010 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 61 20  >^If there is a 
27020 55 53 49 4e 47 20 63 6c 61 75 73 65 0a 20 20 20  USING clause.   
27030 20 20 20 20 74 68 65 6e 20 65 61 63 68 20 6f 66      then each of
27040 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
27050 73 20 73 70 65 63 69 66 69 65 64 20 6d 75 73 74  s specified must
27060 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 64 61   exist in the da
27070 74 61 73 65 74 73 20 74 6f 20 0a 20 20 20 20 20  tasets to .     
27080 20 20 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20    both the left 
27090 61 6e 64 20 72 69 67 68 74 20 6f 66 20 74 68 65  and right of the
270a0 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 2e 20   join-operator. 
270b0 5e 28 46 6f 72 20 65 61 63 68 20 70 61 69 72 20  ^(For each pair 
270c0 6f 66 20 6e 61 6d 65 64 0a 20 20 20 20 20 20 20  of named.       
270d0 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78 70  columns, the exp
270e0 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d  ression "lhs.X =
270f0 20 72 68 73 2e 58 22 20 69 73 20 65 76 61 6c 75   rhs.X" is evalu
27100 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
27110 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68 65 20  w of.       the 
27120 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
27130 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20  t as a [boolean 
27140 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c  expression]. Onl
27150 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  y rows for which
27160 0a 20 20 20 20 20 20 20 61 6c 6c 20 73 75 63 68  .       all such
27170 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61   expressions eva
27180 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65 20 61  luates to true a
27190 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d  re included from
271a0 20 74 68 65 0a 20 20 20 20 20 20 20 72 65 73 75   the.       resu
271b0 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20  lt set.)^ ^When 
271c0 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73  comparing values
271d0 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
271e0 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20  a USING clause, 
271f0 74 68 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61  the.       norma
27200 6c 20 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64  l rules for hand
27210 6c 69 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c  ling affinities,
27220 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
27230 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20  nces and NULL.  
27240 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63       values in c
27250 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79  omparisons apply
27260 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72  . ^The column fr
27270 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 6f  om the dataset o
27280 6e 20 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66  n the.       lef
27290 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74  t-hand side of t
272a0 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
272b0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
272c0 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  o be on the left
272d0 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64  -hand.       sid
272e0 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  e of the compari
272f0 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29  son operator (=)
27300 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
27310 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a  s of collation .
27320 20 20 20 20 20 20 20 73 65 71 75 65 6e 63 65 20         sequence 
27330 61 6e 64 20 61 66 66 69 6e 69 74 79 20 70 72 65  and affinity pre
27340 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20  cedence...      
27350 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61   <p>^For each pa
27360 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64  ir of columns id
27370 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 55 53  entified by a US
27380 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20  ING clause, the 
27390 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72  column.       fr
273a0 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  om the right-han
273b0 64 20 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69  d dataset is omi
273c0 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f  tted from the jo
273d0 69 6e 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54  ined dataset. ^T
273e0 68 69 73 20 0a 20 20 20 20 20 20 20 69 73 20 74  his .       is t
273f0 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e  he only differen
27400 63 65 20 62 65 74 77 65 65 6e 20 61 20 55 53 49  ce between a USI
27410 4e 47 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74  NG clause and it
27420 73 20 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a  s equivalent ON.
27430 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e         constrain
27440 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28  t...  <li> <p>^(
27450 49 66 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  If the NATURAL k
27460 65 79 77 6f 72 64 20 69 73 20 69 6e 20 74 68 65  eyword is in the
27470 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74   join-operator t
27480 68 65 6e 20 61 6e 0a 20 20 20 20 20 20 20 69 6d  hen an.       im
27490 70 6c 69 63 69 74 20 55 53 49 4e 47 20 63 6c 61  plicit USING cla
274a0 75 73 65 20 69 73 20 61 64 64 65 64 20 74 6f 20  use is added to 
274b0 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61  the join-constra
274c0 69 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c 69 63  ints. The implic
274d0 69 74 0a 20 20 20 20 20 20 20 55 53 49 4e 47 20  it.       USING 
274e0 63 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e 73 20  clause contains 
274f0 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75  each of the colu
27500 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 61 70  mn names that ap
27510 70 65 61 72 20 69 6e 20 62 6f 74 68 0a 20 20 20  pear in both.   
27520 20 20 20 20 74 68 65 20 6c 65 66 74 20 61 6e 64      the left and
27530 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75   right-hand inpu
27540 74 20 64 61 74 61 73 65 74 73 2e 29 5e 20 5e 49  t datasets.)^ ^I
27550 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  f the left and r
27560 69 67 68 74 2d 68 61 6e 64 0a 20 20 20 20 20 20  ight-hand.      
27570 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 73 20   input datasets 
27580 66 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f  feature no commo
27590 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  n column names, 
275a0 74 68 65 6e 20 74 68 65 20 4e 41 54 55 52 41 4c  then the NATURAL
275b0 20 6b 65 79 77 6f 72 64 0a 20 20 20 20 20 20 20   keyword.       
275c0 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e  has no effect on
275d0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
275e0 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49  the join. ^A USI
275f0 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20  NG or ON clause 
27600 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f 74 20 62  may.       not b
27610 65 20 61 64 64 65 64 20 74 6f 20 61 20 6a 6f 69  e added to a joi
27620 6e 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  n that specifies
27630 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79   the NATURAL key
27640 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  word...  <li> <p
27650 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f  >^(If the join-o
27660 70 65 72 61 74 6f 72 20 69 73 20 61 20 22 4c 45  perator is a "LE
27670 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46  FT JOIN" or "LEF
27680 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74  T OUTER JOIN", t
27690 68 65 6e 0a 20 20 20 20 20 20 20 61 66 74 65 72  hen.       after
276a0 0a 20 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f  .       the ON o
276b0 72 20 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e  r USING filterin
276c0 67 20 63 6c 61 75 73 65 73 20 68 61 76 65 20 62  g clauses have b
276d0 65 65 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20  een applied, an 
276e0 65 78 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20  extra row is .  
276f0 20 20 20 20 20 61 64 64 65 64 20 74 6f 20 74 68       added to th
27700 65 20 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63  e output for eac
27710 68 20 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69  h row in the ori
27720 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20  ginal left-hand 
27730 69 6e 70 75 74 20 0a 20 20 20 20 20 20 20 64 61  input .       da
27740 74 61 73 65 74 20 74 68 61 74 20 63 6f 72 72 65  taset that corre
27750 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77  sponds to no row
27760 73 20 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20  s at all in the 
27770 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20  composite.      
27780 20 64 61 74 61 73 65 74 20 28 69 66 20 61 6e 79   dataset (if any
27790 29 2e 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20  ).)^ ^The added 
277a0 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c  rows contain NUL
277b0 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
277c0 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74  columns.       t
277d0 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c  hat would normal
277e0 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65  ly contain value
277f0 73 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  s copied from th
27800 65 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70  e right-hand inp
27810 75 74 0a 20 20 20 20 20 20 20 64 61 74 61 73 65  ut.       datase
27820 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  t.  .</ul>..<p>^
27830 28 57 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20  (When more than 
27840 74 77 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a  two tables are j
27850 6f 69 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61  oined together a
27860 73 20 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d  s part of a FROM
27870 20 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69   clause,.the joi
27880 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65  n operations are
27890 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72   processed in or
278a0 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  der from left to
278b0 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72   right. In other
278c0 20 0a 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f   .words, the FRO
278d0 4d 20 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e  M clause (A join
278e0 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d  -op-1 B join-op-
278f0 32 20 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64  2 C) is computed
27900 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70   as .((A join-op
27910 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20  -1 B) join-op-2 
27920 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  C).)^..<tcl>hd_f
27930 72 61 67 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69  ragment crossjoi
27940 6e 20 7b 74 72 65 61 74 73 20 74 68 65 20 43 52  n {treats the CR
27950 4f 53 53 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f  OSS JOIN operato
27960 72 20 73 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63  r specially}</tc
27970 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f  l>.<p><b>Side no
27980 74 65 3a 20 53 70 65 63 69 61 6c 20 68 61 6e 64  te: Special hand
27990 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f  ling of CROSS JO
279a0 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69  IN.</b>.^There i
279b0 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20  s no difference 
279c0 62 65 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e  between the "INN
279d0 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
279e0 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70   and "," join.op
279f0 65 72 61 74 6f 72 73 2e 20 54 68 65 79 20 61 72  erators. They ar
27a00 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74  e completely int
27a10 65 72 63 68 61 6e 67 65 61 62 6c 65 20 69 6e 20  erchangeable in 
27a20 53 51 4c 69 74 65 2e 0a 5e 28 54 68 65 20 22 43  SQLite..^(The "C
27a30 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20  ROSS JOIN" join 
27a40 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65  operator produce
27a50 73 20 74 68 65 20 73 61 6d 65 20 72 65 73 75 6c  s the same resul
27a60 74 20 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52  t as the ."INNER
27a70 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61   JOIN", "JOIN" a
27a80 6e 64 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73  nd "," operators
27a90 29 5e 2c 20 62 75 74 20 69 73 20 0a 5b 43 52 4f  )^, but is .[CRO
27aa0 53 53 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65 64 20  SS JOIN|handled 
27ab0 64 69 66 66 65 72 65 6e 74 6c 79 20 62 79 20 74  differently by t
27ac0 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
27ad0 65 72 5d 0a 69 6e 20 74 68 61 74 20 69 74 20 70  er].in that it p
27ae0 72 65 76 65 6e 74 73 20 74 68 65 20 71 75 65 72  revents the quer
27af0 79 20 6f 70 74 69 6d 69 7a 65 72 20 66 72 6f 6d  y optimizer from
27b00 20 72 65 6f 72 64 65 72 69 6e 67 0a 74 68 65 20   reordering.the 
27b10 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f  tables in the jo
27b20 69 6e 2e 20 20 41 6e 20 61 70 70 6c 69 63 61 74  in.  An applicat
27b30 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 72 20 63  ion programmer c
27b40 61 6e 20 75 73 65 20 74 68 65 20 43 52 4f 53 53  an use the CROSS
27b50 20 4a 4f 49 4e 20 0a 6f 70 65 72 61 74 6f 72 20   JOIN .operator 
27b60 74 6f 20 64 69 72 65 63 74 6c 79 20 69 6e 66 6c  to directly infl
27b70 75 65 6e 63 65 20 74 68 65 20 61 6c 67 6f 72 69  uence the algori
27b80 74 68 6d 20 74 68 61 74 20 69 73 20 63 68 6f 73  thm that is chos
27b90 65 6e 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a  en to implement.
27ba0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
27bb0 6d 65 6e 74 2e 20 20 41 76 6f 69 64 20 75 73 69  ment.  Avoid usi
27bc0 6e 67 20 43 52 4f 53 53 20 4a 4f 49 4e 20 65 78  ng CROSS JOIN ex
27bd0 63 65 70 74 20 69 6e 20 73 70 65 63 69 66 69 63  cept in specific
27be0 20 73 69 74 75 61 74 69 6f 6e 73 20 0a 77 68 65   situations .whe
27bf0 72 65 20 6d 61 6e 75 61 6c 20 63 6f 6e 74 72 6f  re manual contro
27c00 6c 20 6f 66 20 74 68 65 20 71 75 65 72 79 20 6f  l of the query o
27c10 70 74 69 6d 69 7a 65 72 20 69 73 20 64 65 73 69  ptimizer is desi
27c20 72 65 64 2e 20 20 41 76 6f 69 64 20 75 73 69 6e  red.  Avoid usin
27c30 67 0a 43 52 4f 53 53 20 4a 4f 49 4e 20 65 61 72  g.CROSS JOIN ear
27c40 6c 79 20 69 6e 20 74 68 65 20 64 65 76 65 6c 6f  ly in the develo
27c50 70 6d 65 6e 74 20 6f 66 20 61 6e 20 61 70 70 6c  pment of an appl
27c60 69 63 61 74 69 6f 6e 20 61 73 20 64 6f 69 6e 67  ication as doing
27c70 20 73 6f 20 69 73 0a 61 20 3c 61 20 68 72 65 66   so is.a <a href
27c80 3d 22 68 74 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f  ="http://c2.com/
27c90 63 67 69 2f 77 69 6b 69 3f 50 72 65 6d 61 74 75  cgi/wiki?Prematu
27ca0 72 65 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 22 3e  reOptimization">
27cb0 70 72 65 6d 61 74 75 72 65 0a 6f 70 74 69 6d 69  premature.optimi
27cc0 7a 61 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65  zation</a>.  The
27cd0 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e   special handlin
27ce0 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 20  g of CROSS JOIN 
27cf0 69 73 20 61 6e 20 53 51 4c 69 74 65 2d 73 70 65  is an SQLite-spe
27d00 63 69 66 69 63 0a 66 65 61 74 75 72 65 20 61 6e  cific.feature an
27d10 64 20 69 73 20 6e 6f 74 20 61 20 70 61 72 74 20  d is not a part 
27d20 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  of standard SQL.
27d30 0a 20 20 20 20 20 20 20 0a 0a 3c 74 63 6c 3e 68  .       ..<tcl>h
27d40 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65  d_fragment where
27d50 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63  clause</tcl>.<tc
27d60 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57  l>hd_keywords {W
27d70 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63  HERE clause}</tc
27d80 6c 3e 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48 45 52  l>.<p><b>2. WHER
27d90 45 20 63 6c 61 75 73 65 20 66 69 6c 74 65 72 69  E clause filteri
27da0 6e 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66  ng.</b>..<p>^(If
27db0 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
27dc0 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
27dd0 65 20 57 48 45 52 45 20 65 78 70 72 65 73 73 69  e WHERE expressi
27de0 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  on is evaluated 
27df0 66 6f 72 20 0a 65 61 63 68 20 72 6f 77 20 69 6e  for .each row in
27e00 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   the input data 
27e10 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
27e20 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20  pression]. Only 
27e30 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
27e40 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
27e50 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
27e60 61 74 65 73 20 74 6f 20 74 72 75 65 20 61 72 65  ates to true are
27e70 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   included from t
27e80 68 65 20 64 61 74 61 73 65 74 20 62 65 66 6f 72  he dataset befor
27e90 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 20  e.continuing.)^ 
27ea0 20 52 6f 77 73 20 61 72 65 20 65 78 63 6c 75 64   Rows are exclud
27eb0 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75  ed from the resu
27ec0 6c 74 20 69 66 20 74 68 65 20 57 48 45 52 45 20  lt if the WHERE 
27ed0 63 6c 61 75 73 65 0a 65 76 61 6c 75 61 74 65 73  clause.evaluates
27ee0 20 74 6f 20 65 69 74 68 65 72 20 66 61 6c 73 65   to either false
27ef0 20 6f 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f   or NULL...<p>Fo
27f00 72 20 61 20 4a 4f 49 4e 20 6f 72 20 49 4e 4e 45  r a JOIN or INNE
27f10 52 20 4a 4f 49 4e 20 6f 72 20 43 52 4f 53 53 20  R JOIN or CROSS 
27f20 4a 4f 49 4e 2c 20 74 68 65 72 65 20 69 73 20 6e  JOIN, there is n
27f30 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  o difference bet
27f40 77 65 65 6e 20 0a 61 20 63 6f 6e 73 74 72 61 69  ween .a constrai
27f50 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  nt expression in
27f60 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
27f70 65 20 61 6e 64 20 6f 6e 65 20 69 6e 20 74 68 65  e and one in the
27f80 20 4f 4e 20 63 6c 61 75 73 65 2e 20 20 48 6f 77   ON clause.  How
27f90 65 76 65 72 2c 0a 66 6f 72 20 61 20 4c 45 46 54  ever,.for a LEFT
27fa0 20 4a 4f 49 4e 20 6f 72 20 4c 45 46 54 20 4f 55   JOIN or LEFT OU
27fb0 54 45 52 20 4a 4f 49 4e 2c 20 74 68 65 20 64 69  TER JOIN, the di
27fc0 66 66 65 72 65 6e 63 65 20 69 73 20 76 65 72 79  fference is very
27fd0 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 0a 49 6e   important.  .In
27fe0 20 61 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a 74 68   a LEFT JOIN,.th
27ff0 65 20 65 78 74 72 61 20 4e 55 4c 4c 20 72 6f 77  e extra NULL row
28000 20 66 6f 72 20 74 68 65 20 72 69 67 68 74 2d 68   for the right-h
28010 61 6e 64 20 74 61 62 6c 65 20 69 73 20 61 64 64  and table is add
28020 65 64 20 61 66 74 65 72 20 4f 4e 20 63 6c 61 75  ed after ON clau
28030 73 65 20 70 72 6f 63 65 73 73 69 6e 67 0a 62 75  se processing.bu
28040 74 20 62 65 66 6f 72 65 20 57 48 45 52 45 20 63  t before WHERE c
28050 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67  lause processing
28060 2e 20 20 41 20 63 6f 6e 73 74 72 61 69 6e 74 20  .  A constraint 
28070 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 6c 65 66  of the form "lef
28080 74 2e 78 3d 72 69 67 68 74 2e 79 22 0a 69 6e 20  t.x=right.y".in 
28090 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 77 69 6c  an ON clause wil
280a0 6c 20 74 68 65 72 65 66 6f 72 65 20 61 6c 6c 6f  l therefore allo
280b0 77 20 74 68 72 6f 75 67 68 20 74 68 65 20 61 64  w through the ad
280c0 64 65 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72 6f 77  ded all-NULL row
280d0 73 20 6f 66 20 74 68 65 0a 72 69 67 68 74 20 74  s of the.right t
280e0 61 62 6c 65 2e 20 20 42 75 74 20 69 66 20 74 68  able.  But if th
280f0 61 74 20 73 61 6d 65 20 63 6f 6e 73 74 72 61 69  at same constrai
28100 6e 74 20 69 73 20 69 6e 20 74 68 65 20 57 48 45  nt is in the WHE
28110 52 45 20 63 6c 61 75 73 65 20 61 20 4e 55 4c 4c  RE clause a NULL
28120 20 69 6e 0a 22 72 69 67 68 74 2e 79 22 20 77 69   in."right.y" wi
28130 6c 6c 20 70 72 65 76 65 6e 74 20 74 68 65 20 65  ll prevent the e
28140 78 70 72 65 73 73 69 6f 6e 20 22 6c 65 66 74 2e  xpression "left.
28150 78 3d 72 69 67 68 74 2e 79 22 20 66 72 6f 6d 20  x=right.y" from 
28160 62 65 69 6e 67 20 74 72 75 65 2c 20 61 6e 64 0a  being true, and.
28170 74 68 75 73 20 65 78 63 6c 75 64 65 20 74 68 61  thus exclude tha
28180 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6f  t row from the o
28190 75 74 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e  utput...<p><b>3.
281a0 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   Generation of t
281b0 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74  he set of result
281c0 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e   rows.</b>.<tcl>
281d0 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 73 75  hd_fragment resu
281e0 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  ltset</tcl>.<tcl
281f0 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65  >hd_keywords {re
28200 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73  sult-set express
28210 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d  ions} {GROUP BY}
28220 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20  </tcl>..<p>Once 
28230 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66  the input data f
28240 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  rom the FROM cla
28250 75 73 65 20 68 61 73 20 62 65 65 6e 20 66 69 6c  use has been fil
28260 74 65 72 65 64 20 62 79 20 74 68 65 0a 57 48 45  tered by the.WHE
28270 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73  RE clause expres
28280 73 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c 20 74  sion (if any), t
28290 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74  he set of result
282a0 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20 73 69   rows for the si
282b0 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 61 72 65  mple .SELECT are
282c0 20 63 61 6c 63 75 6c 61 74 65 64 2e 20 45 78 61   calculated. Exa
282d0 63 74 6c 79 20 68 6f 77 20 74 68 69 73 20 69 73  ctly how this is
282e0 20 64 6f 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e   done depends on
282f0 20 77 68 65 74 68 65 72 20 74 68 65 20 73 69 6d   whether the sim
28300 70 6c 65 20 0a 53 45 4c 45 43 54 20 69 73 20 61  ple .SELECT is a
28310 6e 20 61 67 67 72 65 67 61 74 65 20 6f 72 20 6e  n aggregate or n
28320 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65  on-aggregate que
28330 72 79 2c 20 61 6e 64 20 77 68 65 74 68 65 72 20  ry, and whether 
28340 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42  or not a GROUP.B
28350 59 20 63 6c 61 75 73 65 20 77 61 73 20 73 70 65  Y clause was spe
28360 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65  cified...<p> The
28370 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
28380 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65  ions between the
28390 20 53 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d   SELECT and FROM
283a0 20 6b 65 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f   keywords is kno
283b0 77 6e 20 61 73 0a 74 68 65 20 72 65 73 75 6c 74  wn as.the result
283c0 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
283d0 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20  .  ^If a result 
283e0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
283f0 65 20 73 70 65 63 69 61 6c 20 65 78 70 72 65 73  e special expres
28400 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c  sion."*" then al
28410 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  l columns in the
28420 20 69 6e 70 75 74 20 64 61 74 61 20 61 72 65 20   input data are 
28430 73 75 62 73 74 69 74 75 74 65 64 20 66 6f 72 20  substituted for 
28440 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73  that one express
28450 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20 65 78  ion..^(If the ex
28460 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
28470 61 6c 69 61 73 20 6f 66 20 61 20 74 61 62 6c 65  alias of a table
28480 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
28490 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  the FROM clause.
284a0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22  followed by ".*"
284b0 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e   then all column
284c0 73 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64  s from the named
284d0 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
284e0 72 79 20 61 72 65 0a 73 75 62 73 74 69 74 75 74  ry are.substitut
284f0 65 64 20 66 6f 72 20 74 68 65 20 73 69 6e 67 6c  ed for the singl
28500 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20  e expression.)^ 
28510 5e 28 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  ^(It is an error
28520 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72   to use a "*" or
28530 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65  ."alias.*" expre
28540 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e  ssion in any con
28550 74 65 78 74 20 6f 74 68 65 72 20 74 68 61 6e 20  text other than 
28560 61 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  a result express
28570 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28 49 74  ion list.)^.^(It
28580 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72 72 6f   is also an erro
28590 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f  r to use a "*" o
285a0 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72  r "alias.*" expr
285b0 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69 6d 70  ession in a simp
285c0 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72 79 20  le SELECT.query 
285d0 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 68 61  that does not ha
285e0 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65  ve a FROM clause
285f0 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 6e  .)^..<p> ^(The n
28600 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
28610 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72 65 74   in the rows ret
28620 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d 70 6c  urned by a simpl
28630 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
28640 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f 20 74  nt.is equal to t
28650 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 78 70  he number of exp
28660 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20  ressions in the 
28670 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
28680 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73 75 62  n list after.sub
28690 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a 20 61  stitution of * a
286a0 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70 72 65  nd alias.* expre
286b0 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68 20 72  ssions.)^ Each r
286c0 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63 61 6c  esult row is cal
286d0 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61 6c 75  culated by.evalu
286e0 61 74 69 6e 67 20 74 68 65 20 65 78 70 72 65 73  ating the expres
286f0 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73  sions in the res
28700 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
28710 69 73 74 20 77 69 74 68 20 72 65 73 70 65 63 74  ist with respect
28720 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77   to a.single row
28730 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 20 6f   of input data o
28740 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61 74 65  r, for aggregate
28750 20 71 75 65 72 69 65 73 2c 20 77 69 74 68 20 72   queries, with r
28760 65 73 70 65 63 74 20 74 6f 20 61 20 67 72 6f 75  espect to a grou
28770 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e  p.of rows...<ul>
28780 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  .  <li><p>^If th
28790 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
287a0 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61  nt is <b>a non-a
287b0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 3c 2f  ggregate query</
287c0 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61  b>, then .    ea
287d0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
287e0 20 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72   the result expr
287f0 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73 20 65  ession list is e
28800 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
28810 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74 68 65  h row in.    the
28820 20 64 61 74 61 73 65 74 20 66 69 6c 74 65 72 65   dataset filtere
28830 64 20 62 79 20 74 68 65 20 57 48 45 52 45 20 63  d by the WHERE c
28840 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  lause...  <li><p
28850 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20  >^If the SELECT 
28860 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e  statement is <b>
28870 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
28880 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f  ry without a GRO
28890 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c  UP.    BY</b> cl
288a0 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20  ause, then each 
288b0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
288c0 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
288d0 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20 20 65  lt-set is .    e
288e0 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 61 63  valuated once ac
288f0 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72 65 20  ross the entire 
28900 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68 20 6e  dataset. ^Each n
28910 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
28920 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74  ression.    in t
28930 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73  he result-set is
28940 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
28950 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72 69  for an arbitrari
28960 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20  ly selected row 
28970 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74 61 73  of.    the datas
28980 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20 61 72  et. ^The same ar
28990 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
289a0 65 64 20 72 6f 77 20 69 73 20 75 73 65 64 20 66  ed row is used f
289b0 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d  or each.    non-
289c0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
289d0 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20 74 68  sion. ^Or, if th
289e0 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74 61 69  e dataset contai
289f0 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20 74 68  ns zero rows, th
28a00 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e 6f 6e  en .    each non
28a10 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
28a20 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
28a30 65 64 20 61 67 61 69 6e 73 74 20 61 20 72 6f 77  ed against a row
28a40 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20 20 20   consisting.    
28a50 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55 4c 4c  entirely of NULL
28a60 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c 70 3e   values...   <p>
28a70 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20  ^The single row 
28a80 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 64 61  of result-set da
28a90 74 61 20 63 72 65 61 74 65 64 20 62 79 20 65 76  ta created by ev
28aa0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 67 67  aluating the agg
28ab0 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64 20 6e  regate.    and n
28ac0 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
28ad0 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20  ressions in the 
28ae0 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72 6d 73  result-set forms
28af0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
28b00 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74 65 20  n.    aggregate 
28b10 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20  query without a 
28b20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e  GROUP BY clause.
28b30 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65 20 71   ^An aggregate q
28b40 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 0a 20  uery without a. 
28b50 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
28b60 73 65 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  se always return
28b70 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 72 6f  s exactly one ro
28b80 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65 6e 20  w of data, even 
28b90 69 66 20 74 68 65 72 65 20 61 72 65 0a 20 20 20  if there are.   
28ba0 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20 69 6e   zero rows of in
28bb0 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c 6c 69  put data...  <li
28bc0 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53 45 4c  ><p>^(If the SEL
28bd0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
28be0 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65   <b>an aggregate
28bf0 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47 52   query with a GR
28c00 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63  OUP.    BY</b> c
28c10 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68  lause, then each
28c20 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
28c30 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73  ons specified as
28c40 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20 20 20   part of the.   
28c50 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
28c60 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f   is evaluated fo
28c70 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  r each row of th
28c80 65 20 64 61 74 61 73 65 74 2e 20 45 61 63 68 20  e dataset. Each 
28c90 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65 6e 20  row.    is then 
28ca0 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 22 67  assigned to a "g
28cb0 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e 20 74  roup" based on t
28cc0 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f 77 73  he results; rows
28cd0 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20 20 74   for which.    t
28ce0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76  he results of ev
28cf0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47 52 4f  aluating the GRO
28d00 55 50 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  UP BY expression
28d10 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 67  s are the same g
28d20 65 74 0a 20 20 20 20 61 73 73 69 67 6e 65 64 20  et.    assigned 
28d30 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72 6f 75  to the same grou
28d40 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75  p.)^ ^For the pu
28d50 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75 70 69  rposes of groupi
28d60 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20  ng rows, NULL . 
28d70 20 20 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f     values are co
28d80 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 2e 20  nsidered equal. 
28d90 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c 65 73  ^The usual rules
28da0 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c   for [collation|
28db0 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20 20 20  selecting a.    
28dc0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
28dd0 63 65 5d 20 77 69 74 68 20 77 68 69 63 68 20 74  ce] with which t
28de0 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76  o compare text v
28df0 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68 65 6e  alues apply when
28e00 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20 20 20   evaluating.    
28e10 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
28e20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
28e30 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69  .  ^The expressi
28e40 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f 55 50  ons in the GROUP
28e50 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20 20 64   BY clause.    d
28e60 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68  o <em>not</em> h
28e70 61 76 65 20 74 6f 20 62 65 20 65 78 70 72 65 73  ave to be expres
28e80 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70 65 61  sions that appea
28e90 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  r in the result.
28ea0 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72 65 73   ^The.    expres
28eb0 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50  sions in a GROUP
28ec0 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79 20 6e   BY clause may n
28ed0 6f 74 20 62 65 20 61 67 67 72 65 67 61 74 65 20  ot be aggregate 
28ee0 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20  expressions...  
28ef0 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41 56 49    <p>^(If a HAVI
28f00 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  NG clause is spe
28f10 63 69 66 69 65 64 2c 20 69 74 20 69 73 20 65 76  cified, it is ev
28f20 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72  aluated once for
28f30 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20 20 20   each group .   
28f40 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20 5b 62   of rows as a [b
28f50 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
28f60 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73 75 6c  n]. If the resul
28f70 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  t of evaluating 
28f80 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47 20 63  the.    HAVING c
28f90 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65 2c 20  lause is false, 
28fa0 74 68 65 20 67 72 6f 75 70 20 69 73 20 64 69 73  the group is dis
28fb0 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20 74 68  carded.)^ ^If th
28fc0 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
28fd0 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72 65 67  is.    an aggreg
28fe0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ate expression, 
28ff0 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  it is evaluated 
29000 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20  across all rows 
29010 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49  in the group. ^I
29020 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47 20 63  f.    a HAVING c
29030 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e 2d 61  lause is a non-a
29040 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
29050 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61 6c 75  ion, it is evalu
29060 61 74 65 64 20 77 69 74 68 20 72 65 73 70 65 63  ated with respec
29070 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72 62 69  t.    to an arbi
29080 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64  trarily selected
29090 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 67 72   row from the gr
290a0 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56 49 4e  oup.  ^The HAVIN
290b0 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  G expression may
290c0 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20 76 61  .    refer to va
290d0 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65  lues, even aggre
290e0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20  gate functions, 
290f0 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20  that are not in 
29100 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a  the result.</p>.
29110 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 65 78  .    <p>^Each ex
29120 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
29130 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 74 68  result-set is th
29140 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  en evaluated onc
29150 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 67  e for each.    g
29160 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49  roup of rows. ^I
29170 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
29180 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
29190 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20   expression, it 
291a0 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65  is .    evaluate
291b0 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77  d across all row
291c0 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  s in the group. 
291d0 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69  ^Otherwise, it i
291e0 73 20 65 76 61 6c 75 61 74 65 64 20 61 67 61 69  s evaluated agai
291f0 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67 6c 65  nst.    a single
29200 20 61 72 62 69 74 72 61 72 69 6c 79 20 63 68 6f   arbitrarily cho
29210 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77 69 74  sen row from wit
29220 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e  hin the group. ^
29230 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
29240 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f  .    than one no
29250 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
29260 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
29270 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e 20 61  sult-set, then a
29280 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78 70 72  ll such.    expr
29290 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c  essions are eval
292a0 75 61 74 65 64 20 66 6f 72 20 74 68 65 20 73 61  uated for the sa
292b0 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e  me row...    <p>
292c0 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66 20 69  ^Each group of i
292d0 6e 70 75 74 20 64 61 74 61 73 65 74 20 72 6f 77  nput dataset row
292e0 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20 61 20  s contributes a 
292f0 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20 74 68  single row to th
29300 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20 72 65  e .    set of re
29310 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a  sult rows. ^Subj
29320 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69 6e 67  ect to filtering
29330 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
29340 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a 20 20   the DISTINCT.  
29350 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 20 6e    keyword, the n
29360 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65  umber of rows re
29370 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61 67 67  turned by an agg
29380 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
29390 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59  h a GROUP.    BY
293a0 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20 73   clause is the s
293b0 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ame as the numbe
293c0 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66 20 72  r of groups of r
293d0 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62 79 20  ows produced by 
293e0 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74 68 65  applying.    the
293f0 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20 48 41   GROUP BY and HA
29400 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74 6f 20  VING clauses to 
29410 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70  the filtered inp
29420 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c  ut dataset..</ul
29430 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f  >..<p><b>4. Remo
29440 76 61 6c 20 6f 66 20 64 75 70 6c 69 63 61 74 65  val of duplicate
29450 20 72 6f 77 73 20 28 44 49 53 54 49 4e 43 54 20   rows (DISTINCT 
29460 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e  processing).</b>
29470 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
29480 74 20 64 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e  t distinct</tcl>
29490 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64  .<tcl>hd_keyword
294a0 73 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63  s {DISTINCT}</tc
294b0 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74  l>..<p>^One of t
294c0 68 65 20 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e  he ALL or DISTIN
294d0 43 54 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20  CT keywords may 
294e0 66 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c 45 43  follow the SELEC
294f0 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 61 20 0a  T keyword in a .
29500 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
29510 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65  atement. ^If the
29520 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69   simple SELECT i
29530 73 20 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20  s a SELECT ALL, 
29540 74 68 65 6e 20 74 68 65 0a 65 6e 74 69 72 65 20  then the.entire 
29550 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
29560 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20  ws are returned 
29570 62 79 20 74 68 65 20 53 45 4c 45 43 54 2e 20 5e  by the SELECT. ^
29580 49 66 20 6e 65 69 74 68 65 72 20 41 4c 4c 20 6f  If neither ALL o
29590 72 0a 44 49 53 54 49 4e 43 54 20 61 72 65 20 70  r.DISTINCT are p
295a0 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
295b0 20 62 65 68 61 76 69 6f 72 20 69 73 20 61 73 20   behavior is as 
295c0 69 66 20 41 4c 4c 20 77 65 72 65 20 73 70 65 63  if ALL were spec
295d0 69 66 69 65 64 2e 20 0a 5e 49 66 20 74 68 65 20  ified. .^If the 
295e0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73  simple SELECT is
295f0 20 61 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e   a SELECT DISTIN
29600 43 54 2c 20 74 68 65 6e 20 64 75 70 6c 69 63 61  CT, then duplica
29610 74 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f  te rows are remo
29620 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 73 65 74  ved.from the set
29630 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
29640 62 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 74  before it is ret
29650 75 72 6e 65 64 2e 20 5e 46 6f 72 20 74 68 65 20  urned. ^For the 
29660 70 75 72 70 6f 73 65 73 20 6f 66 0a 64 65 74 65  purposes of.dete
29670 63 74 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20  cting duplicate 
29680 72 6f 77 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76  rows, two NULL v
29690 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
296a0 65 72 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  ered to be equal
296b0 2e 20 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20 72 75  . ^The.normal ru
296c0 6c 65 73 20 66 6f 72 20 73 65 6c 65 63 74 69 6e  les for selectin
296d0 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  g a collation se
296e0 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72  quence to compar
296f0 65 20 74 65 78 74 20 76 61 6c 75 65 73 20 77 69  e text values wi
29700 74 68 0a 61 70 70 6c 79 2e 0a 0a 3c 74 63 6c 3e  th.apply...<tcl>
29710 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d  .hd_fragment com
29720 70 6f 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20  pound {compound 
29730 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e  select} {compoun
29740 64 20 71 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75  d query} {compou
29750 6e 64 20 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70  nd SELECT} {comp
29760 6f 75 6e 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f  ound SELECTs}.</
29770 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e  tcl>.<h3>Compoun
29780 64 20 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65  d Select Stateme
29790 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f  nts</h3>..<p>Two
297a0 20 6f 72 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65   or more [simple
297b0 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65   SELECT] stateme
297c0 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65  nts may be conne
297d0 63 74 65 64 20 74 6f 67 65 74 68 65 72 20 74 6f  cted together to
297e0 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64   form.a compound
297f0 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20 74 68   SELECT using th
29800 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41  e UNION, UNION A
29810 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72  LL, INTERSECT or
29820 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
29830 2c 0a 61 73 20 73 68 6f 77 6e 20 62 79 20 74 68  ,.as shown by th
29840 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67  e following diag
29850 72 61 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75  ram:..<tcl>.Recu
29860 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
29870 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65  am compound-sele
29880 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ct-stmt.</tcl>..
29890 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  <p>^In a compoun
298a0 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68  d SELECT, all th
298b0 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  e constituent SE
298c0 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74 75 72  LECTs must retur
298d0 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62  n the same .numb
298e0 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c  er of result col
298f0 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f  umns. ^As the co
29900 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f  mponents of a co
29910 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75  mpound SELECT mu
29920 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c  st.be simple SEL
29930 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  ECT statements, 
29940 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  they may not con
29950 74 61 69 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20  tain [ORDER BY] 
29960 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73  or [LIMIT] claus
29970 65 73 2e 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20  es..^[ORDER BY] 
29980 61 6e 64 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75  and [LIMIT] clau
29990 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63  ses may only occ
299a0 75 72 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ur at the end of
299b0 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70   the entire comp
299c0 6f 75 6e 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64  ound.SELECT, and
299d0 20 74 68 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68   then only if th
299e0 65 20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20  e final element 
299f0 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  of the compound 
29a00 69 73 20 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53  is not a [VALUES
29a10 5d 20 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41  ] clause...<p>^A
29a20 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
29a30 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 55   created using U
29a40 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f  NION ALL operato
29a50 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68  r returns all th
29a60 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20  e rows.from the 
29a70 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65  SELECT to the le
29a80 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20  ft of the UNION 
29a90 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e  ALL operator, an
29aa0 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66  d all the rows.f
29ab0 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74  rom the SELECT t
29ac0 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 69  o the right of i
29ad0 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70  t. ^The UNION op
29ae0 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65  erator works the
29af0 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49   same way as.UNI
29b00 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74  ON ALL, except t
29b10 68 61 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f  hat duplicate ro
29b20 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
29b30 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65  rom the final re
29b40 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49  sult set..^The I
29b50 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f  NTERSECT operato
29b60 72 20 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e  r returns the in
29b70 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68  tersection of th
29b80 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
29b90 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20   left and.right 
29ba0 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45  SELECTs.  ^The E
29bb0 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72  XCEPT operator r
29bc0 65 74 75 72 6e 73 20 74 68 65 20 73 75 62 73 65  eturns the subse
29bd0 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  t of rows return
29be0 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53  ed by the.left S
29bf0 45 4c 45 43 54 20 74 68 61 74 20 61 72 65 20 6e  ELECT that are n
29c00 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64  ot also returned
29c10 20 62 79 20 74 68 65 20 72 69 67 68 74 2d 68 61   by the right-ha
29c20 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c  nd SELECT. ^Dupl
29c30 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72  icate.rows are r
29c40 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
29c50 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52  results of INTER
29c60 53 45 43 54 20 61 6e 64 20 45 58 43 45 50 54 20  SECT and EXCEPT 
29c70 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65  operators before
29c80 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20   the.result set 
29c90 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70  is returned...<p
29ca0 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73  >^For the purpos
29cb0 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e  es of determinin
29cc0 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  g duplicate rows
29cd0 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73   for the results
29ce0 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c   of compound.SEL
29cf0 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e  ECT operators, N
29d00 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
29d10 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 20  onsidered equal 
29d20 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61  to other NULL va
29d30 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63  lues and.distinc
29d40 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e  t from all non-N
29d50 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65  ULL values. ^The
29d60 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
29d70 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70  nce used to comp
29d80 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61  are .two text va
29d90 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e  lues is determin
29da0 65 64 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c  ed as if the col
29db0 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74  umns of the left
29dc0 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a   and right-hand.
29dd0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
29de0 73 20 77 65 72 65 20 74 68 65 20 6c 65 66 74 20  s were the left 
29df0 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f  and right-hand o
29e00 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65  perands of the e
29e10 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74  quals (=).operat
29e20 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  or, except that 
29e30 67 72 65 61 74 65 72 20 70 72 65 63 65 64 65 6e  greater preceden
29e40 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e  ce is not assign
29e50 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f  ed to a collatio
29e60 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63  n .sequence spec
29e70 69 66 69 65 64 20 77 69 74 68 20 74 68 65 20 70  ified with the p
29e80 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f  ostfix COLLATE o
29e90 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66  perator. ^No aff
29ea0 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61  inity.transforma
29eb0 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65  tions are applie
29ec0 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20  d to any values 
29ed0 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72  when comparing r
29ee0 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66 20 61  ows as part of a
29ef0 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  .compound SELECT
29f00 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68  . ..<p>^(When th
29f10 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70  ree or more simp
29f20 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65 20 63  le SELECTs are c
29f30 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20  onnected into a 
29f40 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
29f50 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d  .they group from
29f60 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20   left to right. 
29f70 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
29f80 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20  if "A", "B" and 
29f90 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70  "C" are all.simp
29fa0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
29fb0 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70  ents, (A op B op
29fc0 20 43 29 20 69 73 20 70 72 6f 63 65 73 73 65 64   C) is processed
29fd0 20 61 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70   as ((A op B) op
29fe0 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74   C).)^..</p>..<t
29ff0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f  cl>hd_fragment o
2a000 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79  rderby {order by
2a010 7d 20 7b 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63  } {ORDER BY}</tc
2a020 6c 3e 0a 3c 68 33 3e 54 68 65 20 4f 52 44 45 52  l>.<h3>The ORDER
2a030 20 42 59 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a   BY clause</h3>.
2a040 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20  .<p>If a SELECT 
2a050 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72  statement that r
2a060 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e  eturns more than
2a070 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f   one row does no
2a080 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20  t have an.ORDER 
2a090 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f  BY clause, the o
2a0a0 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68  rder in which th
2a0b0 65 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  e rows are retur
2a0c0 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
2a0d0 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43  ..Or, if a SELEC
2a0e0 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  T statement does
2a0f0 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
2a100 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
2a110 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65  he list of.expre
2a120 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20  ssions attached 
2a130 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  to the ORDER BY 
2a140 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72  determine the or
2a150 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
2a160 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 74  s.are returned t
2a170 6f 20 74 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e  o the user...<p>
2a180 0a 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20  .In a [compound 
2a190 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
2a1a0 74 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74  t, only the last
2a1b0 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b   or right-most [
2a1c0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d  simple SELECT].m
2a1d0 61 79 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52  ay have an ORDER
2a1e0 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 61 74   BY clause. That
2a1f0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2a200 20 77 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f   will apply acro
2a210 73 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20  ss all elements 
2a220 6f 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  of.the compound.
2a230 20 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f   If the right-mo
2a240 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
2a250 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2a260 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d 20  ] is a [VALUES] 
2a270 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f 20  clause,.then no 
2a280 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
2a290 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68  is allowed on th
2a2a0 61 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a  at statement....
2a2b0 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69 72  <p>^Rows are fir
2a2c0 73 74 20 73 6f 72 74 65 64 20 62 61 73 65 64 20  st sorted based 
2a2d0 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
2a2e0 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f.evaluating the
2a2f0 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65   left-most expre
2a300 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44  ssion in the ORD
2a310 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e  ER BY list, then
2a320 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e   ties are broken
2a330 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74  .by evaluating t
2a340 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d  he second left-m
2a350 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ost expression a
2a360 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72  nd so on. The or
2a370 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f  der in which.two
2a380 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
2a390 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70  all ORDER BY exp
2a3a0 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74  ressions evaluat
2a3b0 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65  e to equal value
2a3c0 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69  s are.returned i
2a3d0 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61  s undefined. ^Ea
2a3e0 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ch ORDER BY expr
2a3f0 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70  ession may be op
2a400 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
2a410 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  d.by one of the 
2a420 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d  keywords ASC (sm
2a430 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65  aller values are
2a440 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29   returned first)
2a450 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65 72   or DESC (larger
2a460 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75  .values are retu
2a470 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66  rned first). ^If
2a480 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72 20   neither ASC or 
2a490 44 45 53 43 20 61 72 65 20 73 70 65 63 69 66 69  DESC are specifi
2a4a0 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72  ed, rows.are sor
2a4b0 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ted in ascending
2a4c0 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73   (smaller values
2a4d0 20 66 69 72 73 74 29 20 6f 72 64 65 72 20 62 79   first) order by
2a4e0 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61   default...<p>Ea
2a4f0 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ch ORDER BY expr
2a500 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73  ession is proces
2a510 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  sed as follows:<
2a520 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ol>.<li><p
2a530 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
2a540 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2a550 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67  a constant integ
2a560 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78  er K then the.ex
2a570 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73  pression is cons
2a580 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20  idered an alias 
2a590 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c  for the K-th col
2a5a0 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
2a5b0 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61  t set.(columns a
2a5c0 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d  re numbered from
2a5d0 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 73   left to right s
2a5e0 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e  tarting with 1).
2a5f0 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65  ..<li><p>^If the
2a600 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2a610 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74  sion is an ident
2a620 69 66 69 65 72 20 74 68 61 74 20 63 6f 72 72 65  ifier that corre
2a630 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c  sponds to.the al
2a640 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68  ias of one of th
2a650 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  e output columns
2a660 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65  , then the expre
2a670 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65  ssion is conside
2a680 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72  red.an alias for
2a690 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c   that column...<
2a6a0 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
2a6b0 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
2a6c0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2a6d0 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65 73  any other expres
2a6e0 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61  sion, it .is eva
2a6f0 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72  luated and the r
2a700 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73  eturned value us
2a710 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20  ed to order the 
2a720 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66  output rows. ^If
2a730 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74  .the SELECT stat
2a740 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c  ement is a simpl
2a750 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61  e SELECT, then a
2a760 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63  n ORDER BY may c
2a770 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74  ontain any.arbit
2a780 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73  rary expressions
2a790 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74  . ^However, if t
2a7a0 68 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 63  he SELECT is a c
2a7b0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20  ompound SELECT, 
2a7c0 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78  then.ORDER BY ex
2a7d0 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61  pressions that a
2a7e0 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74  re not aliases t
2a7f0 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  o output columns
2a800 20 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c 79   must be exactly
2a810 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20  .the same as an 
2a820 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20  expression used 
2a830 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c  as an output col
2a840 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e  umn..</ol>..<p>^
2a850 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
2a860 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73   of sorting rows
2a870 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  , values are com
2a880 70 61 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d  pared in the sam
2a890 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f  e way.as for [co
2a8a0 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73  mparison express
2a8b0 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61  ions]. The colla
2a8c0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73  tion sequence us
2a8d0 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77  ed to compare.tw
2a8e0 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20 69 73  o text values is
2a8f0 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66   determined as f
2a900 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20  ollows:..<ol>.  
2a910 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f  <li><p>^If the O
2a920 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2a930 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20 61  on is assigned a
2a940 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
2a950 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20  nce using.  the 
2a960 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45  postfix [COLLATE
2a970 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e   operator], then
2a980 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
2a990 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2a9a0 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c  e is.  used..  <
2a9b0 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
2a9c0 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
2a9d0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2a9e0 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65  an alias to an e
2a9f0 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74  xpression.  that
2aa00 20 68 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e   has been assign
2aa10 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ed a collation s
2aa20 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68  equence using th
2aa30 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f  e postfix .  [CO
2aa40 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c  LLATE operator],
2aa50 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74   then the collat
2aa60 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73  ion sequence ass
2aa70 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69  igned to the ali
2aa80 61 73 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f  ased.  expressio
2aa90 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69  n is used..  <li
2aaa0 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
2aab0 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
2aac0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
2aad0 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69  column or an ali
2aae0 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65  as of.  an expre
2aaf0 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20  ssion that is a 
2ab00 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65  column, then the
2ab10 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
2ab20 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a  on sequence for.
2ab30 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20    the column is 
2ab40 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e  used. .  <li><p>
2ab50 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
2ab60 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69  [BINARY] collati
2ab70 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  on sequence is u
2ab80 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49  sed..</ol>..<p>I
2ab90 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
2aba0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
2abb0 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
2abc0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61  pressions are ha
2abd0 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73  ndled.as aliases
2abe0 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20   for one of the 
2abf0 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
2ac00 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a  f the compound..
2ac10 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59  ^(If an ORDER BY
2ac20 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e   expression is n
2ac30 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c  ot an integer al
2ac40 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65  ias, then SQLite
2ac50 20 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65   searches.the le
2ac60 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69  ft-most SELECT i
2ac70 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66  n the compound f
2ac80 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2ac90 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73 20  mn that matches 
2aca0 65 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e  either.the secon
2acb0 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73  d or third rules
2acc0 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74   above. If a mat
2acd0 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
2ace0 20 73 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e   search stops an
2acf0 64 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d.the expression
2ad00 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61   is handled as a
2ad10 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
2ad20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68  result column th
2ad30 61 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d  at it has been.m
2ad40 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20  atched against. 
2ad50 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e  Otherwise, the n
2ad60 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68  ext SELECT to th
2ad70 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65 64  e right is tried
2ad80 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e  , and so on.)^.^
2ad90 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65  If no matching e
2ada0 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
2adb0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65   found in the re
2adc0 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  sult columns of 
2add0 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20  any.constituent 
2ade0 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e  SELECT, it is an
2adf0 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65   error. ^Each te
2ae00 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20  rm of the ORDER 
2ae10 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f  BY clause is.pro
2ae20 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c  cessed separatel
2ae30 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74  y and may be mat
2ae40 63 68 65 64 20 61 67 61 69 6e 73 74 20 72 65 73  ched against res
2ae50 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d  ult columns from
2ae60 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43   different.SELEC
2ae70 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  T statements in 
2ae80 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70  the compound.</p
2ae90 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
2aea0 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65 74 20  ent limitoffset 
2aeb0 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54 7d  {LIMIT} {OFFSET}
2aec0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c  </tcl>.<h3>The L
2aed0 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68 33 3e  IMIT clause</h3>
2aee0 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d 49 54 20 63  ..<p>The LIMIT c
2aef0 6c 61 75 73 65 20 69 73 20 75 73 65 64 20 74 6f  lause is used to
2af00 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72 20   place an upper 
2af10 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d  bound on the num
2af20 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75  ber of rows.retu
2af30 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e 74 69  rned by the enti
2af40 72 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  re SELECT statem
2af50 65 6e 74 2e 0a 0a 3c 70 3e 49 6e 20 61 20 5b 63  ent...<p>In a [c
2af60 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c  ompound SELECT],
2af70 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74 20 6f   only the.last o
2af80 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69  r right-most [si
2af90 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d 61 79  mple SELECT] may
2afa0 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d 49 54   contain a LIMIT
2afb0 20 63 6c 61 75 73 65 2e 20 20 0a 49 6e 20 61 20   clause.  .In a 
2afc0 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2afd0 5d 2c 20 0a 74 68 65 20 4c 49 4d 49 54 20 63 6c  ], .the LIMIT cl
2afe0 61 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20  ause applies to 
2aff0 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f  the entire compo
2b000 75 6e 64 2c 20 6e 6f 74 20 6a 75 73 74 20 74 68  und, not just th
2b010 65 20 66 69 6e 61 6c 20 53 45 4c 45 43 54 2e 0a  e final SELECT..
2b020 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73  If the right-mos
2b030 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  t [simple SELECT
2b040 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53 20 63  ] is a [VALUES c
2b050 6c 61 75 73 65 5d 20 74 68 65 6e 20 6e 6f 20 4c  lause] then no L
2b060 49 4d 49 54 20 63 6c 61 75 73 65 0a 69 73 20 61  IMIT clause.is a
2b070 6c 6c 6f 77 65 64 2e 0a 0a 3c 70 3e 5e 41 6e 79  llowed...<p>^Any
2b080 20 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69   scalar expressi
2b090 6f 6e 20 6d 61 79 20 62 65 20 75 73 65 64 20 69  on may be used i
2b0a0 6e 20 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c 61  n the .LIMIT cla
2b0b0 75 73 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73 20  use, so long as 
2b0c0 69 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  it evaluates to 
2b0d0 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20  an integer or a 
2b0e0 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
2b0f0 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e.losslessly con
2b100 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
2b110 65 67 65 72 2e 20 5e 49 66 20 74 68 65 20 65 78  eger. ^If the ex
2b120 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2b130 65 73 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76 61  es to a NULL .va
2b140 6c 75 65 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  lue or any other
2b150 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e   value that cann
2b160 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
2b170 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
2b180 20 69 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72 72   integer, an.err
2b190 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  or is returned. 
2b1a0 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78  ^If the LIMIT ex
2b1b0 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2b1c0 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65  es to a negative
2b1d0 20 76 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68 65   value,.then the
2b1e0 72 65 20 69 73 20 6e 6f 20 75 70 70 65 72 20 62  re is no upper b
2b1f0 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62  ound on the numb
2b200 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72  er of rows retur
2b210 6e 65 64 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ned. ^Otherwise,
2b220 20 74 68 65 0a 53 45 4c 45 43 54 20 72 65 74 75   the.SELECT retu
2b230 72 6e 73 20 74 68 65 20 66 69 72 73 74 20 4e 20  rns the first N 
2b240 72 6f 77 73 20 6f 66 20 69 74 73 20 72 65 73 75  rows of its resu
2b250 6c 74 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68 65  lt set only, whe
2b260 72 65 20 4e 20 69 73 20 74 68 65 20 76 61 6c 75  re N is the valu
2b270 65 0a 74 68 61 74 20 74 68 65 20 4c 49 4d 49 54  e.that the LIMIT
2b280 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
2b290 75 61 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20 69  uates to. ^Or, i
2b2a0 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f the SELECT sta
2b2b0 74 65 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65 74  tement would.ret
2b2c0 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e 20  urn less than N 
2b2d0 72 6f 77 73 20 77 69 74 68 6f 75 74 20 61 20 4c  rows without a L
2b2e0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
2b2f0 6e 20 74 68 65 20 65 6e 74 69 72 65 20 72 65 73  n the entire res
2b300 75 6c 74 20 73 65 74 20 69 73 0a 72 65 74 75 72  ult set is.retur
2b310 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 65  ned. ..<p>^The e
2b320 78 70 72 65 73 73 69 6f 6e 20 61 74 74 61 63 68  xpression attach
2b330 65 64 20 74 6f 20 74 68 65 20 6f 70 74 69 6f 6e  ed to the option
2b340 61 6c 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  al OFFSET clause
2b350 20 74 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f 77   that may follow
2b360 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20   a.LIMIT clause 
2b370 6d 75 73 74 20 61 6c 73 6f 20 65 76 61 6c 75 61  must also evalua
2b380 74 65 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  te to an integer
2b390 2c 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61  , or a value tha
2b3a0 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73  t can be.lossles
2b3b0 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
2b3c0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66   an integer. ^If
2b3d0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 68   an expression h
2b3e0 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61  as an OFFSET cla
2b3f0 75 73 65 2c 0a 74 68 65 6e 20 74 68 65 20 66 69  use,.then the fi
2b400 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20 6f  rst M rows are o
2b410 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
2b420 72 65 73 75 6c 74 20 73 65 74 20 72 65 74 75 72  result set retur
2b430 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
2b440 54 0a 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  T.statement and 
2b450 74 68 65 20 6e 65 78 74 20 4e 20 72 6f 77 73 20  the next N rows 
2b460 61 72 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68  are returned, wh
2b470 65 72 65 20 4d 20 61 6e 64 20 4e 20 61 72 65 20  ere M and N are 
2b480 74 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a  the values that.
2b490 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 4c  the OFFSET and L
2b4a0 49 4d 49 54 20 63 6c 61 75 73 65 73 20 65 76 61  IMIT clauses eva
2b4b0 6c 75 61 74 65 20 74 6f 2c 20 72 65 73 70 65 63  luate to, respec
2b4c0 74 69 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66 20  tively. ^Or, if 
2b4d0 74 68 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c 64  the SELECT.would
2b4e0 20 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61   return less tha
2b4f0 6e 20 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69 74  n M+N rows if it
2b500 20 64 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20   did not have a 
2b510 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
2b520 65 6e 20 74 68 65 0a 66 69 72 73 74 20 4d 20 72  en the.first M r
2b530 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65 64 20  ows are skipped 
2b540 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e  and the remainin
2b550 67 20 72 6f 77 73 20 28 69 66 20 61 6e 79 29 20  g rows (if any) 
2b560 61 72 65 20 72 65 74 75 72 6e 65 64 2e 20 5e 49  are returned. ^I
2b570 66 20 74 68 65 0a 4f 46 46 53 45 54 20 63 6c 61  f the.OFFSET cla
2b580 75 73 65 20 65 76 61 6c 75 61 74 65 73 20 74 6f  use evaluates to
2b590 20 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75   a negative valu
2b5a0 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  e, the results a
2b5b0 72 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  re the same as i
2b5c0 66 20 69 74 0a 68 61 64 20 65 76 61 6c 75 61 74  f it.had evaluat
2b5d0 65 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e  ed to zero...<p>
2b5e0 5e 49 6e 73 74 65 61 64 20 6f 66 20 61 20 73 65  ^Instead of a se
2b5f0 70 61 72 61 74 65 20 4f 46 46 53 45 54 20 63 6c  parate OFFSET cl
2b600 61 75 73 65 2c 20 74 68 65 20 4c 49 4d 49 54 20  ause, the LIMIT 
2b610 63 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63 69  clause may speci
2b620 66 79 20 74 77 6f 0a 73 63 61 6c 61 72 20 65 78  fy two.scalar ex
2b630 70 72 65 73 73 69 6f 6e 73 20 73 65 70 61 72 61  pressions separa
2b640 74 65 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e 20  ted by a comma. 
2b650 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74  ^In this case, t
2b660 68 65 20 66 69 72 73 74 20 65 78 70 72 65 73 73  he first express
2b670 69 6f 6e 0a 69 73 20 75 73 65 64 20 61 73 20 74  ion.is used as t
2b680 68 65 20 4f 46 46 53 45 54 20 65 78 70 72 65 73  he OFFSET expres
2b690 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 65 63  sion and the sec
2b6a0 6f 6e 64 20 61 73 20 74 68 65 20 4c 49 4d 49 54  ond as the LIMIT
2b6b0 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68 69   expression..Thi
2b6c0 73 20 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e 74  s is counter-int
2b6d0 75 69 74 69 76 65 2c 20 61 73 20 77 68 65 6e 20  uitive, as when 
2b6e0 75 73 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54  using the OFFSET
2b6f0 20 63 6c 61 75 73 65 20 74 68 65 20 73 65 63 6f   clause the seco
2b700 6e 64 20 6f 66 0a 74 68 65 20 74 77 6f 20 65 78  nd of.the two ex
2b710 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 65  pressions is the
2b720 20 4f 46 46 53 45 54 20 61 6e 64 20 74 68 65 20   OFFSET and the 
2b730 66 69 72 73 74 20 74 68 65 20 4c 49 4d 49 54 2e  first the LIMIT.
2b740 20 0a 54 68 69 73 20 72 65 76 65 72 73 61 6c 20   .This reversal 
2b750 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 61 6e  of the offset an
2b760 64 20 6c 69 6d 69 74 20 69 73 20 69 6e 74 65 6e  d limit is inten
2b770 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69  tional.- it maxi
2b780 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62 69 6c  mizes compatibil
2b790 69 74 79 20 77 69 74 68 20 6f 74 68 65 72 20 53  ity with other S
2b7a0 51 4c 20 64 61 74 61 62 61 73 65 20 73 79 73 74  QL database syst
2b7b0 65 6d 73 2e 0a 48 6f 77 65 76 65 72 2c 20 74 6f  ems..However, to
2b7c0 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
2b7d0 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72  , programmers ar
2b7e0 65 20 73 74 72 6f 6e 67 6c 79 20 65 6e 63 6f 75  e strongly encou
2b7f0 72 61 67 65 64 20 74 6f 20 75 73 65 0a 74 68 65  raged to use.the
2b800 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 4c 49 4d   form of the LIM
2b810 49 54 20 63 6c 61 75 73 65 20 74 68 61 74 20 75  IT clause that u
2b820 73 65 73 20 74 68 65 20 22 4f 46 46 53 45 54 22  ses the "OFFSET"
2b830 20 6b 65 79 77 6f 72 64 20 61 6e 64 20 61 76 6f   keyword and avo
2b840 69 64 0a 75 73 69 6e 67 20 61 20 4c 49 4d 49 54  id.using a LIMIT
2b850 20 63 6c 61 75 73 65 20 77 69 74 68 20 61 20 63   clause with a c
2b860 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20 6f  omma-separated o
2b870 66 66 73 65 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ffset...<tcl>hd_
2b880 66 72 61 67 6d 65 6e 74 20 76 61 6c 75 65 73 20  fragment values 
2b890 7b 56 41 4c 55 45 53 20 63 6c 61 75 73 65 7d 20  {VALUES clause} 
2b8a0 56 41 4c 55 45 53 3c 2f 74 63 6c 3e 0a 3c 68 33  VALUES</tcl>.<h3
2b8b0 3e 54 68 65 20 56 41 4c 55 45 53 20 63 6c 61 75  >The VALUES clau
2b8c0 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  se</h3>..<p>The 
2b8d0 70 68 72 61 73 65 20 22 56 41 4c 55 45 53 28 3c  phrase "VALUES(<
2b8e0 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 29  i>expr-list</i>)
2b8f0 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  " means the same
2b900 20 74 68 69 6e 67 0a 61 73 20 22 53 45 4c 45 43   thing.as "SELEC
2b910 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f  T <i>expr-list</
2b920 69 3e 22 2e 20 20 54 68 65 20 70 68 72 61 73 65  i>".  The phrase
2b930 0a 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70 72  ."VALUES(<i>expr
2b940 2d 6c 69 73 74 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e  -list-1</i>),...
2b950 2c 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e  ,(<i>expr-list-N
2b960 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68 65  </i>)" means the
2b970 20 73 61 6d 65 0a 74 68 69 6e 67 20 61 73 20 22   same.thing as "
2b980 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c  SELECT <i>expr-l
2b990 69 73 74 2d 31 3c 2f 69 3e 20 55 4e 49 4f 4e 20  ist-1</i> UNION 
2b9a0 41 4c 4c 20 2e 2e 2e 20 55 4e 49 4f 4e 20 41 4c  ALL ... UNION AL
2b9b0 4c 0a 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72  L.SELECT <i>expr
2b9c0 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 22 2e 20 20 54  -list-N</i>".  T
2b9d0 68 65 72 65 20 69 73 20 6e 6f 20 61 64 76 61 6e  here is no advan
2b9e0 74 61 67 65 20 74 6f 20 75 73 69 6e 67 20 6f 6e  tage to using on
2b9f0 65 20 66 6f 72 6d 0a 6f 76 65 72 20 74 68 65 20  e form.over the 
2ba00 6f 74 68 65 72 2e 20 20 42 6f 74 68 20 66 6f 72  other.  Both for
2ba10 6d 73 20 79 69 65 6c 64 20 74 68 65 20 73 61 6d  ms yield the sam
2ba20 65 20 72 65 73 75 6c 74 20 61 6e 64 20 62 6f 74  e result and bot
2ba30 68 20 66 6f 72 6d 73 20 75 73 65 0a 74 68 65 20  h forms use.the 
2ba40 73 61 6d 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d  same amount of m
2ba50 65 6d 6f 72 79 20 61 6e 64 20 70 72 6f 63 65 73  emory and proces
2ba60 73 69 6e 67 20 74 69 6d 65 2e 0a 0a 3c 70 3e 54  sing time...<p>T
2ba70 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 72 65  here are some re
2ba80 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68  strictions on th
2ba90 65 20 75 73 65 20 6f 66 20 61 20 56 41 4c 55 45  e use of a VALUE
2baa0 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 61 72  S clause that ar
2bab0 65 0a 6e 6f 74 20 73 68 6f 77 6e 20 6f 6e 20 74  e.not shown on t
2bac0 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  he syntax diagra
2bad0 6d 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  ms:..<ul>.<li><p
2bae0 3e 0a 41 20 56 41 4c 55 45 53 20 63 6c 61 75 73  >.A VALUES claus
2baf0 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c  e cannot be foll
2bb00 6f 77 65 64 20 62 79 20 5b 4f 52 44 45 52 20 42  owed by [ORDER B
2bb10 59 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d 2e 0a 0a  Y] or [LIMIT]...
2bb20 3c 6c 69 3e 3c 70 3e 0a 41 20 56 41 4c 55 45 53  <li><p>.A VALUES
2bb30 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62   clause cannot b
2bb40 65 20 75 73 65 64 20 74 6f 67 65 74 68 65 72 20  e used together 
2bb50 77 69 74 68 20 61 20 5b 57 49 54 48 5d 20 63 6c  with a [WITH] cl
2bb60 61 75 73 65 20 69 6e 20 61 0a 5b 73 69 6d 70 6c  ause in a.[simpl
2bb70 65 20 53 45 4c 45 43 54 5d 2e 0a 3c 2f 75 6c 3e  e SELECT]..</ul>
2bb80 0a 0a 0a 3c 68 33 3e 54 68 65 20 57 49 54 48 20  ...<h3>The WITH 
2bb90 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e  Clause</h3>..<p>
2bba0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2bbb0 73 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61  s may be optiona
2bbc0 6c 6c 79 20 70 72 65 63 65 64 65 64 20 62 79 20  lly preceded by 
2bbd0 61 20 73 69 6e 67 6c 65 0a 5b 57 49 54 48 20 63  a single.[WITH c
2bbe0 6c 61 75 73 65 5d 20 74 68 61 74 20 64 65 66 69  lause] that defi
2bbf0 6e 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  nes one or more 
2bc00 5b 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  [common table ex
2bc10 70 72 65 73 73 69 6f 6e 73 5d 0a 66 6f 72 20 75  pressions].for u
2bc20 73 65 20 77 69 74 68 69 6e 20 74 68 65 20 53 45  se within the SE
2bc30 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
2bc40 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
2bc50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc90 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 55  ######.Section U
2bca0 50 44 41 54 45 20 75 70 64 61 74 65 20 7b 55 50  PDATE update {UP
2bcb0 44 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a  DATE *UPDATEs}..
2bcc0 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
2bcd0 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74  iagram update-st
2bce0 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41  mt.</tcl>..<p>^A
2bcf0 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
2bd00 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 6d 6f  nt is used to mo
2bd10 64 69 66 79 20 61 20 73 75 62 73 65 74 20 6f 66  dify a subset of
2bd20 20 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72   the values stor
2bd30 65 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d  ed in .zero or m
2bd40 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20  ore rows of the 
2bd50 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
2bd60 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65  dentified by the
2bd70 20 0a 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74   .<i>qualified-t
2bd80 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70  able-name</i> sp
2bd90 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
2bda0 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
2bdb0 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66  atement...<p>^If
2bdc0 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
2bdd0 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68  ement does not h
2bde0 61 76 65 20 61 20 57 48 45 52 45 20 63 6c 61 75  ave a WHERE clau
2bdf0 73 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20  se, all rows in 
2be00 74 68 65 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f  the.table are mo
2be10 64 69 66 69 65 64 20 62 79 20 74 68 65 20 55 50  dified by the UP
2be20 44 41 54 45 2e 20 5e 4f 74 68 65 72 77 69 73 65  DATE. ^Otherwise
2be30 2c 20 74 68 65 20 55 50 44 41 54 45 20 61 66 66  , the UPDATE aff
2be40 65 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a  ects only those.
2be50 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
2be60 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61  he result of eva
2be70 6c 75 61 74 69 6e 67 20 74 68 65 20 57 48 45 52  luating the WHER
2be80 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73  E clause express
2be90 69 6f 6e 20 61 73 20 61 20 0a 5b 62 6f 6f 6c 65  ion as a .[boole
2bea0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f  an expression|bo
2beb0 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
2bec0 20 69 73 20 74 72 75 65 5d 2e 20 5e 49 74 20 69   is true]. ^It i
2bed0 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 69  s not an error i
2bee0 66 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  f the.WHERE clau
2bef0 73 65 20 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c  se does not eval
2bf00 75 61 74 65 20 74 6f 20 74 72 75 65 20 66 6f 72  uate to true for
2bf10 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 20   any row in the 
2bf20 74 61 62 6c 65 20 2d 20 74 68 69 73 20 6a 75 73  table - this jus
2bf30 74 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t.means that the
2bf40 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2bf50 74 20 61 66 66 65 63 74 73 20 7a 65 72 6f 20 72  t affects zero r
2bf60 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64  ows...<p>The mod
2bf70 69 66 69 63 61 74 69 6f 6e 73 20 6d 61 64 65 20  ifications made 
2bf80 74 6f 20 65 61 63 68 20 72 6f 77 20 61 66 66 65  to each row affe
2bf90 63 74 65 64 20 62 79 20 61 6e 20 55 50 44 41 54  cted by an UPDAT
2bfa0 45 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65 0a  E statement are.
2bfb0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
2bfc0 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e  e list of assign
2bfd0 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ments following 
2bfe0 74 68 65 20 53 45 54 20 6b 65 79 77 6f 72 64 2e  the SET keyword.
2bff0 20 45 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74   Each.assignment
2c000 20 73 70 65 63 69 66 69 65 73 20 61 20 63 6f 6c   specifies a col
2c010 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65 20  umn name to the 
2c020 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71 75 61  left of the equa
2c030 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 0a 73 63  ls sign and a.sc
2c040 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20  alar expression 
2c050 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e 46  to the right. ^F
2c060 6f 72 20 65 61 63 68 20 61 66 66 65 63 74 65 64  or each affected
2c070 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64 20   row, the named 
2c080 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74 20  columns.are set 
2c090 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f  to the values fo
2c0a0 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e  und by evaluatin
2c0b0 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
2c0c0 69 6e 67 20 73 63 61 6c 61 72 20 0a 65 78 70 72  ing scalar .expr
2c0d0 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73  essions. ^If a s
2c0e0 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  ingle column-nam
2c0f0 65 20 61 70 70 65 61 72 73 20 6d 6f 72 65 20 74  e appears more t
2c100 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65 20  han once in the 
2c110 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65  list of.assignme
2c120 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  nt expressions, 
2c130 61 6c 6c 20 62 75 74 20 74 68 65 20 72 69 67 68  all but the righ
2c140 74 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e 63 65  tmost occurrence
2c150 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f   is ignored. ^Co
2c160 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f  lumns.that do no
2c170 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
2c180 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65  list of assignme
2c190 6e 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e 6d  nts are left unm
2c1a0 6f 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73 63  odified. ^The sc
2c1b0 61 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e 73  alar.expressions
2c1c0 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63 6f   may refer to co
2c1d0 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f 77  lumns of the row
2c1e0 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20   being updated. 
2c1f0 5e 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c  ^In this case al
2c200 6c 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73 73  l.scalar express
2c210 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74  ions are evaluat
2c220 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73  ed before any as
2c230 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61  signments are ma
2c240 64 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74  de...<p>^The opt
2c250 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63  ional conflict-c
2c260 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65  lause allows the
2c270 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74   user to nominat
2c280 65 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e  e a specific.con
2c290 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
2c2a0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
2c2b0 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72  rithm to use dur
2c2c0 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44  ing this one UPD
2c2d0 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66  ATE command..Ref
2c2e0 65 72 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f  er to the sectio
2c2f0 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43  n entitled [ON C
2c300 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
2c310 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
2c320 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69  ion...<h3>Restri
2c330 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45  ctions on UPDATE
2c340 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
2c350 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45  in CREATE TRIGGE
2c360 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66  R</h3>..<p>The f
2c370 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f  ollowing additio
2c380 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72  nal syntax restr
2c390 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f  ictions apply to
2c3a0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2c3b0 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69  ts that.occur wi
2c3c0 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
2c3d0 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47   a [CREATE TRIGG
2c3e0 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ER] statement.  
2c3f0 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
2c400 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61  ^The <i>table-na
2c410 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69 65 64  me</i> specified
2c420 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 55   as part of an U
2c430 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
2c440 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20 74  within.      a t
2c450 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74  rigger body must
2c460 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e   be unqualified.
2c470 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64   ^(In other word
2c480 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69 3e  s, the.      <i>
2c490 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69  database-name</i
2c4a0 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78  ><b>.</b> prefix
2c4b0 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61   on the table na
2c4c0 6d 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  me of the UPDATE
2c4d0 20 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c   is.      not al
2c4e0 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69  lowed within tri
2c4f0 67 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73  ggers.)^ ^Unless
2c500 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68   the table to wh
2c510 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 0a  ich the trigger.
2c520 20 20 20 20 20 20 69 73 20 61 74 74 61 63 68 65        is attache
2c530 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50  d is in the TEMP
2c540 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74   database, the t
2c550 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74  able being updat
2c560 65 64 20 62 79 20 74 68 65 0a 20 20 20 20 20 20  ed by the.      
2c570 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
2c580 6d 75 73 74 20 72 65 73 69 64 65 20 69 6e 20 74  must reside in t
2c590 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
2c5a0 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20   as it. ^If the 
2c5b0 74 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20 77  table.      to w
2c5c0 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
2c5d0 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20   is attached is 
2c5e0 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  in the TEMP data
2c5f0 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  base, then the. 
2c600 20 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64       unqualified
2c610 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
2c620 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  le being updated
2c630 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20   is resolved in 
2c640 74 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20 20  the same way.   
2c650 20 20 20 61 73 20 69 74 20 69 73 20 66 6f 72 20     as it is for 
2c660 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74  a top-level stat
2c670 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68  ement (by search
2c680 69 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45  ing first the TE
2c690 4d 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20 20  MP database,.   
2c6a0 20 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e     then the main
2c6b0 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20   database, then 
2c6c0 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61  any other databa
2c6d0 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72  ses in the order
2c6e0 20 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 20   they were.     
2c6f0 20 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c   attached)...  <
2c700 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  li><p>^The INDEX
2c710 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
2c720 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
2c730 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e  e not allowed on
2c740 20 55 50 44 41 54 45 0a 20 20 20 20 20 20 73 74   UPDATE.      st
2c750 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
2c760 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20  triggers.</p>.. 
2c770 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d   <li><p>^The LIM
2c780 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  IT and ORDER BY 
2c790 63 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44 41  clauses for UPDA
2c7a0 54 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74  TE are unsupport
2c7b0 65 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20  ed within.      
2c7c0 74 72 69 67 67 65 72 73 2c 20 72 65 67 61 72 64  triggers, regard
2c7d0 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  less of the comp
2c7e0 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20  ilation options 
2c7f0 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51  used to build SQ
2c800 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33  Lite..</ul>..<h3
2c810 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20  >Optional LIMIT 
2c820 61 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61  and ORDER BY Cla
2c830 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  uses</h3>..<p>^(
2c840 49 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69  If SQLite is bui
2c850 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  lt with the [SQL
2c860 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
2c870 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a  E_DELETE_LIMIT].
2c880 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
2c890 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e  ion then the syn
2c8a0 74 61 78 20 6f 66 20 74 68 65 20 55 50 44 41 54  tax of the UPDAT
2c8b0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65  E statement is e
2c8c0 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74  xtended.with opt
2c8d0 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61  ional ORDER BY a
2c8e0 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
2c8f0 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  )^ as follows:</
2c900 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
2c910 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74  iagram update-st
2c920 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e  mt-limited</tcl>
2c930 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41  ..<p>^If an UPDA
2c940 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
2c950 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
2c960 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
2c970 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74  ber of rows that
2c980 0a 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65 64  .will be updated
2c990 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61   is found by eva
2c9a0 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f  luating the acco
2c9b0 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73  mpanying express
2c9c0 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a  ion and casting.
2c9d0 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
2c9e0 20 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74   value. ^A negat
2c9f0 69 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e 74  ive value is int
2ca00 65 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20  erpreted as "no 
2ca10 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20  limit"...<p>^If 
2ca20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
2ca30 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2ca40 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  o non-negative v
2ca50 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e  alue <i>N</i> an
2ca60 64 20 74 68 65 0a 55 50 44 41 54 45 20 73 74 61  d the.UPDATE sta
2ca70 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52  tement has an OR
2ca80 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
2ca90 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
2caa0 74 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74  t would be updat
2cab0 65 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e 63  ed in.the absenc
2cac0 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
2cad0 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64  lause are sorted
2cae0 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
2caf0 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 74  e ORDER BY and t
2cb00 68 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69  he.first <i>N</i
2cb10 3e 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66 20  > updated. ^(If 
2cb20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
2cb30 6d 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61 6e  ment also has an
2cb40 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a   OFFSET clause,.
2cb50 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c  then it is simil
2cb60 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61  arly evaluated a
2cb70 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69 6e  nd cast to an in
2cb80 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
2cb90 74 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72 65  the OFFSET.expre
2cba0 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
2cbb0 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  to a non-negativ
2cbc0 65 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e  e value <i>M</i>
2cbd0 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
2cbe0 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61   <i>M</i>.rows a
2cbf0 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74  re skipped and t
2cc00 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e  he following <i>
2cc10 4e 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61 74  N</i> rows updat
2cc20 65 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c  ed instead.)^..<
2cc30 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45  p>^If the UPDATE
2cc40 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e   statement has n
2cc50 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
2cc60 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
2cc70 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 75   that.would be u
2cc80 70 64 61 74 65 64 20 69 6e 20 74 68 65 20 61 62  pdated in the ab
2cc90 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
2cca0 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73  IT clause are as
2ccb0 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72  sembled in an.ar
2ccc0 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65  bitrary order be
2ccd0 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68  fore applying th
2cce0 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
2ccf0 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65  ET clauses to de
2cd00 74 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20 61  termine .which a
2cd10 72 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64 61  re actually upda
2cd20 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f  ted...<p>^(The O
2cd30 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f  RDER BY clause o
2cd40 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  n an UPDATE stat
2cd50 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e  ement is used on
2cd60 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ly to determine 
2cd70 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20  which.rows fall 
2cd80 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54  within the LIMIT
2cd90 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77  . The order in w
2cda0 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f  hich rows are mo
2cdb0 64 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72  dified is arbitr
2cdc0 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69  ary.and is not i
2cdd0 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65  nfluenced by the
2cde0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2cdf0 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  .)^..<tcl>.#####
2ce00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce40 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
2ce50 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20  n VACUUM vacuum 
2ce60 56 41 43 55 55 4d 0a 0a 52 65 63 75 72 73 69 76  VACUUM..Recursiv
2ce70 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76  eBubbleDiagram v
2ce80 61 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c  acuum-stmt.</tcl
2ce90 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43  >..<p>.  The VAC
2cea0 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75  UUM command rebu
2ceb0 69 6c 64 73 20 74 68 65 20 65 6e 74 69 72 65 20  ilds the entire 
2cec0 64 61 74 61 62 61 73 65 2e 20 54 68 65 72 65 20  database. There 
2ced0 61 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72  are several .  r
2cee0 65 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63  easons an applic
2cef0 61 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74  ation might do t
2cf00 68 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  his:..<ul>.  <li
2cf10 3e 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51  > <p> ^Unless SQ
2cf20 4c 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20  Lite is running 
2cf30 69 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d  in "auto_vacuum=
2cf40 46 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e  FULL" mode, when
2cf50 20 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d   a large.     am
2cf60 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20  ount of data is 
2cf70 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65  deleted from the
2cf80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2cf90 74 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20  t leaves behind 
2cfa0 65 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65  empty.     space
2cfb0 2c 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61  , or "free" data
2cfc0 62 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73  base pages. This
2cfd0 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62   means the datab
2cfe0 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20  ase file might. 
2cff0 20 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68      be larger th
2d000 61 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65  an strictly nece
2d010 73 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20  ssary. ^Running 
2d020 56 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c  VACUUM to rebuil
2d030 64 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61  d the .     data
2d040 62 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68  base reclaims th
2d050 69 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64  is space and red
2d060 75 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66  uces the size of
2d070 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2d080 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20  le...  <li> <p> 
2d090 5e 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74  ^Frequent insert
2d0a0 73 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20  s, updates, and 
2d0b0 64 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73  deletes can caus
2d0c0 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  e the database f
2d0d0 69 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f  ile.     to beco
2d0e0 6d 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20  me fragmented - 
2d0f0 77 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61  where data for a
2d100 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72   single table or
2d110 20 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65   index is scatte
2d120 72 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64  red .     around
2d130 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2d140 6c 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43  le. ^Running VAC
2d150 55 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74  UUM ensures that
2d160 20 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a   each table and.
2d170 20 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61       index is la
2d180 72 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e  rgely stored con
2d190 74 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e  tiguously within
2d1a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2d1b0 6c 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20  le. ^In some.   
2d1c0 20 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20    cases, VACUUM 
2d1d0 6d 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20  may also reduce 
2d1e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
2d1f0 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70  rtially filled p
2d200 61 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65  ages in.     the
2d210 20 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63   database, reduc
2d220 69 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ing the size of 
2d230 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2d240 65 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c  e further...  <l
2d250 69 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79  i> <p> ^Normally
2d260 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b  , the database [
2d270 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77  page_size] and w
2d280 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
2d290 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
2d2a0 73 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76  supports [auto_v
2d2b0 61 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63  acuum] must be c
2d2c0 6f 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65  onfigured before
2d2d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2d2e0 6c 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61  le is.     actua
2d2f0 6c 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f  lly created. ^Ho
2d300 77 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20  wever, when not 
2d310 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20  in [write-ahead 
2d320 6c 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a  log] mode, the .
2d330 20 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d       [page_size]
2d340 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61   and/or [auto_va
2d350 63 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73  cuum] properties
2d360 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   of an existing 
2d370 64 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a  database may be.
2d380 20 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20       changed by 
2d390 75 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f  using the [page_
2d3a0 73 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65  size pragma|page
2d3b0 5f 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a  _size]  and/or .
2d3c0 20 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75       [auto_vacuu
2d3d0 6d 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61  m|pragma auto_va
2d3e0 63 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e  cuum] pragmas an
2d3f0 64 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65  d then immediate
2d400 6c 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20  ly VACUUMing.   
2d410 20 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20    the database. 
2d420 5e 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d  ^When in [write-
2d430 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c  ahead log] mode,
2d440 20 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f   only the [auto_
2d450 76 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70  vacuum].     sup
2d460 70 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61  port property ca
2d470 6e 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69  n be changed usi
2d480 6e 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e  ng VACUUM..</ul>
2d490 0a 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f 6e  ..<p>^(VACUUM on
2d4a0 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20  ly works on the 
2d4b0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49  main database. I
2d4c0 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
2d4d0 65 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a 61  e to VACUUM an.a
2d4e0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2d4f0 20 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68   file.)^..<p>^Th
2d500 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64  e VACUUM command
2d510 20 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69 6e   works by copyin
2d520 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  g the contents o
2d530 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
2d540 6e 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79 20  nto.a temporary 
2d550 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
2d560 64 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74 69  d then overwriti
2d570 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  ng the original 
2d580 77 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65 6e  with the .conten
2d590 74 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ts of the tempor
2d5a0 61 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e 20  ary file. ^When 
2d5b0 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20  overwriting the 
2d5c0 6f 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c  original, a roll
2d5d0 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20  back.journal or 
2d5e0 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67  [write-ahead log
2d5f0 5d 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75 73  ] WAL file is us
2d600 65 64 20 6a 75 73 74 20 61 73 20 69 74 20 77 6f  ed just as it wo
2d610 75 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a 6f  uld be for any.o
2d620 74 68 65 72 20 64 61 74 61 62 61 73 65 20 74 72  ther database tr
2d630 61 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69 73  ansaction. ^This
2d640 20 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e   means that when
2d650 20 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61 74   VACUUMing a dat
2d660 61 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68 20  abase, .as much 
2d670 61 73 20 74 77 69 63 65 20 74 68 65 20 73 69 7a  as twice the siz
2d680 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e of the origina
2d690 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  l database file 
2d6a0 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 66  is required in f
2d6b0 72 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e 0a  ree.disk space..
2d6c0 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20  .<p>^The VACUUM 
2d6d0 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e  command may chan
2d6e0 67 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20  ge the [ROWID | 
2d6f0 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69  ROWIDs] of entri
2d700 65 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73  es in any.tables
2d710 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76   that do not hav
2d720 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49  e an explicit [I
2d730 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
2d740 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  EY]..</p>..<p>^A
2d750 20 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69   VACUUM will fai
2d760 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  l if there is an
2d770 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
2d780 6e 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61  n, or if there a
2d790 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61  re one or.more a
2d7a0 63 74 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d  ctive SQL statem
2d7b0 65 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73 20  ents when it is 
2d7c0 72 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66  run...<p>^(As of
2d7d0 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
2d7e0 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74  3.1, an alternat
2d7f0 69 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65  ive to using the
2d800 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
2d810 74 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65  to.reclaim space
2d820 20 61 66 74 65 72 20 64 61 74 61 20 68 61 73 20   after data has 
2d830 62 65 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20  been deleted is 
2d840 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65  auto-vacuum mode
2d850 2c 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a  , enabled using.
2d860 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  the [auto_vacuum
2d870 5d 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65  ] pragma.)^ ^Whe
2d880 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  n [auto_vacuum] 
2d890 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61  is enabled for a
2d8a0 20 64 61 74 61 62 61 73 65 0a 66 72 65 65 20 70   database.free p
2d8b0 61 67 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c  ages may be recl
2d8c0 61 69 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65  aimed after dele
2d8d0 74 69 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69  ting data, causi
2d8e0 6e 67 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73  ng the file to s
2d8f0 68 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72  hrink,.without r
2d900 65 62 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e  ebuilding the en
2d910 74 69 72 65 20 64 61 74 61 62 61 73 65 20 75 73  tire database us
2d920 69 6e 67 20 56 41 43 55 55 4d 2e 20 20 48 6f 77  ing VACUUM.  How
2d930 65 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74  ever, using.[aut
2d940 6f 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65  o_vacuum] can le
2d950 61 64 20 74 6f 20 65 78 74 72 61 20 64 61 74 61  ad to extra data
2d960 62 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65  base file fragme
2d970 6e 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b 61  ntation.  And [a
2d980 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73  uto_vacuum].does
2d990 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72   not compact par
2d9a0 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
2d9b0 67 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ges of the datab
2d9c0 61 73 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f  ase as VACUUM do
2d9d0 65 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  es...</p>...<tcl
2d9e0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
2d9f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da30 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45  .Section {INDEXE
2da40 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20  D BY} indexedby 
2da50 7b 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e  {{INDEXED BY} {N
2da60 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f  OT INDEXED}}..</
2da70 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44  tcl>.<p>^The IND
2da80 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 66  EXED BY phrase f
2da90 6f 72 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74  orces the [SQLit
2daa0 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d  e query planner]
2dab0 20 74 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63   to use a.partic
2dac0 75 6c 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78  ular named index
2dad0 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20   on a [DELETE], 
2dae0 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50  [SELECT], or [UP
2daf0 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  DATE] statement.
2db00 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  .The INDEXED BY 
2db10 70 68 72 61 73 65 20 69 73 20 61 6e 20 65 78 74  phrase is an ext
2db20 65 6e 73 69 6f 6e 20 74 68 61 74 20 69 73 20 70  ension that is p
2db30 61 72 74 69 63 75 6c 61 72 20 74 6f 20 53 51 4c  articular to SQL
2db40 69 74 65 20 61 6e 64 0a 69 73 20 6e 6f 74 20 70  ite and.is not p
2db50 6f 72 74 61 62 6c 65 20 74 6f 20 6f 74 68 65 72  ortable to other
2db60 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
2db70 67 69 6e 65 73 2e 0a 54 68 65 20 49 4e 44 45 58  gines..The INDEX
2db80 45 44 20 42 59 20 70 68 72 61 73 65 20 63 61 6e  ED BY phrase can
2db90 20 62 65 20 73 65 65 6e 20 69 6e 20 74 68 65 20   be seen in the 
2dba0 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78  following syntax
2dbb0 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a  .diagrams:</p>..
2dbc0 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42  <tcl>.RecursiveB
2dbd0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61  ubbleDiagram qua
2dbe0 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
2dbf0 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  e.</tcl>..<p>^Th
2dc00 65 20 22 49 4e 44 45 58 45 44 20 42 59 20 69 6e  e "INDEXED BY in
2dc10 64 65 78 2d 6e 61 6d 65 22 20 70 68 72 61 73 65  dex-name" phrase
2dc20 20 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20   specifies that 
2dc30 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a  the named index.
2dc40 6d 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 20  must be used in 
2dc50 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70  order to look up
2dc60 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70   values on the p
2dc70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a  receding table..
2dc80 5e 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64  ^If index-name d
2dc90 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72  oes not exist or
2dca0 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20   cannot be used 
2dcb0 66 6f 72 20 74 68 65 20 71 75 65 72 79 2c 20 74  for the query, t
2dcc0 68 65 6e 0a 74 68 65 20 70 72 65 70 61 72 61 74  hen.the preparat
2dcd0 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73  ion of the SQL s
2dce0 74 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a  tatement fails..
2dcf0 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58  ^(The "NOT INDEX
2dd00 45 44 22 20 63 6c 61 75 73 65 20 73 70 65 63 69  ED" clause speci
2dd10 66 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64  fies that no ind
2dd20 65 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64  ex shall be used
2dd30 20 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20   when.accessing 
2dd40 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61  the preceding ta
2dd50 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69  ble, including i
2dd60 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63  mplied indices c
2dd70 72 65 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20  reate by.UNIQUE 
2dd80 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20  and PRIMARY KEY 
2dd90 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f  constraints.  Ho
2dda0 77 65 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47  wever, the INTEG
2ddb0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63  ER PRIMARY KEY.c
2ddc0 61 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64  an still be used
2ddd0 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72   to look up entr
2dde0 69 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e  ies even when "N
2ddf0 4f 54 20 49 4e 44 45 58 45 44 22 20 69 73 20 73  OT INDEXED" is s
2de00 70 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a  pecified.)^</p>.
2de10 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74  .<p>Some SQL dat
2de20 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72  abase engines pr
2de30 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61  ovide non-standa
2de40 72 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e  rd "hint" mechan
2de50 69 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62  isms which.can b
2de60 65 20 75 73 65 64 20 74 6f 20 67 69 76 65 20 74  e used to give t
2de70 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
2de80 65 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77  er clues about w
2de90 68 61 74 20 69 6e 64 69 63 65 73 20 69 74 20 73  hat indices it s
2dea0 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20  hould.use for a 
2deb0 70 61 72 74 69 63 75 6c 61 72 20 73 74 61 74 65  particular state
2dec0 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58  ment.  The INDEX
2ded0 20 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51   BY clause of SQ
2dee0 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74  Lite is .<em>not
2def0 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20  </em> a hinting 
2df00 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74  mechanism and it
2df10 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75   should not be u
2df20 73 65 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68  sed as such..^Th
2df30 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
2df40 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76  use does not giv
2df50 65 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  e the optimizer 
2df60 68 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63  hints about whic
2df70 68 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20  h index.to use; 
2df80 69 74 20 67 69 76 65 73 20 74 68 65 20 6f 70 74  it gives the opt
2df90 69 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72 65  imizer a require
2dfa0 6d 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e  ment of which in
2dfb0 64 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20  dex to use..^If 
2dfc0 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
2dfd0 7a 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f  zer is unable to
2dfe0 20 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 73   use the index s
2dff0 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0a  pecified by the.
2e000 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c  INDEX BY clause,
2e010 20 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20   then the query 
2e020 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
2e030 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70  n error.</p>..<p
2e040 3e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  >The INDEXED BY 
2e050 63 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f  clause is <em>no
2e060 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20  t</em> intended 
2e070 66 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e  for use in tunin
2e080 67 0a 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63  g.the performanc
2e090 65 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54  e of a query.  T
2e0a0 68 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65  he intent of the
2e0b0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
2e0c0 73 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61  se is.to raise a
2e0d0 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20   run-time error 
2e0e0 69 66 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e  if a schema chan
2e0f0 67 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70  ge, such as drop
2e100 70 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67  ping or.creating
2e110 20 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65   an index, cause
2e120 73 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  s the query plan
2e130 20 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73   for a time-sens
2e140 69 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63  itive query.to c
2e150 68 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45  hange.  The INDE
2e160 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
2e170 20 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c   designed to hel
2e180 70 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72  p detect.undesir
2e190 61 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20  able query plan 
2e1a0 63 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72  changes during r
2e1b0 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e  egression testin
2e1c0 67 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72  g..Developers ar
2e1d0 65 20 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20  e admonished to 
2e1e0 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20  omit all use of 
2e1f0 49 4e 44 45 58 45 44 20 42 59 20 64 75 72 69 6e  INDEXED BY durin
2e200 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65  g.application de
2e210 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61  sign, implementa
2e220 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61  tion, testing, a
2e230 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49  nd tuning.  If.I
2e240 4e 44 45 58 45 44 20 42 59 20 69 73 20 74 6f 20  NDEXED BY is to 
2e250 62 65 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20  be used at all, 
2e260 69 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73  it should be ins
2e270 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72  erted at the ver
2e280 79 0a 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76  y.end of the dev
2e290 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73  elopment process
2e2a0 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64   when "locking d
2e2b0 6f 77 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f  own" a design.</
2e2c0 70 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f  p>..<h3>See Also
2e2d0 3a 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  :</h3>..<ol>.<li
2e2e0 3e 3c 70 3e 54 68 65 20 5b 71 75 65 72 79 20 70  ><p>The [query p
2e2f0 6c 61 6e 6e 65 72 20 63 68 65 63 6b 6c 69 73 74  lanner checklist
2e300 5d 20 64 65 73 63 72 69 62 65 73 20 73 74 65 70  ] describes step
2e310 73 20 74 68 61 74 20 61 70 70 6c 69 63 61 74 69  s that applicati
2e320 6f 6e 0a 64 65 76 65 6c 6f 70 65 72 73 20 73 68  on.developers sh
2e330 6f 75 6c 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  ould following t
2e340 6f 20 68 65 6c 70 20 72 65 73 6f 6c 76 65 20 71  o help resolve q
2e350 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 70 72 6f  uery planner pro
2e360 62 6c 65 6d 73 2e 0a 4e 6f 74 69 63 65 20 74 68  blems..Notice th
2e370 65 20 74 68 61 74 20 74 68 65 20 75 73 65 20 6f  e that the use o
2e380 66 20 49 4e 44 45 58 45 44 20 42 59 20 69 73 20  f INDEXED BY is 
2e390 61 20 6c 61 73 74 20 72 65 73 6f 72 74 2c 20 74  a last resort, t
2e3a0 6f 20 62 65 20 75 73 65 64 20 6f 6e 6c 79 0a 77  o be used only.w
2e3b0 68 65 6e 20 61 6c 6c 20 6f 74 68 65 72 20 6d 65  hen all other me
2e3c0 61 73 75 72 65 73 20 66 61 69 6c 2e 3c 2f 70 3e  asures fail.</p>
2e3d0 0a 0a 3c 6c 69 3e 3c 70 3e 5b 75 70 6c 75 73 63  ..<li><p>[uplusc
2e3e0 6f 6e 74 72 6f 6c 7c 54 68 65 20 75 6e 61 72 79  ontrol|The unary
2e3f0 20 22 2b 22 20 6f 70 65 72 61 74 6f 72 5d 0a 63   "+" operator].c
2e400 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 69  an be used to di
2e410 73 71 75 61 6c 69 66 79 20 74 65 72 6d 73 20 69  squalify terms i
2e420 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  n the WHERE clau
2e430 73 65 20 66 72 6f 6d 20 75 73 65 20 62 79 20 69  se from use by i
2e440 6e 64 69 63 65 73 2e 0a 43 61 72 65 66 75 6c 20  ndices..Careful 
2e450 75 73 65 20 6f 66 20 75 6e 61 72 79 20 2b 20 63  use of unary + c
2e460 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 68 65 6c  an sometimes hel
2e470 70 20 70 72 65 76 65 6e 74 20 74 68 65 20 71 75  p prevent the qu
2e480 65 72 79 20 70 6c 61 6e 6e 65 72 20 66 72 6f 6d  ery planner from
2e490 0a 63 68 6f 6f 73 69 6e 67 20 61 20 70 6f 6f 72  .choosing a poor
2e4a0 20 69 6e 64 65 78 20 77 69 74 68 6f 75 74 20 72   index without r
2e4b0 65 73 74 72 69 63 74 69 6e 67 20 69 74 20 74 6f  estricting it to
2e4c0 20 75 73 69 6e 67 20 6f 6e 65 20 73 70 65 63 69   using one speci
2e4d0 66 69 63 20 69 6e 64 65 78 2e 0a 43 61 72 65 66  fic index..Caref
2e4e0 75 6c 20 70 6c 61 63 65 6d 65 6e 74 20 6f 66 20  ul placement of 
2e4f0 75 6e 61 72 79 20 2b 20 6f 70 65 72 61 74 6f 72  unary + operator
2e500 73 20 69 73 20 61 20 62 65 74 74 65 72 20 6d 65  s is a better me
2e510 74 68 6f 64 20 66 6f 72 20 63 6f 6e 74 72 6f 6c  thod for control
2e520 6c 69 6e 67 20 0a 77 68 69 63 68 20 69 6e 64 69  ling .which indi
2e530 63 65 73 20 61 72 65 20 75 73 65 64 20 62 79 20  ces are used by 
2e540 61 20 71 75 65 72 79 2e 3c 2f 70 3e 0a 0a 3c 6c  a query.</p>..<l
2e550 69 3e 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65  i><p>The [sqlite
2e560 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d  3_stmt_status()]
2e570 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
2e580 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 74   together with t
2e590 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  he.[SQLITE_STMTS
2e5a0 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53  TATUS_FULLSCAN_S
2e5b0 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45  TEP] and [SQLITE
2e5c0 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
2e5d0 5d 20 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75  ] verbs.can be u
2e5e0 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 61 74  sed to detect at
2e5f0 20 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61   run-time when a
2e600 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
2e610 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66  is not.making ef
2e620 66 65 63 74 69 76 65 20 75 73 65 20 6f 66 20 69  fective use of i
2e630 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70  ndices.  Many ap
2e640 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70  plications may p
2e650 72 65 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65  refer to.use the
2e660 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73   [sqlite3_stmt_s
2e670 74 61 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61  tatus()] interfa
2e680 63 65 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64  ce to detect ind
2e690 65 78 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72  ex misuse.rather
2e6a0 20 74 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45   than the INDEXE
2e6b0 44 20 42 59 20 70 68 72 61 73 65 20 64 65 73 63  D BY phrase desc
2e6c0 72 69 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a  ribed here.</p>.
2e6d0 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </ol>..<tcl>.###
2e6e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e720 23 23 23 23 23 23 23 23 23 23 0a 23 20 41 20 6c  ##########.# A l
2e730 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e  ist of keywords.
2e740 20 20 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63    A asterisk occ
2e750 75 72 73 20 61 66 74 65 72 20 74 68 65 20 6b 65  urs after the ke
2e760 79 77 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f  yword if it is o
2e770 6e 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b  n.# the fallback
2e780 20 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79   list..#.set key
2e790 77 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74  word_list [lsort
2e7a0 20 7b 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41   {.   ABORT.   A
2e7b0 43 54 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20  CTION.   ADD.   
2e7c0 41 46 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20  AFTER.   ALL.   
2e7d0 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45  ALTER.   ANALYZE
2e7e0 0a 20 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20  .   AND.   AS.  
2e7f0 20 41 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20   ASC.   ATTACH. 
2e800 20 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a    AUTOINCREMENT.
2e810 20 20 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47     BEFORE.   BEG
2e820 49 4e 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20  IN.   BETWEEN.  
2e830 20 42 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20   BY.   CASCADE. 
2e840 20 20 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20    CASE.   CAST. 
2e850 20 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41    CHECK.   COLLA
2e860 54 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20  TE.   COLUMN.   
2e870 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49  COMMIT.   CONFLI
2e880 43 54 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54  CT.   CONSTRAINT
2e890 0a 20 20 20 43 52 45 41 54 45 0a 20 20 20 43 52  .   CREATE.   CR
2e8a0 4f 53 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44  OSS.   CURRENT_D
2e8b0 41 54 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54  ATE.   CURRENT_T
2e8c0 49 4d 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54  IME.   CURRENT_T
2e8d0 49 4d 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41  IMESTAMP.   DATA
2e8e0 42 41 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a  BASE.   DEFAULT.
2e8f0 20 20 20 44 45 46 45 52 52 45 44 0a 20 20 20 44     DEFERRED.   D
2e900 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c  EFERRABLE.   DEL
2e910 45 54 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44  ETE.   DESC.   D
2e920 45 54 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43  ETACH.   DISTINC
2e930 54 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44  T.   DROP.   END
2e940 0a 20 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45  .   EACH.   ELSE
2e950 0a 20 20 20 45 53 43 41 50 45 0a 20 20 20 45 58  .   ESCAPE.   EX
2e960 43 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56  CEPT.   EXCLUSIV
2e970 45 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20 45  E.   EXISTS.   E
2e980 58 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20  XPLAIN.   FAIL. 
2e990 20 20 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e    FOR.   FOREIGN
2e9a0 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c  .   FROM.   FULL
2e9b0 0a 20 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55  .   GLOB.   GROU
2e9c0 50 0a 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49  P.   HAVING.   I
2e9d0 46 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49  F.   IGNORE.   I
2e9e0 4d 4d 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20  MMEDIATE.   IN. 
2e9f0 20 20 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58    INDEX.   INDEX
2ea00 45 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a  ED.   INITIALLY.
2ea10 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45     INNER.   INSE
2ea20 52 54 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20  RT.   INSTEAD.  
2ea30 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e   INTERSECT.   IN
2ea40 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55  TO.   IS.   ISNU
2ea50 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45  LL.   JOIN.   KE
2ea60 59 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b  Y.   LEFT.   LIK
2ea70 45 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41  E.   LIMIT.   MA
2ea80 54 43 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20  TCH.   NATURAL. 
2ea90 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e    NO.   NOT.   N
2eaa0 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20  OTNULL.   NULL. 
2eab0 20 20 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20    OF.   OFFSET. 
2eac0 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52    ON.   OR.   OR
2ead0 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20  DER.   OUTER.   
2eae0 50 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20  PLAN.   PRAGMA. 
2eaf0 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45    PRIMARY.   QUE
2eb00 52 59 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52  RY.   RAISE.   R
2eb10 45 43 55 52 53 49 56 45 0a 20 20 20 52 45 46 45  ECURSIVE.   REFE
2eb20 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50  RENCES.   REGEXP
2eb30 0a 20 20 20 52 45 49 4e 44 45 58 0a 20 20 20 52  .   REINDEX.   R
2eb40 45 4c 45 41 53 45 0a 20 20 20 52 45 4e 41 4d 45  ELEASE.   RENAME
2eb50 0a 20 20 20 52 45 50 4c 41 43 45 0a 20 20 20 52  .   REPLACE.   R
2eb60 45 53 54 52 49 43 54 0a 20 20 20 52 49 47 48 54  ESTRICT.   RIGHT
2eb70 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20  .   ROLLBACK.   
2eb80 52 4f 57 0a 20 20 20 53 41 56 45 50 4f 49 4e 54  ROW.   SAVEPOINT
2eb90 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45  .   SELECT.   SE
2eba0 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45  T.   TABLE.   TE
2ebb0 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 0a  MP.   TEMPORARY.
2ebc0 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20     THEN.   TO.  
2ebd0 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20   TRANSACTION.   
2ebe0 54 52 49 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e  TRIGGER.   UNION
2ebf0 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50  .   UNIQUE.   UP
2ec00 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20  DATE.   USING.  
2ec10 20 56 41 43 55 55 4d 0a 20 20 20 56 41 4c 55 45   VACUUM.   VALUE
2ec20 53 0a 20 20 20 56 49 45 57 0a 20 20 20 56 49 52  S.   VIEW.   VIR
2ec30 54 55 41 4c 0a 20 20 20 57 49 54 48 0a 20 20 20  TUAL.   WITH.   
2ec40 57 49 54 48 4f 55 54 0a 20 20 20 57 48 45 4e 0a  WITHOUT.   WHEN.
2ec50 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f     WHERE.}]..hd_
2ec60 70 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73  puts {<DIV class
2ec70 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d  ="pdf_section">}
2ec80 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65  .Section {SQLite
2ec90 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f   Keywords} keywo
2eca0 72 64 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f  rds {{*SQL keywo
2ecb0 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64  rd} {SQL keyword
2ecc0 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44  s}}.hd_puts {</D
2ecd0 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  IV>}.</tcl>..<p>
2ece0 54 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64  The SQL standard
2ecf0 20 73 70 65 63 69 66 69 65 73 20 61 20 68 75 67   specifies a hug
2ed00 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77  e number of keyw
2ed10 6f 72 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e  ords which may n
2ed20 6f 74 0a 62 65 20 75 73 65 64 20 61 73 20 74 68  ot.be used as th
2ed30 65 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65  e names of table
2ed40 73 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75  s, indices, colu
2ed50 6d 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20  mns, databases, 
2ed60 75 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e  user-defined.fun
2ed70 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f  ctions, collatio
2ed80 6e 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ns, virtual tabl
2ed90 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e  e modules, or an
2eda0 79 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62  y other named ob
2edb0 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f  ject..The list o
2edc0 66 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f  f keywords is so
2edd0 20 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70   long that few p
2ede0 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62  eople can rememb
2edf0 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72  er them all..For
2ee00 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20   most SQL code, 
2ee10 79 6f 75 72 20 73 61 66 65 73 74 20 62 65 74 20  your safest bet 
2ee20 69 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20  is to never use 
2ee30 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67  any English lang
2ee40 75 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65  uage.word as the
2ee50 20 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d   name of a user-
2ee60 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c  defined object.<
2ee70 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77  /p>..<p>If you w
2ee80 61 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79  ant to use a key
2ee90 77 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20  word as a name, 
2eea0 79 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74  you need to quot
2eeb0 65 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65  e it.  There.are
2eec0 20 66 6f 75 72 20 77 61 79 73 20 6f 66 20 71 75   four ways of qu
2eed0 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69  oting keywords i
2eee0 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c  n SQLite:</p>..<
2eef0 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  p>.<blockquote>.
2ef00 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64  <table>.<tr>.<td
2ef10 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
2ef20 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f  >'keyword'</b></
2ef30 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
2ef40 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  "></td>..<td>^A 
2ef50 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c  keyword in singl
2ef60 65 20 71 75 6f 74 65 73 20 69 73 20 61 20 73 74  e quotes is a st
2ef70 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74  ring literal.</t
2ef80 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74  d></tr>..<tr>.<t
2ef90 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
2efa0 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c  b>"keyword"</b><
2efb0 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c  /td><td></td>..<
2efc0 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e  td>^A keyword in
2efd0 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69   double-quotes i
2efe0 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e  s an identifier.
2eff0 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  </td></tr>..<tr>
2f000 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
2f010 22 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72  "><b>&#91;keywor
2f020 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c  d&#93;</b></td><
2f030 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41  td></td>..<td>^A
2f040 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65   keyword enclose
2f050 64 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63  d in square brac
2f060 6b 65 74 73 20 69 73 20 0a 20 20 20 20 20 20 20  kets is .       
2f070 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20   an identifier. 
2f080 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61   This is not sta
2f090 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73  ndard SQL.  This
2f0a0 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69   quoting mechani
2f0b0 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73  sm.        is us
2f0c0 65 64 20 62 79 20 4d 53 20 41 63 63 65 73 73 20  ed by MS Access 
2f0d0 61 6e 64 20 53 51 4c 20 53 65 72 76 65 72 20 61  and SQL Server a
2f0e0 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  nd is included i
2f0f0 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20  n SQLite for.   
2f100 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69       compatibili
2f110 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  ty.</td></tr>..<
2f120 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
2f130 74 6f 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79  top"><b>&#96;key
2f140 77 6f 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74  word&#96;</b></t
2f150 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
2f160 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c  >^A keyword encl
2f170 6f 73 65 64 20 69 6e 20 67 72 61 76 65 20 61 63  osed in grave ac
2f180 63 65 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64  cents (ASCII cod
2f190 65 20 39 36 29 20 69 73 20 0a 20 20 20 20 20 20  e 96) is .      
2f1a0 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e    an identifier.
2f1b0 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74    This is not st
2f1c0 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69  andard SQL.  Thi
2f1d0 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e  s quoting mechan
2f1e0 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75  ism.        is u
2f1f0 73 65 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64  sed by MySQL and
2f200 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
2f210 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20  SQLite for.     
2f220 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79     compatibility
2f230 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61  .</td></tr>.</ta
2f240 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
2f250 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20  e>.</p>..<p>For 
2f260 72 65 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20  resilience when 
2f270 63 6f 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20  confronted with 
2f280 68 69 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73  historical SQL s
2f290 74 61 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74  tatements, SQLit
2f2a0 65 0a 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73  e.will sometimes
2f2b0 20 62 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e   bend the quotin
2f2c0 67 20 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f  g rules above:</
2f2d0 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ul>.<li><p>
2f2e0 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e  ^If a keyword in
2f2f0 20 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28   single.quotes (
2f300 65 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e  ex: <b>'key'</b>
2f310 20 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62   or <b>'glob'</b
2f320 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20  >) is used in a 
2f330 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e  context where.an
2f340 20 69 64 65 6e 74 69 66 69 65 72 20 69 73 20 61   identifier is a
2f350 6c 6c 6f 77 65 64 20 62 75 74 20 77 68 65 72 65  llowed but where
2f360 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
2f370 6c 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  l is not allowed
2f380 2c 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e  , then.the token
2f390 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74   is understood t
2f3a0 6f 20 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69  o be an identifi
2f3b0 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20  er instead of a 
2f3c0 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a  string literal..
2f3d0 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
2f3e0 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20  p>^If a keyword 
2f3f0 69 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73  in double.quotes
2f400 20 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f   (ex: <b>"key"</
2f410 62 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c  b> or <b>"glob"<
2f420 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20  /b>) is used in 
2f430 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a  a context where.
2f440 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73  it cannot be res
2f450 6f 6c 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e  olved to an iden
2f460 74 69 66 69 65 72 20 62 75 74 20 77 68 65 72 65  tifier but where
2f470 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
2f480 6c 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68  l.is allowed, th
2f490 65 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20  en the token is 
2f4a0 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65  understood to be
2f4b0 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
2f4c0 6c 20 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20  l instead.of an 
2f4d0 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c  identifier.</p><
2f4e0 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50  /li>.</ul>..<p>P
2f4f0 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63  rogrammers are c
2f500 61 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20  autioned not to 
2f510 75 73 65 20 74 68 65 20 74 77 6f 20 65 78 63 65  use the two exce
2f520 70 74 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64  ptions described
2f530 20 69 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73   in.the previous
2f540 20 62 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d   bullets.  We em
2f550 70 68 61 73 69 7a 65 20 74 68 61 74 20 74 68 65  phasize that the
2f560 79 20 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20  y exist only so 
2f570 74 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c  that old.and ill
2f580 2d 66 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74  -formed SQL stat
2f590 65 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20  ements will run 
2f5a0 63 6f 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75  correctly.  Futu
2f5b0 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53  re versions of.S
2f5c0 51 4c 69 74 65 20 6d 69 67 68 74 20 72 61 69 73  QLite might rais
2f5d0 65 20 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64  e errors instead
2f5e0 20 6f 66 20 61 63 63 65 70 74 69 6e 67 20 74 68   of accepting th
2f5f0 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74  e malformed.stat
2f600 65 6d 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62  ements covered b
2f610 79 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73  y the exceptions
2f620 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e   above.</p>..<p>
2f630 0a 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77  .SQLite adds new
2f640 20 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74   keywords from t
2f650 69 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e  ime to time when
2f660 20 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77   it takes on new
2f670 20 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f   features..So to
2f680 20 70 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f   prevent your co
2f690 64 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72  de from being br
2f6a0 6f 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20 65  oken by future e
2f6b0 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75  nhancements, you
2f6c0 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79   should.normally
2f6d0 20 71 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74   quote any ident
2f6e0 69 66 69 65 72 20 74 68 61 74 20 69 73 20 61 6e  ifier that is an
2f6f0 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   English languag
2f700 65 20 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a  e word, even if.
2f710 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  you do not have 
2f720 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  to..</p>..<p>.Th
2f730 65 20 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f  e list below sho
2f740 77 73 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20  ws all possible 
2f750 6b 65 79 77 6f 72 64 73 20 75 73 65 64 20 62 79  keywords used by
2f760 20 61 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51   any build of.SQ
2f770 4c 69 74 65 20 72 65 67 61 72 64 6c 65 73 73 20  Lite regardless 
2f780 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  of [compile-time
2f790 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73   options].  .Mos
2f7a0 74 20 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e  t reasonable con
2f7b0 66 69 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20  figurations use 
2f7c0 6d 6f 73 74 20 6f 72 20 61 6c 6c 20 6f 66 20 74  most or all of t
2f7d0 68 65 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62  hese keywords,.b
2f7e0 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73  ut some keywords
2f7f0 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20   may be omitted 
2f800 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67  when SQL languag
2f810 65 20 66 65 61 74 75 72 65 73 20 61 72 65 0a 64  e features are.d
2f820 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72  isabled..^(Regar
2f830 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d  dless of the com
2f840 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67  pile-time config
2f850 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65  uration, any ide
2f860 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20  ntifier that is 
2f870 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f  not on.the follo
2f880 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74  wing <tcl>hd_put
2f890 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77  s [llength $keyw
2f8a0 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20  ord_list]</tcl> 
2f8b0 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20  element.list is 
2f8c0 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f  not a keyword to
2f8d0 20 74 68 65 20 53 51 4c 20 70 61 72 73 65 72 20   the SQL parser 
2f8e0 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a  in SQLite:.</p>.
2f8f0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
2f900 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
2f910 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  "><tr>.<td align
2f920 3d 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22  ="left" valign="
2f930 74 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25 22  top" width="20%"
2f940 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c  >.<tcl>.set n [l
2f950 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f  length $keyword_
2f960 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35  list].set nCol 5
2f970 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20  .set nRow [expr 
2f980 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e  {($n+$nCol-1)/$n
2f990 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f  Col}].set i 0.fo
2f9a0 72 65 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77  reach word $keyw
2f9b0 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20  ord_list {.  if 
2f9c0 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20  {$i==$nRow} {.  
2f9d0 20 20 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e    hd_puts "</td>
2f9e0 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
2f9f0 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c  \" align=\"left\
2fa00 22 20 77 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e  " width=\"20%\">
2fa10 22 0a 20 20 20 20 73 65 74 20 69 20 31 0a 20 20  ".    set i 1.  
2fa20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63  } else {.    inc
2fa30 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74  r i.  }.  hd_put
2fa40 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a  s "$word<br>\n".
2fa50 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f  }.</tcl>.</td></
2fa60 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f  tr></table></blo
2fa70 63 6b 71 75 6f 74 65 3e 29 5e 0a                 ckquote>)^.