Documentation Source Text

Hex Artifact Content
Login

Artifact d1e5dd4d3b61f9cf46e1896310052248bc92ab80:


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 0a 52 65 63 75 72 73 69 76 65  n-stmt.Recursive
2e70: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f  BubbleDiagram co
2e80: 6d 6d 69 74 2d 73 74 6d 74 0a 52 65 63 75 72 73  mmit-stmt.Recurs
2e90: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
2ea0: 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c   rollback-stmt.<
2eb0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63  /tcl>..<p>.^No c
2ec0: 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61  hanges can be ma
2ed0: 64 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  de to the databa
2ee0: 73 65 20 65 78 63 65 70 74 20 77 69 74 68 69 6e  se except within
2ef0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
2f00: 5e 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61  ^Any command tha
2f10: 74 20 63 68 61 6e 67 65 73 20 74 68 65 20 64 61  t changes the da
2f20: 74 61 62 61 73 65 20 28 62 61 73 69 63 61 6c 6c  tabase (basicall
2f30: 79 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61  y, any SQL comma
2f40: 6e 64 0a 6f 74 68 65 72 20 74 68 61 6e 20 5b 53  nd.other than [S
2f50: 45 4c 45 43 54 5d 29 20 77 69 6c 6c 20 61 75 74  ELECT]) will aut
2f60: 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74  omatically start
2f70: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
2f80: 66 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72  f.one is not alr
2f90: 65 61 64 79 20 69 6e 20 65 66 66 65 63 74 2e 20  eady in effect. 
2fa0: 20 5e 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20   ^Automatically 
2fb0: 73 74 61 72 74 65 64 20 74 72 61 6e 73 61 63 74  started transact
2fc0: 69 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74  ions.are committ
2fd0: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
2fe0: 20 71 75 65 72 79 20 66 69 6e 69 73 68 65 73 2e   query finishes.
2ff0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e  .</p>..<p>.^Tran
3000: 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  sactions can be 
3010: 73 74 61 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79  started manually
3020: 20 75 73 69 6e 67 20 74 68 65 20 42 45 47 49 4e   using the BEGIN
3030: 0a 63 6f 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63  .command.  ^(Suc
3040: 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 75  h transactions u
3050: 73 75 61 6c 6c 79 20 70 65 72 73 69 73 74 20 75  sually persist u
3060: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f  ntil the next.CO
3070: 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  MMIT or ROLLBACK
3080: 20 63 6f 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61   command.  But a
3090: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c   transaction wil
30a0: 6c 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b  l also .ROLLBACK
30b0: 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
30c0: 20 69 73 20 63 6c 6f 73 65 64 20 6f 72 20 69 66   is closed or if
30d0: 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
30e0: 0a 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43  .and the ROLLBAC
30f0: 4b 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  K conflict resol
3100: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
3110: 69 73 20 73 70 65 63 69 66 69 65 64 2e 29 5e 0a  is specified.)^.
3120: 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65 6e 74  See the document
3130: 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e  ation on the [ON
3140: 20 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73   CONFLICT].claus
3150: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
3160: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
3170: 75 74 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a  ut the ROLLBACK.
3180: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
3190: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c  ion algorithm..<
31a0: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52  /p>..<p>.^END TR
31b0: 41 4e 53 41 43 54 49 4f 4e 20 69 73 20 61 6e 20  ANSACTION is an 
31c0: 61 6c 69 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54  alias for COMMIT
31d0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72  ..</p>..<p> ^(Tr
31e0: 61 6e 73 61 63 74 69 6f 6e 73 20 63 72 65 61 74  ansactions creat
31f0: 65 64 20 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e  ed using BEGIN..
3200: 2e 43 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e  .COMMIT do not n
3210: 65 73 74 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74  est.)^.^For nest
3220: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c  ed transactions,
3230: 20 75 73 65 20 74 68 65 20 5b 53 41 56 45 50 4f   use the [SAVEPO
3240: 49 4e 54 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53  INT] and [RELEAS
3250: 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65  E] commands..The
3260: 20 22 54 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c   "TO SAVEPOINT <
3270: 69 3e 6e 61 6d 65 3c 2f 69 3e 22 20 63 6c 61 75  i>name</i>" clau
3280: 73 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41  se of the ROLLBA
3290: 43 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e  CK command shown
32a0: 0a 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64  .in the syntax d
32b0: 69 61 67 72 61 6d 20 61 62 6f 76 65 20 69 73 20  iagram above is 
32c0: 6f 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c 65 20  only applicable 
32d0: 74 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d 0a 74  to [SAVEPOINT].t
32e0: 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 41  ransactions.  ^A
32f0: 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 76  n attempt to inv
3300: 6f 6b 65 20 74 68 65 20 42 45 47 49 4e 20 63 6f  oke the BEGIN co
3310: 6d 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61 20 74  mmand within.a t
3320: 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20  ransaction will 
3330: 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72  fail with an err
3340: 6f 72 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  or, regardless o
3350: 66 20 77 68 65 74 68 65 72 0a 74 68 65 20 74 72  f whether.the tr
3360: 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 73 74  ansaction was st
3370: 61 72 74 65 64 20 62 79 20 5b 53 41 56 45 50 4f  arted by [SAVEPO
3380: 49 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f 72 20  INT] or a prior 
3390: 42 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d  BEGIN..^The COMM
33a0: 49 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74  IT command and t
33b0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
33c0: 61 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20  and without the 
33d0: 54 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b 20 74  TO clause.work t
33e0: 68 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41 56 45  he same on [SAVE
33f0: 50 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63 74 69  POINT] transacti
3400: 6f 6e 73 20 61 73 20 74 68 65 79 20 64 6f 20 77  ons as they do w
3410: 69 74 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ith transactions
3420: 0a 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49  .started by BEGI
3430: 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  N.</p>..<tcl>hd_
3440: 66 72 61 67 6d 65 6e 74 20 69 6d 6d 65 64 69 61  fragment immedia
3450: 74 65 20 7b 42 45 47 49 4e 20 49 4d 4d 45 44 49  te {BEGIN IMMEDI
3460: 41 54 45 7d 20 7b 42 45 47 49 4e 20 45 58 43 4c  ATE} {BEGIN EXCL
3470: 55 53 49 56 45 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  USIVE}</tcl>.<p>
3480: 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63  .^Transactions c
3490: 61 6e 20 62 65 20 64 65 66 65 72 72 65 64 2c 20  an be deferred, 
34a0: 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20 65 78  immediate, or ex
34b0: 63 6c 75 73 69 76 65 2e 20 20 0a 5e 54 68 65 20  clusive.  .^The 
34c0: 64 65 66 61 75 6c 74 20 74 72 61 6e 73 61 63 74  default transact
34d0: 69 6f 6e 20 62 65 68 61 76 69 6f 72 20 69 73 20  ion behavior is 
34e0: 64 65 66 65 72 72 65 64 2e 0a 5e 44 65 66 65 72  deferred..^Defer
34f0: 72 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20 6e  red means that n
3500: 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71 75  o locks are acqu
3510: 69 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74 61  ired.on the data
3520: 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20 64  base until the d
3530: 61 74 61 62 61 73 65 20 69 73 20 66 69 72 73 74  atabase is first
3540: 20 61 63 63 65 73 73 65 64 2e 20 20 5e 54 68 75   accessed.  ^Thu
3550: 73 20 77 69 74 68 20 61 0a 64 65 66 65 72 72 65  s with a.deferre
3560: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  d transaction, t
3570: 68 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65  he BEGIN stateme
3580: 6e 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20 6e  nt itself does n
3590: 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 0a 66 69  othing to the.fi
35a0: 6c 65 73 79 73 74 65 6d 2e 20 20 5e 4c 6f 63 6b  lesystem.  ^Lock
35b0: 73 0a 61 72 65 20 6e 6f 74 20 61 63 71 75 69 72  s.are not acquir
35c0: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72  ed until the fir
35d0: 73 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  st read or write
35e0: 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 5e 54 68   operation.  ^Th
35f0: 65 20 66 69 72 73 74 20 72 65 61 64 0a 6f 70 65  e first read.ope
3600: 72 61 74 69 6f 6e 20 61 67 61 69 6e 73 74 20 61  ration against a
3610: 20 64 61 74 61 62 61 73 65 20 63 72 65 61 74 65   database create
3620: 73 20 61 20 5b 53 48 41 52 45 44 5d 20 6c 6f 63  s a [SHARED] loc
3630: 6b 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 0a  k and the first.
3640: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20  write operation 
3650: 63 72 65 61 74 65 73 20 61 20 5b 52 45 53 45 52  creates a [RESER
3660: 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20 5e 42 65  VED] lock.   ^Be
3670: 63 61 75 73 65 20 74 68 65 20 61 63 71 75 69 73  cause the acquis
3680: 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73 20 69  ition of.locks i
3690: 73 20 64 65 66 65 72 72 65 64 20 75 6e 74 69 6c  s deferred until
36a0: 20 74 68 65 79 20 61 72 65 20 6e 65 65 64 65 64   they are needed
36b0: 2c 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  , it is possible
36c0: 20 74 68 61 74 20 61 6e 6f 74 68 65 72 0a 74 68   that another.th
36d0: 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20  read or process 
36e0: 63 6f 75 6c 64 20 63 72 65 61 74 65 20 61 20 73  could create a s
36f0: 65 70 61 72 61 74 65 20 74 72 61 6e 73 61 63 74  eparate transact
3700: 69 6f 6e 20 61 6e 64 20 77 72 69 74 65 20 74 6f  ion and write to
3710: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 61 66  .the database af
3720: 74 65 72 20 74 68 65 20 42 45 47 49 4e 20 6f 6e  ter the BEGIN on
3730: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 68 72   the current thr
3740: 65 61 64 20 68 61 73 20 65 78 65 63 75 74 65 64  ead has executed
3750: 2e 0a 5e 49 66 20 74 68 65 20 74 72 61 6e 73 61  ..^If the transa
3760: 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64 69 61  ction is immedia
3770: 74 65 2c 20 74 68 65 6e 20 5b 52 45 53 45 52 56  te, then [RESERV
3780: 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65 20 61 63  ED] locks.are ac
3790: 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61  quired on all da
37a0: 74 61 62 61 73 65 73 20 61 73 20 73 6f 6f 6e 20  tabases as soon 
37b0: 61 73 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d  as the BEGIN com
37c0: 6d 61 6e 64 20 69 73 0a 65 78 65 63 75 74 65 64  mand is.executed
37d0: 2c 20 77 69 74 68 6f 75 74 20 77 61 69 74 69 6e  , without waitin
37e0: 67 20 66 6f 72 20 74 68 65 0a 64 61 74 61 62 61  g for the.databa
37f0: 73 65 20 74 6f 20 62 65 20 75 73 65 64 2e 20 20  se to be used.  
3800: 5e 41 66 74 65 72 20 61 20 42 45 47 49 4e 20 49  ^After a BEGIN I
3810: 4d 4d 45 44 49 41 54 45 2c 20 0a 6e 6f 20 6f 74  MMEDIATE, .no ot
3820: 68 65 72 20 5b 64 61 74 61 62 61 73 65 20 63 6f  her [database co
3830: 6e 6e 65 63 74 69 6f 6e 5d 20 77 69 6c 6c 20 62  nnection] will b
3840: 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20  e able to write 
3850: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
3860: 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e 20 49 4d  or.do a BEGIN IM
3870: 4d 45 44 49 41 54 45 20 6f 72 20 42 45 47 49 4e  MEDIATE or BEGIN
3880: 20 45 58 43 4c 55 53 49 56 45 2e 20 20 5e 4f 74   EXCLUSIVE.  ^Ot
3890: 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 63 61  her processes ca
38a0: 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f 20 72 65  n continue.to re
38b0: 61 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ad from the data
38c0: 62 61 73 65 2c 20 68 6f 77 65 76 65 72 2e 20 20  base, however.  
38d0: 5e 41 6e 20 65 78 63 6c 75 73 69 76 65 20 74 72  ^An exclusive tr
38e0: 61 6e 73 61 63 74 69 6f 6e 20 63 61 75 73 65 73  ansaction causes
38f0: 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20 6c 6f 63  .[EXCLUSIVE] loc
3900: 6b 73 20 74 6f 20 62 65 20 61 63 71 75 69 72 65  ks to be acquire
3910: 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73  d on all databas
3920: 65 73 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45  es.  ^After a BE
3930: 47 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c 20 6e  GIN.EXCLUSIVE, n
3940: 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73  o other [databas
3950: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 65 78  e connection] ex
3960: 63 65 70 74 20 66 6f 72 20 5b 72 65 61 64 5f 75  cept for [read_u
3970: 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a 63 6f 6e 6e  ncommitted].conn
3980: 65 63 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20  ections will be 
3990: 61 62 6c 65 20 74 6f 20 72 65 61 64 20 74 68 65  able to read the
39a0: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 6e 6f   database and no
39b0: 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f   other connectio
39c0: 6e 20 77 69 74 68 6f 75 74 0a 65 78 63 65 70 74  n without.except
39d0: 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 62 6c 65  ion will be able
39e0: 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 64 61   to write the da
39f0: 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65  tabase until the
3a00: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
3a10: 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e 0a 0a  complete..</p>..
3a20: 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c 69 63 69  <p>.^(An implici
3a30: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 28 61  t transaction (a
3a40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
3a50: 74 20 69 73 20 73 74 61 72 74 65 64 20 61 75 74  t is started aut
3a60: 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e 6f 74 20  omatically,.not 
3a70: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  a transaction st
3a80: 61 72 74 65 64 20 62 79 20 42 45 47 49 4e 29 20  arted by BEGIN) 
3a90: 69 73 20 63 6f 6d 6d 69 74 74 65 64 20 61 75 74  is committed aut
3aa0: 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 0a  omatically when.
3ab0: 74 68 65 20 6c 61 73 74 20 61 63 74 69 76 65 20  the last active 
3ac0: 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68  statement finish
3ad0: 65 73 2e 20 20 41 20 73 74 61 74 65 6d 65 6e 74  es.  A statement
3ae0: 20 66 69 6e 69 73 68 65 73 20 77 68 65 6e 20 69   finishes when i
3af0: 74 73 0a 70 72 65 70 61 72 65 64 20 73 74 61 74  ts.prepared stat
3b00: 65 6d 65 6e 74 20 69 73 20 5b 73 71 6c 69 74 65  ement is [sqlite
3b10: 33 5f 72 65 73 65 74 28 29 20 7c 20 72 65 73 65  3_reset() | rese
3b20: 74 5d 20 6f 72 0a 5b 73 71 6c 69 74 65 33 5f 66  t] or.[sqlite3_f
3b30: 69 6e 61 6c 69 7a 65 28 29 20 7c 20 66 69 6e 61  inalize() | fina
3b40: 6c 69 7a 65 64 5d 2e 20 20 41 6e 20 6f 70 65 6e  lized].  An open
3b50: 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 20   [sqlite3_blob] 
3b60: 75 73 65 64 20 66 6f 72 0a 69 6e 63 72 65 6d 65  used for.increme
3b70: 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 20 63 6f  ntal BLOB I/O co
3b80: 75 6e 74 73 20 61 73 20 61 6e 20 75 6e 66 69 6e  unts as an unfin
3b90: 69 73 68 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  ished statement.
3ba0: 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 62    The [sqlite3_b
3bb0: 6c 6f 62 5d 0a 66 69 6e 69 73 68 65 73 20 77 68  lob].finishes wh
3bc0: 65 6e 20 69 74 20 69 73 20 5b 73 71 6c 69 74 65  en it is [sqlite
3bd0: 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 29 20 7c  3_blob_close() |
3be0: 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c 2f 70 3e   closed].)^.</p>
3bf0: 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65 78 70 6c 69  ..<p>.^The expli
3c00: 63 69 74 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61  cit COMMIT comma
3c10: 6e 64 20 72 75 6e 73 20 69 6d 6d 65 64 69 61 74  nd runs immediat
3c20: 65 6c 79 2c 20 65 76 65 6e 20 69 66 20 74 68 65  ely, even if the
3c30: 72 65 20 61 72 65 0a 70 65 6e 64 69 6e 67 20 5b  re are.pending [
3c40: 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
3c50: 74 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69  ts.  ^However, i
3c60: 66 20 74 68 65 72 65 20 61 72 65 20 70 65 6e 64  f there are pend
3c70: 69 6e 67 0a 77 72 69 74 65 20 6f 70 65 72 61 74  ing.write operat
3c80: 69 6f 6e 73 2c 20 74 68 65 20 43 4f 4d 4d 49 54  ions, the COMMIT
3c90: 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c 20 66 61   command.will fa
3ca0: 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
3cb0: 20 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f 42 55   code [SQLITE_BU
3cc0: 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  SY]..</p>..<p>.^
3cd0: 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 65 78  An attempt to ex
3ce0: 65 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d 69 67  ecute COMMIT mig
3cf0: 68 74 20 61 6c 73 6f 20 72 65 73 75 6c 74 20 69  ht also result i
3d00: 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42 55 53  n an [SQLITE_BUS
3d10: 59 5d 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 69  Y] return code.i
3d20: 66 20 61 6e 20 61 6e 6f 74 68 65 72 20 74 68 72  f an another thr
3d30: 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 68  ead or process h
3d40: 61 73 20 61 20 5b 73 68 61 72 65 64 20 6c 6f 63  as a [shared loc
3d50: 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  k] on the databa
3d60: 73 65 0a 74 68 61 74 20 70 72 65 76 65 6e 74 65  se.that prevente
3d70: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  d the database f
3d80: 72 6f 6d 20 62 65 69 6e 67 20 75 70 64 61 74 65  rom being update
3d90: 64 2e 20 20 5e 57 68 65 6e 20 43 4f 4d 4d 49 54  d.  ^When COMMIT
3da0: 20 66 61 69 6c 73 20 69 6e 20 74 68 69 73 0a 77   fails in this.w
3db0: 61 79 2c 20 74 68 65 20 74 72 61 6e 73 61 63 74  ay, the transact
3dc0: 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69  ion remains acti
3dd0: 76 65 20 61 6e 64 20 74 68 65 20 43 4f 4d 4d 49  ve and the COMMI
3de0: 54 20 63 61 6e 20 62 65 20 72 65 74 72 69 65 64  T can be retried
3df0: 20 6c 61 74 65 72 0a 61 66 74 65 72 20 74 68 65   later.after the
3e00: 20 72 65 61 64 65 72 20 68 61 73 20 68 61 64 20   reader has had 
3e10: 61 20 63 68 61 6e 63 65 20 74 6f 20 63 6c 65 61  a chance to clea
3e20: 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68  r..</p>..<p>.^Th
3e30: 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20  e ROLLBACK will 
3e40: 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72  fail with an err
3e50: 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f  or code [SQLITE_
3e60: 42 55 53 59 5d 20 69 66 20 74 68 65 72 65 0a 61  BUSY] if there.a
3e70: 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 71  re any pending q
3e80: 75 65 72 69 65 73 2e 20 20 5e 42 6f 74 68 20 72  ueries.  ^Both r
3e90: 65 61 64 2d 6f 6e 6c 79 20 61 6e 64 20 72 65 61  ead-only and rea
3ea0: 64 2f 77 72 69 74 65 20 71 75 65 72 69 65 73 20  d/write queries 
3eb0: 77 69 6c 6c 0a 63 61 75 73 65 20 61 20 52 4f 4c  will.cause a ROL
3ec0: 4c 42 41 43 4b 20 74 6f 20 66 61 69 6c 2e 20 20  LBACK to fail.  
3ed0: 41 20 52 4f 4c 4c 42 41 43 4b 20 6d 75 73 74 20  A ROLLBACK must 
3ee0: 66 61 69 6c 20 69 66 20 74 68 65 72 65 20 61 72  fail if there ar
3ef0: 65 20 70 65 6e 64 69 6e 67 0a 72 65 61 64 20 6f  e pending.read o
3f00: 70 65 72 61 74 69 6f 6e 73 20 28 75 6e 6c 69 6b  perations (unlik
3f10: 65 20 43 4f 4d 4d 49 54 20 77 68 69 63 68 20 63  e COMMIT which c
3f20: 61 6e 20 73 75 63 63 65 65 64 29 20 62 65 63 61  an succeed) beca
3f30: 75 73 65 20 62 61 64 20 74 68 69 6e 67 73 0a 77  use bad things.w
3f40: 69 6c 6c 20 68 61 70 70 65 6e 20 69 66 20 74 68  ill happen if th
3f50: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 6d 61 67  e in-memory imag
3f60: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
3f70: 65 20 69 73 20 63 68 61 6e 67 65 64 20 6f 75 74  e is changed out
3f80: 20 66 72 6f 6d 20 75 6e 64 65 72 0a 61 6e 20 61   from under.an a
3f90: 63 74 69 76 65 20 71 75 65 72 79 2e 0a 3c 2f 70  ctive query..</p
3fa0: 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47 4d  >..<p>.If [PRAGM
3fb0: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20  A journal_mode] 
3fc0: 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28 74  is set to OFF (t
3fd0: 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74 68  hus disabling th
3fe0: 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
3ff0: 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74 68  al.file) then th
4000: 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68  e behavior of th
4010: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
4020: 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  nd is undefined.
4030: 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70 6f  .</p>..<h3>Respo
4040: 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57 69  nse To Errors Wi
4050: 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74 69  thin A Transacti
4060: 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28 49  on</h3>..<p> ^(I
4070: 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73 20  f certain kinds 
4080: 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72 20  of errors occur 
4090: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
40a0: 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73 61  tion, the.transa
40b0: 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61 79  ction may or may
40c0: 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20 62   not be rolled b
40d0: 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ack automaticall
40e0: 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20 74  y.  The.errors t
40f0: 68 61 74 20 63 61 6e 20 63 61 75 73 65 20 61 6e  hat can cause an
4100: 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c 6c 62   automatic rollb
4110: 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e  ack include:</p>
4120: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c  ..<ul>.<li> [SQL
4130: 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74 61 62  ITE_FULL]: datab
4140: 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75 6c 6c  ase or disk full
4150: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4f  .<li> [SQLITE_IO
4160: 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f 20 65  ERR]: disk I/O e
4170: 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  rror.<li> [SQLIT
4180: 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62 61 73  E_BUSY]: databas
4190: 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e 6f 74  e in use by anot
41a0: 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c 69 3e  her process.<li>
41b0: 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a   [SQLITE_NOMEM]:
41c0: 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c   out or memory.<
41d0: 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4e 54 45  li> [SQLITE_INTE
41e0: 52 52 55 50 54 5d 3a 20 70 72 6f 63 65 73 73 69  RRUPT]: processi
41f0: 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69 6e 74 65  ng [sqlite3_inte
4200: 72 72 75 70 74 7c 69 6e 74 65 72 72 75 70 74 65  rrupt|interrupte
4210: 64 5d 0a 20 20 20 20 20 62 79 20 61 70 70 6c 69  d].     by appli
4220: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 0a 3c  cation request.<
4230: 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72  /ul>)^..<p>.^For
4240: 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65 72   all of these er
4250: 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74 74  rors, SQLite att
4260: 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a 75  empts to undo ju
4270: 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74 65  st the one state
4280: 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72 6b  ment.it was work
4290: 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76 65  ing on and leave
42a0: 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70 72   changes from pr
42b0: 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ior statements w
42c0: 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20 74  ithin the.same t
42d0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61 63  ransaction intac
42e0: 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 77  t and continue w
42f0: 69 74 68 20 74 68 65 20 74 72 61 6e 73 61 63 74  ith the transact
4300: 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  ion.  ^However, 
4310: 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68  .depending on th
4320: 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
4330: 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  g evaluated and 
4340: 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68 69  the point at whi
4350: 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63 63  ch the.error occ
4360: 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62 65  urs, it might be
4370: 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 53   necessary for S
4380: 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63  QLite to rollbac
4390: 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65  k and.cancel the
43a0: 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74   entire transact
43b0: 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c 69 63  ion.  ^An applic
43c0: 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77  ation can tell w
43d0: 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20 61  hich.course of a
43e0: 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f  ction SQLite too
43f0: 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a 5b  k by using the.[
4400: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
4410: 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67  commit()] C-lang
4420: 75 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e 3c  uage interface.<
4430: 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65  /p>..<p>It is re
4440: 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20 61  commended that a
4450: 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73 70  pplications resp
4460: 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f 72  ond to the error
4470: 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20 62  s.listed above b
4480: 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73 73  y explicitly iss
4490: 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20  uing a ROLLBACK 
44a0: 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20 74 68  command.  ^If th
44b0: 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 68  e .transaction h
44c0: 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
44d0: 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f  rolled back auto
44e0: 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74 68 65  matically.by the
44f0: 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c   error response,
4500: 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41   then the ROLLBA
4510: 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  CK command will 
4520: 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65 72 72  fail with an.err
4530: 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d 20  or, but no harm 
4540: 69 73 20 63 61 75 73 65 64 20 62 79 20 74 68 69  is caused by thi
4550: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72  s.</p>..<p>Futur
4560: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  e versions of SQ
4570: 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e 64 20  Lite may extend 
4580: 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72 72 6f  the list of erro
4590: 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74 20 63  rs which.might c
45a0: 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63 20 74  ause automatic t
45b0: 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62  ransaction rollb
45c0: 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76 65 72  ack.  Future ver
45d0: 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
45e0: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 68 65  might change the
45f0: 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e   error response.
4600: 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c    In particular,
4610: 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74   we may.choose t
4620: 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20 69  o simplify the i
4630: 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75 74 75  nterface in futu
4640: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
4650: 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69 6e 67  QLite by.causing
4660: 20 74 68 65 20 65 72 72 6f 72 73 20 61 62 6f 76   the errors abov
4670: 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e  e to force an un
4680: 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c  conditional roll
4690: 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  back.</p>..<tcl>
46a0: 0a 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 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46f0: 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f  .Section {SAVEPO
4700: 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b  INT} savepoint {
4710: 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45 41 53  SAVEPOINT RELEAS
4720: 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  E}..RecursiveBub
4730: 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65 70  bleDiagram savep
4740: 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75 72 73  oint-stmt.Recurs
4750: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
4760: 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 52 65   release-stmt.Re
4770: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
4780: 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74  gram rollback-st
4790: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e  mt.</tcl>..<p> ^
47a0: 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 61  SAVEPOINTs are a
47b0: 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61 74   method of creat
47c0: 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ing transactions
47d0: 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45  , similar to.[BE
47e0: 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54  GIN] and [COMMIT
47f0: 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ], except that t
4800: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e 64  he SAVEPOINT and
4810: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
4820: 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64 20  s.are named and 
4830: 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f  may be nested.</
4840: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56  p>..<p> ^The SAV
4850: 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73  EPOINT command s
4860: 74 61 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e  tarts a new tran
4870: 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20 6e  saction with a n
4880: 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61  ame..^The transa
4890: 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64  ction names need
48a0: 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a   not be unique..
48b0: 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63 61  ^(A SAVEPOINT ca
48c0: 6e 20 62 65 20 73 74 61 72 74 65 64 20 65 69 74  n be started eit
48d0: 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f 75  her within or ou
48e0: 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47 49  tside of.a [BEGI
48f0: 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e  N]...[COMMIT].)^
4900: 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45 50    ^(When a SAVEP
4910: 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74 65  OINT is the oute
4920: 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  r-most savepoint
4930: 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20 77  .and it is not w
4940: 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e  ithin a [BEGIN].
4950: 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20  ..[COMMIT] then 
4960: 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
4970: 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47 49  the.same as BEGI
4980: 4e 20 44 45 46 45 52 52 45 44 20 54 52 41 4e 53  N DEFERRED TRANS
4990: 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c  ACTION.)^</p>..<
49a0: 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20  p>^The ROLLBACK 
49b0: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72  TO command rever
49c0: 74 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  ts the state of 
49d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 62 61 63  the database bac
49e0: 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61 73  k to what.it was
49f0: 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20   just after the 
4a00: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53 41  corresponding SA
4a10: 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20  VEPOINT.  ^Note 
4a20: 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61 74  that unlike that
4a30: 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b  .plain [ROLLBACK
4a40: 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f  ] command (witho
4a50: 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f 72  ut the TO keywor
4a60: 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  d) the ROLLBACK 
4a70: 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20  TO command.does 
4a80: 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20 74  not cancel the t
4a90: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e  ransaction.  ^In
4aa0: 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c  stead of cancell
4ab0: 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63 74  ing the transact
4ac0: 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43  ion,.the ROLLBAC
4ad0: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73  K TO command res
4ae0: 74 61 72 74 73 20 74 68 65 20 74 72 61 6e 73 61  tarts the transa
4af0: 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20 74  ction again at t
4b00: 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41  he beginning..^A
4b10: 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 53  ll intervening S
4b20: 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63 61  AVEPOINTs are ca
4b30: 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e  nceled, however.
4b40: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45  </p>..<p>^The RE
4b50: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73  LEASE command is
4b60: 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d   like a [COMMIT]
4b70: 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54   for a SAVEPOINT
4b80: 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63  ..^The RELEASE c
4b90: 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61 6c  ommand causes al
4ba0: 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63  l savepoints bac
4bb0: 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  k to and includi
4bc0: 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65 63  ng the .most rec
4bd0: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77 69  ent savepoint wi
4be0: 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61  th a matching na
4bf0: 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64  me to be removed
4c00: 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73   from the .trans
4c10: 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e  action stack.  ^
4c20: 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20 61  The RELEASE of a
4c30: 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74  n inner transact
4c40: 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75  ion.does not cau
4c50: 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74  se any changes t
4c60: 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20  o be written to 
4c70: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
4c80: 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d  e; it merely.rem
4c90: 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20  oves savepoints 
4ca0: 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61 63  from the transac
4cb0: 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68 20  tion stack such 
4cc0: 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f  that it is.no lo
4cd0: 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74 6f  nger possible to
4ce0: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f   ROLLBACK TO tho
4cf0: 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e  se savepoints..^
4d00: 49 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  If a RELEASE com
4d10: 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68  mand releases th
4d20: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
4d30: 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74  point, so.that t
4d40: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
4d50: 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70  tack becomes emp
4d60: 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53 45  ty, then RELEASE
4d70: 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20   is the same.as 
4d80: 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b  [COMMIT]..^The [
4d90: 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20  COMMIT] command 
4da0: 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20 72  may be used to r
4db0: 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65 70  elease all savep
4dc0: 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74  oints and.commit
4dd0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4de0: 20 65 76 65 6e 20 69 66 20 74 68 65 20 74 72 61   even if the tra
4df0: 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72 69  nsaction was ori
4e00: 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64 0a  ginally started.
4e10: 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20 63  by a SAVEPOINT c
4e20: 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20 6f  ommand instead o
4e30: 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  f a [BEGIN] comm
4e40: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  and.</p>..<p>^If
4e50: 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e   the savepoint-n
4e60: 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53 45  ame in a RELEASE
4e70: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
4e80: 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76 65  t match any.save
4e90: 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  point currently 
4ea0: 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  in the transacti
4eb0: 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e  on stack, then n
4ec0: 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  o savepoints are
4ed0: 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20 64  .released, the d
4ee0: 61 74 61 62 61 73 65 20 69 73 20 75 6e 63 68 61  atabase is uncha
4ef0: 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52 45  nged, and the RE
4f00: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65  LEASE command re
4f10: 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c  turns.an error.<
4f20: 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68  /p>..<p>^Note th
4f30: 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e  at an inner tran
4f40: 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f  saction might co
4f50: 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65 20  mmit (using the 
4f60: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29  RELEASE command)
4f70: 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72 20  .but then later 
4f80: 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75 6e  have its work un
4f90: 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42 41  done by a ROLLBA
4fa0: 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74  CK in an outer t
4fb0: 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70  ransaction..^A p
4fc0: 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20  ower failure or 
4fd0: 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f 72  program crash or
4fe0: 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20 63   OS crash will c
4ff0: 61 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d 6d  ause the outer-m
5000: 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost.transaction 
5010: 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64  to rollback, und
5020: 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 73  oing all changes
5030: 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72   that have occur
5040: 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74 20  red within.that 
5050: 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f  outer transactio
5060: 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73 20  n, even changes 
5070: 74 68 61 74 20 68 61 76 65 20 73 75 70 70 6f 73  that have suppos
5080: 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69  edly been "commi
5090: 74 74 65 64 22 0a 62 79 20 74 68 65 20 52 45 4c  tted".by the REL
50a0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e  EASE command.  ^
50b0: 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 61  Content is not a
50c0: 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65  ctually committe
50d0: 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a 75  d on the disk .u
50e0: 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f  ntil the outermo
50f0: 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  st transaction c
5100: 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ommits.</p>..<p>
5110: 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61  There are severa
5120: 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b 69  l ways of thinki
5130: 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52 45 4c  ng about the REL
5140: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70  EASE command:</p
5150: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a  >..<ul>.<li><p>.
5160: 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65 77  Some people view
5170: 20 52 45 4c 45 41 53 45 20 61 73 20 74 68 65 20   RELEASE as the 
5180: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f  equivalent of CO
5190: 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45 50  MMIT for a SAVEP
51a0: 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61 6e  OINT..This is an
51b0: 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69 6e   acceptable poin
51c0: 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f 6e  t of view as lon
51d0: 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65  g as one remembe
51e0: 72 73 20 74 68 61 74 20 74 68 65 0a 63 68 61 6e  rs that the.chan
51f0: 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62 79  ges committed by
5200: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
5210: 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65  ction might late
5220: 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20 61  r be undone by a
5230: 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20  .rollback in an 
5240: 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f  outer transactio
5250: 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  n.</p></li>..<li
5260: 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65  ><p>.Another vie
5270: 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73 20  w of RELEASE is 
5280: 74 68 61 74 20 69 74 20 6d 65 72 67 65 73 20 61  that it merges a
5290: 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69   named transacti
52a0: 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72 65  on into its.pare
52b0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  nt transaction, 
52c0: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65  so that the name
52d0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  d transaction an
52e0: 64 20 69 74 73 20 70 61 72 65 6e 74 20 62 65 63  d its parent bec
52f0: 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72 61  ome.the same tra
5300: 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65 72  nsaction.  After
5310: 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e 61   RELEASE, the na
5320: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
5330: 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a 77  and its parent.w
5340: 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f  ill commit or ro
5350: 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72 2c  llback together,
5360: 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72 20   whatever their 
5370: 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70  fate may be..</p
5380: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
5390: 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68 69  One can also thi
53a0: 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 73  nk of savepoints
53b0: 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74   as."marks" in t
53c0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  he transaction t
53d0: 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69  imeline.  In thi
53e0: 73 20 76 69 65 77 2c 20 74 68 65 20 53 41 56 45  s view, the SAVE
53f0: 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72  POINT command.cr
5400: 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72 6b  eates a new mark
5410: 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  , the ROLLBACK T
5420: 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64  O command rewind
5430: 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 62  s the timeline b
5440: 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a  ack.to a point j
5450: 75 73 74 20 61 66 74 65 72 20 74 68 65 20 6e 61  ust after the na
5460: 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68  med mark, and th
5470: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
5480: 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20 66  d.erases marks f
5490: 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65  rom the timeline
54a0: 20 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c   without actuall
54b0: 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61  y making any.cha
54c0: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61  nges to the data
54d0: 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a  base..</p></li>.
54e0: 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61  </ul>....<h3>Tra
54f0: 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67  nsaction Nesting
5500: 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e   Rules</h3>..<p>
5510: 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73 61  ^The last transa
5520: 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77 69  ction started wi
5530: 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73 74 0a  ll be the first.
5540: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
5550: 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20  itted or rolled 
5560: 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  back.</p>..<p>^T
5570: 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61  he [BEGIN] comma
5580: 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66  nd only works if
5590: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
55a0: 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79 2c   stack is empty,
55b0: 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72   or.in other wor
55c0: 64 73 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ds if there are 
55d0: 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e 73  no pending trans
55e0: 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68  actions.  ^If th
55f0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74  e transaction.st
5600: 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ack is not empty
5610: 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49 4e   when the [BEGIN
5620: 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76  ] command is inv
5630: 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63  oked, then the c
5640: 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69 74  ommand.fails wit
5650: 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a  h an error.</p>.
5660: 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54  .<p>^The [COMMIT
5670: 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74  ] command commit
5680: 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e  s all outstandin
5690: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  g transactions a
56a0: 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74 72  nd leaves.the tr
56b0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
56c0: 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  empty.</p>..<p>^
56d0: 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  The RELEASE comm
56e0: 61 6e 64 20 73 74 61 72 74 73 20 77 69 74 68 20  and starts with 
56f0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
5700: 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a  addition to the.
5710: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
5720: 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20 73  k and releases s
5730: 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77 61  avepoints backwa
5740: 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74  rds .in time unt
5750: 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20 61  il it releases a
5760: 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20   savepoint with 
5770: 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70  a matching savep
5780: 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f  oint-name..^Prio
5790: 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65 76  r savepoints, ev
57a0: 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69  en savepoints wi
57b0: 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65  th matching save
57c0: 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65  point-names, are
57d0: 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20  .unchanged..^If 
57e0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
57f0: 61 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a 74  and causes the.t
5800: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
5810: 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74 79   to become empty
5820: 20 28 69 66 20 74 68 65 20 52 45 4c 45 41 53 45   (if the RELEASE
5830: 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65   command release
5840: 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20  s the.outermost 
5850: 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d  transaction from
5860: 20 74 68 65 20 73 74 61 63 6b 29 20 74 68 65 6e   the stack) then
5870: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
5880: 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c   commits.</p>..<
5890: 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b  p>^The [ROLLBACK
58a0: 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75  ] command withou
58b0: 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f  t a TO clause ro
58c0: 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74 72  lls backs all tr
58d0: 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c  ansactions.and l
58e0: 65 61 76 65 73 20 74 68 65 20 74 72 61 6e 73 61  eaves the transa
58f0: 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74  ction stack empt
5900: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  y.</p>..<p>^The 
5910: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
5920: 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75 73   with a TO claus
5930: 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61  e rolls back tra
5940: 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a  nsactions going.
5950: 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69 6d  backwards in tim
5960: 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f  e back to the mo
5970: 73 74 20 72 65 63 65 6e 74 20 53 41 56 45 50 4f  st recent SAVEPO
5980: 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63 68  INT with a match
5990: 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53  ing name..^The S
59a0: 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74 68  AVEPOINT with th
59b0: 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20  e matching name 
59c0: 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20 74  remains on the t
59d0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
59e0: 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62 61  ,.but all databa
59f0: 73 65 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  se changes that 
5a00: 6f 63 63 75 72 72 65 64 20 61 66 74 65 72 20 74  occurred after t
5a10: 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77 61  hat SAVEPOINT wa
5a20: 73 20 63 72 65 61 74 65 64 0a 61 72 65 20 72 6f  s created.are ro
5a30: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20  lled back.  ^If 
5a40: 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61  the savepoint-na
5a50: 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b  me in a ROLLBACK
5a60: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73   TO command does
5a70: 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20 53   not.match any S
5a80: 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20  AVEPOINT on the 
5a90: 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65 20  stack, then the 
5aa0: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
5ab0: 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a 65   fails with an.e
5ac0: 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73 20  rror and leaves 
5ad0: 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
5ae0: 20 64 61 74 61 62 61 73 65 20 75 6e 63 68 61 6e   database unchan
5af0: 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ged.</p>..<tcl>.
5b00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
5b50: 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20  Section comment 
5b60: 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74  comment {comment
5b70: 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65 63   *comments}..Rec
5b80: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
5b90: 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74  ram comment-synt
5ba0: 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 43  ax.</tcl>..<p>^C
5bb0: 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 20  omments are not 
5bc0: 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75  SQL commands, bu
5bd0: 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74 68  t can occur with
5be0: 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a 53  in the text of.S
5bf0: 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73 65  QL queries passe
5c00: 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70 72  d to [sqlite3_pr
5c10: 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64 20  epare_v2()] and 
5c20: 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61 63  related interfac
5c30: 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61 72  es..^Comments ar
5c40: 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68 69  e treated as whi
5c50: 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20 70  tespace by the p
5c60: 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74 73  arser..^Comments
5c70: 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77 68   can begin anywh
5c80: 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20 0a  ere whitespace .
5c90: 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e  can be found, in
5ca0: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
5cb0: 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
5cc0: 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69  span multiple li
5cd0: 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53  nes..</p>..<p>^S
5ce0: 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69  QL comments begi
5cf0: 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73 65  n with two conse
5d00: 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72 61  cutive "-" chara
5d10: 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78 32  cters (ASCII 0x2
5d20: 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75 70  d).and extend up
5d30: 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e   to and includin
5d40: 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c 69  g the next newli
5d50: 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41 53  ne character (AS
5d60: 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e 74  CII 0x0a).or unt
5d70: 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e  il the end of in
5d80: 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20 63  put, whichever c
5d90: 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e 0a  omes first.</p>.
5da0: 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f 6d  .<p>^C-style com
5db0: 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74 68  ments begin.with
5dc0: 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e 64   "/*" and extend
5dd0: 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75   up to and inclu
5de0: 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22 2a  ding the next "*
5df0: 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61 69  /" character pai
5e00: 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65  r.or until the e
5e10: 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69  nd of input, whi
5e20: 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72  chever comes fir
5e30: 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63 6f  st.  ^C-style co
5e40: 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e 20  mments.can span 
5e50: 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 20  multiple lines. 
5e60: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e  </p>..<p>^Commen
5e70: 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61 6e  ts can appear an
5e80: 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61 63  ywhere whitespac
5e90: 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e 63  e can occur,.inc
5ea0: 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78  luding inside ex
5eb0: 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69 6e  pressions and in
5ec0: 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f   the middle of o
5ed0: 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65  ther SQL stateme
5ee0: 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 64  nts..^Comments d
5ef0: 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e  o not nest..</p>
5f00: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
5f10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f50: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
5f60: 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20 63  {CREATE INDEX} c
5f70: 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52 45  reateindex {{CRE
5f80: 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52 65 63  ATE INDEX}}..Rec
5f90: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
5fa0: 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65 78  ram create-index
5fb0: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
5fc0: 3e 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e 44  >^The CREATE IND
5fd0: 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69  EX command consi
5fe0: 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77 6f  sts of the keywo
5ff0: 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44 45  rds "CREATE INDE
6000: 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74  X" followed.by t
6010: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e  he name of the n
6020: 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b 65  ew index, the ke
6030: 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65 20  yword "ON", the 
6040: 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69 6f  name of a previo
6050: 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61 62  usly.created tab
6060: 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65  le that is to be
6070: 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61 20   indexed, and a 
6080: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
6090: 73 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66 0a 63  st of names of.c
60a0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
60b0: 62 6c 65 20 74 68 61 74 20 61 72 65 20 75 73 65  ble that are use
60c0: 64 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78 20  d for the index 
60d0: 6b 65 79 2e 0a 49 66 20 74 68 65 20 6f 70 74 69  key..If the opti
60e0: 6f 6e 61 6c 20 57 48 45 52 45 20 63 6c 61 75 73  onal WHERE claus
60f0: 65 20 69 73 20 69 6e 63 6c 75 64 65 64 2c 20 74  e is included, t
6100: 68 65 6e 20 74 68 65 20 69 6e 64 65 78 20 69 73  hen the index is
6110: 20 61 20 22 5b 70 61 72 74 69 61 6c 20 69 6e 64   a "[partial ind
6120: 65 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ex]"..</p>..<tcl
6130: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 64 65  >hd_fragment {de
6140: 73 63 69 64 78 7d 20 7b 64 65 73 63 65 6e 64 69  scidx} {descendi
6150: 6e 67 20 69 6e 64 69 63 65 73 7d 20 7b 64 65 73  ng indices} {des
6160: 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 7d 3c 2f  cending index}</
6170: 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63 68 20 63 6f  tcl>.<p>^Each co
6180: 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65  lumn name can be
6190: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65   followed by one
61a0: 20 6f 66 20 74 68 65 20 22 41 53 43 22 20 6f 72   of the "ASC" or
61b0: 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72 64 73   "DESC" keywords
61c0: 0a 74 6f 20 69 6e 64 69 63 61 74 65 20 73 6f 72  .to indicate sor
61d0: 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 73  t order.  ^The s
61e0: 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20 6f 72  ort order may or
61f0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f   may not be igno
6200: 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e  red depending.on
6210: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6220: 6c 65 20 66 6f 72 6d 61 74 2c 20 61 6e 64 20 69  le format, and i
6230: 6e 20 70 61 72 74 69 63 75 6c 61 72 20 74 68 65  n particular the
6240: 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20   [schema format 
6250: 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68 65 20 22 6c  number]..^The "l
6260: 65 67 61 63 79 22 20 73 63 68 65 6d 61 20 66 6f  egacy" schema fo
6270: 72 6d 61 74 20 28 31 29 20 69 67 6e 6f 72 65 73  rmat (1) ignores
6280: 20 69 6e 64 65 78 0a 73 6f 72 74 20 6f 72 64 65   index.sort orde
6290: 72 2e 20 20 5e 54 68 65 20 64 65 73 63 65 6e 64  r.  ^The descend
62a0: 69 6e 67 20 69 6e 64 65 78 20 73 63 68 65 6d 61  ing index schema
62b0: 20 66 6f 72 6d 61 74 20 28 34 29 20 74 61 6b 65   format (4) take
62c0: 73 20 69 6e 64 65 78 20 73 6f 72 74 20 6f 72 64  s index sort ord
62d0: 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2e  er.into account.
62e0: 20 20 4f 6e 6c 79 20 76 65 72 73 69 6f 6e 73 20    Only versions 
62f0: 6f 66 20 53 51 4c 69 74 65 20 33 2e 33 2e 30 20  of SQLite 3.3.0 
6300: 61 6e 64 20 6c 61 74 65 72 20 61 72 65 20 61 62  and later are ab
6310: 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61 6e 64  le to understand
6320: 0a 74 68 65 20 64 65 73 63 65 6e 64 69 6e 67 20  .the descending 
6330: 69 6e 64 65 78 20 66 6f 72 6d 61 74 2e 20 46 6f  index format. Fo
6340: 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c  r compatibility,
6350: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
6360: 74 65 20 62 65 74 77 65 65 6e 20 33 2e 33 2e 30  te between 3.3.0
6370: 0a 61 6e 64 20 33 2e 37 2e 39 20 75 73 65 20 74  .and 3.7.9 use t
6380: 68 65 20 6c 65 67 61 63 79 20 73 63 68 65 6d 61  he legacy schema
6390: 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61 75   format by defau
63a0: 6c 74 2e 20 20 54 68 65 20 6e 65 77 65 72 20 73  lt.  The newer s
63b0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 0a  chema format is.
63c0: 75 73 65 64 20 62 79 20 64 65 66 61 75 6c 74 20  used by default 
63d0: 69 6e 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 31  in version 3.7.1
63e0: 30 20 61 6e 64 20 6c 61 74 65 72 2e 0a 5e 54 68  0 and later..^Th
63f0: 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66  e [legacy_file_f
6400: 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63 61  ormat pragma] ca
6410: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 68 61  n be used to cha
6420: 6e 67 65 20 73 65 74 20 74 68 65 20 73 70 65 63  nge set the spec
6430: 69 66 69 63 0a 62 65 68 61 76 69 6f 72 20 66 6f  ific.behavior fo
6440: 72 20 61 6e 79 20 76 65 72 73 69 6f 6e 20 6f 66  r any version of
6450: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
6460: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
6470: 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  ause optionally 
6480: 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20 63  following each c
6490: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e  olumn name defin
64a0: 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  es a.collating s
64b0: 65 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72  equence used for
64c0: 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e   text entries in
64d0: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54   that column..^T
64e0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
64f0: 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73  ting.sequence is
6500: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
6510: 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20  equence defined 
6520: 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20  for that column 
6530: 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54  in the.[CREATE T
6540: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
6550: 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c    ^Or if no coll
6560: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
6570: 73 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69  s otherwise defi
6580: 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69  ned,.the built-i
6590: 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  n BINARY collati
65a0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
65b0: 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sed.</p>..<p>The
65c0: 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72  re are no arbitr
65d0: 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68  ary limits on th
65e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 69  e number of indi
65f0: 63 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a  ces that can be.
6600: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 73 69  attached to a si
6610: 6e 67 6c 65 20 74 61 62 6c 65 2e 20 20 5e 28 54  ngle table.  ^(T
6620: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
6630: 75 6d 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  umns in an index
6640: 20 69 73 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20   is .limited to 
6650: 74 68 65 20 76 61 6c 75 65 20 73 65 74 20 62 79  the value set by
6660: 0a 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d  .[sqlite3_limit]
6670: 28 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43  ([SQLITE_LIMIT_C
6680: 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f  OLUMN],...).)^</
6690: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
66a0: 6d 65 6e 74 20 75 6e 69 71 75 65 69 64 78 20 7b  ment uniqueidx {
66b0: 75 6e 69 71 75 65 20 69 6e 64 65 78 7d 3c 2f 74  unique index}</t
66c0: 63 6c 3e 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55  cl>.<p>^If the U
66d0: 4e 49 51 55 45 20 6b 65 79 77 6f 72 64 20 61 70  NIQUE keyword ap
66e0: 70 65 61 72 73 20 62 65 74 77 65 65 6e 20 43 52  pears between CR
66f0: 45 41 54 45 20 61 6e 64 20 49 4e 44 45 58 20 74  EATE and INDEX t
6700: 68 65 6e 20 64 75 70 6c 69 63 61 74 65 0a 69 6e  hen duplicate.in
6710: 64 65 78 20 65 6e 74 72 69 65 73 20 61 72 65 20  dex entries are 
6720: 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41  not allowed.  ^A
6730: 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e  ny attempt to in
6740: 73 65 72 74 20 61 20 64 75 70 6c 69 63 61 74 65  sert a duplicate
6750: 20 65 6e 74 72 79 0a 77 69 6c 6c 20 72 65 73 75   entry.will resu
6760: 6c 74 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20  lt in an error. 
6770: 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
6780: 65 73 20 6f 66 20 75 6e 69 71 75 65 20 69 6e 64  es of unique ind
6790: 69 63 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76  ices, all NULL v
67a0: 61 6c 75 65 73 0a 61 72 65 20 63 6f 6e 73 69 64  alues.are consid
67b0: 65 72 65 64 20 74 6f 20 64 69 66 66 65 72 65 6e  ered to differen
67c0: 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72  t from all other
67d0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64   NULL values and
67e0: 20 61 72 65 20 74 68 75 73 20 75 6e 69 71 75 65   are thus unique
67f0: 2e 0a 54 68 69 73 20 69 73 20 6f 6e 65 20 6f 66  ..This is one of
6800: 20 74 68 65 20 74 77 6f 20 70 6f 73 73 69 62 6c   the two possibl
6810: 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
6820: 73 20 6f 66 20 74 68 65 20 53 51 4c 2d 39 32 20  s of the SQL-92 
6830: 73 74 61 6e 64 61 72 64 0a 28 74 68 65 20 6c 61  standard.(the la
6840: 6e 67 75 61 67 65 20 69 6e 20 74 68 65 20 73 74  nguage in the st
6850: 61 6e 64 61 72 64 20 69 73 20 61 6d 62 69 67 75  andard is ambigu
6860: 6f 75 73 29 20 61 6e 64 20 69 73 20 74 68 65 20  ous) and is the 
6870: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 0a 66  interpretation.f
6880: 6f 6c 6c 6f 77 65 64 20 62 79 20 50 6f 73 74 67  ollowed by Postg
6890: 72 65 53 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69  reSQL, MySQL, Fi
68a0: 72 65 62 69 72 64 2c 20 61 6e 64 20 4f 72 61 63  rebird, and Orac
68b0: 6c 65 2e 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e  le.  Informix an
68c0: 64 0a 4d 69 63 72 6f 73 6f 66 74 20 53 51 4c 20  d.Microsoft SQL 
68d0: 53 65 72 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68  Server follow th
68e0: 65 20 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65  e other interpre
68f0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74  tation of the st
6900: 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  andard.</p>..<p>
6910: 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  ^If the optional
6920: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63   IF NOT EXISTS c
6930: 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
6940: 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64   and another ind
6950: 65 78 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65  ex.with the same
6960: 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78   name already ex
6970: 69 73 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20  ists, then this 
6980: 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20  command becomes 
6990: 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70  a no-op.</p>..<p
69a0: 3e 5e 49 6e 64 65 78 65 73 20 61 72 65 20 72 65  >^Indexes are re
69b0: 6d 6f 76 65 64 20 77 69 74 68 20 74 68 65 20 5b  moved with the [
69c0: 44 52 4f 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d  DROP INDEX] comm
69d0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  and.</p>...<tcl>
69e0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
69f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6a00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6a10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6a20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
6a30: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
6a40: 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61  TABLE} {createta
6a50: 62 6c 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41  ble} {{CREATE TA
6a60: 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  BLE}}..Recursive
6a70: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
6a80: 65 61 74 65 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  eate-table-stmt.
6a90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 22  </tcl>..<p>The "
6aa0: 43 52 45 41 54 45 20 54 41 42 4c 45 22 20 63 6f  CREATE TABLE" co
6ab0: 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  mmand is used to
6ac0: 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74 61   create a new ta
6ad0: 62 6c 65 20 69 6e 20 61 6e 20 53 51 4c 69 74 65  ble in an SQLite
6ae0: 20 0a 64 61 74 61 62 61 73 65 2e 20 41 20 43 52   .database. A CR
6af0: 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61  EATE TABLE comma
6b00: 6e 64 20 73 70 65 63 69 66 69 65 73 20 74 68 65  nd specifies the
6b10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 74 74 72 69   following attri
6b20: 62 75 74 65 73 20 6f 66 20 74 68 65 0a 6e 65 77  butes of the.new
6b30: 20 74 61 62 6c 65 3a 0a 0a 3c 75 6c 3e 0a 20 20   table:..<ul>.  
6b40: 3c 6c 69 3e 3c 70 3e 54 68 65 20 6e 61 6d 65 20  <li><p>The name 
6b50: 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
6b60: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65  ...  <li><p> The
6b70: 20 64 61 74 61 62 61 73 65 20 69 6e 20 77 68 69   database in whi
6b80: 63 68 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  ch the new table
6b90: 20 69 73 20 63 72 65 61 74 65 64 2e 20 54 61 62   is created. Tab
6ba0: 6c 65 73 20 6d 61 79 20 62 65 20 0a 20 20 20 20  les may be .    
6bb0: 20 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65    created in the
6bc0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
6bd0: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
6be0: 65 2c 20 6f 72 20 69 6e 20 61 6e 79 20 61 74 74  e, or in any att
6bf0: 61 63 68 65 64 0a 20 20 20 20 20 20 64 61 74 61  ached.      data
6c00: 62 61 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  base...  <li><p>
6c10: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 65 61 63   The name of eac
6c20: 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
6c30: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
6c40: 3e 20 54 68 65 20 64 65 63 6c 61 72 65 64 20 74  > The declared t
6c50: 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ype of each colu
6c60: 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  mn in the table.
6c70: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65  ..  <li><p> A de
6c80: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 65  fault value or e
6c90: 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 65 61  xpression for ea
6ca0: 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
6cb0: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
6cc0: 70 3e 20 41 20 64 65 66 61 75 6c 74 20 63 6f 6c  p> A default col
6cd0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
6ce0: 74 6f 20 75 73 65 20 77 69 74 68 20 65 61 63 68  to use with each
6cf0: 20 63 6f 6c 75 6d 6e 2e 0a 0a 20 20 3c 6c 69 3e   column...  <li>
6d00: 3c 70 3e 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20  <p> Optionally, 
6d10: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f  a PRIMARY KEY fo
6d20: 72 20 74 68 65 20 74 61 62 6c 65 2e 20 42 6f 74  r the table. Bot
6d30: 68 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20  h single column 
6d40: 61 6e 64 0a 20 20 20 20 20 20 20 63 6f 6d 70 6f  and.       compo
6d50: 73 69 74 65 20 28 6d 75 6c 74 69 70 6c 65 20 63  site (multiple c
6d60: 6f 6c 75 6d 6e 29 20 70 72 69 6d 61 72 79 20 6b  olumn) primary k
6d70: 65 79 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  eys are supporte
6d80: 64 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20  d...  <li><p> A 
6d90: 73 65 74 20 6f 66 20 53 51 4c 20 63 6f 6e 73 74  set of SQL const
6da0: 72 61 69 6e 74 73 20 66 6f 72 20 65 61 63 68 20  raints for each 
6db0: 74 61 62 6c 65 2e 20 53 51 4c 69 74 65 20 73 75  table. SQLite su
6dc0: 70 70 6f 72 74 73 20 55 4e 49 51 55 45 2c 20 4e  pports UNIQUE, N
6dd0: 4f 54 0a 20 20 20 20 20 20 20 4e 55 4c 4c 2c 20  OT.       NULL, 
6de0: 43 48 45 43 4b 20 61 6e 64 20 46 4f 52 45 49 47  CHECK and FOREIG
6df0: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
6e00: 73 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 57 68  s...  <li><p> Wh
6e10: 65 74 68 65 72 20 74 68 65 20 74 61 62 6c 65 20  ether the table 
6e20: 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f  is a [WITHOUT RO
6e30: 57 49 44 5d 20 74 61 62 6c 65 2e 0a 3c 2f 75 6c  WID] table..</ul
6e40: 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 43 52 45 41  >..<p>Every CREA
6e50: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
6e60: 6e 74 20 6d 75 73 74 20 73 70 65 63 69 66 79 20  nt must specify 
6e70: 61 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 6e  a name for the n
6e80: 65 77 20 74 61 62 6c 65 2e 0a 20 20 5e 28 54 61  ew table..  ^(Ta
6e90: 62 6c 65 20 6e 61 6d 65 73 20 74 68 61 74 20 62  ble names that b
6ea0: 65 67 69 6e 20 77 69 74 68 20 22 73 71 6c 69 74  egin with "sqlit
6eb0: 65 5f 22 20 61 72 65 20 72 65 73 65 72 76 65 64  e_" are reserved
6ec0: 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73   for internal us
6ed0: 65 2e 20 49 74 0a 20 20 69 73 20 61 6e 20 65 72  e. It.  is an er
6ee0: 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74  ror to attempt t
6ef0: 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c 65  o create a table
6f00: 20 77 69 74 68 20 61 20 6e 61 6d 65 20 74 68 61   with a name tha
6f10: 74 20 73 74 61 72 74 73 20 77 69 74 68 0a 20 20  t starts with.  
6f20: 22 73 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a 3c 70  "sqlite_".)^..<p
6f30: 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74 61  > ^If a &lt;data
6f40: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73  base-name&gt; is
6f50: 20 73 70 65 63 69 66 69 65 64 2c 20 69 74 20 6d   specified, it m
6f60: 75 73 74 20 62 65 20 65 69 74 68 65 72 20 22 6d  ust be either "m
6f70: 61 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22 2c  ain", .  "temp",
6f80: 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   or the name of 
6f90: 61 6e 20 5b 41 54 54 41 43 48 20 44 41 54 41 42  an [ATTACH DATAB
6fa0: 41 53 45 7c 61 74 74 61 63 68 65 64 20 64 61 74  ASE|attached dat
6fb0: 61 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69 73  abase]. ^In this
6fc0: 20 63 61 73 65 0a 20 20 74 68 65 20 6e 65 77 20   case.  the new 
6fd0: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
6fe0: 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 64 61   in the named da
6ff0: 74 61 62 61 73 65 2e 20 5e 49 66 20 74 68 65 20  tabase. ^If the 
7000: 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
7010: 52 41 52 59 22 0a 20 20 6b 65 79 77 6f 72 64 20  RARY".  keyword 
7020: 6f 63 63 75 72 73 20 62 65 74 77 65 65 6e 20 74  occurs between t
7030: 68 65 20 22 43 52 45 41 54 45 22 20 61 6e 64 20  he "CREATE" and 
7040: 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65  "TABLE" then the
7050: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 0a 20 20   new table is.  
7060: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 74  created in the t
7070: 65 6d 70 20 64 61 74 61 62 61 73 65 2e 20 5e 49  emp database. ^I
7080: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f  t is an error to
7090: 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20   specify both a 
70a0: 0a 20 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d  .  &lt;database-
70b0: 6e 61 6d 65 26 67 74 3b 20 61 6e 64 20 74 68 65  name&gt; and the
70c0: 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41   TEMP or TEMPORA
70d0: 52 59 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c 65  RY keyword, unle
70e0: 73 73 20 74 68 65 0a 20 20 26 6c 74 3b 64 61 74  ss the.  &lt;dat
70f0: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
7100: 73 20 22 74 65 6d 70 22 2e 20 5e 49 66 20 6e 6f  s "temp". ^If no
7110: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69   database name i
7120: 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20  s specified and 
7130: 74 68 65 0a 20 20 54 45 4d 50 20 6b 65 79 77 6f  the.  TEMP keywo
7140: 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  rd is not presen
7150: 74 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  t then the table
7160: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
7170: 68 65 20 6d 61 69 6e 0a 20 20 64 61 74 61 62 61  he main.  databa
7180: 73 65 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20 69  se...<p>.  ^It i
7190: 73 20 75 73 75 61 6c 6c 79 20 61 6e 20 65 72 72  s usually an err
71a0: 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f  or to attempt to
71b0: 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74 61   create a new ta
71c0: 62 6c 65 20 69 6e 20 61 20 64 61 74 61 62 61 73  ble in a databas
71d0: 65 20 74 68 61 74 0a 20 20 61 6c 72 65 61 64 79  e that.  already
71e0: 20 63 6f 6e 74 61 69 6e 73 20 61 20 74 61 62 6c   contains a tabl
71f0: 65 2c 20 69 6e 64 65 78 20 6f 72 20 76 69 65 77  e, index or view
7200: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
7210: 65 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20  e. ^However, if 
7220: 74 68 65 0a 20 20 22 49 46 20 4e 4f 54 20 45 58  the.  "IF NOT EX
7230: 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20  ISTS" clause is 
7240: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
7250: 74 20 6f 66 20 74 68 65 20 43 52 45 41 54 45 20  t of the CREATE 
7260: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
7270: 61 6e 64 0a 20 20 61 20 74 61 62 6c 65 20 6f 72  and.  a table or
7280: 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d   view of the sam
7290: 65 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65  e name already e
72a0: 78 69 73 74 73 2c 20 74 68 65 20 43 52 45 41 54  xists, the CREAT
72b0: 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 0a  E TABLE command.
72c0: 20 20 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f 20    simply has no 
72d0: 65 66 66 65 63 74 20 28 61 6e 64 20 6e 6f 20 65  effect (and no e
72e0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20  rror message is 
72f0: 72 65 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20 65  returned). ^An e
7300: 72 72 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20 20  rror is still.  
7310: 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
7320: 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20  table cannot be 
7330: 63 72 65 61 74 65 64 20 62 65 63 61 75 73 65 20  created because 
7340: 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 69  of an existing i
7350: 6e 64 65 78 2c 20 65 76 65 6e 20 0a 20 20 69 66  ndex, even .  if
7360: 20 74 68 65 20 22 49 46 20 4e 4f 54 20 45 58 49   the "IF NOT EXI
7370: 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73  STS" clause is s
7380: 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 49  pecified...<p>^I
7390: 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f  t is not an erro
73a0: 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 74 61  r to create a ta
73b0: 62 6c 65 20 74 68 61 74 20 68 61 73 20 74 68 65  ble that has the
73c0: 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e   same name as an
73d0: 20 0a 20 20 65 78 69 73 74 69 6e 67 20 5b 43 52   .  existing [CR
73e0: 45 41 54 45 20 54 52 49 47 47 45 52 7c 74 72 69  EATE TRIGGER|tri
73f0: 67 67 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62 6c  gger]...<p>^Tabl
7400: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75  es are removed u
7410: 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54  sing the [DROP T
7420: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
7430: 20 20 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 52 45 41    </p>..<h3>CREA
7440: 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20  TE TABLE ... AS 
7450: 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e 74  SELECT Statement
7460: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22  s</h3>..<p>^(A "
7470: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
7480: 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61 74   AS SELECT" stat
7490: 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61 6e  ement creates an
74a0: 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64 61  d populates a da
74b0: 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61 73  tabase.table bas
74c0: 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
74d0: 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  s of a SELECT st
74e0: 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65  atement.)^ ^(The
74f0: 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20 73   table has the s
7500: 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f  ame.number of co
7510: 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f 77  lumns as the row
7520: 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s returned by th
7530: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
7540: 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 0a  nt. The name of.
7550: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74  each column is t
7560: 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e  he same as the n
7570: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ame of the corre
7580: 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20  sponding column 
7590: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73 65  in the result.se
75a0: 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  t of the SELECT 
75b0: 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54  statement.)^ ^(T
75c0: 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  he declared type
75d0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
75e0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79  is determined.by
75f0: 20 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f 6e   the [expression
7600: 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68   affinity] of th
7610: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
7620: 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
7630: 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66 20  e result set.of 
7640: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
7650: 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73  ment, as follows
7660: 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  :.</p>..<center>
7670: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e  <table border=1>
7680: 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72 65  .  <tr><th>Expre
7690: 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20 20  ssion Affinity  
76a0: 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c   <th>Column Decl
76b0: 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72 3e  ared Type.  <tr>
76c0: 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20 20 20  <td>TEXT        
76d0: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 54            <td>"T
76e0: 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e  EXT".  <tr><td>N
76f0: 55 4d 45 52 49 43 20 20 20 20 20 20 20 20 20 20  UMERIC          
7700: 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a 20       <td>"NUM". 
7710: 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45 52   <tr><td>INTEGER
7720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
7730: 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e 3c  td>"INT".  <tr><
7740: 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20 20  td>REAL         
7750: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52 45           <td>"RE
7760: 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 4f  AL".  <tr><td>NO
7770: 4e 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  NE              
7780: 20 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70 74      <td>"" (empt
7790: 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62 6c  y string).</tabl
77a0: 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c  e></center>)^..<
77b0: 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65 61  p>^(A table crea
77c0: 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
77d0: 20 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e 6f   TABLE AS has no
77e0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
77f0: 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20   no.constraints 
7800: 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68 65  of any kind. The
7810: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
7820: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  f each column is
7830: 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61 75   NULL. The defau
7840: 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt.collation seq
7850: 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63  uence for each c
7860: 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77  olumn of the new
7870: 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59   table is BINARY
7880: 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20  .)^..<p>^Tables 
7890: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  created using CR
78a0: 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 61 72  EATE TABLE AS ar
78b0: 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70 75  e initially popu
78c0: 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 0a 72  lated with the.r
78d0: 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65 74 75  ows of data retu
78e0: 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
78f0: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 52  CT statement. ^R
7900: 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e 65 64  ows are assigned
7910: 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61 73   contiguously.as
7920: 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d 20  cending [rowid] 
7930: 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e 67  values, starting
7940: 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65 20   with 1, in the 
7950: 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72 5d  [order by|order]
7960: 20 74 68 61 74 20 74 68 65 79 0a 61 72 65 20 72   that they.are r
7970: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
7980: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
7990: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
79a0: 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66 7d  nt {tablecoldef}
79b0: 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   {column definit
79c0: 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66  ion} {column def
79d0: 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a  initions}</tcl>.
79e0: 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69 6e  <h3>Column Defin
79f0: 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  itions</h3>..<p>
7a00: 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20 43  Unless it is a C
7a10: 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20  REATE TABLE ... 
7a20: 41 53 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  AS SELECT statem
7a30: 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54 41  ent, a CREATE TA
7a40: 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e 65  BLE includes.one
7a50: 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e   or more [column
7a60: 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66 69  -def|column defi
7a70: 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e  nitions], option
7a80: 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ally followed by
7a90: 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62 6c   a list of.[tabl
7aa0: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61 62  e-constraint|tab
7ab0: 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e  le constraints].
7ac0: 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65    Each column de
7ad0: 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73 74  finition consist
7ae0: 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f 66  s of the.name of
7af0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74   the column, opt
7b00: 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64  ionally followed
7b10: 20 62 79 20 74 68 65 20 64 65 63 6c 61 72 65 64   by the declared
7b20: 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c   type of the col
7b30: 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f 72  umn,.then one or
7b40: 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 5b   more optional [
7b50: 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e  column-constrain
7b60: 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61  t|column constra
7b70: 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64 20  ints]. Included 
7b80: 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69 6f  in.the definitio
7b90: 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e  n of "column con
7ba0: 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74 68  straints" for th
7bb0: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68  e purposes of th
7bc0: 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74 65  e previous.state
7bd0: 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f 4c  ment are the COL
7be0: 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c 54  LATE and DEFAULT
7bf0: 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20 74   clauses, even t
7c00: 68 6f 75 67 68 20 74 68 65 73 65 20 61 72 65 20  hough these are 
7c10: 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73 74  not really.const
7c20: 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73 65  raints in the se
7c30: 6e 73 65 20 74 68 61 74 20 74 68 65 79 20 64 6f  nse that they do
7c40: 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74 68   not restrict th
7c50: 65 20 64 61 74 61 20 74 68 61 74 20 74 68 65 20  e data that the 
7c60: 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61 69  table may.contai
7c70: 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f 6e  n. The other con
7c80: 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20 4e  straints - NOT N
7c90: 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49 51  ULL, CHECK, UNIQ
7ca0: 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20  UE, PRIMARY KEY 
7cb0: 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59 20  and.FOREIGN KEY 
7cc0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69 6d  constraints - im
7cd0: 70 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f 6e  pose restriction
7ce0: 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73 20  s on the tables 
7cf0: 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61 72  data, and are ar
7d00: 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64 65  e.described unde
7d10: 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c 53  r [constraints|S
7d20: 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69  QL Data Constrai
7d30: 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e  nts] below...<p>
7d40: 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c  ^Unlike most SQL
7d50: 20 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69   databases, SQLi
7d60: 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74  te does not rest
7d70: 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f 66  rict the type of
7d80: 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20 62   data that.may b
7d90: 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  e inserted into 
7da0: 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f  a column based o
7db0: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65  n the columns de
7dc0: 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e 73  clared type. Ins
7dd0: 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73 65  tead,.SQLite use
7de0: 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e  s [dynamic typin
7df0: 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72 65  g]. ^The declare
7e00: 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75  d type of a colu
7e10: 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64 65  mn is used to.de
7e20: 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66 66  termine the [aff
7e30: 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f  inity] of the co
7e40: 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 70 3e 54  lumn only...<p>T
7e50: 68 65 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73  he DEFAULT claus
7e60: 65 20 73 70 65 63 69 66 69 65 73 20 61 20 64 65  e specifies a de
7e70: 66 61 75 6c 74 20 76 61 6c 75 65 20 74 6f 20 75  fault value to u
7e80: 73 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  se for the colum
7e90: 6e 20 69 66 20 6e 6f 0a 76 61 6c 75 65 20 69 73  n if no.value is
7ea0: 20 65 78 70 6c 69 63 69 74 6c 79 20 70 72 6f 76   explicitly prov
7eb0: 69 64 65 64 20 62 79 20 74 68 65 20 75 73 65 72  ided by the user
7ec0: 20 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20 5b   when doing an [
7ed0: 49 4e 53 45 52 54 5d 2e 20 5e 49 66 20 74 68 65  INSERT]. ^If the
7ee0: 72 65 0a 69 73 20 6e 6f 20 65 78 70 6c 69 63 69  re.is no explici
7ef0: 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  t DEFAULT clause
7f00: 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63   attached to a c
7f10: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
7f20: 2c 20 74 68 65 6e 20 74 68 65 20 0a 64 65 66 61  , then the .defa
7f30: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ult value of the
7f40: 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e   column is NULL.
7f50: 20 5e 28 41 6e 20 65 78 70 6c 69 63 69 74 20 44   ^(An explicit D
7f60: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 6d 61  EFAULT clause ma
7f70: 79 20 73 70 65 63 69 66 79 0a 74 68 61 74 20 74  y specify.that t
7f80: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
7f90: 20 69 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69   is NULL, a stri
7fa0: 6e 67 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20 62  ng constant, a b
7fb0: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2c 20 61 0a  lob constant, a.
7fc0: 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 2c 20 6f  signed-number, o
7fd0: 72 20 61 6e 79 20 63 6f 6e 73 74 61 6e 74 20 65  r any constant e
7fe0: 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6c 6f 73  xpression enclos
7ff0: 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65  ed in parenthese
8000: 73 2e 20 41 6e 20 65 78 70 6c 69 63 69 74 0a 64  s. An explicit.d
8010: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d 61 79  efault value may
8020: 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20   also be one of 
8030: 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65  the special case
8040: 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65 79  -independent key
8050: 77 6f 72 64 73 0a 43 55 52 52 45 4e 54 5f 54 49  words.CURRENT_TI
8060: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
8070: 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   or CURRENT_TIME
8080: 53 54 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68  STAMP.)^ ^For th
8090: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68  e purposes of th
80a0: 65 0a 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  e.DEFAULT clause
80b0: 2c 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  , an expression 
80c0: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f  is considered co
80d0: 6e 73 74 61 6e 74 20 70 72 6f 76 69 64 65 64 20  nstant provided 
80e0: 74 68 61 74 20 69 74 20 64 6f 65 73 0a 6e 6f 74  that it does.not
80f0: 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20 73 75 62   contain any sub
8100: 2d 71 75 65 72 69 65 73 20 6f 72 20 73 74 72 69  -queries or stri
8110: 6e 67 20 63 6f 6e 73 74 61 6e 74 73 20 65 6e 63  ng constants enc
8120: 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62 6c 65 20  losed in double 
8130: 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45 61  quotes...<p>^(Ea
8140: 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20 69 73  ch time a row is
8150: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
8160: 68 65 20 74 61 62 6c 65 20 62 79 20 61 6e 20 49  he table by an I
8170: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
8180: 74 68 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20 70  that .does not p
8190: 72 6f 76 69 64 65 20 65 78 70 6c 69 63 69 74 20  rovide explicit 
81a0: 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 74  values for all t
81b0: 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68 65  able columns the
81c0: 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69   values stored i
81d0: 6e 0a 74 68 65 20 6e 65 77 20 72 6f 77 20 61 72  n.the new row ar
81e0: 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e determined by 
81f0: 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61  their default va
8200: 6c 75 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c 6f  lues)^, as follo
8210: 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  ws:..<ul>.  <li>
8220: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
8230: 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  lt value of the 
8240: 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e 73  column is a cons
8250: 74 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74 2c  tant NULL, text,
8260: 20 62 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69 67   blob or.    sig
8270: 6e 65 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75 65  ned-number value
8280: 2c 20 74 68 65 6e 20 74 68 61 74 20 76 61 6c 75  , then that valu
8290: 65 20 69 73 20 75 73 65 64 20 64 69 72 65 63 74  e is used direct
82a0: 6c 79 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ly in the new ro
82b0: 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  w...  <li><p>^If
82c0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
82d0: 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ue of a column i
82e0: 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
82f0: 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2c 20  in parentheses, 
8300: 74 68 65 6e 0a 20 20 20 20 74 68 65 20 65 78 70  then.    the exp
8310: 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
8320: 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61  ated once for ea
8330: 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64 20  ch row inserted 
8340: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 73 0a  and the results.
8350: 20 20 20 20 75 73 65 64 20 69 6e 20 74 68 65 20      used in the 
8360: 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e  new row...  <li>
8370: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
8380: 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f  lt value of a co
8390: 6c 75 6d 6e 20 69 73 20 43 55 52 52 45 4e 54 5f  lumn is CURRENT_
83a0: 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41  TIME, CURRENT_DA
83b0: 54 45 20 6f 72 0a 20 20 20 20 43 55 52 52 45 4e  TE or.    CURREN
83c0: 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68 65  T_TIMESTAMP, the
83d0: 6e 20 74 68 65 20 76 61 6c 75 65 20 75 73 65 64  n the value used
83e0: 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 20   in the new row 
83f0: 69 73 20 61 20 74 65 78 74 0a 20 20 20 20 72 65  is a text.    re
8400: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
8410: 74 68 65 20 63 75 72 72 65 6e 74 20 55 54 43 20  the current UTC 
8420: 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65  date and/or time
8430: 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 54  . ^For CURRENT_T
8440: 49 4d 45 2c 20 74 68 65 0a 20 20 20 20 66 6f 72  IME, the.    for
8450: 6d 61 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65  mat of the value
8460: 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e 20   is "HH:MM:SS". 
8470: 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41 54  ^For CURRENT_DAT
8480: 45 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22 2e  E, "YYYY-MM-DD".
8490: 20 5e 54 68 65 0a 20 20 20 20 66 6f 72 6d 61 74   ^The.    format
84a0: 20 66 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d   for CURRENT_TIM
84b0: 45 53 54 41 4d 50 20 69 73 20 22 59 59 59 59 2d  ESTAMP is "YYYY-
84c0: 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e  MM-DD HH:MM:SS".
84d0: 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  .</ul>..<p>^The 
84e0: 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 73  COLLATE clause s
84f0: 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 61 6d  pecifies the nam
8500: 65 20 6f 66 20 61 20 5b 63 6f 6c 6c 61 74 69 6e  e of a [collatin
8510: 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f 20 75  g sequence] to u
8520: 73 65 20 61 73 0a 74 68 65 20 64 65 66 61 75 6c  se as.the defaul
8530: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
8540: 65 6e 63 65 20 66 6f 72 20 74 68 65 20 63 6f 6c  ence for the col
8550: 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c 4c  umn. ^If no COLL
8560: 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a 73 70  ATE clause is.sp
8570: 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 65 66  ecified, the def
8580: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ault collation s
8590: 65 71 75 65 6e 63 65 20 69 73 20 5b 42 49 4e 41  equence is [BINA
85a0: 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75  RY]...<p>^The nu
85b0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
85c0: 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c 69  in a table is li
85d0: 6d 69 74 65 64 20 62 79 20 74 68 65 20 5b 53 51  mited by the [SQ
85e0: 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d  LITE_MAX_COLUMN]
85f0: 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70 61  .compile-time pa
8600: 72 61 6d 65 74 65 72 2e 20 5e 41 20 73 69 6e 67  rameter. ^A sing
8610: 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62 6c  le row of a tabl
8620: 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20 6d  e cannot store m
8630: 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45  ore than.[SQLITE
8640: 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79 74  _MAX_LENGTH] byt
8650: 65 73 20 6f 66 20 64 61 74 61 2e 20 5e 42 6f 74  es of data. ^Bot
8660: 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69 74  h of these limit
8670: 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65 64  s can be lowered
8680: 20 61 74 0a 72 75 6e 74 69 6d 65 20 75 73 69 6e   at.runtime usin
8690: 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c  g the [sqlite3_l
86a0: 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69 6e  imit()] C/C++ in
86b0: 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 74  terface.</p>..<t
86c0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
86d0: 63 6f 6e 73 74 72 61 69 6e 74 73 7d 20 7b 63 6f  constraints} {co
86e0: 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e  nstraints}</tcl>
86f0: 0a 3c 68 33 3e 53 51 4c 20 44 61 74 61 20 43 6f  .<h3>SQL Data Co
8700: 6e 73 74 72 61 69 6e 74 73 3c 2f 68 33 3e 0a 0a  nstraints</h3>..
8710: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
8720: 20 70 72 69 6d 6b 65 79 63 6f 6e 73 74 20 7b 50   primkeyconst {P
8730: 52 49 4d 41 52 59 20 4b 45 59 7d 20 7b 50 52 49  RIMARY KEY} {PRI
8740: 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
8750: 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45  int}</tcl>.<p>^E
8760: 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51 4c  ach table in SQL
8770: 69 74 65 20 6d 61 79 20 68 61 76 65 20 61 74 20  ite may have at 
8780: 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52 49 4d  most one <b>PRIM
8790: 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e 49 66  ARY KEY</b>. ^If
87a0: 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64 73 20   the.  keywords 
87b0: 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65 20  PRIMARY KEY are 
87c0: 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d  added to a colum
87d0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68  n definition, th
87e0: 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  en the primary k
87f0: 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74 61 62  ey.  for the tab
8800: 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  le consists of t
8810: 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  hat single colum
8820: 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50 52 49  n. ^Or, if a PRI
8830: 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20  MARY KEY clause 
8840: 0a 20 20 69 73 20 73 70 65 63 69 66 69 65 64 20  .  is specified 
8850: 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f 6e 73  as a [table-cons
8860: 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20 74 68  traint], then th
8870: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 66  e primary key of
8880: 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63 6f 6e   the table.  con
8890: 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c 69 73  sists of the lis
88a0: 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 70 65  t of columns spe
88b0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
88c0: 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  f the PRIMARY KE
88d0: 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 41 6e 20  Y clause..  ^An 
88e0: 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20  error is raised 
88f0: 69 66 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  if more than one
8900: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61   PRIMARY KEY cla
8910: 75 73 65 20 61 70 70 65 61 72 73 20 69 6e 20 61  use appears in a
8920: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
8930: 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65  statement.  ^The
8940: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
8950: 6f 70 74 69 6f 6e 61 6c 20 66 6f 72 20 6f 72 64  optional for ord
8960: 69 6e 61 72 79 20 74 61 62 6c 65 73 0a 20 20 62  inary tables.  b
8970: 75 74 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ut is required f
8980: 6f 72 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49  or [WITHOUT ROWI
8990: 44 5d 20 74 61 62 6c 65 73 2e 0a 0a 3c 70 3e 49  D] tables...<p>I
89a0: 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 61 20  f a table has a 
89b0: 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 70 72  single column pr
89c0: 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 74 68  imary key and th
89d0: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
89e0: 6f 66 20 74 68 61 74 0a 20 20 63 6f 6c 75 6d 6e  of that.  column
89f0: 20 69 73 20 22 49 4e 54 45 47 45 52 22 20 61 6e   is "INTEGER" an
8a00: 64 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e  d the table is n
8a10: 6f 74 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f  ot a [WITHOUT RO
8a20: 57 49 44 5d 20 74 61 62 6c 65 2c 0a 20 20 74 68  WID] table,.  th
8a30: 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  en the column is
8a40: 20 6b 6e 6f 77 6e 20 61 73 20 61 6e 20 5b 49 4e   known as an [IN
8a50: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
8a60: 59 5d 2e 0a 20 20 53 65 65 20 62 65 6c 6f 77 20  Y]..  See below 
8a70: 66 6f 72 20 61 20 64 65 73 63 72 69 70 74 69 6f  for a descriptio
8a80: 6e 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c  n of the special
8a90: 20 70 72 6f 70 65 72 74 69 65 73 20 61 6e 64 20   properties and 
8aa0: 62 65 68 61 76 69 6f 72 73 0a 20 20 61 73 73 6f  behaviors.  asso
8ab0: 63 69 61 74 65 64 20 77 69 74 68 20 61 6e 20 5b  ciated with an [
8ac0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
8ad0: 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e 45 61 63 68 20  KEY]...<p>^Each 
8ae0: 72 6f 77 20 69 6e 20 61 20 74 61 62 6c 65 20 77  row in a table w
8af0: 69 74 68 20 61 20 70 72 69 6d 61 72 79 20 6b 65  ith a primary ke
8b00: 79 20 6d 75 73 74 20 68 61 76 65 20 61 20 75 6e  y must have a un
8b10: 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ique combination
8b20: 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  .  of values in 
8b30: 69 74 73 20 70 72 69 6d 61 72 79 20 6b 65 79 20  its primary key 
8b40: 63 6f 6c 75 6d 6e 73 2e 20 5e 46 6f 72 20 74 68  columns. ^For th
8b50: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65  e purposes of de
8b60: 74 65 72 6d 69 6e 69 6e 67 0a 20 20 74 68 65 20  termining.  the 
8b70: 75 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 70 72  uniqueness of pr
8b80: 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73  imary key values
8b90: 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  , NULL values ar
8ba0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 73  e considered dis
8bb0: 74 69 6e 63 74 20 66 72 6f 6d 0a 20 20 61 6c 6c  tinct from.  all
8bc0: 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69   other values, i
8bd0: 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e  ncluding other N
8be0: 55 4c 4c 73 2e 20 5e 49 66 20 61 6e 20 5b 49 4e  ULLs. ^If an [IN
8bf0: 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54 45  SERT] or [UPDATE
8c00: 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 61 74  ].  statement at
8c10: 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64 69 66 79  tempts to modify
8c20: 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e 74 65   the table conte
8c30: 6e 74 20 73 6f 20 74 68 61 74 20 74 77 6f 20 6f  nt so that two o
8c40: 72 20 6d 6f 72 65 20 72 6f 77 73 0a 20 20 66 65  r more rows.  fe
8c50: 61 74 75 72 65 20 69 64 65 6e 74 69 63 61 6c 20  ature identical 
8c60: 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75  primary key valu
8c70: 65 73 2c 20 69 74 20 69 73 20 61 20 63 6f 6e 73  es, it is a cons
8c80: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
8c90: 2e 0a 20 20 41 63 63 6f 72 64 69 6e 67 20 74 6f  ..  According to
8ca0: 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72   the SQL standar
8cb0: 64 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 73  d, PRIMARY KEY s
8cc0: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 69 6d 70  hould always imp
8cd0: 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20 55  ly NOT NULL..  U
8ce0: 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 64 75  nfortunately, du
8cf0: 65 20 74 6f 20 61 20 62 75 67 20 69 6e 20 73 6f  e to a bug in so
8d00: 6d 65 20 65 61 72 6c 79 20 76 65 72 73 69 6f 6e  me early version
8d10: 73 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 74  s, this is not t
8d20: 68 65 0a 20 20 63 61 73 65 20 69 6e 20 53 51 4c  he.  case in SQL
8d30: 69 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68 65  ite. ^Unless the
8d40: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b 49   column is an [I
8d50: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
8d60: 45 59 5d 20 6f 72 0a 20 20 74 68 65 20 74 61 62  EY] or.  the tab
8d70: 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54  le is a [WITHOUT
8d80: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 20 6f 72   ROWID] table or
8d90: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 64   the column is d
8da0: 65 63 6c 61 72 65 64 20 4e 4f 54 20 4e 55 4c 4c  eclared NOT NULL
8db0: 2c 0a 20 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77  ,.  SQLite allow
8dc0: 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e  s NULL values in
8dd0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
8de0: 6f 6c 75 6d 6e 2e 20 20 53 51 4c 69 74 65 20 63  olumn.  SQLite c
8df0: 6f 75 6c 64 20 62 65 20 66 69 78 65 64 20 74 6f  ould be fixed to
8e00: 0a 20 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68  .  conform to th
8e10: 65 20 73 74 61 6e 64 61 72 64 2c 20 62 75 74 20  e standard, but 
8e20: 64 6f 69 6e 67 20 73 6f 20 6d 69 67 68 74 20 62  doing so might b
8e30: 72 65 61 6b 20 6c 65 67 61 63 79 20 61 70 70 6c  reak legacy appl
8e40: 69 63 61 74 69 6f 6e 73 2e 0a 20 20 48 65 6e 63  ications..  Henc
8e50: 65 2c 20 69 74 20 68 61 73 20 62 65 65 6e 20 64  e, it has been d
8e60: 65 63 69 64 65 64 20 74 6f 20 6d 65 72 65 6c 79  ecided to merely
8e70: 20 64 6f 63 75 6d 65 6e 74 20 74 68 65 20 66 61   document the fa
8e80: 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 0a 20  ct that SQLite. 
8e90: 20 61 6c 6c 6f 77 69 6e 67 20 4e 55 4c 4c 73 20   allowing NULLs 
8ea0: 69 6e 20 6d 6f 73 74 20 50 52 49 4d 41 52 59 20  in most PRIMARY 
8eb0: 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 0a 3c 74  KEY columns...<t
8ec0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75  cl>hd_fragment u
8ed0: 6e 69 71 75 65 63 6f 6e 73 74 20 7b 55 4e 49 51  niqueconst {UNIQ
8ee0: 55 45 7d 20 7b 75 6e 69 71 75 65 20 63 6f 6e 73  UE} {unique cons
8ef0: 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70  traint}</tcl>.<p
8f00: 3e 5e 41 20 3c 62 3e 55 4e 49 51 55 45 3c 2f 62  >^A <b>UNIQUE</b
8f10: 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  > constraint is 
8f20: 73 69 6d 69 6c 61 72 20 74 6f 20 61 20 50 52 49  similar to a PRI
8f30: 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
8f40: 69 6e 74 2c 20 65 78 63 65 70 74 0a 20 20 74 68  int, except.  th
8f50: 61 74 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  at a single tabl
8f60: 65 20 6d 61 79 20 68 61 76 65 20 61 6e 79 20 6e  e may have any n
8f70: 75 6d 62 65 72 20 6f 66 20 55 4e 49 51 55 45 20  umber of UNIQUE 
8f80: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 5e 46 6f  constraints. ^Fo
8f90: 72 20 65 61 63 68 0a 20 20 55 4e 49 51 55 45 20  r each.  UNIQUE 
8fa0: 63 6f 6e 73 74 72 61 69 6e 74 20 6f 6e 20 74 68  constraint on th
8fb0: 65 20 74 61 62 6c 65 2c 20 65 61 63 68 20 72 6f  e table, each ro
8fc0: 77 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61  w must contain a
8fd0: 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
8fe0: 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73 20  ion.  of values 
8ff0: 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69  in the columns i
9000: 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65  dentified by the
9010: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
9020: 6e 74 2e 20 0a 20 20 5e 46 6f 72 20 74 68 65 20  nt. .  ^For the 
9030: 70 75 72 70 6f 73 65 73 20 6f 66 20 55 4e 49 51  purposes of UNIQ
9040: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  UE constraints, 
9050: 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 20 20 61 72  NULL values.  ar
9060: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 73  e considered dis
9070: 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6f  tinct from all o
9080: 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63  ther values, inc
9090: 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c  luding other NUL
90a0: 4c 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 6d 6f 73 74  Ls...<p>^In most
90b0: 20 63 61 73 65 73 2c 20 55 4e 49 51 55 45 20 61   cases, UNIQUE a
90c0: 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 20  nd PRIMARY KEY. 
90d0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
90e0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
90f0: 63 72 65 61 74 69 6e 67 20 61 20 75 6e 69 71 75  creating a uniqu
9100: 65 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 64  e index in the d
9110: 61 74 61 62 61 73 65 2e 0a 20 20 28 54 68 65 20  atabase..  (The 
9120: 65 78 63 65 70 74 69 6f 6e 73 20 61 72 65 20 5b  exceptions are [
9130: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9140: 4b 45 59 5d 20 61 6e 64 20 50 52 49 4d 41 52 59  KEY] and PRIMARY
9150: 20 4b 45 59 73 20 6f 6e 20 0a 20 20 5b 57 49 54   KEYs on .  [WIT
9160: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
9170: 65 73 2e 29 0a 20 20 48 65 6e 63 65 2c 20 74 68  es.).  Hence, th
9180: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65  e following sche
9190: 6d 61 73 20 61 72 65 20 6c 6f 67 69 63 61 6c 6c  mas are logicall
91a0: 79 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 0a 20  y equivalent:.. 
91b0: 20 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 43   <ol>.  <li><p>C
91c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
91d0: 2c 20 62 20 55 4e 49 51 55 45 29 3b 0a 20 20 3c  , b UNIQUE);.  <
91e0: 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42  li><p>CREATE TAB
91f0: 4c 45 20 74 31 28 61 2c 20 62 20 50 52 49 4d 41  LE t1(a, b PRIMA
9200: 52 59 20 4b 45 59 29 3b 0a 20 20 3c 6c 69 3e 3c  RY KEY);.  <li><
9210: 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  p>CREATE TABLE t
9220: 31 28 61 2c 20 62 29 3b 3c 62 72 3e 0a 20 20 20  1(a, b);<br>.   
9230: 20 20 20 20 20 20 43 52 45 41 54 45 20 55 4e 49        CREATE UNI
9240: 51 55 45 20 49 4e 44 45 58 20 74 31 62 20 4f 4e  QUE INDEX t1b ON
9250: 20 74 31 28 62 29 3b 0a 20 20 3c 2f 6f 6c 3e 0a   t1(b);.  </ol>.
9260: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9270: 74 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b 43 48 45  t {ckconst} {CHE
9280: 43 4b 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74  CK} {CHECK const
9290: 72 61 69 6e 74 7d 20 7b 43 48 45 43 4b 20 63 6f  raint} {CHECK co
92a0: 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e  nstraints}</tcl>
92b0: 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48 45 43 4b  .<p>^(A <b>CHECK
92c0: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
92d0: 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64 20  may be attached 
92e0: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
92f0: 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73 70 65 63  nition or.  spec
9300: 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c 65  ified as a table
9310: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 49 6e 20   constraint. In 
9320: 70 72 61 63 74 69 63 65 20 69 74 20 6d 61 6b 65  practice it make
9330: 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 2e  s no difference.
9340: 29 5e 20 5e 28 45 61 63 68 0a 20 20 74 69 6d 65  )^ ^(Each.  time
9350: 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20 69 6e   a new row is in
9360: 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
9370: 74 61 62 6c 65 20 6f 72 20 61 6e 20 65 78 69 73  table or an exis
9380: 74 69 6e 67 20 72 6f 77 20 69 73 20 75 70 64 61  ting row is upda
9390: 74 65 64 2c 0a 20 20 74 68 65 20 65 78 70 72 65  ted,.  the expre
93a0: 73 73 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ssion associated
93b0: 20 77 69 74 68 20 65 61 63 68 20 43 48 45 43 4b   with each CHECK
93c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 65   constraint is e
93d0: 76 61 6c 75 61 74 65 64 20 61 6e 64 0a 20 20 63  valuated and.  c
93e0: 61 73 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43  ast to a NUMERIC
93f0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61   value in the sa
9400: 6d 65 20 77 61 79 20 61 73 20 61 20 5b 43 41 53  me way as a [CAS
9410: 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49  T expression]. I
9420: 66 20 74 68 65 20 0a 20 20 72 65 73 75 6c 74 20  f the .  result 
9430: 69 73 20 7a 65 72 6f 20 28 69 6e 74 65 67 65 72  is zero (integer
9440: 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c   value 0 or real
9450: 20 76 61 6c 75 65 20 30 2e 30 29 2c 20 74 68 65   value 0.0), the
9460: 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20  n a constraint. 
9470: 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61 73 20 6f   violation has o
9480: 63 63 75 72 72 65 64 2e 29 5e 20 5e 49 66 20 74  ccurred.)^ ^If t
9490: 68 65 20 43 48 45 43 4b 20 65 78 70 72 65 73 73  he CHECK express
94a0: 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
94b0: 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e 79 20   NULL, or.  any 
94c0: 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76  other non-zero v
94d0: 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f 74 20  alue, it is not 
94e0: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
94f0: 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 65  lation..  ^The e
9500: 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 61 20 43  xpression of a C
9510: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
9520: 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  may not contain 
9530: 61 20 73 75 62 71 75 65 72 79 2e 0a 0a 3c 70 3e  a subquery...<p>
9540: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
9550: 73 20 68 61 76 65 20 62 65 65 6e 20 73 75 70 70  s have been supp
9560: 6f 72 74 65 64 20 73 69 6e 63 65 20 5b 76 65 72  orted since [ver
9570: 73 69 6f 6e 20 33 2e 33 2e 30 5d 2e 20 50 72 69  sion 3.3.0]. Pri
9580: 6f 72 20 74 6f 0a 20 20 76 65 72 73 69 6f 6e 20  or to.  version 
9590: 33 2e 33 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e  3.3.0, CHECK con
95a0: 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 70 61  straints were pa
95b0: 72 73 65 64 20 62 75 74 20 6e 6f 74 20 65 6e 66  rsed but not enf
95c0: 6f 72 63 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  orced...<tcl>hd_
95d0: 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75 6c  fragment {notnul
95e0: 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55 4c  lconst} {NOT NUL
95f0: 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  L} {NOT NULL con
9600: 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c  straint}</tcl>.<
9610: 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c  p>^A <b>NOT NULL
9620: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
9630: 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61 74 74 61  may only be atta
9640: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
9650: 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e   definition,.  n
9660: 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ot specified as 
9670: 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  a table constrai
9680: 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70 72 69 73  nt.  Not surpris
9690: 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20 4e  ingly, ^(a NOT N
96a0: 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74  ULL.  constraint
96b0: 20 64 69 63 74 61 74 65 73 20 74 68 61 74 20 74   dictates that t
96c0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f  he associated co
96d0: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  lumn may not con
96e0: 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75  tain a NULL valu
96f0: 65 2e 0a 20 20 41 74 74 65 6d 70 74 69 6e 67 20  e..  Attempting 
9700: 74 6f 20 73 65 74 20 74 68 65 20 63 6f 6c 75 6d  to set the colum
9710: 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20  n value to NULL 
9720: 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61  when inserting a
9730: 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20 20 75 70   new row or.  up
9740: 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69  dating an existi
9750: 6e 67 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20  ng one causes a 
9760: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
9770: 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63  tion.)^..<p>Exac
9780: 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e 73 74 72  tly how a constr
9790: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69  aint violation i
97a0: 73 20 64 65 61 6c 74 20 77 69 74 68 20 69 73 20  s dealt with is 
97b0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
97c0: 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c  e.  [conflict cl
97d0: 61 75 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74 20  ause|constraint 
97e0: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
97f0: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e 20  ion algorithm]. 
9800: 45 61 63 68 20 0a 20 20 50 52 49 4d 41 52 59 20  Each .  PRIMARY 
9810: 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54  KEY, UNIQUE, NOT
9820: 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20   NULL and CHECK 
9830: 63 6f 6e 73 74 72 61 69 6e 74 20 68 61 73 20 61  constraint has a
9840: 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
9850: 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  t.  resolution a
9860: 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d 41  lgorithm. ^PRIMA
9870: 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61  RY KEY, UNIQUE a
9880: 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  nd NOT NULL cons
9890: 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65 0a 20  traints may be. 
98a0: 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69   explicitly assi
98b0: 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74 20 63  gned a default c
98c0: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
98d0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 62 79 20  on algorithm by 
98e0: 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b 63  including.  a [c
98f0: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20  onflict-clause] 
9900: 69 6e 20 74 68 65 69 72 20 64 65 66 69 6e 69 74  in their definit
9910: 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61 20  ions. ^Or, if a 
9920: 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66 69 6e  constraint defin
9930: 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f 74  ition.  does not
9940: 20 69 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e 66   include a [conf
9950: 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72 20  lict-clause] or 
9960: 69 74 20 69 73 20 61 20 43 48 45 43 4b 20 63 6f  it is a CHECK co
9970: 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64 65  nstraint, the de
9980: 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63 74  fault.  conflict
9990: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
99a0: 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20  rithm is ABORT. 
99b0: 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74  ^Different const
99c0: 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68  raints within th
99d0: 65 0a 20 20 73 61 6d 65 20 74 61 62 6c 65 20 6d  e.  same table m
99e0: 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65 6e  ay have differen
99f0: 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  t default confli
9a00: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
9a10: 67 6f 72 69 74 68 6d 73 2e 20 53 65 65 0a 20 20  gorithms. See.  
9a20: 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
9a30: 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
9a40: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
9a50: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74  information...<t
9a60: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
9a70: 6f 77 69 64 20 7b 49 4e 54 45 47 45 52 20 50 52  owid {INTEGER PR
9a80: 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f 57 49 44  IMARY KEY} ROWID
9a90: 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33   rowid</tcl>.<h3
9aa0: 3e 52 4f 57 49 44 73 20 61 6e 64 20 74 68 65 20  >ROWIDs and the 
9ab0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9ac0: 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 78  KEY</h3>..<p>^Ex
9ad0: 63 65 70 74 20 66 6f 72 20 5b 57 49 54 48 4f 55  cept for [WITHOU
9ae0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2c  T ROWID] tables,
9af0: 20 61 6c 6c 20 72 6f 77 73 20 77 69 74 68 69 6e   all rows within
9b00: 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 0a 68   SQLite tables.h
9b10: 61 76 65 20 61 20 36 34 2d 62 69 74 20 73 69 67  ave a 64-bit sig
9b20: 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65 79 20  ned integer key 
9b30: 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64  that uniquely id
9b40: 65 6e 74 69 66 69 65 73 20 74 68 65 20 72 6f 77  entifies the row
9b50: 20 77 69 74 68 69 6e 20 69 74 73 20 74 61 62 6c   within its tabl
9b60: 65 2e 0a 54 68 69 73 20 69 6e 74 65 67 65 72 20  e..This integer 
9b70: 69 73 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c 65  is usually.calle
9b80: 64 20 74 68 65 20 22 72 6f 77 69 64 22 2e 20 5e  d the "rowid". ^
9b90: 54 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20  The rowid value 
9ba0: 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
9bb0: 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65  using one of the
9bc0: 20 73 70 65 63 69 61 6c 0a 63 61 73 65 2d 69 6e   special.case-in
9bd0: 64 65 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73 20  dependent names 
9be0: 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c 20  "rowid", "oid", 
9bf0: 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e 20  or "_rowid_" in 
9c00: 70 6c 61 63 65 20 6f 66 20 61 20 63 6f 6c 75 6d  place of a colum
9c10: 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74 61  n name..^If a ta
9c20: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 75  ble contains a u
9c30: 73 65 72 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ser defined colu
9c40: 6d 6e 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22  mn named "rowid"
9c50: 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77  , "oid" or "_row
9c60: 69 64 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74 20  id_",.then that 
9c70: 6e 61 6d 65 20 61 6c 77 61 79 73 20 72 65 66 65  name always refe
9c80: 72 73 20 74 68 65 20 65 78 70 6c 69 63 69 74 6c  rs the explicitl
9c90: 79 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d  y declared colum
9ca0: 6e 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20  n and cannot be 
9cb0: 75 73 65 64 0a 74 6f 20 72 65 74 72 69 65 76 65  used.to retrieve
9cc0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77   the integer row
9cd0: 69 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54 68  id value...<p>Th
9ce0: 65 20 72 6f 77 69 64 20 28 61 6e 64 20 22 6f 69  e rowid (and "oi
9cf0: 64 22 20 61 6e 64 20 22 5f 72 6f 77 69 64 5f 22  d" and "_rowid_"
9d00: 29 20 69 73 20 6f 6d 69 74 74 65 64 20 69 6e 20  ) is omitted in 
9d10: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
9d20: 74 61 62 6c 65 73 2e 0a 57 49 54 48 4f 55 54 20  tables..WITHOUT 
9d30: 52 4f 57 49 44 20 74 61 62 6c 65 73 20 61 72 65  ROWID tables are
9d40: 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20   only available 
9d50: 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69  in SQLite [versi
9d60: 6f 6e 20 33 2e 38 2e 32 5d 20 61 6e 64 20 6c 61  on 3.8.2] and la
9d70: 74 65 72 2e 0a 41 20 74 61 62 6c 65 20 74 68 61  ter..A table tha
9d80: 74 20 6c 61 63 6b 73 20 74 68 65 20 57 49 54 48  t lacks the WITH
9d90: 4f 55 54 20 52 4f 57 49 44 20 63 6c 61 75 73 65  OUT ROWID clause
9da0: 20 69 73 20 63 61 6c 6c 65 64 20 61 20 22 72 6f   is called a "ro
9db0: 77 69 64 20 74 61 62 6c 65 22 2e 0a 0a 3c 70 3e  wid table"...<p>
9dc0: 54 68 65 20 64 61 74 61 20 66 6f 72 20 72 6f 77  The data for row
9dd0: 69 64 20 74 61 62 6c 65 73 20 69 73 20 73 74 6f  id tables is sto
9de0: 72 65 64 20 61 73 20 61 20 42 2d 54 72 65 65 20  red as a B-Tree 
9df0: 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
9e00: 6e 69 6e 67 0a 6f 6e 65 20 65 6e 74 72 79 20 66  ning.one entry f
9e10: 6f 72 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  or each table ro
9e20: 77 2c 20 75 73 69 6e 67 20 74 68 65 20 72 6f 77  w, using the row
9e30: 69 64 20 76 61 6c 75 65 20 61 73 20 74 68 65 20  id value as the 
9e40: 6b 65 79 2e 20 54 68 69 73 20 6d 65 61 6e 73 20  key. This means 
9e50: 74 68 61 74 0a 72 65 74 72 69 65 76 69 6e 67 20  that.retrieving 
9e60: 6f 72 20 73 6f 72 74 69 6e 67 20 72 65 63 6f 72  or sorting recor
9e70: 64 73 20 62 79 20 72 6f 77 69 64 20 69 73 20 66  ds by rowid is f
9e80: 61 73 74 2e 20 53 65 61 72 63 68 69 6e 67 20 66  ast. Searching f
9e90: 6f 72 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  or a record with
9ea0: 20 61 0a 73 70 65 63 69 66 69 63 20 72 6f 77 69   a.specific rowi
9eb0: 64 2c 20 6f 72 20 66 6f 72 20 61 6c 6c 20 72 65  d, or for all re
9ec0: 63 6f 72 64 73 20 77 69 74 68 20 72 6f 77 69 64  cords with rowid
9ed0: 73 20 77 69 74 68 69 6e 20 61 20 73 70 65 63 69  s within a speci
9ee0: 66 69 65 64 20 72 61 6e 67 65 20 69 73 0a 61 72  fied range is.ar
9ef0: 6f 75 6e 64 20 74 77 69 63 65 20 61 73 20 66 61  ound twice as fa
9f00: 73 74 20 61 73 20 61 20 73 69 6d 69 6c 61 72 20  st as a similar 
9f10: 73 65 61 72 63 68 20 6d 61 64 65 20 62 79 20 73  search made by s
9f20: 70 65 63 69 66 79 69 6e 67 20 61 6e 79 20 6f 74  pecifying any ot
9f30: 68 65 72 20 50 52 49 4d 41 52 59 0a 4b 45 59 20  her PRIMARY.KEY 
9f40: 6f 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75 65  or indexed value
9f50: 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68 20 6f 6e 65  ...<p> ^With one
9f60: 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 74 65 64   exception noted
9f70: 20 62 65 6c 6f 77 2c 20 69 66 20 61 20 72 6f 77   below, if a row
9f80: 69 64 20 74 61 62 6c 65 20 68 61 73 20 61 20 70  id table has a p
9f90: 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74 20  rimary key that 
9fa0: 63 6f 6e 73 69 73 74 73 0a 6f 66 20 61 20 73 69  consists.of a si
9fb0: 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 20  ngle column and 
9fc0: 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  the declared typ
9fd0: 65 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e  e of that column
9fe0: 20 69 73 20 22 49 4e 54 45 47 45 52 22 20 69 6e   is "INTEGER" in
9ff0: 20 61 6e 79 20 6d 69 78 74 75 72 65 20 6f 66 0a   any mixture of.
a000: 75 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72 20  upper and lower 
a010: 63 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20 63  case, then the c
a020: 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73 20 61 6e  olumn becomes an
a030: 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72   alias for the r
a040: 6f 77 69 64 2e 20 53 75 63 68 20 61 0a 63 6f 6c  owid. Such a.col
a050: 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 72  umn is usually r
a060: 65 66 65 72 72 65 64 20 74 6f 20 61 73 20 61 6e  eferred to as an
a070: 20 22 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72   "integer primar
a080: 79 20 6b 65 79 22 2e 20 41 20 50 52 49 4d 41 52  y key". A PRIMAR
a090: 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a 6f 6e 6c  Y KEY column.onl
a0a0: 79 20 62 65 63 6f 6d 65 73 20 61 6e 20 69 6e 74  y becomes an int
a0b0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
a0c0: 20 69 66 20 74 68 65 20 64 65 63 6c 61 72 65 64   if the declared
a0d0: 20 74 79 70 65 20 6e 61 6d 65 20 69 73 20 65 78   type name is ex
a0e0: 61 63 74 6c 79 0a 22 49 4e 54 45 47 45 52 22 2e  actly."INTEGER".
a0f0: 20 20 5e 4f 74 68 65 72 20 69 6e 74 65 67 65 72    ^Other integer
a100: 20 74 79 70 65 20 6e 61 6d 65 73 20 6c 69 6b 65   type names like
a110: 20 22 49 4e 54 22 20 6f 72 20 22 42 49 47 49 4e   "INT" or "BIGIN
a120: 54 22 20 6f 72 20 22 53 48 4f 52 54 20 49 4e 54  T" or "SHORT INT
a130: 45 47 45 52 22 0a 6f 72 20 22 55 4e 53 49 47 4e  EGER".or "UNSIGN
a140: 45 44 20 49 4e 54 45 47 45 52 22 20 63 61 75 73  ED INTEGER" caus
a150: 65 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  es the primary k
a160: 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68  ey column to beh
a170: 61 76 65 20 61 73 20 61 6e 20 6f 72 64 69 6e 61  ave as an ordina
a180: 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  ry.table column 
a190: 77 69 74 68 20 69 6e 74 65 67 65 72 20 5b 61 66  with integer [af
a1a0: 66 69 6e 69 74 79 5d 20 61 6e 64 20 61 20 75 6e  finity] and a un
a1b0: 69 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20  ique index, not 
a1c0: 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a  as an alias for.
a1d0: 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c 70 3e 20  the rowid...<p> 
a1e0: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6d 65  The exception me
a1f0: 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65 20 69 73  ntioned above is
a200: 20 74 68 61 74 20 5e 69 66 20 74 68 65 20 64 65   that ^if the de
a210: 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61 20 63  claration of a c
a220: 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65 63 6c 61  olumn with.decla
a230: 72 65 64 20 74 79 70 65 20 22 49 4e 54 45 47 45  red type "INTEGE
a240: 52 22 20 69 6e 63 6c 75 64 65 73 20 61 6e 20 22  R" includes an "
a250: 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43  PRIMARY KEY DESC
a260: 22 20 63 6c 61 75 73 65 2c 20 69 74 20 64 6f 65  " clause, it doe
a270: 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20 61 6e 20  s not.become an 
a280: 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f  alias for the ro
a290: 77 69 64 20 61 6e 64 20 69 73 20 6e 6f 74 20 63  wid and is not c
a2a0: 6c 61 73 73 69 66 69 65 64 20 61 73 20 61 6e 20  lassified as an 
a2b0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
a2c0: 6b 65 79 2e 0a 54 68 69 73 20 71 75 69 72 6b 20  key..This quirk 
a2d0: 69 73 20 6e 6f 74 20 62 79 20 64 65 73 69 67 6e  is not by design
a2e0: 2e 20 49 74 20 69 73 20 64 75 65 20 74 6f 20 61  . It is due to a
a2f0: 20 62 75 67 20 69 6e 20 65 61 72 6c 79 20 76 65   bug in early ve
a300: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
a310: 2e 0a 42 75 74 20 66 69 78 69 6e 67 20 74 68 65  ..But fixing the
a320: 20 62 75 67 20 63 6f 75 6c 64 20 72 65 73 75 6c   bug could resul
a330: 74 20 69 6e 20 62 61 63 6b 77 61 72 64 73 20 69  t in backwards i
a340: 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73  ncompatibilities
a350: 2e 0a 48 65 6e 63 65 2c 20 74 68 65 20 6f 72 69  ..Hence, the ori
a360: 67 69 6e 61 6c 20 62 65 68 61 76 69 6f 72 20 68  ginal behavior h
a370: 61 73 20 62 65 65 6e 20 72 65 74 61 69 6e 65 64  as been retained
a380: 20 28 61 6e 64 20 64 6f 63 75 6d 65 6e 74 65 64   (and documented
a390: 29 20 62 65 63 61 75 73 65 0a 62 65 68 61 76 69  ) because.behavi
a3a0: 6f 72 20 69 6e 20 61 20 63 6f 72 6e 65 72 20 63  or in a corner c
a3b0: 61 73 65 20 69 73 20 66 61 72 20 62 65 74 74 65  ase is far bette
a3c0: 72 20 74 68 61 6e 20 61 20 63 6f 6d 70 61 74 69  r than a compati
a3d0: 62 69 6c 69 74 79 20 62 72 65 61 6b 2e 20 20 54  bility break.  T
a3e0: 68 69 73 20 6d 65 61 6e 73 0a 74 68 61 74 20 5e  his means.that ^
a3f0: 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  (the following t
a400: 68 72 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61  hree table decla
a410: 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73  rations all caus
a420: 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22  e the column "x"
a430: 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69 61 73 20   to be an.alias 
a440: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 28 61  for the rowid (a
a450: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
a460: 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c  y key):..<ul>.<l
a470: 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42  i><tt>CREATE TAB
a480: 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 20 50  LE t(x INTEGER P
a490: 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20  RIMARY KEY ASC, 
a4a0: 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e  y, z);</tt>.<li>
a4b0: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
a4c0: 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c   t(x INTEGER, y,
a4d0: 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   z, PRIMARY KEY(
a4e0: 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 6c  x ASC));</tt>.<l
a4f0: 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42  i><tt>CREATE TAB
a500: 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20  LE t(x INTEGER, 
a510: 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45  y, z, PRIMARY KE
a520: 59 28 78 20 44 45 53 43 29 29 3b 3c 2f 74 74 3e  Y(x DESC));</tt>
a530: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 42 75 74  .</ul>)^..<p>But
a540: 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67   ^(the following
a550: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 64 6f 65   declaration doe
a560: 73 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20  s not result in 
a570: 22 78 22 20 62 65 69 6e 67 20 61 6e 20 61 6c 69  "x" being an ali
a580: 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64  as for.the rowid
a590: 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  :.<ul>.<li><tt>C
a5a0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
a5b0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
a5c0: 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b  KEY DESC, y, z);
a5d0: 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  </tt>.</ul>)^..<
a5e0: 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75 65 73 20  p>^Rowid values 
a5f0: 6d 61 79 20 62 65 20 6d 6f 64 69 66 69 65 64 20  may be modified 
a600: 75 73 69 6e 67 20 61 6e 20 55 50 44 41 54 45 20  using an UPDATE 
a610: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65  statement in the
a620: 20 73 61 6d 65 0a 77 61 79 20 61 73 20 61 6e 79   same.way as any
a630: 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 20 76 61   other column va
a640: 6c 75 65 20 63 61 6e 2c 20 65 69 74 68 65 72 20  lue can, either 
a650: 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65  using one of the
a660: 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69 61 73 65   built-in aliase
a670: 73 0a 28 22 72 6f 77 69 64 22 2c 20 22 6f 69 64  s.("rowid", "oid
a680: 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 29 20  " or "_rowid_") 
a690: 6f 72 20 62 79 20 75 73 69 6e 67 20 61 6e 20 61  or by using an a
a6a0: 6c 69 61 73 20 63 72 65 61 74 65 64 20 62 79 20  lias created by 
a6b0: 61 6e 20 69 6e 74 65 67 65 72 0a 70 72 69 6d 61  an integer.prima
a6c0: 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69 6c 61 72  ry key. ^Similar
a6d0: 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ly, an INSERT st
a6e0: 61 74 65 6d 65 6e 74 20 6d 61 79 20 70 72 6f 76  atement may prov
a6f0: 69 64 65 20 61 20 76 61 6c 75 65 20 74 6f 20 75  ide a value to u
a700: 73 65 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20  se as the.rowid 
a710: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
a720: 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69 6b 65 20  erted. ^(Unlike 
a730: 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f  normal SQLite co
a740: 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74 65 67 65  lumns, an intege
a750: 72 20 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 72  r primary.key or
a760: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75   rowid column mu
a770: 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67  st contain integ
a780: 65 72 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67  er values. Integ
a790: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  er primary key o
a7a0: 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d 6e 73 20  r rowid.columns 
a7b0: 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20  are not able to 
a7c0: 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f  hold floating po
a7d0: 69 6e 74 20 76 61 6c 75 65 73 2c 20 73 74 72 69  int values, stri
a7e0: 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e  ngs, BLOBs, or N
a7f0: 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  ULLs.)^..<p>^If 
a800: 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
a810: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
a820: 73 65 74 20 61 6e 20 69 6e 74 65 67 65 72 20 70  set an integer p
a830: 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f  rimary key or ro
a840: 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f 20 61 20  wid column.to a 
a850: 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c  NULL or blob val
a860: 75 65 2c 20 6f 72 20 74 6f 20 61 20 73 74 72 69  ue, or to a stri
a870: 6e 67 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65  ng or real value
a880: 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20   that cannot be 
a890: 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65  losslessly.conve
a8a0: 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
a8b0: 65 72 2c 20 61 20 22 64 61 74 61 74 79 70 65 20  er, a "datatype 
a8c0: 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20  mismatch" error 
a8d0: 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 20 73  occurs and the s
a8e0: 74 61 74 65 6d 65 6e 74 0a 69 73 20 61 62 6f 72  tatement.is abor
a8f0: 74 65 64 2e 20 5e 49 66 20 61 6e 20 49 4e 53 45  ted. ^If an INSE
a900: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  RT statement att
a910: 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20  empts to insert 
a920: 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72  a blob value, or
a930: 20 61 20 73 74 72 69 6e 67 0a 6f 72 20 72 65 61   a string.or rea
a940: 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  l value that can
a950: 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
a960: 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
a970: 6e 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61  n integer into a
a980: 6e 0a 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n.integer primar
a990: 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y key or rowid c
a9a0: 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74 61 74 79  olumn, a "dataty
a9b0: 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72  pe mismatch" err
a9c0: 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68  or occurs and th
a9d0: 65 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  e.statement is a
a9e0: 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20  borted...<p>^If 
a9f0: 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
aa00: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
aa10: 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c 20 76 61  insert a NULL va
aa20: 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f 77 69 64  lue into a rowid
aa30: 20 6f 72 0a 69 6e 74 65 67 65 72 20 70 72 69 6d   or.integer prim
aa40: 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 2c 20  ary key column, 
aa50: 74 68 65 20 73 79 73 74 65 6d 20 63 68 6f 6f 73  the system choos
aa60: 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  es an integer va
aa70: 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20 74 68  lue to use as th
aa80: 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d 61 74 69  e.rowid automati
aa90: 63 61 6c 6c 79 2e 20 41 20 64 65 74 61 69 6c 65  cally. A detaile
aaa0: 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  d description of
aab0: 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e   how this is don
aac0: 65 20 69 73 20 70 72 6f 76 69 64 65 64 0a 3c 61  e is provided.<a
aad0: 20 68 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68   href="autoinc.h
aae0: 74 6d 6c 22 3e 73 65 70 61 72 61 74 65 6c 79 3c  tml">separately<
aaf0: 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  /a>.</p>..<p>^(T
ab00: 68 65 20 5b 70 61 72 65 6e 74 20 6b 65 79 5d 20  he [parent key] 
ab10: 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e 20 6b 65  of a [foreign ke
ab20: 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20 69 73  y constraint] is
ab30: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
ab40: 75 73 65 20 74 68 65 20 72 6f 77 69 64 2e 20 20  use the rowid.  
ab50: 54 68 65 20 70 61 72 65 6e 74 20 6b 65 79 20 6d  The parent key m
ab60: 75 73 74 20 75 73 65 64 20 6e 61 6d 65 64 20 63  ust used named c
ab70: 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29 5e 3c 2f  olumns only.)^</
ab80: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
ab90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abd0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
abe0: 20 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   {CREATE TRIGGER
abf0: 7d 20 63 72 65 61 74 65 74 72 69 67 67 65 72 20  } createtrigger 
ac00: 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52  {{CREATE TRIGGER
ac10: 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
ac20: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
ac30: 65 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 0a 3c  e-trigger-stmt.<
ac40: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43  /tcl>..<p>^The C
ac50: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73 74  REATE TRIGGER st
ac60: 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
ac70: 74 6f 20 61 64 64 20 74 72 69 67 67 65 72 73 20  to add triggers 
ac80: 74 6f 20 74 68 65 20 0a 64 61 74 61 62 61 73 65  to the .database
ac90: 20 73 63 68 65 6d 61 2e 20 5e 54 72 69 67 67 65   schema. ^Trigge
aca0: 72 73 20 61 72 65 20 64 61 74 61 62 61 73 65 20  rs are database 
acb0: 6f 70 65 72 61 74 69 6f 6e 73 20 0a 74 68 61 74  operations .that
acc0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
acd0: 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65  ly performed whe
ace0: 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 64 61  n a specified da
acf0: 74 61 62 61 73 65 20 65 76 65 6e 74 0a 6f 63 63  tabase event.occ
ad00: 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e  urs.  </p>..<p>^
ad10: 41 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65  A trigger may be
ad20: 20 73 70 65 63 69 66 69 65 64 20 74 6f 20 66 69   specified to fi
ad30: 72 65 20 77 68 65 6e 65 76 65 72 20 61 20 5b 44  re whenever a [D
ad40: 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d  ELETE], [INSERT]
ad50: 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 66  ,.or [UPDATE] of
ad60: 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20 64 61   a.particular da
ad70: 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 63 63  tabase table occ
ad80: 75 72 73 2c 20 6f 72 20 77 68 65 6e 65 76 65 72  urs, or whenever
ad90: 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63 63   an [UPDATE] occ
ada0: 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72  urs on.on one or
adb0: 20 6d 6f 72 65 20 73 70 65 63 69 66 69 65 64 20   more specified 
adc0: 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62  columns of a tab
add0: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20  le.</p>..<p>^At 
ade0: 74 68 69 73 20 74 69 6d 65 20 53 51 4c 69 74 65  this time SQLite
adf0: 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46   supports only F
ae00: 4f 52 20 45 41 43 48 20 52 4f 57 20 74 72 69 67  OR EACH ROW trig
ae10: 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41  gers, not FOR EA
ae20: 43 48 0a 53 54 41 54 45 4d 45 4e 54 20 74 72 69  CH.STATEMENT tri
ae30: 67 67 65 72 73 2e 20 5e 48 65 6e 63 65 20 65 78  ggers. ^Hence ex
ae40: 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69 66 79  plicitly specify
ae50: 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52 4f 57  ing FOR EACH ROW
ae60: 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46   is optional..^F
ae70: 4f 52 20 45 41 43 48 20 52 4f 57 20 69 6d 70 6c  OR EACH ROW impl
ae80: 69 65 73 20 74 68 61 74 20 74 68 65 20 53 51 4c  ies that the SQL
ae90: 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
aea0: 69 66 69 65 64 20 69 6e 20 74 68 65 20 74 72 69  ified in the tri
aeb0: 67 67 65 72 0a 6d 61 79 20 62 65 20 65 78 65 63  gger.may be exec
aec0: 75 74 65 64 20 28 64 65 70 65 6e 64 69 6e 67 20  uted (depending 
aed0: 6f 6e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  on the WHEN clau
aee0: 73 65 29 20 66 6f 72 20 65 61 63 68 20 64 61 74  se) for each dat
aef0: 61 62 61 73 65 20 72 6f 77 20 62 65 69 6e 67 0a  abase row being.
af00: 69 6e 73 65 72 74 65 64 2c 20 75 70 64 61 74 65  inserted, update
af10: 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20  d or deleted by 
af20: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61  the statement ca
af30: 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  using the trigge
af40: 72 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a  r to fire.</p>..
af50: 3c 70 3e 5e 28 42 6f 74 68 20 74 68 65 20 57 48  <p>^(Both the WH
af60: 45 4e 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68  EN clause and th
af70: 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e  e trigger action
af80: 73 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65  s may access ele
af90: 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f  ments of .the ro
afa0: 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64  w being inserted
afb0: 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64  , deleted or upd
afc0: 61 74 65 64 20 75 73 69 6e 67 20 72 65 66 65 72  ated using refer
afd0: 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72  ences of the for
afe0: 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d  m ."NEW.<i>colum
aff0: 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20  n-name</i>" and 
b000: 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  "OLD.<i>column-n
b010: 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a  ame</i>", where.
b020: 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  <i>column-name</
b030: 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  i> is the name o
b040: 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20  f a column from 
b050: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74  the table that t
b060: 68 65 20 74 72 69 67 67 65 72 0a 69 73 20 61 73  he trigger.is as
b070: 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 29 5e  sociated with.)^
b080: 20 5e 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72   ^(OLD and NEW r
b090: 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e  eferences may on
b0a0: 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 72  ly be used in tr
b0b0: 69 67 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73  iggers on.events
b0c0: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 79 20   for which they 
b0d0: 61 72 65 20 72 65 6c 65 76 61 6e 74 2c 20 61 73  are relevant, as
b0e0: 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
b0f0: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63  table border=0 c
b100: 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c  ellpadding=10>.<
b110: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
b120: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
b130: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
b140: 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a  INSERT</i></td>.
b150: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
b160: 3e 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20  >NEW references 
b170: 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c  are valid</td>.<
b180: 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  /tr>.<tr>.<td va
b190: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
b1a0: 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31  ="right" width=1
b1b0: 32 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e  20><i>UPDATE</i>
b1c0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
b1d0: 3d 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f  ="top">NEW and O
b1e0: 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  LD references ar
b1f0: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
b200: 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  r>.<tr>.<td vali
b210: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
b220: 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30  right" width=120
b230: 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f  ><i>DELETE</i></
b240: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
b250: 74 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e  top">OLD referen
b260: 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74  ces are valid</t
b270: 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  d>.</tr>.</table
b280: 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66  >.</p>)^..<p>^If
b290: 20 61 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69   a WHEN clause i
b2a0: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20  s supplied, the 
b2b0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
b2c0: 70 65 63 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c  pecified.are onl
b2d0: 79 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 72  y executed for r
b2e0: 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
b2f0: 65 20 57 48 45 4e 0a 63 6c 61 75 73 65 20 69 73  e WHEN.clause is
b300: 20 74 72 75 65 2e 20 5e 49 66 20 6e 6f 20 57 48   true. ^If no WH
b310: 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70  EN clause is sup
b320: 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73  plied, the SQL s
b330: 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 65 78  tatements.are ex
b340: 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72  ecuted for all r
b350: 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ows.</p>..<p>^Th
b360: 65 20 42 45 46 4f 52 45 20 6f 72 20 41 46 54 45  e BEFORE or AFTE
b370: 52 20 6b 65 79 77 6f 72 64 20 64 65 74 65 72 6d  R keyword determ
b380: 69 6e 65 73 20 77 68 65 6e 20 74 68 65 20 74 72  ines when the tr
b390: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 0a 77 69  igger actions.wi
b3a0: 6c 6c 20 62 65 20 65 78 65 63 75 74 65 64 20 72  ll be executed r
b3b0: 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69  elative to the i
b3c0: 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69  nsertion, modifi
b3d0: 63 61 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61  cation or remova
b3e0: 6c 20 6f 66 20 74 68 65 0a 61 73 73 6f 63 69 61  l of the.associa
b3f0: 74 65 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70  ted row.</p>..<p
b400: 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  >^An [ON CONFLIC
b410: 54 5d 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65  T] clause may be
b420: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
b430: 72 74 20 6f 66 20 61 6e 20 5b 55 50 44 41 54 45  rt of an [UPDATE
b440: 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61 63  ] or [INSERT].ac
b450: 74 69 6f 6e 20 77 69 74 68 69 6e 20 74 68 65 20  tion within the 
b460: 62 6f 64 79 20 6f 66 20 74 68 65 20 74 72 69 67  body of the trig
b470: 67 65 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69 66  ger..^However if
b480: 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54   an [ON CONFLICT
b490: 5d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  ] clause is spec
b4a0: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
b4b0: 20 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20   .the statement 
b4c0: 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67  causing the trig
b4d0: 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65  ger to fire, the
b4e0: 6e 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c  n conflict handl
b4f0: 69 6e 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74 68  ing.policy of th
b500: 65 20 6f 75 74 65 72 20 73 74 61 74 65 6d 65 6e  e outer statemen
b510: 74 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 61  t is used instea
b520: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67  d.</p>..<p>^Trig
b530: 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74  gers are automat
b540: 69 63 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52 49  ically [DROP TRI
b550: 47 47 45 52 20 7c 20 64 72 6f 70 70 65 64 5d 0a  GGER | dropped].
b560: 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  when the table t
b570: 68 61 74 20 74 68 65 79 20 61 72 65 20 0a 61 73  hat they are .as
b580: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 28 74  sociated with (t
b590: 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65  he <i>table-name
b5a0: 3c 2f 69 3e 20 74 61 62 6c 65 29 20 69 73 20 0a  </i> table) is .
b5b0: 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72  [DROP TABLE | dr
b5c0: 6f 70 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76 65  opped].  ^Howeve
b5d0: 72 20 69 66 20 74 68 65 20 74 72 69 67 67 65 72  r if the trigger
b5e0: 20 61 63 74 69 6f 6e 73 20 72 65 66 65 72 65 6e   actions referen
b5f0: 63 65 0a 6f 74 68 65 72 20 74 61 62 6c 65 73 2c  ce.other tables,
b600: 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
b610: 6e 6f 74 20 64 72 6f 70 70 65 64 20 6f 72 20 6d  not dropped or m
b620: 6f 64 69 66 69 65 64 20 69 66 20 74 68 6f 73 65  odified if those
b630: 20 6f 74 68 65 72 0a 74 61 62 6c 65 73 20 61 72   other.tables ar
b640: 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20  e [DROP TABLE | 
b650: 64 72 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c 54  dropped] or [ALT
b660: 45 52 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69 66  ER TABLE | modif
b670: 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ied].</p>..<p>^T
b680: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 6d 6f  riggers are remo
b690: 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44  ved using the [D
b6a0: 52 4f 50 20 54 52 49 47 47 45 52 5d 20 73 74 61  ROP TRIGGER] sta
b6b0: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33  tement.</p>..<h3
b6c0: 3e 53 79 6e 74 61 78 20 52 65 73 74 72 69 63 74  >Syntax Restrict
b6d0: 69 6f 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c 20  ions On UPDATE, 
b6e0: 44 45 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53 45  DELETE, and INSE
b6f0: 52 54 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69  RT Statements Wi
b700: 74 68 69 6e 0a 20 20 20 20 54 72 69 67 67 65 72  thin.    Trigger
b710: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s</h3>..<p>^The 
b720: 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54  [UPDATE], [DELET
b730: 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d  E], and [INSERT]
b740: 0a 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68  .statements with
b750: 69 6e 20 74 72 69 67 67 65 72 73 20 64 6f 20 6e  in triggers do n
b760: 6f 74 20 73 75 70 70 6f 72 74 0a 74 68 65 20 66  ot support.the f
b770: 75 6c 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 5b  ull syntax for [
b780: 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45  UPDATE], [DELETE
b790: 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 20  ], and [INSERT] 
b7a0: 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 54 68 65  statements.  The
b7b0: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74 72   following.restr
b7c0: 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f  ictions apply:</
b7d0: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ul>.<li><p>
b7e0: 0a 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66  .  ^(The name of
b7f0: 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
b800: 20 6d 6f 64 69 66 69 65 64 20 69 6e 20 61 6e 20   modified in an 
b810: 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54  [UPDATE], [DELET
b820: 45 5d 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a  E], or [INSERT].
b830: 20 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74    statement must
b840: 20 62 65 20 61 6e 20 75 6e 71 75 61 6c 69 66 69   be an unqualifi
b850: 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20  ed table name.  
b860: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
b870: 6f 6e 65 20 6d 75 73 74 0a 20 20 75 73 65 20 6a  one must.  use j
b880: 75 73 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61 6d  ust "<i>tablenam
b890: 65 3c 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e 64  e</i>" not "<i>d
b8a0: 61 74 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c  atabase</i><b>.<
b8b0: 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c  /b><i>tablename<
b8c0: 2f 69 3e 22 0a 20 20 77 68 65 6e 20 73 70 65 63  /i>".  when spec
b8d0: 69 66 79 69 6e 67 20 74 68 65 20 74 61 62 6c 65  ifying the table
b8e0: 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20  .)^  ^The table 
b8f0: 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 6d  to be modified m
b900: 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68 65  ust exist in the
b910: 0a 20 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  .  same database
b920: 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6f 72   as the table or
b930: 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
b940: 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
b950: 74 61 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f  tached..  </p></
b960: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  li>..<li><p>.  ^
b970: 54 68 65 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  The "INSERT INTO
b980: 20 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44 45   <i>table</i> DE
b990: 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f  FAULT VALUES" fo
b9a0: 72 6d 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52  rm of the [INSER
b9b0: 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 69  T] statement.  i
b9c0: 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e  s not supported.
b9d0: 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  .  </p></li>..<l
b9e0: 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e 44  i><p>.  ^The IND
b9f0: 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20  EXED BY and NOT 
ba00: 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20  INDEXED clauses 
ba10: 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65  are not supporte
ba20: 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 61  d for [UPDATE] a
ba30: 6e 64 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73 74  nd.  [DELETE] st
ba40: 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e  atements..  </p>
ba50: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20  </li>..<li><p>. 
ba60: 20 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59 20   ^(The ORDER BY 
ba70: 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
ba80: 73 20 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61 6e  s on [UPDATE] an
ba90: 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65  d [DELETE] state
baa0: 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20 20  ments are not.  
bab0: 73 75 70 70 6f 72 74 65 64 2e 20 20 4f 52 44 45  supported.  ORDE
bac0: 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 61  R BY and LIMIT a
bad0: 72 65 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20  re not normally 
bae0: 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55  supported for [U
baf0: 50 44 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45 4c  PDATE] or.  [DEL
bb00: 45 54 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e 74  ETE] in any cont
bb10: 65 78 74 20 62 75 74 20 63 61 6e 20 62 65 20 65  ext but can be e
bb20: 6e 61 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d 6c  nabled for top-l
bb30: 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 73 0a  evel statements.
bb40: 20 20 75 73 69 6e 67 20 74 68 65 20 5b 53 51 4c    using the [SQL
bb50: 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
bb60: 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 20  E_DELETE_LIMIT] 
bb70: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
bb80: 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a 20  ion.  However,. 
bb90: 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69   that compile-ti
bba0: 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20 61  me option only a
bbb0: 70 70 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c 65  pplies to top-le
bbc0: 76 65 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e 64  vel [UPDATE] and
bbd0: 20 5b 44 45 4c 45 54 45 5d 0a 20 20 73 74 61 74   [DELETE].  stat
bbe0: 65 6d 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50 44  ements, not [UPD
bbf0: 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45  ATE] and [DELETE
bc00: 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  ] statements wit
bc10: 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 0a  hin triggers.)^.
bc20: 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c    </p></li>.</ul
bc30: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
bc40: 65 6e 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f 74  ent instead_of_t
bc50: 72 69 67 67 65 72 20 7b 49 4e 53 54 45 41 44 20  rigger {INSTEAD 
bc60: 4f 46 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46 20  OF} {INSTEAD OF 
bc70: 74 72 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c  trigger}</tcl>.<
bc80: 68 33 3e 49 4e 53 54 45 41 44 20 4f 46 20 74 72  h3>INSTEAD OF tr
bc90: 69 67 67 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  igger</h3>..<p>^
bca0: 54 72 69 67 67 65 72 73 20 6d 61 79 20 62 65 20  Triggers may be 
bcb0: 63 72 65 61 74 65 64 20 6f 6e 20 5b 76 69 65 77  created on [view
bcc0: 73 5d 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 6f  s], as well as o
bcd0: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c 20  rdinary tables, 
bce0: 62 79 0a 73 70 65 63 69 66 79 69 6e 67 20 49 4e  by.specifying IN
bcf0: 53 54 45 41 44 20 4f 46 20 69 6e 20 74 68 65 20  STEAD OF in the 
bd00: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
bd10: 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f  tatement. .^If o
bd20: 6e 65 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e  ne or more ON IN
bd30: 53 45 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a  SERT, ON DELETE.
bd40: 6f 72 20 4f 4e 20 55 50 44 41 54 45 20 74 72 69  or ON UPDATE tri
bd50: 67 67 65 72 73 20 61 72 65 20 64 65 66 69 6e 65  ggers are define
bd60: 64 20 6f 6e 20 61 20 76 69 65 77 2c 20 74 68 65  d on a view, the
bd70: 6e 20 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65  n it is not an.e
bd80: 72 72 6f 72 20 74 6f 20 65 78 65 63 75 74 65 20  rror to execute 
bd90: 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
bda0: 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  E or UPDATE stat
bdb0: 65 6d 65 6e 74 20 6f 6e 20 74 68 65 20 76 69 65  ement on the vie
bdc0: 77 2c 20 0a 72 65 73 70 65 63 74 69 76 65 6c 79  w, .respectively
bdd0: 2e 20 20 5e 49 6e 73 74 65 61 64 2c 0a 65 78 65  .  ^Instead,.exe
bde0: 63 75 74 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  cuting an INSERT
bdf0: 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  , DELETE or UPDA
be00: 54 45 20 6f 6e 20 74 68 65 20 76 69 65 77 20 63  TE on the view c
be10: 61 75 73 65 73 20 74 68 65 20 61 73 73 6f 63 69  auses the associ
be20: 61 74 65 64 0a 74 72 69 67 67 65 72 73 20 74 6f  ated.triggers to
be30: 20 66 69 72 65 2e 20 5e 54 68 65 20 72 65 61 6c   fire. ^The real
be40: 20 74 61 62 6c 65 73 20 75 6e 64 65 72 6c 79 69   tables underlyi
be50: 6e 67 20 74 68 65 20 76 69 65 77 20 61 72 65 20  ng the view are 
be60: 6e 6f 74 20 6d 6f 64 69 66 69 65 64 0a 28 65 78  not modified.(ex
be70: 63 65 70 74 20 70 6f 73 73 69 62 6c 79 20 65 78  cept possibly ex
be80: 70 6c 69 63 69 74 6c 79 2c 20 62 79 20 61 20 74  plicitly, by a t
be90: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 29 2e  rigger program).
bea0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  </p>..<p>^Note t
beb0: 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33  hat the [sqlite3
bec0: 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 20  _changes()] and 
bed0: 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63  [sqlite3_total_c
bee0: 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66  hanges()] interf
bef0: 61 63 65 73 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e  aces.do not coun
bf00: 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  t INSTEAD OF tri
bf10: 67 67 65 72 20 66 69 72 69 6e 67 73 2c 20 62 75  gger firings, bu
bf20: 74 20 74 68 65 0a 5b 63 6f 75 6e 74 5f 63 68 61  t the.[count_cha
bf30: 6e 67 65 73 20 70 72 61 67 6d 61 5d 20 64 6f 65  nges pragma] doe
bf40: 73 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20  s count INSTEAD 
bf50: 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e  OF trigger firin
bf60: 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d  g.</p>..<h3>Exam
bf70: 70 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  ples</h3>..<p>^(
bf80: 41 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63 75  Assuming that cu
bf90: 73 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20 61  stomer records a
bfa0: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
bfb0: 20 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61 62   "customers" tab
bfc0: 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72 64  le, and.that ord
bfd0: 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73  er records are s
bfe0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f 72  tored in the "or
bff0: 64 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68 65  ders" table, the
c000: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 72 69 67 67   following trigg
c010: 65 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74 20  er.ensures that 
c020: 61 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20 6f  all associated o
c030: 72 64 65 72 73 20 61 72 65 20 72 65 64 69 72 65  rders are redire
c040: 63 74 65 64 20 77 68 65 6e 20 61 20 63 75 73 74  cted when a cust
c050: 6f 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69 73  omer changes.his
c060: 20 6f 72 20 68 65 72 20 61 64 64 72 65 73 73 3a   or her address:
c070: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
c080: 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 52 49 47  le {.CREATE TRIG
c090: 47 45 52 20 75 70 64 61 74 65 5f 63 75 73 74 6f  GER update_custo
c0a0: 6d 65 72 5f 61 64 64 72 65 73 73 20 55 50 44 41  mer_address UPDA
c0b0: 54 45 20 4f 46 20 61 64 64 72 65 73 73 20 4f 4e  TE OF address ON
c0c0: 20 63 75 73 74 6f 6d 65 72 73 20 0a 20 20 42 45   customers .  BE
c0d0: 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20 6f  GIN.    UPDATE o
c0e0: 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73  rders SET addres
c0f0: 73 20 3d 20 6e 65 77 2e 61 64 64 72 65 73 73 20  s = new.address 
c100: 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e  WHERE customer_n
c110: 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a  ame = old.name;.
c120: 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a    END;.}</tcl>..
c130: 3c 70 3e 57 69 74 68 20 74 68 69 73 20 74 72 69  <p>With this tri
c140: 67 67 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c 20  gger installed, 
c150: 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 73 74  executing the st
c160: 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74  atement:</p>..<t
c170: 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44  cl>Example {.UPD
c180: 41 54 45 20 63 75 73 74 6f 6d 65 72 73 20 53 45  ATE customers SE
c190: 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d  T address = '1 M
c1a0: 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20 6e  ain St.' WHERE n
c1b0: 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65  ame = 'Jack Jone
c1c0: 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  s';.}</tcl>..<p>
c1d0: 63 61 75 73 65 73 20 74 68 65 20 66 6f 6c 6c 6f  causes the follo
c1e0: 77 69 6e 67 20 74 6f 20 62 65 20 61 75 74 6f 6d  wing to be autom
c1f0: 61 74 69 63 61 6c 6c 79 20 65 78 65 63 75 74 65  atically execute
c200: 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61  d:</p>..<tcl>Exa
c210: 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72  mple {.UPDATE or
c220: 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73  ders SET address
c230: 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20   = '1 Main St.' 
c240: 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e  WHERE customer_n
c250: 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65  ame = 'Jack Jone
c260: 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c  s';.}</tcl>)^..<
c270: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
c280: 75 6e 64 65 66 5f 62 65 66 6f 72 65 20 7b 75 6e  undef_before {un
c290: 64 65 66 69 6e 65 64 20 42 45 46 4f 52 45 20 74  defined BEFORE t
c2a0: 72 69 67 67 65 72 20 62 65 68 61 76 69 6f 72 7d  rigger behavior}
c2b0: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 61 75 74 69  </tcl>.<h3>Cauti
c2c0: 6f 6e 73 20 4f 6e 20 54 68 65 20 55 73 65 20 4f  ons On The Use O
c2d0: 66 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72  f BEFORE trigger
c2e0: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20  s</h3>..<p>If a 
c2f0: 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 6f 72  BEFORE UPDATE or
c300: 20 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20 74   BEFORE DELETE t
c310: 72 69 67 67 65 72 20 6d 6f 64 69 66 69 65 73 20  rigger modifies 
c320: 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77  or deletes a row
c330: 0a 74 68 61 74 20 77 61 73 20 74 6f 20 68 61 76  .that was to hav
c340: 65 20 62 65 65 6e 20 75 70 64 61 74 65 64 20 6f  e been updated o
c350: 72 20 64 65 6c 65 74 65 64 2c 20 74 68 65 6e 20  r deleted, then 
c360: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
c370: 65 20 73 75 62 73 65 71 75 65 6e 74 0a 75 70 64  e subsequent.upd
c380: 61 74 65 20 6f 72 20 64 65 6c 65 74 65 20 6f 70  ate or delete op
c390: 65 72 61 74 69 6f 6e 20 69 73 20 75 6e 64 65 66  eration is undef
c3a0: 69 6e 65 64 2e 20 20 46 75 72 74 68 65 72 6d 6f  ined.  Furthermo
c3b0: 72 65 2c 20 69 66 20 61 20 42 45 46 4f 52 45 20  re, if a BEFORE 
c3c0: 74 72 69 67 67 65 72 0a 6d 6f 64 69 66 69 65 73  trigger.modifies
c3d0: 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f   or deletes a ro
c3e0: 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 75 6e  w, then it is un
c3f0: 64 65 66 69 6e 65 64 20 77 68 65 74 68 65 72 20  defined whether 
c400: 6f 72 20 6e 6f 74 20 41 46 54 45 52 20 74 72 69  or not AFTER tri
c410: 67 67 65 72 73 0a 74 68 61 74 20 77 6f 75 6c 64  ggers.that would
c420: 20 68 61 76 65 20 6f 74 68 65 72 77 69 73 65 20   have otherwise 
c430: 72 75 6e 20 6f 6e 20 74 68 6f 73 65 20 72 6f 77  run on those row
c440: 73 20 77 69 6c 6c 20 69 6e 20 66 61 63 74 20 72  s will in fact r
c450: 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  un..</p>..<p>The
c460: 20 76 61 6c 75 65 20 6f 66 20 4e 45 57 2e 72 6f   value of NEW.ro
c470: 77 69 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  wid is undefined
c480: 20 69 6e 20 61 20 42 45 46 4f 52 45 20 49 4e 53   in a BEFORE INS
c490: 45 52 54 20 74 72 69 67 67 65 72 20 69 6e 20 77  ERT trigger in w
c4a0: 68 69 63 68 0a 74 68 65 20 72 6f 77 69 64 20 69  hich.the rowid i
c4b0: 73 20 6e 6f 74 20 65 78 70 6c 69 63 69 74 6c 79  s not explicitly
c4c0: 20 73 65 74 20 74 6f 20 61 6e 20 69 6e 74 65 67   set to an integ
c4d0: 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61  er.</p>..<p>Beca
c4e0: 75 73 65 20 6f 66 20 74 68 65 20 62 65 68 61 76  use of the behav
c4f0: 69 6f 72 73 20 64 65 73 63 72 69 62 65 64 20 61  iors described a
c500: 62 6f 76 65 2c 20 70 72 6f 67 72 61 6d 6d 65 72  bove, programmer
c510: 73 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65 64  s are encouraged
c520: 20 74 6f 0a 70 72 65 66 65 72 20 41 46 54 45 52   to.prefer AFTER
c530: 20 74 72 69 67 67 65 72 73 20 6f 76 65 72 20 42   triggers over B
c540: 45 46 4f 52 45 20 74 72 69 67 67 65 72 73 2e 3c  EFORE triggers.<
c550: 2f 70 3e 0a 0a 3c 68 33 3e 54 68 65 20 52 41 49  /p>..<h3>The RAI
c560: 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f 68  SE() function</h
c570: 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70 65 63 69  3>..<p>^(A speci
c580: 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  al SQL function 
c590: 52 41 49 53 45 28 29 20 6d 61 79 20 62 65 20 75  RAISE() may be u
c5a0: 73 65 64 20 77 69 74 68 69 6e 20 61 20 74 72 69  sed within a tri
c5b0: 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a  gger-program,)^.
c5c0: 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69  with the followi
c5d0: 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a  ng syntax</p> ..
c5e0: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
c5f0: 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69 6f  am raise-functio
c600: 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 28 57 68  n</tcl>..<p>^(Wh
c610: 65 6e 20 6f 6e 65 20 6f 66 20 52 41 49 53 45 28  en one of RAISE(
c620: 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e 29 2c 20 52  ROLLBACK,...), R
c630: 41 49 53 45 28 41 42 4f 52 54 2c 2e 2e 2e 29 20  AISE(ABORT,...) 
c640: 6f 72 20 52 41 49 53 45 28 46 41 49 4c 2c 2e 2e  or RAISE(FAIL,..
c650: 2e 29 0a 69 73 20 63 61 6c 6c 65 64 20 64 75 72  .).is called dur
c660: 69 6e 67 20 74 72 69 67 67 65 72 2d 70 72 6f 67  ing trigger-prog
c670: 72 61 6d 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74  ram.execution, t
c680: 68 65 20 73 70 65 63 69 66 69 65 64 20 5b 4f 4e  he specified [ON
c690: 20 43 4f 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65   CONFLICT] proce
c6a0: 73 73 69 6e 67 20 69 73 20 70 65 72 66 6f 72 6d  ssing is perform
c6b0: 65 64 0a 74 68 65 20 63 75 72 72 65 6e 74 20 71  ed.the current q
c6c0: 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65 73 2e  uery terminates.
c6d0: 29 5e 0a 41 6e 20 65 72 72 6f 72 20 63 6f 64 65  )^.An error code
c6e0: 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53   of [SQLITE_CONS
c6f0: 54 52 41 49 4e 54 5d 20 69 73 20 72 65 74 75 72  TRAINT] is retur
c700: 6e 65 64 20 74 6f 20 74 68 65 20 61 70 70 6c 69  ned to the appli
c710: 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69  cation,.along wi
c720: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
c730: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c   error message.<
c740: 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41  /p>..<p>^When RA
c750: 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20 63  ISE(IGNORE) is c
c760: 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61 69  alled, the remai
c770: 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75 72 72  nder of the curr
c780: 65 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f 67  ent trigger prog
c790: 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d 65  ram,.the stateme
c7a0: 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74  nt that caused t
c7b0: 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
c7c0: 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e  am to execute an
c7d0: 64 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74  d any subsequent
c7e0: 0a 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d  .trigger program
c7f0: 73 20 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76  s that would hav
c800: 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20  e been executed 
c810: 61 72 65 20 61 62 61 6e 64 6f 6e 65 64 2e 20 5e  are abandoned. ^
c820: 4e 6f 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e  No database.chan
c830: 67 65 73 20 61 72 65 20 72 6f 6c 6c 65 64 20 62  ges are rolled b
c840: 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20 73 74  ack.  ^If the st
c850: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75  atement that cau
c860: 73 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20  sed the trigger 
c870: 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78 65 63 75  program.to execu
c880: 74 65 20 69 73 20 69 74 73 65 6c 66 20 70 61 72  te is itself par
c890: 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 20 70  t of a trigger p
c8a0: 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20 74 68 61  rogram, then tha
c8b0: 74 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  t trigger progra
c8c0: 6d 0a 72 65 73 75 6d 65 73 20 65 78 65 63 75 74  m.resumes execut
c8d0: 69 6f 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e  ion at the begin
c8e0: 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e 65 78 74  ning of the next
c8f0: 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63   step..</p>..<tc
c900: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 65  l>hd_fragment te
c910: 6d 70 74 72 69 67 20 7b 54 45 4d 50 20 74 72 69  mptrig {TEMP tri
c920: 67 67 65 72 73 20 6f 6e 20 6e 6f 6e 2d 54 45 4d  ggers on non-TEM
c930: 50 20 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a  P tables}</tcl>.
c940: 3c 68 33 3e 54 45 4d 50 20 54 72 69 67 67 65 72  <h3>TEMP Trigger
c950: 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d 50 20 54 61  s on Non-TEMP Ta
c960: 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  bles</h3>..<p>^(
c970: 41 20 74 72 69 67 67 65 72 20 6e 6f 72 6d 61 6c  A trigger normal
c980: 6c 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  ly exists in the
c990: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
c9a0: 73 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  s the table name
c9b0: 64 0a 61 66 74 65 72 20 74 68 65 20 22 4f 4e 22  d.after the "ON"
c9c0: 20 6b 65 79 77 6f 72 64 20 69 6e 20 74 68 65 20   keyword in the 
c9d0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
c9e0: 74 61 74 65 6d 65 6e 74 2e 20 20 45 78 63 65 70  tatement.  Excep
c9f0: 74 2c 20 69 74 20 69 73 0a 70 6f 73 73 69 62 6c  t, it is.possibl
ca00: 65 20 74 6f 20 63 72 65 61 74 65 20 61 20 54 45  e to create a TE
ca10: 4d 50 20 54 52 49 47 47 45 52 20 6f 6e 20 61 20  MP TRIGGER on a 
ca20: 74 61 62 6c 65 20 69 6e 20 61 6e 6f 74 68 65 72  table in another
ca30: 20 64 61 74 61 62 61 73 65 2e 29 5e 20 20 0a 53   database.)^  .S
ca40: 75 63 68 20 61 20 74 72 69 67 67 65 72 20 77 69  uch a trigger wi
ca50: 6c 6c 20 6f 6e 6c 79 20 66 69 72 65 20 77 68 65  ll only fire whe
ca60: 6e 20 63 68 61 6e 67 65 73 0a 61 72 65 20 6d 61  n changes.are ma
ca70: 64 65 20 74 6f 20 74 68 65 20 74 61 72 67 65 74  de to the target
ca80: 20 74 61 62 6c 65 20 62 79 20 74 68 65 20 61 70   table by the ap
ca90: 70 6c 69 63 61 74 69 6f 6e 20 74 68 61 74 20 64  plication that d
caa0: 65 66 69 6e 65 64 20 74 68 65 20 74 72 69 67 67  efined the trigg
cab0: 65 72 2e 0a 4f 74 68 65 72 20 61 70 70 6c 69 63  er..Other applic
cac0: 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 6f 64 69  ations that modi
cad0: 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20  fy the database 
cae0: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 61 62 6c 65  will not be able
caf0: 20 74 6f 20 73 65 65 20 74 68 65 0a 54 45 4d 50   to see the.TEMP
cb00: 20 74 72 69 67 67 65 72 20 61 6e 64 20 68 65 6e   trigger and hen
cb10: 63 65 20 63 61 6e 6e 6f 74 20 72 75 6e 20 74 68  ce cannot run th
cb20: 65 20 74 72 69 67 67 65 72 2e 3c 2f 70 3e 0a 0a  e trigger.</p>..
cb30: 3c 70 3e 57 68 65 6e 20 64 65 66 69 6e 69 6e 67  <p>When defining
cb40: 20 61 20 54 45 4d 50 20 74 72 69 67 67 65 72 20   a TEMP trigger 
cb50: 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d 50 20 74 61  on a non-TEMP ta
cb60: 62 6c 65 2c 20 69 74 20 69 73 20 69 6d 70 6f 72  ble, it is impor
cb70: 74 61 6e 74 20 74 6f 0a 73 70 65 63 69 66 79 20  tant to.specify 
cb80: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 6f 6c  the database hol
cb90: 64 69 6e 67 20 74 68 65 20 6e 6f 6e 2d 54 45 4d  ding the non-TEM
cba0: 50 20 74 61 62 6c 65 2e 20 20 46 6f 72 20 65 78  P table.  For ex
cbb0: 61 6d 70 6c 65 2c 0a 69 6e 20 74 68 65 20 66 6f  ample,.in the fo
cbc0: 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
cbd0: 74 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74 61  t, it is importa
cbe0: 6e 74 20 74 6f 20 73 61 79 20 22 6d 61 69 6e 2e  nt to say "main.
cbf0: 74 61 62 31 22 20 69 6e 73 74 65 61 64 0a 6f 66  tab1" instead.of
cc00: 20 6a 75 73 74 20 22 74 61 62 31 22 3a 3c 2f 70   just "tab1":</p
cc10: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
cc20: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 45 4d 50  pre>.CREATE TEMP
cc30: 20 54 52 49 47 47 45 52 20 65 78 31 20 41 46 54   TRIGGER ex1 AFT
cc40: 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 3c 62 3e  ER INSERT ON <b>
cc50: 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62 31 20 42 45  main.</b>tab1 BE
cc60: 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72 65 3e 3c 2f  GIN ....</pre></
cc70: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
cc80: 46 61 69 6c 75 72 65 20 74 6f 20 73 70 65 63 69  Failure to speci
cc90: 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20  fy the database 
cca0: 6e 61 6d 65 20 6f 6e 20 74 68 65 20 74 61 72 67  name on the targ
ccb0: 65 74 20 74 61 62 6c 65 20 63 6f 75 6c 64 20 72  et table could r
ccc0: 65 73 75 6c 74 0a 69 6e 20 74 68 65 20 54 45 4d  esult.in the TEM
ccd0: 50 20 74 72 69 67 67 65 72 20 62 65 69 6e 67 20  P trigger being 
cce0: 72 65 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  reattached to a 
ccf0: 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 73  table with the s
cd00: 61 6d 65 20 6e 61 6d 65 20 69 6e 0a 61 6e 6f 74  ame name in.anot
cd10: 68 65 72 20 64 61 74 61 62 61 73 65 20 77 68 65  her database whe
cd20: 6e 65 76 65 72 20 61 6e 79 20 73 63 68 65 6d 61  never any schema
cd30: 20 63 68 61 6e 67 65 20 6f 63 63 75 72 73 2e 3c   change occurs.<
cd40: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
cd50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd90: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
cda0: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57 7d  on {CREATE VIEW}
cdb0: 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20 7b 7b   {createview} {{
cdc0: 43 52 45 41 54 45 20 56 49 45 57 7d 20 76 69 65  CREATE VIEW} vie
cdd0: 77 20 2a 76 69 65 77 73 7d 0a 0a 52 65 63 75 72  w *views}..Recur
cde0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
cdf0: 6d 20 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74  m create-view-st
ce00: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
ce10: 68 65 20 43 52 45 41 54 45 20 56 49 45 57 20 63  he CREATE VIEW c
ce20: 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e 73 20 61  ommand assigns a
ce30: 20 6e 61 6d 65 20 74 6f 20 61 20 70 72 65 2d 70   name to a pre-p
ce40: 61 63 6b 61 67 65 64 20 0a 5b 53 45 4c 45 43 54  ackaged .[SELECT
ce50: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f  ] statement. .^O
ce60: 6e 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20  nce the view is 
ce70: 63 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20  created, it can 
ce80: 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46  be used in the F
ce90: 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e  ROM clause.of an
cea0: 6f 74 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69  other [SELECT] i
ceb0: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
cec0: 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le name..</p>..<
ced0: 70 3e 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22  p>^If the "TEMP"
cee0: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
cef0: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69  keyword occurs i
cf00: 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54  n between "CREAT
cf10: 45 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68  E".and "VIEW" th
cf20: 65 6e 20 74 68 65 20 76 69 65 77 20 74 68 61 74  en the view that
cf30: 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f   is created is o
cf40: 6e 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74  nly visible to t
cf50: 68 65 0a 70 72 6f 63 65 73 73 20 74 68 61 74 20  he.process that 
cf60: 6f 70 65 6e 65 64 20 74 68 65 20 64 61 74 61 62  opened the datab
cf70: 61 73 65 20 61 6e 64 20 69 73 20 61 75 74 6f 6d  ase and is autom
cf80: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
cf90: 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61   when.the databa
cfa0: 73 65 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70  se is closed.</p
cfb0: 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74  >..<p> ^If a &lt
cfc0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
cfd0: 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  t; is specified,
cfe0: 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 69   then the view i
cff0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
d000: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
d010: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
d020: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
d030: 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  h a &lt;database
d040: 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68  -name&gt;.and th
d050: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f  e TEMP keyword o
d060: 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c 65 73 73  n a VIEW, unless
d070: 20 74 68 65 20 26 6c 74 3b 64 61 74 61 62 61 73   the &lt;databas
d080: 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 22 74  e-name&gt; is "t
d090: 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 64 61 74  emp"..^If no dat
d0a0: 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70  abase name is sp
d0b0: 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74 68 65  ecified, and the
d0c0: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73   TEMP keyword is
d0d0: 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74 68   not present,.th
d0e0: 65 20 56 49 45 57 20 69 73 20 63 72 65 61 74 65  e VIEW is create
d0f0: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  d in the main da
d100: 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tabase.</p>..<p>
d110: 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c  ^You cannot [DEL
d120: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20  ETE], [INSERT], 
d130: 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 20 76 69  or [UPDATE] a vi
d140: 65 77 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20  ew.  ^Views are 
d150: 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51  read-only .in SQ
d160: 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c  Lite.  ^However,
d170: 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 79   in many cases y
d180: 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49  ou can use an.[I
d190: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
d1a0: 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77 20 74  r] on the view t
d1b0: 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68  o accomplish .th
d1c0: 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e  e same thing.  ^
d1d0: 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65  Views are remove
d1e0: 64 20 0a 77 69 74 68 20 74 68 65 20 5b 44 52 4f  d .with the [DRO
d1f0: 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e  P VIEW] command.
d200: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
d210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d250: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
d260: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 52 54 55  on {CREATE VIRTU
d270: 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74  AL TABLE} {creat
d280: 65 76 74 61 62 7d 20 7b 7b 43 52 45 41 54 45 20  evtab} {{CREATE 
d290: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a  VIRTUAL TABLE}}.
d2a0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
d2b0: 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76  Diagram create-v
d2c0: 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d  irtual-table-stm
d2d0: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 5b  t.</tcl>..<p>A [
d2e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 69  virtual table] i
d2f0: 73 20 61 6e 20 69 6e 74 65 72 66 61 63 65 20 74  s an interface t
d300: 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 73 74  o an external st
d310: 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70 75 74 61  orage or computa
d320: 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68 61 74  tion.engine that
d330: 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61   appears to be a
d340: 20 74 61 62 6c 65 20 62 75 74 20 64 6f 65 73 20   table but does 
d350: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74 6f  not actually sto
d360: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69  re information.i
d370: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
d380: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20  ile.</p>..<p>In 
d390: 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63 61 6e  general, you can
d3a0: 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 77 69 74   do anything wit
d3b0: 68 20 61 20 5b 76 69 72 74 75 61 6c 20 74 61 62  h a [virtual tab
d3c0: 6c 65 5d 20 74 68 61 74 20 63 61 6e 20 62 65 20  le] that can be 
d3d0: 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f 72 64  done.with an ord
d3e0: 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 65 78 63  inary table, exc
d3f0: 65 70 74 20 74 68 61 74 20 5e 79 6f 75 20 63 61  ept that ^you ca
d400: 6e 6e 6f 74 20 63 72 65 61 74 65 20 69 6e 64 69  nnot create indi
d410: 63 65 73 20 6f 72 20 74 72 69 67 67 65 72 73 20  ces or triggers 
d420: 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20 74 61 62  on a.virtual tab
d430: 6c 65 2e 20 20 5e 53 6f 6d 65 20 76 69 72 74 75  le.  ^Some virtu
d440: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
d450: 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 69  ntations might i
d460: 6d 70 6f 73 65 20 61 64 64 69 74 69 6f 6e 61 6c  mpose additional
d470: 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 2e 20 20  .restrictions.  
d480: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e  For example, man
d490: 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  y virtual tables
d4a0: 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c   are read-only.<
d4b0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 26 6c 74 3b  /p>..<p>The &lt;
d4c0: 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20  module-name&gt; 
d4d0: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
d4e0: 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 6d  n object that im
d4f0: 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69 72  plements.the vir
d500: 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54 68  tual table.  ^Th
d510: 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d  e &lt;module-nam
d520: 65 26 67 74 3b 20 6d 75 73 74 20 62 65 20 72 65  e&gt; must be re
d530: 67 69 73 74 65 72 65 64 20 77 69 74 68 0a 74 68  gistered with.th
d540: 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  e SQLite databas
d550: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75 73 69  e connection usi
d560: 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  ng.[sqlite3_crea
d570: 74 65 5f 6d 6f 64 75 6c 65 28 29 5d 20 6f 72 20  te_module()] or 
d580: 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
d590: 6d 6f 64 75 6c 65 5f 76 32 28 29 5d 0a 70 72 69  module_v2()].pri
d5a0: 6f 72 20 74 6f 20 69 73 73 75 69 6e 67 20 74 68  or to issuing th
d5b0: 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  e CREATE VIRTUAL
d5c0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
d5d0: 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c 65 20 74 61  ..^The module ta
d5e0: 6b 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  kes zero or more
d5f0: 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64   comma-separated
d600: 20 61 72 67 75 6d 65 6e 74 73 2e 0a 5e 54 68 65   arguments..^The
d610: 20 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62   arguments can b
d620: 65 20 6a 75 73 74 20 61 62 6f 75 74 20 61 6e 79  e just about any
d630: 20 74 65 78 74 20 61 73 20 6c 6f 6e 67 20 61 73   text as long as
d640: 20 69 74 20 68 61 73 20 62 61 6c 61 6e 63 65 64   it has balanced
d650: 0a 70 61 72 65 6e 74 68 65 73 65 73 2e 20 20 54  .parentheses.  T
d660: 68 65 20 61 72 67 75 6d 65 6e 74 20 73 79 6e 74  he argument synt
d670: 61 78 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  ax is sufficient
d680: 6c 79 20 67 65 6e 65 72 61 6c 20 74 68 61 74 20  ly general that 
d690: 74 68 65 0a 61 72 67 75 6d 65 6e 74 73 20 63 61  the.arguments ca
d6a0: 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 61 70 70  n be made to app
d6b0: 65 61 72 20 61 73 20 5b 63 6f 6c 75 6d 6e 20 64  ear as [column d
d6c0: 65 66 69 6e 69 74 69 6f 6e 73 5d 20 69 6e 20 61  efinitions] in a
d6d0: 20 74 72 61 64 69 74 69 6f 6e 61 6c 0a 5b 43 52   traditional.[CR
d6e0: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
d6f0: 65 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c 69 74 65  ement.  .^SQLite
d700: 20 70 61 73 73 65 73 20 74 68 65 20 6d 6f 64 75   passes the modu
d710: 6c 65 20 61 72 67 75 6d 65 6e 74 73 20 64 69 72  le arguments dir
d720: 65 63 74 6c 79 0a 74 6f 20 74 68 65 20 5b 78 43  ectly.to the [xC
d730: 72 65 61 74 65 5d 20 61 6e 64 20 5b 78 43 6f 6e  reate] and [xCon
d740: 6e 65 63 74 5d 20 6d 65 74 68 6f 64 73 20 6f 66  nect] methods of
d750: 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
d760: 65 6d 65 6e 74 61 74 69 6f 6e 0a 77 69 74 68 6f  ementation.witho
d770: 75 74 20 61 6e 79 20 69 6e 74 65 72 70 72 65 74  ut any interpret
d780: 61 74 69 6f 6e 2e 20 20 49 74 20 69 73 20 74 68  ation.  It is th
d790: 65 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74 79  e responsibility
d7a0: 0a 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69  .of the module i
d7b0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
d7c0: 20 70 61 72 73 65 20 61 6e 64 20 69 6e 74 65 72   parse and inter
d7d0: 70 72 65 74 20 69 74 73 20 6f 77 6e 20 61 72 67  pret its own arg
d7e0: 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  uments.</p>..<p>
d7f0: 5e 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ^A virtual table
d800: 20 69 73 20 64 65 73 74 72 6f 79 65 64 20 75 73   is destroyed us
d810: 69 6e 67 20 74 68 65 20 6f 72 64 69 6e 61 72 79  ing the ordinary
d820: 0a 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74  .[DROP TABLE] st
d830: 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65 20  atement.  There 
d840: 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49 52 54 55  is no.DROP VIRTU
d850: 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
d860: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  nt.</p>..<tcl>.#
d870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d8a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d8b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
d8c0: 63 74 69 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c  ction DELETE del
d8d0: 65 74 65 20 7b 44 45 4c 45 54 45 20 2a 44 45 4c  ete {DELETE *DEL
d8e0: 45 54 45 73 7d 0a 0a 52 65 63 75 72 73 69 76 65  ETEs}..Recursive
d8f0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
d900: 6c 65 74 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  lete-stmt.</tcl>
d910: 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20  ..<p>The DELETE 
d920: 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20  command removes 
d930: 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 74 68 65  records from the
d940: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
d950: 64 20 62 79 20 74 68 65 0a 20 20 20 3c 69 3e 71  d by the.   <i>q
d960: 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
d970: 61 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c 70 3e 5e 49  ame</i>. ..<p>^I
d980: 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  f the WHERE clau
d990: 73 65 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  se is not presen
d9a0: 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 69  t, all records i
d9b0: 6e 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20  n the table are 
d9c0: 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e 49 66 20  deleted..   ^If 
d9d0: 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
d9e0: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e  s supplied, then
d9f0: 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73   only those rows
da00: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 20   for which the. 
da10: 20 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c    result of eval
da20: 75 61 74 69 6e 67 20 74 68 65 20 57 48 45 52 45  uating the WHERE
da30: 20 63 6c 61 75 73 65 20 61 73 20 61 20 5b 62 6f   clause as a [bo
da40: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
da50: 7c 0a 20 20 20 62 6f 6f 6c 65 61 6e 20 65 78 70  |.   boolean exp
da60: 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d  ression is true]
da70: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
da80: 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20  h3>Restrictions 
da90: 6f 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d  on DELETE Statem
daa0: 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41  ents Within CREA
dab0: 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a  TE TRIGGER</h3>.
dac0: 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
dad0: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  g restrictions a
dae0: 70 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73  pply to DELETE s
daf0: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f  tatements that o
db00: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a  ccur within the.
db10: 20 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52     body of a [CR
db20: 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
db30: 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20  atement:..<ul>. 
db40: 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e   <li><p>^The <i>
db50: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73  table-name</i> s
db60: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
db70: 20 6f 66 20 61 20 44 45 4c 45 54 45 20 73 74 61   of a DELETE sta
db80: 74 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20  tement within.  
db90: 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79    a trigger body
dba0: 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69   must be unquali
dbb0: 66 69 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65  fied.  ^(In othe
dbc0: 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20  r words, the.   
dbd0: 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
dbe0: 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72  e</i><b>.</b> pr
dbf0: 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c  efix on the tabl
dc00: 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c  e name is not al
dc10: 6c 6f 77 65 64 20 0a 20 20 20 20 77 69 74 68 69  lowed .    withi
dc20: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 49  n triggers.)^ ^I
dc30: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  f the table to w
dc40: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
dc50: 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 0a   is attached is.
dc60: 20 20 20 20 6e 6f 74 20 69 6e 20 74 68 65 20 74      not in the t
dc70: 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20 74 68  emp database, th
dc80: 65 6e 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  en DELETE statem
dc90: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20  ents within the 
dca0: 74 72 69 67 67 65 72 0a 20 20 20 20 62 6f 64 79  trigger.    body
dcb0: 20 6d 75 73 74 20 6f 70 65 72 61 74 65 20 6f 6e   must operate on
dcc0: 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e 20 74   tables within t
dcd0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
dce0: 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20   as it. ^If the 
dcf0: 74 61 62 6c 65 0a 20 20 20 20 74 6f 20 77 68 69  table.    to whi
dd00: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
dd10: 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e  s attached is in
dd20: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
dd30: 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20  se, then the.   
dd40: 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d   unqualified nam
dd50: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
dd60: 65 69 6e 67 20 64 65 6c 65 74 65 64 20 69 73 20  eing deleted is 
dd70: 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20  resolved in the 
dd80: 73 61 6d 65 20 77 61 79 20 61 73 0a 20 20 20 20  same way as.    
dd90: 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d  it is for a top-
dda0: 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20  level statement 
ddb0: 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69  (by searching fi
ddc0: 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74  rst the TEMP dat
ddd0: 61 62 61 73 65 2c 20 74 68 65 6e 0a 20 20 20 20  abase, then.    
dde0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
ddf0: 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65  e, then any othe
de00: 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  r databases in t
de10: 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77 65  he order they we
de20: 72 65 0a 20 20 20 20 61 74 74 61 63 68 65 64 29  re.    attached)
de30: 2e 0a 20 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e  ..    .  <li><p>
de40: 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
de50: 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
de60: 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
de70: 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54  allowed on DELET
de80: 45 0a 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73  E.    statements
de90: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
dea0: 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
deb0: 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f  ^The LIMIT and O
dec0: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20  RDER BY clauses 
ded0: 28 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77  (described below
dee0: 29 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  ) are unsupporte
def0: 64 20 66 6f 72 0a 20 20 20 20 44 45 4c 45 54 45  d for.    DELETE
df00: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
df10: 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
df20: 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69  .</ul>..<h3>Opti
df30: 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f  onal LIMIT and O
df40: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 3c  RDER BY clauses<
df50: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51  /h3>..<p>^(If SQ
df60: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
df70: 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54   with the [SQLIT
df80: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
df90: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f  DELETE_LIMIT].co
dfa0: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
dfb0: 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  n, then the synt
dfc0: 61 78 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  ax of the DELETE
dfd0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 65 78   statement is.ex
dfe0: 74 65 6e 64 65 64 20 62 79 20 74 68 65 20 61 64  tended by the ad
dff0: 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e  dition of option
e000: 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
e010: 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 3a 29 5e  LIMIT clauses:)^
e020: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
e030: 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
e040: 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
e050: 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c  l>..<p>^If a DEL
e060: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
e070: 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
e080: 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  , the maximum nu
e090: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
e0a0: 74 0a 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65  t.will be delete
e0b0: 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76  d is found by ev
e0c0: 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63  aluating the acc
e0d0: 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73  ompanying expres
e0e0: 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67  sion and casting
e0f0: 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  .it to an intege
e100: 72 20 76 61 6c 75 65 2e 20 5e 49 66 20 74 68 65  r value. ^If the
e110: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65   result of the e
e120: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4c 49  valuating the LI
e130: 4d 49 54 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f  MIT clause.canno
e140: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
e150: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
e160: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69  integer value, i
e170: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
e180: 41 20 0a 6e 65 67 61 74 69 76 65 20 4c 49 4d 49  A .negative LIMI
e190: 54 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72  T value is inter
e1a0: 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69  preted as "no li
e1b0: 6d 69 74 22 2e 20 5e 28 49 66 20 74 68 65 20 44  mit". ^(If the D
e1c0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
e1d0: 0a 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46  .also has an OFF
e1e0: 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  SET clause, then
e1f0: 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79   it is similarly
e200: 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63   evaluated and c
e210: 61 73 74 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65  ast to an.intege
e220: 72 20 76 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20  r value. Again, 
e230: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69  it is an error i
e240: 66 20 74 68 65 20 76 61 6c 75 65 20 63 61 6e 6e  f the value cann
e250: 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
e260: 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e  .converted to an
e270: 20 69 6e 74 65 67 65 72 2e 29 5e 20 5e 49 66 20   integer.)^ ^If 
e280: 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53  there is no OFFS
e290: 45 54 20 63 6c 61 75 73 65 2c 20 6f 72 20 74 68  ET clause, or th
e2a0: 65 20 63 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74  e calculated.int
e2b0: 65 67 65 72 20 76 61 6c 75 65 20 69 73 20 6e 65  eger value is ne
e2c0: 67 61 74 69 76 65 2c 20 74 68 65 20 65 66 66 65  gative, the effe
e2d0: 63 74 69 76 65 20 4f 46 46 53 45 54 20 76 61 6c  ctive OFFSET val
e2e0: 75 65 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e  ue is zero...<p>
e2f0: 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54 45 20  ^(If the DELETE 
e300: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e  statement has an
e310: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
e320: 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
e330: 74 68 61 74 20 77 6f 75 6c 64 20 0a 62 65 20 64  that would .be d
e340: 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
e350: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
e360: 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f  IT clause are so
e370: 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  rted according t
e380: 6f 20 74 68 65 20 0a 4f 52 44 45 52 20 42 59 2e  o the .ORDER BY.
e390: 20 54 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c   The first <i>M<
e3a0: 2f 69 3e 20 72 6f 77 73 2c 20 77 68 65 72 65 20  /i> rows, where 
e3b0: 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20  <i>M</i> is the 
e3c0: 76 61 6c 75 65 20 66 6f 75 6e 64 20 62 79 0a 65  value found by.e
e3d0: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4f 46  valuating the OF
e3e0: 46 53 45 54 20 63 6c 61 75 73 65 20 65 78 70 72  FSET clause expr
e3f0: 65 73 73 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70  ession, are skip
e400: 70 65 64 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c  ped, and the fol
e410: 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e  lowing .<i>N</i>
e420: 2c 20 77 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e  , where <i>N</i>
e430: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
e440: 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
e450: 73 73 69 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74  ssion, are delet
e460: 65 64 2e 29 5e 0a 5e 49 66 20 74 68 65 72 65 20  ed.)^.^If there 
e470: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 3c 69  are less than <i
e480: 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61  >N</i> rows rema
e490: 69 6e 69 6e 67 20 61 66 74 65 72 20 74 61 6b 69  ining after taki
e4a0: 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c  ng the OFFSET cl
e4b0: 61 75 73 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e  ause.into accoun
e4c0: 74 2c 20 6f 72 20 69 66 20 74 68 65 20 4c 49 4d  t, or if the LIM
e4d0: 49 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61  IT clause evalua
e4e0: 74 65 64 20 74 6f 20 61 20 6e 65 67 61 74 69 76  ted to a negativ
e4f0: 65 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c  e value, then al
e500: 6c 0a 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73  l.remaining rows
e510: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
e520: 70 3e 5e 49 66 20 74 68 65 20 44 45 4c 45 54 45  p>^If the DELETE
e530: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e   statement has n
e540: 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
e550: 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
e560: 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 64   that.would be d
e570: 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
e580: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
e590: 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73  IT clause are as
e5a0: 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72  sembled in an.ar
e5b0: 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65  bitrary order be
e5c0: 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68  fore applying th
e5d0: 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
e5e0: 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65  ET clauses to de
e5f0: 74 65 72 6d 69 6e 65 20 0a 74 68 65 20 73 75 62  termine .the sub
e600: 73 65 74 20 74 68 61 74 20 61 72 65 20 61 63 74  set that are act
e610: 75 61 6c 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a  ually deleted...
e620: 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42  <p>^(The ORDER B
e630: 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44 45  Y clause on a DE
e640: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
e650: 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64  s used only to d
e660: 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72  etermine which.r
e670: 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20  ows fall within 
e680: 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f  the LIMIT. The o
e690: 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
e6a0: 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69  ws are deleted i
e6b0: 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
e6c0: 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65  is not influence
e6d0: 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
e6e0: 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63  Y clause.)^..<tc
e6f0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72  l>hd_fragment tr
e700: 75 6e 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63  uncateopt {trunc
e710: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
e720: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
e730: 54 72 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a  Truncate Optimiz
e740: 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ation</h3>..<p>^
e750: 57 68 65 6e 20 74 68 65 20 57 48 45 52 45 20 69  When the WHERE i
e760: 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61  s omitted from a
e770: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
e780: 74 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a  t and the table.
e790: 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61  being deleted ha
e7a0: 73 20 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53  s no triggers,.S
e7b0: 51 4c 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70  QLite uses an op
e7c0: 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72  timization to er
e7d0: 61 73 65 20 74 68 65 20 65 6e 74 69 72 65 20 74  ase the entire t
e7e0: 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74  able content.wit
e7f0: 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76  hout having to v
e800: 69 73 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66  isit each row of
e810: 20 74 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76   the table indiv
e820: 69 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74  idually..This "t
e830: 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a  runcate" optimiz
e840: 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20  ation makes the 
e850: 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20  delete run much 
e860: 66 61 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f  faster..Prior to
e870: 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e   SQLite [version
e880: 20 33 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75   3.6.5], the tru
e890: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
e8a0: 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68  on.also meant th
e8b0: 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  at the [sqlite3_
e8c0: 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b  changes()] and.[
e8d0: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
e8e0: 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61  anges()] interfa
e8f0: 63 65 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75  ces.and the [cou
e900: 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d  nt_changes pragm
e910: 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75  a].will not actu
e920: 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  ally return the 
e930: 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65  number of delete
e940: 64 20 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70  d rows.  .That p
e950: 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20  roblem has been 
e960: 66 69 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72  fixed as of [ver
e970: 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70  sion 3.6.5]...<p
e980: 3e 5e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f  >^The truncate o
e990: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20  ptimization can 
e9a0: 62 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  be permanently d
e9b0: 69 73 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20  isabled for all 
e9c0: 71 75 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d  queries.by recom
e9d0: 70 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69  piling.SQLite wi
e9e0: 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f  th the [SQLITE_O
e9f0: 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54  MIT_TRUNCATE_OPT
ea00: 49 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69  IMIZATION] compi
ea10: 6c 65 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c  le-time switch.<
ea20: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e  /p>..<p>The trun
ea30: 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
ea40: 6e 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69  n can also be di
ea50: 73 61 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d  sabled at runtim
ea60: 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c  e using.the [sql
ea70: 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69  ite3_set_authori
ea80: 7a 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65  zer()] interface
ea90: 2e 20 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72  .  ^If an author
eaa0: 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65  izer callback.re
eab0: 74 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47  turns [SQLITE_IG
eac0: 4e 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51  NORE] for an [SQ
ead0: 4c 49 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74  LITE_DELETE] act
eae0: 69 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74  ion code, then.t
eaf0: 68 65 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74  he DELETE operat
eb00: 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64  ion will proceed
eb10: 20 62 75 74 20 74 68 65 20 74 72 75 6e 63 61 74   but the truncat
eb20: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77  e optimization w
eb30: 69 6c 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20  ill.be bypassed 
eb40: 61 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65  and rows will be
eb50: 20 64 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20   deleted one by 
eb60: 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  one.</p>..<tcl>.
eb70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ebb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
ebc0: 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
ebd0: 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
ebe0: 20 2a 44 45 54 41 43 48 0a 0a 52 65 63 75 72 73   *DETACH..Recurs
ebf0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
ec00: 20 64 65 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74   detach-stmt.</t
ec10: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74  cl>..<p>^This st
ec20: 61 74 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73  atement detaches
ec30: 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64   an additional d
ec40: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
ec50: 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61  on previously .a
ec60: 74 74 61 63 68 65 64 20 75 73 69 6e 67 20 74 68  ttached using th
ec70: 65 20 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65  e [ATTACH] state
ec80: 6d 65 6e 74 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f  ment.  .^When no
ec90: 74 20 69 6e 20 5b 73 68 61 72 65 64 20 63 61 63  t in [shared cac
eca0: 68 65 20 6d 6f 64 65 5d 2c 20 0a 69 74 20 69 73  he mode], .it is
ecb0: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76   possible to hav
ecc0: 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
ecd0: 61 73 65 20 66 69 6c 65 20 61 74 74 61 63 68 65  ase file attache
ece0: 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
ecf0: 20 75 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e   using .differen
ed00: 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74  t names, and det
ed10: 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65  aching one conne
ed20: 63 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20  ction to a file 
ed30: 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a  will leave the .
ed40: 6f 74 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f  others intact.</
ed50: 70 3e 0a 5e 49 6e 20 5b 73 68 61 72 65 64 20 63  p>.^In [shared c
ed60: 61 63 68 65 20 6d 6f 64 65 5d 2c 20 61 74 74 65  ache mode], atte
ed70: 6d 70 74 69 6e 67 20 74 6f 20 61 74 74 61 63 68  mpting to attach
ed80: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
ed90: 73 65 20 66 69 6c 65 20 6d 6f 72 65 0a 74 68 61  se file more.tha
eda0: 6e 20 6f 6e 63 65 20 72 65 73 75 6c 74 73 20 69  n once results i
edb0: 6e 20 61 6e 20 65 72 72 6f 72 2e 0a 0a 3c 70 3e  n an error...<p>
edc0: 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20  ^This statement 
edd0: 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c  will fail if SQL
ede0: 69 74 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69  ite is in the mi
edf0: 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61  ddle of a transa
ee00: 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63  ction.</p>...<tc
ee10: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
ee20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee60: 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20  #.Section {DROP 
ee70: 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78  INDEX} dropindex
ee80: 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a   {{DROP INDEX}}.
ee90: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
eea0: 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64  Diagram drop-ind
eeb0: 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ex-stmt.</tcl>..
eec0: 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 49 4e 44  <p>^The DROP IND
eed0: 45 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d  EX statement rem
eee0: 6f 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64  oves an index ad
eef0: 64 65 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52  ded.with the [CR
ef00: 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74  EATE INDEX] stat
ef10: 65 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65  ement.  The inde
ef20: 78 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  x is completely 
ef30: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65  removed from.the
ef40: 20 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79   disk.  The only
ef50: 20 77 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20   way to recover 
ef60: 74 68 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20  the index is to 
ef70: 72 65 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72  reenter the.appr
ef80: 6f 70 72 69 61 74 65 20 5b 43 52 45 41 54 45 20  opriate [CREATE 
ef90: 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  INDEX] command.<
efa0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
efb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
efc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
efd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
efe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eff0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
f000: 6e 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64  n {DROP TABLE} d
f010: 72 6f 70 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20  roptable {{DROP 
f020: 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69  TABLE}}..Recursi
f030: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
f040: 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  drop-table-stmt.
f050: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
f060: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
f070: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
f080: 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
f090: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
f0a0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
f0b0: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
f0c0: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
f0d0: 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70  ame.  ^The dropp
f0e0: 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70  ed table is comp
f0f0: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
f100: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
f110: 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65   .schema and the
f120: 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65   disk file.  The
f130: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
f140: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e  e recovered.  .^
f150: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
f160: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
f170: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
f180: 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
f190: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ted.</p>..<p>^Th
f1a0: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
f1b0: 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
f1c0: 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
f1d0: 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
f1e0: 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
f1f0: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
f200: 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  t exist.</p>..<p
f210: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
f220: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
f230: 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52  re enabled, a DR
f240: 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
f250: 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70   performs an.imp
f260: 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20  licit [DELETE | 
f270: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
f280: 74 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64  tbl&gt;] command
f290: 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
f2a0: 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
f2b0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
f2c0: 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
f2d0: 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
f2e0: 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
f2f0: 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
f300: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
f310: 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
f320: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
f330: 74 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78  t;tbl&gt; .is ex
f340: 65 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20  ecuted, so this 
f350: 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79  cannot cause any
f360: 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72   triggers to fir
f370: 65 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20  e. By contrast, 
f380: 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c  ^an.implicit DEL
f390: 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c  ETE FROM &lt;tbl
f3a0: 26 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20  &gt; does cause 
f3b0: 61 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b  any configured.[
f3c0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
f3d0: 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61  ons] to take pla
f3e0: 63 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70  ce. .^If the imp
f3f0: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
f400: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78  M &lt;tbl&gt; ex
f410: 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f  ecuted.as part o
f420: 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  f a DROP TABLE c
f430: 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20  ommand violates 
f440: 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  any immediate fo
f450: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
f460: 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20  aints,.an error 
f470: 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  is returned and 
f480: 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
f490: 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74   dropped. ^If .t
f4a0: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
f4b0: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
f4c0: 67 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a  gt; causes any .
f4d0: 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
f4e0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
f4f0: 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c   to be violated,
f500: 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69   and the violati
f510: 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20  ons still.exist 
f520: 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  when the transac
f530: 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65  tion is committe
f540: 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  d, an error is r
f550: 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74  eturned at the t
f560: 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a  ime.of commit...
f570: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
f580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5c0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
f5d0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
f5e0: 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54  trigger {{DROP T
f5f0: 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73  RIGGER}}..Recurs
f600: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
f610: 20 64 72 6f 70 2d 74 72 69 67 67 65 72 2d 73 74   drop-trigger-st
f620: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
f630: 68 65 20 44 52 4f 50 20 54 52 49 47 47 45 52 20  he DROP TRIGGER 
f640: 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
f650: 73 20 61 20 74 72 69 67 67 65 72 20 63 72 65 61  s a trigger crea
f660: 74 65 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45  ted by the .[CRE
f670: 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
f680: 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20 72 65  tement. ^Once re
f690: 6d 6f 76 65 64 2c 20 74 68 65 20 74 72 69 67 67  moved, the trigg
f6a0: 65 72 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73  er definition is
f6b0: 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72 65 73 65   no.longer prese
f6c0: 6e 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  nt in the sqlite
f6d0: 5f 6d 61 73 74 65 72 20 28 6f 72 20 73 71 6c 69  _master (or sqli
f6e0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20  te_temp_master) 
f6f0: 74 61 62 6c 65 20 61 6e 64 20 69 73 0a 6e 6f 74  table and is.not
f700: 20 66 69 72 65 64 20 62 79 20 61 6e 79 20 73 75   fired by any su
f710: 62 73 65 71 75 65 6e 74 20 49 4e 53 45 52 54 2c  bsequent INSERT,
f720: 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
f730: 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c  E statements...<
f740: 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 72 69  p>^Note that tri
f750: 67 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61  ggers are automa
f760: 74 69 63 61 6c 6c 79 20 64 72 6f 70 70 65 64 20  tically dropped 
f770: 77 68 65 6e 20 74 68 65 20 61 73 73 6f 63 69 61  when the associa
f780: 74 65 64 20 74 61 62 6c 65 20 69 73 0a 64 72 6f  ted table is.dro
f790: 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  pped...<tcl>.###
f7a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f7e0: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
f7f0: 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20  ion {DROP VIEW} 
f800: 64 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20  dropview {{DROP 
f810: 56 49 45 57 7d 7d 0a 0a 52 65 63 75 72 73 69 76  VIEW}}..Recursiv
f820: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  eBubbleDiagram d
f830: 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f  rop-view-stmt.</
f840: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
f850: 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
f860: 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77  t removes a view
f870: 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
f880: 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 0a 20  [CREATE VIEW] . 
f890: 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54 68 65   statement. ^The
f8a0: 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e   view definition
f8b0: 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d   is removed from
f8c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
f8d0: 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e 6f 20  hema, but .  no 
f8e0: 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e 20 74  actual data in t
f8f0: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 62 61  he underlying ba
f900: 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d 6f 64  se tables is mod
f910: 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65  ified...<p>^(The
f920: 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20 69 73   view to drop is
f930: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
f940: 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61 6e 64  he view-name and
f950: 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 64 61 74   optional .  dat
f960: 61 62 61 73 65 2d 6e 61 6d 65 20 73 70 65 63 69  abase-name speci
f970: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
f980: 74 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74  the DROP VIEW st
f990: 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20  atement. This . 
f9a0: 20 72 65 66 65 72 65 6e 63 65 20 69 73 20 72 65   reference is re
f9b0: 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74 68 65  solved using the
f9c0: 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63 65 64   standard proced
f9d0: 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20  ure for [object 
f9e0: 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a  resolution].)^..
f9f0: 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20 73 70  <p>.  ^If the sp
fa00: 65 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e  ecified view can
fa10: 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64  not be found and
fa20: 20 74 68 65 20 49 46 20 45 58 49 53 54 53 20 63   the IF EXISTS c
fa30: 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a 20 20  lause is not .  
fa40: 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73 20 61  present, it is a
fa50: 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74 68 65  n error. ^If the
fa60: 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20   specified view 
fa70: 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20  cannot be found 
fa80: 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58 49 53  and an IF.  EXIS
fa90: 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
faa0: 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52 4f 50  sent in the DROP
fab0: 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2c   VIEW statement,
fac0: 20 74 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d   then the statem
fad0: 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70  ent.  is a no-op
fae0: 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ....<tcl>.######
faf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb30: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
fb40: 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a 65 63   {Database Objec
fb50: 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f  t Name Resolutio
fb60: 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62  n} {naming} {{ob
fb70: 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d  ject resolution}
fb80: 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20  }.</tcl>..<p>.  
fb90: 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64 61 74  In SQLite, a dat
fba0: 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28 61 20  abase object (a 
fbb0: 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72  table, index, tr
fbc0: 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 20 69  igger or view) i
fbd0: 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20 20 62  s identified.  b
fbe0: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
fbf0: 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  e object and the
fc00: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
fc10: 61 62 61 73 65 20 74 68 61 74 20 69 74 20 72 65  abase that it re
fc20: 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44 61 74  sides in. .  Dat
fc30: 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20 6d 61  abase objects ma
fc40: 79 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  y reside in the 
fc50: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
fc60: 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
fc70: 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54  , or in.  an [AT
fc80: 54 41 43 48 7c 61 74 74 61 63 68 65 64 20 64 61  TACH|attached da
fc90: 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20  tabase]...<p>.  
fca0: 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68  The syntax of th
fcb0: 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20  e [DROP TABLE], 
fcc0: 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44  [DROP INDEX], [D
fcd0: 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50  ROP VIEW], [DROP
fce0: 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45   TRIGGER],.  [RE
fcf0: 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54  INDEX], [ALTER T
fd00: 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f  ABLE] and many o
fd10: 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c  ther commands al
fd20: 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75 73 65  l permit the use
fd30: 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79 20 61  r to.  specify a
fd40: 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   database object
fd50: 20 65 69 74 68 65 72 20 62 79 20 69 74 73 20 6e   either by its n
fd60: 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79  ame alone, or by
fd70: 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
fd80: 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61 6e 64  f.  its name and
fd90: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69 74 73   the name of its
fda0: 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49 66 20   database. ^(If 
fdb0: 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73 20 73  no database is s
fdc0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
fdd0: 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74  .  of the object
fde0: 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65 6e   reference, then
fdf0: 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73   SQLite searches
fe00: 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20   the main, temp 
fe10: 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64  and all attached
fe20: 0a 20 20 64 61 74 61 62 61 73 65 73 20 66 6f 72  .  databases for
fe30: 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74 68 20   an object with 
fe40: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
fe50: 20 54 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   The temp databa
fe60: 73 65 20 69 73 20 73 65 61 72 63 68 65 64 0a 20  se is searched. 
fe70: 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64   first, followed
fe80: 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64 61 74   by the main dat
fe90: 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20  abase, followed 
fea0: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
feb0: 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a 20 20  abases in the.  
fec0: 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
fed0: 77 65 72 65 20 61 74 74 61 63 68 65 64 2e 20 54  were attached. T
fee0: 68 65 20 72 65 66 65 72 65 6e 63 65 20 72 65 73  he reference res
fef0: 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66 69 72  olves to the fir
ff00: 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64  st match.  found
ff10: 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a  .)^ For example:
ff20: 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 20 20  ..<pre>^(.      
ff30: 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65 20 6e  /* Add a table n
ff40: 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74 68 65  amed 't1' to the
ff50: 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20   temp, main and 
ff60: 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
ff70: 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 41 54  base */.      AT
ff80: 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27 20 41  TACH 'file.db' A
ff90: 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45  S aux;.      CRE
ffa0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
ffb0: 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  y);.      CREATE
ffc0: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 78   TEMP TABLE t1(x
ffd0: 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
ffe0: 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28  TE TABLE aux.t1(
fff0: 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20 44 52  x, y);..      DR
10000 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
10010 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
10020 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74 61 62  le in temp datab
10030 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f  ase */.      DRO
10040 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20  P TABLE t1;     
10050 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c      /* Drop tabl
10060 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61 62 61  e in main databa
10070 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50  se */.      DROP
10080 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20   TABLE t1;      
10090 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65     /* Drop table
100a0 20 69 6e 20 61 75 78 20 64 61 74 61 62 61 73 65   in aux database
100b0 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70   */.)^</pre>..<p
100c0 3e 0a 20 20 5e 49 66 20 61 20 64 61 74 61 62 61  >.  ^If a databa
100d0 73 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69  se name is speci
100e0 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
100f0 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  an object refere
10100 6e 63 65 2c 20 69 74 20 6d 75 73 74 20 62 65 0a  nce, it must be.
10110 20 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c    either "main",
10120 20 6f 72 20 22 74 65 6d 70 22 20 6f 72 20 74 68   or "temp" or th
10130 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61 74 74  e name of an att
10140 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 20  ached database. 
10150 5e 4c 69 6b 65 20 6f 74 68 65 72 0a 20 20 53 51  ^Like other.  SQ
10160 4c 20 69 64 65 6e 74 69 66 69 65 72 73 2c 20 64  L identifiers, d
10170 61 74 61 62 61 73 65 20 6e 61 6d 65 73 20 61 72  atabase names ar
10180 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  e case-insensiti
10190 76 65 2e 20 5e 49 66 20 61 20 64 61 74 61 62 61  ve. ^If a databa
101a0 73 65 20 6e 61 6d 65 0a 20 20 69 73 20 73 70 65  se name.  is spe
101b0 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c  cified, then onl
101c0 79 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61  y the named data
101d0 62 61 73 65 20 69 73 20 73 65 61 72 63 68 65 64  base is searched
101e0 20 66 6f 72 20 74 68 65 20 6e 61 6d 65 64 20 6f   for the named o
101f0 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f  bject...<p>.  Mo
10200 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  st object refere
10210 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65  nces may only re
10220 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65 63 69  solve to a speci
10230 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62 6a 65  fic type of obje
10240 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c  ct (for.  exampl
10250 65 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 68  e a reference th
10260 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 20  at is part of a 
10270 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
10280 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65  ment may only re
10290 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74 61 62  solve.  to a tab
102a0 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61  le object, not a
102b0 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72  n index, trigger
102c0 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77 65 76   or view). Howev
102d0 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65  er in some conte
102e0 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45  xts .  (e.g. [RE
102f0 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63  INDEX]) an objec
10300 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61 79 20  t reference may 
10310 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f  be resolve to mo
10320 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79 70 65  re than one type
10330 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57  .  of object. ^W
10340 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20 64 61  hen searching da
10350 74 61 62 61 73 65 20 73 63 68 65 6d 61 73 20 66  tabase schemas f
10360 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63  or a named objec
10370 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20  t, objects of.  
10380 74 79 70 65 73 20 74 68 61 74 20 63 61 6e 6e 6f  types that canno
10390 74 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65  t be used in the
103a0 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20   context of the 
103b0 72 65 66 65 72 65 6e 63 65 20 61 72 65 20 61 6c  reference are al
103c0 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e  ways .  ignored.
103d0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
103e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10420 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45  ######.Section E
10430 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45  XPLAIN explain E
10440 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69  XPLAIN..BubbleDi
10450 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c  agram sql-stmt.<
10460 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51  /tcl>..<p>^An SQ
10470 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20  L statement can 
10480 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74  be preceded by t
10490 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c  he keyword "EXPL
104a0 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70  AIN" or.by the p
104b0 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51  hrase "EXPLAIN Q
104c0 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69  UERY PLAN".  ^Ei
104d0 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f  ther modificatio
104e0 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c  n causes the.SQL
104f0 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65   statement to be
10500 68 61 76 65 20 61 73 20 61 20 71 75 65 72 79 20  have as a query 
10510 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e  and to return in
10520 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a  formation about.
10530 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74 61 74  how the SQL stat
10540 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
10550 20 6f 70 65 72 61 74 65 64 20 69 66 20 74 68 65   operated if the
10560 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
10570 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64 20 62   or.phrase had b
10580 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e  een omitted.</p>
10590 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20  ..<p>The output 
105a0 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64  from EXPLAIN and
105b0 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
105c0 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  LAN is intended 
105d0 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76 65 20  for.interactive 
105e0 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74 72 6f  analysis and tro
105f0 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c  ubleshooting onl
10600 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20  y.  The details 
10610 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74 20 66  of the .output f
10620 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a 65 63  ormat are subjec
10630 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d  t to change from
10640 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f 66 20   one release of 
10650 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65  SQLite to the ne
10660 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73  xt..Applications
10670 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20   should not use 
10680 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41  EXPLAIN or EXPLA
10690 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 69  IN QUERY PLAN si
106a0 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63 74 20  nce.their exact 
106b0 62 65 68 61 76 69 6f 72 20 69 73 20 76 61 72 69  behavior is vari
106c0 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61  able and only pa
106d0 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74  rtially document
106e0 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ed.</p>..<p>^Whe
106f0 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  n the EXPLAIN ke
10700 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 79  yword appears by
10710 20 69 74 73 65 6c 66 20 69 74 20 63 61 75 73 65   itself it cause
10720 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  s the statement.
10730 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
10740 75 65 72 79 20 74 68 61 74 20 72 65 74 75 72 6e  uery that return
10750 73 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  s the sequence o
10760 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63 68  f .[virtual mach
10770 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ine instructions
10780 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ] it would have 
10790 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
107a0 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a  the command had.
107b0 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
107c0 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65  ord not been pre
107d0 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68 65 20  sent. ^When the 
107e0 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
107f0 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65 61 72  AN phrase.appear
10800 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  s, the statement
10810 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d 6c 65   returns high-le
10820 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  vel information 
10830 72 65 67 61 72 64 69 6e 67 20 74 68 65 20 71 75  regarding the qu
10840 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f  ery.plan that wo
10850 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75 73  uld have been us
10860 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e  ed...The EXPLAIN
10870 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d   QUERY PLAN comm
10880 61 6e 64 20 69 73 20 64 65 73 63 72 69 62 65 64  and is described
10890 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75   in .[explain qu
108a0 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65  ery plan|more de
108b0 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63  tail here]...<tc
108c0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
108d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
108e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
108f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10910 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  #.Section expres
10920 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72  sion expr {*expr
10930 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69  ession {expressi
10940 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 52 65 63  on syntax}}..Rec
10950 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
10960 72 61 6d 20 65 78 70 72 0a 3c 2f 74 63 6c 3e 0a  ram expr.</tcl>.
10970 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e  .<p>This section
10980 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
10990 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20  om the others.  
109a0 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69  Most other secti
109b0 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75  ons of.this docu
109c0 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74  ment talks about
109d0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51   a particular SQ
109e0 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73  L command.  This
109f0 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f   section does.no
10a00 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73  t talk about a s
10a10 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e  tandalone comman
10a20 64 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70  d but about "exp
10a30 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20  ressions" which 
10a40 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e  are .subcomponen
10a50 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72  ts of most other
10a60 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a   commands.</p>..
10a70 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
10a80 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61   binaryops {bina
10a90 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74  ry operators}</t
10aa0 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72  cl>.<h3>Operator
10ab0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69  s</h3>.<p>^(SQLi
10ac0 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74  te understands t
10ad0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e  he following bin
10ae0 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69  ary operators, i
10af0 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67  n order from.hig
10b00 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70  hest to lowest p
10b10 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a  recedence:</p>..
10b20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10b30 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
10b40 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a  2c2cf0"><big>||.
10b50 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20  *    /    %.+   
10b60 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67   -.&lt;&lt;   &g
10b70 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20  t;&gt;   &amp;  
10b80 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b    |.&lt;    &lt;
10b90 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b  =   &gt;    &gt;
10ba0 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20  =.=    ==   !=  
10bb0 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69   &lt;&gt;   </bi
10bc0 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20  g>IS   IS NOT   
10bd0 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42  IN   LIKE   GLOB
10be0 20 20 20 4d 41 54 43 48 20 20 20 52 45 47 45 58     MATCH   REGEX
10bf0 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e  P.AND   .OR</fon
10c00 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
10c10 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53  quote>)^..<p>^(S
10c20 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
10c30 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
10c40 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
10c50 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10c60 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
10c70 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
10c80 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
10c90 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
10ca0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
10cb0 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
10cc0 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b  ment collateop {
10cd0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
10ce0 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
10cf0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
10d00 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74   is a unary post
10d10 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61  fix.operator tha
10d20 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c  t assigns a [col
10d30 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
10d40 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f   to an expressio
10d50 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  n..^The COLLATE 
10d60 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61 20 68  operator has a h
10d70 69 67 68 65 72 20 70 72 65 63 65 64 65 6e 63 65  igher precedence
10d80 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67   (binds more tig
10d90 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 62  htly) than any.b
10da0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 61  inary operator a
10db0 6e 64 20 61 6e 79 20 75 6e 61 72 79 20 70 72 65  nd any unary pre
10dc0 66 69 78 20 6f 70 65 72 61 74 6f 72 20 65 78 63  fix operator exc
10dd0 65 70 74 20 22 7e 22 2e 0a 28 43 4f 4c 4c 41 54  ept "~"..(COLLAT
10de0 45 20 61 6e 64 20 22 7e 22 20 61 72 65 20 61 73  E and "~" are as
10df0 73 6f 63 69 61 74 69 76 65 20 73 6f 20 74 68 65  sociative so the
10e00 69 72 20 62 69 6e 64 69 6e 67 20 6f 72 64 65 72  ir binding order
10e10 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72   does not matter
10e20 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e  .).^The collatin
10e30 67 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  g sequence set b
10e40 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70  y the COLLATE op
10e50 65 72 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73  erator overrides
10e60 20 74 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73   the.collating s
10e70 65 71 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e  equence determin
10e80 65 64 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54  ed by the COLLAT
10e90 45 20 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61  E clause in a ta
10ea0 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69  ble.[column defi
10eb0 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65  nition]..See the
10ec0 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
10ed0 65 6e 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64  ence| detailed d
10ee0 69 73 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c  iscussion on col
10ef0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
10f00 5d 0a 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79  ].in the [dataty
10f10 70 65 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e  pe | Datatype In
10f20 20 53 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65   SQLite3] docume
10f30 6e 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  nt for additiona
10f40 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c  l information..<
10f50 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74  /p>..<tcl>hd_put
10f60 73 20 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72  s ".<p>^The unar
10f70 79 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72  y operator [Oper
10f80 61 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d  ator +] is a no-
10f90 6f 70 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20  op.  ^It can be 
10fa0 61 70 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e  applied.to strin
10fb0 67 73 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f  gs, numbers, blo
10fc0 62 73 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69  bs or NULL and i
10fd0 74 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73  t always returns
10fe0 20 61 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74   a result.with t
10ff0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73  he same value as
11000 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70   the operand.</p
11010 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74  >"</tcl>..<p>Not
11020 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  e that there are
11030 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20   two variations 
11040 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e  of the equals an
11050 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65  d not equals.ope
11060 72 61 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73  rators.  ^Equals
11070 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a   can be either..
11080 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b  <tcl>.hd_puts "[
11090 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b  Operator =] or [
110a0 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54  Operator ==]..^T
110b0 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70  he non-equals op
110c0 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69  erator can be ei
110d0 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21  ther.[Operator !
110e0 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  =] or [Operator 
110f0 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68  {&lt;&gt;}]..^Th
11100 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20  e [Operator ||] 
11110 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f  operator is \"co
11120 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74  ncatenate\" - it
11130 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a   joins together.
11140 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20  the two strings 
11150 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e  of its operands.
11160 0a 5e 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b  .^The operator [
11170 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70  Operator %] outp
11180 75 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  uts the value of
11190 20 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72 61   its left .opera
111a0 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69  nd modulo its ri
111b0 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e  ght operand.</p>
111c0 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74  ..<p>^The result
111d0 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f   of any binary o
111e0 70 65 72 61 74 6f 72 20 69 73 20 65 69 74 68 65  perator is eithe
111f0 72 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  r a numeric valu
11200 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65  e or .NULL, exce
11210 70 74 20 66 6f 72 20 74 68 65 20 5b 4f 70 65 72  pt for the [Oper
11220 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65  ator ||] concate
11230 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20  nation operator 
11240 77 68 69 63 68 20 61 6c 77 61 79 73 20 0a 65 76  which always .ev
11250 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65  aluates to eithe
11260 72 20 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78 74  r NULL or a text
11270 20 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64   value.</p>"..hd
11280 5f 66 72 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e  _fragment {isisn
11290 6f 74 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f 72  ot} {IS operator
112a0 7d 20 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  } {IS NOT operat
112b0 6f 72 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70  or}..hd_puts "<p
112c0 3e 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20  >^The [Operator 
112d0 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f  IS] and [Operato
112e0 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72  r {IS NOT}] oper
112f0 61 74 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20  ators work.like 
11300 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64  [Operator =] and
11310 20 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 65   [Operator !=] e
11320 78 63 65 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f  xcept when one o
11330 72 20 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70  r both of the.op
11340 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e  erands are NULL.
11350 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20   ^In this case, 
11360 69 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  if both operands
11370 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   are NULL, then 
11380 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20  the.IS operator 
11390 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 20 28  evaluates to 1 (
113a0 74 72 75 65 29 20 61 6e 64 20 74 68 65 20 49 53  true) and the IS
113b0 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 65 76   NOT operator ev
113c0 61 6c 75 61 74 65 73 0a 74 6f 20 30 20 28 66 61  aluates.to 0 (fa
113d0 6c 73 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70  lse). ^If one op
113e0 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e  erand is NULL an
113f0 64 20 74 68 65 20 6f 74 68 65 72 20 69 73 20 6e  d the other is n
11400 6f 74 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20  ot, then the.IS 
11410 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
11420 65 73 20 74 6f 20 30 20 28 66 61 6c 73 65 29 20  es to 0 (false) 
11430 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f  and the IS NOT o
11440 70 65 72 61 74 6f 72 20 69 73 20 31 20 28 74 72  perator is 1 (tr
11450 75 65 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20  ue)..^It is not 
11460 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 6e 20  possible for an 
11470 49 53 20 6f 72 20 49 53 20 4e 4f 54 20 65 78 70  IS or IS NOT exp
11480 72 65 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75  ression to evalu
11490 61 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70  ate to NULL..^Op
114a0 65 72 61 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f  erators [Operato
114b0 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61  r IS] and [Opera
114c0 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61  tor {IS NOT}] ha
114d0 76 65 20 74 68 65 20 73 61 6d 65 20 0a 70 72 65  ve the same .pre
114e0 63 65 64 65 6e 63 65 20 61 73 20 5b 4f 70 65 72  cedence as [Oper
114f0 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e  ator =]."..<tcl>
11500 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74 76  hd_fragment litv
11510 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20 76 61  alue {literal va
11520 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c  lue}</tcl>.<h3>L
11530 69 74 65 72 61 6c 20 56 61 6c 75 65 73 3c 2f 68  iteral Values</h
11540 33 3e 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61  3>.<p>.^A litera
11550 6c 20 76 61 6c 75 65 20 69 73 20 61 20 63 6f 6e  l value is a con
11560 73 74 61 6e 74 20 6f 66 20 73 6f 6d 65 20 6b 69  stant of some ki
11570 6e 64 2e 0a 5e 4c 69 74 65 72 61 6c 20 76 61 6c  nd..^Literal val
11580 75 65 73 20 6d 61 79 20 62 65 20 69 6e 74 65 67  ues may be integ
11590 65 72 73 2c 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ers, floating po
115a0 69 6e 74 20 6e 75 6d 62 65 72 73 2c 20 73 74 72  int numbers, str
115b0 69 6e 67 73 2c 0a 42 4c 4f 42 73 2c 20 6f 72 20  ings,.BLOBs, or 
115c0 4e 55 4c 4c 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  NULLs.</p>..<p>T
115d0 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20 69 6e  he syntax for in
115e0 74 65 67 65 72 20 61 6e 64 20 66 6c 6f 61 74 69  teger and floati
115f0 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c  ng point literal
11600 73 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 0a  s (collectively.
11610 22 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c  "numeric literal
11620 73 22 29 20 69 73 20 73 68 6f 77 6e 20 62 79 20  s") is shown by 
11630 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69  the following di
11640 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  agram:</p>..<tcl
11650 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6e  >BubbleDiagram n
11660 75 6d 65 72 69 63 2d 6c 69 74 65 72 61 6c 3c 2f  umeric-literal</
11670 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49 66 20 61  tcl>..<p>.^(If a
11680 20 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c   numeric literal
11690 20 68 61 73 20 61 20 64 65 63 69 6d 61 6c 20 70   has a decimal p
116a0 6f 69 6e 74 20 6f 72 20 61 6e 20 65 78 70 6f 6e  oint or an expon
116b0 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65  entiation.clause
116c0 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 66  , then it is a f
116d0 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
116e0 74 65 72 61 6c 2e 20 20 4f 74 68 65 72 77 69 73  teral.  Otherwis
116f0 65 20 69 73 20 69 74 20 69 73 20 61 6e 20 0a 69  e is it is an .i
11700 6e 74 65 67 65 72 20 6c 69 74 65 72 61 6c 2e 29  nteger literal.)
11710 5e 20 20 5e 54 68 65 20 22 45 22 20 63 68 61 72  ^  ^The "E" char
11720 61 63 74 65 72 20 74 68 61 74 20 62 65 67 69 6e  acter that begin
11730 73 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 69 61  s the exponentia
11740 74 69 6f 6e 0a 63 6c 61 75 73 65 20 6f 66 20 61  tion.clause of a
11750 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
11760 6c 69 74 65 72 61 6c 20 63 61 6e 20 62 65 20 65  literal can be e
11770 69 74 68 65 72 20 75 70 70 65 72 20 6f 72 20 6c  ither upper or l
11780 6f 77 65 72 20 63 61 73 65 2e 0a 5e 28 54 68 65  ower case..^(The
11790 20 22 2e 22 20 63 68 61 72 61 63 74 65 72 20 69   "." character i
117a0 73 20 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61  s always used .a
117b0 73 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  s the decimal po
117c0 69 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65 20  int even if the 
117d0 6c 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73  locale setting s
117e0 70 65 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72  pecifies "," for
117f0 0a 74 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65  .this role - the
11800 20 75 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20   use of "," for 
11810 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
11820 74 20 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69  t would result i
11830 6e 0a 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69  n.syntactic ambi
11840 67 75 69 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  guity.)^</p>..<p
11850 3e 20 5e 41 20 73 74 72 69 6e 67 20 63 6f 6e 73  > ^A string cons
11860 74 61 6e 74 20 69 73 20 66 6f 72 6d 65 64 20 62  tant is formed b
11870 79 20 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65 0a  y enclosing the.
11880 73 74 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c 65  string in single
11890 20 71 75 6f 74 65 73 20 28 27 29 2e 20 20 5e 41   quotes (').  ^A
118a0 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 20 77 69   single quote wi
118b0 74 68 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20  thin the string 
118c0 63 61 6e 0a 62 65 20 65 6e 63 6f 64 65 64 20 62  can.be encoded b
118d0 79 20 70 75 74 74 69 6e 67 20 74 77 6f 20 73 69  y putting two si
118e0 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 6e 20 61  ngle quotes in a
118f0 20 72 6f 77 20 2d 20 61 73 20 69 6e 20 50 61 73   row - as in Pas
11900 63 61 6c 2e 0a 43 2d 73 74 79 6c 65 20 65 73 63  cal..C-style esc
11910 61 70 65 73 20 75 73 69 6e 67 20 74 68 65 20 62  apes using the b
11920 61 63 6b 73 6c 61 73 68 20 63 68 61 72 61 63 74  ackslash charact
11930 65 72 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f  er are not suppo
11940 72 74 65 64 20 62 65 63 61 75 73 65 0a 74 68 65  rted because.the
11950 79 20 61 72 65 20 6e 6f 74 20 73 74 61 6e 64 61  y are not standa
11960 72 64 20 53 51 4c 2e 0a 5e 42 4c 4f 42 20 6c 69  rd SQL..^BLOB li
11970 74 65 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e  terals are strin
11980 67 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61  g literals conta
11990 69 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61  ining hexadecima
119a0 6c 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65  l data and.prece
119b0 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  ded by a single 
119c0 22 78 22 20 6f 72 20 22 58 22 20 63 68 61 72 61  "x" or "X" chara
119d0 63 74 65 72 2e 20 20 5e 28 46 6f 72 20 65 78 61  cter.  ^(For exa
119e0 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  mple:</p>..<bloc
119f0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 58 27 35  kquote><pre>.X'5
11a00 33 35 31 34 43 36 39 37 34 36 35 27 0a 3c 2f 70  3514C697465'.</p
11a10 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
11a20 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72  )^..<p>.^A liter
11a30 61 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73  al value can als
11a40 6f 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22  o be the token "
11a50 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  NULL"..</p>..<tc
11a60 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61  l>hd_fragment va
11a70 72 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65 72  rparam parameter
11a80 20 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f 75   parameters {bou
11a90 6e 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b 62  nd parameter} {b
11aa0 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 7d  ound parameters}
11ab0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d  </tcl>.<h3>Param
11ac0 65 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41  eters</h3>.<p>.A
11ad0 20 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20 22   "variable" or "
11ae0 70 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e  parameter" token
11af0 0a 73 70 65 63 69 66 69 65 73 20 61 20 70 6c 61  .specifies a pla
11b00 63 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20  ceholder in the 
11b10 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61  expression for a
11b20 20 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73 20   .value that is 
11b30 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e  filled in at run
11b40 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  time using the.[
11b50 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
11b60 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69  b() | sqlite3_bi
11b70 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20  nd()] family of 
11b80 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 73  C/C++ interfaces
11b90 2e 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e  ..Parameters can
11ba0 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f   take several fo
11bb0 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  rms:.</p>..<bloc
11bc0 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a  kquote>.<table>.
11bd0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
11be0 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
11bf0 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e  op"><b>?</b><i>N
11c00 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  NN</i></td><td w
11c10 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
11c20 3c 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e  <td>^(A question
11c30 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62   mark followed b
11c40 79 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e  y a number <i>NN
11c50 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73 70  N</i> holds a sp
11c60 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74  ot for the.NNN-t
11c70 68 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e  h parameter.  NN
11c80 4e 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65  N must be betwee
11c90 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f  n 1 and [SQLITE_
11ca0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
11cb0 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f  BER].)^.</td>.</
11cc0 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
11cd0 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
11ce0 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e  n="top"><b>?</b>
11cf0 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
11d00 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41  20"></td>.<td>^A
11d10 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74   question mark t
11d20 68 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f  hat is not follo
11d30 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20  wed by a number 
11d40 63 72 65 61 74 65 73 20 61 20 70 61 72 61 6d 65  creates a parame
11d50 74 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62 65  ter.with a numbe
11d60 72 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68  r one greater th
11d70 61 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  an the largest p
11d80 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
11d90 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64  already assigned
11da0 2e 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73  ..^If this means
11db0 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 6e   the parameter n
11dc0 75 6d 62 65 72 20 69 73 20 67 72 65 61 74 65 72  umber is greater
11dd0 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41   than.[SQLITE_MA
11de0 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
11df0 52 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  R], it is an err
11e00 6f 72 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  or..</td>.</tr>.
11e10 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
11e20 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
11e30 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41  op"><b>:</b><i>A
11e40 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
11e50 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
11e60 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f  .<td>^A colon fo
11e70 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65  llowed by an ide
11e80 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c  ntifier name hol
11e90 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20  ds a spot for a 
11ea0 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  .[sqlite3_bind_p
11eb0 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61  arameter_name|na
11ec0 6d 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20 77  med parameter] w
11ed0 69 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41 41  ith the name :AA
11ee0 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61  AA.  .^(Named pa
11ef0 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73  rameters are als
11f00 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65 20  o numbered. The 
11f10 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20  number assigned 
11f20 69 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74  is one greater t
11f30 68 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74 20  han.the largest 
11f40 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
11f50 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65   already assigne
11f60 64 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d 65  d.)^ ^If this me
11f70 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74 65  ans the paramete
11f80 72 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69 67  r.would be assig
11f90 6e 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72 65  ned a number gre
11fa0 61 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54  ater than [SQLIT
11fb0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
11fc0 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e  UMBER], it is.an
11fd0 20 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64   error. To avoid
11fe0 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69   confusion, it i
11ff0 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20  s best to avoid 
12000 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64  mixing named and
12010 20 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d 65   numbered.parame
12020 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ters.</td>.</tr>
12030 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
12040 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
12050 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e  top"><b>@</b><i>
12060 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
12070 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
12080 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20 73  >.<td>^An "at" s
12090 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  ign works exactl
120a0 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20  y like a colon, 
120b0 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
120c0 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72 61  name of.the para
120d0 6d 65 74 65 72 20 63 72 65 61 74 65 64 20 69 73  meter created is
120e0 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74   @AAAA.</td>.</t
120f0 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
12100 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
12110 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c  ="top"><b>$</b><
12120 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c  i>AAAA</i></td><
12130 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
12140 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61  td>.<td>^A dolla
12150 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20  r-sign followed 
12160 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
12170 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73   name also holds
12180 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61   a spot for a na
12190 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69  med.parameter wi
121a0 74 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41 41  th the name $AAA
121b0 41 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74 69  A.  ^(The identi
121c0 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69  fier name in thi
121d0 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75  s case can inclu
121e0 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  de.one or more o
121f0 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22 3a  ccurrences of ":
12200 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69 78 20  :" and a suffix 
12210 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e  enclosed in "(..
12220 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61  .)" containing.a
12230 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 29  ny text at all.)
12240 5e 20 20 54 68 69 73 20 73 79 6e 74 61 78 20 69  ^  This syntax i
12250 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20  s the form of a 
12260 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e  variable name in
12270 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77   the.[http://www
12280 2e 74 63 6c 2e 74 6b 2f 20 7c 20 54 63 6c 20 70  .tcl.tk/ | Tcl p
12290 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75  rogramming langu
122a0 61 67 65 5d 2e 20 20 54 68 65 20 70 72 65 73 65  age].  The prese
122b0 6e 63 65 0a 6f 66 20 74 68 69 73 20 73 79 6e 74  nce.of this synt
122c0 61 78 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  ax results from 
122d0 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51  the fact that SQ
122e0 4c 69 74 65 20 69 73 20 72 65 61 6c 6c 79 20 61  Lite is really a
122f0 20 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69 6f 6e   .[Tcl extension
12300 5d 20 74 68 61 74 20 68 61 73 20 65 73 63 61 70  ] that has escap
12310 65 64 20 69 6e 74 6f 20 74 68 65 20 77 69 6c 64  ed into the wild
12320 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74  .</td>.</tr>.</t
12330 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  able>.</blockquo
12340 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d 65 74  te>..<p>^Paramet
12350 65 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ers that are not
12360 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65 73   assigned values
12370 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
12380 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71  bind_blob() | sq
12390 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61 72  lite3_bind()] ar
123a0 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55 4c  e treated.as NUL
123b0 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  L.</p>..<p>^The 
123c0 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65  maximum paramete
123d0 72 20 6e 75 6d 62 65 72 20 69 73 20 73 65 74 20  r number is set 
123e0 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
123f0 62 79 0a 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d  by.the [SQLITE_M
12400 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
12410 45 52 5d 20 6d 61 63 72 6f 2e 20 20 5e 28 41 6e  ER] macro.  ^(An
12420 20 69 6e 64 69 76 69 64 75 61 6c 20 5b 64 61 74   individual [dat
12430 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12440 73 5d 0a 44 20 63 61 6e 20 72 65 64 75 63 65 20  s].D can reduce 
12450 69 74 73 20 6d 61 78 69 6d 75 6d 20 70 61 72 61  its maximum para
12460 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 62 65 6c  meter number bel
12470 6f 77 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  ow the compile-t
12480 69 6d 65 20 6d 61 78 69 6d 75 6d 0a 75 73 69 6e  ime maximum.usin
12490 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c  g the [sqlite3_l
124a0 69 6d 69 74 5d 28 44 2c 20 5b 53 51 4c 49 54 45  imit](D, [SQLITE
124b0 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f  _LIMIT_VARIABLE_
124c0 4e 55 4d 42 45 52 5d 2c 2e 2e 2e 29 20 69 6e 74  NUMBER],...) int
124d0 65 72 66 61 63 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a  erface.)^.</p>..
124e0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
124f0 20 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50   like LIKE ESCAP
12500 45 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  E</tcl>.<h3>The 
12510 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f 70  LIKE and GLOB op
12520 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e  erators</h3>.<p>
12530 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74  ^The LIKE operat
12540 6f 72 20 64 6f 65 73 20 61 20 70 61 74 74 65 72  or does a patter
12550 6e 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61  n matching compa
12560 72 69 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65 72  rison. ^The oper
12570 61 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74  and.to the right
12580 20 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f 70 65   of the LIKE ope
12590 72 61 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20 74  rator contains t
125a0 68 65 20 70 61 74 74 65 72 6e 20 61 6e 64 20 74  he pattern and t
125b0 68 65 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70 65  he left hand.ope
125c0 72 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68  rand contains th
125d0 65 20 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63  e string to matc
125e0 68 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61  h against the pa
125f0 74 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ttern...<tcl>hd_
12600 70 75 74 73 20 22 5e 41 20 70 65 72 63 65 6e 74  puts "^A percent
12610 20 73 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29 20   symbol (\"%\") 
12620 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
12630 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a  ern matches any.
12640 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f  sequence of zero
12650 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74   or more charact
12660 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ers in the strin
12670 67 2e 20 20 5e 41 6e 20 75 6e 64 65 72 73 63 6f  g.  ^An undersco
12680 72 65 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68  re.(\"_\") in th
12690 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d  e LIKE pattern m
126a0 61 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c  atches any singl
126b0 65 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74  e character in t
126c0 68 65 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41 6e  he.string.  ^(An
126d0 79 20 6f 74 68 65 72 20 63 68 61 72 61 63 74 65  y other characte
126e0 72 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66  r matches itself
126f0 20 6f 72 20 69 74 73 20 6c 6f 77 65 72 2f 75 70   or its lower/up
12700 70 65 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c  per case.equival
12710 65 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69  ent (i.e. case-i
12720 6e 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68  nsensitive match
12730 69 6e 67 29 2e 29 5e 20 20 28 41 20 62 75 67 3a  ing).)^  (A bug:
12740 20 5e 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e   ^SQLite only.un
12750 64 65 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f  derstands upper/
12760 6c 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20 41  lower case for A
12770 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20  SCII characters 
12780 62 79 20 64 65 66 61 75 6c 74 2e 20 20 5e 54 68  by default.  ^Th
12790 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e.LIKE operator 
127a0 69 73 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  is case sensitiv
127b0 65 20 62 79 20 64 65 66 61 75 6c 74 20 66 6f 72  e by default for
127c0 20 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74   unicode charact
127d0 65 72 73 20 74 68 61 74 20 61 72 65 0a 62 65 79  ers that are.bey
127e0 6f 6e 64 20 74 68 65 20 41 53 43 49 49 20 72 61  ond the ASCII ra
127f0 6e 67 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  nge.  For exampl
12800 65 2c 0a 5e 74 68 65 20 65 78 70 72 65 73 73 69  e,.^the expressi
12810 6f 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c  on <b>'a'&nbsp;L
12820 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e  IKE&nbsp;'A'</b>
12830 0a 69 73 20 54 52 55 45 20 62 75 74 20 3c 62 3e  .is TRUE but <b>
12840 27 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c  '&aelig;'&nbsp;L
12850 49 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69 67  IKE&nbsp;'&AElig
12860 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e  ;'</b> is FALSE.
12870 29 3c 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  )<p>"</tcl>..<p>
12880 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  ^If the optional
12890 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69   ESCAPE clause i
128a0 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20  s present, then 
128b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66  the expression.f
128c0 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43  ollowing the ESC
128d0 41 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74  APE keyword must
128e0 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73   evaluate to a s
128f0 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67  tring consisting
12900 20 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61   of.a single cha
12910 72 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68  racter. ^This ch
12920 61 72 61 63 74 65 72 20 6d 61 79 20 62 65 20 75  aracter may be u
12930 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  sed in the LIKE 
12940 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75  pattern.to inclu
12950 64 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65  de literal perce
12960 6e 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65  nt or underscore
12970 20 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68   characters. ^Th
12980 65 20 65 73 63 61 70 65 0a 63 68 61 72 61 63 74  e escape.charact
12990 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  er followed by a
129a0 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20   percent symbol 
129b0 28 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20  (%), underscore 
129c0 28 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64  (_), or a second
129d0 0a 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65  .instance of the
129e0 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65   escape characte
129f0 72 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73  r itself matches
12a00 20 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65   a.literal perce
12a10 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72  nt symbol, under
12a20 73 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67  score, or a sing
12a30 6c 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63  le escape charac
12a40 74 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c  ter,.respectivel
12a50 79 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69  y...<p>^The infi
12a60 78 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  x LIKE operator 
12a70 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
12a80 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70  y calling the.ap
12a90 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
12aa0 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20  d SQL functions 
12ab0 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c  [like(<i>Y</i>,<
12ac0 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69  i>X</i>)] or.[li
12ad0 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58  ke(<i>Y</i>,<i>X
12ae0 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c  </i>,<i>Z</i>)]<
12af0 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  /a>.</p>..<p>^Th
12b00 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
12b10 63 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65  can be made case
12b20 20 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67   sensitive using
12b30 20 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69   the.[case_sensi
12b40 74 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61  tive_like pragma
12b50 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ].</p>..<tcl>hd_
12b60 66 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c  fragment glob GL
12b70 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  OB</tcl>.<p>^The
12b80 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69   GLOB operator i
12b90 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b  s similar to LIK
12ba0 45 20 62 75 74 20 75 73 65 73 20 74 68 65 20 55  E but uses the U
12bb0 6e 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e  nix.file globbin
12bc0 67 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73  g syntax for its
12bd0 20 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c   wildcards.  ^Al
12be0 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65  so, GLOB is case
12bf0 0a 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69  .sensitive, unli
12c00 6b 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20  ke LIKE.  ^Both 
12c10 47 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61  GLOB and LIKE ma
12c20 79 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  y be preceded by
12c30 0a 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64  .the NOT keyword
12c40 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73   to invert the s
12c50 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74  ense of the test
12c60 2e 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c  .  ^The infix GL
12c70 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20  OB .operator is 
12c80 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63  implemented by c
12c90 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74  alling the funct
12ca0 69 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f  ion.[glob(<i>Y</
12cb0 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e  i>,<i>X</i>)] an
12cc0 64 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65  d can be modifie
12cd0 64 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a  d by overriding.
12ce0 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f  that function.</
12cf0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
12d00 6d 65 6e 74 20 72 65 67 65 78 70 20 52 45 47 45  ment regexp REGE
12d10 58 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  XP</tcl>.<p>^The
12d20 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72   REGEXP operator
12d30 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79   is a special sy
12d40 6e 74 61 78 20 66 6f 72 20 74 68 65 20 72 65 67  ntax for the reg
12d50 65 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74  exp().user funct
12d60 69 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70  ion.  ^No regexp
12d70 28 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  () user function
12d80 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 64   is defined by d
12d90 65 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73  efault.and so us
12da0 65 20 6f 66 20 74 68 65 20 52 45 47 45 58 50 20  e of the REGEXP 
12db0 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f  operator will no
12dc0 72 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e  rmally result in
12dd0 20 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67   an.error messag
12de0 65 2e 20 20 5e 49 66 20 61 6e 20 5b 61 70 70 6c  e.  ^If an [appl
12df0 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
12e00 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61  SQL function] na
12e10 6d 65 64 20 22 72 65 67 65 78 70 22 0a 69 73 20  med "regexp".is 
12e20 61 64 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  added at run-tim
12e30 65 2c 20 74 68 65 6e 20 74 68 65 20 22 3c 69 3e  e, then the "<i>
12e40 58 3c 2f 69 3e 20 52 45 47 45 58 50 20 3c 69 3e  X</i> REGEXP <i>
12e50 59 3c 2f 69 3e 22 20 6f 70 65 72 61 74 6f 72 20  Y</i>" operator 
12e60 77 69 6c 6c 0a 62 65 20 69 6d 70 6c 65 6d 65 6e  will.be implemen
12e70 74 65 64 20 61 73 20 61 20 63 61 6c 6c 20 74 6f  ted as a call to
12e80 20 22 72 65 67 65 78 70 28 3c 69 3e 59 3c 2f 69   "regexp(<i>Y</i
12e90 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 22 2e 3c 2f 70  >,<i>X</i>)".</p
12ea0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
12eb0 65 6e 74 20 6d 61 74 63 68 20 4d 41 54 43 48 3c  ent match MATCH<
12ec0 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41  /tcl>.<p>^The MA
12ed0 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69 73 20  TCH operator is 
12ee0 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78  a special syntax
12ef0 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68 28 29   for the match()
12f00 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66  .application-def
12f10 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 2e 20 20  ined function.  
12f20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 6d 61 74  ^The default mat
12f30 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6d  ch() function im
12f40 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61 69  plementation.rai
12f50 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  ses an exception
12f60 20 61 6e 64 20 69 73 20 6e 6f 74 20 72 65 61 6c   and is not real
12f70 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20 61 6e  ly useful for an
12f80 79 74 68 69 6e 67 2e 0a 5e 42 75 74 20 65 78 74  ything..^But ext
12f90 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65 72  ensions can over
12fa0 72 69 64 65 20 74 68 65 20 6d 61 74 63 68 28 29  ride the match()
12fb0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 6d   function with m
12fc0 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67 69  ore.helpful logi
12fd0 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  c.</p>..<tcl>hd_
12fe0 66 72 61 67 6d 65 6e 74 20 62 65 74 77 65 65 6e  fragment between
12ff0 20 42 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c   BETWEEN</tcl>.<
13000 68 33 3e 54 68 65 20 42 45 54 57 45 45 4e 20 6f  h3>The BETWEEN o
13010 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e  perator</h3>.<p>
13020 5e 28 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70  ^(The BETWEEN op
13030 65 72 61 74 6f 72 20 69 73 20 6c 6f 67 69 63 61  erator is logica
13040 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 20 74  lly equivalent t
13050 6f 20 61 20 70 61 69 72 20 6f 66 20 63 6f 6d 70  o a pair of comp
13060 61 72 69 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f  arisons.."<i>x</
13070 69 3e 20 3c 62 3e 42 45 54 57 45 45 4e 3c 2f 62  i> <b>BETWEEN</b
13080 3e 20 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e  > <i>y</i> <b>AN
13090 44 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20  D</b> <i>z</i>" 
130a0 69 73 20 0a 65 71 75 69 76 61 6c 65 6e 74 20 74  is .equivalent t
130b0 6f 20 0a 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26  o ."<i>x</i><b>&
130c0 67 74 3b 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e  gt;=</b><i>y</i>
130d0 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78   <b>AND</b> <i>x
130e0 3c 2f 69 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e  </i><b>&lt;=</b>
130f0 3c 69 3e 7a 3c 2f 69 3e 22 20 65 78 63 65 70 74  <i>z</i>" except
13100 0a 74 68 61 74 20 77 69 74 68 20 42 45 54 57 45  .that with BETWE
13110 45 4e 2c 20 74 68 65 20 3c 69 3e 78 3c 2f 69 3e  EN, the <i>x</i>
13120 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6f   expression is o
13130 6e 6c 79 20 65 76 61 6c 75 61 74 65 64 20 6f 6e  nly evaluated on
13140 63 65 2e 29 5e 0a 5e 54 68 65 20 70 72 65 63 65  ce.)^.^The prece
13150 64 65 6e 63 65 20 6f 66 20 74 68 65 20 42 45 54  dence of the BET
13160 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73  WEEN operator is
13170 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
13180 20 70 72 65 63 65 64 65 6e 63 65 0a 61 73 20 6f   precedence.as o
13190 70 65 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f  perators <b>==</
131a0 62 3e 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e  b> and <b>!=</b>
131b0 20 61 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e   and <b>LIKE</b>
131c0 20 61 6e 64 20 67 72 6f 75 70 73 20 6c 65 66 74   and groups left
131d0 20 74 6f 20 72 69 67 68 74 2e 0a 0a 3c 74 63 6c   to right...<tcl
131e0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73  >hd_fragment cas
131f0 65 20 7b 43 41 53 45 20 65 78 70 72 65 73 73 69  e {CASE expressi
13200 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  on}</tcl>.<h3>Th
13210 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
13220 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20 43 41 53 45  n</h3>.<p>A CASE
13230 20 65 78 70 72 65 73 73 69 6f 6e 20 73 65 72 76   expression serv
13240 65 73 20 61 20 72 6f 6c 65 20 73 69 6d 69 6c 61  es a role simila
13250 72 20 74 6f 20 49 46 2d 54 48 45 4e 2d 45 4c 53  r to IF-THEN-ELS
13260 45 20 69 6e 20 6f 74 68 65 72 0a 70 72 6f 67 72  E in other.progr
13270 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 73  amming languages
13280 2e 20 20 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69  .  ..<p>The opti
13290 6f 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  onal expression 
132a0 74 68 61 74 20 6f 63 63 75 72 73 20 69 6e 20 62  that occurs in b
132b0 65 74 77 65 65 6e 20 74 68 65 20 43 41 53 45 20  etween the CASE 
132c0 6b 65 79 77 6f 72 64 20 61 6e 64 20 74 68 65 0a  keyword and the.
132d0 66 69 72 73 74 20 57 48 45 4e 20 6b 65 79 77 6f  first WHEN keywo
132e0 72 64 20 69 73 20 63 61 6c 6c 65 64 20 74 68 65  rd is called the
132f0 20 22 62 61 73 65 22 20 65 78 70 72 65 73 73 69   "base" expressi
13300 6f 6e 2e 20 5e 54 68 65 72 65 20 61 72 65 20 74  on. ^There are t
13310 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73 0a 6f  wo basic forms.o
13320 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72 65  f the CASE expre
13330 73 73 69 6f 6e 3a 20 74 68 6f 73 65 20 77 69 74  ssion: those wit
13340 68 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73  h a base express
13350 69 6f 6e 20 61 6e 64 20 74 68 6f 73 65 20 77 69  ion and those wi
13360 74 68 6f 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61  thout...<p>^In a
13370 20 43 41 53 45 20 77 69 74 68 6f 75 74 20 61 20   CASE without a 
13380 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  base expression,
13390 20 65 61 63 68 20 57 48 45 4e 20 65 78 70 72 65   each WHEN expre
133a0 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
133b0 65 64 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c  ed.and the resul
133c0 74 20 74 72 65 61 74 65 64 20 61 73 20 61 20 62  t treated as a b
133d0 6f 6f 6c 65 61 6e 2c 20 73 74 61 72 74 69 6e 67  oolean, starting
133e0 20 77 69 74 68 20 74 68 65 20 6c 65 66 74 6d 6f   with the leftmo
133f0 73 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 69 6e  st and continuin
13400 67 0a 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20  g.to the right. 
13410 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74  ^The result of t
13420 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
13430 6f 6e 20 69 73 20 74 68 65 20 65 76 61 6c 75 61  on is the evalua
13440 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e  tion of the THEN
13450 0a 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74  .expression that
13460 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
13470 74 68 65 20 66 69 72 73 74 20 57 48 45 4e 20 65  the first WHEN e
13480 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 65  xpression that e
13490 76 61 6c 75 61 74 65 73 20 74 6f 0a 74 72 75 65  valuates to.true
134a0 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f  . ^Or, if none o
134b0 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65  f the WHEN expre
134c0 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
134d0 74 6f 20 74 72 75 65 2c 20 74 68 65 20 72 65 73  to true, the res
134e0 75 6c 74 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e  ult of.evaluatin
134f0 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65  g the ELSE expre
13500 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e  ssion, if any. ^
13510 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45  If there is no E
13520 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61  LSE expression a
13530 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57  nd.none of the W
13540 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  HEN expressions 
13550 61 72 65 20 74 72 75 65 2c 20 74 68 65 6e 20 74  are true, then t
13560 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c  he overall resul
13570 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e  t is NULL...<p>^
13580 41 20 4e 55 4c 4c 20 72 65 73 75 6c 74 20 69 73  A NULL result is
13590 20 63 6f 6e 73 69 64 65 72 65 64 20 75 6e 74 72   considered untr
135a0 75 65 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69  ue when evaluati
135b0 6e 67 20 57 48 45 4e 20 74 65 72 6d 73 2e 0a 0a  ng WHEN terms...
135c0 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69  <p>^In a CASE wi
135d0 74 68 20 61 20 62 61 73 65 20 65 78 70 72 65 73  th a base expres
135e0 73 69 6f 6e 2c 20 74 68 65 20 62 61 73 65 20 65  sion, the base e
135f0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
13600 6c 75 61 74 65 64 20 6a 75 73 74 0a 6f 6e 63 65  luated just.once
13610 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
13620 69 73 20 63 6f 6d 70 61 72 65 64 20 61 67 61 69  is compared agai
13630 6e 73 74 20 74 68 65 20 65 76 61 6c 75 61 74 69  nst the evaluati
13640 6f 6e 20 6f 66 20 65 61 63 68 20 57 48 45 4e 20  on of each WHEN 
13650 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d  .expression from
13660 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20   left to right. 
13670 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74  ^The result of t
13680 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
13690 6f 6e 20 69 73 20 74 68 65 20 0a 65 76 61 6c 75  on is the .evalu
136a0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45  ation of the THE
136b0 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  N expression tha
136c0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
136d0 20 74 68 65 20 66 69 72 73 74 20 57 48 45 4e 0a   the first WHEN.
136e0 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 77  expression for w
136f0 68 69 63 68 20 74 68 65 20 63 6f 6d 70 61 72 69  hich the compari
13700 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 5e 4f 72  son is true. ^Or
13710 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  , if none of the
13720 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   WHEN.expression
13730 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20  s evaluate to a 
13740 76 61 6c 75 65 20 65 71 75 61 6c 20 74 6f 20 74  value equal to t
13750 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73 69  he base expressi
13760 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 6f  on, the result.o
13770 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
13780 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
13790 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68  , if any. ^If th
137a0 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65  ere is no ELSE e
137b0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f  xpression and.no
137c0 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65  ne of the WHEN e
137d0 78 70 72 65 73 73 69 6f 6e 73 20 70 72 6f 64 75  xpressions produ
137e0 63 65 20 61 20 72 65 73 75 6c 74 20 65 71 75 61  ce a result equa
137f0 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78  l to the base ex
13800 70 72 65 73 73 69 6f 6e 2c 0a 74 68 65 20 6f 76  pression,.the ov
13810 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20  erall result is 
13820 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  NULL...<p>^When 
13830 63 6f 6d 70 61 72 69 6e 67 20 61 20 62 61 73 65  comparing a base
13840 20 65 78 70 72 65 73 73 69 6f 6e 20 61 67 61 69   expression agai
13850 6e 73 74 20 61 20 57 48 45 4e 20 65 78 70 72 65  nst a WHEN expre
13860 73 73 69 6f 6e 2c 20 74 68 65 20 73 61 6d 65 0a  ssion, the same.
13870 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
13880 63 65 2c 20 61 66 66 69 6e 69 74 79 2c 20 61 6e  ce, affinity, an
13890 64 20 4e 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20  d NULL-handling 
138a0 72 75 6c 65 73 20 61 70 70 6c 79 20 61 73 20 69  rules apply as i
138b0 66 20 74 68 65 0a 62 61 73 65 20 65 78 70 72 65  f the.base expre
138c0 73 73 69 6f 6e 20 61 6e 64 20 57 48 45 4e 20 65  ssion and WHEN e
138d0 78 70 72 65 73 73 69 6f 6e 20 61 72 65 20 72 65  xpression are re
138e0 73 70 65 63 74 69 76 65 6c 79 20 74 68 65 20 6c  spectively the l
138f0 65 66 74 2d 20 61 6e 64 0a 72 69 67 68 74 2d 68  eft- and.right-h
13900 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66 20  and operands of 
13910 61 6e 20 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e  an <big><b>=</b>
13920 3c 2f 62 69 67 3e 20 6f 70 65 72 61 74 6f 72 2e  </big> operator.
13930 3c 2f 70 3e 20 5e 49 66 20 74 68 65 20 62 61 73  </p> ^If the bas
13940 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73  e .expression is
13950 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
13960 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53  esult of the CAS
13970 45 20 69 73 20 61 6c 77 61 79 73 20 74 68 65 20  E is always the 
13980 72 65 73 75 6c 74 20 0a 6f 66 20 65 76 61 6c 75  result .of evalu
13990 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65  ating the ELSE e
139a0 78 70 72 65 73 73 69 6f 6e 20 69 66 20 69 74 20  xpression if it 
139b0 65 78 69 73 74 73 2c 20 6f 72 20 4e 55 4c 4c 20  exists, or NULL 
139c0 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 2e 0a  if it does not..
139d0 0a 3c 70 3e 5e 42 6f 74 68 20 66 6f 72 6d 73 20  .<p>^Both forms 
139e0 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
139f0 65 73 73 69 6f 6e 20 75 73 65 20 6c 61 7a 79 2c  ession use lazy,
13a00 20 6f 72 20 73 68 6f 72 74 2d 63 69 72 63 75 69   or short-circui
13a10 74 2c 20 0a 65 76 61 6c 75 61 74 69 6f 6e 2e 0a  t, .evaluation..
13a20 0a 3c 70 3e 5e 28 54 68 65 20 6f 6e 6c 79 20 64  .<p>^(The only d
13a30 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
13a40 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
13a50 74 77 6f 20 43 41 53 45 20 65 78 70 72 65 73 73  two CASE express
13a60 69 6f 6e 73 20 69 73 20 74 68 61 74 20 0a 74 68  ions is that .th
13a70 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65  e <i>x</i> expre
13a80 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
13a90 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20  ed exactly once 
13aa0 69 6e 20 74 68 65 20 66 69 72 73 74 20 65 78 61  in the first exa
13ab0 6d 70 6c 65 20 62 75 74 20 0a 6d 69 67 68 74 20  mple but .might 
13ac0 62 65 20 65 76 61 6c 75 61 74 65 64 20 6d 75 6c  be evaluated mul
13ad0 74 69 70 6c 65 20 74 69 6d 65 73 20 69 6e 20 74  tiple times in t
13ae0 68 65 20 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e  he second:..<ul>
13af0 3c 70 72 65 3e 0a 3c 6c 69 3e 43 41 53 45 20 78  <pre>.<li>CASE x
13b00 20 57 48 45 4e 20 77 31 20 54 48 45 4e 20 72 31   WHEN w1 THEN r1
13b10 20 57 48 45 4e 20 77 32 20 54 48 45 4e 20 72 32   WHEN w2 THEN r2
13b20 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 6c 69   ELSE r3 END.<li
13b30 3e 43 41 53 45 20 57 48 45 4e 20 78 3d 77 31 20  >CASE WHEN x=w1 
13b40 54 48 45 4e 20 72 31 20 57 48 45 4e 20 78 3d 77  THEN r1 WHEN x=w
13b50 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45 20 72  2 THEN r2 ELSE r
13b60 33 20 45 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c  3 END.</pre></ul
13b70 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  >)^...<tcl>hd_fr
13b80 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e  agment in_op {IN
13b90 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20   operator} {NOT 
13ba0 49 4e 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63  IN operator}</tc
13bb0 6c 3e 0a 3c 68 33 3e 54 68 65 20 49 4e 20 61 6e  l>.<h3>The IN an
13bc0 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  d NOT IN operato
13bd0 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20  rs</h3>.<p>^The 
13be0 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70  IN and NOT IN op
13bf0 65 72 61 74 6f 72 73 20 74 61 6b 65 20 61 20 73  erators take a s
13c00 69 6e 67 6c 65 20 73 63 61 6c 61 72 20 6f 70 65  ingle scalar ope
13c10 72 61 6e 64 20 6f 6e 20 74 68 65 0a 6c 65 66 74  rand on the.left
13c20 20 61 6e 64 20 61 20 76 65 63 74 6f 72 20 6f 70   and a vector op
13c30 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 72 69 67  erand on the rig
13c40 68 74 0a 66 6f 72 6d 65 64 20 62 79 20 61 6e 20  ht.formed by an 
13c50 65 78 70 6c 69 63 69 74 20 6c 69 73 74 20 6f 66  explicit list of
13c60 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 73 63   zero or more sc
13c70 61 6c 61 72 73 20 6f 72 20 62 79 20 61 20 0a 73  alars or by a .s
13c80 69 6e 67 6c 65 20 73 75 62 71 75 65 72 79 2e 0a  ingle subquery..
13c90 5e 57 68 65 6e 20 74 68 65 20 72 69 67 68 74 20  ^When the right 
13ca0 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
13cb0 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61   or NOT IN opera
13cc0 74 6f 72 20 69 73 20 61 20 73 75 62 71 75 65 72  tor is a subquer
13cd0 79 2c 20 74 68 65 0a 73 75 62 71 75 65 72 79 20  y, the.subquery 
13ce0 6d 75 73 74 20 68 61 76 65 20 61 20 73 69 6e 67  must have a sing
13cf0 6c 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  le result column
13d00 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69 67 68  ..^When the righ
13d10 74 20 6f 70 65 72 61 6e 64 20 69 73 20 61 6e 20  t operand is an 
13d20 65 6d 70 74 79 20 73 65 74 2c 20 74 68 65 20 72  empty set, the r
13d30 65 73 75 6c 74 20 6f 66 20 49 4e 20 69 73 20 66  esult of IN is f
13d40 61 6c 73 65 20 61 6e 64 20 74 68 65 0a 72 65 73  alse and the.res
13d50 75 6c 74 20 6f 66 20 4e 4f 54 20 49 4e 20 69 73  ult of NOT IN is
13d60 20 74 72 75 65 2c 20 72 65 67 61 72 64 6c 65 73   true, regardles
13d70 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f 70  s of the left op
13d80 65 72 61 6e 64 20 61 6e 64 20 65 76 65 6e 20 69  erand and even i
13d90 66 20 74 68 65 0a 6c 65 66 74 20 6f 70 65 72 61  f the.left opera
13da0 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 5e 28 54 68  nd is NULL..^(Th
13db0 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 49  e result of an I
13dc0 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72  N or NOT IN oper
13dd0 61 74 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e  ator is determin
13de0 65 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77  ed by the follow
13df0 69 6e 67 0a 6d 61 74 72 69 78 3a 0a 0a 3c 63 65  ing.matrix:..<ce
13e00 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  nter>.<table bor
13e10 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 3c 74 68 3e  der=1>.<tr>.<th>
13e20 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 3c 62 72  Left operand <br
13e30 3e 69 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67  >is NULL.<th>Rig
13e40 68 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 63  ht operand <br>c
13e50 6f 6e 74 61 69 6e 73 20 4e 55 4c 4c 0a 3c 74 68  ontains NULL.<th
13e60 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20 3c  >Right operand <
13e70 62 72 3e 69 73 20 61 6e 20 65 6d 70 74 79 20 73  br>is an empty s
13e80 65 74 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72  et.<th>Left oper
13e90 61 6e 64 20 66 6f 75 6e 64 20 3c 62 72 3e 77 69  and found <br>wi
13ea0 74 68 69 6e 20 72 69 67 68 74 20 6f 70 65 72 61  thin right opera
13eb0 6e 64 0a 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66  nd.<th>Result of
13ec0 20 3c 62 72 3e 49 4e 20 6f 70 65 72 61 74 6f 72   <br>IN operator
13ed0 0a 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c  .<th>Result of <
13ee0 62 72 3e 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  br>NOT IN operat
13ef0 6f 72 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  or.<tr>.<td alig
13f00 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
13f10 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13f20 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
13f30 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
13f40 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
13f50 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13f60 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69  r">false.<td ali
13f70 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65  gn="center">true
13f80 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
13f90 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f  "center">does no
13fa0 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69  t matter.<td ali
13fb0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
13fc0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13fd0 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d  ">yes.<td align=
13fe0 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
13ff0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66  align="center">f
14000 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  alse.<td align="
14010 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72  center">true.<tr
14020 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
14030 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
14040 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
14050 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
14060 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
14070 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
14080 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67  er">yes.<td alig
14090 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a  n="center">true.
140a0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
140b0 72 22 3e 66 61 6c 73 65 0a 3c 74 72 3e 0a 3c 74  r">false.<tr>.<t
140c0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
140d0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
140e0 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61  enter">yes.<td a
140f0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
14100 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
14110 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
14120 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c  ="center">NULL.<
14130 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
14140 22 3e 4e 55 4c 4c 0a 3c 74 72 3e 0a 3c 74 64 20  ">NULL.<tr>.<td 
14150 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79  align="center">y
14160 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  es.<td align="ce
14170 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d  nter">does not m
14180 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d  atter.<td align=
14190 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
141a0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
141b0 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
141c0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
141d0 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e  ">NULL.<td align
141e0 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c  ="center">NULL.<
141f0 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
14200 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68  >)^..<p>^Note th
14210 61 74 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73  at SQLite allows
14220 20 74 68 65 20 70 61 72 65 6e 74 68 65 73 69 7a   the parenthesiz
14230 65 64 20 6c 69 73 74 20 6f 66 20 73 63 61 6c 61  ed list of scala
14240 72 20 76 61 6c 75 65 73 20 6f 6e 0a 74 68 65 20  r values on.the 
14250 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20  right-hand side 
14260 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20  of an IN or NOT 
14270 49 4e 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  IN operator to b
14280 65 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 20  e an empty list 
14290 62 75 74 0a 6d 6f 73 74 20 6f 74 68 65 72 20 53  but.most other S
142a0 51 4c 20 64 61 74 61 62 61 73 65 20 64 61 74 61  QL database data
142b0 62 61 73 65 20 65 6e 67 69 6e 65 73 20 61 6e 64  base engines and
142c0 20 74 68 65 20 53 51 4c 39 32 20 73 74 61 6e 64   the SQL92 stand
142d0 61 72 64 20 72 65 71 75 69 72 65 0a 74 68 65 20  ard require.the 
142e0 6c 69 73 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20  list to contain 
142f0 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 65 6c 65  at least one ele
14300 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ment.</p>..<tcl>
14310 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f  hd_fragment in_o
14320 70 20 7b 45 58 49 53 54 53 20 6f 70 65 72 61 74  p {EXISTS operat
14330 6f 72 7d 20 7b 4e 4f 54 20 45 58 49 53 54 53 20  or} {NOT EXISTS 
14340 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a  operator}</tcl>.
14350 3c 68 33 3e 54 68 65 20 45 58 49 53 54 53 20 6f  <h3>The EXISTS o
14360 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 0a 3c 70  perator</h3>..<p
14370 3e 5e 54 68 65 20 45 58 49 53 54 53 20 6f 70 65  >^The EXISTS ope
14380 72 61 74 6f 72 20 61 6c 77 61 79 73 20 65 76 61  rator always eva
14390 6c 75 61 74 65 73 20 74 6f 20 6f 6e 65 20 6f 66  luates to one of
143a0 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
143b0 75 65 73 20 30 20 0a 61 6e 64 20 31 2e 20 5e 49  ues 0 .and 1. ^I
143c0 66 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20  f executing the 
143d0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
143e0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
143f0 65 20 72 69 67 68 74 2d 68 61 6e 64 20 0a 6f 70  e right-hand .op
14400 65 72 61 6e 64 20 6f 66 20 74 68 65 20 45 58 49  erand of the EXI
14410 53 54 53 20 6f 70 65 72 61 74 6f 72 20 77 6f 75  STS operator wou
14420 6c 64 20 72 65 74 75 72 6e 20 6f 6e 65 20 6f 72  ld return one or
14430 20 6d 6f 72 65 20 72 6f 77 73 2c 20 74 68 65 6e   more rows, then
14440 20 74 68 65 0a 45 58 49 53 54 53 20 6f 70 65 72   the.EXISTS oper
14450 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74  ator evaluates t
14460 6f 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69  o 1. ^If executi
14470 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 77 6f  ng the SELECT wo
14480 75 6c 64 20 72 65 74 75 72 6e 0a 6e 6f 20 72 6f  uld return.no ro
14490 77 73 20 61 74 20 61 6c 6c 2c 20 74 68 65 6e 20  ws at all, then 
144a0 74 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61  the EXISTS opera
144b0 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f  tor evaluates to
144c0 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75   0. ..<p>^The nu
144d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
144e0 69 6e 20 65 61 63 68 20 72 6f 77 20 72 65 74 75  in each row retu
144f0 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
14500 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 28 69 66  CT statement.(if
14510 20 61 6e 79 29 20 61 6e 64 20 74 68 65 20 73 70   any) and the sp
14520 65 63 69 66 69 63 20 76 61 6c 75 65 73 20 72 65  ecific values re
14530 74 75 72 6e 65 64 20 68 61 76 65 20 6e 6f 20 65  turned have no e
14540 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73  ffect on the res
14550 75 6c 74 73 0a 6f 66 20 74 68 65 20 45 58 49 53  ults.of the EXIS
14560 54 53 20 6f 70 65 72 61 74 6f 72 2e 20 5e 49 6e  TS operator. ^In
14570 20 70 61 72 74 69 63 75 6c 61 72 2c 20 72 6f 77   particular, row
14580 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 4e 55 4c  s containing NUL
14590 4c 20 76 61 6c 75 65 73 20 61 72 65 0a 6e 6f 74  L values are.not
145a0 20 68 61 6e 64 6c 65 64 20 61 6e 79 20 64 69 66   handled any dif
145b0 66 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20 72 6f  ferently from ro
145c0 77 73 20 77 69 74 68 6f 75 74 20 4e 55 4c 4c 20  ws without NULL 
145d0 76 61 6c 75 65 73 2e 0a 0a 3c 68 33 3e 53 63 61  values...<h3>Sca
145e0 6c 61 72 20 53 75 62 71 75 65 72 69 65 73 3c 2f  lar Subqueries</
145f0 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45  h3>..<p>^A [SELE
14600 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 65 6e  CT] statement en
14610 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e 74  closed in parent
14620 68 65 73 65 73 20 6d 61 79 20 61 70 70 65 61 72  heses may appear
14630 20 61 73 20 61 20 73 63 61 6c 61 72 0a 71 75 61   as a scalar.qua
14640 6e 74 69 74 79 2e 20 5e 41 20 5b 53 45 4c 45 43  ntity. ^A [SELEC
14650 54 5d 20 75 73 65 64 20 61 73 20 61 20 73 63 61  T] used as a sca
14660 6c 61 72 20 71 75 61 6e 74 69 74 79 20 6d 75 73  lar quantity mus
14670 74 20 72 65 74 75 72 6e 20 61 20 72 65 73 75 6c  t return a resul
14680 74 20 73 65 74 0a 77 69 74 68 20 61 20 73 69 6e  t set.with a sin
14690 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 5e 54 68 65  gle column. ^The
146a0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65   result of the e
146b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65  xpression is the
146c0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 6f 6e   value of the.on
146d0 6c 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ly column in the
146e0 20 66 69 72 73 74 20 72 6f 77 20 72 65 74 75 72   first row retur
146f0 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
14700 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66  T statement. ^If
14710 20 74 68 65 20 53 45 4c 45 43 54 20 0a 79 69 65   the SELECT .yie
14720 6c 64 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  lds more than on
14730 65 20 72 65 73 75 6c 74 20 72 6f 77 2c 20 61 6c  e result row, al
14740 6c 20 72 6f 77 73 20 61 66 74 65 72 20 74 68 65  l rows after the
14750 20 66 69 72 73 74 20 61 72 65 20 69 67 6e 6f 72   first are ignor
14760 65 64 2e 20 5e 49 66 0a 74 68 65 20 53 45 4c 45  ed. ^If.the SELE
14770 43 54 20 79 69 65 6c 64 73 20 6e 6f 20 72 6f 77  CT yields no row
14780 73 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  s, then the valu
14790 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  e of the express
147a0 69 6f 6e 20 69 73 20 4e 55 4c 4c 2e 0a 5e 28 54  ion is NULL..^(T
147b0 68 65 20 4c 49 4d 49 54 20 6f 66 20 61 20 73 63  he LIMIT of a sc
147c0 61 6c 61 72 20 73 75 62 71 75 65 72 79 20 69 73  alar subquery is
147d0 20 61 6c 77 61 79 73 20 31 2e 0a 41 6e 79 20 6f   always 1..Any o
147e0 74 68 65 72 20 4c 49 4d 49 54 20 76 61 6c 75 65  ther LIMIT value
147f0 20 67 69 76 65 6e 20 69 6e 20 74 68 65 20 53 51   given in the SQ
14800 4c 20 74 65 78 74 20 69 73 20 69 67 6e 6f 72 65  L text is ignore
14810 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 6c 6c 20 74 79  d.)^..<p>^All ty
14820 70 65 73 20 6f 66 20 5b 53 45 4c 45 43 54 5d 20  pes of [SELECT] 
14830 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c 75  statement, inclu
14840 64 69 6e 67 20 61 67 67 72 65 67 61 74 65 20 61  ding aggregate a
14850 6e 64 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  nd [compound SEL
14860 45 43 54 5d 0a 71 75 65 72 69 65 73 20 28 71 75  ECT].queries (qu
14870 65 72 69 65 73 20 77 69 74 68 20 6b 65 79 77 6f  eries with keywo
14880 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f  rds like UNION o
14890 72 20 45 58 43 45 50 54 29 20 61 72 65 20 61 6c  r EXCEPT) are al
148a0 6c 6f 77 65 64 20 61 73 20 73 63 61 6c 61 72 0a  lowed as scalar.
148b0 73 75 62 71 75 65 72 69 65 73 2e 0a 0a 3c 68 33  subqueries...<h3
148c0 3e 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 20 4e 61  >Table Column Na
148d0 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20  mes</h3>..<p>^A 
148e0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20  column name can 
148f0 62 65 20 61 6e 79 20 6f 66 20 74 68 65 20 6e 61  be any of the na
14900 6d 65 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74  mes defined in t
14910 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he [CREATE TABLE
14920 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 6f  ].statement or o
14930 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
14940 69 6e 67 20 73 70 65 63 69 61 6c 20 69 64 65 6e  ing special iden
14950 74 69 66 69 65 72 73 3a 20 22 3c 62 3e 52 4f 57  tifiers: "<b>ROW
14960 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44  ID</b>",."<b>OID
14970 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52  </b>", or "<b>_R
14980 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e 54 68 65  OWID_</b>"..^The
14990 73 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74  se special ident
149a0 69 66 69 65 72 73 20 61 6c 6c 20 64 65 73 63 72  ifiers all descr
149b0 69 62 65 20 74 68 65 0a 75 6e 69 71 75 65 20 69  ibe the.unique i
149c0 6e 74 65 67 65 72 20 6b 65 79 20 28 74 68 65 20  nteger key (the 
149d0 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f 63 69 61  [rowid]) associa
149e0 74 65 64 20 77 69 74 68 20 65 76 65 72 79 20 0a  ted with every .
149f0 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74 61 62  row of every tab
14a00 6c 65 2e 0a 5e 54 68 65 20 73 70 65 63 69 61 6c  le..^The special
14a10 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c   identifiers onl
14a20 79 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72  y refer to the r
14a30 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b 43  ow key if the [C
14a40 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61  REATE TABLE].sta
14a50 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
14a60 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f  define a real co
14a70 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61  lumn with the sa
14a80 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 72 6f  me name..^The ro
14a90 77 69 64 20 63 61 6e 20 62 65 20 75 73 65 64 20  wid can be used 
14aa0 61 6e 79 77 68 65 72 65 20 61 20 72 65 67 75 6c  anywhere a regul
14ab0 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65  ar.column can be
14ac0 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   used.</p>..<p>^
14ad0 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  A [SELECT] state
14ae0 6d 65 6e 74 20 75 73 65 64 20 61 73 20 65 69 74  ment used as eit
14af0 68 65 72 20 61 20 73 63 61 6c 61 72 20 73 75 62  her a scalar sub
14b00 71 75 65 72 79 20 6f 72 20 61 73 20 74 68 65 20  query or as the 
14b10 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72  .right-hand oper
14b20 61 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20 4e 4f  and of an IN, NO
14b30 54 20 49 4e 20 6f 72 20 45 58 49 53 54 53 20 65  T IN or EXISTS e
14b40 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 63 6f  xpression may co
14b50 6e 74 61 69 6e 20 0a 72 65 66 65 72 65 6e 63 65  ntain .reference
14b60 73 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  s to columns in 
14b70 74 68 65 20 6f 75 74 65 72 20 71 75 65 72 79 2e  the outer query.
14b80 20 53 75 63 68 20 61 20 73 75 62 71 75 65 72 79   Such a subquery
14b90 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61 20 63   is known as.a c
14ba0 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
14bb0 72 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61 74 65  ry. ^A correlate
14bc0 64 20 73 75 62 71 75 65 72 79 20 69 73 20 72 65  d subquery is re
14bd0 65 76 61 6c 75 61 74 65 64 20 65 61 63 68 20 74  evaluated each t
14be0 69 6d 65 0a 69 74 73 20 72 65 73 75 6c 74 20 69  ime.its result i
14bf0 73 20 72 65 71 75 69 72 65 64 2e 20 5e 41 6e 20  s required. ^An 
14c00 75 6e 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  uncorrelated sub
14c10 71 75 65 72 79 20 69 73 20 65 76 61 6c 75 61 74  query is evaluat
14c20 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61 6e 64  ed only once.and
14c30 20 74 68 65 20 72 65 73 75 6c 74 20 72 65 75 73   the result reus
14c40 65 64 20 61 73 20 6e 65 63 65 73 73 61 72 79 2e  ed as necessary.
14c50 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
14c60 6e 74 20 63 61 73 74 65 78 70 72 20 7b 43 41 53  nt castexpr {CAS
14c70 54 20 65 78 70 72 65 73 73 69 6f 6e 7d 20 7b 43  T expression} {C
14c80 41 53 54 7d 20 7b 63 61 73 74 7d 20 7b 43 41 53  AST} {cast} {CAS
14c90 54 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c  T operator}</tcl
14ca0 3e 0a 3c 68 33 3e 43 41 53 54 20 65 78 70 72 65  >.<h3>CAST expre
14cb0 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ssions</h3>..<p>
14cc0 41 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  A CAST expressio
14cd0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 43  n of the form "C
14ce0 41 53 54 28 26 6c 74 3b 65 78 70 72 26 67 74 3b  AST(&lt;expr&gt;
14cf0 20 41 53 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d   AS &lt;type-nam
14d00 65 26 67 74 3b 29 22 0a 69 73 20 75 73 65 64 20  e&gt;)".is used 
14d10 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76  to convert the v
14d20 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72  alue of &lt;expr
14d30 26 67 74 3b 20 74 6f 20 0a 61 20 64 69 66 66 65  &gt; to .a diffe
14d40 72 65 6e 74 20 5b 73 74 6f 72 61 67 65 20 63 6c  rent [storage cl
14d50 61 73 73 5d 20 73 70 65 63 69 66 69 65 64 20 62  ass] specified b
14d60 79 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26  y &lt;type-name&
14d70 67 74 3b 2e 0a 5e 41 20 43 41 53 54 20 63 6f 6e  gt;..^A CAST con
14d80 76 65 72 73 69 6f 6e 20 69 73 20 73 69 6d 69 6c  version is simil
14d90 61 72 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72  ar to the conver
14da0 73 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 0a  sion that takes.
14db0 70 6c 61 63 65 20 77 68 65 6e 20 61 20 5b 63 6f  place when a [co
14dc0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 69  lumn affinity] i
14dd0 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20 76  s applied to a v
14de0 61 6c 75 65 20 65 78 63 65 70 74 20 74 68 61 74  alue except that
14df0 20 77 69 74 68 0a 74 68 65 20 43 41 53 54 20 6f   with.the CAST o
14e00 70 65 72 61 74 6f 72 20 74 68 65 20 63 6f 6e 76  perator the conv
14e10 65 72 73 69 6f 6e 20 61 6c 77 61 79 73 20 74 61  ersion always ta
14e20 6b 65 73 20 70 6c 61 63 65 20 65 76 65 6e 20 69  kes place even i
14e30 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  f the conversion
14e40 0a 6c 6f 73 73 79 20 61 6e 64 20 69 72 72 65 76  .lossy and irrev
14e50 65 72 73 69 62 6c 65 2c 20 77 68 65 72 65 61 73  ersible, whereas
14e60 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
14e70 20 6f 6e 6c 79 20 63 68 61 6e 67 65 73 20 74 68   only changes th
14e80 65 20 64 61 74 61 20 74 79 70 65 0a 6f 66 20 61  e data type.of a
14e90 20 76 61 6c 75 65 20 69 66 20 74 68 65 20 63 68   value if the ch
14ea0 61 6e 67 65 20 69 73 20 6c 6f 73 73 6c 65 73 73  ange is lossless
14eb0 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65 2e   and reversible.
14ec0 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76 61 6c  ..<p>^If the val
14ed0 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72 26 67  ue of &lt;expr&g
14ee0 74 3b 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  t; is NULL, then
14ef0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
14f00 68 65 20 43 41 53 54 0a 65 78 70 72 65 73 73 69  he CAST.expressi
14f10 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e  on is also NULL.
14f20 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65   ^Otherwise, the
14f30 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f   storage class o
14f40 66 20 74 68 65 20 72 65 73 75 6c 74 0a 69 73 20  f the result.is 
14f50 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 70  determined by ap
14f60 70 6c 79 69 6e 67 20 74 68 65 20 5b 72 75 6c 65  plying the [rule
14f70 73 20 66 6f 72 20 64 65 74 65 72 6d 69 6e 69 6e  s for determinin
14f80 67 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  g column affinit
14f90 79 5d 20 74 6f 0a 74 68 65 20 26 6c 74 3b 74 79  y] to.the &lt;ty
14fa0 70 65 2d 6e 61 6d 65 26 67 74 3b 2e 0a 0a 3c 74  pe-name&gt;...<t
14fb0 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  able border=1>.<
14fc0 74 72 3e 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e  tr>.  <th> Affin
14fd0 69 74 79 20 6f 66 20 26 6c 74 3b 74 79 70 65 2d  ity of &lt;type-
14fe0 6e 61 6d 65 26 67 74 3b 0a 20 20 3c 74 68 3e 20  name&gt;.  <th> 
14ff0 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f 63 65  Conversion Proce
15000 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74 64  ssing.<tr>.  <td
15010 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e 20 5e  > NONE .  <td> ^
15020 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65 20  Casting a value 
15030 74 6f 20 61 20 26 6c 74 3b 74 79 70 65 2d 6e 61  to a &lt;type-na
15040 6d 65 26 67 74 3b 20 77 69 74 68 20 6e 6f 20 61  me&gt; with no a
15050 66 66 69 6e 69 74 79 20 63 61 75 73 65 73 20 74  ffinity causes t
15060 68 65 20 76 61 6c 75 65 20 74 6f 0a 20 20 62 65  he value to.  be
15070 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
15080 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74 69 6e  a BLOB.  ^Castin
15090 67 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f 6e 73  g to a BLOB cons
150a0 69 73 74 73 20 6f 66 20 66 69 72 73 74 20 63 61  ists of first ca
150b0 73 74 69 6e 67 0a 20 20 74 68 65 20 76 61 6c 75  sting.  the valu
150c0 65 20 74 6f 20 54 45 58 54 20 69 6e 20 74 68 65  e to TEXT in the
150d0 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 20 74   [encoding] of t
150e0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
150f0 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20 20 69  ection, then.  i
15100 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68 65 20  nterpreting the 
15110 72 65 73 75 6c 74 69 6e 67 20 62 79 74 65 20 73  resulting byte s
15120 65 71 75 65 6e 63 65 20 61 73 20 61 20 42 4c 4f  equence as a BLO
15130 42 20 69 6e 73 74 65 61 64 20 6f 66 20 61 73 20  B instead of as 
15140 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  TEXT...<tr>.  <t
15150 64 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e 20 5e  d> TEXT.  <td> ^
15160 54 6f 20 63 61 73 74 20 61 20 42 4c 4f 42 20 76  To cast a BLOB v
15170 61 6c 75 65 20 74 6f 20 54 45 58 54 2c 20 74 68  alue to TEXT, th
15180 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79  e sequence of by
15190 74 65 73 20 74 68 61 74 20 6d 61 6b 65 20 75 70  tes that make up
151a0 20 74 68 65 0a 20 20 42 4c 4f 42 20 69 73 20 69   the.  BLOB is i
151b0 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65  nterpreted as te
151c0 78 74 20 65 6e 63 6f 64 65 64 20 75 73 69 6e 67  xt encoded using
151d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   the database en
151e0 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20  coding..  <p>.  
151f0 20 5e 43 61 73 74 69 6e 67 20 61 6e 20 49 4e 54   ^Casting an INT
15200 45 47 45 52 20 6f 72 20 52 45 41 4c 20 76 61 6c  EGER or REAL val
15210 75 65 20 69 6e 74 6f 20 54 45 58 54 20 72 65 6e  ue into TEXT ren
15220 64 65 72 73 20 74 68 65 20 76 61 6c 75 65 20 61  ders the value a
15230 73 20 69 66 20 76 69 61 20 0a 20 20 20 20 5b 73  s if via .    [s
15240 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
15250 29 5d 20 65 78 63 65 70 74 20 74 68 61 74 20 74  )] except that t
15260 68 65 20 72 65 73 75 6c 74 69 6e 67 20 54 45 58  he resulting TEX
15270 54 20 75 73 65 73 20 74 68 65 20 5b 65 6e 63 6f  T uses the [enco
15280 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74 68 65  ding] of.    the
15290 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
152a0 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  tion...<tr>.  <t
152b0 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e 20 5e  d> REAL.  <td> ^
152c0 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42  When casting a B
152d0 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 61 20 52  LOB value to a R
152e0 45 41 4c 2c 20 74 68 65 20 76 61 6c 75 65 20 69  EAL, the value i
152f0 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65  s first converte
15300 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58  d to.        TEX
15310 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68  T..       <p>^Wh
15320 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58  en casting a TEX
15330 54 20 76 61 6c 75 65 20 74 6f 20 52 45 41 4c 2c  T value to REAL,
15340 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73   the longest pos
15350 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a  sible prefix of.
15360 20 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75          the valu
15370 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e  e that can be in
15380 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20 72  terpreted as a r
15390 65 61 6c 20 6e 75 6d 62 65 72 20 69 73 20 65 78  eal number is ex
153a0 74 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20  tracted from.   
153b0 20 20 20 20 20 74 68 65 20 54 45 58 54 20 76 61       the TEXT va
153c0 6c 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61  lue and the rema
153d0 69 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e  inder ignored. ^
153e0 41 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63  Any leading spac
153f0 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20  es in the.      
15400 20 20 54 45 58 54 20 76 61 6c 75 65 20 61 72 65    TEXT value are
15410 20 69 67 6e 6f 72 65 64 20 77 68 65 6e 20 63 6f   ignored when co
15420 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d 20 54 45  nverging from TE
15430 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e 28 49 66  XT to REAL. ^(If
15440 20 74 68 65 72 65 20 69 73 0a 20 20 20 20 20 20   there is.      
15450 20 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74    no prefix that
15460 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
15470 74 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75  ted as a real nu
15480 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74  mber, the result
15490 20 6f 66 20 74 68 65 0a 20 20 20 20 20 20 20 20   of the.        
154a0 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e  conversion is 0.
154b0 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64  0.)^..<tr>.  <td
154c0 3e 20 49 4e 54 45 47 45 52 0a 20 20 3c 74 64 3e  > INTEGER.  <td>
154d0 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61   ^When casting a
154e0 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 49   BLOB value to I
154f0 4e 54 45 47 45 52 2c 20 74 68 65 20 76 61 6c 75  NTEGER, the valu
15500 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65  e is first conve
15510 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20  rted to.        
15520 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e  TEXT..       <p>
15530 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
15540 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 49 4e  TEXT value to IN
15550 54 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e 67 65  TEGER, the longe
15560 73 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66  st possible pref
15570 69 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68  ix of.        th
15580 65 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  e value that can
15590 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
155a0 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75  as an integer nu
155b0 6d 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65  mber is extracte
155c0 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74  d from.        t
155d0 68 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e  he TEXT value an
155e0 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  d the remainder 
155f0 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65  ignored. ^Any le
15600 61 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20  ading spaces in 
15610 74 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54  the.        TEXT
15620 20 76 61 6c 75 65 20 77 68 65 6e 20 63 6f 6e 76   value when conv
15630 65 72 74 69 6e 67 20 66 72 6f 6d 20 54 45 58 54  erting from TEXT
15640 20 74 6f 20 49 4e 54 45 47 45 52 20 61 72 65 20   to INTEGER are 
15650 69 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74 68 65  ignored. ^If the
15660 72 65 0a 20 20 20 20 20 20 20 20 69 73 20 6e 6f  re.        is no
15670 20 70 72 65 66 69 78 20 74 68 61 74 20 63 61 6e   prefix that can
15680 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
15690 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75  as an integer nu
156a0 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74  mber, the result
156b0 0a 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20  .        of the 
156c0 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e  conversion is 0.
156d0 0a 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20 63 61  ..      <p>^A ca
156e0 73 74 20 6f 66 20 61 20 52 45 41 4c 20 76 61 6c  st of a REAL val
156f0 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47  ue into an INTEG
15700 45 52 20 72 65 73 75 6c 74 73 20 69 6e 20 74 68  ER results in th
15710 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 20 20  e integer.      
15720 62 65 74 77 65 65 6e 20 74 68 65 20 52 45 41 4c  between the REAL
15730 20 76 61 6c 75 65 20 61 6e 64 20 7a 65 72 6f 20   value and zero 
15740 74 68 61 74 20 69 73 20 63 6c 6f 73 65 73 74 20  that is closest 
15750 74 6f 20 74 68 65 20 52 45 41 4c 20 76 61 6c 75  to the REAL valu
15760 65 2e 0a 20 20 20 20 20 20 5e 49 66 20 61 20 52  e..      ^If a R
15770 45 41 4c 20 69 73 20 67 72 65 61 74 65 72 20 74  EAL is greater t
15780 68 61 6e 20 74 68 65 20 67 72 65 61 74 65 73 74  han the greatest
15790 20 70 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64   possible signed
157a0 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72 20 28  .      integer (
157b0 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  +922337203685477
157c0 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 72  5807) then the r
157d0 65 73 75 6c 74 20 69 73 20 74 68 65 20 67 72 65  esult is the gre
157e0 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65 0a 20  atest possible. 
157f0 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e 74 65       signed inte
15800 67 65 72 20 61 6e 64 20 69 66 20 74 68 65 20 52  ger and if the R
15810 45 41 4c 20 69 73 20 6c 65 73 73 20 74 68 61 6e  EAL is less than
15820 20 74 68 65 20 6c 65 61 73 74 20 70 6f 73 73 69   the least possi
15830 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20 20 20  ble signed.     
15840 20 69 6e 74 65 67 65 72 20 28 2d 39 32 32 33 33   integer (-92233
15850 37 32 30 33 36 38 35 34 37 37 35 38 30 38 29 20  72036854775808) 
15860 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
15870 69 73 20 74 68 65 20 6c 65 61 73 74 20 70 6f 73  is the least pos
15880 73 69 62 6c 65 0a 20 20 20 20 20 20 73 69 67 6e  sible.      sign
15890 65 64 20 69 6e 74 65 67 65 72 2e 0a 0a 20 20 20  ed integer...   
158a0 20 20 20 3c 70 3e 50 72 69 6f 72 20 74 6f 20 53     <p>Prior to S
158b0 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
158c0 38 2e 32 2c 20 63 61 73 74 69 6e 67 20 61 20 52  8.2, casting a R
158d0 45 41 4c 20 76 61 6c 75 65 20 67 72 65 61 74 65  EAL value greate
158e0 72 20 74 68 61 6e 0a 20 20 20 20 20 20 2b 39 32  r than.      +92
158f0 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
15900 37 2e 30 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  7.0 into an inte
15910 67 65 72 20 72 65 73 75 6c 74 65 64 20 69 6e 20  ger resulted in 
15920 74 68 65 20 6d 6f 73 74 20 6e 65 67 61 74 69 76  the most negativ
15930 65 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72 2c  e.      integer,
15940 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
15950 37 35 38 30 38 2e 20 20 54 68 69 73 20 62 65 68  75808.  This beh
15960 61 76 69 6f 72 20 77 61 73 20 6d 65 61 6e 74 20  avior was meant 
15970 74 6f 20 65 6d 75 6c 61 74 65 20 74 68 65 0a 20  to emulate the. 
15980 20 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66       behavior of
15990 20 78 38 36 2f 78 36 34 20 68 61 72 64 77 61 72   x86/x64 hardwar
159a0 65 20 77 68 65 6e 20 64 6f 69 6e 67 20 74 68 65  e when doing the
159b0 20 65 71 75 69 76 61 6c 65 6e 74 20 63 61 73 74   equivalent cast
159c0 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 4e  ...<tr>.  <td> N
159d0 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e 20 5e 43  UMERIC.  <td> ^C
159e0 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 6f 72  asting a TEXT or
159f0 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
15a00 20 4e 55 4d 45 52 49 43 20 66 69 72 73 74 20 64   NUMERIC first d
15a10 6f 65 73 20 61 20 66 6f 72 63 65 64 0a 20 20 20  oes a forced.   
15a20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e 74 6f 20  conversion into 
15a30 52 45 41 4c 20 62 75 74 20 74 68 65 6e 20 66 75  REAL but then fu
15a40 72 74 68 65 72 20 63 6f 6e 76 65 72 74 73 20 74  rther converts t
15a50 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 49  he result into I
15a60 4e 54 45 47 45 52 20 69 66 0a 20 20 20 61 6e 64  NTEGER if.   and
15a70 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 63 6f 6e   only if the con
15a80 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 52 45 41  version from REA
15a90 4c 20 74 6f 20 49 4e 54 45 47 45 52 20 69 73 20  L to INTEGER is 
15aa0 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72 65 76  lossless and rev
15ab0 65 72 73 69 62 6c 65 2e 0a 20 20 20 54 68 69 73  ersible..   This
15ac0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 6f 6e   is the only con
15ad0 74 65 78 74 20 69 6e 20 53 51 4c 69 74 65 20 77  text in SQLite w
15ae0 68 65 72 65 20 74 68 65 20 4e 55 4d 45 52 49 43  here the NUMERIC
15af0 20 61 6e 64 20 49 4e 54 45 47 45 52 20 5b 61 66   and INTEGER [af
15b00 66 69 6e 69 74 69 65 73 5d 0a 20 20 20 62 65 68  finities].   beh
15b10 61 76 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e  ave differently.
15b20 0a 20 20 20 3c 70 3e 20 5e 43 61 73 74 69 6e 67  .   <p> ^Casting
15b30 20 61 20 52 45 41 4c 20 6f 72 20 49 4e 54 45 47   a REAL or INTEG
15b40 45 52 20 76 61 6c 75 65 20 74 6f 20 4e 55 4d 45  ER value to NUME
15b50 52 49 43 20 69 73 20 61 20 6e 6f 2d 6f 70 2c 20  RIC is a no-op, 
15b60 65 76 65 6e 20 69 66 20 61 20 72 65 61 6c 0a 20  even if a real. 
15b70 20 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 62 65    value could be
15b80 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76   losslessly conv
15b90 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
15ba0 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a 3c 2f 74  ger...</tr>..</t
15bb0 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  able>..<p>^Note 
15bc0 74 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20  that the result 
15bd0 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
15be0 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 20   non-BLOB value 
15bf0 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20 61 6e 64  into a .BLOB and
15c00 20 74 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d   the result from
15c10 20 63 61 73 74 69 6e 67 20 61 6e 79 20 42 4c 4f   casting any BLO
15c20 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e  B value into a n
15c30 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 0a 6d 61  on-BLOB value.ma
15c40 79 20 62 65 20 64 69 66 66 65 72 65 6e 74 20 64  y be different d
15c50 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
15c60 68 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  her the database
15c70 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 69 73 20 55   [encoding] is U
15c80 54 46 2d 38 2c 0a 55 54 46 2d 31 36 62 65 2c 20  TF-8,.UTF-16be, 
15c90 6f 72 20 55 54 46 2d 31 36 6c 65 2e 0a 0a 0a 3c  or UTF-16le....<
15ca0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
15cb0 62 6f 6f 6c 65 61 6e 65 78 70 72 20 7b 62 6f 6f  booleanexpr {boo
15cc0 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7d  lean expression}
15cd0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42 6f 6f 6c 65  </tcl>.<h3>Boole
15ce0 61 6e 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f  an Expressions</
15cf0 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20  h3>..<p>The SQL 
15d00 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75 72 65  language feature
15d10 73 20 73 65 76 65 72 61 6c 20 63 6f 6e 74 65 78  s several contex
15d20 74 73 20 77 68 65 72 65 20 61 6e 20 65 78 70 72  ts where an expr
15d30 65 73 73 69 6f 6e 20 69 73 20 0a 65 76 61 6c 75  ession is .evalu
15d40 61 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 73  ated and the res
15d50 75 6c 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ult converted to
15d60 20 61 20 62 6f 6f 6c 65 61 6e 20 28 74 72 75 65   a boolean (true
15d70 20 6f 72 20 66 61 6c 73 65 29 20 76 61 6c 75 65   or false) value
15d80 2e 20 54 68 65 73 65 0a 63 6f 6e 74 65 78 74 73  . These.contexts
15d90 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a 20 20   are:..  <ul>.  
15da0 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 52 45    <li> the WHERE
15db0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
15dc0 45 43 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ECT, UPDATE or D
15dd0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 2c  ELETE statement,
15de0 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 4f 4e  .    <li> the ON
15df0 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
15e00 20 6f 66 20 61 20 6a 6f 69 6e 20 69 6e 20 61 20   of a join in a 
15e10 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
15e20 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 48  ,.    <li> the H
15e30 41 56 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  AVING clause of 
15e40 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
15e50 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  nt,.    <li> the
15e60 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
15e70 61 6e 20 53 51 4c 20 74 72 69 67 67 65 72 2c 20  an SQL trigger, 
15e80 61 6e 64 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  and.    <li> the
15e90 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 72 20   WHEN clause or 
15ea0 63 6c 61 75 73 65 73 20 6f 66 20 73 6f 6d 65 20  clauses of some 
15eb0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73  CASE expressions
15ec0 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28  ..  </ul>..<p>^(
15ed0 54 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 72  To convert the r
15ee0 65 73 75 6c 74 73 20 6f 66 20 61 6e 20 53 51 4c  esults of an SQL
15ef0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 61   expression to a
15f00 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c 20   boolean value, 
15f10 53 51 4c 69 74 65 0a 66 69 72 73 74 20 63 61 73  SQLite.first cas
15f20 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 74 6f  ts the result to
15f30 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c 75 65   a NUMERIC value
15f40 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
15f50 20 61 73 20 61 20 0a 5b 43 41 53 54 20 65 78 70   as a .[CAST exp
15f60 72 65 73 73 69 6f 6e 5d 2e 20 41 20 4e 55 4c 4c  ression]. A NULL
15f70 20 6f 72 20 7a 65 72 6f 20 76 61 6c 75 65 20 28   or zero value (
15f80 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 30 20  integer value 0 
15f90 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e  or real value 0.
15fa0 30 29 20 69 73 0a 63 6f 6e 73 69 64 65 72 65 64  0) is.considered
15fb0 20 74 6f 20 62 65 20 66 61 6c 73 65 2e 20 41 6c   to be false. Al
15fc0 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61  l other values a
15fd0 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  re considered tr
15fe0 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f 72 20  ue.)^..<p>^(For 
15ff0 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 76 61 6c  example, the val
16000 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c 20 30  ues NULL, 0.0, 0
16010 2c 20 27 65 6e 67 6c 69 73 68 27 20 61 6e 64 20  , 'english' and 
16020 27 30 27 20 61 72 65 20 61 6c 6c 20 63 6f 6e 73  '0' are all cons
16030 69 64 65 72 65 64 0a 74 6f 20 62 65 20 66 61 6c  idered.to be fal
16040 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65 73 20 31  se.)^ ^(Values 1
16050 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d 30 2e 31  , 1.0, 0.1, -0.1
16060 20 61 6e 64 20 27 31 65 6e 67 6c 69 73 68 27 20   and '1english' 
16070 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74  are considered t
16080 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e 0a 0a 3c  o .be true.)^..<
16090 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f 68 33  h3>Functions</h3
160a0 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b 63 6f 72 65  >.<p>^Both [core
160b0 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20 61 6e 64  func|simple] and
160c0 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67   [aggfunc|aggreg
160d0 61 74 65 5d 20 66 75 6e 63 74 69 6f 6e 73 20 61  ate] functions a
160e0 72 65 20 73 75 70 70 6f 72 74 65 64 2e 0a 28 46  re supported..(F
160f0 6f 72 20 70 72 65 73 65 6e 74 61 74 69 6f 6e 20  or presentation 
16100 70 75 72 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65  purposes, simple
16110 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 66   functions are f
16120 75 72 74 68 65 72 20 73 75 62 64 69 76 69 64 65  urther subdivide
16130 64 20 69 6e 74 6f 0a 5b 63 6f 72 65 66 75 6e 63  d into.[corefunc
16140 20 7c 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e   | core function
16150 73 5d 20 61 6e 64 20 5b 64 61 74 65 66 75 6e 63  s] and [datefunc
16160 20 7c 20 64 61 74 65 2d 74 69 6d 65 20 66 75 6e   | date-time fun
16170 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41 20 73 69 6d  ctions].).^A sim
16180 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6e  ple function can
16190 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e 79 20   be used in any 
161a0 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 5e 53 69  expression.  ^Si
161b0 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 72  mple functions r
161c0 65 74 75 72 6e 0a 61 20 72 65 73 75 6c 74 20 69  eturn.a result i
161d0 6d 6d 65 64 69 61 74 65 6c 79 20 62 61 73 65 64  mmediately based
161e0 20 6f 6e 20 74 68 65 69 72 20 69 6e 70 75 74 73   on their inputs
161f0 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 66 75  .  ^Aggregate fu
16200 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f 6e 6c 79  nctions.may only
16210 20 62 65 20 75 73 65 64 20 69 6e 20 61 20 53 45   be used in a SE
16220 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
16230 20 5e 41 67 67 72 65 67 61 74 65 20 66 75 6e 63   ^Aggregate func
16240 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65 0a 74 68  tions compute.th
16250 65 69 72 20 72 65 73 75 6c 74 20 61 63 72 6f 73  eir result acros
16260 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68  s all rows of th
16270 65 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70  e result set.</p
16280 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
16290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
162a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
162b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
162c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
162d0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
162e0 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e 73 7d  {Core Functions}
162f0 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63 6f 72 65   corefunc {*core
16300 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75 6e 63 64  func}.proc funcd
16310 65 66 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f  ef {syntax keywo
16320 72 64 73 20 64 65 73 63 7d 20 7b 0a 20 20 68 64  rds desc} {.  hd
16330 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a 20 20 72  _puts {<tr>}.  r
16340 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d  egsub -all {\s+}
16350 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73   [string trim $s
16360 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f 3e 7d 20  yntax] {<br />} 
16370 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
16380 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29  -all {\(([^*)]+)
16390 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28 3c 69  \)} $syntax {(<i
163a0 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74 61 78  >\1</i>)} syntax
163b0 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
163c0 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f 69 3e  ,} $syntax {</i>
163d0 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  ,<i>} syntax.  r
163e0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c  egsub -all {<i>\
163f0 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74  .\.\.</i>} $synt
16400 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a  ax {...} syntax.
16410 20 20 68 64 5f 70 75 74 73 20 22 3c 74 64 20 76    hd_puts "<td v
16420 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c  align=\"top\" al
16430 69 67 6e 3d 5c 22 72 69 67 68 74 5c 22 20 77 69  ign=\"right\" wi
16440 64 74 68 3d 5c 22 31 32 30 5c 22 3e 22 0a 20 20  dth=\"120\">".  
16450 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65  if {[llength $ke
16460 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20  ywords]==0} {.  
16470 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d    regexp {[a-z_]
16480 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a  +} $syntax name.
16490 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20      hd_fragment 
164a0 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b  $name *$name "${
164b0 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e 63  name}() SQL func
164c0 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b  tion".  } else {
164d0 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e 61 6d  .    set fragnam
164e0 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f  e [lindex $keywo
164f0 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73 75  rds 0].    regsu
16500 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20  b -all {[^a-z]} 
16510 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61  $fragname {} fra
16520 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61  gname.    hd_fra
16530 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a  gment $fragname.
16540 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77      eval hd_keyw
16550 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61 70  ords [string map
16560 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f   {\n { }} $keywo
16570 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75  rds].  }.  hd_pu
16580 74 73 20 22 24 73 79 6e 74 61 78 3c 2f 74 64 3e  ts "$syntax</td>
16590 22 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 64  ".  hd_puts {<td
165a0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a   valign="top">}.
165b0 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 24 64 65    hd_resolve $de
165c0 73 63 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 2f  sc.  hd_puts {</
165d0 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74 63  td></tr>}.}.</tc
165e0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20  l>..<p>The core 
165f0 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20  functions shown 
16600 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61  below are availa
16610 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ble by default. 
16620 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20 44 61 74  .[datefunc | Dat
16630 65 20 26 61 6d 70 3b 20 54 69 6d 65 20 66 75 6e  e &amp; Time fun
16640 63 74 69 6f 6e 73 5d 20 61 6e 64 0a 5b 61 67 67  ctions] and.[agg
16650 66 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  func | aggregate
16660 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20   functions] are 
16670 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72  documented separ
16680 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69  ately.  An.appli
16690 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e  cation may defin
166a0 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e  e additional.fun
166b0 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69  ctions written i
166c0 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f  n C and added to
166d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   the database en
166e0 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 5b  gine using.the [
166f0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
16700 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c  unction()] API.<
16710 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  /p>..<table bord
16720 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67  er=0 cellpadding
16730 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64  =10>.<tcl>.funcd
16740 65 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20 7b  ef {abs(X)} {} {
16750 0a 20 20 5e 54 68 65 20 61 62 73 28 58 29 20 66  .  ^The abs(X) f
16760 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
16770 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c  the absolute val
16780 75 65 20 6f 66 20 74 68 65 20 6e 75 6d 65 72 69  ue of the numeri
16790 63 0a 20 20 61 72 67 75 6d 65 6e 74 20 58 2e 20  c.  argument X. 
167a0 20 5e 41 62 73 28 58 29 20 72 65 74 75 72 6e 73   ^Abs(X) returns
167b0 20 4e 55 4c 4c 20 69 66 20 58 20 69 73 20 4e 55   NULL if X is NU
167c0 4c 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58 29 20  LL. .  ^(Abs(X) 
167d0 72 65 74 75 72 6e 20 30 2e 30 20 69 66 20 58 20  return 0.0 if X 
167e0 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
167f0 6c 6f 62 0a 20 20 74 68 61 74 20 63 61 6e 6e 6f  lob.  that canno
16800 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74  t be converted t
16810 6f 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  o a numeric valu
16820 65 2e 29 5e 20 20 5e 49 66 20 58 20 69 73 20 74  e.)^  ^If X is t
16830 68 65 20 0a 20 20 69 6e 74 65 67 65 72 20 2d 39  he .  integer -9
16840 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
16850 30 38 20 74 68 65 6e 20 61 62 73 28 58 29 20 74  08 then abs(X) t
16860 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72  hrows an integer
16870 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65 72 72 6f   overflow.  erro
16880 72 20 73 69 6e 63 65 20 74 68 65 72 65 20 69 73  r since there is
16890 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74 20 70   no equivalent p
168a0 6f 73 69 74 69 76 65 20 36 34 2d 62 69 74 20 74  ositive 64-bit t
168b0 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 76 61  wo complement va
168c0 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  lue..}..funcdef 
168d0 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b  {changes()} {} {
168e0 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28  .  ^The changes(
168f0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
16900 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
16910 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
16920 68 61 74 20 77 65 72 65 20 63 68 61 6e 67 65 64  hat were changed
16930 0a 20 20 6f 72 20 69 6e 73 65 72 74 65 64 20 6f  .  or inserted o
16940 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65  r deleted by the
16950 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 20 63   most recently c
16960 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45 52 54 2c  ompleted INSERT,
16970 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72 20 55 50   DELETE,.  or UP
16980 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2c 20  DATE statement, 
16990 65 78 63 6c 75 73 69 76 65 20 6f 66 20 73 74 61  exclusive of sta
169a0 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f 77 65 72  tements in lower
169b0 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72 73 2e  -level triggers.
169c0 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28  .  ^The changes(
169d0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
169e0 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
169f0 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nd the [sqlite3_
16a00 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
16a10 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ++ function and 
16a20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20 74 68  hence follows th
16a30 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66 6f 72  e same rules for
16a40 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e 67 65   counting change
16a50 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63  s..}..funcdef {c
16a60 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e  har(X1,X2,...,XN
16a70 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20  )} {} {.  ^(The 
16a80 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58  char(X1,X2,...,X
16a90 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  N) function retu
16aa0 72 6e 73 20 61 20 73 74 72 69 6e 67 20 63 6f 6d  rns a string com
16ab0 70 6f 73 65 64 20 6f 66 20 63 68 61 72 61 63 74  posed of charact
16ac0 65 72 73 20 68 61 76 69 6e 67 20 74 68 65 0a 20  ers having the. 
16ad0 20 20 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70    unicode code p
16ae0 6f 69 6e 74 20 76 61 6c 75 65 73 20 6f 66 20 69  oint values of i
16af0 6e 74 65 67 65 72 73 20 58 31 20 74 68 72 6f 75  ntegers X1 throu
16b00 67 68 20 58 4e 2c 20 72 65 73 70 65 63 74 69 76  gh XN, respectiv
16b10 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ely.)^.}..funcde
16b20 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59 2c  f {coalesce(X,Y,
16b30 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  ...)} {} {.  ^Th
16b40 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66 75 6e  e coalesce() fun
16b50 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
16b60 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72 73  copy of its firs
16b70 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d  t non-NULL argum
16b80 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69  ent, or.  NULL i
16b90 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20  f all arguments 
16ba0 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c  are NULL.  ^Coal
16bb0 65 73 63 65 28 29 20 6d 75 73 74 20 68 61 76 65  esce() must have
16bc0 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20 61   at least .  2 a
16bd0 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e  rguments..}..fun
16be0 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29 7d  cdef {glob(X,Y)}
16bf0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c 6f   {} {.  ^The glo
16c00 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  b(X,Y) function 
16c10 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  is equivalent to
16c20 20 74 68 65 0a 20 20 65 78 70 72 65 73 73 69 6f   the.  expressio
16c30 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f  n "<b>Y GLOB X</
16c40 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74  b>"..  Note that
16c50 20 74 68 65 20 58 20 61 6e 64 20 59 20 61 72 67   the X and Y arg
16c60 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65 72  uments are rever
16c70 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62 28  sed in the glob(
16c80 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 6c  ) function.  rel
16c90 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66  ative to the inf
16ca0 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74  ix [GLOB] operat
16cb0 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20 5b 73  or..  ^If the [s
16cc0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
16cd0 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  nction()] interf
16ce0 61 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20  ace is used to. 
16cf0 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 67 6c   override the gl
16d00 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  ob(X,Y) function
16d10 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61   with an alterna
16d20 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tive implementat
16d30 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b  ion then.  the [
16d40 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77  GLOB] operator w
16d50 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61  ill invoke the a
16d60 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
16d70 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75  mentation..}..fu
16d80 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c  ncdef {ifnull(X,
16d90 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
16da0 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f  ifnull() functio
16db0 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
16dc0 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f   of its first no
16dd0 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c  n-NULL argument,
16de0 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f   or.  NULL if bo
16df0 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  th arguments are
16e00 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28   NULL.  ^Ifnull(
16e10 29 20 6d 75 73 74 20 68 61 76 65 20 65 78 61 63  ) must have exac
16e20 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e  tly 2 arguments.
16e30 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29  .  ^The ifnull()
16e40 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75   function is equ
16e50 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c  ivalent to [coal
16e60 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f  esce()] with two
16e70 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66   arguments..}..f
16e80 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28 58 2c  uncdef {instr(X,
16e90 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
16ea0 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e 63 74  instr(X,Y) funct
16eb0 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20 66 69  ion finds the fi
16ec0 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f  rst occurrence o
16ed0 66 20 73 74 72 69 6e 67 20 59 20 77 69 74 68 69  f string Y withi
16ee0 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20 61 6e  n .  string X an
16ef0 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  d returns the nu
16f00 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63 68  mber of prior ch
16f10 61 72 61 63 74 65 72 73 20 70 6c 75 73 20 31 2c  aracters plus 1,
16f20 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69 73 20   or 0 if.  Y is 
16f30 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20 77 69  nowhere found wi
16f40 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20 69  thin X..  ^Or, i
16f50 66 20 58 20 61 6e 64 20 59 20 61 72 65 20 62 6f  f X and Y are bo
16f60 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20 69  th BLOBs, then i
16f70 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e  nstr(X,Y) return
16f80 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68 61  s one.  more tha
16f90 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62 79 74  n the number byt
16fa0 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  es prior to the 
16fb0 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65  first occurrence
16fc0 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66 0a 20   of Y, or 0 if. 
16fd0 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63 75   Y does not occu
16fe0 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68 69  r anywhere withi
16ff0 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68 20  n X..  ^If both 
17000 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e 64 20  arguments X and 
17010 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59 29 20  Y to instr(X,Y) 
17020 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64  are non-NULL and
17030 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a 20   are not BLOBs. 
17040 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65 20 69   then both are i
17050 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 73 74  nterpreted as st
17060 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69 74  rings..  ^If eit
17070 68 65 72 20 58 20 6f 72 20 59 20 61 72 65 20 4e  her X or Y are N
17080 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c 59  ULL in instr(X,Y
17090 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
170a0 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75  t is NULL..}..fu
170b0 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b  ncdef {hex(X)} {
170c0 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28 29  } {.  ^The hex()
170d0 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70   function interp
170e0 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e  rets its argumen
170f0 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64 20  t as a BLOB and 
17100 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69  returns.  a stri
17110 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
17120 75 70 70 65 72 2d 63 61 73 65 20 68 65 78 61 64  upper-case hexad
17130 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67  ecimal rendering
17140 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
17150 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a  of.  that blob..
17160 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74  }..funcdef {last
17170 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d  _insert_rowid()}
17180 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73   {} {.  ^The las
17190 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
171a0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
171b0 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20  s the [ROWID].  
171c0 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20  of the last row 
171d0 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65 20  insert from the 
171e0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
171f0 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65  ion which invoke
17200 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e  d the.  function
17210 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e  ..  ^The last_in
17220 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51 4c  sert_rowid() SQL
17230 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
17240 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
17250 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73  e.  [sqlite3_las
17260 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
17270 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
17280 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66  e function..}..f
17290 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58  uncdef {length(X
172a0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20 61  )} {} {.  ^For a
172b0 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 58 2c   string value X,
172c0 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66   the length(X) f
172d0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
172e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 20  the number of . 
172f0 20 63 68 61 72 61 63 74 65 72 73 20 28 6e 6f 74   characters (not
17300 20 62 79 74 65 73 29 20 69 6e 20 58 20 70 72 69   bytes) in X pri
17310 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  or to the first 
17320 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e 0a 20  NUL character.. 
17330 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20 73 74   Since SQLite st
17340 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f 72  rings do not nor
17350 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e 55  mally contain NU
17360 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20 74 68  L characters, th
17370 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20 66 75  e length(X).  fu
17380 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75 61  nction will usua
17390 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 74  lly return the t
173a0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63  otal number of c
173b0 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
173c0 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46 6f   string X..  ^Fo
173d0 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 58  r a blob value X
173e0 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75  , length(X) retu
173f0 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
17400 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 62  f bytes in the b
17410 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73 20  lob..  ^If X is 
17420 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68  NULL then length
17430 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e  (X) is NULL..  ^
17440 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63 20  If X is numeric 
17450 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 72  then length(X) r
17460 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74  eturns the lengt
17470 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20 20  h of a string.  
17480 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
17490 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
174a0 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28  {like(X,Y) like(
174b0 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e  X,Y,Z)} {} {.  ^
174c0 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  The like() funct
174d0 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69  ion is used to i
174e0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22  mplement the.  "
174f0 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31  <b>Y LIKE X &#91
17500 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f  ;ESCAPE Z&#93;</
17510 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  b>" expression. 
17520 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69 6f  .  ^If the optio
17530 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73  nal ESCAPE claus
17540 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68  e is present, th
17550 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20  en the.  like() 
17560 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f  function is invo
17570 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20 61  ked with three a
17580 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65  rguments.  ^Othe
17590 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69  rwise, it is.  i
175a0 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20  nvoked with two 
175b0 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20  arguments only. 
175c0 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20  Note that the X 
175d0 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72 73  and Y parameters
175e0 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64 20   are.  reversed 
175f0 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75  in the like() fu
17600 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20  nction relative 
17610 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49  to the infix [LI
17620 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20  KE] operator..  
17630 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72  ^The [sqlite3_cr
17640 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
17650 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62   interface can b
17660 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69  e used to overri
17670 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20  de the.  like() 
17680 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65  function and the
17690 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65 20  reby change the 
176a0 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
176b0 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74  .  [LIKE] operat
176c0 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72 72 69  or.  When overri
176d0 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28 29 20  ding the like() 
176e0 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61 79  function, it may
176f0 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20 20   be important.  
17700 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74 68  to override both
17710 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68 72   the two and thr
17720 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72 73  ee argument vers
17730 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b 65  ions of the like
17740 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 20  () .  function. 
17750 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66 66 65  Otherwise, diffe
17760 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62 65  rent code may be
17770 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65   called to imple
17780 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b 45  ment the.  [LIKE
17790 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65 6e  ] operator depen
177a0 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20  ding on whether 
177b0 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50 45  or not an ESCAPE
177c0 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20 73   clause was .  s
177d0 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 0a 66 75  pecified..}...fu
177e0 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69 68 6f 6f  ncdef {likelihoo
177f0 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  d(X,Y)} {} {.  ^
17800 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58  The likelihood(X
17810 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
17820 75 72 6e 73 20 61 72 67 75 6d 65 6e 74 20 58 20  urns argument X 
17830 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 28 54  unchanged..  ^(T
17840 68 65 20 76 61 6c 75 65 20 59 20 69 6e 20 6c 69  he value Y in li
17850 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 6d 75  kelihood(X,Y) mu
17860 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67  st be a floating
17870 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61 6e 74 0a   point constant.
17880 20 20 62 65 74 77 65 65 6e 20 30 2e 30 20 61 6e    between 0.0 an
17890 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73 69 76 65  d 1.0, inclusive
178a0 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c  .)^.  ^The likel
178b0 69 68 6f 6f 64 28 58 29 20 66 75 6e 63 74 69 6f  ihood(X) functio
178c0 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61  n is a no-op tha
178d0 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  t the code gener
178e0 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73  ator.  optimizes
178f0 20 61 77 61 79 20 73 6f 20 74 68 61 74 20 69 74   away so that it
17900 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55   consumes no CPU
17910 20 63 79 63 6c 65 73 20 64 75 72 69 6e 67 20 72   cycles during r
17920 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68 61 74 20  un-time.  (that 
17930 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c 73  is, during calls
17940 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74 65   to [sqlite3_ste
17950 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75  p()])..  ^The pu
17960 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c 69 6b  rpose of the lik
17970 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66 75 6e  elihood(X,Y) fun
17980 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76  ction is to prov
17990 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20  ide a hint.  to 
179a0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  the query planne
179b0 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75 6d  r that the argum
179c0 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65  ent X is a boole
179d0 61 6e 20 74 68 61 74 20 69 73 0a 20 20 74 72 75  an that is.  tru
179e0 65 20 77 69 74 68 20 61 20 70 72 6f 62 61 62 69  e with a probabi
179f0 6c 69 74 79 20 6f 66 20 61 70 70 72 6f 78 69 6d  lity of approxim
17a00 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28 54 68 65  ately Y..  ^(The
17a10 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 20 66   [unlikely(X)] f
17a20 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f 72 74  unction is short
17a30 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65 6c 69  -hand for likeli
17a40 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35 29 2e 29  hood(X,0.0625).)
17a50 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f  ^.}..funcdef {lo
17a60 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29 20  ad_extension(X) 
17a70 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58  load_extension(X
17a80 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
17a90 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
17aa0 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f  X,Y) function lo
17ab0 61 64 73 20 5b 53 51 4c 69 74 65 20 65 78 74 65  ads [SQLite exte
17ac0 6e 73 69 6f 6e 73 5d 20 6f 75 74 20 6f 66 20 74  nsions] out of t
17ad0 68 65 20 73 68 61 72 65 64 0a 20 20 6c 69 62 72  he shared.  libr
17ae0 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 64 20 58  ary file named X
17af0 20 75 73 69 6e 67 20 74 68 65 20 65 6e 74 72 79   using the entry
17b00 20 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68 65 20   point Y.  ^The 
17b10 72 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64 5f 65  result of load_e
17b20 78 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69 73 20  xtension().  is 
17b30 61 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e 20 20  always a NULL.  
17b40 5e 49 66 20 59 20 69 73 20 6f 6d 69 74 74 65 64  ^If Y is omitted
17b50 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c   then the defaul
17b60 74 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 6e 61  t entry point na
17b70 6d 65 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 54  me is used..  ^T
17b80 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  he load_extensio
17b90 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 61 69  n() function rai
17ba0 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  ses an exception
17bb0 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f   if the extensio
17bc0 6e 20 66 61 69 6c 73 20 74 6f 0a 20 20 6c 6f 61  n fails to.  loa
17bd0 64 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20  d or initialize 
17be0 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70  correctly...  <p
17bf0 3e 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e  >^The load_exten
17c00 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  sion() function 
17c10 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65  will fail if the
17c20 20 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d   extension attem
17c30 70 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79  pts to .  modify
17c40 20 6f 72 20 64 65 6c 65 74 65 20 61 6e 20 53 51   or delete an SQ
17c50 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f  L function or co
17c60 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
17c70 2e 20 20 5e 54 68 65 0a 20 20 65 78 74 65 6e 73  .  ^The.  extens
17c80 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20  ion can add new 
17c90 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
17ca0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
17cb0 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d  , but cannot.  m
17cc0 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20  odify or delete 
17cd0 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f  existing functio
17ce0 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  ns or collating 
17cf0 73 65 71 75 65 6e 63 65 73 20 62 65 63 61 75 73  sequences becaus
17d00 65 0a 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69  e.  those functi
17d10 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61  ons and/or colla
17d20 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d  ting sequences m
17d30 69 67 68 74 20 62 65 20 75 73 65 64 20 65 6c 73  ight be used els
17d40 65 77 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20  ewhere.  in the 
17d50 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
17d60 67 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  g SQL statement.
17d70 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74    To load an ext
17d80 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68  ension that.  ch
17d90 61 6e 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73  anges or deletes
17da0 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f   functions or co
17db0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
17dc0 73 2c 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71  s, use the.  [sq
17dd0 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
17de0 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61  sion()] C-langua
17df0 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20 3c  ge API.</p>..  <
17e00 70 3e 46 6f 72 20 73 65 63 75 72 69 74 79 20 72  p>For security r
17e10 65 61 73 6f 6e 73 2c 20 65 78 74 65 6e 73 69 6f  easons, extensio
17e20 6e 20 6c 6f 61 64 65 64 20 69 73 20 74 75 72 6e  n loaded is turn
17e30 65 64 20 6f 66 66 20 62 79 20 64 65 66 61 75 6c  ed off by defaul
17e40 74 20 61 6e 64 20 6d 75 73 74 0a 20 20 62 65 20  t and must.  be 
17e50 65 6e 61 62 6c 65 64 20 62 79 20 61 20 70 72 69  enabled by a pri
17e60 6f 72 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69  or call to [sqli
17e70 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f  te3_enable_load_
17e80 65 78 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f 70  extension()].</p
17e90 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f  >.}..funcdef {lo
17ea0 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  wer(X)} {} {.  ^
17eb0 54 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e  The lower(X) fun
17ec0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
17ed0 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58  copy of string X
17ee0 20 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20   with all ASCII 
17ef0 63 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e  characters.  con
17f00 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20  verted to lower 
17f10 63 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61  case.  ^The defa
17f20 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77  ult built-in low
17f30 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f  er() function wo
17f40 72 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20  rks.  for ASCII 
17f50 63 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e  characters only.
17f60 20 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e    To do case con
17f70 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d  versions on non-
17f80 41 53 43 49 49 0a 20 20 63 68 61 72 61 63 74 65  ASCII.  characte
17f90 72 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55  rs, load the ICU
17fa0 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66   extension..}..f
17fb0 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29  uncdef {ltrim(X)
17fc0 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20   ltrim(X,Y)} {} 
17fd0 7b 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58  {.  ^The ltrim(X
17fe0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
17ff0 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
18000 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67  rmed by removing
18010 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63   any and all.  c
18020 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
18030 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20  ppear in Y from 
18040 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66  the left side of
18050 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
18060 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
18070 74 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65  ted, ltrim(X) re
18080 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f  moves spaces fro
18090 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a  m the left side.
180a0 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64    of X..}..funcd
180b0 65 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29  ef {max(X,Y,...)
180c0 7d 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20  } {*maxCoreFunc 
180d0 2a 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20  *max {max() SQL 
180e0 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
180f0 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65  The multi-argume
18100 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f  nt max() functio
18110 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
18120 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20  gument with the 
18130 0a 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  .  maximum value
18140 2c 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c  , or return NULL
18150 20 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74   if any argument
18160 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68   is NULL. .  ^Th
18170 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
18180 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20   max() function 
18190 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67  searches its arg
181a0 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74  uments from left
181b0 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20   to right.  for 
181c0 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  an argument that
181d0 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61   defines a colla
181e0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ting function an
181f0 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c  d uses that coll
18200 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e  ating.  function
18210 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20   for all string 
18220 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
18230 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72  f none of the ar
18240 67 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29  guments to max()
18250 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c  .  define a coll
18260 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20  ating function, 
18270 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20  then the BINARY 
18280 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
18290 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f  on is used..  No
182a0 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29  te that <b>max()
182b0 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65  </b> is a simple
182c0 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20   function when. 
182d0 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72   it has 2 or mor
182e0 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20  e arguments but 
182f0 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a 20  operates as an. 
18300 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20 61   [minAggFunc | a
18310 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
18320 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79  n] if given only
18330 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a single argume
18340 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  nt..}..funcdef {
18350 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a  min(X,Y,...)} {*
18360 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e  minCoreFunc *min
18370 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e 63   {min() SQL func
18380 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
18390 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d  multi-argument m
183a0 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  in() function re
183b0 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65  turns the argume
183c0 6e 74 20 77 69 74 68 20 74 68 65 0a 20 20 6d 69  nt with the.  mi
183d0 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e  nimum value..  ^
183e0 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65  The multi-argume
183f0 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f  nt min() functio
18400 6e 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61  n searches its a
18410 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65  rguments from le
18420 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f  ft to right.  fo
18430 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68  r an argument th
18440 61 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c  at defines a col
18450 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
18460 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f  and uses that co
18470 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69  llating.  functi
18480 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e  on for all strin
18490 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20  g comparisons.  
184a0 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  ^If none of the 
184b0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e  arguments to min
184c0 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f  ().  define a co
184d0 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
184e0 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52  , then the BINAR
184f0 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  Y collating func
18500 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20  tion is used..  
18510 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e  Note that <b>min
18520 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70  ()</b> is a simp
18530 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e  le function when
18540 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d  .  it has 2 or m
18550 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75  ore arguments bu
18560 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e  t operates as an
18570 20 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20   .  [maxAggFunc 
18580 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  | aggregate func
18590 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20  tion] if given. 
185a0 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61   only a single a
185b0 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63  rgument..}..func
185c0 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29  def {nullif(X,Y)
185d0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75  } {} {.  ^The nu
185e0 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69  llif(X,Y) functi
185f0 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20 66  on returns its f
18600 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66  irst argument if
18610 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61   the arguments a
18620 72 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61  re.  different a
18630 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61  nd NULL if the a
18640 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65  rguments are the
18650 20 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c   same.  ^The nul
18660 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lif(X,Y) functio
18670 6e 0a 20 20 73 65 61 72 63 68 65 73 20 69 74 73  n.  searches its
18680 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
18690 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f  left to right fo
186a0 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68  r an argument th
186b0 61 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63  at defines a.  c
186c0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
186d0 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
186e0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
186f0 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e  on for all strin
18700 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  g.  comparisons.
18710 20 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72    ^If neither ar
18720 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66  gument to nullif
18730 28 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c  () defines a col
18740 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a  lating function.
18750 20 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52    then the BINAR
18760 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75  Y is used..}..fu
18770 6e 63 64 65 66 20 7b 70 72 69 6e 74 66 28 46 4f  ncdef {printf(FO
18780 52 4d 41 54 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a  RMAT,...)} {} {.
18790 20 20 5e 28 54 68 65 20 70 72 69 6e 74 66 28 46    ^(The printf(F
187a0 4f 52 4d 41 54 2c 2e 2e 2e 29 20 53 51 4c 20 66  ORMAT,...) SQL f
187b0 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69  unction works li
187c0 6b 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ke the [sqlite3_
187d0 6d 70 72 69 6e 74 66 28 29 5d 20 43 2d 6c 61 6e  mprintf()] C-lan
187e0 67 75 61 67 65 0a 20 20 66 75 6e 63 74 69 6f 6e  guage.  function
187f0 20 61 6e 64 20 74 68 65 20 70 72 69 6e 74 66 28   and the printf(
18800 29 20 66 75 6e 63 74 69 6f 6e 20 66 72 6f 6d 20  ) function from 
18810 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
18820 69 62 72 61 72 79 2e 29 5e 0a 20 20 54 68 65 20  ibrary.)^.  The 
18830 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
18840 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  s a format strin
18850 67 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  g that specifies
18860 20 68 6f 77 20 74 6f 20 63 6f 6e 73 74 72 75 63   how to construc
18870 74 20 74 68 65 20 6f 75 74 70 75 74 0a 20 20 73  t the output.  s
18880 74 72 69 6e 67 20 75 73 69 6e 67 20 76 61 6c 75  tring using valu
18890 65 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 73 75  es taken from su
188a0 62 73 65 71 75 65 6e 74 20 61 72 67 75 6d 65 6e  bsequent argumen
188b0 74 73 2e 20 20 5e 49 66 20 74 68 65 20 46 4f 52  ts.  ^If the FOR
188c0 4d 41 54 20 61 72 67 75 6d 65 6e 74 20 69 73 0a  MAT argument is.
188d0 20 20 6d 69 73 73 69 6e 67 20 6f 72 20 4e 55 4c    missing or NUL
188e0 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
188f0 74 20 69 73 20 4e 55 4c 4c 2e 20 20 5e 54 68 65  t is NULL.  ^The
18900 20 25 6e 20 66 6f 72 6d 61 74 20 69 73 20 73 69   %n format is si
18910 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 20 61  lently ignored a
18920 6e 64 0a 20 20 64 6f 65 73 20 6e 6f 74 20 63 6f  nd.  does not co
18930 6e 73 75 6d 65 20 61 6e 20 61 72 67 75 6d 65 6e  nsume an argumen
18940 74 2e 20 20 5e 54 68 65 20 25 70 20 66 6f 72 6d  t.  ^The %p form
18950 61 74 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  at is an alias f
18960 6f 72 20 25 58 2e 20 20 5e 54 68 65 20 25 7a 20  or %X.  ^The %z 
18970 66 6f 72 6d 61 74 0a 20 20 69 73 20 69 6e 74 65  format.  is inte
18980 72 63 68 61 6e 67 65 61 62 6c 65 20 77 69 74 68  rchangeable with
18990 20 25 73 2e 20 20 5e 28 49 66 20 74 68 65 72 65   %s.  ^(If there
189a0 20 61 72 65 20 74 6f 6f 20 66 65 77 20 61 72 67   are too few arg
189b0 75 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72  uments in the ar
189c0 67 75 6d 65 6e 74 20 6c 69 73 74 2c 0a 20 20 6d  gument list,.  m
189d0 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  issing arguments
189e0 20 61 72 65 20 61 73 73 75 6d 65 64 20 74 6f 20   are assumed to 
189f0 68 61 76 65 20 61 20 4e 55 4c 4c 20 76 61 6c 75  have a NULL valu
18a00 65 2c 20 77 68 69 63 68 20 69 73 20 74 72 61 6e  e, which is tran
18a10 73 6c 61 74 65 64 20 69 6e 74 6f 0a 20 20 30 20  slated into.  0 
18a20 6f 72 20 30 2e 30 20 66 6f 72 20 6e 75 6d 65 72  or 0.0 for numer
18a30 69 63 20 66 6f 72 6d 61 74 73 20 6f 72 20 61 6e  ic formats or an
18a40 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 66 6f   empty string fo
18a50 72 20 25 73 2e 29 5e 0a 7d 0a 20 20 0a 0a 66 75  r %s.)^.}.  ..fu
18a60 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d  ncdef {quote(X)}
18a70 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f   {} {.  ^The quo
18a80 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  te(X) function r
18a90 65 74 75 72 6e 73 20 74 68 65 20 74 65 78 74 20  eturns the text 
18aa0 6f 66 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  of an SQL litera
18ab0 6c 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65  l which.  is the
18ac0 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72   value of its ar
18ad0 67 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20  gument suitable 
18ae0 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e  for inclusion in
18af0 74 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  to an SQL statem
18b00 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20  ent..  ^Strings 
18b10 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62  are surrounded b
18b20 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20  y single-quotes 
18b30 77 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20  with escapes on 
18b40 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a  interior quotes.
18b50 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42    as needed.  ^B
18b60 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64  LOBs are encoded
18b70 20 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20   as hexadecimal 
18b80 6c 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72  literals..  ^Str
18b90 69 6e 67 73 20 77 69 74 68 20 65 6d 62 65 64 64  ings with embedd
18ba0 65 64 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72  ed NUL character
18bb0 73 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72  s cannot be repr
18bc0 65 73 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e  esented as strin
18bd0 67 0a 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20  g.  literals in 
18be0 53 51 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68  SQL and hence th
18bf0 65 20 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e  e returned strin
18c00 67 20 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75  g literal is tru
18c10 6e 63 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74  ncated prior.  t
18c20 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e  o the first NUL.
18c30 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e  .}..funcdef {ran
18c40 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  dom()} {} {.  ^T
18c50 68 65 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63  he random() func
18c60 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70  tion returns a p
18c70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74  seudo-random int
18c80 65 67 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d  eger.  between -
18c90 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
18ca0 38 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32  808 and +9223372
18cb0 30 33 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a  036854775807..}.
18cc0 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d  .funcdef {random
18cd0 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20  blob(N)} {} {.  
18ce0 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  ^The randomblob(
18cf0 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  N) function retu
18d00 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f  rn an N-byte blo
18d10 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65  b containing pse
18d20 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74  udo-random.  byt
18d30 65 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73  es. ^If N is les
18d40 73 20 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20  s than 1 then a 
18d50 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c  1-byte random bl
18d60 6f 62 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a  ob is returned..
18d70 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70  .  <p>Hint:  app
18d80 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65  lications can ge
18d90 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20  nerate globally 
18da0 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65  unique identifie
18db0 72 73 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20  rs.  using this 
18dc0 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65  function togethe
18dd0 72 20 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61  r with [hex()] a
18de0 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29  nd/or.  [lower()
18df0 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e  ] like this:</p>
18e00 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  ..  <blockquote>
18e10 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f  .  hex(randomblo
18e20 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a  b(16))<br></br>.
18e30 20 20 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64    lower(hex(rand
18e40 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c  omblob(16))).  <
18e50 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a  /blockquote>.}..
18e60 66 75 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65  funcdef {replace
18e70 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20  (X,Y,Z)} {} {.  
18e80 5e 54 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59  ^The replace(X,Y
18e90 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Z) function ret
18ea0 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
18eb0 72 6d 65 64 20 62 79 20 73 75 62 73 74 69 74 75  rmed by substitu
18ec0 74 69 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20  ting.  string Z 
18ed0 66 6f 72 20 65 76 65 72 79 20 6f 63 63 75 72 72  for every occurr
18ee0 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59  ence of string Y
18ef0 20 69 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e   in string X.  ^
18f00 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63  The [BINARY].  c
18f10 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
18f20 65 20 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f  e is used for co
18f30 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
18f40 59 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20  Y is an empty.  
18f50 73 74 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75  string then retu
18f60 72 6e 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20  rn X unchanged. 
18f70 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e   ^If Z is not in
18f80 69 74 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69  itially.  a stri
18f90 6e 67 2c 20 69 74 20 69 73 20 63 61 73 74 20 74  ng, it is cast t
18fa0 6f 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67  o a UTF-8 string
18fb0 20 70 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73   prior to proces
18fc0 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  sing..}..funcdef
18fd0 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64   {round(X) round
18fe0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
18ff0 68 65 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75  he round(X,Y) fu
19000 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
19010 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
19020 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65    value X rounde
19030 64 20 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f  d to Y digits to
19040 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68   the right of th
19050 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e  e decimal point.
19060 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
19070 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
19080 2c 20 69 74 20 69 73 20 61 73 73 75 6d 65 64 20  , it is assumed 
19090 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63  to be 0..}..func
190a0 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74  def {rtrim(X) rt
190b0 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
190c0 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29   ^The rtrim(X,Y)
190d0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
190e0 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
190f0 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
19100 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
19110 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
19120 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65  ar in Y from the
19130 20 72 69 67 68 74 20 73 69 64 65 20 6f 66 20 58   right side of X
19140 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
19150 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
19160 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f  d, rtrim(X) remo
19170 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20  ves spaces from 
19180 74 68 65 20 72 69 67 68 74 0a 20 20 73 69 64 65  the right.  side
19190 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
191a0 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b  f {soundex(X)} {
191b0 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64  } {.  ^The sound
191c0 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  ex(X) function r
191d0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
191e0 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e  that is the soun
191f0 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20  dex encoding .  
19200 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e  of the string X.
19210 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22  .  ^The string "
19220 3f 30 30 30 22 20 69 73 20 72 65 74 75 72 6e 65  ?000" is returne
19230 64 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  d if the argumen
19240 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e  t is NULL or con
19250 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49  tains.  no ASCII
19260 20 61 6c 70 68 61 62 65 74 69 63 20 63 68 61 72   alphabetic char
19270 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73  acters..  ^(This
19280 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69   function is omi
19290 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65  tted from SQLite
192a0 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49   by default..  I
192b0 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61  t is only availa
192c0 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49  ble if the [SQLI
192d0 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70  TE_SOUNDEX] comp
192e0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a  ile-time option.
192f0 20 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 53    is used when S
19300 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29  QLite is built.)
19310 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ^.}..funcdef {sq
19320 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
19330 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a  on_get(N)} {} {.
19340 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f    ^The sqlite_co
19350 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
19360 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
19370 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
19380 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  nd the.  [sqlite
19390 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
193a0 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e  get()] C/C++ fun
193b0 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72  ction..  ^This r
193c0 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74  outine returns t
193d0 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d  he N-th compile-
193e0 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64  time option used
193f0 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65   to build SQLite
19400 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20  .  or NULL if N 
19410 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e  is out of range.
19420 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b    See also the [
19430 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20  compile_options 
19440 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63  pragma]..}..func
19450 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70  def {sqlite_comp
19460 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58  ileoption_used(X
19470 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
19480 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
19490 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66  ion_used() SQL f
194a0 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
194b0 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a  pper around the.
194c0 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69    [sqlite3_compi
194d0 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d  leoption_used()]
194e0 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e   C/C++ function.
194f0 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67  .  ^When the arg
19500 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74  ument X to sqlit
19510 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
19520 75 73 65 64 28 58 29 20 69 73 20 61 20 73 74 72  used(X) is a str
19530 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73 20 74  ing which.  is t
19540 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d  he name of a com
19550 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
19560 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  , this routine r
19570 65 74 75 72 6e 73 20 74 72 75 65 20 28 31 29 20  eturns true (1) 
19580 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64  or.  false (0) d
19590 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
195a0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
195b0 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20  option was used 
195c0 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69  during the.  bui
195d0 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ld..}..funcdef {
195e0 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64  sqlite_source_id
195f0 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  ()} {} {.  ^The 
19600 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64  sqlite_source_id
19610 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
19620 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61  rns a string tha
19630 74 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  t identifies the
19640 0a 20 20 73 70 65 63 69 66 69 63 20 76 65 72 73  .  specific vers
19650 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ion of the sourc
19660 65 20 63 6f 64 65 20 74 68 61 74 20 77 61 73 20  e code that was 
19670 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74 68  used to build th
19680 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61  e SQLite.  libra
19690 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69 6e 67  ry.  ^The string
196a0 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
196b0 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20  ite_source_id() 
196c0 62 65 67 69 6e 73 20 77 69 74 68 0a 20 20 74 68  begins with.  th
196d0 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
196e0 74 68 61 74 20 74 68 65 20 73 6f 75 72 63 65 20  that the source 
196f0 63 6f 64 65 20 77 61 73 20 63 68 65 63 6b 65 64  code was checked
19700 20 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c 6c 6f   in and is follo
19710 77 73 20 62 79 0a 20 20 61 6e 20 53 48 41 31 20  ws by.  an SHA1 
19720 68 61 73 68 20 74 68 61 74 20 75 6e 69 71 75 65  hash that unique
19730 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68  ly identifies th
19740 65 20 73 6f 75 72 63 65 20 74 72 65 65 2e 20 20  e source tree.  
19750 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69  ^This function i
19760 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61 70 70  s.  an SQL wrapp
19770 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
19780 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28  qlite3_sourceid(
19790 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65 2e 0a  )] C interface..
197a0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
197b0 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d  te_version()} {}
197c0 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65   {.  ^The sqlite
197d0 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74  _version() funct
197e0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
197f0 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66  version string f
19800 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20  or the SQLite.  
19810 6c 69 62 72 61 72 79 20 74 68 61 74 20 69 73 20  library that is 
19820 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20  running.  ^This 
19830 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20 53  function is an S
19840 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61 72 6f  QL.  wrapper aro
19850 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33  und the [sqlite3
19860 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d 20 43  _libversion()] C
19870 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66  -interface..}..f
19880 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28 58  uncdef {substr(X
19890 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59  ,Y,Z) substr(X,Y
198a0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
198b0 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e  ubstr(X,Y,Z) fun
198c0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
198d0 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70  substring of inp
198e0 75 74 20 73 74 72 69 6e 67 20 58 20 74 68 61 74  ut string X that
198f0 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74   begins.  with t
19900 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65  he Y-th characte
19910 72 20 61 6e 64 20 77 68 69 63 68 20 69 73 20 5a  r and which is Z
19920 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
19930 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69  ..  ^If Z is omi
19940 74 74 65 64 20 74 68 65 6e 20 73 75 62 73 74 72  tted then substr
19950 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20 61 6c  (X,Y) returns al
19960 6c 20 63 68 61 72 61 63 74 65 72 73 20 74 68 72  l characters thr
19970 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20 20 6f  ough the end.  o
19980 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 20 62  f the string X b
19990 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68  eginning with th
199a0 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c  e Y-th..  ^The l
199b0 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74  eft-most charact
199c0 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d 62 65  er of X is numbe
199d0 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73 20 6e  r 1.  ^If Y is n
199e0 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e 20 74  egative.  then t
199f0 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74  he first charact
19a00 65 72 20 6f 66 20 74 68 65 20 73 75 62 73 74 72  er of the substr
19a10 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20  ing is found by 
19a20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68  counting from th
19a30 65 0a 20 20 72 69 67 68 74 20 72 61 74 68 65 72  e.  right rather
19a40 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20   than the left. 
19a50 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61 74 69   ^If Z is negati
19a60 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20 61 62  ve then.  the ab
19a70 73 28 5a 29 20 63 68 61 72 61 63 74 65 72 73 20  s(Z) characters 
19a80 70 72 65 63 65 64 69 6e 67 20 74 68 65 20 59 2d  preceding the Y-
19a90 74 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65  th character are
19aa0 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66   returned..  ^If
19ab0 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 74   X is a string t
19ac0 68 65 6e 20 63 68 61 72 61 63 74 65 72 73 20 69  hen characters i
19ad0 6e 64 69 63 65 73 20 72 65 66 65 72 20 74 6f 20  ndices refer to 
19ae0 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a 20 20  actual UTF-8 .  
19af0 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e 49 66  characters.  ^If
19b00 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65   X is a BLOB the
19b10 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20 72 65  n the indices re
19b20 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a  fer to bytes..}.
19b30 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f  .funcdef {total_
19b40 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a  changes()} {} {.
19b50 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68 61    ^The total_cha
19b60 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20  nges() function 
19b70 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
19b80 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65  er of row change
19b90 73 0a 20 20 63 61 75 73 65 64 20 62 79 20 49 4e  s.  caused by IN
19ba0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
19bb0 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d 65  DELETE.  stateme
19bc0 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20 63 75  nts since the cu
19bd0 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63  rrent database c
19be0 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70  onnection was op
19bf0 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20 66 75  ened..  ^This fu
19c00 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
19c10 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b  per around the [
19c20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
19c30 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b  anges()].  C/C++
19c40 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66   interface..}..f
19c50 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20  uncdef {trim(X) 
19c60 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
19c70 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c 59 29    ^The trim(X,Y)
19c80 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
19c90 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
19ca0 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
19cb0 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
19cc0 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
19cd0 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74  ar in Y from bot
19ce0 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e  h ends of X..  ^
19cf0 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
19d00 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 72  t is omitted, tr
19d10 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70  im(X) removes sp
19d20 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68 20 65  aces from both e
19d30 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e  nds of X..}..fun
19d40 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d  cdef {typeof(X)}
19d50 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79 70   {} {.  ^The typ
19d60 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  eof(X) function 
19d70 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
19d80 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
19d90 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f  the [datatype] o
19da0 66 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69  f.  the expressi
19db0 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69  on X: "null", "i
19dc0 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c  nteger", "real",
19dd0 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f   "text", or "blo
19de0 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  b"..}..funcdef {
19df0 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20  unlikely(X)} {} 
19e00 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c  {.  ^The unlikel
19e10 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  y(X) function re
19e20 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65  turns the argume
19e30 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a  nt X unchanged..
19e40 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28    ^The unlikely(
19e50 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  X) function is a
19e60 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20   no-op that the 
19e70 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20  code generator. 
19e80 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20   optimizes away 
19e90 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75  so that it consu
19ea0 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65  mes no CPU cycle
19eb0 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20  s at.  run-time 
19ec0 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67  (that is, during
19ed0 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74   calls to [sqlit
19ee0 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e  e3_step()])..  ^
19ef0 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74  The purpose of t
19f00 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66  he unlikely(X) f
19f10 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72  unction is to pr
19f20 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74  ovide a hint.  t
19f30 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  o the query plan
19f40 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67  ner that the arg
19f50 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f  ument X is a boo
19f60 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61  lean value.  tha
19f70 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e 6f 74  t is usually not
19f80 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75 6e 6c   true. ^(The unl
19f90 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
19fa0 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a  n is equivalent.
19fb0 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64    to [likelihood
19fc0 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29 5e 0a  ](X, 0.0625).)^.
19fd0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 69 63  }..funcdef {unic
19fe0 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ode(X)} {} {.  ^
19ff0 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29 20 66  The unicode(X) f
1a000 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1a010 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e 69 63  the numeric unic
1a020 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 63  ode code point c
1a030 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0a  orresponding to.
1a040 20 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72    the first char
1a050 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 74 72  acter of the str
1a060 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65 20 61  ing X.  If the a
1a070 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69 63 6f  rgument to unico
1a080 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61 20 73  de(X) is not a s
1a090 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74 68 65  tring.  then the
1a0a0 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65 66   result is undef
1a0b0 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ined..}..funcdef
1a0c0 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b   {upper(X)} {} {
1a0d0 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58 29  .  ^The upper(X)
1a0e0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1a0f0 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75  s a copy of inpu
1a100 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77 68  t string X in wh
1a110 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72  ich all .  lower
1a120 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61 72  -case ASCII char
1a130 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76 65  acters are conve
1a140 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75 70  rted to their up
1a150 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61 6c  per-case equival
1a160 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ent..}..funcdef 
1a170 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d  {zeroblob(N)} {}
1a180 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c   {.  ^The zerobl
1a190 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  ob(N) function r
1a1a0 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f  eturns a BLOB co
1a1b0 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79  nsisting of N by
1a1c0 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20 53  tes of 0x00..  S
1a1d0 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74 68  QLite manages th
1a1e0 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65  ese zeroblobs ve
1a1f0 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20  ry efficiently. 
1a200 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62   Zeroblobs can b
1a210 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65  e used to.  rese
1a220 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20  rve space for a 
1a230 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74  BLOB that is lat
1a240 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67  er written using
1a250 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f   .  [sqlite3_blo
1a260 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65  b_open() | incre
1a270 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d  mental BLOB I/O]
1a280 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66 75  ..  ^This SQL fu
1a290 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
1a2a0 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  ented using the 
1a2b0 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  [sqlite3_result_
1a2c0 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f  zeroblob()].  ro
1a2d0 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43  utine from the C
1a2e0 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
1a2f0 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65  }.</tcl>.</table
1a300 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1a310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a330 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a350 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1a360 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46  {Date And Time F
1a370 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75  unctions} datefu
1a380 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d 0a 68  nc {*datefunc}.h
1a390 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65  d_keywords {date
1a3a0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1a3b0 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e   {time() SQL fun
1a3c0 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72  ction}.hd_keywor
1a3d0 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29 20 53  ds {datetime() S
1a3e0 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75  QL function} {ju
1a3f0 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20 66 75  lianday() SQL fu
1a400 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f  nction}.hd_keywo
1a410 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28 29 20  rds {strftime() 
1a420 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f  SQL function}.</
1a430 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  tcl>..<p>.SQLite
1a440 20 73 75 70 70 6f 72 74 73 20 66 69 76 65 20 64   supports five d
1a450 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
1a460 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77  ctions as follow
1a470 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c  s:.</p>..<p>.<ol
1a480 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65  >.<li> ^(<b>date
1a490 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
1a4a0 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1a4b0 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1a4c0 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1a4d0 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c  <li> ^(<b>time(<
1a4e0 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
1a4f0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
1a500 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
1a510 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
1a520 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65  i> ^(<b>datetime
1a530 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
1a540 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1a550 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1a560 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1a570 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e  <li> ^(<b>julian
1a580 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  day(</b><i>times
1a590 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
1a5a0 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
1a5b0 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
1a5c0 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72  i>.<li> ^(<b>str
1a5d0 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72  ftime(</b><i>for
1a5e0 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c  mat, timestring,
1a5f0 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
1a600 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
1a610 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f  </b>)^ </li>.</o
1a620 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76  l>..<p>.^All fiv
1a630 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1a640 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61  functions take a
1a650 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20   time string as 
1a660 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54  an argument. .^T
1a670 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 69  he time string i
1a680 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  s followed by ze
1a690 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66  ro or more modif
1a6a0 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74 72 66  iers. .^The strf
1a6b0 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  time() function 
1a6c0 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66 6f 72  also takes a for
1a6d0 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20 69 74  mat string as it
1a6e0 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  s first argument
1a6f0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
1a700 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
1a710 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 73 75  nctions use a su
1a720 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f  bset of.[http://
1a730 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1a740 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c  /wiki/ISO_8601 |
1a750 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74 65 20   IS0-8601] date 
1a760 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73  and time.formats
1a770 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20 66 75  ..^The date() fu
1a780 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1a790 68 65 20 64 61 74 65 20 69 6e 20 74 68 69 73 20  he date in this 
1a7a0 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d  format: YYYY-MM-
1a7b0 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28 29  DD. .^The time()
1a7c0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1a7d0 73 20 74 68 65 20 74 69 6d 65 20 61 73 20 48 48  s the time as HH
1a7e0 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61  :MM:SS. .^The da
1a7f0 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  tetime() functio
1a800 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d  n returns "YYYY-
1a810 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e  MM-DD HH:MM:SS".
1a820 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64 61   .^(The julianda
1a830 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  y() function ret
1a840 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74 70 3a  urns the .[http:
1a850 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1a860 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64  rg/wiki/Julian_d
1a870 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d  ay | Julian day]
1a880 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66   - the.number of
1a890 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e   days since noon
1a8a0 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e   in Greenwich on
1a8b0 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37   November 24, 47
1a8c0 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a  14 B.C. .([http:
1a8d0 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1a8e0 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69  rg/wiki/Prolepti
1a8f0 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  c_Gregorian_cale
1a900 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74 69 63  ndar | Proleptic
1a910 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e   Gregorian calen
1a920 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74  dar]).)^.^The st
1a930 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65  rftime() routine
1a940 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74   returns the dat
1a950 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f  e formatted acco
1a960 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f  rding to .the fo
1a970 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65 63  rmat string spec
1a980 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69 72  ified as the fir
1a990 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68  st argument..^Th
1a9a0 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
1a9b0 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73  supports the mos
1a9c0 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74  t common substit
1a9d0 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20  utions found in 
1a9e0 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65  the .[http://ope
1a9f0 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e  ngroup.org/onlin
1aa00 65 70 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f  epubs/007908799/
1aa10 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d  xsh/strftime.htm
1aa20 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29 20 66  l | strftime() f
1aa30 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68  unction].from th
1aa40 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
1aa50 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20 6e 65  rary plus two ne
1aa60 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2c  w substitutions,
1aa70 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68   %f and %J..^(Th
1aa80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61  e following is a
1aa90 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f   complete list o
1aaa0 66 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d 65  f valid strftime
1aab0 28 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  () substitutions
1aac0 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
1aad0 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ote>.<table bord
1aae0 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69  er="0" cellpaddi
1aaf0 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69  ng="0" cellspaci
1ab00 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e  ng="0">.<tr><td>
1ab10 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e 3c  <td width="10"><
1ab20 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74  td></tr>..<tr><t
1ab30 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %d <td><td> d
1ab40 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a  ay of month: 00.
1ab50 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e  <tr><td> %f <td>
1ab60 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20  <td> fractional 
1ab70 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a  seconds: SS.SSS.
1ab80 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e  <tr><td> %H <td>
1ab90 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34  <td> hour: 00-24
1aba0 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74   .<tr><td> %j <t
1abb0 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79 65  d><td> day of ye
1abc0 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e  ar: 001-366.<tr>
1abd0 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e  <td> %J <td><td>
1abe0 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
1abf0 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c  er.<tr><td> %m <
1ac00 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30  td><td> month: 0
1ac10 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d  1-12.<tr><td> %M
1ac20 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65   <td><td> minute
1ac30 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e  : 00-59.<tr><td>
1ac40 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63   %s <td><td> sec
1ac50 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2d  onds since 1970-
1ac60 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25  01-01.<tr><td> %
1ac70 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e  S <td><td> secon
1ac80 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74  ds: 00-59.<tr><t
1ac90 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %w <td><td> d
1aca0 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20 77  ay of week 0-6 w
1acb0 69 74 68 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74  ith Sunday==0.<t
1acc0 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74  r><td> %W <td><t
1acd0 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72 3a  d> week of year:
1ace0 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20   00-53.<tr><td> 
1acf0 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72  %Y <td><td> year
1ad00 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e  : 0000-9999.<tr>
1ad10 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e  <td> %% <td><td>
1ad20 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c   %.</table>.</bl
1ad30 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
1ad40 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74 20 61  .^(Notice that a
1ad50 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61 6e  ll other date an
1ad60 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
1ad70 20 63 61 6e 20 62 65 20 65 78 70 72 65 73 73 65   can be expresse
1ad80 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73 74  d.in terms of st
1ad90 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a  rftime():.</p>..
1ada0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
1adb0 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63  ble border="0" c
1adc0 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63  ellpadding="0" c
1add0 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a  ellspacing="0">.
1ade0 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74  <tr><td><b>Funct
1adf0 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68  ion</b><td width
1ae00 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75  ="30"><td><b>Equ
1ae10 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d 65  ivalent strftime
1ae20 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20  ()</b>.<tr><td> 
1ae30 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20 20    date(...)     
1ae40 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1ae50 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20  ime('%Y-%m-%d', 
1ae60 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
1ae70 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c  time(...)      <
1ae80 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
1ae90 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e  e('%H:%M:%S', ..
1aea0 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61  .).<tr><td>   da
1aeb0 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64  tetime(...)  <td
1aec0 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
1aed0 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a  '%Y-%m-%d %H:%M:
1aee0 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74  %S', ...).<tr><t
1aef0 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e  d>   julianday(.
1af00 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74  ..) <td><td>  st
1af10 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e  rftime('%J', ...
1af20 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  ).</table>.</blo
1af30 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a  ckquote>)^..<p>.
1af40 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73  The only reasons
1af50 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20 66   for providing f
1af60 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20 74  unctions other t
1af70 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20 69  han strftime() i
1af80 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63  s.for convenienc
1af90 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63 69  e and for effici
1afa0 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e  ency..</p>..<h3>
1afb0 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68 33  Time Strings</h3
1afc0 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73  >..<p>^(A time s
1afd0 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e 20  tring can be in 
1afe0 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
1aff0 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70  wing formats:</p
1b000 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e  >..<ol>.<li> <i>
1b010 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c  YYYY-MM-DD</i>.<
1b020 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1b030 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  D HH:MM</i>.<li>
1b040 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
1b050 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  H:MM:SS</i>.<li>
1b060 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
1b070 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
1b080 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1b090 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69  DD</i><b>T</b><i
1b0a0 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20  >HH:MM</i>.<li> 
1b0b0 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
1b0c0 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
1b0d0 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
1b0e0 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
1b0f0 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a  b>T</b><i>HH:MM:
1b100 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
1b110 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
1b120 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  > <i>HH:MM:SS</i
1b130 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a  >.<li> <i>HH:MM:
1b140 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
1b150 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20  <b>now</b>.<li> 
1b160 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f 69  <i>DDDDDDDDDD</i
1b170 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e  >.</ol>)^..<p>.^
1b180 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72  In formats 5 thr
1b190 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54 22 20  ough 7, the "T" 
1b1a0 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61  is a literal cha
1b1b0 72 61 63 74 65 72 20 73 65 70 61 72 61 74 69 6e  racter separatin
1b1c0 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20  g .the date and 
1b1d0 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71  the time, as req
1b1e0 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74 70 3a  uired by .[http:
1b1f0 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52  //www.w3c.org/TR
1b200 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65 20 7c  /NOTE-datetime |
1b210 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f   ISO-8601]. .^Fo
1b220 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68 20  rmats 8 through 
1b230 31 30 20 74 68 61 74 20 73 70 65 63 69 66 79 20  10 that specify 
1b240 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75  only a time assu
1b250 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30  me a date of .20
1b260 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74  00-01-01. Format
1b270 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20   11, the string 
1b280 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72  'now', is conver
1b290 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75  ted into the .cu
1b2a0 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74  rrent date and t
1b2b0 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20  ime as obtained 
1b2c0 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e  from the xCurren
1b2d0 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20  tTime method.of 
1b2e0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73  the [sqlite3_vfs
1b2f0 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e  ] object in use.
1b300 0a 5e 54 68 65 20 27 6e 6f 77 27 20 61 72 67 75  .^The 'now' argu
1b310 6d 65 6e 74 20 74 6f 20 64 61 74 65 20 61 6e 64  ment to date and
1b320 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
1b330 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 65  always returns e
1b340 78 61 63 74 6c 79 20 74 68 65 0a 73 61 6d 65 20  xactly the.same 
1b350 76 61 6c 75 65 20 66 6f 72 20 6d 75 6c 74 69 70  value for multip
1b360 6c 65 20 69 6e 76 6f 63 61 74 69 6f 6e 73 20 77  le invocations w
1b370 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 5b  ithin the same [
1b380 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20  sqlite3_step()] 
1b390 63 61 6c 6c 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65  call..^[http://e
1b3a0 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1b3b0 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64  wiki/Coordinated
1b3c0 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d 65 20  _Universal_Time 
1b3d0 7c 20 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  | Universal Coor
1b3e0 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
1b3f0 43 29 5d 20 69 73 20 75 73 65 64 2e 20 0a 5e 46  C)] is used. .^F
1b400 6f 72 6d 61 74 20 31 32 20 69 73 20 74 68 65 20  ormat 12 is the 
1b410 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
1b420 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a  pedia.org/wiki/J
1b430 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69  ulian_day | Juli
1b440 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65  an day number].e
1b450 78 70 72 65 73 73 65 64 20 61 73 20 61 20 66 6c  xpressed as a fl
1b460 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
1b470 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f  ue..</p>..<p>.Fo
1b480 72 6d 61 74 73 20 32 20 74 68 72 6f 75 67 68 20  rmats 2 through 
1b490 31 30 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e  10 may be option
1b4a0 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ally followed by
1b4b0 20 61 20 74 69 6d 65 7a 6f 6e 65 20 69 6e 64 69   a timezone indi
1b4c0 63 61 74 6f 72 20 6f 66 20 74 68 65 20 66 6f 72  cator of the for
1b4d0 6d 0a 22 3c 69 3e 26 23 39 31 3b 2b 2d 26 23 39  m."<i>&#91;+-&#9
1b4e0 33 3b 48 48 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20  3;HH:MM</i>" or 
1b4f0 6a 75 73 74 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e  just "<i>Z</i>".
1b500 20 20 54 68 65 20 64 61 74 65 20 61 6e 64 20 74    The date and t
1b510 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73  ime functions us
1b520 65 20 55 54 43 20 6f 72 20 22 7a 75 6c 75 22 0a  e UTC or "zulu".
1b530 74 69 6d 65 20 69 6e 74 65 72 6e 61 6c 6c 79 2c  time internally,
1b540 20 61 6e 64 20 73 6f 20 74 68 65 20 22 5a 22 20   and so the "Z" 
1b550 73 75 66 66 69 78 20 69 73 20 61 20 6e 6f 2d 6f  suffix is a no-o
1b560 70 2e 20 20 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f  p.  Any non-zero
1b570 20 22 48 48 3a 4d 4d 22 20 73 75 66 66 69 78 20   "HH:MM" suffix 
1b580 69 73 0a 73 75 62 74 72 61 63 74 65 64 20 66 72  is.subtracted fr
1b590 6f 6d 20 74 68 65 20 69 6e 64 69 63 61 74 65 64  om the indicated
1b5a0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 69   date and time i
1b5b0 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75  n order to compu
1b5c0 74 65 20 7a 75 6c 75 20 74 69 6d 65 2e 0a 46 6f  te zulu time..Fo
1b5d0 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f  r example, all o
1b5e0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1b5f0 74 69 6d 65 20 73 74 72 69 6e 67 73 20 61 72 65  time strings are
1b600 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70   equivalent:.</p
1b610 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1b620 32 30 31 33 2d 31 30 2d 30 37 20 30 38 3a 32 33  2013-10-07 08:23
1b630 3a 31 39 2e 31 32 30 3c 62 72 3e 0a 32 30 31 33  :19.120<br>.2013
1b640 2d 31 30 2d 30 37 54 30 38 3a 32 33 3a 31 39 2e  -10-07T08:23:19.
1b650 31 32 30 5a 3c 62 72 3e 0a 32 30 31 33 2d 31 30  120Z<br>.2013-10
1b660 2d 30 37 20 30 34 3a 32 33 3a 31 39 2e 31 32 30  -07 04:23:19.120
1b670 2d 30 34 3a 30 30 3c 62 72 3e 0a 32 34 35 36 35  -04:00<br>.24565
1b680 37 32 2e 38 34 39 35 32 36 38 35 0a 3c 2f 62 6c  72.84952685.</bl
1b690 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e  ockquote>..<p>.^
1b6a0 28 49 6e 20 66 6f 72 6d 61 74 73 20 34 2c 20 37  (In formats 4, 7
1b6b0 2c 20 61 6e 64 20 31 30 2c 20 74 68 65 20 66 72  , and 10, the fr
1b6c0 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73  actional seconds
1b6d0 20 76 61 6c 75 65 20 53 53 2e 53 53 53 20 63 61   value SS.SSS ca
1b6e0 6e 20 68 61 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f  n have.one or mo
1b6f0 72 65 20 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77  re digits follow
1b700 69 6e 67 20 74 68 65 20 64 65 63 69 6d 61 6c 20  ing the decimal 
1b710 70 6f 69 6e 74 2e 20 20 45 78 61 63 74 6c 79 20  point.  Exactly 
1b720 74 68 72 65 65 20 64 69 67 69 74 73 20 61 72 65  three digits are
1b730 0a 73 68 6f 77 6e 20 69 6e 20 74 68 65 20 65 78  .shown in the ex
1b740 61 6d 70 6c 65 73 20 62 65 63 61 75 73 65 20 6f  amples because o
1b750 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 74 68  nly the first th
1b760 72 65 65 20 64 69 67 69 74 73 20 61 72 65 20 73  ree digits are s
1b770 69 67 6e 69 66 69 63 61 6e 74 0a 74 6f 20 74 68  ignificant.to th
1b780 65 20 72 65 73 75 6c 74 2c 20 62 75 74 20 74 68  e result, but th
1b790 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
1b7a0 61 6e 20 68 61 76 65 20 66 65 77 65 72 20 6f 72  an have fewer or
1b7b0 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 72 65 65   more than three
1b7c0 20 64 69 67 69 74 73 0a 61 6e 64 20 74 68 65 20   digits.and the 
1b7d0 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69  date/time functi
1b7e0 6f 6e 73 20 77 69 6c 6c 20 73 74 69 6c 6c 20 6f  ons will still o
1b7f0 70 65 72 61 74 65 20 63 6f 72 72 65 63 74 6c 79  perate correctly
1b800 2e 29 5e 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 66  .)^.Similarly, f
1b810 6f 72 6d 61 74 20 31 32 20 69 73 20 73 68 6f 77  ormat 12 is show
1b820 6e 20 77 69 74 68 20 31 30 20 73 69 67 6e 69 66  n with 10 signif
1b830 69 63 61 6e 74 20 64 69 67 69 74 73 2c 20 62 75  icant digits, bu
1b840 74 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65 0a  t the date/time.
1b850 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 72  functions will r
1b860 65 61 6c 6c 79 20 61 63 63 65 70 74 20 61 73 20  eally accept as 
1b870 6d 61 6e 79 20 6f 72 20 61 73 20 66 65 77 20 64  many or as few d
1b880 69 67 69 74 73 20 61 73 20 61 72 65 20 6e 65 63  igits as are nec
1b890 65 73 73 61 72 79 20 74 6f 0a 72 65 70 72 65 73  essary to.repres
1b8a0 65 6e 74 20 74 68 65 20 4a 75 6c 69 61 6e 20 64  ent the Julian d
1b8b0 61 79 20 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a  ay number..</p>.
1b8c0 0a 3c 68 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f  .<h3>Modifiers</
1b8d0 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d  h3>..<p>^The tim
1b8e0 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20  e string can be 
1b8f0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f  followed by zero
1b900 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65   or more modifie
1b910 72 73 20 74 68 61 74 20 0a 61 6c 74 65 72 20 64  rs that .alter d
1b920 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e  ate and/or time.
1b930 20 5e 45 61 63 68 20 6d 6f 64 69 66 69 65 72 0a   ^Each modifier.
1b940 69 73 20 61 20 74 72 61 6e 73 66 6f 72 6d 61 74  is a transformat
1b950 69 6f 6e 20 74 68 61 74 20 69 73 20 61 70 70 6c  ion that is appl
1b960 69 65 64 20 74 6f 20 74 68 65 20 74 69 6d 65 20  ied to the time 
1b970 76 61 6c 75 65 20 74 6f 20 69 74 73 20 6c 65 66  value to its lef
1b980 74 2e 0a 5e 4d 6f 64 69 66 69 65 72 73 20 61 72  t..^Modifiers ar
1b990 65 20 61 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c  e applied from l
1b9a0 65 66 74 20 74 6f 20 72 69 67 68 74 3b 20 6f 72  eft to right; or
1b9b0 64 65 72 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  der is important
1b9c0 2e 0a 5e 28 54 68 65 20 61 76 61 69 6c 61 62 6c  ..^(The availabl
1b9d0 65 20 6d 6f 64 69 66 69 65 72 73 20 61 72 65 20  e modifiers are 
1b9e0 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a  as follows.</p>.
1b9f0 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64  .<ol>.<li> NNN d
1ba00 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75  ays.<li> NNN hou
1ba10 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75  rs.<li> NNN minu
1ba20 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e  tes.<li> NNN.NNN
1ba30 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e  N seconds.<li> N
1ba40 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e  NN months.<li> N
1ba50 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74  NN years.<li> st
1ba60 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69  art of month.<li
1ba70 3e 20 73 74 61 72 74 20 6f 66 20 79 65 61 72 0a  > start of year.
1ba80 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 64 61  <li> start of da
1ba90 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e  y.<li> weekday N
1baa0 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a  .<li> unixepoch.
1bab0 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c  <li> localtime.<
1bac0 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e  li> utc .</ol>)^
1bad0 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20  ..<p>^The first 
1bae0 73 69 78 20 6d 6f 64 69 66 69 65 72 73 20 28 31  six modifiers (1
1baf0 20 74 68 72 6f 75 67 68 20 36 29 20 0a 73 69 6d   through 6) .sim
1bb00 70 6c 79 20 61 64 64 20 74 68 65 20 73 70 65 63  ply add the spec
1bb10 69 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20  ified amount of 
1bb20 74 69 6d 65 20 74 6f 20 74 68 65 20 64 61 74 65  time to the date
1bb30 20 61 6e 64 20 74 69 6d 65 20 0a 73 70 65 63 69   and time .speci
1bb40 66 69 65 64 20 62 79 20 74 68 65 20 70 72 65 63  fied by the prec
1bb50 65 64 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67  eding timestring
1bb60 20 61 6e 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a   and modifiers..
1bb70 5e 4e 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75  ^Note that "&plu
1bb80 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20  smn;NNN months" 
1bb90 77 6f 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69  works by renderi
1bba0 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  ng the original 
1bbb0 64 61 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59  date into.the YY
1bbc0 59 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c  YY-MM-DD format,
1bbd0 20 61 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75   adding the &plu
1bbe0 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d  smn;NNN to the M
1bbf0 4d 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74  M month value, t
1bc00 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20  hen.normalizing 
1bc10 74 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68  the result.  ^Th
1bc20 75 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c  us, for example,
1bc30 20 74 68 65 20 64 61 74 61 20 32 30 30 31 2d 30   the data 2001-0
1bc40 33 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79  3-31 modified.by
1bc50 20 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74   '+1 month' init
1bc60 69 61 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30  ially yields 200
1bc70 31 2d 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72  1-04-31, but Apr
1bc80 69 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64  il only has 30 d
1bc90 61 79 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20  ays.so the date 
1bca0 69 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f  is normalized to
1bcb0 20 32 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41   2001-05-01.  ^A
1bcc0 20 73 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20   similar effect 
1bcd0 6f 63 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20  occurs when.the 
1bce0 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73  original date is
1bcf0 20 46 65 62 72 75 61 72 79 20 32 39 20 6f 66 20   February 29 of 
1bd00 61 20 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74  a leapyear and t
1bd10 68 65 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26  he modifier is.&
1bd20 70 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77  plusmn;N years w
1bd30 68 65 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20  here N is not a 
1bd40 6d 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72  multiple of four
1bd50 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  .</p>..<p>^The "
1bd60 73 74 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69  start of" modifi
1bd70 65 72 73 20 28 37 20 74 68 72 6f 75 67 68 20 39  ers (7 through 9
1bd80 29 20 73 68 69 66 74 20 74 68 65 20 64 61 74 65  ) shift the date
1bd90 20 62 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74   backwards .to t
1bda0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
1bdb0 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74  the current mont
1bdc0 68 2c 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c  h, year or day.<
1bdd0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65  /p>..<p>^The "we
1bde0 65 6b 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20  ekday" modifier 
1bdf0 61 64 76 61 6e 63 65 73 20 74 68 65 20 64 61 74  advances the dat
1be00 65 20 66 6f 72 77 61 72 64 20 74 6f 20 74 68 65  e forward to the
1be10 20 6e 65 78 74 20 64 61 74 65 20 0a 77 68 65 72   next date .wher
1be20 65 20 74 68 65 20 77 65 65 6b 64 61 79 20 6e 75  e the weekday nu
1be30 6d 62 65 72 20 69 73 20 4e 2e 20 53 75 6e 64 61  mber is N. Sunda
1be40 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69  y is 0, Monday i
1be50 73 20 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  s 1, and so fort
1be60 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  h.</p>..<p>^The 
1be70 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69  "unixepoch" modi
1be80 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79 20 77  fier (11) only w
1be90 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d 65 64  orks if it immed
1bea0 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a  iately follows .
1beb0 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69 6e 20  a timestring in 
1bec0 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20 66  the DDDDDDDDDD f
1bed0 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f  ormat. .^This mo
1bee0 64 69 66 69 65 72 20 63 61 75 73 65 73 20 74 68  difier causes th
1bef0 65 20 44 44 44 44 44 44 44 44 44 44 20 74 6f 20  e DDDDDDDDDD to 
1bf00 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 6e  be interpreted n
1bf10 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20  ot .as a Julian 
1bf20 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69 74  day number as it
1bf30 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20   normally would 
1bf40 62 65 2c 20 62 75 74 20 61 73 0a 5b 68 74 74 70  be, but as.[http
1bf50 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
1bf60 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69  org/wiki/Unix_ti
1bf70 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20  me | Unix Time] 
1bf80 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66  - the .number of
1bf90 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
1bfa0 39 37 30 2e 20 20 49 66 20 74 68 65 20 22 75 6e  970.  If the "un
1bfb0 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
1bfc0 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f  r does not.follo
1bfd0 77 20 61 20 74 69 6d 65 73 74 72 69 6e 67 20 6f  w a timestring o
1bfe0 66 20 74 68 65 20 66 6f 72 6d 20 44 44 44 44 44  f the form DDDDD
1bff0 44 44 44 44 44 20 77 68 69 63 68 20 65 78 70 72  DDDDD which expr
1c000 65 73 73 65 73 20 74 68 65 20 6e 75 6d 62 65 72  esses the number
1c010 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63  .of seconds sinc
1c020 65 20 31 39 37 30 20 6f 72 20 69 66 20 6f 74 68  e 1970 or if oth
1c030 65 72 20 6d 6f 64 69 66 69 65 72 73 0a 73 65 70  er modifiers.sep
1c040 61 72 61 74 65 20 74 68 65 20 22 75 6e 69 78 65  arate the "unixe
1c050 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 66  poch" modifier f
1c060 72 6f 6d 20 70 72 69 6f 72 20 44 44 44 44 44 44  rom prior DDDDDD
1c070 44 44 44 44 20 74 68 65 6e 20 74 68 65 0a 62 65  DDDD then the.be
1c080 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
1c090 6e 65 64 2e 0a 44 75 65 20 74 6f 20 70 72 65 63  ned..Due to prec
1c0a0 69 73 69 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e  ision limitation
1c0b0 73 20 69 6d 70 6f 73 65 64 20 62 79 20 74 68 65  s imposed by the
1c0c0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
1c0d0 20 75 73 65 0a 6f 66 20 36 34 2d 62 69 74 20 69   use.of 64-bit i
1c0e0 6e 74 65 67 65 72 73 2c 20 74 68 65 20 22 75 6e  ntegers, the "un
1c0f0 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
1c100 72 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  r only works for
1c110 0a 64 61 74 65 73 20 62 65 74 77 65 65 6e 20 30  .dates between 0
1c120 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a  000-01-01 00:00:
1c130 30 30 20 61 6e 64 20 35 33 35 32 2d 31 31 2d 30  00 and 5352-11-0
1c140 31 20 31 30 3a 35 32 3a 34 37 20 28 75 6e 69 78  1 10:52:47 (unix
1c150 20 74 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37   times.of -62167
1c160 32 31 39 32 30 30 20 74 68 72 6f 75 67 68 20 31  219200 through 1
1c170 30 36 37 35 31 39 39 31 36 37 29 2e 3c 2f 70 3e  0675199167).</p>
1c180 0a 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c  ..<p>^The "local
1c190 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20 28  time" modifier (
1c1a0 31 32 29 20 61 73 73 75 6d 65 73 20 74 68 65 20  12) assumes the 
1c1b0 74 69 6d 65 20 73 74 72 69 6e 67 20 74 6f 20 69  time string to i
1c1c0 74 73 20 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e  ts left is in.Un
1c1d0 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61  iversal Coordina
1c1e0 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 20 61  ted Time (UTC) a
1c1f0 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65 20 74  nd adjusts the t
1c200 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20 74 68  ime.string so th
1c210 61 74 20 69 74 20 64 69 73 70 6c 61 79 73 20 6c  at it displays l
1c220 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c  ocaltime.  If "l
1c230 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77  ocaltime".follow
1c240 73 20 61 20 74 69 6d 65 20 74 68 61 74 20 69 73  s a time that is
1c250 20 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e 20 74   not UTC, then t
1c260 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
1c270 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20  ndefined..^(The 
1c280 22 75 74 63 22 20 69 73 20 74 68 65 20 6f 70 70  "utc" is the opp
1c290 6f 73 69 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74  osite of "localt
1c2a0 69 6d 65 22 2e 20 20 22 75 74 63 22 20 61 73 73  ime".  "utc" ass
1c2b0 75 6d 65 73 20 74 68 61 74 20 74 68 65 20 73 74  umes that the st
1c2c0 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66 74  ring.to its left
1c2d0 20 69 73 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c   is in the local
1c2e0 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64   timezone and ad
1c2f0 6a 75 73 74 73 20 74 68 61 74 20 73 74 72 69 6e  justs that strin
1c300 67 20 74 6f 20 62 65 20 69 6e 20 55 54 43 2e 29  g to be in UTC.)
1c310 5e 0a 49 66 20 74 68 65 20 70 72 69 6f 72 20 73  ^.If the prior s
1c320 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20  tring is not in 
1c330 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20  localtime, then 
1c340 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 22 75  the result of "u
1c350 74 63 22 20 69 73 0a 75 6e 64 65 66 69 6e 65 64  tc" is.undefined
1c360 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70  .</p>..<h3>Examp
1c370 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43  les</h3>..^(<p>C
1c380 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65  ompute the curre
1c390 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c  nt date.<p>..<bl
1c3a0 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20  ockquote>SELECT 
1c3b0 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c  date('now');</bl
1c3c0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1c3d0 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61  p>Compute the la
1c3e0 73 74 20 64 61 79 20 6f 66 20 74 68 65 20 63 75  st day of the cu
1c3f0 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e  rrent month.</p>
1c400 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
1c410 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c  LECT date('now',
1c420 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27  'start of month'
1c430 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20  ,'+1 month','-1 
1c440 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  day');.</blockqu
1c450 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1c460 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e  pute the date an
1c470 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75  d time given a u
1c480 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30  nix timestamp 10
1c490 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c  92941466.</p>..<
1c4a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20  blockquote>.    
1c4b0 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28  SELECT datetime(
1c4c0 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69  1092941466, 'uni
1c4d0 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63  xepoch');.</bloc
1c4e0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1c4f0 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65  Compute the date
1c500 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20   and time given 
1c510 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  a unix timestamp
1c520 20 31 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64   1092941466, and
1c530 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72   .compensate for
1c540 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65   your local time
1c550 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  zone.</p>..<bloc
1c560 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1c570 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39 34   datetime(109294
1c580 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68  1466, 'unixepoch
1c590 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b  ', 'localtime');
1c5a0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1c5b0 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1c5c0 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69 78 20  he current unix 
1c5d0 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a  timestamp.</p>..
1c5e0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1c5f0 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27  ELECT strftime('
1c600 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c  %s','now');.</bl
1c610 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1c620 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  p>Compute the nu
1c630 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e  mber of days sin
1c640 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f  ce the signing o
1c650 66 20 74 68 65 20 55 53 20 44 65 63 6c 61 72 61  f the US Declara
1c660 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64  tion.of Independ
1c670 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ence.</p>..<bloc
1c680 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1c690 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27   julianday('now'
1c6a0 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31  ) - julianday('1
1c6b0 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62  776-07-04');.</b
1c6c0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1c6d0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e  <p>Compute the n
1c6e0 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73  umber of seconds
1c6f0 20 73 69 6e 63 65 20 61 20 70 61 72 74 69 63 75   since a particu
1c700 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30  lar moment in 20
1c710 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  04:</p>..<blockq
1c720 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73  uote>.  SELECT s
1c730 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f  trftime('%s','no
1c740 77 27 29 20 2d 20 73 74 72 66 74 69 6d 65 28 27  w') - strftime('
1c750 25 73 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 20  %s','2004-01-01 
1c760 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c  02:34:56');.</bl
1c770 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1c780 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64  p>.Compute the d
1c790 61 74 65 20 6f 66 20 74 68 65 20 66 69 72 73 74  ate of the first
1c7a0 20 54 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f   Tuesday in Octo
1c7b0 62 65 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72  ber.for the curr
1c7c0 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a  ent year..</p>..
1c7d0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1c7e0 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27  ELECT date('now'
1c7f0 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61 72 27  ,'start of year'
1c800 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65  ,'+9 months','we
1c810 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f  ekday 2');.</blo
1c820 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1c830 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 74 69 6d  >Compute the tim
1c840 65 20 73 69 6e 63 65 20 74 68 65 20 75 6e 69 78  e since the unix
1c850 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64   epoch in second
1c860 73 20 0a 28 6c 69 6b 65 20 73 74 72 66 74 69 6d  s .(like strftim
1c870 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 65 78  e('%s','now') ex
1c880 63 65 70 74 20 69 6e 63 6c 75 64 65 73 20 66 72  cept includes fr
1c890 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c  actional part):<
1c8a0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1c8b0 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a 75 6c 69  >.  SELECT (juli
1c8c0 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 32  anday('now') - 2
1c8d0 34 34 30 35 38 37 2e 35 29 2a 38 36 34 30 30 2e  440587.5)*86400.
1c8e0 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  0;.</blockquote>
1c8f0 29 5e 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73 20  )^..<h3>Caveats 
1c900 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c  And Bugs</h3>..<
1c910 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74 69 6f  p>The computatio
1c920 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20  n of local time 
1c930 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c 79 20  depends heavily 
1c940 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f 66 20  on the whim .of 
1c950 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e 64 20  politicians and 
1c960 69 73 20 74 68 75 73 20 64 69 66 66 69 63 75 6c  is thus difficul
1c970 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65 63 74  t to get correct
1c980 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65   for .all locale
1c990 73 2e 20 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c  s. ^In this impl
1c9a0 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
1c9b0 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61  standard C libra
1c9c0 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63  ry .function loc
1c9d0 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73  altime_r() is us
1c9e0 65 64 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20  ed to assist in 
1c9f0 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20  the calculation 
1ca00 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20  of .local time. 
1ca10 20 5e 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d   ^(The .localtim
1ca20 65 5f 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e  e_r() C function
1ca30 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77   normally only w
1ca40 6f 72 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62  orks for years.b
1ca50 65 74 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20  etween 1970 and 
1ca60 32 30 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20  2037. For dates 
1ca70 6f 75 74 73 69 64 65 20 74 68 69 73 20 72 61 6e  outside this ran
1ca80 67 65 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65  ge, SQLite .atte
1ca90 6d 70 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20  mpts to map the 
1caa0 79 65 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75  year into an equ
1cab0 69 76 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74  ivalent year wit
1cac0 68 69 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c  hin .this range,
1cad0 20 64 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74   do the calculat
1cae0 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68  ion, then map th
1caf0 65 20 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f  e year back.)^</
1cb00 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20  p>...<p>^(These 
1cb10 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77  functions only w
1cb20 6f 72 6b 20 66 6f 72 20 64 61 74 65 73 20 62 65  ork for dates be
1cb30 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31  tween 0000-01-01
1cb40 20 30 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39   00:00:00.and 99
1cb50 39 39 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35  99-12-31 23:59:5
1cb60 39 20 28 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e  9 (julidan day n
1cb70 75 6d 62 65 72 73 20 31 37 32 31 30 35 39 2e 35  umbers 1721059.5
1cb80 20 74 68 72 6f 75 67 68 20 35 33 37 33 34 38 34   through 5373484
1cb90 2e 35 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73  .5).)^.For dates
1cba0 20 6f 75 74 73 69 64 65 20 74 68 61 74 20 72 61   outside that ra
1cbb0 6e 67 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73  nge, the results
1cbc0 20 6f 66 20 74 68 65 73 65 0a 66 75 6e 63 74 69   of these.functi
1cbd0 6f 6e 73 20 61 72 65 20 75 6e 64 65 66 69 6e 65  ons are undefine
1cbe0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56  d.</p>..<p>Non-V
1cbf0 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61  ista Windows pla
1cc00 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70  tforms only supp
1cc10 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f 66 20 44  ort one set of D
1cc20 53 54 20 72 75 6c 65 73 2e 20 0a 56 69 73 74 61  ST rules. .Vista
1cc30 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 74   only supports t
1cc40 77 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 6f  wo. Therefore, o
1cc50 6e 20 74 68 65 73 65 20 70 6c 61 74 66 6f 72 6d  n these platform
1cc60 73 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c 20 44  s, .historical D
1cc70 53 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20  ST calculations 
1cc80 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65 63  will be incorrec
1cc90 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c  t. .For example,
1cca0 20 69 6e 20 74 68 65 20 55 53 2c 20 69 6e 20 32   in the US, in 2
1ccb0 30 30 37 20 74 68 65 20 44 53 54 20 72 75 6c 65  007 the DST rule
1ccc0 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d  s changed. .Non-
1ccd0 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c  Vista Windows pl
1cce0 61 74 66 6f 72 6d 73 20 61 70 70 6c 79 20 74 68  atforms apply th
1ccf0 65 20 6e 65 77 20 32 30 30 37 20 44 53 54 20 72  e new 2007 DST r
1cd00 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65  ules .to all pre
1cd10 76 69 6f 75 73 20 79 65 61 72 73 20 61 73 20 77  vious years as w
1cd20 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65 73 20  ell. Vista does 
1cd30 73 6f 6d 65 77 68 61 74 20 62 65 74 74 65 72 0a  somewhat better.
1cd40 67 65 74 74 69 6e 67 20 72 65 73 75 6c 74 73 20  getting results 
1cd50 63 6f 72 72 65 63 74 20 62 61 63 6b 20 74 6f 20  correct back to 
1cd60 31 39 38 36 2c 20 77 68 65 6e 20 74 68 65 20 72  1986, when the r
1cd70 75 6c 65 73 20 77 65 72 65 20 61 6c 73 6f 20 63  ules were also c
1cd80 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  hanged.</p>..<p>
1cd90 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d  All internal com
1cda0 70 75 74 61 74 69 6f 6e 73 20 61 73 73 75 6d 65  putations assume
1cdb0 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e   the .[http://en
1cdc0 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1cdd0 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61  iki/Gregorian_ca
1cde0 6c 65 6e 64 61 72 20 7c 20 47 72 65 67 6f 72 69  lendar | Gregori
1cdf0 61 6e 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73  an calendar].sys
1ce00 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  tem.  It is also
1ce10 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 65 76   assumed that ev
1ce20 65 72 79 0a 64 61 79 20 69 73 20 65 78 61 63 74  ery.day is exact
1ce30 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73  ly 86400 seconds
1ce40 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70   in duration.</p
1ce50 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1ce60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cea0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1ceb0 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e 63 74  {Aggregate Funct
1cec0 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a  ions} aggfunc {*
1ced0 61 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a  aggfunc}.</tcl>.
1cee0 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61  .<p>.The aggrega
1cef0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f  te functions sho
1cf00 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61  wn below are ava
1cf10 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c  ilable by defaul
1cf20 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61  t.  Additional.a
1cf30 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1cf40 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20  ns written in C 
1cf50 6d 61 79 20 62 65 20 61 64 64 65 64 20 75 73 69  may be added usi
1cf60 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65 33  ng the .[sqlite3
1cf70 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
1cf80 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e  ()]</a>.API.</p>
1cf90 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61 67  ..<p>.^In any ag
1cfa0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1cfb0 20 74 68 61 74 20 74 61 6b 65 73 20 61 20 73 69   that takes a si
1cfc0 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74  ngle argument, t
1cfd0 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e  hat argument.can
1cfe0 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20   be preceded by 
1cff0 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53 54  the keyword DIST
1d000 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63 68 20  INCT.  ^In such 
1d010 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65  cases, duplicate
1d020 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69  .elements are fi
1d030 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20 62 65  ltered before be
1d040 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20  ing passed into 
1d050 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  the aggregate fu
1d060 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61  nction..^For exa
1d070 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69  mple, the functi
1d080 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69 6e  on "count(distin
1d090 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74 75  ct X)" will retu
1d0a0 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  rn the number.of
1d0b0 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65 73   distinct values
1d0c0 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73   of column X ins
1d0d0 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74 61  tead of the tota
1d0e0 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  l number of non-
1d0f0 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63  null.values in c
1d100 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c  olumn X..</p>..<
1d110 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63  table border=0 c
1d120 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c  ellpadding=10>.<
1d130 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76  tcl>.funcdef {av
1d140 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76 67  g(X)} {*avg {avg
1d150 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1d160 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1d170 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a   avg() function.
1d180 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 76    returns the av
1d190 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61  erage value of a
1d1a0 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58  ll non-NULL <i>X
1d1b0 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20  </i> within a.  
1d1c0 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67 20  group.  ^String 
1d1d0 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 20  and BLOB values 
1d1e0 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b  that do not look
1d1f0 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20 61 72   like numbers ar
1d200 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65 64 20  e.  interpreted 
1d210 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72 65 73  as 0..  ^The res
1d220 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20  ult of avg() is 
1d230 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e  always a floatin
1d240 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 61 73  g point value as
1d250 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20 74 68   long as.  at th
1d260 65 72 65 20 69 73 20 61 74 20 6c 65 61 73 74 20  ere is at least 
1d270 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70  one non-NULL inp
1d280 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20  ut even if all. 
1d290 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65   inputs are inte
1d2a0 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65 73 75  gers.  ^The resu
1d2b0 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20 4e  lt of avg() is N
1d2c0 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ULL if and only 
1d2d0 69 66 0a 20 20 74 68 65 72 65 20 61 72 65 20 6e  if.  there are n
1d2e0 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  o non-NULL input
1d2f0 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  s.  .}..funcdef 
1d300 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74 28  {count(X) count(
1d310 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75  *)} {*count {cou
1d320 6e 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66  nt() aggregate f
1d330 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1d340 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75 6e 63  he count(X) func
1d350 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 61  tion returns.  a
1d360 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e 75   count of the nu
1d370 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 20 20  mber of times.  
1d380 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73  that <i>X</i> is
1d390 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67   not NULL in a g
1d3a0 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f 75 6e  roup.  ^The coun
1d3b0 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  t(*) function.  
1d3c0 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e  (with no argumen
1d3d0 74 73 29 20 72 65 74 75 72 6e 73 20 74 68 65 20  ts) returns the 
1d3e0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
1d3f0 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75  rows in the grou
1d400 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67  p..}..funcdef {g
1d410 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29 20 67  roup_concat(X) g
1d420 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29  roup_concat(X,Y)
1d430 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f 6e  } {.  *group_con
1d440 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61  cat {group_conca
1d450 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  t() aggregate fu
1d460 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54  nction}.} {.  ^T
1d470 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  he group_concat(
1d480 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1d490 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68  ns.  a string wh
1d4a0 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e 63 61  ich is the conca
1d4b0 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c  tenation of.  al
1d4c0 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
1d4d0 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20  s of <i>X</i>.  
1d4e0 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c 69  ^If parameter <i
1d4f0 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65 6e  >Y</i> is presen
1d500 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73 20 75  t then.  it is u
1d510 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72  sed as the separ
1d520 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20 69  ator.  between i
1d530 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58  nstances of <i>X
1d540 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61 20  </i>.  ^A comma 
1d550 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61 73  (",") is used as
1d560 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20   the separator. 
1d570 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20   if <i>Y</i> is 
1d580 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f 72  omitted.  The or
1d590 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63 61  der of the conca
1d5a0 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73  tenated elements
1d5b0 20 69 73 0a 20 20 61 72 62 69 74 72 61 72 79 2e   is.  arbitrary.
1d5c0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78  .}..funcdef {max
1d5d0 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75 6e  (X)} {*maxAggFun
1d5e0 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78 28  c *agg_max {max(
1d5f0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1d600 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
1d610 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20  max() aggregate 
1d620 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72  function.  retur
1d630 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76  ns the maximum v
1d640 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75  alue of all valu
1d650 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
1d660 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20  .  ^The maximum 
1d670 76 61 6c 75 65 20 69 73 20 74 68 65 20 76 61 6c  value is the val
1d680 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65  ue that would be
1d690 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74 20 69   returned last i
1d6a0 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42 59 20  n an.  ORDER BY 
1d6b0 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 75  on the same colu
1d6c0 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  mn.  ^Aggregate 
1d6d0 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20 4e 55  max() returns NU
1d6e0 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e 6c  LL .  if and onl
1d6f0 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  y if there are n
1d700 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  o non-NULL value
1d710 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
1d720 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28  }..funcdef {min(
1d730 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e 63  X)} {*minAggFunc
1d740 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29   *agg_min {min()
1d750 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1d760 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d  ion}} {.  ^The m
1d770 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20 66  in() aggregate f
1d780 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e  unction.  return
1d790 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f  s the minimum no
1d7a0 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20  n-NULL value of 
1d7b0 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  all values in th
1d7c0 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20  e group..  ^The 
1d7d0 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73  minimum value is
1d7e0 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   the first non-N
1d7f0 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74 20 77  ULL value that w
1d800 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20 69 6e  ould appear.  in
1d810 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f 66 20   an ORDER BY of 
1d820 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41  the column..  ^A
1d830 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29 20 72  ggregate min() r
1d840 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 61  eturns NULL if a
1d850 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65  nd only if there
1d860 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
1d870 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  .  values in the
1d880 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64   group..}..funcd
1d890 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c  ef {sum(X) total
1d8a0 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75 6e  (X)} {.  *sumFun
1d8b0 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20 20  c *sum *total.  
1d8c0 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61 74 65  {sum() aggregate
1d8d0 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f   function}.  {to
1d8e0 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65 20  tal() aggregate 
1d8f0 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20  function}.} {.  
1d900 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64 20 74  ^The sum() and t
1d910 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65  otal() aggregate
1d920 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65 74   functions.  ret
1d930 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e  urn sum of all n
1d940 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  on-NULL values i
1d950 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e  n the group..  ^
1d960 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1d970 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72  non-NULL input r
1d980 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72  ows then sum() r
1d990 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75  eturns.  NULL bu
1d9a0 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e  t total() return
1d9b0 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69 73  s 0.0..  NULL is
1d9c0 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20   not normally a 
1d9d0 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66  helpful result f
1d9e0 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f  or the sum of no
1d9f0 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68 65 20   rows.  but the 
1da00 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71  SQL standard req
1da10 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73  uires it and mos
1da20 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20 64 61  t other.  SQL da
1da30 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69  tabase engines i
1da40 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20 74  mplement sum() t
1da50 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69 74  hat way so SQLit
1da60 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68 65  e does it in the
1da70 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20 6f  .  same way in o
1da80 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70 61  rder to be compa
1da90 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f 6e  tible.   The non
1daa0 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c 28  -standard total(
1dab0 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20  ) function.  is 
1dac0 70 72 6f 76 69 64 65 64 20 61 73 20 61 20 63 6f  provided as a co
1dad0 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74 6f 20  nvenient way to 
1dae0 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68 69 73  work around this
1daf0 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a   design problem.
1db00 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e    in the SQL lan
1db10 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  guage.</p>..  <p
1db20 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20  >^The result of 
1db30 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61 79  total() is alway
1db40 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
1db50 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65  nt value..  ^The
1db60 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29   result of sum()
1db70 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76   is an integer v
1db80 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d  alue if all non-
1db90 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20  NULL inputs are 
1dba0 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49 66 20  integers..  ^If 
1dbb0 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d  any input to sum
1dbc0 28 29 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e  () is neither an
1dbd0 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55   integer or a NU
1dbe0 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20  LL.  then sum() 
1dbf0 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69  returns a floati
1dc00 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20  ng point value. 
1dc10 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20   which might be 
1dc20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  an approximation
1dc30 20 74 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d   to the true sum
1dc40 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d  .</p>..  <p>^Sum
1dc50 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e  () will throw an
1dc60 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c   "integer overfl
1dc70 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66  ow" exception if
1dc80 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72   all inputs.  ar
1dc90 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55  e integers or NU
1dca0 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65  LL.  and an inte
1dcb0 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63  ger overflow occ
1dcc0 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74  urs at any point
1dcd0 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70   during the comp
1dce0 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61  utation..  ^Tota
1dcf0 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73  l() never throws
1dd00 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72   an integer over
1dd10 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c  flow..}.</tcl>.<
1dd20 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23  /table>..<tcl>.#
1dd30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd70 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1dd80 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73  ction INSERT ins
1dd90 65 72 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53  ert {INSERT *INS
1dda0 45 52 54 73 7d 0a 0a 52 65 63 75 72 73 69 76 65  ERTs}..Recursive
1ddb0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e  BubbleDiagram in
1ddc0 73 65 72 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  sert-stmt.</tcl>
1ddd0 0a 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20  ..<p>The INSERT 
1dde0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20  statement comes 
1ddf0 69 6e 20 74 68 72 65 65 20 62 61 73 69 63 20 66  in three basic f
1de00 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69  orms.  .<ul>.<li
1de10 3e 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66  ><p>^The first f
1de20 6f 72 6d 20 28 77 69 74 68 20 74 68 65 20 22 56  orm (with the "V
1de30 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20  ALUES" keyword) 
1de40 63 72 65 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d  creates one or m
1de50 6f 72 65 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a  ore.new rows in.
1de60 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
1de70 65 2e 20 5e 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e  e. ^If no column
1de80 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69  -list is specifi
1de90 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  ed then the numb
1dea0 65 72 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e 73  er.of values ins
1deb0 65 72 74 65 64 20 69 6e 74 6f 20 65 61 63 68 20  erted into each 
1dec0 72 6f 77 0a 6d 75 73 74 20 62 65 20 74 68 65 20  row.must be the 
1ded0 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62  same as the numb
1dee0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1def0 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20   the table. ^In 
1df00 74 68 69 73 20 63 61 73 65 0a 74 68 65 20 72 65  this case.the re
1df10 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69  sult of evaluati
1df20 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ng the left-most
1df30 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 65   expression in e
1df40 61 63 68 20 74 65 72 6d 20 6f 66 0a 74 68 65 20  ach term of.the 
1df50 56 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20 69  VALUES list is i
1df60 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
1df70 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
1df80 6e 20 6f 66 20 74 68 65 20 65 61 63 68 20 6e 65  n of the each ne
1df90 77 20 72 6f 77 2c 0a 61 6e 64 20 66 6f 72 74 68  w row,.and forth
1dfa0 20 66 6f 72 20 65 61 63 68 20 73 75 62 73 65 71   for each subseq
1dfb0 75 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 2e  uent expression.
1dfc0 20 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d 6c 69   ^If a.column-li
1dfd0 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  st is specified,
1dfe0 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72   then the number
1dff0 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 65 61   of values in ea
1e000 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 0a 56  ch term of the.V
1e010 41 4c 55 45 20 6c 69 73 74 20 6d 75 73 74 20 6d  ALUE list must m
1e020 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20  atch the number 
1e030 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c  of.specified col
1e040 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20 74  umns. ^Each of t
1e050 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73  he named columns
1e060 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20   of the new row 
1e070 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77 69 74  is populated.wit
1e080 68 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  h the results of
1e090 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
1e0a0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 56 41  corresponding VA
1e0b0 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f 6e 2e  LUES expression.
1e0c0 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73 20   ^Table.columns 
1e0d0 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65  that do not appe
1e0e0 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ar in the column
1e0f0 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75 6c 61   list are popula
1e100 74 65 64 20 77 69 74 68 20 74 68 65 20 64 65 66  ted with the def
1e110 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61 6c 75  ault.column valu
1e120 65 20 28 73 70 65 63 69 66 69 65 64 20 61 73 20  e (specified as 
1e130 70 61 72 74 20 6f 66 20 74 68 65 20 43 52 45 41  part of the CREA
1e140 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
1e150 6e 74 29 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c  nt), or with NUL
1e160 4c 20 69 66 0a 6e 6f 20 64 65 66 61 75 6c 74 20  L if.no default 
1e170 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69  value is specifi
1e180 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  ed...<li><p>The 
1e190 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74  second form of t
1e1a0 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
1e1b0 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 53  ent contains a S
1e1c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a  ELECT statement.
1e1d0 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c  instead of a VAL
1e1e0 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e  UES clause. ^A n
1e1f0 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65  ew entry is inse
1e200 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61  rted into the ta
1e210 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77  ble for each.row
1e220 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65   of data returne
1e230 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74  d by executing t
1e240 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
1e250 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d  ent. ^If a colum
1e260 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66  n-list is.specif
1e270 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  ied, the number 
1e280 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1e290 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
1e2a0 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74  SELECT must be t
1e2b0 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e  he same.as the n
1e2c0 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69  umber of items i
1e2d0 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73  n the column-lis
1e2e0 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  t. ^Otherwise, i
1e2f0 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  f no column-list
1e300 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
1e310 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1e320 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
1e330 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  lt of the SELECT
1e340 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
1e350 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e.as the number 
1e360 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1e370 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45  e table. ^Any SE
1e380 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20  LECT statement, 
1e390 69 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d 70 6f  including.[compo
1e3a0 75 6e 64 20 53 45 4c 45 43 54 73 5d 20 61 6e 64  und SELECTs] and
1e3b0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1e3c0 74 73 20 77 69 74 68 20 5b 4f 52 44 45 52 20 42  ts with [ORDER B
1e3d0 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d 49 54  Y] and/or [LIMIT
1e3e0 5d 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20  ] clauses, .may 
1e3f0 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49 4e  be used in an IN
1e400 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  SERT statement o
1e410 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c  f this form...<l
1e420 69 3e 3c 70 3e 54 68 65 20 74 68 69 72 64 20 66  i><p>The third f
1e430 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  orm of an INSERT
1e440 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77 69   statement is wi
1e450 74 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  th DEFAULT VALUE
1e460 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54 20  S..^(The INSERT 
1e470 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c 55  ... DEFAULT VALU
1e480 45 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 73  ES statement ins
1e490 65 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e 65  erts a single ne
1e4a0 77 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6e  w row into the.n
1e4b0 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e 45  amed table.)^ ^E
1e4c0 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
1e4d0 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70  e new row is pop
1e4e0 75 6c 61 74 65 64 20 77 69 74 68 20 69 74 73 20  ulated with its 
1e4f0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 0a 6f  default value,.o
1e500 72 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 69 66  r with a NULL if
1e510 20 6e 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75   no default valu
1e520 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  e is specified a
1e530 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f  s part of the co
1e540 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 20  lumn.definition 
1e550 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 41  in the CREATE TA
1e560 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  BLE statement...
1e570 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  </ul>..<p>^The o
1e580 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74  ptional conflict
1e590 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74  -clause allows t
1e5a0 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e  he specification
1e5b0 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69   of an alternati
1e5c0 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  ve.constraint co
1e5d0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1e5e0 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75  n algorithm to u
1e5f0 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f  se during this o
1e600 6e 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e  ne INSERT comman
1e610 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69  d..See the secti
1e620 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f  on titled.[ON CO
1e630 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
1e640 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
1e650 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62  on..For compatib
1e660 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c  ility with MySQL
1e670 2c 20 5e 74 68 65 20 70 61 72 73 65 72 20 61 6c  , ^the parser al
1e680 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66 20  lows the use of 
1e690 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f  the.single keywo
1e6a0 72 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67  rd <a href="lang
1e6b0 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52  _replace.html">R
1e6c0 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e  EPLACE</a> as an
1e6d0 20 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53   .alias for "INS
1e6e0 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e  ERT OR REPLACE".
1e6f0 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f  ..<p>^(The optio
1e700 6e 61 6c 20 22 3c 69 3e 64 61 74 61 62 61 73 65  nal "<i>database
1e710 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  -name</i><b>.</b
1e720 3e 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  >" prefix on the
1e730 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
1e740 69 3e 0a 69 73 20 73 75 70 70 6f 72 74 20 66 6f  i>.is support fo
1e750 72 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45  r top-level INSE
1e760 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e  RT statements on
1e770 6c 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c  ly.)^  ^The tabl
1e780 65 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a 75  e name must be.u
1e790 6e 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20 49  nqualified for I
1e7a0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73  NSERT statements
1e7b0 20 74 68 61 74 20 6f 63 63 75 72 20 77 69 74 68   that occur with
1e7c0 69 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47 47  in [CREATE TRIGG
1e7d0 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ER] statements..
1e7e0 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20  ^Similarly, the 
1e7f0 22 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22  "DEFAULT VALUES"
1e800 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53   form of the INS
1e810 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ERT statement is
1e820 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 74   supported for.t
1e830 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20  op-level INSERT 
1e840 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20  statements only 
1e850 61 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45  and not for INSE
1e860 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  RT statements wi
1e870 74 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c  thin.triggers..<
1e880 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
1e890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e8a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e8b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e8c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e8d0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1e8e0 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c   {ON CONFLICT cl
1e8f0 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b  ause} conflict {
1e900 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65  {conflict clause
1e910 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d  } {ON CONFLICT}}
1e920 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
1e930 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63  eDiagram conflic
1e940 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a  t-clause.</tcl>.
1e950 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  .<p>The ON CONFL
1e960 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  ICT clause is no
1e970 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c  t a separate SQL
1e980 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73   command.  It is
1e990 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20   a.non-standard 
1e9a0 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20  clause that can 
1e9b0 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f  appear in many o
1e9c0 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ther SQL command
1e9d0 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69  s..It is given i
1e9e0 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69  ts own section i
1e9f0 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  n this document 
1ea00 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f  because it is no
1ea10 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61  t.part of standa
1ea20 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65  rd SQL and there
1ea30 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62  fore might not b
1ea40 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a  e familiar.</p>.
1ea50 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78 20  .<p>^The syntax 
1ea60 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  for the ON CONFL
1ea70 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73  ICT clause is as
1ea80 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72   shown above for
1ea90 0a 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c  .the CREATE TABL
1eaa0 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72  E command.  ^For
1eab0 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a   the INSERT and.
1eac0 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c  UPDATE commands,
1ead0 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f   the keywords "O
1eae0 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20  N CONFLICT" are 
1eaf0 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22  replaced by "OR"
1eb00 20 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79 6e   so that.the syn
1eb10 74 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20 6e  tax reads more n
1eb20 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65  aturally.  For e
1eb30 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20  xample, instead 
1eb40 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f  of."INSERT ON CO
1eb50 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77  NFLICT IGNORE" w
1eb60 65 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f  e have "INSERT O
1eb70 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b  R IGNORE"..The k
1eb80 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62  eywords change b
1eb90 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f  ut the meaning o
1eba0 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20  f the clause is 
1ebb0 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20  the same.either 
1ebc0 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  way.</p>..<p>The
1ebd0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1ebe0 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 55  use applies to U
1ebf0 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
1ec00 4c 4c 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  LL.constraints (
1ec10 61 6e 64 20 74 6f 20 50 52 49 4d 41 52 59 20 4b  and to PRIMARY K
1ec20 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  EY constraints w
1ec30 68 69 63 68 20 66 6f 72 20 74 68 65 20 70 75 72  hich for the pur
1ec40 70 6f 73 65 73 20 0a 6f 66 20 74 68 69 73 20 73  poses .of this s
1ec50 65 63 74 69 6f 6e 20 61 72 65 20 74 68 65 20 73  ection are the s
1ec60 61 6d 65 20 74 68 69 6e 67 20 61 73 20 55 4e 49  ame thing as UNI
1ec70 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  QUE constraints)
1ec80 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  ..The ON CONFLIC
1ec90 54 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65 73  T algorithm does
1eca0 20 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b 46   not.apply to [F
1ecb0 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
1ecc0 72 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20 61  raints]..There a
1ecd0 72 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63 74  re five conflict
1ece0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1ecf0 72 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52  rithm choices:.R
1ed00 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20  OLLBACK, ABORT, 
1ed10 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e  FAIL, IGNORE, an
1ed20 64 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20  d REPLACE..^The 
1ed30 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
1ed40 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1ed50 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20  rithm is ABORT. 
1ed60 20 54 68 69 73 0a 69 73 20 77 68 61 74 20 74 68   This.is what th
1ed70 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64  ey mean:</p>..<d
1ed80 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41  l>.<dt><b>ROLLBA
1ed90 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  CK</b></dt>.<dd>
1eda0 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
1edb0 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
1edc0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1edd0 75 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43  urs, the ROLLBAC
1ede0 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  K.resolution alg
1edf0 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68  orithm aborts th
1ee00 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
1ee10 61 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e 20  atement with.an 
1ee20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
1ee30 54 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c 6c  T error and roll
1ee40 73 20 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  s back the curre
1ee50 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  nt transaction..
1ee60 5e 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  ^If no transacti
1ee70 6f 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74  on is.active (ot
1ee80 68 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70  her than the imp
1ee90 6c 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  lied transaction
1eea0 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
1eeb0 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e   on every.comman
1eec0 64 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  d) then the ROLL
1eed0 42 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e 20  BACK resolution 
1eee0 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20  algorithm works 
1eef0 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 0a  the same as the.
1ef00 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 2e  ABORT algorithm.
1ef10 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
1ef20 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e  b>ABORT</b></dt>
1ef30 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61  .<dd><p> ^When a
1ef40 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e  n applicable con
1ef50 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
1ef60 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41 42  n occurs, the AB
1ef70 4f 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ORT.resolution a
1ef80 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20  lgorithm aborts 
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 0a 77 69 74 68 20 61  statement.with a
1efb0 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  n SQLITE_CONSTRA
1efc0 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 62 61  INT error and ba
1efd0 63 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61 6e  cks out any chan
1efe0 67 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65 20  ges.made by the 
1eff0 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
1f000 65 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e 67  ement; but chang
1f010 65 73 20 63 61 75 73 65 64 0a 62 79 20 70 72 69  es caused.by pri
1f020 6f 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  or SQL statement
1f030 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
1f040 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 72  e transaction ar
1f050 65 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20  e preserved and 
1f060 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  the.transaction 
1f070 72 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e 0a  remains active..
1f080 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
1f090 75 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e 64  ult behavior and
1f0a0 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 73 70   the behavior sp
1f0b0 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 53  ecified by the S
1f0c0 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e  QL.standard.</p>
1f0d0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41  </dd>..<dt><b>FA
1f0e0 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  IL</b></dt>.<dd>
1f0f0 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
1f100 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
1f110 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1f120 75 72 73 2c 20 74 68 65 20 46 41 49 4c 0a 72 65  urs, the FAIL.re
1f130 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
1f140 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
1f150 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
1f160 65 6e 74 20 77 69 74 68 20 61 6e 0a 53 51 4c 49  ent with an.SQLI
1f170 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
1f180 72 6f 72 2e 20 20 5e 42 75 74 20 74 68 65 20 46  ror.  ^But the F
1f190 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 64  AIL resolution d
1f1a0 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75 74  oes not.back out
1f1b0 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 6f   prior changes o
1f1c0 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  f the SQL statem
1f1d0 65 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64 20  ent that failed 
1f1e0 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e 64 20  nor does.it end 
1f1f0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
1f200 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69  .^For example, i
1f210 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74  f an UPDATE.stat
1f220 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65  ement encountere
1f230 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  d a constraint v
1f240 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20  iolation on the 
1f250 31 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69  100th row that.i
1f260 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70  t attempts to up
1f270 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66  date, then the f
1f280 69 72 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e  irst 99 row chan
1f290 67 65 73 20 61 72 65 20 70 72 65 73 65 72 76 65  ges are preserve
1f2a0 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f  d.but changes to
1f2b0 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65   rows 100 and be
1f2c0 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72  yond never occur
1f2d0 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  .</p></dd>..<dt>
1f2e0 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64  <b>IGNORE</b></d
1f2f0 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
1f300 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
1f310 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
1f320 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65  ion occurs, .the
1f330 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74 69   IGNORE resoluti
1f340 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b 69  on algorithm ski
1f350 70 73 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74  ps the one row t
1f360 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65  hat contains.the
1f370 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1f380 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69 6e  ation and contin
1f390 75 65 73 20 70 72 6f 63 65 73 73 69 6e 67 20 73  ues processing s
1f3a0 75 62 73 65 71 75 65 6e 74 20 72 6f 77 73 0a 6f  ubsequent rows.o
1f3b0 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  f the SQL statem
1f3c0 65 6e 74 20 61 73 20 69 66 20 6e 6f 74 68 69 6e  ent as if nothin
1f3d0 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74  g went wrong..Ot
1f3e0 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20  her rows before 
1f3f0 61 6e 64 20 61 66 74 65 72 20 74 68 65 20 72 6f  and after the ro
1f400 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64  w that.contained
1f410 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1f420 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69 6e  violation are in
1f430 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
1f440 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20  d.normally. ^No 
1f450 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
1f460 64 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f 52  d when the IGNOR
1f470 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  E conflict resol
1f480 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20  ution.algorithm 
1f490 69 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64  is used.</p></dd
1f4a0 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43  >..<dt><b>REPLAC
1f4b0 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  E</b></dt>.<dd><
1f4c0 70 3e 20 5e 57 68 65 6e 20 61 20 55 4e 49 51 55  p> ^When a UNIQU
1f4d0 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
1f4e0 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
1f4f0 68 65 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72  he REPLACE algor
1f500 69 74 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65  ithm.deletes pre
1f510 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74  -existing rows t
1f520 68 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20  hat are causing 
1f530 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
1f540 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74  iolation.prior t
1f550 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75  o inserting or u
1f560 70 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72  pdating the curr
1f570 65 6e 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20  ent row and the 
1f580 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65  command continue
1f590 73 20 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72  s .executing nor
1f5a0 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 4e 4f 54  mally..^If a NOT
1f5b0 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
1f5c0 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
1f5d0 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 63  s, the REPLACE c
1f5e0 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69  onflict.resoluti
1f5f0 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65 20  on replaces the 
1f600 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74 68 0a  NULL value with.
1f610 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
1f620 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  e for that colum
1f630 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63 6f 6c  n, or if the col
1f640 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61 75  umn has no defau
1f650 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  lt.value, then t
1f660 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74  he ABORT algorit
1f670 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49 66 20  hm is used..^If 
1f680 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
1f690 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1f6a0 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45  urs, the REPLACE
1f6b0 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
1f6c0 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 61  tion.algorithm a
1f6d0 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c 69 6b 65  lways works like
1f6e0 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e   ABORT.</p>..<p>
1f6f0 5e 57 68 65 6e 20 74 68 65 20 52 45 50 4c 41 43  ^When the REPLAC
1f700 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  E conflict resol
1f710 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64  ution strategy d
1f720 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f  eletes rows in o
1f730 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20  rder to.satisfy 
1f740 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43  a constraint, [C
1f750 52 45 41 54 45 20 54 52 49 47 47 45 52 20 7c 20  REATE TRIGGER | 
1f760 64 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d  delete triggers]
1f770 20 66 69 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c   fire if and onl
1f780 79 20 69 66 0a 5b 72 65 63 75 72 73 69 76 65 5f  y if.[recursive_
1f790 74 72 69 67 67 65 72 73 20 70 72 61 67 6d 61 20  triggers pragma 
1f7a0 7c 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  | recursive trig
1f7b0 67 65 72 73 5d 20 61 72 65 20 65 6e 61 62 6c 65  gers] are enable
1f7c0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
1f7d0 5b 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f  [sqlite3_update_
1f7e0 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20 68 6f  hook | update ho
1f7f0 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b  ok] is not invok
1f800 65 64 20 66 6f 72 20 72 6f 77 73 20 74 68 61 74  ed for rows that
1f810 0a 61 72 65 20 64 65 6c 65 74 65 64 20 62 79 20  .are deleted by 
1f820 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66  the REPLACE conf
1f830 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
1f840 73 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f 72 20  strategy.  ^Nor 
1f850 64 6f 65 73 0a 52 45 50 4c 41 43 45 20 69 6e 63  does.REPLACE inc
1f860 72 65 6d 65 6e 74 20 74 68 65 20 5b 73 71 6c 69  rement the [sqli
1f870 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68  te3_changes | ch
1f880 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54  ange counter]..T
1f890 68 65 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 62  he exceptional b
1f8a0 65 68 61 76 69 6f 72 73 20 64 65 66 69 6e 65 64  ehaviors defined
1f8b0 20 69 6e 20 74 68 69 73 20 70 61 72 61 67 72 61   in this paragra
1f8c0 70 68 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ph might change 
1f8d0 0a 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c  .in a future rel
1f8e0 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a  ease.</p>.</dl>.
1f8f0 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74  .<p>^The algorit
1f900 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  hm specified in 
1f910 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f 66  the OR clause of
1f920 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50   an INSERT or UP
1f930 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61  DATE.overrides a
1f940 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  ny algorithm spe
1f950 63 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41  cified in a CREA
1f960 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f  TE TABLE..^If no
1f970 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70   algorithm is sp
1f980 65 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65  ecified anywhere
1f990 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f  , the ABORT algo
1f9a0 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f  rithm is used.</
1f9b0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
1f9c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fa00 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1fa10 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78   REINDEX reindex
1fa20 20 52 45 49 4e 44 45 58 0a 0a 52 65 63 75 72 73   REINDEX..Recurs
1fa30 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
1fa40 20 72 65 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f   reindex-stmt.</
1fa50 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45  tcl>..<p>^The RE
1fa60 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73  INDEX command is
1fa70 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20   used to delete 
1fa80 61 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64  and recreate ind
1fa90 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63  ices from scratc
1faa0 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75  h..This is usefu
1fab0 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e  l when the defin
1fac0 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61  ition of a colla
1fad0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61  tion sequence ha
1fae0 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a  s changed..</p>.
1faf0 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e  .<p>^If the REIN
1fb00 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 6e  DEX keyword is n
1fb10 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ot followed by a
1fb20 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65   collation-seque
1fb30 6e 63 65 20 6f 72 20 64 61 74 61 62 61 73 65 20  nce or database 
1fb40 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 66 69  .object identifi
1fb50 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  er, then all ind
1fb60 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61  ices in all atta
1fb70 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
1fb80 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e  re rebuilt...<p>
1fb90 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20  ^If the REINDEX 
1fba0 6b 65 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c 6f  keyword is follo
1fbb0 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69  wed by a collati
1fbc0 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on-sequence name
1fbd0 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69 63  , then.all indic
1fbe0 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68  es in all attach
1fbf0 65 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61  ed databases tha
1fc00 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20  t use the named 
1fc10 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1fc20 63 65 73 0a 61 72 65 20 72 65 63 72 65 61 74 65  ces.are recreate
1fc30 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20  d. ..<p>^Or, if 
1fc40 74 68 65 20 61 72 67 75 6d 65 6e 74 20 61 74 74  the argument att
1fc50 61 63 68 65 64 20 74 6f 20 74 68 65 20 52 45 49  ached to the REI
1fc60 4e 44 45 58 20 69 64 65 6e 74 69 66 69 65 73 20  NDEX identifies 
1fc70 61 20 73 70 65 63 69 66 69 63 20 0a 64 61 74 61  a specific .data
1fc80 62 61 73 65 20 74 61 62 6c 65 2c 20 74 68 65 6e  base table, then
1fc90 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 61 74 74   all indices att
1fca0 61 63 68 65 64 20 74 6f 20 74 68 65 20 64 61 74  ached to the dat
1fcb0 61 62 61 73 65 20 74 61 62 6c 65 20 61 72 65 20  abase table are 
1fcc0 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69 74  rebuilt. .^If it
1fcd0 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70   identifies a sp
1fce0 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20  ecific database 
1fcf0 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75 73 74  index, then just
1fd00 20 74 68 61 74 20 69 6e 64 65 78 20 69 73 20 72   that index is r
1fd10 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e 49  ecreated...<p>^I
1fd20 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73 65  f no <i>database
1fd30 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70 65  -name</i> is spe
1fd40 63 69 66 69 65 64 20 61 6e 64 20 74 68 65 72 65  cified and there
1fd50 20 65 78 69 73 74 73 20 62 6f 74 68 20 61 20 74   exists both a t
1fd60 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61 6e  able or.index an
1fd70 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  d a collation se
1fd80 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 73 70  quence of the sp
1fd90 65 63 69 66 69 65 64 20 6e 61 6d 65 2c 20 53 51  ecified name, SQ
1fda0 4c 69 74 65 20 69 6e 74 65 72 70 72 65 74 73 0a  Lite interprets.
1fdb0 74 68 69 73 20 61 73 20 61 20 72 65 71 75 65 73  this as a reques
1fdc0 74 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65  t to rebuild the
1fdd0 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 75 73   indices that us
1fde0 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c  e the named coll
1fdf0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e 0a  ation sequence..
1fe00 54 68 69 73 20 61 6d 62 69 67 75 69 74 79 20 69  This ambiguity i
1fe10 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6d 61 79  n the syntax may
1fe20 20 62 65 20 61 76 6f 69 64 65 64 20 62 79 20 61   be avoided by a
1fe30 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e 67  lways specifying
1fe40 20 61 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e   a.<i>database-n
1fe50 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65 69  ame</i> when rei
1fe60 6e 64 65 78 69 6e 67 20 61 20 73 70 65 63 69 66  ndexing a specif
1fe70 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ic table or inde
1fe80 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  x...<tcl>.######
1fe90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1feb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fed0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1fee0 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63  n REPLACE replac
1fef0 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c  e REPLACE..</tcl
1ff00 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41  >..<p>^The REPLA
1ff10 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e  CE command is an
1ff20 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 22   alias for the "
1ff30 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49  [ON CONFLICT | I
1ff40 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45  NSERT OR REPLACE
1ff50 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74 68  ]".variant of th
1ff60 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61  e [INSERT] comma
1ff70 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61 73  nd.  .This alias
1ff80 20 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72   is provided for
1ff90 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 6f   compatibility o
1ffa0 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
1ffb0 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65 20  e engines.  See 
1ffc0 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f  the .[INSERT] co
1ffd0 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74  mmand documentat
1ffe0 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ion for addition
1fff0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  al information.<
20000 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23  /p>  ..<tcl>.###
20010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20050 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
20060 74 69 6f 6e 20 7b 57 49 54 48 20 63 6c 61 75 73  tion {WITH claus
20070 65 7d 20 77 69 74 68 20 7b 7b 63 6f 6d 6d 6f 6e  e} with {{common
20080 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
20090 6e 73 7d 20 57 49 54 48 7d 0a 0a 52 65 63 75 72  ns} WITH}..Recur
200a0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
200b0 6d 20 77 69 74 68 2d 63 6c 61 75 73 65 0a 3c 2f  m with-clause.</
200c0 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f 6e 20  tcl>..<p>Common 
200d0 54 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e  Table Expression
200e0 73 20 6f 72 20 43 54 45 73 20 61 63 74 20 6c 69  s or CTEs act li
200f0 6b 65 20 74 65 6d 70 6f 72 61 72 79 20 5b 76 69  ke temporary [vi
20100 65 77 73 5d 20 74 68 61 74 20 65 78 69 73 74 0a  ews] that exist.
20110 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20 64 75 72  only for the dur
20120 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c  ation of a singl
20130 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  e SQL statement.
20140 20 20 54 68 65 72 65 20 61 72 65 20 74 77 6f 20    There are two 
20150 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d 6d 6f 6e 20  kinds of.common 
20160 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
20170 73 3a 20 22 6f 72 64 69 6e 61 72 79 22 20 61 6e  s: "ordinary" an
20180 64 20 22 72 65 63 75 72 73 69 76 65 22 2e 20 4f  d "recursive". O
20190 72 64 69 6e 61 72 79 20 0a 63 6f 6d 6d 6f 6e 20  rdinary .common 
201a0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
201b0 73 20 61 72 65 20 68 65 6c 70 66 75 6c 20 66 6f  s are helpful fo
201c0 72 20 6d 61 6b 69 6e 67 0a 71 75 65 72 69 65 73  r making.queries
201d0 20 65 61 73 69 65 72 20 74 6f 20 75 6e 64 65 72   easier to under
201e0 73 74 61 6e 64 20 62 79 20 66 61 63 74 6f 72 69  stand by factori
201f0 6e 67 0a 73 75 62 71 75 65 72 69 65 73 20 6f 75  ng.subqueries ou
20200 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 53 51  t of the main SQ
20210 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 52 65 63  L statement..Rec
20220 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61  ursive common ta
20230 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 0a  ble expressions.
20240 70 72 6f 76 69 64 65 20 74 68 65 20 61 62 69 6c  provide the abil
20250 69 74 79 20 74 6f 20 64 6f 20 68 69 65 72 61 72  ity to do hierar
20260 63 68 69 63 61 6c 20 6f 72 0a 72 65 63 75 72 73  chical or.recurs
20270 69 76 65 20 71 75 65 72 69 65 73 20 6f 66 20 74  ive queries of t
20280 72 65 65 73 20 61 6e 64 20 67 72 61 70 68 73 2c  rees and graphs,
20290 20 61 20 63 61 70 61 62 69 6c 69 74 79 0a 74 68   a capability.th
202a0 61 74 20 69 73 20 6e 6f 74 20 6f 74 68 65 72 77  at is not otherw
202b0 69 73 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e  ise available in
202c0 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   the SQL languag
202d0 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63 6f 6d 6d 6f  e...<p>All commo
202e0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
202f0 6f 6e 73 20 28 6f 72 64 69 6e 61 72 79 20 61 6e  ons (ordinary an
20300 64 20 72 65 63 75 72 73 69 76 65 29 20 61 72 65  d recursive) are
20310 20 0a 63 72 65 61 74 65 64 20 62 79 20 70 72 65   .created by pre
20320 70 65 6e 64 69 6e 67 20 61 20 57 49 54 48 20 63  pending a WITH c
20330 6c 61 75 73 65 20 69 6e 20 66 72 6f 6e 74 20 6f  lause in front o
20340 66 20 61 20 5b 53 45 4c 45 43 54 5d 2c 20 5b 49  f a [SELECT], [I
20350 4e 53 45 52 54 5d 2c 20 5b 44 45 4c 45 54 45 5d  NSERT], [DELETE]
20360 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74  ,.or [UPDATE] st
20370 61 74 65 6d 65 6e 74 2e 20 20 41 20 73 69 6e 67  atement.  A sing
20380 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 63  le WITH clause c
20390 61 6e 20 73 70 65 63 69 66 79 20 6f 6e 65 20 6f  an specify one o
203a0 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e 20 74 61  r more.common ta
203b0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  ble expressions,
203c0 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 20 61   some of which a
203d0 72 65 20 6f 72 64 69 6e 61 72 79 20 61 6e 64 20  re ordinary and 
203e0 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 0a 61 72  some of which.ar
203f0 65 20 72 65 63 75 72 73 69 76 65 2e 0a 0a 3c 74  e recursive...<t
20400 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f  cl>hd_fragment o
20410 72 64 69 6e 61 72 79 63 74 65 20 7b 6f 72 64 69  rdinarycte {ordi
20420 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  nary common tabl
20430 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 3c 2f  e expressions}</
20440 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64 69 6e 61 72  tcl>.<h3>Ordinar
20450 79 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45  y Common Table E
20460 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a  xpressions</h3>.
20470 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e 61 72 79 20  .<p>An ordinary 
20480 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
20490 72 65 73 73 69 6f 6e 20 77 6f 72 6b 73 20 61 73  ression works as
204a0 20 69 66 20 69 74 20 77 65 72 65 20 61 20 5b 76   if it were a [v
204b0 69 65 77 5d 20 74 68 61 74 0a 65 78 69 73 74 73  iew] that.exists
204c0 20 66 6f 72 20 74 68 65 20 64 75 72 61 74 69 6f   for the duratio
204d0 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 73 74  n of a single st
204e0 61 74 65 6d 65 6e 74 2e 20 20 4f 72 64 69 6e 61  atement.  Ordina
204f0 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 0a  ry common table.
20500 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
20510 75 73 65 66 75 6c 20 66 6f 72 20 66 61 63 74 6f  useful for facto
20520 72 69 6e 67 20 6f 75 74 20 73 75 62 71 75 65 72  ring out subquer
20530 69 65 73 20 61 6e 64 20 6d 61 6b 69 6e 67 20 74  ies and making t
20540 68 65 20 6f 76 65 72 61 6c 6c 0a 53 51 4c 20 73  he overall.SQL s
20550 74 61 74 65 6d 65 6e 74 20 65 61 73 69 65 72 20  tatement easier 
20560 74 6f 20 72 65 61 64 20 61 6e 64 20 75 6e 64 65  to read and unde
20570 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e 41 20 57 49  rstand...<p>A WI
20580 54 48 20 63 6c 61 75 73 65 20 63 61 6e 20 63 6f  TH clause can co
20590 6e 74 61 69 6e 20 6f 72 64 69 6e 61 72 79 20 63  ntain ordinary c
205a0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
205b0 65 73 73 69 6f 6e 73 20 65 76 65 6e 20 69 66 0a  essions even if.
205c0 69 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20  it includes the 
205d0 52 45 43 55 52 53 49 56 45 20 6b 65 79 77 6f 72  RECURSIVE keywor
205e0 64 2e 20 20 54 68 65 20 75 73 65 20 6f 66 20 52  d.  The use of R
205f0 45 43 55 52 53 49 56 45 20 64 6f 65 73 20 6e 6f  ECURSIVE does no
20600 74 20 66 6f 72 63 65 0a 63 6f 6d 6d 6f 6e 20 74  t force.common t
20610 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
20620 20 74 6f 20 62 65 20 72 65 63 75 72 73 69 76 65   to be recursive
20630 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67  ...<tcl>.hd_frag
20640 6d 65 6e 74 20 72 65 63 75 72 73 69 76 65 63 74  ment recursivect
20650 65 20 7b 72 65 63 75 72 73 69 76 65 20 63 6f 6d  e {recursive com
20660 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
20670 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65 63 75 72 73  sions} \.{recurs
20680 69 76 65 20 71 75 65 72 79 7d 0a 3c 2f 74 63 6c  ive query}.</tcl
20690 3e 0a 3c 68 33 3e 52 65 63 75 72 73 69 76 65 20  >.<h3>Recursive 
206a0 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70  Common Table Exp
206b0 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c  ressions</h3>..<
206c0 70 3e 41 20 72 65 63 75 72 73 69 76 65 20 63 6f  p>A recursive co
206d0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
206e0 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ssion can be use
206f0 64 20 74 6f 20 77 72 69 74 65 20 61 20 71 75 65  d to write a que
20700 72 79 20 74 68 61 74 0a 77 61 6c 6b 73 20 61 20  ry that.walks a 
20710 74 72 65 65 20 6f 72 20 67 72 61 70 68 2e 20 20  tree or graph.  
20720 41 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d  A recursive comm
20730 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
20740 69 6f 6e 20 68 61 73 20 74 68 65 20 73 61 6d 65  ion has the same
20750 0a 62 61 73 69 63 20 73 79 6e 74 61 78 20 61 73  .basic syntax as
20760 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d   an ordinary com
20770 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
20780 73 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20 74  sion, but with t
20790 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 61 64 64  he following.add
207a0 69 74 69 6f 6e 61 6c 20 66 65 61 74 75 72 65 73  itional features
207b0 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54 68 65  :..<ol>.<li> The
207c0 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22   "[select-stmt]"
207d0 0a 20 20 20 20 20 6d 75 73 74 20 62 65 20 61 20  .     must be a 
207e0 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74  [compound select
207f0 5d 20 77 68 65 72 65 20 74 68 65 20 72 69 67 68  ] where the righ
20800 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70 6f 75 6e 64  t-most [compound
20810 2d 6f 70 65 72 61 74 6f 72 5d 20 69 73 0a 20 20  -operator] is.  
20820 20 20 20 65 69 74 68 65 72 20 55 4e 49 4f 4e 20     either UNION 
20830 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c 6c  or UNION ALL..<l
20840 69 3e 20 54 68 65 20 74 61 62 6c 65 20 6e 61 6d  i> The table nam
20850 65 64 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68  ed on the left-h
20860 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65 20  and side of the 
20870 41 53 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20  AS keyword must 
20880 61 70 70 65 61 72 0a 20 20 20 20 20 65 78 61 63  appear.     exac
20890 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20  tly once in the 
208a0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 74  FROM clause of t
208b0 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 53 45  he right-most SE
208c0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 20  LECT statement. 
208d0 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f      of the compo
208e0 75 6e 64 20 73 65 6c 65 63 74 2c 20 61 6e 64 20  und select, and 
208f0 6e 6f 77 68 65 72 65 20 65 6c 73 65 2e 0a 3c 2f  nowhere else..</
20900 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70 75 74 20 69  ol>..<p>To put i
20910 74 20 61 6e 6f 74 68 65 72 20 77 61 79 2c 20 61  t another way, a
20920 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f   recursive commo
20930 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
20940 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b 20 6c 69 6b  on must.look lik
20950 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a  e the following:
20960 0a 0a 3c 74 63 6c 3e 52 65 63 75 72 73 69 76 65  ..<tcl>Recursive
20970 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65  BubbleDiagram re
20980 63 75 72 73 69 76 65 2d 63 74 65 3c 2f 74 63 6c  cursive-cte</tcl
20990 3e 0a 0a 3c 70 3e 57 65 20 72 65 66 65 72 20 74  >..<p>We refer t
209a0 6f 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  o the table name
209b0 64 20 62 79 20 74 68 65 20 63 74 65 2d 74 61 62  d by the cte-tab
209c0 6c 65 2d 6e 61 6d 65 20 69 6e 20 61 20 72 65 63  le-name in a rec
209d0 75 72 73 69 76 65 0a 63 6f 6d 6d 6f 6e 20 74 61  ursive.common ta
209e0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ble expression a
209f0 73 20 74 68 65 20 22 72 65 63 75 72 73 69 76 65  s the "recursive
20a00 20 74 61 62 6c 65 22 2e 0a 49 6e 20 74 68 65 20   table"..In the 
20a10 72 65 63 75 72 73 69 76 65 2d 63 74 65 20 62 75  recursive-cte bu
20a20 62 62 6c 65 20 64 69 61 67 72 61 6d 20 61 62 6f  bble diagram abo
20a30 76 65 2c 20 74 68 65 20 72 65 63 75 72 73 69 76  ve, the recursiv
20a40 65 0a 74 61 62 6c 65 20 6d 75 73 74 20 61 70 70  e.table must app
20a50 65 61 72 20 65 78 61 63 74 6c 79 20 6f 6e 63 65  ear exactly once
20a60 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
20a70 75 73 65 20 6f 66 20 74 68 65 20 72 65 63 75 72  use of the recur
20a80 73 69 76 65 2d 73 65 6c 65 63 74 0a 61 6e 64 20  sive-select.and 
20a90 6d 75 73 74 20 6e 6f 74 20 61 70 70 65 61 72 20  must not appear 
20aa0 61 6e 79 77 68 65 72 65 20 65 6c 73 65 20 69 6e  anywhere else in
20ab0 20 65 69 74 68 65 72 20 74 68 65 20 69 6e 69 74   either the init
20ac0 69 61 6c 2d 73 65 6c 65 63 74 20 6f 72 20 74 68  ial-select or th
20ad0 65 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e.recursive-sele
20ae0 63 74 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 75  ct, including su
20af0 62 71 75 65 72 69 65 73 2e 20 20 54 68 65 20 69  bqueries.  The i
20b00 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 6d 61  nitial-select ma
20b10 79 20 62 65 0a 61 20 5b 63 6f 6d 70 6f 75 6e 64  y be.a [compound
20b20 20 73 65 6c 65 63 74 5d 2c 20 62 75 74 20 69 74   select], but it
20b30 20 6d 61 79 20 6e 6f 74 20 69 6e 63 6c 75 64 65   may not include
20b40 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c 49   an ORDER BY, LI
20b50 4d 49 54 2c 20 6f 72 20 4f 46 46 53 45 54 2e 0a  MIT, or OFFSET..
20b60 54 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  The recursive-se
20b70 6c 65 63 74 20 6d 75 73 74 20 62 65 20 61 20 73  lect must be a s
20b80 69 6d 70 6c 65 20 73 65 6c 65 63 74 2c 20 6e 6f  imple select, no
20b90 74 20 61 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 54  t a compound.  T
20ba0 68 65 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he.recursive-sel
20bb0 65 63 74 20 69 73 20 61 6c 6c 6f 77 65 64 20 74  ect is allowed t
20bc0 6f 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44  o include an ORD
20bd0 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20 61 6e  ER BY, LIMIT, an
20be0 64 2f 6f 72 20 4f 46 46 53 45 54 2e 0a 0a 3c 70  d/or OFFSET...<p
20bf0 3e 54 68 65 20 62 61 73 69 63 20 61 6c 67 6f 72  >The basic algor
20c00 69 74 68 6d 20 66 6f 72 20 63 6f 6d 70 75 74 69  ithm for computi
20c10 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
20c20 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  f the recursive 
20c30 74 61 62 6c 65 0a 69 73 20 61 73 20 66 6f 6c 6c  table.is as foll
20c40 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  ows:..<ol>.<li> 
20c50 52 75 6e 20 74 68 65 20 69 6e 69 74 69 61 6c 2d  Run the initial-
20c60 73 65 6c 65 63 74 20 61 6e 64 20 61 64 64 20 74  select and add t
20c70 68 65 20 72 65 73 75 6c 74 73 20 74 6f 20 61 20  he results to a 
20c80 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 57 68 69 6c  queue..<li> Whil
20c90 65 20 74 68 65 20 71 75 65 75 65 20 69 73 20 6e  e the queue is n
20ca0 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f 6c 20 74 79  ot empty:.<ol ty
20cb0 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e 20 45 78 74  pe="a">.<li> Ext
20cc0 72 61 63 74 20 61 20 73 69 6e 67 6c 65 20 72 6f  ract a single ro
20cd0 77 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65  w from the queue
20ce0 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72 74 20 74 68  ..<li> Insert th
20cf0 61 74 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e  at single row in
20d00 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65  to the recursive
20d10 20 74 61 62 6c 65 0a 3c 6c 69 3e 20 50 72 65 74   table.<li> Pret
20d20 65 6e 64 20 74 68 61 74 20 74 68 65 20 73 69 6e  end that the sin
20d30 67 6c 65 20 72 6f 77 20 6a 75 73 74 20 65 78 74  gle row just ext
20d40 72 61 63 74 65 64 20 69 73 20 74 68 65 20 6f 6e  racted is the on
20d50 6c 79 0a 20 20 20 20 20 72 6f 77 20 69 6e 20 74  ly.     row in t
20d60 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
20d70 6c 65 20 61 6e 64 20 72 75 6e 20 74 68 65 20 72  le and run the r
20d80 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
20d90 0a 20 20 20 20 20 61 64 64 69 6e 67 20 61 6c 6c  .     adding all
20da0 20 72 65 73 75 6c 74 73 20 74 6f 20 74 68 65 20   results to the 
20db0 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 6f  queue..</ol>.</o
20dc0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63  l>..<p>The basic
20dd0 20 70 72 6f 63 65 64 75 72 65 20 61 62 6f 76 65   procedure above
20de0 20 6d 61 79 20 6d 6f 64 69 66 69 65 64 20 62 79   may modified by
20df0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
20e00 64 64 69 74 69 6f 6e 61 6c 20 72 75 6c 65 73 3a  dditional rules:
20e10 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20  ..<ul>.<li><p>. 
20e20 20 49 66 20 61 20 55 4e 49 4f 4e 20 6f 70 65 72   If a UNION oper
20e30 61 74 6f 72 20 63 6f 6e 6e 65 63 74 73 20 74 68  ator connects th
20e40 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  e initial-select
20e50 20 77 69 74 68 20 74 68 65 0a 20 20 72 65 63 75   with the.  recu
20e60 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 74 68  rsive-select, th
20e70 65 6e 20 6f 6e 6c 79 20 61 64 64 20 72 6f 77 73  en only add rows
20e80 20 74 6f 20 74 68 65 20 71 75 65 75 65 20 69 66   to the queue if
20e90 20 6e 6f 20 69 64 65 6e 74 69 63 61 6c 20 72 6f   no identical ro
20ea0 77 20 68 61 73 0a 20 20 62 65 65 6e 20 70 72 65  w has.  been pre
20eb0 76 69 6f 75 73 6c 79 20 61 64 64 65 64 20 74 6f  viously added to
20ec0 20 74 68 65 20 71 75 65 75 65 2e 20 20 52 65 70   the queue.  Rep
20ed0 65 61 74 65 64 20 72 6f 77 73 20 61 72 65 20 64  eated rows are d
20ee0 69 73 63 61 72 64 65 64 20 62 65 66 6f 72 65 20  iscarded before 
20ef0 62 65 69 6e 67 0a 20 20 61 64 64 65 64 20 74 6f  being.  added to
20f00 20 74 68 65 20 71 75 65 75 65 20 65 76 65 6e 20   the queue even 
20f10 69 66 20 74 68 65 20 72 65 70 65 61 74 65 64 20  if the repeated 
20f20 72 6f 77 73 20 68 61 76 65 20 61 6c 72 65 61 64  rows have alread
20f30 79 20 62 65 65 6e 20 65 78 74 72 61 63 74 65 64  y been extracted
20f40 0a 20 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75  .  from the queu
20f50 65 20 62 79 20 74 68 65 20 72 65 63 75 72 73 69  e by the recursi
20f60 6f 6e 20 73 74 65 70 2e 20 20 49 66 20 74 68 65  on step.  If the
20f70 20 6f 70 65 72 61 74 6f 72 20 69 73 20 55 4e 49   operator is UNI
20f80 4f 4e 20 41 4c 4c 2c 0a 20 20 74 68 65 6e 20 61  ON ALL,.  then a
20f90 6c 6c 20 72 6f 77 73 20 67 65 6e 65 72 61 74 65  ll rows generate
20fa0 64 20 62 79 20 62 6f 74 68 20 74 68 65 20 69 6e  d by both the in
20fb0 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 61 6e 64  itial-select and
20fc0 20 74 68 65 0a 20 20 72 65 63 75 72 73 69 76 65   the.  recursive
20fd0 2d 73 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61  -select are alwa
20fe0 79 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  ys added to the 
20ff0 71 75 65 75 65 20 65 76 65 6e 20 69 66 20 74 68  queue even if th
21000 65 79 20 61 72 65 20 72 65 70 65 61 74 73 2e 0a  ey are repeats..
21010 20 20 57 68 65 6e 20 64 65 74 65 72 6d 69 6e 69    When determini
21020 6e 67 20 69 66 20 61 20 72 6f 77 20 69 73 20 72  ng if a row is r
21030 65 70 65 61 74 65 64 2c 20 4e 55 4c 4c 20 76 61  epeated, NULL va
21040 6c 75 65 73 20 63 6f 6d 70 61 72 65 0a 20 20 65  lues compare.  e
21050 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74  qual to one anot
21060 68 65 72 20 61 6e 64 20 6e 6f 74 20 65 71 75 61  her and not equa
21070 6c 20 74 6f 20 61 6e 79 20 6f 74 68 65 72 20 76  l to any other v
21080 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  alue..<li><p>.  
21090 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  The LIMIT clause
210a0 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20 64 65  , if present, de
210b0 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6d 61 78  termines the max
210c0 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72  imum number of r
210d0 6f 77 73 20 74 68 61 74 0a 20 20 77 69 6c 6c 20  ows that.  will 
210e0 65 76 65 72 20 62 65 20 61 64 64 65 64 20 74 6f  ever be added to
210f0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
21100 61 62 6c 65 20 69 6e 20 73 74 65 70 20 32 62 2e  able in step 2b.
21110 0a 20 20 4f 6e 63 65 20 74 68 65 20 6c 69 6d 69  .  Once the limi
21120 74 20 69 73 20 72 65 61 63 68 65 64 2c 20 74 68  t is reached, th
21130 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70  e recursion stop
21140 73 2e 0a 20 20 41 20 6c 69 6d 69 74 20 6f 66 20  s..  A limit of 
21150 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 61 74 20  zero means that 
21160 6e 6f 20 72 6f 77 73 20 61 72 65 20 65 76 65 72  no rows are ever
21170 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a 20 20   added to the.  
21180 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2c  recursive table,
21190 20 61 6e 64 20 61 20 6e 65 67 61 74 69 76 65 20   and a negative 
211a0 6c 69 6d 69 74 20 6d 65 61 6e 73 20 61 6e 20 75  limit means an u
211b0 6e 6c 69 6d 69 74 65 64 20 6e 75 6d 62 65 72 20  nlimited number 
211c0 6f 66 20 72 6f 77 73 0a 20 20 6d 61 79 20 62 65  of rows.  may be
211d0 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
211e0 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 3c  cursive table..<
211f0 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4f 46 46  li><p>.  The OFF
21200 53 45 54 20 63 6c 61 75 73 65 2c 20 69 66 20 69  SET clause, if i
21210 74 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64  t is present and
21220 20 68 61 73 20 61 20 70 6f 73 69 74 69 76 65 20   has a positive 
21230 76 61 6c 75 65 20 4e 2c 20 70 72 65 76 65 6e 74  value N, prevent
21240 73 20 74 68 65 0a 20 20 66 69 72 73 74 20 4e 20  s the.  first N 
21250 72 6f 77 73 20 66 72 6f 6d 20 62 65 69 6e 67 20  rows from being 
21260 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65 63  added to the rec
21270 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 20 20  ursive table..  
21280 54 68 65 20 66 69 72 73 74 20 4e 20 72 6f 77 73  The first N rows
21290 20 61 72 65 20 73 74 69 6c 6c 20 70 72 6f 63 65   are still proce
212a0 73 73 65 64 20 62 79 20 74 68 65 20 72 65 63 75  ssed by the recu
212b0 72 73 69 76 65 2d 73 65 6c 65 63 74 3b 20 74 68  rsive-select; th
212c0 65 79 0a 20 20 6a 75 73 74 20 61 72 65 20 6e 6f  ey.  just are no
212d0 74 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72  t added to the r
212e0 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 20  ecursive table. 
212f0 20 52 6f 77 73 20 61 72 65 20 6e 6f 74 20 63 6f   Rows are not co
21300 75 6e 74 65 64 20 74 6f 77 61 72 64 0a 20 20 66  unted toward.  f
21310 75 6c 66 69 6c 6c 69 6e 67 20 74 68 65 20 4c 49  ulfilling the LI
21320 4d 49 54 20 75 6e 74 69 6c 20 61 6c 6c 20 4f 46  MIT until all OF
21330 46 53 45 54 20 72 6f 77 73 20 68 61 76 65 20 62  FSET rows have b
21340 65 65 6e 20 73 6b 69 70 70 65 64 2e 0a 3c 6c 69  een skipped..<li
21350 3e 3c 70 3e 0a 20 20 49 66 20 61 6e 20 4f 52 44  ><p>.  If an ORD
21360 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
21370 70 72 65 73 65 6e 74 2c 20 69 74 20 64 65 74 65  present, it dete
21380 72 6d 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  rmines the order
21390 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 20   in which rows. 
213a0 20 61 72 65 20 65 78 74 72 61 63 74 65 64 20 66   are extracted f
213b0 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 69 6e  rom the queue in
213c0 20 73 74 65 70 20 32 61 2e 20 20 49 66 20 74 68   step 2a.  If th
213d0 65 72 65 20 69 73 20 6e 6f 20 4f 52 44 45 52 20  ere is no ORDER 
213e0 42 59 20 63 6c 61 75 73 65 2c 0a 20 20 74 68 65  BY clause,.  the
213f0 6e 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77  n the order in w
21400 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 65 78  hich rows are ex
21410 74 72 61 63 74 65 64 20 69 73 20 75 6e 64 65 66  tracted is undef
21420 69 6e 65 64 2e 20 20 28 49 6e 20 74 68 65 20 63  ined.  (In the c
21430 75 72 72 65 6e 74 0a 20 20 69 6d 70 6c 65 6d 65  urrent.  impleme
21440 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 71 75 65  ntation, the que
21450 75 65 20 62 65 63 6f 6d 65 73 20 61 20 46 49 46  ue becomes a FIF
21460 4f 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  O if the ORDER B
21470 59 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74  Y clause is omit
21480 74 65 64 2c 0a 20 20 62 75 74 20 61 70 70 6c 69  ted,.  but appli
21490 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e  cations should n
214a0 6f 74 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 61  ot depend on tha
214b0 74 20 66 61 63 74 20 73 69 6e 63 65 20 69 74 20  t fact since it 
214c0 6d 69 67 68 74 20 63 68 61 6e 67 65 2e 29 0a 3c  might change.).<
214d0 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /ul>..<tcl>hd_fr
214e0 61 67 6d 65 6e 74 20 72 63 65 78 31 3c 2f 74 63  agment rcex1</tc
214f0 6c 3e 0a 3c 68 34 3e 52 65 63 75 72 73 69 76 65  l>.<h4>Recursive
21500 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c   Query Examples<
21510 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h4>..<p>The fol
21520 6c 6f 77 69 6e 67 20 71 75 65 72 79 20 72 65 74  lowing query ret
21530 75 72 6e 73 20 61 6c 6c 20 69 6e 74 65 67 65 72  urns all integer
21540 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  s between 1 and 
21550 31 30 30 30 30 30 30 3a 0a 0a 3c 62 6c 6f 63 6b  1000000:..<block
21560 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
21570 20 52 45 43 55 52 53 49 56 45 0a 20 20 63 6e 74   RECURSIVE.  cnt
21580 28 78 29 20 41 53 20 28 56 41 4c 55 45 53 28 31  (x) AS (VALUES(1
21590 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45  ) UNION ALL SELE
215a0 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74 20  CT x+1 FROM cnt 
215b0 57 48 45 52 45 20 78 3c 31 30 30 30 30 30 30 29  WHERE x<1000000)
215c0 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63  .SELECT x FROM c
215d0 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  nt;.</pre></bloc
215e0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6e 73  kquote>..<p>Cons
215f0 69 64 65 72 20 68 6f 77 20 74 68 69 73 20 71 75  ider how this qu
21600 65 72 79 20 77 6f 72 6b 73 2e 20 20 54 68 65 20  ery works.  The 
21610 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 0a 72  initial-select.r
21620 75 6e 73 20 66 69 72 73 74 20 61 6e 64 20 72 65  uns first and re
21630 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65 20 72  turns a single r
21640 6f 77 0a 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ow.with a single
21650 20 63 6f 6c 75 6d 6e 20 22 31 22 2e 20 20 54 68   column "1".  Th
21660 69 73 20 6f 6e 65 20 72 6f 77 20 69 73 20 61 64  is one row is ad
21670 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65  ded to the queue
21680 2e 20 20 49 6e 0a 73 74 65 70 20 32 61 2c 20 74  .  In.step 2a, t
21690 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 65  hat one row is e
216a0 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68  xtracted from th
216b0 65 20 71 75 65 75 65 20 61 6e 64 20 61 64 64 65  e queue and adde
216c0 64 20 74 6f 20 22 63 6e 74 22 2e 0a 54 68 65 6e  d to "cnt"..Then
216d0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
216e0 65 6c 65 63 74 20 69 73 20 72 75 6e 20 69 6e 20  elect is run in 
216f0 61 63 63 6f 72 64 61 6e 63 65 20 77 69 74 68 20  accordance with 
21700 73 74 65 70 20 32 63 20 67 65 6e 65 72 61 74 69  step 2c generati
21710 6e 67 0a 61 20 73 69 6e 67 6c 65 20 6e 65 77 20  ng.a single new 
21720 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20 22  row with value "
21730 32 22 20 74 6f 20 61 64 64 20 74 6f 20 74 68 65  2" to add to the
21740 20 71 75 65 75 65 2e 20 20 54 68 65 20 71 75 65   queue.  The que
21750 75 65 20 73 74 69 6c 6c 0a 68 61 73 20 6f 6e 65  ue still.has one
21760 20 72 6f 77 2c 20 73 6f 20 73 74 65 70 20 32 20   row, so step 2 
21770 72 65 70 65 61 74 73 2e 20 20 54 68 65 20 22 32  repeats.  The "2
21780 22 20 72 6f 77 20 69 73 20 65 78 74 72 61 63 74  " row is extract
21790 65 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20  ed and added to 
217a0 74 68 65 0a 72 65 63 75 72 73 69 76 65 20 74 61  the.recursive ta
217b0 62 6c 65 20 62 79 20 73 74 65 70 73 20 32 61 20  ble by steps 2a 
217c0 61 6e 64 20 32 62 2e 20 20 54 68 65 6e 20 74 68  and 2b.  Then th
217d0 65 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67  e row containing
217e0 20 32 20 69 73 20 75 73 65 64 20 0a 61 73 20 69   2 is used .as i
217f0 66 20 69 74 20 77 65 72 65 20 74 68 65 20 63 6f  f it were the co
21800 6d 70 6c 65 74 65 20 63 6f 6e 74 65 6e 74 20 6f  mplete content o
21810 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  f the recursive 
21820 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 0a 72  table and the .r
21830 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
21840 69 73 20 72 75 6e 20 61 67 61 69 6e 2c 20 72 65  is run again, re
21850 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 72 6f 77  sulting in a row
21860 20 77 69 74 68 20 76 61 6c 75 65 20 22 33 22 20   with value "3" 
21870 62 65 69 6e 67 20 61 64 64 65 64 0a 74 6f 20 74  being added.to t
21880 68 65 20 71 75 65 75 65 2e 20 20 54 68 69 73 20  he queue.  This 
21890 72 65 70 65 61 74 73 20 39 39 39 39 39 39 20 74  repeats 999999 t
218a0 69 6d 65 73 20 75 6e 74 69 6c 20 66 69 6e 61 6c  imes until final
218b0 6c 79 20 61 74 20 73 74 65 70 20 32 61 20 74 68  ly at step 2a th
218c0 65 0a 6f 6e 6c 79 20 76 61 6c 75 65 20 6f 6e 20  e.only value on 
218d0 74 68 65 20 71 75 65 75 65 20 69 73 20 61 20 72  the queue is a r
218e0 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 31 30  ow containing 10
218f0 30 30 30 30 30 2e 20 20 54 68 61 74 20 72 6f 77  00000.  That row
21900 20 69 73 0a 65 78 74 72 61 63 74 65 64 20 61 6e   is.extracted an
21910 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72  d added to the r
21920 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 20  ecursive table. 
21930 20 42 75 74 20 74 68 69 73 20 74 69 6d 65 2c 20   But this time, 
21940 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65  the.WHERE clause
21950 20 63 61 75 73 65 73 20 74 68 65 20 72 65 63 75   causes the recu
21960 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74 6f 20  rsive-select to 
21970 72 65 74 75 72 6e 20 6e 6f 20 72 6f 77 73 2c 20  return no rows, 
21980 73 6f 20 74 68 65 0a 71 75 65 75 65 20 72 65 6d  so the.queue rem
21990 61 69 6e 73 20 65 6d 70 74 79 20 61 6e 64 20 74  ains empty and t
219a0 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f  he recursion sto
219b0 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70 74 69 6d  ps...<p><b>Optim
219c0 69 7a 61 74 69 6f 6e 20 6e 6f 74 65 3a 3c 2f 62  ization note:</b
219d0 3e 0a 49 6e 20 74 68 65 20 64 69 73 63 75 73 73  >.In the discuss
219e0 69 6f 6e 20 61 62 6f 76 65 2c 20 73 74 61 74 65  ion above, state
219f0 6d 65 6e 74 73 20 6c 69 6b 65 20 22 69 6e 73 65  ments like "inse
21a00 72 74 20 74 68 65 20 72 6f 77 20 69 6e 74 6f 0a  rt the row into.
21a10 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61  the recursive ta
21a20 62 6c 65 22 20 73 68 6f 75 6c 64 20 62 65 20 75  ble" should be u
21a30 6e 64 65 72 73 74 6f 6f 64 20 63 6f 6e 63 65 70  nderstood concep
21a40 74 75 61 6c 6c 79 2c 20 6e 6f 74 20 6c 69 74 65  tually, not lite
21a50 72 61 6c 6c 79 2e 0a 49 74 20 73 6f 75 6e 64 73  rally..It sounds
21a60 20 61 73 20 69 66 20 53 51 4c 69 74 65 20 69 73   as if SQLite is
21a70 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 61 20   accumulating a 
21a80 68 75 67 65 20 74 61 62 6c 65 0a 63 6f 6e 74 61  huge table.conta
21a90 69 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c 6c 69 6f  ining one millio
21aa0 6e 20 72 6f 77 73 2c 20 74 68 65 6e 20 67 6f 69  n rows, then goi
21ab0 6e 67 20 62 61 63 6b 20 61 6e 64 20 73 63 61 6e  ng back and scan
21ac0 6e 69 6e 67 20 74 68 61 74 20 74 61 62 6c 65 0a  ning that table.
21ad0 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f 74 74  from top to bott
21ae0 6f 6d 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74  om to generate t
21af0 68 65 20 72 65 73 75 6c 74 2e 20 20 57 68 61 74  he result.  What
21b00 20 72 65 61 6c 6c 79 20 68 61 70 70 65 6e 73 0a   really happens.
21b10 69 73 20 74 68 61 74 20 74 68 65 20 71 75 65 72  is that the quer
21b20 79 20 6f 70 74 69 6d 69 7a 65 72 20 73 65 65 73  y optimizer sees
21b30 20 74 68 61 74 20 76 61 6c 75 65 73 20 69 6e 20   that values in 
21b40 74 68 65 0a 22 63 6e 74 22 20 72 65 63 75 72 73  the."cnt" recurs
21b50 69 76 65 20 74 61 62 6c 65 20 61 72 65 20 6f 6e  ive table are on
21b60 6c 79 20 75 73 65 64 20 6f 6e 63 65 2e 20 20 53  ly used once.  S
21b70 6f 20 61 73 20 65 61 63 68 20 72 6f 77 20 69 73  o as each row is
21b80 20 61 64 64 65 64 20 74 6f 0a 74 68 65 20 72 65   added to.the re
21b90 63 75 72 73 69 76 65 20 74 61 62 6c 65 2c 20 74  cursive table, t
21ba0 68 61 74 20 72 6f 77 20 69 73 20 69 6d 6d 65 64  hat row is immed
21bb0 69 61 74 65 6c 79 20 72 65 74 75 72 6e 65 64 20  iately returned 
21bc0 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 74  as a result of t
21bd0 68 65 20 6d 61 69 6e 0a 53 45 4c 45 43 54 20 73  he main.SELECT s
21be0 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65  tatement and the
21bf0 6e 20 64 69 73 63 61 72 64 65 64 2e 20 20 53 51  n discarded.  SQ
21c00 4c 69 74 65 20 64 6f 65 73 20 3c 65 6d 3e 6e 6f  Lite does <em>no
21c10 74 3c 2f 65 6d 3e 20 61 63 63 75 6d 75 6c 61 74  t</em> accumulat
21c20 65 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61  e.a temporary ta
21c30 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61  ble containing a
21c40 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2e 20 20   million rows.  
21c50 56 65 72 79 20 6c 69 74 74 6c 65 20 6d 65 6d 6f  Very little memo
21c60 72 79 20 69 73 0a 6e 65 65 64 65 64 20 74 6f 20  ry is.needed to 
21c70 72 75 6e 20 74 68 65 20 61 62 6f 76 65 20 65 78  run the above ex
21c80 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76 65 72 2c  ample.  However,
21c90 20 69 66 20 74 68 65 20 65 78 61 6d 70 6c 65 20   if the example 
21ca0 68 61 64 20 75 73 65 64 0a 55 4e 49 4f 4e 20 69  had used.UNION i
21cb0 6e 73 74 65 61 64 20 6f 66 20 55 4e 49 4f 4e 20  nstead of UNION 
21cc0 41 4c 4c 2c 20 74 68 65 6e 20 53 51 4c 69 74 65  ALL, then SQLite
21cd0 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 64 20   would have had 
21ce0 74 6f 20 6b 65 65 70 20 61 72 6f 75 6e 64 0a 61  to keep around.a
21cf0 6c 6c 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65  ll previously ge
21d00 6e 65 72 61 74 65 64 20 63 6f 6e 74 65 6e 74 20  nerated content 
21d10 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63  in order to chec
21d20 6b 20 66 6f 72 20 64 75 70 6c 69 63 61 74 65 73  k for duplicates
21d30 2e 0a 46 6f 72 20 74 68 69 73 20 72 65 61 73 6f  ..For this reaso
21d40 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 73  n, programmers s
21d50 68 6f 75 6c 64 20 73 74 72 69 76 65 20 74 6f 20  hould strive to 
21d60 75 73 65 20 55 4e 49 4f 4e 20 41 4c 4c 20 69 6e  use UNION ALL in
21d70 73 74 65 61 64 0a 6f 66 20 55 4e 49 4f 4e 20 77  stead.of UNION w
21d80 68 65 6e 20 66 65 61 73 69 62 6c 65 2e 0a 0a 3c  hen feasible...<
21d90 70 3e 48 65 72 65 20 69 73 20 61 20 76 61 72 69  p>Here is a vari
21da0 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 70 72 65  ation on the pre
21db0 76 69 6f 75 73 20 65 78 61 6d 70 6c 65 3a 0a 0a  vious example:..
21dc0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
21dd0 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
21de0 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28 0a 20  .  cnt(x) AS (. 
21df0 20 20 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20      SELECT 1.   
21e00 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20    UNION ALL.    
21e10 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d   SELECT x+1 FROM
21e20 20 63 6e 74 0a 20 20 20 20 20 20 4c 49 4d 49 54   cnt.      LIMIT
21e30 20 31 30 30 30 30 30 30 0a 20 20 29 0a 53 45 4c   1000000.  ).SEL
21e40 45 43 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a  ECT x FROM cnt;.
21e50 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
21e60 74 65 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  te>..<p>There ar
21e70 65 20 74 77 6f 20 64 69 66 66 65 72 65 6e 63 65  e two difference
21e80 73 20 69 6e 20 74 68 69 73 20 76 61 72 69 61 74  s in this variat
21e90 69 6f 6e 2e 20 20 54 68 65 20 69 6e 69 74 69 61  ion.  The initia
21ea0 6c 2d 73 65 6c 65 63 74 20 69 73 0a 22 53 45 4c  l-select is."SEL
21eb0 45 43 54 20 31 22 20 69 6e 73 74 65 61 64 20 6f  ECT 1" instead o
21ec0 66 20 22 56 41 4c 55 45 53 28 31 29 22 2e 20 20  f "VALUES(1)".  
21ed0 42 75 74 20 74 68 6f 73 65 20 61 72 65 20 6a 75  But those are ju
21ee0 73 74 20 64 69 66 66 65 72 65 6e 74 0a 73 79 6e  st different.syn
21ef0 74 61 78 65 73 20 66 6f 72 20 73 61 79 69 6e 67  taxes for saying
21f00 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
21f10 65 20 74 68 69 6e 67 2e 20 20 54 68 65 20 6f 74  e thing.  The ot
21f20 68 65 72 20 63 68 61 6e 67 65 20 69 73 20 74 68  her change is th
21f30 61 74 20 74 68 65 0a 72 65 63 75 72 73 69 6f 6e  at the.recursion
21f40 20 69 73 20 73 74 6f 70 70 65 64 20 62 79 20 61   is stopped by a
21f50 20 4c 49 4d 49 54 20 72 61 74 68 65 72 20 74 68   LIMIT rather th
21f60 61 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  an a WHERE claus
21f70 65 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 4c  e.  The use of.L
21f80 49 4d 49 54 20 6d 65 61 6e 73 20 74 68 61 74 20  IMIT means that 
21f90 77 68 65 6e 20 74 68 65 20 6f 6e 65 2d 6d 69 6c  when the one-mil
21fa0 6c 69 6f 6e 74 68 20 72 6f 77 20 69 73 20 61 64  lionth row is ad
21fb0 64 65 64 20 74 6f 20 74 68 65 20 22 63 6e 74 22  ded to the "cnt"
21fc0 20 74 61 62 6c 65 0a 28 61 6e 64 20 72 65 74 75   table.(and retu
21fd0 72 6e 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e  rned by the main
21fe0 20 53 45 4c 45 43 54 2c 20 74 68 61 6e 6b 73 20   SELECT, thanks 
21ff0 74 6f 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  to the query opt
22000 69 6d 69 7a 65 72 29 0a 74 68 65 6e 20 74 68 65  imizer).then the
22010 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 73   recursion stops
22020 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 67   immediately reg
22030 61 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d  ardless of how m
22040 61 6e 79 20 72 6f 77 73 20 6d 69 67 68 74 20 62  any rows might b
22050 65 0a 6c 65 66 74 20 69 6e 20 74 68 65 20 71 75  e.left in the qu
22060 65 75 65 2e 20 20 4f 6e 20 6d 6f 72 65 20 63 6f  eue.  On more co
22070 6d 70 6c 65 78 20 71 75 65 72 69 65 73 2c 20 69  mplex queries, i
22080 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20  t can sometimes 
22090 62 65 0a 64 69 66 66 69 63 75 6c 74 20 74 6f 20  be.difficult to 
220a0 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
220b0 57 48 45 52 45 20 63 6c 61 75 73 65 20 77 69 6c  WHERE clause wil
220c0 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20 63 61 75  l eventually cau
220d0 73 65 20 74 68 65 0a 71 75 65 75 65 20 74 6f 20  se the.queue to 
220e0 64 72 61 69 6e 20 61 6e 64 20 74 68 65 20 72 65  drain and the re
220f0 63 75 72 73 69 6f 6e 20 74 6f 20 74 65 72 6d 69  cursion to termi
22100 6e 61 74 65 2e 20 20 42 75 74 20 74 68 65 20 4c  nate.  But the L
22110 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69 6c 6c  IMIT clause will
22120 0a 61 6c 77 61 79 73 20 73 74 6f 70 20 74 68 65  .always stop the
22130 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 53 6f 20   recursion.  So 
22140 69 74 20 69 73 20 67 6f 6f 64 20 70 72 61 63 74  it is good pract
22150 69 63 65 20 74 6f 20 61 6c 77 61 79 73 20 69 6e  ice to always in
22160 63 6c 75 64 65 20 61 0a 4c 49 4d 49 54 20 63 6c  clude a.LIMIT cl
22170 61 75 73 65 20 61 73 20 61 20 73 61 66 65 74 79  ause as a safety
22180 20 69 66 20 61 6e 20 75 70 70 65 72 20 62 6f 75   if an upper bou
22190 6e 64 20 6f 6e 20 74 68 65 20 73 69 7a 65 20 6f  nd on the size o
221a0 66 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20  f the recursion 
221b0 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 3c 74 63 6c  .is known...<tcl
221c0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65  >hd_fragment rce
221d0 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 48 69 65  x2</tcl>.<h4>Hie
221e0 72 61 72 63 68 69 63 61 6c 20 51 75 65 72 79 20  rarchical Query 
221f0 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c  Examples</h4>..<
22200 70 3e 43 6f 6e 73 69 64 65 72 20 61 20 74 61 62  p>Consider a tab
22210 6c 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  le that describe
22220 73 20 74 68 65 20 6d 65 6d 62 65 72 73 20 6f 66  s the members of
22230 20 61 6e 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e   an organization
22240 20 61 73 0a 77 65 6c 6c 20 61 73 20 74 68 65 20   as.well as the 
22250 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d 6d 61 6e 64  chain-of-command
22260 20 77 69 74 68 69 6e 20 74 68 61 74 20 6f 72 67   within that org
22270 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a 3c 62 6c 6f  anization:..<blo
22280 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
22290 45 41 54 45 20 54 41 42 4c 45 20 6f 72 67 28 0a  EATE TABLE org(.
222a0 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d    name TEXT PRIM
222b0 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73 20  ARY KEY,.  boss 
222c0 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20  TEXT REFERENCES 
222d0 6f 72 67 2c 0a 20 20 68 65 69 67 68 74 20 49 4e  org,.  height IN
222e0 54 2c 0a 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f  T,.  -- other co
222f0 6e 74 65 6e 74 20 6f 6d 69 74 74 65 64 0a 29 3b  ntent omitted.);
22300 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
22310 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 6d  ote>..<p>Every m
22320 65 6d 62 65 72 20 69 6e 20 74 68 65 20 6f 72 67  ember in the org
22330 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20 61 20  anization has a 
22340 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f 73 74 20 6d  name, and most m
22350 65 6d 62 65 72 73 20 68 61 76 65 0a 61 20 73 69  embers have.a si
22360 6e 67 6c 65 20 62 6f 73 73 2e 20 20 28 54 68 65  ngle boss.  (The
22370 20 68 65 61 64 20 6f 66 20 74 68 65 20 77 68 6f   head of the who
22380 6c 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20  le organization 
22390 68 61 73 20 61 20 4e 55 4c 4c 0a 22 62 6f 73 73  has a NULL."boss
223a0 22 20 66 69 65 6c 64 2e 29 20 54 68 65 20 72 6f  " field.) The ro
223b0 77 73 20 6f 66 20 74 68 65 20 22 6f 72 67 22 20  ws of the "org" 
223c0 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 74 72 65  table form a tre
223d0 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61  e...<p>Here is a
223e0 20 71 75 65 72 79 20 74 68 61 74 20 63 6f 6d 70   query that comp
223f0 75 74 65 73 20 74 68 65 20 61 76 65 72 61 67 65  utes the average
22400 20 68 65 69 67 68 74 20 6f 76 65 72 20 65 76 65   height over eve
22410 72 79 6f 6e 65 0a 69 6e 20 41 6c 69 63 65 27 73  ryone.in Alice's
22420 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 2c 20 69   organization, i
22430 6e 63 6c 75 64 69 6e 67 20 41 6c 69 63 65 3a 0a  ncluding Alice:.
22440 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
22450 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56  e>.WITH RECURSIV
22460 45 0a 20 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c  E.  works_for_al
22470 69 63 65 28 6e 29 20 41 53 20 28 0a 20 20 20 20  ice(n) AS (.    
22480 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 29 0a  VALUES('Alice').
22490 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 53 45      UNION.    SE
224a0 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 6f  LECT name FROM o
224b0 72 67 2c 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c  rg, works_for_al
224c0 69 63 65 0a 20 20 20 20 20 57 48 45 52 45 20 6f  ice.     WHERE o
224d0 72 67 2e 62 6f 73 73 3d 77 6f 72 6b 73 5f 66 6f  rg.boss=works_fo
224e0 72 5f 61 6c 69 63 65 2e 6e 0a 20 20 29 0a 53 45  r_alice.n.  ).SE
224f0 4c 45 43 54 20 61 76 67 28 68 65 69 67 68 74 29  LECT avg(height)
22500 20 46 52 4f 4d 20 6f 72 67 0a 20 57 48 45 52 45   FROM org. WHERE
22510 20 6f 72 67 2e 6e 61 6d 65 20 49 4e 20 77 6f 72   org.name IN wor
22520 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 3b 0a 3c 2f  ks_for_alice;.</
22530 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
22540 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65 78 74 20 65  >..<p>The next e
22550 78 61 6d 70 6c 65 20 75 73 65 73 20 74 77 6f 20  xample uses two 
22560 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  .common table ex
22570 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 73  pressions in a s
22580 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
22590 65 2e 20 20 0a 54 68 65 20 66 6f 6c 6c 6f 77 69  e.  .The followi
225a0 6e 67 20 74 61 62 6c 65 20 72 65 63 6f 72 64 73  ng table records
225b0 20 61 20 66 61 6d 69 6c 79 20 74 72 65 65 3a 0a   a family tree:.
225c0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
225d0 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
225e0 66 61 6d 69 6c 79 28 0a 20 20 6e 61 6d 65 20 54  family(.  name T
225f0 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
22600 0a 20 20 6d 6f 6d 20 54 45 58 54 20 52 45 46 45  .  mom TEXT REFE
22610 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20  RENCES family,. 
22620 20 64 61 64 20 54 45 58 54 20 52 45 46 45 52 45   dad TEXT REFERE
22630 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20 62  NCES family,.  b
22640 6f 72 6e 20 44 41 54 45 54 49 4d 45 2c 0a 20 20  orn DATETIME,.  
22650 64 69 65 64 20 44 41 54 45 54 49 4d 45 2c 20 2d  died DATETIME, -
22660 2d 20 4e 55 4c 4c 20 69 66 20 73 74 69 6c 6c 20  - NULL if still 
22670 61 6c 69 76 65 0a 20 20 2d 2d 20 6f 74 68 65 72  alive.  -- other
22680 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a 3c 2f 70 72   content.);.</pr
22690 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
226a0 0a 3c 70 3e 54 68 65 20 22 66 61 6d 69 6c 79 22  .<p>The "family"
226b0 20 74 61 62 6c 65 20 69 73 20 73 69 6d 69 6c 61   table is simila
226c0 72 20 74 6f 20 74 68 65 20 65 61 72 6c 69 65 72  r to the earlier
226d0 20 22 6f 72 67 22 20 74 61 62 6c 65 20 65 78 63   "org" table exc
226e0 65 70 74 20 74 68 61 74 20 0a 6e 6f 77 20 74 68  ept that .now th
226f0 65 72 65 20 61 72 65 20 74 77 6f 20 70 61 72 65  ere are two pare
22700 6e 74 73 20 74 6f 20 65 61 63 68 20 6d 65 6d 62  nts to each memb
22710 65 72 2e 0a 57 65 20 77 61 6e 74 20 74 6f 20 6b  er..We want to k
22720 6e 6f 77 20 61 6c 6c 20 6c 69 76 69 6e 67 20 61  now all living a
22730 6e 63 65 73 74 6f 72 73 20 6f 66 20 41 6c 69 63  ncestors of Alic
22740 65 2c 20 66 72 6f 6d 20 6f 6c 64 65 73 74 20 74  e, from oldest t
22750 6f 20 79 6f 75 6e 67 65 73 74 2e 0a 41 6e 20 6f  o youngest..An o
22760 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74  rdinary common t
22770 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  able expression,
22780 20 22 70 61 72 65 6e 74 5f 6f 66 22 2c 20 69 73   "parent_of", is
22790 20 64 65 66 69 6e 65 64 20 66 69 72 73 74 2e 20   defined first. 
227a0 20 54 68 61 74 0a 6f 72 64 69 6e 61 72 79 20 43   That.ordinary C
227b0 54 45 20 69 73 20 61 20 76 69 65 77 20 74 68 61  TE is a view tha
227c0 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  t can be used to
227d0 20 66 69 6e 64 20 61 6c 6c 20 70 61 72 65 6e 74   find all parent
227e0 73 20 6f 66 20 61 6e 79 0a 69 6e 64 69 76 69 64  s of any.individ
227f0 75 61 6c 2e 20 20 54 68 61 74 20 6f 72 64 69 6e  ual.  That ordin
22800 61 72 79 20 43 54 45 20 69 73 20 74 68 65 6e 20  ary CTE is then 
22810 75 73 65 64 20 69 6e 20 74 68 65 20 22 61 6e 63  used in the "anc
22820 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 22 0a  estor_of_alice".
22830 72 65 63 75 72 73 69 76 65 20 43 54 45 2e 20 20  recursive CTE.  
22840 54 68 65 20 72 65 63 75 72 73 69 76 65 20 43 54  The recursive CT
22850 45 20 69 73 20 74 68 65 6e 20 75 73 65 64 20 69  E is then used i
22860 6e 20 74 68 65 20 66 69 6e 61 6c 20 71 75 65 72  n the final quer
22870 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  y:..<blockquote>
22880 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
22890 53 49 56 45 0a 20 20 70 61 72 65 6e 74 5f 6f 66  SIVE.  parent_of
228a0 28 6e 61 6d 65 2c 20 70 61 72 65 6e 74 29 20 41  (name, parent) A
228b0 53 0a 20 20 20 20 28 53 45 4c 45 43 54 20 6e 61  S.    (SELECT na
228c0 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20 66 61 6d  me, mom FROM fam
228d0 69 6c 79 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54  ily UNION SELECT
228e0 20 6e 61 6d 65 2c 20 64 61 64 20 46 52 4f 4d 20   name, dad FROM 
228f0 66 61 6d 69 6c 79 29 2c 0a 20 20 61 6e 63 65 73  family),.  ances
22900 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 28 6e 61 6d  tor_of_alice(nam
22910 65 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43  e) AS.    (SELEC
22920 54 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61  T parent FROM pa
22930 72 65 6e 74 5f 6f 66 20 57 48 45 52 45 20 6e 61  rent_of WHERE na
22940 6d 65 3d 27 41 6c 69 63 65 27 0a 20 20 20 20 20  me='Alice'.     
22950 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53  UNION ALL.     S
22960 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f  ELECT parent FRO
22970 4d 20 70 61 72 65 6e 74 5f 6f 66 20 4a 4f 49 4e  M parent_of JOIN
22980 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69   ancestor_of_ali
22990 63 65 20 55 53 49 4e 47 28 6e 61 6d 65 29 29 0a  ce USING(name)).
229a0 53 45 4c 45 43 54 20 66 61 6d 69 6c 79 2e 6e 61  SELECT family.na
229b0 6d 65 20 46 52 4f 4d 20 61 6e 63 65 73 74 6f 72  me FROM ancestor
229c0 5f 6f 66 5f 61 6c 69 63 65 2c 20 66 61 6d 69 6c  _of_alice, famil
229d0 79 0a 20 57 48 45 52 45 20 61 6e 63 65 73 74 6f  y. WHERE ancesto
229e0 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61 6d 65 3d  r_of_alice.name=
229f0 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20 20 20 41  family.name.   A
22a00 4e 44 20 64 69 65 64 20 49 53 20 4e 55 4c 4c 0a  ND died IS NULL.
22a10 20 4f 52 44 45 52 20 42 59 20 62 6f 72 6e 3b 0a   ORDER BY born;.
22a20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
22a30 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  te>..<tcl>hd_fra
22a40 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c  gment rcex2</tcl
22a50 3e 0a 3c 68 34 3e 51 75 65 72 69 65 73 20 41 67  >.<h4>Queries Ag
22a60 61 69 6e 73 74 20 41 20 47 72 61 70 68 3c 2f 68  ainst A Graph</h
22a70 34 3e 0a 0a 3c 70 3e 41 20 76 65 72 73 69 6f 6e  4>..<p>A version
22a80 20 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65 6d 20   control system 
22a90 28 56 43 53 29 20 77 69 6c 6c 20 74 79 70 69 63  (VCS) will typic
22aa0 61 6c 6c 79 20 73 74 6f 72 65 20 74 68 65 20 65  ally store the e
22ab0 76 6f 6c 76 69 6e 67 0a 76 65 72 73 69 6f 6e 73  volving.versions
22ac0 20 6f 66 20 61 20 70 72 6f 6a 65 63 74 20 61 73   of a project as
22ad0 20 61 20 64 69 72 65 63 74 65 64 20 61 63 79 63   a directed acyc
22ae0 6c 69 63 20 67 72 61 70 68 20 28 44 41 47 29 2e  lic graph (DAG).
22af0 20 20 43 61 6c 6c 20 65 61 63 68 0a 76 65 72 73    Call each.vers
22b00 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 6a 65  ion of the proje
22b10 63 74 20 61 20 22 63 68 65 63 6b 69 6e 22 2e 20  ct a "checkin". 
22b20 20 41 20 73 69 6e 67 6c 65 0a 63 68 65 63 6b 69   A single.checki
22b30 6e 20 63 61 6e 20 68 61 76 65 20 7a 65 72 6f 20  n can have zero 
22b40 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e 74 73 2e  or more parents.
22b50 20 20 4d 6f 73 74 20 63 68 65 63 6b 69 6e 73 20    Most checkins 
22b60 28 65 78 63 65 70 74 20 74 68 65 0a 66 69 72 73  (except the.firs
22b70 74 29 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65  t) have a single
22b80 20 70 61 72 65 6e 74 2c 20 62 75 74 20 69 6e 20   parent, but in 
22b90 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 6d 65  the case of a me
22ba0 72 67 65 2c 20 61 20 63 68 65 63 6b 69 6e 0a 6d  rge, a checkin.m
22bb0 69 67 68 74 20 68 61 76 65 20 74 77 6f 20 6f 72  ight have two or
22bc0 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 70   three or more p
22bd0 61 72 65 6e 74 73 2e 20 20 41 20 73 63 68 65 6d  arents.  A schem
22be0 61 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 20  a to keep track 
22bf0 6f 66 0a 63 68 65 63 6b 69 6e 73 20 61 6e 64 20  of.checkins and 
22c00 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  the order in whi
22c10 63 68 20 74 68 65 79 20 6f 63 63 75 72 20 6d 69  ch they occur mi
22c20 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65 74 68 69  ght look somethi
22c30 6e 67 20 6c 69 6b 65 0a 74 68 69 73 3a 0a 0a 3c  ng like.this:..<
22c40 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
22c50 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 68  .CREATE TABLE ch
22c60 65 63 6b 69 6e 28 0a 20 20 69 64 20 49 4e 54 45  eckin(.  id INTE
22c70 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
22c80 0a 20 20 6d 74 69 6d 65 20 49 4e 54 45 47 45 52  .  mtime INTEGER
22c90 20 2d 2d 20 74 69 6d 65 73 74 61 6d 70 20 77 68   -- timestamp wh
22ca0 65 6e 20 74 68 69 73 20 63 68 65 63 6b 69 6e 20  en this checkin 
22cb0 6f 63 63 75 72 72 65 64 0a 29 3b 0a 43 52 45 41  occurred.);.CREA
22cc0 54 45 20 54 41 42 4c 45 20 64 65 72 69 76 65 64  TE TABLE derived
22cd0 66 72 6f 6d 28 0a 20 20 78 66 72 6f 6d 20 49 4e  from(.  xfrom IN
22ce0 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52  TEGER NOT NULL R
22cf0 45 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69  EFERENCES checki
22d00 6e 2c 20 2d 2d 20 70 61 72 65 6e 74 20 63 68 65  n, -- parent che
22d10 63 6b 69 6e 0a 20 20 78 74 6f 20 49 4e 54 45 47  ckin.  xto INTEG
22d20 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45  ER NOT NULL REFE
22d30 52 45 4e 43 45 53 20 63 68 65 63 6b 69 6e 2c 20  RENCES checkin, 
22d40 20 20 2d 2d 20 64 65 72 69 76 65 64 20 63 68 65    -- derived che
22d50 63 6b 69 6e 0a 20 20 50 52 49 4d 41 52 59 20 4b  ckin.  PRIMARY K
22d60 45 59 28 78 66 72 6f 6d 2c 78 74 6f 29 0a 29 3b  EY(xfrom,xto).);
22d70 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20 64 65  .CREATE INDEX de
22d80 72 69 76 65 64 66 72 6f 6d 5f 62 61 63 6b 20 4f  rivedfrom_back O
22d90 4e 20 64 65 72 69 76 65 64 66 72 6f 6d 28 78 74  N derivedfrom(xt
22da0 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70 72 65 3e  o,xfrom);.</pre>
22db0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
22dc0 70 3e 54 68 69 73 20 67 72 61 70 68 20 69 73 20  p>This graph is 
22dd0 61 63 79 63 6c 69 63 2e 20 20 41 6e 64 20 77 65  acyclic.  And we
22de0 20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68 65   assume that the
22df0 20 6d 74 69 6d 65 20 6f 66 20 65 76 65 72 79 0a   mtime of every.
22e00 63 68 69 6c 64 20 63 68 65 63 6b 69 6e 20 69 73  child checkin is
22e10 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68   no less than th
22e20 65 20 6d 74 69 6d 65 20 6f 66 20 61 6c 6c 20 69  e mtime of all i
22e30 74 73 20 70 61 72 65 6e 74 73 2e 20 20 42 75 74  ts parents.  But
22e40 0a 75 6e 6c 69 6b 65 20 74 68 65 20 65 61 72 6c  .unlike the earl
22e50 69 65 72 20 65 78 61 6d 70 6c 65 73 2c 20 74 68  ier examples, th
22e60 69 73 20 67 72 61 70 68 20 6d 69 67 68 74 20 68  is graph might h
22e70 61 76 65 20 6d 75 6c 74 69 70 6c 65 20 70 61 74  ave multiple pat
22e80 68 73 20 6f 66 0a 64 69 66 66 65 72 69 6e 67 20  hs of.differing 
22e90 6c 65 6e 67 74 68 73 20 62 65 74 77 65 65 6e 20  lengths between 
22ea0 61 6e 79 20 74 77 6f 20 63 68 65 63 6b 69 6e 73  any two checkins
22eb0 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e 74 20 74 6f  ...<p>We want to
22ec0 20 6b 6e 6f 77 20 74 68 65 20 74 77 65 6e 74 79   know the twenty
22ed0 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63   most recent anc
22ee0 65 73 74 6f 72 73 20 69 6e 20 74 69 6d 65 20 28  estors in time (
22ef0 6f 75 74 20 6f 66 0a 74 68 65 20 74 68 6f 75 73  out of.the thous
22f00 61 6e 64 73 20 61 6e 64 20 74 68 6f 75 73 61 6e  ands and thousan
22f10 64 73 20 6f 66 20 61 6e 63 65 73 74 6f 72 73 20  ds of ancestors 
22f20 69 6e 20 74 68 65 20 77 68 6f 6c 65 20 44 41 47  in the whole DAG
22f30 29 20 66 6f 72 0a 63 68 65 63 6b 69 6e 20 22 40  ) for.checkin "@
22f40 42 41 53 45 4c 49 4e 45 22 2e 20 20 28 41 20 71  BASELINE".  (A q
22f50 75 65 72 79 20 73 69 6d 69 6c 61 72 20 74 6f 20  uery similar to 
22f60 74 68 69 73 20 69 73 20 75 73 65 64 0a 62 79 20  this is used.by 
22f70 74 68 65 20 3c 61 20 68 72 65 66 3d 22 68 74 74  the <a href="htt
22f80 70 3a 2f 2f 77 77 77 2e 66 6f 73 73 69 6c 2d 73  p://www.fossil-s
22f90 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73 73 69 6c 3c  cm.org/">Fossil<
22fa0 2f 61 3e 20 56 43 53 20 74 6f 0a 73 68 6f 77 20  /a> VCS to.show 
22fb0 74 68 65 20 4e 20 6d 6f 73 74 20 72 65 63 65 6e  the N most recen
22fc0 74 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20 61  t ancestors of a
22fd0 20 63 68 65 63 6b 2e 20 20 46 6f 72 20 65 78 61   check.  For exa
22fe0 6d 70 6c 65 3a 0a 3c 61 20 68 72 65 66 3d 22 68  mple:.<a href="h
22ff0 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65  ttp://www.sqlite
23000 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c 69 6e  .org/src/timelin
23010 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30 22 3e  e?p=trunk&n=30">
23020 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74  http://www.sqlit
23030 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c 69  e.org/src/timeli
23040 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30 3c  ne?p=trunk&n=30<
23050 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  /a>.)..<blockquo
23060 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
23070 43 55 52 53 49 56 45 0a 20 20 61 6e 63 65 73 74  CURSIVE.  ancest
23080 6f 72 28 69 64 2c 6d 74 69 6d 65 29 20 41 53 20  or(id,mtime) AS 
23090 28 0a 20 20 20 20 53 45 4c 45 43 54 20 69 64 2c  (.    SELECT id,
230a0 20 6d 74 69 6d 65 20 46 52 4f 4d 20 63 68 65 63   mtime FROM chec
230b0 6b 69 6e 20 57 48 45 52 45 20 69 64 3d 40 42 41  kin WHERE id=@BA
230c0 53 45 4c 49 4e 45 0a 20 20 20 20 55 4e 49 4f 4e  SELINE.    UNION
230d0 0a 20 20 20 20 53 45 4c 45 43 54 20 64 65 72 69  .    SELECT deri
230e0 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 2c 20 63  vedfrom.xfrom, c
230f0 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 0a 20 20 20  heckin.mtime.   
23100 20 20 20 46 52 4f 4d 20 61 6e 63 65 73 74 6f 72     FROM ancestor
23110 2c 20 64 65 72 69 76 65 64 66 72 6f 6d 2c 20 63  , derivedfrom, c
23120 68 65 63 6b 69 6e 0a 20 20 20 20 20 57 48 45 52  heckin.     WHER
23130 45 20 61 6e 63 65 73 74 6f 72 2e 69 64 3d 64 65  E ancestor.id=de
23140 72 69 76 65 64 66 72 6f 6d 2e 78 74 6f 0a 20 20  rivedfrom.xto.  
23150 20 20 20 20 20 41 4e 44 20 63 68 65 63 6b 69 6e       AND checkin
23160 2e 69 64 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e  .id=derivedfrom.
23170 78 66 72 6f 6d 0a 20 20 20 20 20 4f 52 44 45 52  xfrom.     ORDER
23180 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d   BY checkin.mtim
23190 65 20 44 45 53 43 0a 20 20 20 20 20 4c 49 4d 49  e DESC.     LIMI
231a0 54 20 32 30 0a 20 20 29 0a 53 45 4c 45 43 54 20  T 20.  ).SELECT 
231b0 2a 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20 4a  * FROM checkin J
231c0 4f 49 4e 20 61 6e 63 65 73 74 6f 72 20 55 53 49  OIN ancestor USI
231d0 4e 47 28 69 64 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  NG(id);.</pre></
231e0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
231f0 0a 54 68 65 20 22 4f 52 44 45 52 20 42 59 20 63  .The "ORDER BY c
23200 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45 53  heckin.mtime DES
23210 43 22 20 74 65 72 6d 20 69 6e 20 74 68 65 20 72  C" term in the r
23220 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
23230 6d 61 6b 65 73 0a 74 68 65 20 71 75 65 72 79 20  makes.the query 
23240 72 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72 20  run much faster 
23250 62 79 20 70 72 65 76 65 6e 74 69 6e 67 20 69 74  by preventing it
23260 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77 69 6e 67 0a   from following.
23270 62 72 61 6e 63 68 65 73 20 74 68 61 74 20 6d 65  branches that me
23280 72 67 65 20 63 68 65 63 6b 69 6e 73 0a 66 72 6f  rge checkins.fro
23290 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20 20 54 68 65  m long ago.  The
232a0 20 4f 52 44 45 52 20 42 59 20 66 6f 72 63 65 73   ORDER BY forces
232b0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
232c0 65 6c 65 63 74 20 74 6f 20 66 6f 63 75 73 0a 6f  elect to focus.o
232d0 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  n the most recen
232e0 74 20 63 68 65 63 6b 69 6e 73 2c 20 74 68 65 20  t checkins, the 
232f0 6f 6e 65 73 20 77 65 20 77 61 6e 74 2e 20 20 57  ones we want.  W
23300 69 74 68 6f 75 74 20 74 68 65 20 4f 52 44 45 52  ithout the ORDER
23310 20 42 59 0a 6f 6e 20 74 68 65 20 72 65 63 75 72   BY.on the recur
23320 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 6f 6e 65  sive-select, one
23330 20 77 6f 75 6c 64 20 62 65 20 66 6f 72 63 65 64   would be forced
23340 20 74 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20   to compute the 
23350 63 6f 6d 70 6c 65 74 65 20 73 65 74 20 6f 66 0a  complete set of.
23360 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e 63  thousands of anc
23370 65 73 74 6f 72 73 2c 20 73 6f 72 74 20 74 68 65  estors, sort the
23380 6d 20 61 6c 6c 20 62 79 20 6d 74 69 6d 65 2c 20  m all by mtime, 
23390 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 74 6f  then take the to
233a0 70 20 74 77 65 6e 74 79 2e 0a 54 68 65 20 4f 52  p twenty..The OR
233b0 44 45 52 20 42 59 20 65 73 73 65 6e 74 69 61 6c  DER BY essential
233c0 6c 79 20 73 65 74 73 20 75 70 20 61 20 70 72 69  ly sets up a pri
233d0 6f 72 69 74 79 20 71 75 65 75 65 20 74 68 61 74  ority queue that
233e0 0a 66 6f 72 63 65 73 20 74 68 65 20 72 65 63 75  .forces the recu
233f0 72 73 69 76 65 20 71 75 65 72 79 20 74 6f 20 6c  rsive query to l
23400 6f 6f 6b 20 61 74 20 74 68 65 20 6d 6f 73 74 20  ook at the most 
23410 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73  recent ancestors
23420 20 66 69 72 73 74 2c 0a 61 6c 6c 6f 77 69 6e 67   first,.allowing
23430 20 74 68 65 20 75 73 65 20 6f 66 20 61 20 4c 49   the use of a LI
23440 4d 49 54 20 63 6c 61 75 73 65 20 74 6f 20 72 65  MIT clause to re
23450 73 74 72 69 63 74 20 74 68 65 20 73 63 6f 70 65  strict the scope
23460 20 6f 66 20 74 68 65 0a 71 75 65 72 79 20 74 6f   of the.query to
23470 20 6a 75 73 74 20 74 68 65 20 63 68 65 63 6b 69   just the checki
23480 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 2e 0a  ns of interest..
23490 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
234a0 74 20 77 69 74 68 6f 72 64 65 72 62 79 3c 2f 74  t withorderby</t
234b0 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74 72 6f 6c 6c  cl>.<h4>Controll
234c0 69 6e 67 20 44 65 70 74 68 2d 46 69 72 73 74 20  ing Depth-First 
234d0 56 65 72 73 75 73 20 42 72 65 61 64 74 68 2d 46  Versus Breadth-F
234e0 69 72 73 74 20 53 65 61 72 63 68 20 4f 66 20 61  irst Search Of a
234f0 20 54 72 65 65 0a 55 73 69 6e 67 20 4f 52 44 45   Tree.Using ORDE
23500 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 6e  R BY</h4>..<p>An
23510 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
23520 20 6f 6e 20 74 68 65 20 72 65 63 75 72 73 69 76   on the recursiv
23530 65 2d 73 65 6c 65 63 74 20 63 61 6e 20 62 65 20  e-select can be 
23540 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 0a  used to control.
23550 77 68 65 74 68 65 72 20 74 68 65 20 73 65 61 72  whether the sear
23560 63 68 20 6f 66 20 61 20 74 72 65 65 20 69 73 20  ch of a tree is 
23570 64 65 70 74 68 2d 66 69 72 73 74 20 6f 72 20 62  depth-first or b
23580 72 65 61 64 74 68 2d 66 69 72 73 74 2e 20 20 54  readth-first.  T
23590 6f 0a 69 6c 6c 75 73 74 72 61 74 65 2c 20 77 65  o.illustrate, we
235a0 20 77 69 6c 6c 20 75 73 65 20 61 20 76 61 72 69   will use a vari
235b0 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 22 6f 72  ation on the "or
235c0 67 22 20 74 61 62 6c 65 20 66 72 6f 6d 20 61 6e  g" table from an
235d0 20 65 78 61 6d 70 6c 65 0a 61 62 6f 76 65 2c 20   example.above, 
235e0 77 69 74 68 6f 75 74 20 74 68 65 20 22 68 65 69  without the "hei
235f0 67 68 74 22 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64  ght" column, and
23600 20 77 69 74 68 20 73 6f 6d 65 20 72 65 61 6c 20   with some real 
23610 64 61 74 61 20 69 6e 73 65 72 74 65 64 3a 0a 0a  data inserted:..
23620 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
23630 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  >.CREATE TABLE o
23640 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20  rg(.  name TEXT 
23650 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62  PRIMARY KEY,.  b
23660 6f 73 73 20 54 45 58 54 20 52 45 46 45 52 45 4e  oss TEXT REFEREN
23670 43 45 53 20 6f 72 67 0a 29 20 57 49 54 48 4f 55  CES org.) WITHOU
23680 54 20 52 4f 57 49 44 3b 0a 49 4e 53 45 52 54 20  T ROWID;.INSERT 
23690 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
236a0 27 41 6c 69 63 65 27 2c 4e 55 4c 4c 29 3b 0a 49  'Alice',NULL);.I
236b0 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
236c0 41 4c 55 45 53 28 27 42 6f 62 27 2c 27 41 6c 69  ALUES('Bob','Ali
236d0 63 65 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  ce');.INSERT INT
236e0 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 43 69  O org VALUES('Ci
236f0 6e 64 79 27 2c 27 41 6c 69 63 65 27 29 3b 0a 49  ndy','Alice');.I
23700 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
23710 41 4c 55 45 53 28 27 44 61 76 65 27 2c 27 42 6f  ALUES('Dave','Bo
23720 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  b');.INSERT INTO
23730 20 6f 72 67 20 56 41 4c 55 45 53 28 27 45 6d 6d   org VALUES('Emm
23740 61 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52  a','Bob');.INSER
23750 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
23760 53 28 27 46 72 65 64 27 2c 27 43 69 6e 64 79 27  S('Fred','Cindy'
23770 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f  );.INSERT INTO o
23780 72 67 20 56 41 4c 55 45 53 28 27 47 61 69 6c 27  rg VALUES('Gail'
23790 2c 27 43 69 6e 64 79 27 29 3b 0a 3c 2f 70 72 65  ,'Cindy');.</pre
237a0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
237b0 3c 70 3e 48 65 72 65 20 69 73 20 61 20 71 75 65  <p>Here is a que
237c0 72 79 20 74 6f 20 73 68 6f 77 20 74 68 65 20 74  ry to show the t
237d0 72 65 65 20 73 74 72 75 63 74 75 72 65 20 69 6e  ree structure in
237e0 20 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74   a breadth-first
237f0 20 70 61 74 74 65 72 6e 3a 0a 0a 3c 62 6c 6f 63   pattern:..<bloc
23800 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
23810 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 75 6e  H RECURSIVE.  un
23820 64 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65 2c 6c  der_alice(name,l
23830 65 76 65 6c 29 20 41 53 20 28 0a 20 20 20 20 56  evel) AS (.    V
23840 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 30 29  ALUES('Alice',0)
23850 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  .    UNION ALL. 
23860 20 20 20 53 45 4c 45 43 54 20 6f 72 67 2e 6e 61     SELECT org.na
23870 6d 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e  me, under_alice.
23880 6c 65 76 65 6c 2b 31 0a 20 20 20 20 20 20 46 52  level+1.      FR
23890 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e 64 65  OM org JOIN unde
238a0 72 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67 2e 62  r_alice ON org.b
238b0 6f 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63 65 2e  oss=under_alice.
238c0 6e 61 6d 65 0a 20 20 20 20 20 4f 52 44 45 52 20  name.     ORDER 
238d0 42 59 20 32 0a 20 20 29 0a 53 45 4c 45 43 54 20  BY 2.  ).SELECT 
238e0 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e  substr('........
238f0 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20 7c  ..',1,level*3) |
23900 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64 65  | name FROM unde
23910 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c  r_alice;.</pre><
23920 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
23930 3e 54 68 65 20 22 4f 52 44 45 52 20 42 59 20 32  >The "ORDER BY 2
23940 22 20 28 77 68 69 63 68 20 6d 65 61 6e 73 20 74  " (which means t
23950 68 65 20 73 61 6d 65 20 61 73 20 22 4f 52 44 45  he same as "ORDE
23960 52 20 42 59 20 75 6e 64 65 72 5f 61 6c 69 63 65  R BY under_alice
23970 2e 6c 65 76 65 6c 2b 31 22 29 0a 63 61 75 73 65  .level+1").cause
23980 73 20 68 69 67 68 65 72 20 6c 65 76 65 6c 73 20  s higher levels 
23990 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74  in the organizat
239a0 69 6f 6e 20 63 68 61 72 74 20 28 77 69 74 68 20  ion chart (with 
239b0 73 6d 61 6c 6c 65 72 20 22 6c 65 76 65 6c 22 20  smaller "level" 
239c0 76 61 6c 75 65 73 29 0a 74 6f 20 62 65 20 70 72  values).to be pr
239d0 6f 63 65 73 73 65 64 20 66 69 72 73 74 2c 20 72  ocessed first, r
239e0 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 62 72  esulting in a br
239f0 65 61 64 74 68 2d 66 69 72 73 74 20 73 65 61 72  eadth-first sear
23a00 63 68 2e 20 20 54 68 65 20 6f 75 74 70 75 74 20  ch.  The output 
23a10 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
23a20 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e  ><pre>.Alice....
23a30 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e  Bob....Cindy....
23a40 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d  ...Dave.......Em
23a50 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e  ma.......Fred...
23a60 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c  ....Gail.</pre><
23a70 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
23a80 3e 42 75 74 20 69 66 20 77 65 20 63 68 61 6e 67  >But if we chang
23a90 65 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  e the ORDER BY c
23aa0 6c 61 75 73 65 20 74 6f 20 61 64 64 20 74 68 65  lause to add the
23ab0 20 22 44 45 53 43 22 20 6d 6f 64 69 66 69 65 72   "DESC" modifier
23ac0 2c 20 74 68 61 74 20 77 69 6c 6c 0a 63 61 75 73  , that will.caus
23ad0 65 20 6c 6f 77 65 72 20 6c 65 76 65 6c 73 20 69  e lower levels i
23ae0 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69  n the organizati
23af0 6f 6e 20 28 77 69 74 68 20 6c 61 72 67 65 72 20  on (with larger 
23b00 22 6c 65 76 65 6c 22 20 76 61 6c 75 65 73 29 20  "level" values) 
23b10 74 6f 20 62 65 0a 70 72 6f 63 65 73 73 65 64 20  to be.processed 
23b20 66 69 72 73 74 20 62 79 20 74 68 65 20 72 65 63  first by the rec
23b30 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 72  ursive-select, r
23b40 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 64 65  esulting in a de
23b50 70 74 68 2d 66 69 72 73 74 20 73 65 61 72 63 68  pth-first search
23b60 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
23b70 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
23b80 49 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c 69 63  IVE.  under_alic
23b90 65 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20 41 53  e(name,level) AS
23ba0 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41   (.    VALUES('A
23bb0 6c 69 63 65 27 2c 30 29 0a 20 20 20 20 55 4e 49  lice',0).    UNI
23bc0 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43  ON ALL.    SELEC
23bd0 54 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e 64 65  T org.name, unde
23be0 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 0a  r_alice.level+1.
23bf0 20 20 20 20 20 20 46 52 4f 4d 20 6f 72 67 20 4a        FROM org J
23c00 4f 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63 65 20  OIN under_alice 
23c10 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e 64 65  ON org.boss=unde
23c20 72 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20 20 20  r_alice.name.   
23c30 20 20 4f 52 44 45 52 20 42 59 20 32 20 3c 62 3e    ORDER BY 2 <b>
23c40 44 45 53 43 3c 2f 62 3e 0a 20 20 29 0a 53 45 4c  DESC</b>.  ).SEL
23c50 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e  ECT substr('....
23c60 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a  ......',1,level*
23c70 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20  3) || name FROM 
23c80 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70  under_alice;.</p
23c90 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
23ca0 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20  ..<p>The output 
23cb0 6f 66 20 74 68 69 73 20 72 65 76 69 73 65 64 20  of this revised 
23cc0 71 75 65 72 79 20 69 73 3a 0a 0a 3c 62 6c 6f 63  query is:..<bloc
23cd0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69  kquote><pre>.Ali
23ce0 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 2e 2e 2e  ce....Bob.......
23cf0 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a  Dave.......Emma.
23d00 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 46  ...Cindy.......F
23d10 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c  red.......Gail.<
23d20 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
23d30 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20  e>..<p>When the 
23d40 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
23d50 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
23d60 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
23d70 6c 65 63 74 2c 20 74 68 65 0a 71 75 65 75 65 20  lect, the.queue 
23d80 62 65 68 61 76 65 73 20 61 73 20 61 20 46 49 46  behaves as a FIF
23d90 4f 2c 20 77 68 69 63 68 20 72 65 73 75 6c 74 73  O, which results
23da0 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69   in a breadth-fi
23db0 72 73 74 20 73 65 61 72 63 68 2e 0a 0a 0a 3c 74  rst search....<t
23dc0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d  cl>hd_fragment m
23dd0 61 6e 64 65 6c 62 72 6f 74 20 7b 63 6f 6d 70 75  andelbrot {compu
23de0 74 65 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f  te the Mandelbro
23df0 74 20 73 65 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 34  t set}</tcl>.<h4
23e00 3e 4f 75 74 6c 61 6e 64 69 73 68 20 52 65 63 75  >Outlandish Recu
23e10 72 73 69 76 65 20 51 75 65 72 79 20 45 78 61 6d  rsive Query Exam
23e20 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68  ples</h4>..<p>Th
23e30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72  e following quer
23e40 79 20 63 6f 6d 70 75 74 65 73 20 61 6e 20 61 70  y computes an ap
23e50 70 72 6f 78 69 6d 61 74 69 6f 6e 20 6f 66 20 74  proximation of t
23e60 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65  he Mandelbrot Se
23e70 74 0a 61 6e 64 20 6f 75 74 70 75 74 73 20 74 68  t.and outputs th
23e80 65 20 72 65 73 75 6c 74 20 61 73 20 41 53 43 49  e result as ASCI
23e90 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  I-art:..<blockqu
23ea0 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
23eb0 45 43 55 52 53 49 56 45 0a 20 20 78 61 78 69 73  ECURSIVE.  xaxis
23ec0 28 78 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d  (x) AS (VALUES(-
23ed0 32 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53  2.0) UNION ALL S
23ee0 45 4c 45 43 54 20 78 2b 30 2e 30 35 20 46 52 4f  ELECT x+0.05 FRO
23ef0 4d 20 78 61 78 69 73 20 57 48 45 52 45 20 78 3c  M xaxis WHERE x<
23f00 31 2e 32 29 2c 0a 20 20 79 61 78 69 73 28 79 29  1.2),.  yaxis(y)
23f10 20 41 53 20 28 56 41 4c 55 45 53 28 2d 31 2e 30   AS (VALUES(-1.0
23f20 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45  ) UNION ALL SELE
23f30 43 54 20 79 2b 30 2e 31 20 46 52 4f 4d 20 79 61  CT y+0.1 FROM ya
23f40 78 69 73 20 57 48 45 52 45 20 79 3c 31 2e 30 29  xis WHERE y<1.0)
23f50 2c 0a 20 20 6d 28 69 74 65 72 2c 20 63 78 2c 20  ,.  m(iter, cx, 
23f60 63 79 2c 20 78 2c 20 79 29 20 41 53 20 28 0a 20  cy, x, y) AS (. 
23f70 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78 2c 20     SELECT 0, x, 
23f80 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52 4f 4d  y, 0.0, 0.0 FROM
23f90 20 78 61 78 69 73 2c 20 79 61 78 69 73 0a 20 20   xaxis, yaxis.  
23fa0 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20    UNION ALL.    
23fb0 53 45 4c 45 43 54 20 69 74 65 72 2b 31 2c 20 63  SELECT iter+1, c
23fc0 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79 20 2b  x, cy, x*x-y*y +
23fd0 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b 20 63   cx, 2.0*x*y + c
23fe0 79 20 46 52 4f 4d 20 6d 20 0a 20 20 20 20 20 57  y FROM m .     W
23ff0 48 45 52 45 20 28 78 2a 78 20 2b 20 79 2a 79 29  HERE (x*x + y*y)
24000 20 3c 20 34 2e 30 20 41 4e 44 20 69 74 65 72 3c   < 4.0 AND iter<
24010 32 38 0a 20 20 29 2c 0a 20 20 6d 32 28 69 74 65  28.  ),.  m2(ite
24020 72 2c 20 63 78 2c 20 63 79 29 20 41 53 20 28 0a  r, cx, cy) AS (.
24030 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78 28 69      SELECT max(i
24040 74 65 72 29 2c 20 63 78 2c 20 63 79 20 46 52 4f  ter), cx, cy FRO
24050 4d 20 6d 20 47 52 4f 55 50 20 42 59 20 63 78 2c  M m GROUP BY cx,
24060 20 63 79 0a 20 20 29 2c 0a 20 20 61 28 74 29 20   cy.  ),.  a(t) 
24070 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20  AS (.    SELECT 
24080 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 20 73 75  group_concat( su
24090 62 73 74 72 28 27 20 2e 2b 2a 23 27 2c 20 31 2b  bstr(' .+*#', 1+
240a0 6d 69 6e 28 69 74 65 72 2f 37 2c 34 29 2c 20 31  min(iter/7,4), 1
240b0 29 2c 20 27 27 29 20 0a 20 20 20 20 46 52 4f 4d  ), '') .    FROM
240c0 20 6d 32 20 47 52 4f 55 50 20 42 59 20 63 79 0a   m2 GROUP BY cy.
240d0 20 20 29 0a 53 45 4c 45 43 54 20 67 72 6f 75 70    ).SELECT group
240e0 5f 63 6f 6e 63 61 74 28 72 74 72 69 6d 28 74 29  _concat(rtrim(t)
240f0 2c 78 27 30 61 27 29 20 46 52 4f 4d 20 61 3b 0a  ,x'0a') FROM a;.
24100 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
24110 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69 73 20  te>..<p>In this 
24120 71 75 65 72 79 2c 20 74 68 65 20 22 78 61 78 69  query, the "xaxi
24130 73 22 20 61 6e 64 20 22 79 61 78 69 73 22 20 43  s" and "yaxis" C
24140 54 45 73 20 64 65 66 69 6e 65 20 74 68 65 20 67  TEs define the g
24150 72 69 64 20 6f 66 20 70 6f 69 6e 74 73 20 66 6f  rid of points fo
24160 72 0a 77 68 69 63 68 20 74 68 65 20 4d 61 6e 64  r.which the Mand
24170 65 6c 62 72 6f 74 20 53 65 74 20 77 69 6c 6c 20  elbrot Set will 
24180 62 65 20 61 70 70 72 6f 78 69 6d 61 74 65 64 2e  be approximated.
24190 20 20 45 61 63 68 20 72 6f 77 20 69 6e 20 74 68    Each row in th
241a0 65 0a 22 6d 28 69 74 65 72 2c 63 78 2c 63 79 2c  e."m(iter,cx,cy,
241b0 78 2c 79 29 22 20 43 54 45 20 6d 65 61 6e 73 20  x,y)" CTE means 
241c0 74 68 61 74 20 61 66 74 65 72 20 22 69 74 65 72  that after "iter
241d0 22 20 69 74 65 72 61 74 69 6f 6e 73 2c 20 74 68  " iterations, th
241e0 65 20 4d 61 6e 64 65 6c 62 72 6f 74 0a 69 74 65  e Mandelbrot.ite
241f0 72 61 74 69 6f 6e 20 73 74 61 72 74 69 6e 67 20  ration starting 
24200 61 74 20 63 78 2c 63 79 20 68 61 73 20 72 65 61  at cx,cy has rea
24210 63 68 65 64 20 70 6f 69 6e 74 20 78 2c 79 2e 20  ched point x,y. 
24220 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69   The number of i
24230 74 65 72 61 74 69 6f 6e 73 0a 69 6e 20 74 68 69  terations.in thi
24240 73 20 65 78 61 6d 70 6c 65 20 69 73 20 6c 69 6d  s example is lim
24250 69 74 65 64 20 74 6f 20 32 38 20 28 77 68 69 63  ited to 28 (whic
24260 68 20 73 65 76 65 72 65 6c 79 20 6c 69 6d 69 74  h severely limit
24270 73 20 74 68 65 20 72 65 73 6f 6c 75 74 69 6f 6e  s the resolution
24280 20 6f 66 0a 74 68 65 20 63 6f 6d 70 75 74 61 74   of.the computat
24290 69 6f 6e 2c 20 62 75 74 20 69 73 20 73 75 66 66  ion, but is suff
242a0 69 63 69 65 6e 74 20 66 6f 72 20 6c 6f 77 2d 72  icient for low-r
242b0 65 73 6f 6c 75 74 69 6f 6e 20 41 53 43 49 49 2d  esolution ASCII-
242c0 61 72 74 20 6f 75 74 70 75 74 29 2e 0a 54 68 65  art output)..The
242d0 20 22 6d 32 28 69 74 65 72 2c 63 78 2c 63 79 29   "m2(iter,cx,cy)
242e0 22 20 43 54 45 20 68 6f 6c 64 73 20 74 68 65 20  " CTE holds the 
242f0 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
24300 66 20 69 74 65 72 61 74 69 6f 6e 73 20 72 65 61  f iterations rea
24310 63 68 65 64 20 77 68 65 6e 0a 73 74 61 72 74 69  ched when.starti
24320 6e 67 20 61 74 20 70 6f 69 6e 74 20 63 78 2c 63  ng at point cx,c
24330 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65 61 63 68  y..Finally, each
24340 20 72 6f 77 20 69 6e 20 74 68 65 20 22 61 28 74   row in the "a(t
24350 29 22 20 43 54 45 20 68 6f 6c 64 73 20 61 20 73  )" CTE holds a s
24360 74 72 69 6e 67 20 0a 77 68 69 63 68 20 69 73 20  tring .which is 
24370 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f 66  a single line of
24380 20 74 68 65 20 6f 75 74 70 75 74 20 41 53 43 49   the output ASCI
24390 49 2d 61 72 74 2e 0a 54 68 65 20 53 45 4c 45 43  I-art..The SELEC
243a0 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 20 74  T statement at t
243b0 68 65 20 65 6e 64 20 6a 75 73 74 20 71 75 65 72  he end just quer
243c0 69 65 73 20 74 68 65 20 22 61 22 20 43 54 45 20  ies the "a" CTE 
243d0 74 6f 0a 72 65 74 72 69 65 76 65 20 61 6c 6c 20  to.retrieve all 
243e0 6c 69 6e 65 73 20 6f 66 20 41 53 43 49 49 2d 61  lines of ASCII-a
243f0 72 74 2c 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 0a  rt, one by one..
24400 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20 74 68 65 20  .<p>Running the 
24410 71 75 65 72 79 20 61 62 6f 76 65 20 69 6e 20 61  query above in a
24420 6e 20 53 51 4c 69 74 65 20 5b 63 6f 6d 6d 61 6e  n SQLite [comman
24430 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20 72 65  d-line shell] re
24440 73 75 6c 74 73 0a 69 6e 20 74 68 65 20 66 6f 6c  sults.in the fol
24450 6c 6f 77 69 6e 67 20 6f 75 74 70 75 74 3a 0a 0a  lowing output:..
24460 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
24470 3e 0a 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 20 20 20 20 20                  
24490 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20        ....#.    
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
244c0 2e 23 2a 2e 2e 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 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e         ..+####+.
244f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
24510 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20  ....+####....   
24520 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
24530 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23               ..#
24540 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #+*##########+.+
24550 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +++.            
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b                .+
24570 2e 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
24580 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
24590 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e      ............
245a0 2e 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .+##############
245b0 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20  #####+.+.       
245c0 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e         ..++..#..
245d0 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23 23 23  ...*############
245e0 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20  #########+..    
245f0 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23           ...+###
24600 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23  ####++##########
24610 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20  #############.. 
24620 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23           ....+*#
24630 23 23 23 23 23 23 23 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 2e  ###############.
24650 0a 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  . ##############
24660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e  ###############.
24680 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e  ...          ...
24690 2e 2b 2a 23 23 23 23 23 23 23 23 23 23 23 23 23  .+*#############
246a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
246b0 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ###..           
246c0 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23    ...+#######++#
246d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
246e0 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20  ######..        
246f0 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e        ..++..#...
24700 2e 2e 2a 23 23 23 23 23 23 23 23 23 23 23 23 23  ..*#############
24710 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20  ########+..     
24720 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e           .......
24730 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23  ......+#########
24740 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20  ##########+.+.  
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24760 20 20 20 20 20 20 20 20 2e 2b 2e 23 23 23 23 23          .+.#####
24770 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a  #############+..
24780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24790 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23 23 2b             ..##+
247a0 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 2b 2b  *##########+.+++
247b0 2b 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 2e 2e                ..
247d0 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20  .....+####....  
247e0 20 2b 0a 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 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a 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 20 20 20 20 20 20                  
24830 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20   ..#*...        
24840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24850 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
24860 23 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #.              
24870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24880 20 20 20 20 20 20 2b 2e 0a 3c 2f 70 72 65 3e 3c        +..</pre><
24890 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74  /blockquote>..<t
248a0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
248b0 75 64 6f 6b 75 20 7b 73 6f 6c 76 65 20 53 75 64  udoku {solve Sud
248c0 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d 20 3c 2f 74  oku puzzles} </t
248d0 63 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e 65 78 74  cl>.<p>This next
248e0 20 71 75 65 72 79 20 73 6f 6c 76 65 73 20 61 20   query solves a 
248f0 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 2e 20 20  Sudoku puzzle.  
24900 54 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  The state of the
24910 20 70 75 7a 7a 6c 65 20 69 73 0a 64 65 66 69 6e   puzzle is.defin
24920 65 64 20 62 79 20 61 6e 20 38 31 2d 63 68 61 72  ed by an 81-char
24930 61 63 74 65 72 20 73 74 72 69 6e 67 20 66 6f 72  acter string for
24940 6d 65 64 20 62 79 20 72 65 61 64 69 6e 67 20 65  med by reading e
24950 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 0a  ntries from the.
24960 70 75 7a 7a 6c 65 20 62 6f 78 20 72 6f 77 20 62  puzzle box row b
24970 79 20 72 6f 77 20 66 72 6f 6d 20 6c 65 66 74 20  y row from left 
24980 74 6f 20 72 69 67 68 74 20 61 6e 64 20 74 68 65  to right and the
24990 6e 20 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f  n from top to bo
249a0 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73 71 75 61  ttom..Blank squa
249b0 72 65 73 20 69 6e 20 74 68 65 20 70 75 7a 7a 6c  res in the puzzl
249c0 65 20 61 72 65 20 64 65 6e 6f 74 65 64 20 62 79  e are denoted by
249d0 20 61 20 22 2e 22 20 63 68 61 72 61 63 74 65 72   a "." character
249e0 2e 20 20 0a 54 68 75 73 20 74 68 65 20 69 6e 70  .  .Thus the inp
249f0 75 74 20 73 74 72 69 6e 67 3a 0a 0a 3c 62 6c 6f  ut string:..<blo
24a00 63 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e 37 2e 2e  ckquote>.53..7..
24a10 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e  ..6..195....98..
24a20 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e  ..6.8...6...34..
24a30 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e  8.3..17...2...6.
24a40 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e  6....28....419..
24a50 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f 62 6c 6f  5....8..79.</blo
24a60 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 72  ckquote>..<p>Cor
24a70 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 70 75  responds to a pu
24a80 7a 7a 6c 65 20 6c 69 6b 65 20 74 68 69 73 3a 0a  zzle like this:.
24a90 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
24aa0 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20  able border="1" 
24ab0 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35 22 3e  cellpadding="5">
24ac0 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74 64 3e 33 3c  .<tr><td>5<td>3<
24ad0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74  td> <td> <td>7<t
24ae0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
24af0 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74 64 3e 20  >.<tr><td>6<td> 
24b00 3c 74 64 3e 20 3c 74 64 3e 31 3c 74 64 3e 39 3c  <td> <td>1<td>9<
24b10 74 64 3e 35 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>5<td> <td> <t
24b20 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e  d>.<tr><td> <td>
24b30 39 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20  9<td>8<td> <td> 
24b40 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 3c  <td> <td> <td>6<
24b50 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38 3c 74 64  td>.<tr><td>8<td
24b60 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
24b70 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  6<td> <td> <td> 
24b80 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74 64 3e 34 3c  <td>3.<tr><td>4<
24b90 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74  td> <td> <td>8<t
24ba0 64 3e 20 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64  d> <td>3<td> <td
24bb0 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c 74 64 3e  > <td>1.<tr><td>
24bc0 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  7<td> <td> <td> 
24bd0 3c 74 64 3e 32 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>2<td> <td> <
24be0 74 64 3e 20 3c 74 64 3e 36 0a 3c 74 72 3e 3c 74  td> <td>6.<tr><t
24bf0 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64  d> <td>6<td> <td
24c00 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
24c10 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74 72 3e 3c  2<td>8<td>.<tr><
24c20 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
24c30 64 3e 34 3c 74 64 3e 31 3c 74 64 3e 39 3c 74 64  d>4<td>1<td>9<td
24c40 3e 20 3c 74 64 3e 20 3c 74 64 3e 35 0a 3c 74 72  > <td> <td>5.<tr
24c50 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  ><td> <td> <td> 
24c60 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e 20 3c  <td> <td>8<td> <
24c70 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 39 0a 3c  td> <td>7<td>9.<
24c80 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
24c90 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 69  uote>..<p>This i
24ca0 73 20 74 68 65 20 71 75 65 72 79 20 74 68 61 74  s the query that
24cb0 20 73 6f 6c 76 65 73 20 74 68 65 20 70 75 7a 7a   solves the puzz
24cc0 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  le:..<blockquote
24cd0 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
24ce0 52 53 49 56 45 0a 20 20 69 6e 70 75 74 28 73 75  RSIVE.  input(su
24cf0 64 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55  d) AS (.    VALU
24d00 45 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e  ES('53..7....6..
24d10 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38  195....98....6.8
24d20 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e  ...6...34..8.3..
24d30 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e  17...2...6.6....
24d40 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e  28....419..5....
24d50 38 2e 2e 37 39 27 29 0a 20 20 29 2c 0a 20 20 64  8..79').  ),.  d
24d60 69 67 69 74 73 28 7a 2c 20 6c 70 29 20 41 53 20  igits(z, lp) AS 
24d70 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 31 27  (.    VALUES('1'
24d80 2c 20 31 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41  , 1).    UNION A
24d90 4c 4c 20 53 45 4c 45 43 54 0a 20 20 20 20 43 41  LL SELECT.    CA
24da0 53 54 28 6c 70 2b 31 20 41 53 20 54 45 58 54 29  ST(lp+1 AS TEXT)
24db0 2c 20 6c 70 2b 31 20 46 52 4f 4d 20 64 69 67 69  , lp+1 FROM digi
24dc0 74 73 20 57 48 45 52 45 20 6c 70 3c 39 0a 20 20  ts WHERE lp<9.  
24dd0 29 2c 0a 20 20 78 28 73 2c 20 69 6e 64 29 20 41  ),.  x(s, ind) A
24de0 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 73  S (.    SELECT s
24df0 75 64 2c 20 69 6e 73 74 72 28 73 75 64 2c 20 27  ud, instr(sud, '
24e00 2e 27 29 20 46 52 4f 4d 20 69 6e 70 75 74 0a 20  .') FROM input. 
24e10 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20     UNION ALL.   
24e20 20 53 45 4c 45 43 54 0a 20 20 20 20 20 20 73 75   SELECT.      su
24e30 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31  bstr(s, 1, ind-1
24e40 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72  ) || z || substr
24e50 28 73 2c 20 69 6e 64 2b 31 29 2c 0a 20 20 20 20  (s, ind+1),.    
24e60 20 20 69 6e 73 74 72 28 20 73 75 62 73 74 72 28    instr( substr(
24e70 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20  s, 1, ind-1) || 
24e80 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69  z || substr(s, i
24e90 6e 64 2b 31 29 2c 20 27 2e 27 20 29 0a 20 20 20  nd+1), '.' ).   
24ea0 20 20 46 52 4f 4d 20 78 2c 20 64 69 67 69 74 73    FROM x, digits
24eb0 20 41 53 20 7a 0a 20 20 20 20 57 48 45 52 45 20   AS z.    WHERE 
24ec0 69 6e 64 3e 30 0a 20 20 20 20 20 20 41 4e 44 20  ind>0.      AND 
24ed0 4e 4f 54 20 45 58 49 53 54 53 20 28 0a 20 20 20  NOT EXISTS (.   
24ee0 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20           SELECT 
24ef0 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1.              
24f00 46 52 4f 4d 20 64 69 67 69 74 73 20 41 53 20 6c  FROM digits AS l
24f10 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 57  p.             W
24f20 48 45 52 45 20 7a 2e 7a 20 3d 20 73 75 62 73 74  HERE z.z = subst
24f30 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 2f 39 29  r(s, ((ind-1)/9)
24f40 2a 39 20 2b 20 6c 70 2c 20 31 29 0a 20 20 20 20  *9 + lp, 1).    
24f50 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 20 7a              OR z
24f60 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28  .z = substr(s, (
24f70 28 69 6e 64 2d 31 29 25 39 29 20 2b 20 28 6c 70  (ind-1)%9) + (lp
24f80 2d 31 29 2a 39 20 2b 20 31 2c 20 31 29 0a 20 20  -1)*9 + 1, 1).  
24f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52                OR
24fa0 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c   z.z = substr(s,
24fb0 20 28 28 28 69 6e 64 2d 31 29 2f 33 29 20 25 20   (((ind-1)/3) % 
24fc0 33 29 20 2a 20 33 0a 20 20 20 20 20 20 20 20 20  3) * 3.         
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b                 +
24fe0 20 28 28 69 6e 64 2d 31 29 2f 32 37 29 20 2a 20   ((ind-1)/27) * 
24ff0 32 37 20 2b 20 6c 70 0a 20 20 20 20 20 20 20 20  27 + lp.        
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 2b 20 28 28 6c 70 2d 31 29 20 2f 20 33 29 20 2a  + ((lp-1) / 3) *
25020 20 36 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20   6, 1).         
25030 29 0a 20 20 29 0a 53 45 4c 45 43 54 20 73 20 46  ).  ).SELECT s F
25040 52 4f 4d 20 78 20 57 48 45 52 45 20 69 6e 64 3d  ROM x WHERE ind=
25050 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  0;.</pre></block
25060 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22  quote>..<p>The "
25070 69 6e 70 75 74 22 20 43 54 45 20 64 65 66 69 6e  input" CTE defin
25080 65 73 20 74 68 65 20 69 6e 70 75 74 20 70 75 7a  es the input puz
25090 7a 6c 65 2e 0a 54 68 65 20 22 64 69 67 69 74 73  zle..The "digits
250a0 22 20 43 54 45 20 64 65 66 69 6e 65 73 20 61 20  " CTE defines a 
250b0 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73  table that holds
250c0 20 61 6c 6c 20 64 69 67 69 74 73 20 62 65 74 77   all digits betw
250d0 65 65 6e 20 31 20 61 6e 64 20 39 2e 0a 54 68 65  een 1 and 9..The
250e0 20 77 6f 72 6b 20 6f 66 20 73 6f 6c 76 69 6e 67   work of solving
250f0 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73 20 75   the puzzle is u
25100 6e 64 65 72 74 61 6b 65 6e 20 62 79 20 74 68 65  ndertaken by the
25110 20 22 78 22 20 43 54 45 2e 0a 41 6e 20 65 6e 74   "x" CTE..An ent
25120 72 79 20 69 6e 20 78 28 73 2c 69 6e 64 29 20 6d  ry in x(s,ind) m
25130 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 38 31  eans that the 81
25140 2d 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e  -character strin
25150 67 20 22 73 22 20 69 73 20 61 20 76 61 6c 69 64  g "s" is a valid
25160 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 28  .sudoku puzzle (
25170 69 74 20 68 61 73 20 6e 6f 20 63 6f 6e 66 6c 69  it has no confli
25180 63 74 73 29 20 61 6e 64 20 74 68 61 74 20 74 68  cts) and that th
25190 65 20 66 69 72 73 74 20 75 6e 6b 6e 6f 77 6e 20  e first unknown 
251a0 63 68 61 72 61 63 74 65 72 0a 69 73 20 61 74 20  character.is at 
251b0 70 6f 73 69 74 69 6f 6e 20 22 69 6e 64 22 2c 20  position "ind", 
251c0 6f 72 20 69 6e 64 3d 3d 30 20 69 66 20 61 6c 6c  or ind==0 if all
251d0 20 63 68 61 72 61 63 74 65 72 20 70 6f 73 69 74   character posit
251e0 69 6f 6e 73 20 61 72 65 20 66 69 6c 6c 65 64 20  ions are filled 
251f0 69 6e 2e 0a 54 68 65 20 67 6f 61 6c 2c 20 74 68  in..The goal, th
25200 65 6e 2c 20 69 73 20 74 6f 20 63 6f 6d 70 75 74  en, is to comput
25210 65 20 65 6e 74 72 69 65 73 20 66 6f 72 20 22 78  e entries for "x
25220 22 20 77 69 74 68 20 61 6e 20 22 69 6e 64 22 20  " with an "ind" 
25230 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68 65 20 73 6f  of 0...<p>The so
25240 6c 76 65 72 20 77 6f 72 6b 73 20 62 79 20 61 64  lver works by ad
25250 64 69 6e 67 20 6e 65 77 20 65 6e 74 72 69 65 73  ding new entries
25260 20 74 6f 20 74 68 65 20 22 78 22 20 72 65 63 75   to the "x" recu
25270 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 47 69 76  rsive table..Giv
25280 65 6e 20 70 72 69 6f 72 20 65 6e 74 72 69 65 73  en prior entries
25290 2c 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  , the recursive-
252a0 73 65 6c 65 63 74 20 74 72 69 65 73 20 74 6f 20  select tries to 
252b0 66 69 6c 6c 20 69 6e 20 61 20 73 69 6e 67 6c 65  fill in a single
252c0 20 6e 65 77 0a 70 6f 73 69 74 69 6f 6e 20 77 69   new.position wi
252d0 74 68 20 61 6c 6c 20 76 61 6c 75 65 73 20 62 65  th all values be
252e0 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20 74 68  tween 1 and 9 th
252f0 61 74 20 61 63 74 75 61 6c 6c 79 20 77 6f 72 6b  at actually work
25300 20 69 6e 20 74 68 61 74 0a 70 6f 73 69 74 69 6f   in that.positio
25310 6e 2e 20 20 54 68 65 20 63 6f 6d 70 6c 69 63 61  n.  The complica
25320 74 65 64 20 22 4e 4f 54 20 45 58 49 53 54 53 22  ted "NOT EXISTS"
25330 20 73 75 62 71 75 65 72 79 20 69 73 20 74 68 65   subquery is the
25340 20 6d 61 67 69 63 20 74 68 61 74 0a 66 69 67 75   magic that.figu
25350 72 65 73 20 6f 75 74 20 77 68 65 74 68 65 72 20  res out whether 
25360 6f 72 20 6e 6f 74 20 65 61 63 68 20 63 61 6e 64  or not each cand
25370 69 64 61 74 65 20 22 73 22 20 73 74 72 69 6e 67  idate "s" string
25380 20 69 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f   is a valid.sudo
25390 6b 75 20 70 75 7a 7a 6c 65 20 6f 72 20 6e 6f 74  ku puzzle or not
253a0 2e 0a 0a 3c 70 3e 54 68 65 20 66 69 6e 61 6c 20  ...<p>The final 
253b0 61 6e 73 77 65 72 20 69 73 20 66 6f 75 6e 64 20  answer is found 
253c0 62 79 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61  by looking for a
253d0 20 73 74 72 69 6e 67 20 77 69 74 68 20 69 6e 64   string with ind
253e0 3d 3d 30 2e 0a 49 66 20 74 68 65 20 6f 72 69 67  ==0..If the orig
253f0 69 6e 61 6c 20 73 75 64 6f 6b 75 20 70 72 6f 62  inal sudoku prob
25400 6c 65 6d 20 64 69 64 20 6e 6f 74 20 68 61 76 65  lem did not have
25410 20 61 20 75 6e 69 71 75 65 20 73 6f 6c 75 74 69   a unique soluti
25420 6f 6e 2c 20 74 68 65 6e 0a 74 68 65 20 71 75 65  on, then.the que
25430 72 79 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 61  ry will return a
25440 6c 6c 20 70 6f 73 73 69 62 6c 65 20 73 6f 6c 75  ll possible solu
25450 74 69 6f 6e 73 2e 20 20 49 66 20 74 68 65 20 6f  tions.  If the o
25460 72 69 67 69 6e 61 6c 20 70 72 6f 62 6c 65 6d 0a  riginal problem.
25470 77 61 73 20 75 6e 73 6f 6c 76 61 62 6c 65 2c 20  was unsolvable, 
25480 74 68 65 6e 20 6e 6f 20 72 6f 77 73 20 77 69 6c  then no rows wil
25490 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 20  l be returned.  
254a0 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68  In this case, th
254b0 65 20 75 6e 69 71 75 65 0a 61 6e 73 77 65 72 20  e unique.answer 
254c0 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
254d0 3e 0a 35 33 34 36 37 38 39 31 32 36 37 32 31 39  >.53467891267219
254e0 35 33 34 38 31 39 38 33 34 32 35 36 37 38 35 39  5348198342567859
254f0 37 36 31 34 32 33 34 32 36 38 35 33 37 39 31 37  7614234268537917
25500 31 33 39 32 34 38 35 36 39 36 31 35 33 37 32 38  1392485696153728
25510 34 32 38 37 34 31 39 36 33 35 33 34 35 32 38 36  4287419635345286
25520 31 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  179.</blockquote
25530 3e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 75 74 69  >..<p>The soluti
25540 6f 6e 20 77 61 73 20 63 6f 6d 70 75 74 65 64 20  on was computed 
25550 69 6e 20 6c 65 73 73 20 74 68 61 6e 20 33 30 30  in less than 300
25560 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 6f 6e   milliseconds on
25570 20 61 20 6d 6f 64 65 72 6e 0a 77 6f 72 6b 73 74   a modern.workst
25580 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c 69 6d 69  ation...<h3>Limi
25590 74 61 74 69 6f 6e 73 20 41 6e 64 20 43 61 76 65  tations And Cave
255a0 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75 6c 3e 0a 3c  ats</h3>..<ul>.<
255b0 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54 48 20  li><p>.The WITH 
255c0 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65  clause cannot be
255d0 20 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 5b   used within a [
255e0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 2e  CREATE TRIGGER].
255f0 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54  .<li><p>.The WIT
25600 48 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61 70  H clause must ap
25610 70 65 61 72 20 61 74 20 74 68 65 20 62 65 67 69  pear at the begi
25620 6e 6e 69 6e 67 20 6f 66 20 61 20 74 6f 70 2d 6c  nning of a top-l
25630 65 76 65 6c 20 5b 53 45 4c 45 43 54 5d 20 73 74  evel [SELECT] st
25640 61 74 65 6d 65 6e 74 0a 6f 72 20 61 74 20 74 68  atement.or at th
25650 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61  e beginning of a
25660 20 73 75 62 71 75 65 72 79 2e 20 20 54 68 65 20   subquery.  The 
25670 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 6e  WITH clause cann
25680 6f 74 20 62 65 20 70 72 65 70 65 6e 64 65 64 20  ot be prepended 
25690 74 6f 0a 74 68 65 20 73 65 63 6f 6e 64 20 6f 72  to.the second or
256a0 20 73 75 62 73 65 71 75 65 6e 74 20 53 45 4c 45   subsequent SELE
256b0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20  CT statement of 
256c0 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  a [compound sele
256d0 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65  ct]..<li><p>.The
256e0 20 53 51 4c 3a 31 39 39 39 20 73 70 65 63 20 72   SQL:1999 spec r
256f0 65 71 75 69 72 65 73 20 74 68 61 74 20 74 68 65  equires that the
25700 20 52 45 43 55 52 53 49 56 45 20 6b 65 79 77 6f   RECURSIVE keywo
25710 72 64 20 66 6f 6c 6c 6f 77 20 57 49 54 48 20 69  rd follow WITH i
25720 6e 20 61 6e 79 0a 57 49 54 48 20 63 6c 61 75 73  n any.WITH claus
25730 65 20 74 68 61 74 20 69 6e 63 6c 75 64 65 73 20  e that includes 
25740 61 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d  a recursive comm
25750 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
25760 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 20 66  ion.  However, f
25770 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or.compatibility
25780 20 77 69 74 68 20 53 71 6c 53 65 72 76 65 72 20   with SqlServer 
25790 61 6e 64 20 4f 72 61 63 6c 65 2c 20 53 51 4c 69  and Oracle, SQLi
257a0 74 65 20 64 6f 65 73 20 6e 6f 74 20 65 6e 66 6f  te does not enfo
257b0 72 63 65 20 74 68 69 73 20 72 75 6c 65 2e 0a 3c  rce this rule..<
257c0 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /ul>..<tcl>.####
257d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
257e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
257f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25810 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
25820 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c 65 63  ion SELECT selec
25830 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72 79 7d  t {SELECT query}
25840 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
25850 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d  eDiagram select-
25860 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70  stmt.</tcl>...<p
25870 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74  >The SELECT stat
25880 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
25890 20 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62   query the datab
258a0 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74  ase.  The.result
258b0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69 73 20   of a SELECT is 
258c0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77  zero or more row
258d0 73 20 6f 66 20 64 61 74 61 20 77 68 65 72 65 20  s of data where 
258e0 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66  each row.has a f
258f0 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63  ixed number of c
25900 6f 6c 75 6d 6e 73 2e 20 20 41 20 53 45 4c 45 43  olumns.  A SELEC
25910 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  T statement does
25920 20 6e 6f 74 20 6d 61 6b 65 0a 61 6e 79 20 63 68   not make.any ch
25930 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
25940 61 62 61 73 65 2e 0a 0a 3c 70 3e 54 68 65 20 22  abase...<p>The "
25950 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 73  [select-stmt]" s
25960 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61 62  yntax diagram ab
25970 6f 76 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ove attempts to 
25980 73 68 6f 77 20 61 73 20 6d 75 63 68 20 6f 66 20  show as much of 
25990 74 68 65 0a 53 45 4c 45 43 54 20 73 74 61 74 65  the.SELECT state
259a0 6d 65 6e 74 20 73 79 6e 74 61 78 20 61 73 20 70  ment syntax as p
259b0 6f 73 73 69 62 6c 65 20 69 6e 20 61 20 73 69 6e  ossible in a sin
259c0 67 6c 65 20 64 69 61 67 72 61 6d 2c 20 62 65 63  gle diagram, bec
259d0 61 75 73 65 20 73 6f 6d 65 20 72 65 61 64 65 72  ause some reader
259e0 73 0a 66 69 6e 64 20 74 68 61 74 20 68 65 6c 70  s.find that help
259f0 66 75 6c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ful.  The follow
25a00 69 6e 67 20 22 5b 66 61 63 74 6f 72 65 64 2d 73  ing "[factored-s
25a10 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 69 73 20  elect-stmt]" is 
25a20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 73  an alternative.s
25a30 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 74  yntax diagrams t
25a40 68 61 74 20 65 78 70 72 65 73 73 65 73 20 74 68  hat expresses th
25a50 65 20 73 61 6d 65 20 73 79 6e 74 61 78 20 62 75  e same syntax bu
25a60 74 20 74 72 69 65 73 20 74 6f 20 62 72 65 61 6b  t tries to break
25a70 20 74 68 65 20 73 79 6e 74 61 78 20 0a 64 6f 77   the syntax .dow
25a80 6e 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72 20 63  n into smaller c
25a90 68 75 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65  hunks...<tcl>.Re
25aa0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
25ab0 67 72 61 6d 20 2d 2d 69 6e 69 74 69 61 6c 6c 79  gram --initially
25ac0 2d 68 69 64 64 65 6e 20 66 61 63 74 6f 72 65 64  -hidden factored
25ad0 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c  -select-stmt sel
25ae0 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a  ect-core.</tcl>.
25af0 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68  .<p>Note that th
25b00 65 72 65 20 61 72 65 20 70 61 74 68 73 20 74 68  ere are paths th
25b10 72 6f 75 67 68 20 74 68 65 20 73 79 6e 74 61 78  rough the syntax
25b20 20 64 69 61 67 72 61 6d 73 20 74 68 61 74 0a 61   diagrams that.a
25b30 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69  re not allowed i
25b40 6e 20 70 72 61 63 74 69 63 65 2e 20 20 53 6f 6d  n practice.  Som
25b50 65 20 65 78 61 6d 70 6c 65 73 3a 0a 3c 75 6c 3e  e examples:.<ul>
25b60 0a 3c 6c 69 3e 41 20 5b 56 41 4c 55 45 53 5d 20  .<li>A [VALUES] 
25b70 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 74 68  clause can be th
25b80 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
25b90 69 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  in a [compound S
25ba0 45 4c 45 43 54 5d 0a 20 20 20 20 74 68 61 74 20  ELECT].    that 
25bb0 75 73 65 73 20 61 20 5b 57 49 54 48 5d 20 63 6c  uses a [WITH] cl
25bc0 61 75 73 65 2c 20 62 75 74 20 61 20 5b 73 69 6d  ause, but a [sim
25bd0 70 6c 65 20 53 45 4c 45 43 54 5d 20 74 68 61 74  ple SELECT] that
25be0 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 20 20 20   consists of.   
25bf0 20 6a 75 73 74 20 61 20 5b 56 41 4c 55 45 53 5d   just a [VALUES]
25c00 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62   clause cannot b
25c10 65 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  e preceded by a 
25c20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2e 0a 3c  [WITH] clause..<
25c30 6c 69 3e 54 68 65 20 5b 57 49 54 48 5d 20 63 6c  li>The [WITH] cl
25c40 61 75 73 65 20 6d 75 73 74 20 6f 63 63 75 72 20  ause must occur 
25c50 6f 6e 20 74 68 65 20 66 69 72 73 74 20 53 45 4c  on the first SEL
25c60 45 43 54 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75  ECT of a [compou
25c70 6e 64 20 53 45 4c 45 43 54 5d 2e 0a 20 20 20 20  nd SELECT]..    
25c80 49 74 20 63 61 6e 6e 6f 74 20 66 6f 6c 6c 6f 77  It cannot follow
25c90 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65   a [compound-ope
25ca0 72 61 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e 0a 54 68  rator]..</ul>.Th
25cb0 65 73 65 20 61 6e 64 20 6f 74 68 65 72 20 73 69  ese and other si
25cc0 6d 69 6c 61 72 20 73 79 6e 74 61 78 20 72 65 73  milar syntax res
25cd0 74 72 69 63 74 69 6f 6e 73 20 61 72 65 20 64 65  trictions are de
25ce0 73 63 72 69 62 65 64 20 69 6e 20 74 68 65 20 74  scribed in the t
25cf0 65 78 74 2e 0a 0a 3c 70 3e 54 68 65 20 53 45 4c  ext...<p>The SEL
25d00 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
25d10 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 70 6c 69   the most compli
25d20 63 61 74 65 64 20 63 6f 6d 6d 61 6e 64 20 69 6e  cated command in
25d30 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   the SQL languag
25d40 65 2e 0a 54 6f 20 6d 61 6b 65 20 74 68 65 20 64  e..To make the d
25d50 65 73 63 72 69 70 74 69 6f 6e 20 65 61 73 69 65  escription easie
25d60 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73 6f 6d  r to follow, som
25d70 65 20 6f 66 20 74 68 65 20 70 61 73 73 61 67 65  e of the passage
25d80 73 20 62 65 6c 6f 77 20 64 65 73 63 72 69 62 65  s below describe
25d90 0a 74 68 65 20 77 61 79 20 74 68 65 20 64 61 74  .the way the dat
25da0 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 61 20  a returned by a 
25db0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
25dc0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61   is determined a
25dd0 73 20 61 20 73 65 72 69 65 73 20 6f 66 0a 73 74  s a series of.st
25de0 65 70 73 2e 20 49 74 20 69 73 20 69 6d 70 6f 72  eps. It is impor
25df0 74 61 6e 74 20 74 6f 20 6b 65 65 70 20 69 6e 20  tant to keep in 
25e00 6d 69 6e 64 20 74 68 61 74 20 74 68 69 73 20 69  mind that this i
25e10 73 20 70 75 72 65 6c 79 20 69 6c 6c 75 73 74 72  s purely illustr
25e20 61 74 69 76 65 20 2d 0a 69 6e 20 70 72 61 63 74  ative -.in pract
25e30 69 63 65 20 6e 65 69 74 68 65 72 20 53 51 4c 69  ice neither SQLi
25e40 74 65 20 6e 6f 72 20 61 6e 79 20 6f 74 68 65 72  te nor any other
25e50 20 53 51 4c 20 65 6e 67 69 6e 65 20 69 73 20 72   SQL engine is r
25e60 65 71 75 69 72 65 64 20 74 6f 20 66 6f 6c 6c 6f  equired to follo
25e70 77 20 0a 74 68 69 73 20 6f 72 20 61 6e 79 20 6f  w .this or any o
25e80 74 68 65 72 20 73 70 65 63 69 66 69 63 20 70 72  ther specific pr
25e90 6f 63 65 73 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ocess...<tcl>hd_
25ea0 66 72 61 67 6d 65 6e 74 20 73 69 6d 70 6c 65 73  fragment simples
25eb0 65 6c 65 63 74 20 7b 73 69 6d 70 6c 65 20 53 45  elect {simple SE
25ec0 4c 45 43 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  LECT}</tcl>.<h3>
25ed0 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20 50 72  Simple Select Pr
25ee0 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a 3c  ocessing</h3>..<
25ef0 70 3e 54 68 65 20 63 6f 72 65 20 6f 66 20 61 20  p>The core of a 
25f00 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
25f10 20 69 73 20 61 20 22 73 69 6d 70 6c 65 20 53 45   is a "simple SE
25f20 4c 45 43 54 22 20 73 68 6f 77 6e 20 62 79 20 74  LECT" shown by t
25f30 68 65 0a 5b 73 65 6c 65 63 74 2d 63 6f 72 65 5d  he.[select-core]
25f40 20 61 6e 64 20 5b 73 69 6d 70 6c 65 2d 73 65 6c   and [simple-sel
25f50 65 63 74 2d 73 74 6d 74 5d 20 73 79 6e 74 61 78  ect-stmt] syntax
25f60 20 64 69 61 67 72 61 6d 73 20 62 65 6c 6f 77 2e   diagrams below.
25f70 20 20 0a 49 6e 20 70 72 61 63 74 69 63 65 2c 20    .In practice, 
25f80 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74 61 74  most SELECT stat
25f90 65 6d 65 6e 74 73 20 61 72 65 20 73 69 6d 70 6c  ements are simpl
25fa0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
25fb0 6e 74 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75  nts...<tcl>.Recu
25fc0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
25fd0 61 6d 20 73 69 6d 70 6c 65 2d 73 65 6c 65 63 74  am simple-select
25fe0 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72  -stmt select-cor
25ff0 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 47 65 6e  e.</tcl>..<p>Gen
26000 65 72 61 74 69 6e 67 20 74 68 65 20 72 65 73 75  erating the resu
26010 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c 65 20  lts of a simple 
26020 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74  SELECT.statement
26030 20 69 73 20 70 72 65 73 65 6e 74 65 64 20 61 73   is presented as
26040 20 61 20 66 6f 75 72 20 73 74 65 70 20 70 72 6f   a four step pro
26050 63 65 73 73 20 69 6e 20 74 68 65 20 64 65 73 63  cess in the desc
26060 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a 0a  ription below:..
26070 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  <ol>.  <li> <p>[
26080 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72 6f  FROM clause] pro
26090 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70  cessing: The inp
260a0 75 74 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ut data for the 
260b0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73  simple SELECT is
260c0 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d 69 6e  .       determin
260d0 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20 64 61  ed. The input da
260e0 74 61 20 69 73 20 65 69 74 68 65 72 20 69 6d 70  ta is either imp
260f0 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
26100 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20 20 20   row with 0.    
26110 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20 74     columns (if t
26120 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d 20  here is no FROM 
26130 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20 64 65  clause) or is de
26140 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
26150 46 52 4f 4d 0a 20 20 20 20 20 20 20 63 6c 61 75  FROM.       clau
26160 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 57  se..  <li> <p>[W
26170 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70 72 6f  HERE clause] pro
26180 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70  cessing: The inp
26190 75 74 20 64 61 74 61 20 69 73 20 66 69 6c 74 65  ut data is filte
261a0 72 65 64 20 75 73 69 6e 67 20 74 68 65 20 57 48  red using the WH
261b0 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61 75 73  ERE.       claus
261c0 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 0a  e expression.  .
261d0 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f 55 50    <li> <p>[GROUP
261e0 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20 48 41   BY|GROUP BY, HA
261f0 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c 74 2d  VING and result-
26200 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  column expressio
26210 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 0a  n] processing: .
26220 20 20 20 20 20 20 20 54 68 65 20 73 65 74 20 6f         The set o
26230 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 69 73  f result rows is
26240 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61 67 67   computed by agg
26250 72 65 67 61 74 69 6e 67 20 74 68 65 20 64 61 74  regating the dat
26260 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 20  a according to. 
26270 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55 50 20        any GROUP 
26280 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20 63 61  BY clause and ca
26290 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20 72 65  lculating the re
262a0 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73  sult-set express
262b0 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20 20 20  ions for the.   
262c0 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68 65 20      rows of the 
262d0 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64  filtered input d
262e0 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c 69 3e  ataset.  .  <li>
262f0 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c 44 49   <p>[DISTINCT|DI
26300 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79 77 6f  STINCT/ALL keywo
26310 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20  rd] processing: 
26320 49 66 20 74 68 65 20 71 75 65 72 79 20 69 73 20  If the query is 
26330 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20 20 20  a "SELECT.      
26340 20 44 49 53 54 49 4e 43 54 22 20 71 75 65 72 79   DISTINCT" query
26350 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  , duplicate rows
26360 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
26370 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73  m the set of res
26380 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c 3e 0a  ult rows..</ol>.
26390 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74 77  .<p>There are tw
263a0 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d 70 6c  o types of simpl
263b0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
263c0 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65 20 61  nt - aggregate a
263d0 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67 61 74  nd .non-aggregat
263e0 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20 73 69  e queries. ^A si
263f0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
26400 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67 67 72  ement is an aggr
26410 65 67 61 74 65 20 71 75 65 72 79 20 69 66 0a 69  egate query if.i
26420 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74 68 65  t contains eithe
26430 72 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  r a GROUP BY cla
26440 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20 6d 6f  use or one or mo
26450 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
26460 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20 72 65  ctions.in the re
26470 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68 65 72  sult-set. ^Other
26480 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d 70 6c  wise, if a simpl
26490 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61 69 6e  e SELECT contain
264a0 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65 0a 66  s no aggregate.f
264b0 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52  unctions or a GR
264c0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c 20 69  OUP BY clause, i
264d0 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65  t is a non-aggre
264e0 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c 70 3e  gate query...<p>
264f0 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e 61 74  <b>1. Determinat
26500 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64 61 74  ion of input dat
26510 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65 20 70  a (FROM clause p
26520 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a  rocessing).</b>.
26530 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
26540 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74 63 6c   fromclause</tcl
26550 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72  >.<tcl>hd_keywor
26560 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73 65 7d  ds {FROM clause}
26570 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69  </tcl>..<p>The i
26580 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20 62  nput data used b
26590 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  y a simple SELEC
265a0 54 20 71 75 65 72 79 20 69 73 20 61 20 73 65 74  T query is a set
265b0 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77   of <i>N</i> row
265c0 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f 69 3e  s .each <i>M</i>
265d0 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e 0a 0a   columns wide...
265e0 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52 4f 4d  <p>^(If the FROM
265f0 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74   clause is omitt
26600 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70 6c 65  ed from a simple
26610 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
26620 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69 6e 70  t, then the .inp
26630 75 74 20 64 61 74 61 20 69 73 20 69 6d 70 6c 69  ut data is impli
26640 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65 20 72  citly a single r
26650 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e 73 20  ow zero columns 
26660 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c 69 3e  wide)^ (i.e. <i>
26670 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69 3e 4d  N</i>=1 and.<i>M
26680 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49 66 20  </i>=0)...<p>If 
26690 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  a FROM clause is
266a0 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20   specified, the 
266b0 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20 61 20  data on which a 
266c0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75  simple SELECT qu
266d0 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63 6f 6d  ery.operates com
266e0 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e 65 20  es from the one 
266f0 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 6f  or more tables o
26700 72 20 73 75 62 71 75 65 72 69 65 73 20 28 53 45  r subqueries (SE
26710 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 0a  LECT statements.
26720 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73 29 20  in parenthesis) 
26730 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c 6f 77  specified follow
26740 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65 79  ing the FROM key
26750 77 6f 72 64 2e 20 5e 41 20 73 75 62 71 75 65 72  word. ^A subquer
26760 79 20 73 70 65 63 69 66 69 65 64 0a 69 6e 20 74  y specified.in t
26770 68 65 20 74 61 62 6c 65 2d 6f 72 2d 73 75 62 71  he table-or-subq
26780 75 65 72 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  uery following t
26790 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
267a0 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45  n a .simple SELE
267b0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a  CT statement is.
267c0 68 61 6e 64 6c 65 64 20 61 73 20 69 66 20 69 74  handled as if it
267d0 20 77 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e   was a table con
267e0 74 61 69 6e 69 6e 67 20 74 68 65 20 64 61 74 61  taining the data
267f0 20 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65   returned by exe
26800 63 75 74 69 6e 67 20 74 68 65 0a 73 75 62 71 75  cuting the.subqu
26810 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ery statement. ^
26820 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  Each column of t
26830 68 65 20 73 75 62 71 75 65 72 79 20 68 61 73 20  he subquery has 
26840 74 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63  the.[collation|c
26850 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
26860 65 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69 74 79  e] and [affinity
26870 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  ] of the corresp
26880 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f  onding expressio
26890 6e 0a 69 6e 20 74 68 65 20 73 75 62 71 75 65 72  n.in the subquer
268a0 79 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70  y statement...<p
268b0 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f 6e  >^If there is on
268c0 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  ly a single tabl
268d0 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e  e or subquery in
268e0 20 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65   the FROM.clause
268f0 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 70 75 74  , then the input
26900 20 64 61 74 61 20 75 73 65 64 20 62 79 20 74 68   data used by th
26910 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
26920 6e 74 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e  nt is the conten
26930 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20  ts of the.named 
26940 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 72 65  table. ^If there
26950 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e   is more than on
26960 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  e table or subqu
26970 65 72 79 20 69 6e 20 46 52 4f 4d 20 63 6c 61 75  ery in FROM clau
26980 73 65 0a 74 68 65 6e 20 74 68 65 20 63 6f 6e 74  se.then the cont
26990 65 6e 74 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  ents of all tabl
269a0 65 73 20 61 6e 64 2f 6f 72 20 73 75 62 71 75 65  es and/or subque
269b0 72 69 65 73 0a 61 72 65 20 6a 6f 69 6e 65 64 20  ries.are joined 
269c0 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61  into a single da
269d0 74 61 73 65 74 20 66 6f 72 20 74 68 65 20 73 69  taset for the si
269e0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
269f0 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61 74 65  ement to operate
26a00 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f 77   on..Exactly how
26a10 20 74 68 65 20 64 61 74 61 20 69 73 20 63 6f 6d   the data is com
26a20 62 69 6e 65 64 20 64 65 70 65 6e 64 73 20 6f 6e  bined depends on
26a30 20 74 68 65 20 73 70 65 63 69 66 69 63 20 5b 6a   the specific [j
26a40 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 5d 20 61 6e  oin-operator] an
26a50 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69  d.[join-constrai
26a60 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f 6e 6e  nt] used to conn
26a70 65 63 74 20 74 68 65 20 74 61 62 6c 65 73 20 6f  ect the tables o
26a80 72 20 73 75 62 71 75 65 72 69 65 73 20 74 6f 67  r subqueries tog
26a90 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c 20 6a  ether...<p>All j
26aa0 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65 20 61  oins in SQLite a
26ab0 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  re based on the 
26ac0 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
26ad0 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  t of the left an
26ae0 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  d.right-hand dat
26af0 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f 6c 75  asets. ^The colu
26b00 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72 74 65  mns of the carte
26b10 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64 61 74  sian product dat
26b20 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a 6f 72  aset are, in .or
26b30 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6c  der, all the col
26b40 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74  umns of the left
26b50 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 66 6f  -hand dataset fo
26b60 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 74 68  llowed by all th
26b70 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65  e columns.of the
26b80 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
26b90 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73 20 61  set. ^There is a
26ba0 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61 72 74   row in the cart
26bb0 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64 61  esian product da
26bc0 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62 79 20  taset.formed by 
26bd0 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68 20 75  combining each u
26be0 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f  nique combinatio
26bf0 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f 6d 20  n of a row from 
26c00 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 0a 61  the left-hand .a
26c10 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  nd right-hand da
26c20 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f 74 68  tasets. ^(In oth
26c30 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65  er words, if the
26c40 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61 73   left-hand datas
26c50 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 3c  et consists of.<
26c60 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c  i>N<sub><small>l
26c70 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62  eft</small></sub
26c80 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20 0a 3c  ></i> rows of .<
26c90 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c  i>M<sub><small>l
26ca0 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62  eft</small></sub
26cb0 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 61  ></i> columns, a
26cc0 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  nd the right-han
26cd0 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c 69 3e  d dataset of.<i>
26ce0 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67  N<sub><small>rig
26cf0 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ht</small></sub>
26d00 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 0a 3c 69 3e  </i> rows of.<i>
26d10 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67  M<sub><small>rig
26d20 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ht</small></sub>
26d30 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 74 68  </i> columns, th
26d40 65 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  en the cartesian
26d50 20 70 72 6f 64 75 63 74 20 69 73 20 61 0a 64 61   product is a.da
26d60 74 61 73 65 74 20 6f 66 20 0a 3c 69 3e 4e 3c 73  taset of .<i>N<s
26d70 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f  ub><small>left</
26d80 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 26 74 69 6d  small></sub>&tim
26d90 65 73 3b 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  es;N<sub><small>
26da0 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  right</small></s
26db0 75 62 3e 3c 2f 69 3e 0a 72 6f 77 73 2c 20 65 61  ub></i>.rows, ea
26dc0 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 0a 3c  ch containing .<
26dd0 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c  i>M<sub><small>l
26de0 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62  eft</small></sub
26df0 3e 2b 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72  >+M<sub><small>r
26e00 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  ight</small></su
26e10 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29  b></i> columns.)
26e20 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6a 6f  ^..<p>^If the jo
26e30 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 22  in-operator is "
26e40 43 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22 49 4e  CROSS JOIN", "IN
26e50 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e  NER JOIN", "JOIN
26e60 22 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28 22 2c  " or a comma.(",
26e70 22 29 20 61 6e 64 20 74 68 65 72 65 20 69 73 20  ") and there is 
26e80 6e 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63  no ON or USING c
26e90 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
26ea0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6a 6f  result of the jo
26eb0 69 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74 68 65  in is.simply the
26ec0 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
26ed0 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ct of the left a
26ee0 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  nd right-hand da
26ef0 74 61 73 65 74 73 2e 20 0a 49 66 20 6a 6f 69 6e  tasets. .If join
26f00 2d 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 68  -operator does h
26f10 61 76 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20  ave ON or USING 
26f20 63 6c 61 75 73 65 73 2c 20 74 68 6f 73 65 20 61  clauses, those a
26f30 72 65 20 68 61 6e 64 6c 65 64 20 61 63 63 6f 72  re handled accor
26f40 64 69 6e 67 20 74 6f 0a 74 68 65 20 66 6f 6c 6c  ding to.the foll
26f50 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70 6f 69  owing bullet poi
26f60 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  nts:..<ul>.  <li
26f70 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 72 65 20  > <p>^(If there 
26f80 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20  is an ON clause 
26f90 74 68 65 6e 20 74 68 65 20 4f 4e 20 65 78 70 72  then the ON expr
26fa0 65 73 73 69 6f 6e 20 69 73 0a 20 20 20 20 20 20  ession is.      
26fb0 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
26fc0 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 63  ach row of the c
26fd0 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
26fe0 20 61 73 20 61 20 0a 20 20 20 20 20 20 20 5b 62   as a .       [b
26ff0 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
27000 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f  n]. Only rows fo
27010 72 20 77 68 69 63 68 20 74 68 65 20 65 78 70 72  r which the expr
27020 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
27030 20 74 6f 20 0a 20 20 20 20 20 20 20 74 72 75 65   to .       true
27040 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72   are included fr
27050 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 2e 29  om the dataset.)
27060 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49 66  ^..  <li> <p>^If
27070 20 74 68 65 72 65 20 69 73 20 61 20 55 53 49 4e   there is a USIN
27080 47 20 63 6c 61 75 73 65 0a 20 20 20 20 20 20 20  G clause.       
27090 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65  then each of the
270a0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73 70   column names sp
270b0 65 63 69 66 69 65 64 20 6d 75 73 74 20 65 78 69  ecified must exi
270c0 73 74 20 69 6e 20 74 68 65 20 64 61 74 61 73 65  st in the datase
270d0 74 73 20 74 6f 20 0a 20 20 20 20 20 20 20 62 6f  ts to .       bo
270e0 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  th the left and 
270f0 72 69 67 68 74 20 6f 66 20 74 68 65 20 6a 6f 69  right of the joi
27100 6e 2d 6f 70 65 72 61 74 6f 72 2e 20 5e 28 46 6f  n-operator. ^(Fo
27110 72 20 65 61 63 68 20 70 61 69 72 20 6f 66 20 6e  r each pair of n
27120 61 6d 65 64 0a 20 20 20 20 20 20 20 63 6f 6c 75  amed.       colu
27130 6d 6e 73 2c 20 74 68 65 20 65 78 70 72 65 73 73  mns, the express
27140 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72 68 73  ion "lhs.X = rhs
27150 2e 58 22 20 69 73 20 65 76 61 6c 75 61 74 65 64  .X" is evaluated
27160 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
27170 0a 20 20 20 20 20 20 20 74 68 65 20 63 61 72 74  .       the cart
27180 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61 73  esian product as
27190 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72   a [boolean expr
271a0 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f  ession]. Only ro
271b0 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20  ws for which.   
271c0 20 20 20 20 61 6c 6c 20 73 75 63 68 20 65 78 70      all such exp
271d0 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74  ressions evaluat
271e0 65 73 20 74 6f 20 74 72 75 65 20 61 72 65 20 69  es to true are i
271f0 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  ncluded from the
27200 0a 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 73  .       result s
27210 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d 70  et.)^ ^When comp
27220 61 72 69 6e 67 20 76 61 6c 75 65 73 20 61 73 20  aring values as 
27230 61 20 72 65 73 75 6c 74 20 6f 66 20 61 20 55 53  a result of a US
27240 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 0a  ING clause, the.
27250 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20 72 75         normal ru
27260 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  les for handling
27270 20 61 66 66 69 6e 69 74 69 65 73 2c 20 63 6f 6c   affinities, col
27280 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73  lation sequences
27290 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20 20 20   and NULL.      
272a0 20 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70 61   values in compa
272b0 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e 54  risons apply. ^T
272c0 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74  he column from t
272d0 68 65 20 64 61 74 61 73 65 74 20 6f 6e 20 74 68  he dataset on th
272e0 65 0a 20 20 20 20 20 20 20 6c 65 66 74 2d 68 61  e.       left-ha
272f0 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 6a  nd side of the j
27300 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73 20  oin-operator is 
27310 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
27320 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e   on the left-han
27330 64 0a 20 20 20 20 20 20 20 73 69 64 65 20 6f 66  d.       side of
27340 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
27350 6f 70 65 72 61 74 6f 72 20 28 3d 29 20 66 6f 72  operator (=) for
27360 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
27370 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 20 20   collation .    
27380 20 20 20 73 65 71 75 65 6e 63 65 20 61 6e 64 20     sequence and 
27390 61 66 66 69 6e 69 74 79 20 70 72 65 63 65 64 65  affinity precede
273a0 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70 3e  nce...       <p>
273b0 5e 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f  ^For each pair o
273c0 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69  f columns identi
273d0 66 69 65 64 20 62 79 20 61 20 55 53 49 4e 47 20  fied by a USING 
273e0 63 6c 61 75 73 65 2c 20 74 68 65 20 63 6f 6c 75  clause, the colu
273f0 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d 20 74  mn.       from t
27400 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
27410 74 61 73 65 74 20 69 73 20 6f 6d 69 74 74 65 64  taset is omitted
27420 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65 64   from the joined
27430 20 64 61 74 61 73 65 74 2e 20 5e 54 68 69 73 20   dataset. ^This 
27440 0a 20 20 20 20 20 20 20 69 73 20 74 68 65 20 6f  .       is the o
27450 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62  nly difference b
27460 65 74 77 65 65 6e 20 61 20 55 53 49 4e 47 20 63  etween a USING c
27470 6c 61 75 73 65 20 61 6e 64 20 69 74 73 20 65 71  lause and its eq
27480 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20 20  uivalent ON.    
27490 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a     constraint...
274a0 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74    <li> <p>^(If t
274b0 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f  he NATURAL keywo
274c0 72 64 20 69 73 20 69 6e 20 74 68 65 20 6a 6f 69  rd is in the joi
274d0 6e 2d 6f 70 65 72 61 74 6f 72 20 74 68 65 6e 20  n-operator then 
274e0 61 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c 69 63  an.       implic
274f0 69 74 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  it USING clause 
27500 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  is added to the 
27510 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 73  join-constraints
27520 2e 20 54 68 65 20 69 6d 70 6c 69 63 69 74 0a 20  . The implicit. 
27530 20 20 20 20 20 20 55 53 49 4e 47 20 63 6c 61 75        USING clau
27540 73 65 20 63 6f 6e 74 61 69 6e 73 20 65 61 63 68  se contains each
27550 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   of the column n
27560 61 6d 65 73 20 74 68 61 74 20 61 70 70 65 61 72  ames that appear
27570 20 69 6e 20 62 6f 74 68 0a 20 20 20 20 20 20 20   in both.       
27580 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
27590 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 64 61  ht-hand input da
275a0 74 61 73 65 74 73 2e 29 5e 20 5e 49 66 20 74 68  tasets.)^ ^If th
275b0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
275c0 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 69 6e 70  -hand.       inp
275d0 75 74 20 64 61 74 61 73 65 74 73 20 66 65 61 74  ut datasets feat
275e0 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f  ure no common co
275f0 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65 6e  lumn names, then
27600 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79   the NATURAL key
27610 77 6f 72 64 0a 20 20 20 20 20 20 20 68 61 73 20  word.       has 
27620 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65  no effect on the
27630 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
27640 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20 6f  join. ^A USING o
27650 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79 0a  r ON clause may.
27660 20 20 20 20 20 20 20 6e 6f 74 20 62 65 20 61 64         not be ad
27670 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74 68  ded to a join th
27680 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
27690 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64   NATURAL keyword
276a0 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49  ...  <li> <p>^(I
276b0 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61  f the join-opera
276c0 74 6f 72 20 69 73 20 61 20 22 4c 45 46 54 20 4a  tor is a "LEFT J
276d0 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20 4f 55  OIN" or "LEFT OU
276e0 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65 6e 0a  TER JOIN", then.
276f0 20 20 20 20 20 20 20 61 66 74 65 72 0a 20 20 20         after.   
27700 20 20 20 20 74 68 65 20 4f 4e 20 6f 72 20 55 53      the ON or US
27710 49 4e 47 20 66 69 6c 74 65 72 69 6e 67 20 63 6c  ING filtering cl
27720 61 75 73 65 73 20 68 61 76 65 20 62 65 65 6e 20  auses have been 
27730 61 70 70 6c 69 65 64 2c 20 61 6e 20 65 78 74 72  applied, an extr
27740 61 20 72 6f 77 20 69 73 20 0a 20 20 20 20 20 20  a row is .      
27750 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6f 75   added to the ou
27760 74 70 75 74 20 66 6f 72 20 65 61 63 68 20 72 6f  tput for each ro
27770 77 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  w in the origina
27780 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e 70 75  l left-hand inpu
27790 74 20 0a 20 20 20 20 20 20 20 64 61 74 61 73 65  t .       datase
277a0 74 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  t that correspon
277b0 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20 61 74  ds to no rows at
277c0 20 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f 6d 70   all in the comp
277d0 6f 73 69 74 65 0a 20 20 20 20 20 20 20 64 61 74  osite.       dat
277e0 61 73 65 74 20 28 69 66 20 61 6e 79 29 2e 29 5e  aset (if any).)^
277f0 20 5e 54 68 65 20 61 64 64 65 64 20 72 6f 77 73   ^The added rows
27800 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20 76 61   contain NULL va
27810 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  lues in the colu
27820 6d 6e 73 0a 20 20 20 20 20 20 20 74 68 61 74 20  mns.       that 
27830 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 63  would normally c
27840 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20 63 6f  ontain values co
27850 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 72 69  pied from the ri
27860 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 0a 20  ght-hand input. 
27870 20 20 20 20 20 20 64 61 74 61 73 65 74 2e 20 20        dataset.  
27880 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65  .</ul>..<p>^(Whe
27890 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74 77 6f 20  n more than two 
278a0 74 61 62 6c 65 73 20 61 72 65 20 6a 6f 69 6e 65  tables are joine
278b0 64 20 74 6f 67 65 74 68 65 72 20 61 73 20 70 61  d together as pa
278c0 72 74 20 6f 66 20 61 20 46 52 4f 4d 20 63 6c 61  rt of a FROM cla
278d0 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20 6f 70  use,.the join op
278e0 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  erations are pro
278f0 63 65 73 73 65 64 20 69 6e 20 6f 72 64 65 72 20  cessed in order 
27900 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
27910 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a 77 6f  ht. In other .wo
27920 72 64 73 2c 20 74 68 65 20 46 52 4f 4d 20 63 6c  rds, the FROM cl
27930 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f 70 2d  ause (A join-op-
27940 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29  1 B join-op-2 C)
27950 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 73 20   is computed as 
27960 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42  .((A join-op-1 B
27970 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 2e 29  ) join-op-2 C).)
27980 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
27990 65 6e 74 20 63 72 6f 73 73 6a 6f 69 6e 20 7b 74  ent crossjoin {t
279a0 72 65 61 74 73 20 74 68 65 20 43 52 4f 53 53 20  reats the CROSS 
279b0 4a 4f 49 4e 20 6f 70 65 72 61 74 6f 72 20 73 70  JOIN operator sp
279c0 65 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e 0a 3c  ecially}</tcl>.<
279d0 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65 3a 20  p><b>Side note: 
279e0 53 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  Special handling
279f0 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 2e 3c   of CROSS JOIN.<
27a00 2f 62 3e 0a 5e 54 68 65 72 65 20 69 73 20 6e 6f  /b>.^There is no
27a10 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
27a20 65 65 6e 20 74 68 65 20 22 49 4e 4e 45 52 20 4a  een the "INNER J
27a30 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64  OIN", "JOIN" and
27a40 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72 61 74   "," join.operat
27a50 6f 72 73 2e 20 54 68 65 79 20 61 72 65 20 63 6f  ors. They are co
27a60 6d 70 6c 65 74 65 6c 79 20 69 6e 74 65 72 63 68  mpletely interch
27a70 61 6e 67 65 61 62 6c 65 20 69 6e 20 53 51 4c 69  angeable in SQLi
27a80 74 65 2e 0a 5e 28 54 68 65 20 22 43 52 4f 53 53  te..^(The "CROSS
27a90 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72   JOIN" join oper
27aa0 61 74 6f 72 20 70 72 6f 64 75 63 65 73 20 74 68  ator produces th
27ab0 65 20 73 61 6d 65 20 72 65 73 75 6c 74 20 61 73  e same result as
27ac0 20 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a 4f 49   the ."INNER JOI
27ad0 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22  N", "JOIN" and "
27ae0 2c 22 20 6f 70 65 72 61 74 6f 72 73 29 5e 2c 20  ," operators)^, 
27af0 62 75 74 20 69 73 20 0a 5b 43 52 4f 53 53 20 4a  but is .[CROSS J
27b00 4f 49 4e 7c 68 61 6e 64 6c 65 64 20 64 69 66 66  OIN|handled diff
27b10 65 72 65 6e 74 6c 79 20 62 79 20 74 68 65 20 71  erently by the q
27b20 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 5d 0a  uery optimizer].
27b30 69 6e 20 74 68 61 74 20 69 74 20 70 72 65 76 65  in that it preve
27b40 6e 74 73 20 74 68 65 20 71 75 65 72 79 20 6f 70  nts the query op
27b50 74 69 6d 69 7a 65 72 20 66 72 6f 6d 20 72 65 6f  timizer from reo
27b60 72 64 65 72 69 6e 67 0a 74 68 65 20 74 61 62 6c  rdering.the tabl
27b70 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2e 20  es in the join. 
27b80 20 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   An application 
27b90 70 72 6f 67 72 61 6d 6d 65 72 20 63 61 6e 20 75  programmer can u
27ba0 73 65 20 74 68 65 20 43 52 4f 53 53 20 4a 4f 49  se the CROSS JOI
27bb0 4e 20 0a 6f 70 65 72 61 74 6f 72 20 74 6f 20 64  N .operator to d
27bc0 69 72 65 63 74 6c 79 20 69 6e 66 6c 75 65 6e 63  irectly influenc
27bd0 65 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20  e the algorithm 
27be0 74 68 61 74 20 69 73 20 63 68 6f 73 65 6e 20 74  that is chosen t
27bf0 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a 74 68 65 20  o implement.the 
27c00 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
27c10 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67 20 43  .  Avoid using C
27c20 52 4f 53 53 20 4a 4f 49 4e 20 65 78 63 65 70 74  ROSS JOIN except
27c30 20 69 6e 20 73 70 65 63 69 66 69 63 20 73 69 74   in specific sit
27c40 75 61 74 69 6f 6e 73 20 0a 77 68 65 72 65 20 6d  uations .where m
27c50 61 6e 75 61 6c 20 63 6f 6e 74 72 6f 6c 20 6f 66  anual control of
27c60 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
27c70 69 7a 65 72 20 69 73 20 64 65 73 69 72 65 64 2e  izer is desired.
27c80 20 20 41 76 6f 69 64 20 75 73 69 6e 67 0a 43 52    Avoid using.CR
27c90 4f 53 53 20 4a 4f 49 4e 20 65 61 72 6c 79 20 69  OSS JOIN early i
27ca0 6e 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e  n the developmen
27cb0 74 20 6f 66 20 61 6e 20 61 70 70 6c 69 63 61 74  t of an applicat
27cc0 69 6f 6e 20 61 73 20 64 6f 69 6e 67 20 73 6f 20  ion as doing so 
27cd0 69 73 0a 61 20 3c 61 20 68 72 65 66 3d 22 68 74  is.a <a href="ht
27ce0 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f 63 67 69 2f  tp://c2.com/cgi/
27cf0 77 69 6b 69 3f 50 72 65 6d 61 74 75 72 65 4f 70  wiki?PrematureOp
27d00 74 69 6d 69 7a 61 74 69 6f 6e 22 3e 70 72 65 6d  timization">prem
27d10 61 74 75 72 65 0a 6f 70 74 69 6d 69 7a 61 74 69  ature.optimizati
27d20 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65 20 73 70 65  on</a>.  The spe
27d30 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66  cial handling of
27d40 20 43 52 4f 53 53 20 4a 4f 49 4e 20 69 73 20 61   CROSS JOIN is a
27d50 6e 20 53 51 4c 69 74 65 2d 73 70 65 63 69 66 69  n SQLite-specifi
27d60 63 0a 66 65 61 74 75 72 65 20 61 6e 64 20 69 73  c.feature and is
27d70 20 6e 6f 74 20 61 20 70 61 72 74 20 6f 66 20 73   not a part of s
27d80 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 20 20 20  tandard SQL..   
27d90 20 20 20 20 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72      ..<tcl>hd_fr
27da0 61 67 6d 65 6e 74 20 77 68 65 72 65 63 6c 61 75  agment whereclau
27db0 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64  se</tcl>.<tcl>hd
27dc0 5f 6b 65 79 77 6f 72 64 73 20 7b 57 48 45 52 45  _keywords {WHERE
27dd0 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 3c   clause}</tcl>.<
27de0 70 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20 63 6c  p><b>2. WHERE cl
27df0 61 75 73 65 20 66 69 6c 74 65 72 69 6e 67 2e 3c  ause filtering.<
27e00 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61 20 57  /b>..<p>^(If a W
27e10 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 73  HERE clause is s
27e20 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 57 48  pecified, the WH
27e30 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ERE expression i
27e40 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
27e50 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65  .each row in the
27e60 20 69 6e 70 75 74 20 64 61 74 61 20 61 73 20 61   input data as a
27e70 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
27e80 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73  sion]. Only rows
27e90 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 57   for which the.W
27ea0 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
27eb0 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
27ec0 20 74 6f 20 74 72 75 65 20 61 72 65 20 69 6e 63   to true are inc
27ed0 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64  luded from the d
27ee0 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a 63 6f  ataset before.co
27ef0 6e 74 69 6e 75 69 6e 67 2e 29 5e 20 20 52 6f 77  ntinuing.)^  Row
27f00 73 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66  s are excluded f
27f10 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 69  rom the result i
27f20 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  f the WHERE clau
27f30 73 65 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20  se.evaluates to 
27f40 65 69 74 68 65 72 20 66 61 6c 73 65 20 6f 72 20  either false or 
27f50 4e 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f 72 20 61 20  NULL...<p>For a 
27f60 4a 4f 49 4e 20 6f 72 20 49 4e 4e 45 52 20 4a 4f  JOIN or INNER JO
27f70 49 4e 20 6f 72 20 43 52 4f 53 53 20 4a 4f 49 4e  IN or CROSS JOIN
27f80 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 64 69  , there is no di
27f90 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
27fa0 20 0a 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 65   .a constraint e
27fb0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
27fc0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 6e   WHERE clause an
27fd0 64 20 6f 6e 65 20 69 6e 20 74 68 65 20 4f 4e 20  d one in the ON 
27fe0 63 6c 61 75 73 65 2e 20 20 48 6f 77 65 76 65 72  clause.  However
27ff0 2c 0a 66 6f 72 20 61 20 4c 45 46 54 20 4a 4f 49  ,.for a LEFT JOI
28000 4e 20 6f 72 20 4c 45 46 54 20 4f 55 54 45 52 20  N or LEFT OUTER 
28010 4a 4f 49 4e 2c 20 74 68 65 20 64 69 66 66 65 72  JOIN, the differ
28020 65 6e 63 65 20 69 73 20 76 65 72 79 20 69 6d 70  ence is very imp
28030 6f 72 74 61 6e 74 2e 20 20 0a 49 6e 20 61 20 4c  ortant.  .In a L
28040 45 46 54 20 4a 4f 49 4e 2c 0a 74 68 65 20 65 78  EFT JOIN,.the ex
28050 74 72 61 20 4e 55 4c 4c 20 72 6f 77 20 66 6f 72  tra NULL row for
28060 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
28070 74 61 62 6c 65 20 69 73 20 61 64 64 65 64 20 61  table is added a
28080 66 74 65 72 20 4f 4e 20 63 6c 61 75 73 65 20 70  fter ON clause p
28090 72 6f 63 65 73 73 69 6e 67 0a 62 75 74 20 62 65  rocessing.but be
280a0 66 6f 72 65 20 57 48 45 52 45 20 63 6c 61 75 73  fore WHERE claus
280b0 65 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 41  e processing.  A
280c0 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66 20 74   constraint of t
280d0 68 65 20 66 6f 72 6d 20 22 6c 65 66 74 2e 78 3d  he form "left.x=
280e0 72 69 67 68 74 2e 79 22 0a 69 6e 20 61 6e 20 4f  right.y".in an O
280f0 4e 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 74 68  N clause will th
28100 65 72 65 66 6f 72 65 20 61 6c 6c 6f 77 20 74 68  erefore allow th
28110 72 6f 75 67 68 20 74 68 65 20 61 64 64 65 64 20  rough the added 
28120 61 6c 6c 2d 4e 55 4c 4c 20 72 6f 77 73 20 6f 66  all-NULL rows of
28130 20 74 68 65 0a 72 69 67 68 74 20 74 61 62 6c 65   the.right table
28140 2e 20 20 42 75 74 20 69 66 20 74 68 61 74 20 73  .  But if that s
28150 61 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  ame constraint i
28160 73 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63  s in the WHERE c
28170 6c 61 75 73 65 20 61 20 4e 55 4c 4c 20 69 6e 0a  lause a NULL in.
28180 22 72 69 67 68 74 2e 79 22 20 77 69 6c 6c 20 70  "right.y" will p
28190 72 65 76 65 6e 74 20 74 68 65 20 65 78 70 72 65  revent the expre
281a0 73 73 69 6f 6e 20 22 6c 65 66 74 2e 78 3d 72 69  ssion "left.x=ri
281b0 67 68 74 2e 79 22 20 66 72 6f 6d 20 62 65 69 6e  ght.y" from bein
281c0 67 20 74 72 75 65 2c 20 61 6e 64 0a 74 68 75 73  g true, and.thus
281d0 20 65 78 63 6c 75 64 65 20 74 68 61 74 20 72 6f   exclude that ro
281e0 77 20 66 72 6f 6d 20 74 68 65 20 6f 75 74 70 75  w from the outpu
281f0 74 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47 65 6e  t...<p><b>3. Gen
28200 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  eration of the s
28210 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
28220 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66  s.</b>.<tcl>hd_f
28230 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74 73 65  ragment resultse
28240 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  t</tcl>.<tcl>hd_
28250 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75 6c 74  keywords {result
28260 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73  -set expressions
28270 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f 74 63  } {GROUP BY}</tc
28280 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65 20  l>..<p>Once the 
28290 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f 6d 20  input data from 
282a0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
282b0 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65 72 65  has been filtere
282c0 64 20 62 79 20 74 68 65 0a 57 48 45 52 45 20 63  d by the.WHERE c
282d0 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
282e0 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65 20 73   (if any), the s
282f0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
28300 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65  s for the simple
28310 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63 61 6c   .SELECT are cal
28320 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74 6c 79  culated. Exactly
28330 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e   how this is don
28340 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68 65  e depends on whe
28350 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c 65 20  ther the simple 
28360 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20 61 67  .SELECT is an ag
28370 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e 2d 61  gregate or non-a
28380 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2c 20  ggregate query, 
28390 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  and whether or n
283a0 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20 63 6c  ot a GROUP.BY cl
283b0 61 75 73 65 20 77 61 73 20 73 70 65 63 69 66 69  ause was specifi
283c0 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c 69 73  ed...<p> The lis
283d0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
283e0 20 62 65 74 77 65 65 6e 20 74 68 65 20 53 45 4c   between the SEL
283f0 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65 79  ECT and FROM key
28400 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e 20 61  words is known a
28410 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65 78 70  s.the result exp
28420 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20 20 5e  ression list.  ^
28430 49 66 20 61 20 72 65 73 75 6c 74 20 65 78 70 72  If a result expr
28440 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 73 70  ession is the sp
28450 65 63 69 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ecial expression
28460 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f  ."*" then all co
28470 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 70  lumns in the inp
28480 75 74 20 64 61 74 61 20 61 72 65 20 73 75 62 73  ut data are subs
28490 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 61 74  tituted for that
284a0 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e 2e   one expression.
284b0 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72 65 73  .^(If the expres
284c0 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c 69 61  sion is the alia
284d0 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20  s of a table or 
284e0 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
284f0 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f 6c 6c  FROM clause.foll
28500 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74 68 65  owed by ".*" the
28510 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 66 72  n all columns fr
28520 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62  om the named tab
28530 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 61  le or subquery a
28540 72 65 0a 73 75 62 73 74 69 74 75 74 65 64 20 66  re.substituted f
28550 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20 65 78  or the single ex
28560 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28 49 74  pression.)^ ^(It
28570 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
28580 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22 61 6c  use a "*" or."al
28590 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f  ias.*" expressio
285a0 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74  n in any context
285b0 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 65   other than a re
285c0 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
285d0 6c 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73 20  list.)^.^(It is 
285e0 61 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20 74 6f  also an error to
285f0 20 75 73 65 20 61 20 22 2a 22 20 6f 72 20 22 61   use a "*" or "a
28600 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69  lias.*" expressi
28610 6f 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 53  on in a simple S
28620 45 4c 45 43 54 0a 71 75 65 72 79 20 74 68 61 74  ELECT.query that
28630 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61   does not have a
28640 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e 0a   FROM clause.)^.
28650 0a 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62 65  .<p> ^(The numbe
28660 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
28670 74 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65  the rows returne
28680 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45  d by a simple SE
28690 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69  LECT statement.i
286a0 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6e  s equal to the n
286b0 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
286c0 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  ions in the resu
286d0 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
286e0 73 74 20 61 66 74 65 72 0a 73 75 62 73 74 69 74  st after.substit
286f0 75 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20 61  ution of * and a
28700 6c 69 61 73 2e 2a 20 65 78 70 72 65 73 73 69 6f  lias.* expressio
28710 6e 73 2e 29 5e 20 45 61 63 68 20 72 65 73 75 6c  ns.)^ Each resul
28720 74 20 72 6f 77 20 69 73 20 63 61 6c 63 75 6c 61  t row is calcula
28730 74 65 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e  ted by.evaluatin
28740 67 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  g the expression
28750 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  s in the result 
28760 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
28770 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f 20  with respect to 
28780 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a.single row of 
28790 69 6e 70 75 74 20 64 61 74 61 20 6f 72 2c 20 66  input data or, f
287a0 6f 72 20 61 67 67 72 65 67 61 74 65 20 71 75 65  or aggregate que
287b0 72 69 65 73 2c 20 77 69 74 68 20 72 65 73 70 65  ries, with respe
287c0 63 74 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f 66  ct to a group.of
287d0 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c   rows...<ul>.  <
287e0 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45  li><p>^If the SE
287f0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
28800 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65  s <b>a non-aggre
28810 67 61 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20  gate query</b>, 
28820 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65  then .    each e
28830 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
28840 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
28850 6f 6e 20 6c 69 73 74 20 69 73 20 65 76 61 6c 75  on list is evalu
28860 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
28870 77 20 69 6e 0a 20 20 20 20 74 68 65 20 64 61 74  w in.    the dat
28880 61 73 65 74 20 66 69 6c 74 65 72 65 64 20 62 79  aset filtered by
28890 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
288a0 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  e...  <li><p>^If
288b0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
288c0 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61  ement is <b>an a
288d0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
288e0 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50 0a 20  ithout a GROUP. 
288f0 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65     BY</b> clause
28900 2c 20 74 68 65 6e 20 65 61 63 68 20 61 67 67 72  , then each aggr
28910 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
28920 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73   in the result-s
28930 65 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75  et is .    evalu
28940 61 74 65 64 20 6f 6e 63 65 20 61 63 72 6f 73 73  ated once across
28950 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
28960 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d 61  set. ^Each non-a
28970 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
28980 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65 20 72  ion.    in the r
28990 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65 76 61  esult-set is eva
289a0 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20  luated once for 
289b0 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73  an arbitrarily s
289c0 65 6c 65 63 74 65 64 20 72 6f 77 20 6f 66 0a 20  elected row of. 
289d0 20 20 20 74 68 65 20 64 61 74 61 73 65 74 2e 20     the dataset. 
289e0 5e 54 68 65 20 73 61 6d 65 20 61 72 62 69 74 72  ^The same arbitr
289f0 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72  arily selected r
28a00 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 65  ow is used for e
28a10 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67 72  ach.    non-aggr
28a20 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
28a30 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 64 61  . ^Or, if the da
28a40 74 61 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 7a  taset contains z
28a50 65 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 0a  ero rows, then .
28a60 20 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67 67      each non-agg
28a70 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
28a80 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61  n is evaluated a
28a90 67 61 69 6e 73 74 20 61 20 72 6f 77 20 63 6f 6e  gainst a row con
28aa0 73 69 73 74 69 6e 67 0a 20 20 20 20 65 6e 74 69  sisting.    enti
28ab0 72 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61 6c  rely of NULL val
28ac0 75 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68 65  ues...   <p>^The
28ad0 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
28ae0 65 73 75 6c 74 2d 73 65 74 20 64 61 74 61 20 63  esult-set data c
28af0 72 65 61 74 65 64 20 62 79 20 65 76 61 6c 75 61  reated by evalua
28b00 74 69 6e 67 20 74 68 65 20 61 67 67 72 65 67 61  ting the aggrega
28b10 74 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d 61  te.    and non-a
28b20 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
28b30 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  ions in the resu
28b40 6c 74 2d 73 65 74 20 66 6f 72 6d 73 20 74 68 65  lt-set forms the
28b50 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20 20   result of an.  
28b60 20 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72    aggregate quer
28b70 79 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55  y without a GROU
28b80 50 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 41 6e  P BY clause. ^An
28b90 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
28ba0 20 77 69 74 68 6f 75 74 20 61 0a 20 20 20 20 47   without a.    G
28bb0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61  ROUP BY clause a
28bc0 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 65 78  lways returns ex
28bd0 61 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f 66  actly one row of
28be0 20 64 61 74 61 2c 20 65 76 65 6e 20 69 66 20 74   data, even if t
28bf0 68 65 72 65 20 61 72 65 0a 20 20 20 20 7a 65 72  here are.    zer
28c00 6f 20 72 6f 77 73 20 6f 66 20 69 6e 70 75 74 20  o rows of input 
28c10 64 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  data...  <li><p>
28c20 5e 28 49 66 20 74 68 65 20 53 45 4c 45 43 54 20  ^(If the SELECT 
28c30 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e  statement is <b>
28c40 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
28c50 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a  ry with a GROUP.
28c60 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73      BY</b> claus
28c70 65 2c 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20  e, then each of 
28c80 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
28c90 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
28ca0 74 20 6f 66 20 74 68 65 0a 20 20 20 20 47 52 4f  t of the.    GRO
28cb0 55 50 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  UP BY clause is 
28cc0 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61  evaluated for ea
28cd0 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 64 61  ch row of the da
28ce0 74 61 73 65 74 2e 20 45 61 63 68 20 72 6f 77 0a  taset. Each row.
28cf0 20 20 20 20 69 73 20 74 68 65 6e 20 61 73 73 69      is then assi
28d00 67 6e 65 64 20 74 6f 20 61 20 22 67 72 6f 75 70  gned to a "group
28d10 22 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72  " based on the r
28d20 65 73 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f 72  esults; rows for
28d30 20 77 68 69 63 68 0a 20 20 20 20 74 68 65 20 72   which.    the r
28d40 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61  esults of evalua
28d50 74 69 6e 67 20 74 68 65 20 47 52 4f 55 50 20 42  ting the GROUP B
28d60 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  Y expressions ar
28d70 65 20 74 68 65 20 73 61 6d 65 20 67 65 74 0a 20  e the same get. 
28d80 20 20 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74     assigned to t
28d90 68 65 20 73 61 6d 65 20 67 72 6f 75 70 2e 29 5e  he same group.)^
28da0 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
28db0 65 73 20 6f 66 20 67 72 6f 75 70 69 6e 67 20 72  es of grouping r
28dc0 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20 76  ows, NULL .    v
28dd0 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
28de0 65 72 65 64 20 65 71 75 61 6c 2e 20 5e 54 68 65  ered equal. ^The
28df0 20 75 73 75 61 6c 20 72 75 6c 65 73 20 66 6f 72   usual rules for
28e00 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65   [collation|sele
28e10 63 74 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c 6c  cting a.    coll
28e20 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20  ation sequence] 
28e30 77 69 74 68 20 77 68 69 63 68 20 74 6f 20 63 6f  with which to co
28e40 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c 75 65  mpare text value
28e50 73 20 61 70 70 6c 79 20 77 68 65 6e 20 65 76 61  s apply when eva
28e60 6c 75 61 74 69 6e 67 0a 20 20 20 20 65 78 70 72  luating.    expr
28e70 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f  essions in a GRO
28e80 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 20 5e  UP BY clause.  ^
28e90 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  The expressions 
28ea0 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59 20  in the GROUP BY 
28eb0 63 6c 61 75 73 65 0a 20 20 20 20 64 6f 20 3c 65  clause.    do <e
28ec0 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20  m>not</em> have 
28ed0 74 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e  to be expression
28ee0 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
28ef0 20 74 68 65 20 72 65 73 75 6c 74 2e 20 5e 54 68   the result. ^Th
28f00 65 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e  e.    expression
28f10 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20  s in a GROUP BY 
28f20 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74 20 62  clause may not b
28f30 65 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  e aggregate expr
28f40 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70  essions...    <p
28f50 3e 5e 28 49 66 20 61 20 48 41 56 49 4e 47 20 63  >^(If a HAVING c
28f60 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
28f70 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61  ed, it is evalua
28f80 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63  ted once for eac
28f90 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f 66 20  h group .    of 
28fa0 72 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c 65  rows as a [boole
28fb0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  an expression]. 
28fc0 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
28fd0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 0a   evaluating the.
28fe0 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61 75 73      HAVING claus
28ff0 65 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 20  e is false, the 
29000 67 72 6f 75 70 20 69 73 20 64 69 73 63 61 72 64  group is discard
29010 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 48 41  ed.)^ ^If the HA
29020 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 0a 20  VING clause is. 
29030 20 20 20 61 6e 20 61 67 67 72 65 67 61 74 65 20     an aggregate 
29040 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69  expression, it i
29050 73 20 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f  s evaluated acro
29060 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  ss all rows in t
29070 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20 20  he group. ^If.  
29080 20 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73    a HAVING claus
29090 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65  e is a non-aggre
290a0 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  gate expression,
290b0 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64   it is evaluated
290c0 20 77 69 74 68 20 72 65 73 70 65 63 74 0a 20 20   with respect.  
290d0 20 20 74 6f 20 61 6e 20 61 72 62 69 74 72 61 72    to an arbitrar
290e0 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77  ily selected row
290f0 20 66 72 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e   from the group.
29100 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78    ^The HAVING ex
29110 70 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20 20  pression may.   
29120 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73   refer to values
29130 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61 74 65  , even aggregate
29140 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74   functions, that
29150 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20   are not in the 
29160 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20  result.</p>..   
29170 20 3c 70 3e 5e 45 61 63 68 20 65 78 70 72 65 73   <p>^Each expres
29180 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
29190 6c 74 2d 73 65 74 20 69 73 20 74 68 65 6e 20 65  lt-set is then e
291a0 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
291b0 72 20 65 61 63 68 0a 20 20 20 20 67 72 6f 75 70  r each.    group
291c0 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20 74 68   of rows. ^If th
291d0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
291e0 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78 70  an aggregate exp
291f0 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a  ression, it is .
29200 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 61 63      evaluated ac
29210 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e  ross all rows in
29220 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68   the group. ^Oth
29230 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 65 76  erwise, it is ev
29240 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a  aluated against.
29250 20 20 20 20 61 20 73 69 6e 67 6c 65 20 61 72 62      a single arb
29260 69 74 72 61 72 69 6c 79 20 63 68 6f 73 65 6e 20  itrarily chosen 
29270 72 6f 77 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  row from within 
29280 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 74  the group. ^If t
29290 68 65 72 65 20 69 73 20 6d 6f 72 65 0a 20 20 20  here is more.   
292a0 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67   than one non-ag
292b0 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
292c0 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
292d0 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73  -set, then all s
292e0 75 63 68 0a 20 20 20 20 65 78 70 72 65 73 73 69  uch.    expressi
292f0 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ons are evaluate
29300 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 72  d for the same r
29310 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63  ow...    <p>^Eac
29320 68 20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75 74  h group of input
29330 20 64 61 74 61 73 65 74 20 72 6f 77 73 20 63 6f   dataset rows co
29340 6e 74 72 69 62 75 74 65 73 20 61 20 73 69 6e 67  ntributes a sing
29350 6c 65 20 72 6f 77 20 74 6f 20 74 68 65 20 0a 20  le row to the . 
29360 20 20 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74     set of result
29370 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74 20   rows. ^Subject 
29380 74 6f 20 66 69 6c 74 65 72 69 6e 67 20 61 73 73  to filtering ass
29390 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
293a0 20 44 49 53 54 49 4e 43 54 0a 20 20 20 20 6b 65   DISTINCT.    ke
293b0 79 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62 65  yword, the numbe
293c0 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  r of rows return
293d0 65 64 20 62 79 20 61 6e 20 61 67 67 72 65 67 61  ed by an aggrega
293e0 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
293f0 47 52 4f 55 50 0a 20 20 20 20 42 59 20 63 6c 61  GROUP.    BY cla
29400 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 20  use is the same 
29410 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
29420 20 67 72 6f 75 70 73 20 6f 66 20 72 6f 77 73 20   groups of rows 
29430 70 72 6f 64 75 63 65 64 20 62 79 20 61 70 70 6c  produced by appl
29440 79 69 6e 67 0a 20 20 20 20 74 68 65 20 47 52 4f  ying.    the GRO
29450 55 50 20 42 59 20 61 6e 64 20 48 41 56 49 4e 47  UP BY and HAVING
29460 20 63 6c 61 75 73 65 73 20 74 6f 20 74 68 65 20   clauses to the 
29470 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64  filtered input d
29480 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  ataset..</ul>..<
29490 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20  p><b>4. Removal 
294a0 6f 66 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  of duplicate row
294b0 73 20 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63  s (DISTINCT proc
294c0 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63  essing).</b>.<tc
294d0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69  l>hd_fragment di
294e0 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63  stinct</tcl>.<tc
294f0 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44  l>hd_keywords {D
29500 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a  ISTINCT}</tcl>..
29510 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41  <p>^One of the A
29520 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b  LL or DISTINCT k
29530 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c  eywords may foll
29540 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65  ow the SELECT ke
29550 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70  yword in a .simp
29560 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
29570 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 73 69 6d  ent. ^If the sim
29580 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61 20  ple SELECT is a 
29590 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e  SELECT ALL, then
295a0 20 74 68 65 0a 65 6e 74 69 72 65 20 73 65 74 20   the.entire set 
295b0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61  of result rows a
295c0 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  re returned by t
295d0 68 65 20 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e  he SELECT. ^If n
295e0 65 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49  either ALL or.DI
295f0 53 54 49 4e 43 54 20 61 72 65 20 70 72 65 73 65  STINCT are prese
29600 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68  nt, then the beh
29610 61 76 69 6f 72 20 69 73 20 61 73 20 69 66 20 41  avior is as if A
29620 4c 4c 20 77 65 72 65 20 73 70 65 63 69 66 69 65  LL were specifie
29630 64 2e 20 0a 5e 49 66 20 74 68 65 20 73 69 6d 70  d. .^If the simp
29640 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53  le SELECT is a S
29650 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 2c 20  ELECT DISTINCT, 
29660 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65 20 72  then duplicate r
29670 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 0a  ows are removed.
29680 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20  from the set of 
29690 72 65 73 75 6c 74 20 72 6f 77 73 20 62 65 66 6f  result rows befo
296a0 72 65 20 69 74 20 69 73 20 72 65 74 75 72 6e 65  re it is returne
296b0 64 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70  d. ^For the purp
296c0 6f 73 65 73 20 6f 66 0a 64 65 74 65 63 74 69 6e  oses of.detectin
296d0 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  g duplicate rows
296e0 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75 65  , two NULL value
296f0 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
29700 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e 54   to be equal. ^T
29710 68 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20  he.normal rules 
29720 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20  for selecting a 
29730 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
29740 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ce to compare te
29750 78 74 20 76 61 6c 75 65 73 20 77 69 74 68 0a 61  xt values with.a
29760 70 70 6c 79 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f  pply...<tcl>.hd_
29770 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e  fragment compoun
29780 64 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  d {compound sele
29790 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 71 75  ct} {compound qu
297a0 65 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 53  ery} {compound S
297b0 45 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f 75 6e 64  ELECT} {compound
297c0 20 53 45 4c 45 43 54 73 7d 0a 3c 2f 74 63 6c 3e   SELECTs}.</tcl>
297d0 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53 65  .<h3>Compound Se
297e0 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74 73 3c  lect Statements<
297f0 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72 20  /h3>..<p>Two or 
29800 6d 6f 72 65 20 5b 73 69 6d 70 6c 65 20 53 45 4c  more [simple SEL
29810 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ECT] statements 
29820 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74 65 64  may be connected
29830 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66 6f 72   together to for
29840 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  m.a compound SEL
29850 45 43 54 20 75 73 69 6e 67 20 74 68 65 20 55 4e  ECT using the UN
29860 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20  ION, UNION ALL, 
29870 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45 58 43  INTERSECT or EXC
29880 45 50 54 20 6f 70 65 72 61 74 6f 72 2c 0a 61 73  EPT operator,.as
29890 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f   shown by the fo
298a0 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a  llowing diagram:
298b0 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76  ..<tcl>.Recursiv
298c0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
298d0 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74 2d 73  ompound-select-s
298e0 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
298f0 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  In a compound SE
29900 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f  LECT, all the co
29910 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54  nstituent SELECT
29920 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74 68  s must return th
29930 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72 20 6f  e same .number o
29940 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  f result columns
29950 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d 70 6f 6e  . ^As the compon
29960 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70 6f 75  ents of a compou
29970 6e 64 20 53 45 4c 45 43 54 20 6d 75 73 74 0a 62  nd SELECT must.b
29980 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
29990 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68 65 79  statements, they
299a0 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e   may not contain
299b0 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72 20 5b   [ORDER BY] or [
299c0 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 2e 0a  LIMIT] clauses..
299d0 5e 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64 20  ^[ORDER BY] and 
299e0 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 20  [LIMIT] clauses 
299f0 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72 20 61  may only occur a
29a00 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
29a10 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64   entire compound
29a20 0a 53 45 4c 45 43 54 2c 20 61 6e 64 20 74 68 65  .SELECT, and the
29a30 6e 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 69  n only if the fi
29a40 6e 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  nal element of t
29a50 68 65 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20 6e  he compound is n
29a60 6f 74 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c  ot a [VALUES] cl
29a70 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63 6f 6d  ause...<p>^A com
29a80 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63 72 65  pound SELECT cre
29a90 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49 4f 4e  ated using UNION
29aa0 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72 65   ALL operator re
29ab0 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20 72 6f  turns all the ro
29ac0 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45  ws.from the SELE
29ad0 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f  CT to the left o
29ae0 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c 20  f the UNION ALL 
29af0 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20 61 6c  operator, and al
29b00 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20  l the rows.from 
29b10 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68  the SELECT to th
29b20 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e 20 5e  e right of it. ^
29b30 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74  The UNION operat
29b40 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  or works the sam
29b50 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20 41  e way as.UNION A
29b60 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  LL, except that 
29b70 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61  duplicate rows a
29b80 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  re removed from 
29b90 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75 6c 74  the final result
29ba0 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45 52   set..^The INTER
29bb0 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 72 65  SECT operator re
29bc0 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65 72 73  turns the inters
29bd0 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65  ection of the re
29be0 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c 65 66  sults of the lef
29bf0 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45 4c 45  t and.right SELE
29c00 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43 45 50  CTs.  ^The EXCEP
29c10 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72  T operator retur
29c20 6e 73 20 74 68 65 20 73 75 62 73 65 74 20 6f 66  ns the subset of
29c30 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
29c40 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c 45 43  y the.left SELEC
29c50 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61  T that are not a
29c60 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62 79 20  lso returned by 
29c70 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 53  the right-hand S
29c80 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63 61 74  ELECT. ^Duplicat
29c90 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76  e.rows are remov
29ca0 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75  ed from the resu
29cb0 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45 43 54  lts of INTERSECT
29cc0 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70 65 72   and EXCEPT oper
29cd0 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74 68 65  ators before the
29ce0 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 72  .result set is r
29cf0 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46 6f  eturned...<p>^Fo
29d00 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
29d10 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 64 75  f determining du
29d20 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66 6f 72  plicate rows for
29d30 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
29d40 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 20  compound.SELECT 
29d50 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c 20  operators, NULL 
29d60 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
29d70 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f 20 6f  dered equal to o
29d80 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ther NULL values
29d90 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20 66 72   and.distinct fr
29da0 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  om all non-NULL 
29db0 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f 6c  values. ^The col
29dc0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
29dd0 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
29de0 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73  .two text values
29df0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61   is determined a
29e00 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s if the columns
29e10 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
29e20 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c 45   right-hand.SELE
29e30 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 65  CT statements we
29e40 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
29e50 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
29e60 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c  nds of the equal
29e70 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c 20  s (=).operator, 
29e80 65 78 63 65 70 74 20 74 68 61 74 20 67 72 65 61  except that grea
29e90 74 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 69  ter precedence i
29ea0 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 74  s not assigned t
29eb0 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 73  o a collation .s
29ec0 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69 65  equence specifie
29ed0 64 20 77 69 74 68 20 74 68 65 20 70 6f 73 74 66  d with the postf
29ee0 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  ix COLLATE opera
29ef0 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69 74  tor. ^No affinit
29f00 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  y.transformation
29f10 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 74 6f  s are applied to
29f20 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68 65 6e   any values when
29f30 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73 20   comparing rows 
29f40 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63 6f 6d  as part of a.com
29f50 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a 0a  pound SELECT. ..
29f60 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65 65 20  <p>^(When three 
29f70 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53  or more simple S
29f80 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e 6e 65  ELECTs are conne
29f90 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d 70  cted into a comp
29fa0 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68 65  ound SELECT,.the
29fb0 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66  y group from lef
29fc0 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f  t to right. In o
29fd0 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 22  ther words, if "
29fe0 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43 22 20  A", "B" and "C" 
29ff0 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20 53  are all.simple S
2a000 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
2a010 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43 29 20  , (A op B op C) 
2a020 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20  is processed as 
2a030 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43 29 2e  ((A op B) op C).
2a040 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  )^..</p>..<tcl>h
2a050 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 65 72  d_fragment order
2a060 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 20 7b 4f  by {order by} {O
2a070 52 44 45 52 20 42 59 7d 3c 2f 74 63 6c 3e 0a 3c  RDER BY}</tcl>.<
2a080 68 33 3e 54 68 65 20 4f 52 44 45 52 20 42 59 20  h3>The ORDER BY 
2a090 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e  clause</h3>..<p>
2a0a0 49 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  If a SELECT stat
2a0b0 65 6d 65 6e 74 20 74 68 61 74 20 72 65 74 75 72  ement that retur
2a0c0 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  ns more than one
2a0d0 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61   row does not ha
2a0e0 76 65 20 61 6e 0a 4f 52 44 45 52 20 42 59 20 63  ve an.ORDER BY c
2a0f0 6c 61 75 73 65 2c 20 74 68 65 20 6f 72 64 65 72  lause, the order
2a100 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 72 6f   in which the ro
2a110 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20  ws are returned 
2a120 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 4f 72  is undefined..Or
2a130 2c 20 69 66 20 61 20 53 45 4c 45 43 54 20 73 74  , if a SELECT st
2a140 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 68 61 76  atement does hav
2a150 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  e an ORDER BY cl
2a160 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 6c  ause, then the l
2a170 69 73 74 20 6f 66 0a 65 78 70 72 65 73 73 69 6f  ist of.expressio
2a180 6e 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  ns attached to t
2a190 68 65 20 4f 52 44 45 52 20 42 59 20 64 65 74 65  he ORDER BY dete
2a1a0 72 6d 69 6e 65 20 74 68 65 20 6f 72 64 65 72 20  rmine the order 
2a1b0 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 61 72  in which rows.ar
2a1c0 65 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  e returned to th
2a1d0 65 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a 49 6e 20  e user...<p>.In 
2a1e0 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
2a1f0 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 6f  CT] statement, o
2a200 6e 6c 79 20 74 68 65 20 6c 61 73 74 20 6f 72 20  nly the last or 
2a210 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70  right-most [simp
2a220 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61 79 20 68  le SELECT].may h
2a230 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20  ave an ORDER BY 
2a240 63 6c 61 75 73 65 2e 20 54 68 61 74 20 4f 52 44  clause. That ORD
2a250 45 52 20 42 59 20 63 6c 61 75 73 65 20 77 69 6c  ER BY clause wil
2a260 6c 20 61 70 70 6c 79 20 61 63 72 6f 73 73 20 61  l apply across a
2a270 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 6f 66 0a 74  ll elements of.t
2a280 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20 49 66 20  he compound. If 
2a290 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 65  the right-most e
2a2a0 6c 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f 6d  lement of a [com
2a2b0 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20 69 73  pound SELECT] is
2a2c0 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75   a [VALUES] clau
2a2d0 73 65 2c 0a 74 68 65 6e 20 6e 6f 20 4f 52 44 45  se,.then no ORDE
2a2e0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 61  R BY clause is a
2a2f0 6c 6c 6f 77 65 64 20 6f 6e 20 74 68 61 74 20 73  llowed on that s
2a300 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a 3c 70 3e 5e  tatement....<p>^
2a310 52 6f 77 73 20 61 72 65 20 66 69 72 73 74 20 73  Rows are first s
2a320 6f 72 74 65 64 20 62 61 73 65 64 20 6f 6e 20 74  orted based on t
2a330 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 65 76  he results of.ev
2a340 61 6c 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66  aluating the lef
2a350 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f  t-most expressio
2a360 6e 20 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42  n in the ORDER B
2a370 59 20 6c 69 73 74 2c 20 74 68 65 6e 20 74 69 65  Y list, then tie
2a380 73 20 61 72 65 20 62 72 6f 6b 65 6e 0a 62 79 20  s are broken.by 
2a390 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 73  evaluating the s
2a3a0 65 63 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73 74 20  econd left-most 
2a3b0 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 73  expression and s
2a3c0 6f 20 6f 6e 2e 20 54 68 65 20 6f 72 64 65 72 20  o on. The order 
2a3d0 69 6e 20 77 68 69 63 68 0a 74 77 6f 20 72 6f 77  in which.two row
2a3e0 73 20 66 6f 72 20 77 68 69 63 68 20 61 6c 6c 20  s for which all 
2a3f0 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
2a400 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f  ions evaluate to
2a410 20 65 71 75 61 6c 20 76 61 6c 75 65 73 20 61 72   equal values ar
2a420 65 0a 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e  e.returned is un
2a430 64 65 66 69 6e 65 64 2e 20 5e 45 61 63 68 20 4f  defined. ^Each O
2a440 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2a450 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e  on may be option
2a460 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 62 79  ally followed.by
2a470 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 77   one of the keyw
2a480 6f 72 64 73 20 41 53 43 20 28 73 6d 61 6c 6c 65  ords ASC (smalle
2a490 72 20 76 61 6c 75 65 73 20 61 72 65 20 72 65 74  r values are ret
2a4a0 75 72 6e 65 64 20 66 69 72 73 74 29 20 6f 72 20  urned first) or 
2a4b0 44 45 53 43 20 28 6c 61 72 67 65 72 0a 76 61 6c  DESC (larger.val
2a4c0 75 65 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ues are returned
2a4d0 20 66 69 72 73 74 29 2e 20 5e 49 66 20 6e 65 69   first). ^If nei
2a4e0 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43  ther ASC or DESC
2a4f0 20 61 72 65 20 73 70 65 63 69 66 69 65 64 2c 20   are specified, 
2a500 72 6f 77 73 0a 61 72 65 20 73 6f 72 74 65 64 20  rows.are sorted 
2a510 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 28 73 6d  in ascending (sm
2a520 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 66 69 72  aller values fir
2a530 73 74 29 20 6f 72 64 65 72 20 62 79 20 64 65 66  st) order by def
2a540 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f  ault...<p>Each O
2a550 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2a560 6f 6e 20 69 73 20 70 72 6f 63 65 73 73 65 64 20  on is processed 
2a570 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
2a580 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66  .<ol>.<li><p>^If
2a590 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
2a5a0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f  pression is a co
2a5b0 6e 73 74 61 6e 74 20 69 6e 74 65 67 65 72 20 4b  nstant integer K
2a5c0 20 74 68 65 6e 20 74 68 65 0a 65 78 70 72 65 73   then the.expres
2a5d0 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72  sion is consider
2a5e0 65 64 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  ed an alias for 
2a5f0 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20  the K-th column 
2a600 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  of the result se
2a610 74 0a 28 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e  t.(columns are n
2a620 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66  umbered from lef
2a630 74 20 74 6f 20 72 69 67 68 74 20 73 74 61 72 74  t to right start
2a640 69 6e 67 20 77 69 74 68 20 31 29 2e 0a 0a 3c 6c  ing with 1)...<l
2a650 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44  i><p>^If the ORD
2a660 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
2a670 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65   is an identifie
2a680 72 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  r that correspon
2a690 64 73 20 74 6f 0a 74 68 65 20 61 6c 69 61 73 20  ds to.the alias 
2a6a0 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 75  of one of the ou
2a6b0 74 70 75 74 20 63 6f 6c 75 6d 6e 73 2c 20 74 68  tput columns, th
2a6c0 65 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  en the expressio
2a6d0 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 0a  n is considered.
2a6e0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 61  an alias for tha
2a6f0 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c  t column...<li><
2a700 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  p>^Otherwise, if
2a710 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
2a720 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 79 20  pression is any 
2a730 6f 74 68 65 72 20 65 78 70 72 65 73 73 69 6f 6e  other expression
2a740 2c 20 69 74 20 0a 69 73 20 65 76 61 6c 75 61 74  , it .is evaluat
2a750 65 64 20 61 6e 64 20 74 68 65 20 72 65 74 75 72  ed and the retur
2a760 6e 65 64 20 76 61 6c 75 65 20 75 73 65 64 20 74  ned value used t
2a770 6f 20 6f 72 64 65 72 20 74 68 65 20 6f 75 74 70  o order the outp
2a780 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a 74 68 65  ut rows. ^If.the
2a790 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2a7a0 74 20 69 73 20 61 20 73 69 6d 70 6c 65 20 53 45  t is a simple SE
2a7b0 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e 20 4f 52  LECT, then an OR
2a7c0 44 45 52 20 42 59 20 6d 61 79 20 63 6f 6e 74 61  DER BY may conta
2a7d0 69 6e 20 61 6e 79 0a 61 72 62 69 74 72 61 72 79  in any.arbitrary
2a7e0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e 48   expressions. ^H
2a7f0 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 20 53  owever, if the S
2a800 45 4c 45 43 54 20 69 73 20 61 20 63 6f 6d 70 6f  ELECT is a compo
2a810 75 6e 64 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  und SELECT, then
2a820 0a 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73  .ORDER BY expres
2a830 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 6e  sions that are n
2a840 6f 74 20 61 6c 69 61 73 65 73 20 74 6f 20 6f 75  ot aliases to ou
2a850 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20 6d 75 73  tput columns mus
2a860 74 20 62 65 20 65 78 61 63 74 6c 79 0a 74 68 65  t be exactly.the
2a870 20 73 61 6d 65 20 61 73 20 61 6e 20 65 78 70 72   same as an expr
2a880 65 73 73 69 6f 6e 20 75 73 65 64 20 61 73 20 61  ession used as a
2a890 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 2e  n output column.
2a8a0 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72 20  .</ol>..<p>^For 
2a8b0 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
2a8c0 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c 20 76 61  sorting rows, va
2a8d0 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
2a8e0 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
2a8f0 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d 70 61 72  y.as for [compar
2a900 69 73 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  ison expressions
2a910 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  ]. The collation
2a920 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 74   sequence used t
2a930 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f 20 74 65  o compare.two te
2a940 78 74 20 76 61 6c 75 65 73 20 69 73 20 64 65 74  xt values is det
2a950 65 72 6d 69 6e 65 64 20 61 73 20 66 6f 6c 6c 6f  ermined as follo
2a960 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e  ws:..<ol>.  <li>
2a970 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52  <p>^If the ORDER
2a980 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
2a990 73 20 61 73 73 69 67 6e 65 64 20 61 20 63 6f 6c  s assigned a col
2a9a0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
2a9b0 75 73 69 6e 67 0a 20 20 74 68 65 20 70 6f 73 74  using.  the post
2a9c0 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65  fix [COLLATE ope
2a9d0 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65  rator], then the
2a9e0 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 6c 61   specified colla
2a9f0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
2aa00 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c  .  used..  <li><
2aa10 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  p>^Otherwise, if
2aa20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
2aa30 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61  pression is an a
2aa40 6c 69 61 73 20 74 6f 20 61 6e 20 65 78 70 72 65  lias to an expre
2aa50 73 73 69 6f 6e 0a 20 20 74 68 61 74 20 68 61 73  ssion.  that has
2aa60 20 62 65 65 6e 20 61 73 73 69 67 6e 65 64 20 61   been assigned a
2aa70 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
2aa80 6e 63 65 20 75 73 69 6e 67 20 74 68 65 20 70 6f  nce using the po
2aa90 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c 4c 41 54  stfix .  [COLLAT
2aaa0 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65  E operator], the
2aab0 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  n the collation 
2aac0 73 65 71 75 65 6e 63 65 20 61 73 73 69 67 6e 65  sequence assigne
2aad0 64 20 74 6f 20 74 68 65 20 61 6c 69 61 73 65 64  d to the aliased
2aae0 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  .  expression is
2aaf0 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e   used..  <li><p>
2ab00 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74  ^Otherwise, if t
2ab10 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
2ab20 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6c 75  ession is a colu
2ab30 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61 73 20 6f  mn or an alias o
2ab40 66 0a 20 20 61 6e 20 65 78 70 72 65 73 73 69 6f  f.  an expressio
2ab50 6e 20 74 68 61 74 20 69 73 20 61 20 63 6f 6c 75  n that is a colu
2ab60 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66  mn, then the def
2ab70 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ault collation s
2ab80 65 71 75 65 6e 63 65 20 66 6f 72 0a 20 20 74 68  equence for.  th
2ab90 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  e column is used
2aba0 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68  . .  <li><p>^Oth
2abb0 65 72 77 69 73 65 2c 20 74 68 65 20 5b 42 49 4e  erwise, the [BIN
2abc0 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ARY] collation s
2abd0 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 2e  equence is used.
2abe0 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20  .</ol>..<p>In a 
2abf0 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2ac00 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c  ] statement, all
2ac10 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2ac20 73 69 6f 6e 73 20 61 72 65 20 68 61 6e 64 6c 65  sions are handle
2ac30 64 0a 61 73 20 61 6c 69 61 73 65 73 20 66 6f 72  d.as aliases for
2ac40 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75   one of the resu
2ac50 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  lt columns of th
2ac60 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a 5e 28 49 66  e compound..^(If
2ac70 20 61 6e 20 4f 52 44 45 52 20 42 59 20 65 78 70   an ORDER BY exp
2ac80 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61  ression is not a
2ac90 6e 20 69 6e 74 65 67 65 72 20 61 6c 69 61 73 2c  n integer alias,
2aca0 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61   then SQLite sea
2acb0 72 63 68 65 73 0a 74 68 65 20 6c 65 66 74 2d 6d  rches.the left-m
2acc0 6f 73 74 20 53 45 4c 45 43 54 20 69 6e 20 74 68  ost SELECT in th
2acd0 65 20 63 6f 6d 70 6f 75 6e 64 20 66 6f 72 20 61  e compound for a
2ace0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74   result column t
2acf0 68 61 74 20 6d 61 74 63 68 65 73 20 65 69 74 68  hat matches eith
2ad00 65 72 0a 74 68 65 20 73 65 63 6f 6e 64 20 6f 72  er.the second or
2ad10 20 74 68 69 72 64 20 72 75 6c 65 73 20 61 62 6f   third rules abo
2ad20 76 65 2e 20 49 66 20 61 20 6d 61 74 63 68 20 69  ve. If a match i
2ad30 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 73 65 61  s found, the sea
2ad40 72 63 68 20 73 74 6f 70 73 20 61 6e 64 0a 74 68  rch stops and.th
2ad50 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
2ad60 68 61 6e 64 6c 65 64 20 61 73 20 61 6e 20 61 6c  handled as an al
2ad70 69 61 73 20 66 6f 72 20 74 68 65 20 72 65 73 75  ias for the resu
2ad80 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69  lt column that i
2ad90 74 20 68 61 73 20 62 65 65 6e 0a 6d 61 74 63 68  t has been.match
2ada0 65 64 20 61 67 61 69 6e 73 74 2e 20 4f 74 68 65  ed against. Othe
2adb0 72 77 69 73 65 2c 20 74 68 65 20 6e 65 78 74 20  rwise, the next 
2adc0 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69  SELECT to the ri
2add0 67 68 74 20 69 73 20 74 72 69 65 64 2c 20 61 6e  ght is tried, an
2ade0 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e 49 66 20 6e  d so on.)^.^If n
2adf0 6f 20 6d 61 74 63 68 69 6e 67 20 65 78 70 72 65  o matching expre
2ae00 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75  ssion can be fou
2ae10 6e 64 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  nd in the result
2ae20 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 79 0a   columns of any.
2ae30 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45  constituent SELE
2ae40 43 54 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  CT, it is an err
2ae50 6f 72 2e 20 5e 45 61 63 68 20 74 65 72 6d 20 6f  or. ^Each term o
2ae60 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  f the ORDER BY c
2ae70 6c 61 75 73 65 20 69 73 0a 70 72 6f 63 65 73 73  lause is.process
2ae80 65 64 20 73 65 70 61 72 61 74 65 6c 79 20 61 6e  ed separately an
2ae90 64 20 6d 61 79 20 62 65 20 6d 61 74 63 68 65 64  d may be matched
2aea0 20 61 67 61 69 6e 73 74 20 72 65 73 75 6c 74 20   against result 
2aeb0 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 64 69 66  columns from dif
2aec0 66 65 72 65 6e 74 0a 53 45 4c 45 43 54 20 73 74  ferent.SELECT st
2aed0 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
2aee0 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c  compound.</p>..<
2aef0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2af00 6c 69 6d 69 74 6f 66 66 73 65 74 20 7b 4c 49 4d  limitoffset {LIM
2af10 49 54 7d 20 7b 4f 46 46 53 45 54 7d 3c 2f 74 63  IT} {OFFSET}</tc
2af20 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4d 49 54  l>.<h3>The LIMIT
2af30 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70   clause</h3>..<p
2af40 3e 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73  >The LIMIT claus
2af50 65 20 69 73 20 75 73 65 64 20 74 6f 20 70 6c 61  e is used to pla
2af60 63 65 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  ce an upper boun
2af70 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  d on the number 
2af80 6f 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64  of rows.returned
2af90 20 62 79 20 74 68 65 20 65 6e 74 69 72 65 20 53   by the entire S
2afa0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
2afb0 0a 0a 3c 70 3e 49 6e 20 61 20 5b 63 6f 6d 70 6f  ..<p>In a [compo
2afc0 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20 6f 6e 6c  und SELECT], onl
2afd0 79 20 74 68 65 0a 6c 61 73 74 20 6f 72 20 72 69  y the.last or ri
2afe0 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65  ght-most [simple
2aff0 20 53 45 4c 45 43 54 5d 20 6d 61 79 20 63 6f 6e   SELECT] may con
2b000 74 61 69 6e 20 61 20 4c 49 4d 49 54 20 63 6c 61  tain a LIMIT cla
2b010 75 73 65 2e 20 20 0a 49 6e 20 61 20 5b 63 6f 6d  use.  .In a [com
2b020 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20 0a  pound SELECT], .
2b030 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
2b040 20 61 70 70 6c 69 65 73 20 74 6f 20 74 68 65 20   applies to the 
2b050 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64 2c  entire compound,
2b060 20 6e 6f 74 20 6a 75 73 74 20 74 68 65 20 66 69   not just the fi
2b070 6e 61 6c 20 53 45 4c 45 43 54 2e 0a 49 66 20 74  nal SELECT..If t
2b080 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73  he right-most [s
2b090 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 69 73  imple SELECT] is
2b0a0 20 61 20 5b 56 41 4c 55 45 53 20 63 6c 61 75 73   a [VALUES claus
2b0b0 65 5d 20 74 68 65 6e 20 6e 6f 20 4c 49 4d 49 54  e] then no LIMIT
2b0c0 20 63 6c 61 75 73 65 0a 69 73 20 61 6c 6c 6f 77   clause.is allow
2b0d0 65 64 2e 0a 0a 3c 70 3e 5e 41 6e 79 20 73 63 61  ed...<p>^Any sca
2b0e0 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  lar expression m
2b0f0 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68  ay be used in th
2b100 65 20 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c  e .LIMIT clause,
2b110 20 73 6f 20 6c 6f 6e 67 20 61 73 20 69 74 20 65   so long as it e
2b120 76 61 6c 75 61 74 65 73 20 74 6f 20 61 6e 20 69  valuates to an i
2b130 6e 74 65 67 65 72 20 6f 72 20 61 20 76 61 6c 75  nteger or a valu
2b140 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f  e that can be.lo
2b150 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
2b160 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
2b170 2e 20 5e 49 66 20 74 68 65 20 65 78 70 72 65 73  . ^If the expres
2b180 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2b190 6f 20 61 20 4e 55 4c 4c 20 0a 76 61 6c 75 65 20  o a NULL .value 
2b1a0 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 76 61 6c  or any other val
2b1b0 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  ue that cannot b
2b1c0 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e losslessly con
2b1d0 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
2b1e0 65 67 65 72 2c 20 61 6e 0a 65 72 72 6f 72 20 69  eger, an.error i
2b1f0 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66 20  s returned. ^If 
2b200 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
2b210 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2b220 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c  o a negative val
2b230 75 65 2c 0a 74 68 65 6e 20 74 68 65 72 65 20 69  ue,.then there i
2b240 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75 6e 64  s no upper bound
2b250 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
2b260 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 2e  f rows returned.
2b270 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65   ^Otherwise, the
2b280 0a 53 45 4c 45 43 54 20 72 65 74 75 72 6e 73 20  .SELECT returns 
2b290 74 68 65 20 66 69 72 73 74 20 4e 20 72 6f 77 73  the first N rows
2b2a0 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
2b2b0 65 74 20 6f 6e 6c 79 2c 20 77 68 65 72 65 20 4e  et only, where N
2b2c0 20 69 73 20 74 68 65 20 76 61 6c 75 65 0a 74 68   is the value.th
2b2d0 61 74 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  at the LIMIT exp
2b2e0 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
2b2f0 73 20 74 6f 2e 20 5e 4f 72 2c 20 69 66 20 74 68  s to. ^Or, if th
2b300 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2b310 6e 74 20 77 6f 75 6c 64 0a 72 65 74 75 72 6e 20  nt would.return 
2b320 6c 65 73 73 20 74 68 61 6e 20 4e 20 72 6f 77 73  less than N rows
2b330 20 77 69 74 68 6f 75 74 20 61 20 4c 49 4d 49 54   without a LIMIT
2b340 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
2b350 65 20 65 6e 74 69 72 65 20 72 65 73 75 6c 74 20  e entire result 
2b360 73 65 74 20 69 73 0a 72 65 74 75 72 6e 65 64 2e  set is.returned.
2b370 20 0a 0a 3c 70 3e 5e 54 68 65 20 65 78 70 72 65   ..<p>^The expre
2b380 73 73 69 6f 6e 20 61 74 74 61 63 68 65 64 20 74  ssion attached t
2b390 6f 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f  o the optional O
2b3a0 46 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 61  FFSET clause tha
2b3b0 74 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 61 0a 4c  t may follow a.L
2b3c0 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 75 73 74  IMIT clause must
2b3d0 20 61 6c 73 6f 20 65 76 61 6c 75 61 74 65 20 74   also evaluate t
2b3e0 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6f 72  o an integer, or
2b3f0 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63 61   a value that ca
2b400 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20  n be.losslessly 
2b410 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
2b420 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 61 6e 20  integer. ^If an 
2b430 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73 20 61  expression has a
2b440 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  n OFFSET clause,
2b450 0a 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20  .then the first 
2b460 4d 20 72 6f 77 73 20 61 72 65 20 6f 6d 69 74 74  M rows are omitt
2b470 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75  ed from the resu
2b480 6c 74 20 73 65 74 20 72 65 74 75 72 6e 65 64 20  lt set returned 
2b490 62 79 20 74 68 65 20 53 45 4c 45 43 54 0a 73 74  by the SELECT.st
2b4a0 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20  atement and the 
2b4b0 6e 65 78 74 20 4e 20 72 6f 77 73 20 61 72 65 20  next N rows are 
2b4c0 72 65 74 75 72 6e 65 64 2c 20 77 68 65 72 65 20  returned, where 
2b4d0 4d 20 61 6e 64 20 4e 20 61 72 65 20 74 68 65 20  M and N are the 
2b4e0 76 61 6c 75 65 73 20 74 68 61 74 0a 74 68 65 20  values that.the 
2b4f0 4f 46 46 53 45 54 20 61 6e 64 20 4c 49 4d 49 54  OFFSET and LIMIT
2b500 20 63 6c 61 75 73 65 73 20 65 76 61 6c 75 61 74   clauses evaluat
2b510 65 20 74 6f 2c 20 72 65 73 70 65 63 74 69 76 65  e to, respective
2b520 6c 79 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20  ly. ^Or, if the 
2b530 53 45 4c 45 43 54 0a 77 6f 75 6c 64 20 72 65 74  SELECT.would ret
2b540 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20 4d 2b  urn less than M+
2b550 4e 20 72 6f 77 73 20 69 66 20 69 74 20 64 69 64  N rows if it did
2b560 20 6e 6f 74 20 68 61 76 65 20 61 20 4c 49 4d 49   not have a LIMI
2b570 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  T clause, then t
2b580 68 65 0a 66 69 72 73 74 20 4d 20 72 6f 77 73 20  he.first M rows 
2b590 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20  are skipped and 
2b5a0 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 72 6f  the remaining ro
2b5b0 77 73 20 28 69 66 20 61 6e 79 29 20 61 72 65 20  ws (if any) are 
2b5c0 72 65 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68  returned. ^If th
2b5d0 65 0a 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  e.OFFSET clause 
2b5e0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e  evaluates to a n
2b5f0 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74  egative value, t
2b600 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 74  he results are t
2b610 68 65 20 73 61 6d 65 20 61 73 20 69 66 20 69 74  he same as if it
2b620 0a 68 61 64 20 65 76 61 6c 75 61 74 65 64 20 74  .had evaluated t
2b630 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73  o zero...<p>^Ins
2b640 74 65 61 64 20 6f 66 20 61 20 73 65 70 61 72 61  tead of a separa
2b650 74 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  te OFFSET clause
2b660 2c 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  , the LIMIT clau
2b670 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 20 74  se may specify t
2b680 77 6f 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73  wo.scalar expres
2b690 73 69 6f 6e 73 20 73 65 70 61 72 61 74 65 64 20  sions separated 
2b6a0 62 79 20 61 20 63 6f 6d 6d 61 2e 20 5e 49 6e 20  by a comma. ^In 
2b6b0 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 66  this case, the f
2b6c0 69 72 73 74 20 65 78 70 72 65 73 73 69 6f 6e 0a  irst expression.
2b6d0 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 4f  is used as the O
2b6e0 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e  FFSET expression
2b6f0 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e 64 20   and the second 
2b700 61 73 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  as the LIMIT exp
2b710 72 65 73 73 69 6f 6e 2e 0a 54 68 69 73 20 69 73  ression..This is
2b720 20 63 6f 75 6e 74 65 72 2d 69 6e 74 75 69 74 69   counter-intuiti
2b730 76 65 2c 20 61 73 20 77 68 65 6e 20 75 73 69 6e  ve, as when usin
2b740 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61  g the OFFSET cla
2b750 75 73 65 20 74 68 65 20 73 65 63 6f 6e 64 20 6f  use the second o
2b760 66 0a 74 68 65 20 74 77 6f 20 65 78 70 72 65 73  f.the two expres
2b770 73 69 6f 6e 73 20 69 73 20 74 68 65 20 4f 46 46  sions is the OFF
2b780 53 45 54 20 61 6e 64 20 74 68 65 20 66 69 72 73  SET and the firs
2b790 74 20 74 68 65 20 4c 49 4d 49 54 2e 20 0a 54 68  t the LIMIT. .Th
2b7a0 69 73 20 72 65 76 65 72 73 61 6c 20 6f 66 20 74  is reversal of t
2b7b0 68 65 20 6f 66 66 73 65 74 20 61 6e 64 20 6c 69  he offset and li
2b7c0 6d 69 74 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e  mit is intention
2b7d0 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65  al.- it maximize
2b7e0 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
2b7f0 77 69 74 68 20 6f 74 68 65 72 20 53 51 4c 20 64  with other SQL d
2b800 61 74 61 62 61 73 65 20 73 79 73 74 65 6d 73 2e  atabase systems.
2b810 0a 48 6f 77 65 76 65 72 2c 20 74 6f 20 61 76 6f  .However, to avo
2b820 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 70 72  id confusion, pr
2b830 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 73 74  ogrammers are st
2b840 72 6f 6e 67 6c 79 20 65 6e 63 6f 75 72 61 67 65  rongly encourage
2b850 64 20 74 6f 20 75 73 65 0a 74 68 65 20 66 6f 72  d to use.the for
2b860 6d 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  m of the LIMIT c
2b870 6c 61 75 73 65 20 74 68 61 74 20 75 73 65 73 20  lause that uses 
2b880 74 68 65 20 22 4f 46 46 53 45 54 22 20 6b 65 79  the "OFFSET" key
2b890 77 6f 72 64 20 61 6e 64 20 61 76 6f 69 64 0a 75  word and avoid.u
2b8a0 73 69 6e 67 20 61 20 4c 49 4d 49 54 20 63 6c 61  sing a LIMIT cla
2b8b0 75 73 65 20 77 69 74 68 20 61 20 63 6f 6d 6d 61  use with a comma
2b8c0 2d 73 65 70 61 72 61 74 65 64 20 6f 66 66 73 65  -separated offse
2b8d0 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  t...<tcl>hd_frag
2b8e0 6d 65 6e 74 20 76 61 6c 75 65 73 20 7b 56 41 4c  ment values {VAL
2b8f0 55 45 53 20 63 6c 61 75 73 65 7d 20 56 41 4c 55  UES clause} VALU
2b900 45 53 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  ES</tcl>.<h3>The
2b910 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 3c 2f   VALUES clause</
2b920 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 70 68 72 61  h3>..<p>The phra
2b930 73 65 20 22 56 41 4c 55 45 53 28 3c 69 3e 65 78  se "VALUES(<i>ex
2b940 70 72 2d 6c 69 73 74 3c 2f 69 3e 29 22 20 6d 65  pr-list</i>)" me
2b950 61 6e 73 20 74 68 65 20 73 61 6d 65 20 74 68 69  ans the same thi
2b960 6e 67 0a 61 73 20 22 53 45 4c 45 43 54 20 3c 69  ng.as "SELECT <i
2b970 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 22 2e  >expr-list</i>".
2b980 20 20 54 68 65 20 70 68 72 61 73 65 0a 22 56 41    The phrase."VA
2b990 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73  LUES(<i>expr-lis
2b9a0 74 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c 69  t-1</i>),...,(<i
2b9b0 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e  >expr-list-N</i>
2b9c0 29 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d  )" means the sam
2b9d0 65 0a 74 68 69 6e 67 20 61 73 20 22 53 45 4c 45  e.thing as "SELE
2b9e0 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d  CT <i>expr-list-
2b9f0 31 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c 20  1</i> UNION ALL 
2ba00 2e 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53 45  ... UNION ALL.SE
2ba10 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73  LECT <i>expr-lis
2ba20 74 2d 4e 3c 2f 69 3e 22 2e 20 20 54 68 65 72 65  t-N</i>".  There
2ba30 20 69 73 20 6e 6f 20 61 64 76 61 6e 74 61 67 65   is no advantage
2ba40 20 74 6f 20 75 73 69 6e 67 20 6f 6e 65 20 66 6f   to using one fo
2ba50 72 6d 0a 6f 76 65 72 20 74 68 65 20 6f 74 68 65  rm.over the othe
2ba60 72 2e 20 20 42 6f 74 68 20 66 6f 72 6d 73 20 79  r.  Both forms y
2ba70 69 65 6c 64 20 74 68 65 20 73 61 6d 65 20 72 65  ield the same re
2ba80 73 75 6c 74 20 61 6e 64 20 62 6f 74 68 20 66 6f  sult and both fo
2ba90 72 6d 73 20 75 73 65 0a 74 68 65 20 73 61 6d 65  rms use.the same
2baa0 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72   amount of memor
2bab0 79 20 61 6e 64 20 70 72 6f 63 65 73 73 69 6e 67  y and processing
2bac0 20 74 69 6d 65 2e 0a 0a 3c 70 3e 54 68 65 72 65   time...<p>There
2bad0 20 61 72 65 20 73 6f 6d 65 20 72 65 73 74 72 69   are some restri
2bae0 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 75 73  ctions on the us
2baf0 65 20 6f 66 20 61 20 56 41 4c 55 45 53 20 63 6c  e of a VALUES cl
2bb00 61 75 73 65 20 74 68 61 74 20 61 72 65 0a 6e 6f  ause that are.no
2bb10 74 20 73 68 6f 77 6e 20 6f 6e 20 74 68 65 20 73  t shown on the s
2bb20 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 3a 0a  yntax diagrams:.
2bb30 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 41 20  .<ul>.<li><p>.A 
2bb40 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 63 61  VALUES clause ca
2bb50 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  nnot be followed
2bb60 20 62 79 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f   by [ORDER BY] o
2bb70 72 20 5b 4c 49 4d 49 54 5d 2e 0a 0a 3c 6c 69 3e  r [LIMIT]...<li>
2bb80 3c 70 3e 0a 41 20 56 41 4c 55 45 53 20 63 6c 61  <p>.A VALUES cla
2bb90 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 75 73  use cannot be us
2bba0 65 64 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ed together with
2bbb0 20 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65   a [WITH] clause
2bbc0 20 69 6e 20 61 0a 5b 73 69 6d 70 6c 65 20 53 45   in a.[simple SE
2bbd0 4c 45 43 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c  LECT]..</ul>...<
2bbe0 68 33 3e 54 68 65 20 57 49 54 48 20 43 6c 61 75  h3>The WITH Clau
2bbf0 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 53 45 4c 45  se</h3>..<p>SELE
2bc00 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61  CT statements ma
2bc10 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  y be optionally 
2bc20 70 72 65 63 65 64 65 64 20 62 79 20 61 20 73 69  preceded by a si
2bc30 6e 67 6c 65 0a 5b 57 49 54 48 20 63 6c 61 75 73  ngle.[WITH claus
2bc40 65 5d 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  e] that defines 
2bc50 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6d  one or more [com
2bc60 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
2bc70 73 69 6f 6e 73 5d 0a 66 6f 72 20 75 73 65 20 77  sions].for use w
2bc80 69 74 68 69 6e 20 74 68 65 20 53 45 4c 45 43 54  ithin the SELECT
2bc90 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a 3c 74   statement....<t
2bca0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
2bcb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bcc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bcd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bcf0 23 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54  ##.Section UPDAT
2bd00 45 20 75 70 64 61 74 65 20 7b 55 50 44 41 54 45  E update {UPDATE
2bd10 20 2a 55 50 44 41 54 45 73 7d 0a 0a 52 65 63 75   *UPDATEs}..Recu
2bd20 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
2bd30 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 0a 3c  am update-stmt.<
2bd40 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55 50  /tcl>..<p>^An UP
2bd50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
2bd60 73 20 75 73 65 64 20 74 6f 20 6d 6f 64 69 66 79  s used to modify
2bd70 20 61 20 73 75 62 73 65 74 20 6f 66 20 74 68 65   a subset of the
2bd80 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69   values stored i
2bd90 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  n .zero or more 
2bda0 72 6f 77 73 20 6f 66 20 74 68 65 20 64 61 74 61  rows of the data
2bdb0 62 61 73 65 20 74 61 62 6c 65 20 69 64 65 6e 74  base table ident
2bdc0 69 66 69 65 64 20 62 79 20 74 68 65 20 0a 3c 69  ified by the .<i
2bdd0 3e 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65  >qualified-table
2bde0 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66  -name</i> specif
2bdf0 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
2be00 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
2be10 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ent...<p>^If the
2be20 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2be30 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  t does not have 
2be40 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 2c 20  a WHERE clause, 
2be50 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 0a  all rows in the.
2be60 74 61 62 6c 65 20 61 72 65 20 6d 6f 64 69 66 69  table are modifi
2be70 65 64 20 62 79 20 74 68 65 20 55 50 44 41 54 45  ed by the UPDATE
2be80 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68  . ^Otherwise, th
2be90 65 20 55 50 44 41 54 45 20 61 66 66 65 63 74 73  e UPDATE affects
2bea0 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72 6f 77 73   only those.rows
2beb0 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 72   for which the r
2bec0 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74  esult of evaluat
2bed0 69 6e 67 20 74 68 65 20 57 48 45 52 45 20 63 6c  ing the WHERE cl
2bee0 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ause expression 
2bef0 61 73 20 61 20 0a 5b 62 6f 6f 6c 65 61 6e 20 65  as a .[boolean e
2bf00 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61  xpression|boolea
2bf10 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
2bf20 74 72 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e 6f  true]. ^It is no
2bf30 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  t an error if th
2bf40 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 64  e.WHERE clause d
2bf50 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75 61 74 65  oes not evaluate
2bf60 20 74 6f 20 74 72 75 65 20 66 6f 72 20 61 6e 79   to true for any
2bf70 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c   row in the tabl
2bf80 65 20 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d 65  e - this just.me
2bf90 61 6e 73 20 74 68 61 74 20 74 68 65 20 55 50 44  ans that the UPD
2bfa0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 66  ATE statement af
2bfb0 66 65 63 74 73 20 7a 65 72 6f 20 72 6f 77 73 2e  fects zero rows.
2bfc0 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69 63  ..<p>The modific
2bfd0 61 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20 65  ations made to e
2bfe0 61 63 68 20 72 6f 77 20 61 66 66 65 63 74 65 64  ach row affected
2bff0 20 62 79 20 61 6e 20 55 50 44 41 54 45 20 73 74   by an UPDATE st
2c000 61 74 65 6d 65 6e 74 20 61 72 65 0a 64 65 74 65  atement are.dete
2c010 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6c 69  rmined by the li
2c020 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74  st of assignment
2c030 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  s following the 
2c040 53 45 54 20 6b 65 79 77 6f 72 64 2e 20 45 61 63  SET keyword. Eac
2c050 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73 70 65  h.assignment spe
2c060 63 69 66 69 65 73 20 61 20 63 6f 6c 75 6d 6e 20  cifies a column 
2c070 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c 65 66 74  name to the left
2c080 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 73   of the equals s
2c090 69 67 6e 20 61 6e 64 20 61 0a 73 63 61 6c 61 72  ign and a.scalar
2c0a0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 74   expression to t
2c0b0 68 65 20 72 69 67 68 74 2e 20 5e 46 6f 72 20 65  he right. ^For e
2c0c0 61 63 68 20 61 66 66 65 63 74 65 64 20 72 6f 77  ach affected row
2c0d0 2c 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75  , the named colu
2c0e0 6d 6e 73 0a 61 72 65 20 73 65 74 20 74 6f 20 74  mns.are set to t
2c0f0 68 65 20 76 61 6c 75 65 73 20 66 6f 75 6e 64 20  he values found 
2c100 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
2c110 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
2c120 73 63 61 6c 61 72 20 0a 65 78 70 72 65 73 73 69  scalar .expressi
2c130 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e 67 6c  ons. ^If a singl
2c140 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 61 70  e column-name ap
2c150 70 65 61 72 73 20 6d 6f 72 65 20 74 68 61 6e 20  pears more than 
2c160 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c 69 73 74  once in the list
2c170 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74 20 65   of.assignment e
2c180 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c 6c 20  xpressions, all 
2c190 62 75 74 20 74 68 65 20 72 69 67 68 74 6d 6f 73  but the rightmos
2c1a0 74 20 6f 63 63 75 72 72 65 6e 63 65 20 69 73 20  t occurrence is 
2c1b0 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75 6d 6e  ignored. ^Column
2c1c0 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70  s.that do not ap
2c1d0 70 65 61 72 20 69 6e 20 74 68 65 20 6c 69 73 74  pear in the list
2c1e0 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73 20   of assignments 
2c1f0 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64 69 66  are left unmodif
2c200 69 65 64 2e 20 5e 54 68 65 20 73 63 61 6c 61 72  ied. ^The scalar
2c210 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61 79  .expressions may
2c220 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d 6e   refer to column
2c230 73 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65 69  s of the row bei
2c240 6e 67 20 75 70 64 61 74 65 64 2e 20 5e 49 6e 20  ng updated. ^In 
2c250 74 68 69 73 20 63 61 73 65 20 61 6c 6c 0a 73 63  this case all.sc
2c260 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73  alar expressions
2c270 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 62   are evaluated b
2c280 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67 6e  efore any assign
2c290 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e 0a  ments are made..
2c2a0 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61  .<p>^The optiona
2c2b0 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73  l conflict-claus
2c2c0 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65  e allows the use
2c2d0 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61 20  r to nominate a 
2c2e0 73 70 65 63 69 66 69 63 0a 63 6f 6e 73 74 72 61  specific.constra
2c2f0 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
2c300 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
2c310 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20  m to use during 
2c320 74 68 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20  this one UPDATE 
2c330 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20 74  command..Refer t
2c340 6f 20 74 68 65 20 73 65 63 74 69 6f 6e 20 65 6e  o the section en
2c350 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c  titled [ON CONFL
2c360 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f  ICT] for additio
2c370 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
2c380 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f  ..<h3>Restrictio
2c390 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61  ns on UPDATE Sta
2c3a0 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43  tements Within C
2c3b0 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68  REATE TRIGGER</h
2c3c0 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f  3>..<p>The follo
2c3d0 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20  wing additional 
2c3e0 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69  syntax restricti
2c3f0 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 55 50 44  ons apply to UPD
2c400 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74  ATE statements t
2c410 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e  hat.occur within
2c420 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b   the body of a [
2c430 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
2c440 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75  statement.  ..<u
2c450 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  l>.  <li><p>^The
2c460 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
2c470 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20  i> specified as 
2c480 70 61 72 74 20 6f 66 20 61 6e 20 55 50 44 41 54  part of an UPDAT
2c490 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  E statement with
2c4a0 69 6e 0a 20 20 20 20 20 20 61 20 74 72 69 67 67  in.      a trigg
2c4b0 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20  er body must be 
2c4c0 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e 28 49  unqualified. ^(I
2c4d0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
2c4e0 68 65 0a 20 20 20 20 20 20 3c 69 3e 64 61 74 61  he.      <i>data
2c4f0 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  base-name</i><b>
2c500 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20  .</b> prefix on 
2c510 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f  the table name o
2c520 66 20 74 68 65 20 55 50 44 41 54 45 20 69 73 0a  f the UPDATE is.
2c530 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77 65        not allowe
2c540 64 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  d within trigger
2c550 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68 65  s.)^ ^Unless the
2c560 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20   table to which 
2c570 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20 20  the trigger.    
2c580 20 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73    is attached is
2c590 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74   in the TEMP dat
2c5a0 61 62 61 73 65 2c 20 74 68 65 20 74 61 62 6c 65  abase, the table
2c5b0 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20 62   being updated b
2c5c0 79 20 74 68 65 0a 20 20 20 20 20 20 74 72 69 67  y the.      trig
2c5d0 67 65 72 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  ger program must
2c5e0 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20 73   reside in the s
2c5f0 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20  ame database as 
2c600 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c  it. ^If the tabl
2c610 65 0a 20 20 20 20 20 20 74 6f 20 77 68 69 63 68  e.      to which
2c620 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
2c630 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74  attached is in t
2c640 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
2c650 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20 20  , then the.     
2c660 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d   unqualified nam
2c670 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
2c680 65 69 6e 67 20 75 70 64 61 74 65 64 20 69 73 20  eing updated is 
2c690 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20  resolved in the 
2c6a0 73 61 6d 65 20 77 61 79 0a 20 20 20 20 20 20 61  same way.      a
2c6b0 73 20 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f  s it is for a to
2c6c0 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e  p-level statemen
2c6d0 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67 20  t (by searching 
2c6e0 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20 64  first the TEMP d
2c6f0 61 74 61 62 61 73 65 2c 0a 20 20 20 20 20 20 74  atabase,.      t
2c700 68 65 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74  hen the main dat
2c710 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20  abase, then any 
2c720 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20  other databases 
2c730 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65  in the order the
2c740 79 20 77 65 72 65 0a 20 20 20 20 20 20 61 74 74  y were.      att
2c750 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c  ached)...  <li><
2c760 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  p>^The INDEXED B
2c770 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45  Y and NOT INDEXE
2c780 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f  D clauses are no
2c790 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44  t allowed on UPD
2c7a0 41 54 45 0a 20 20 20 20 20 20 73 74 61 74 65 6d  ATE.      statem
2c7b0 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
2c7c0 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69  gers.</p>..  <li
2c7d0 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61  ><p>^The LIMIT a
2c7e0 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  nd ORDER BY clau
2c7f0 73 65 73 20 66 6f 72 20 55 50 44 41 54 45 20 61  ses for UPDATE a
2c800 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77  re unsupported w
2c810 69 74 68 69 6e 0a 20 20 20 20 20 20 74 72 69 67  ithin.      trig
2c820 67 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  gers, regardless
2c830 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 61 74   of the compilat
2c840 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65 64  ion options used
2c850 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65   to build SQLite
2c860 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74  ..</ul>..<h3>Opt
2c870 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20  ional LIMIT and 
2c880 4f 52 44 45 52 20 42 59 20 43 6c 61 75 73 65 73  ORDER BY Clauses
2c890 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53  </h3>..<p>^(If S
2c8a0 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20 77  QLite is built w
2c8b0 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ith the [SQLITE_
2c8c0 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
2c8d0 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70  LETE_LIMIT].comp
2c8e0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
2c8f0 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20  then the syntax 
2c900 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
2c910 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e  atement is exten
2c920 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61  ded.with optiona
2c930 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  l ORDER BY and L
2c940 49 4d 49 54 20 63 6c 61 75 73 65 73 29 5e 20 61  IMIT clauses)^ a
2c950 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
2c960 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
2c970 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c  am update-stmt-l
2c980 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70  imited</tcl>..<p
2c990 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73  >^If an UPDATE s
2c9a0 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20 4c  tatement has a L
2c9b0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
2c9c0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
2c9d0 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69 6c  of rows that.wil
2c9e0 6c 20 62 65 20 75 70 64 61 74 65 64 20 69 73 20  l be updated is 
2c9f0 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74  found by evaluat
2ca00 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61 6e  ing the accompan
2ca10 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20  ying expression 
2ca20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20 74  and casting.it t
2ca30 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  o an integer val
2ca40 75 65 2e 20 5e 41 20 6e 65 67 61 74 69 76 65 20  ue. ^A negative 
2ca50 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72  value is interpr
2ca60 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69  eted as "no limi
2ca70 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  t"...<p>^If the 
2ca80 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
2ca90 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6e 6f   evaluates to no
2caa0 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
2cab0 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74 68   <i>N</i> and th
2cac0 65 0a 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e.UPDATE stateme
2cad0 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52 20  nt has an ORDER 
2cae0 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
2caf0 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77 6f  all rows that wo
2cb00 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20 69  uld be updated i
2cb10 6e 0a 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66  n.the absence of
2cb20 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
2cb30 65 20 61 72 65 20 73 6f 72 74 65 64 20 61 63 63  e are sorted acc
2cb40 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 4f 52  ording to the OR
2cb50 44 45 52 20 42 59 20 61 6e 64 20 74 68 65 0a 66  DER BY and the.f
2cb60 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70  irst <i>N</i> up
2cb70 64 61 74 65 64 2e 20 5e 28 49 66 20 74 68 65 20  dated. ^(If the 
2cb80 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
2cb90 20 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46   also has an OFF
2cba0 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e  SET clause,.then
2cbb0 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79   it is similarly
2cbc0 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63   evaluated and c
2cbd0 61 73 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ast to an intege
2cbe0 72 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 20  r value. If the 
2cbf0 4f 46 46 53 45 54 0a 65 78 70 72 65 73 73 69 6f  OFFSET.expressio
2cc00 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  n evaluates to a
2cc10 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
2cc20 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68  lue <i>M</i>, th
2cc30 65 6e 20 74 68 65 20 66 69 72 73 74 20 3c 69 3e  en the first <i>
2cc40 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20 73  M</i>.rows are s
2cc50 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20 66  kipped and the f
2cc60 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69  ollowing <i>N</i
2cc70 3e 20 72 6f 77 73 20 75 70 64 61 74 65 64 20 69  > rows updated i
2cc80 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49  nstead.)^..<p>^I
2cc90 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
2cca0 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52  tement has no OR
2ccb0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
2ccc0 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
2ccd0 74 0a 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74  t.would be updat
2cce0 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63  ed in the absenc
2ccf0 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
2cd00 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d 62  lause are assemb
2cd10 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72  led in an.arbitr
2cd20 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65  ary order before
2cd30 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49   applying the LI
2cd40 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63  MIT and OFFSET c
2cd50 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d  lauses to determ
2cd60 69 6e 65 20 0a 77 68 69 63 68 20 61 72 65 20 61  ine .which are a
2cd70 63 74 75 61 6c 6c 79 20 75 70 64 61 74 65 64 2e  ctually updated.
2cd80 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52  ..<p>^(The ORDER
2cd90 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e   BY clause on an
2cda0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2cdb0 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74  t is used only t
2cdc0 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  o determine whic
2cdd0 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68  h.rows fall with
2cde0 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68  in the LIMIT. Th
2cdf0 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
2ce00 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66 69   rows are modifi
2ce10 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a  ed is arbitrary.
2ce20 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75  and is not influ
2ce30 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52 44  enced by the ORD
2ce40 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a  ER BY clause.)^.
2ce50 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
2ce60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cea0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 56 41  #####.Section VA
2ceb0 43 55 55 4d 20 76 61 63 75 75 6d 20 56 41 43 55  CUUM vacuum VACU
2cec0 55 4d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  UM..RecursiveBub
2ced0 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75 75  bleDiagram vacuu
2cee0 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  m-stmt.</tcl>..<
2cef0 70 3e 0a 20 20 54 68 65 20 56 41 43 55 55 4d 20  p>.  The VACUUM 
2cf00 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64 73  command rebuilds
2cf10 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
2cf20 62 61 73 65 2e 20 54 68 65 72 65 20 61 72 65 20  base. There are 
2cf30 73 65 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f  several .  reaso
2cf40 6e 73 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f  ns an applicatio
2cf50 6e 20 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a  n might do this:
2cf60 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ul>.  <li> <p
2cf70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65  > ^Unless SQLite
2cf80 20 69 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22   is running in "
2cf90 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c  auto_vacuum=FULL
2cfa0 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c  " mode, when a l
2cfb0 61 72 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74  arge.     amount
2cfc0 20 6f 66 20 64 61 74 61 20 69 73 20 64 65 6c 65   of data is dele
2cfd0 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ted from the dat
2cfe0 61 62 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65  abase file it le
2cff0 61 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74  aves behind empt
2d000 79 0a 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72  y.     space, or
2d010 20 22 66 72 65 65 22 20 64 61 74 61 62 61 73 65   "free" database
2d020 20 70 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61   pages. This mea
2d030 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
2d040 66 69 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20  file might.     
2d050 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73  be larger than s
2d060 74 72 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72  trictly necessar
2d070 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  y. ^Running VACU
2d080 55 4d 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68  UM to rebuild th
2d090 65 20 0a 20 20 20 20 20 64 61 74 61 62 61 73 65  e .     database
2d0a0 20 72 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73   reclaims this s
2d0b0 70 61 63 65 20 61 6e 64 20 72 65 64 75 63 65 73  pace and reduces
2d0c0 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
2d0d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
2d0e0 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65  .  <li> <p> ^Fre
2d0f0 71 75 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75  quent inserts, u
2d100 70 64 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65  pdates, and dele
2d110 74 65 73 20 63 61 6e 20 63 61 75 73 65 20 74 68  tes can cause th
2d120 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
2d130 20 20 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66       to become f
2d140 72 61 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72  ragmented - wher
2d150 65 20 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e  e data for a sin
2d160 67 6c 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  gle table or ind
2d170 65 78 20 69 73 20 73 63 61 74 74 65 72 65 64 20  ex is scattered 
2d180 0a 20 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65  .     around the
2d190 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
2d1a0 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20  ^Running VACUUM 
2d1b0 65 6e 73 75 72 65 73 20 74 68 61 74 20 65 61 63  ensures that eac
2d1c0 68 20 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20  h table and.    
2d1d0 20 69 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c   index is largel
2d1e0 79 20 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75  y stored contigu
2d1f0 6f 75 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65  ously within the
2d200 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
2d210 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61  ^In some.     ca
2d220 73 65 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20  ses, VACUUM may 
2d230 61 6c 73 6f 20 72 65 64 75 63 65 20 74 68 65 20  also reduce the 
2d240 6e 75 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61  number of partia
2d250 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73  lly filled pages
2d260 20 69 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74   in.     the dat
2d270 61 62 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20  abase, reducing 
2d280 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
2d290 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 75  database file fu
2d2a0 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c  rther...  <li> <
2d2b0 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68  p> ^Normally, th
2d2c0 65 20 64 61 74 61 62 61 73 65 20 5b 70 61 67 65  e database [page
2d2d0 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68 65 74 68  _size] and wheth
2d2e0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61  er or not the da
2d2f0 74 61 62 61 73 65 0a 20 20 20 20 20 73 75 70 70  tabase.     supp
2d300 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61 63 75 75  orts [auto_vacuu
2d310 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f 6e 66 69  m] must be confi
2d320 67 75 72 65 64 20 62 65 66 6f 72 65 20 74 68 65  gured before the
2d330 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2d340 73 0a 20 20 20 20 20 61 63 74 75 61 6c 6c 79 20  s.     actually 
2d350 63 72 65 61 74 65 64 2e 20 5e 48 6f 77 65 76 65  created. ^Howeve
2d360 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b  r, when not in [
2d370 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
2d380 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20 20 20 20   mode, the .    
2d390 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64   [page_size] and
2d3a0 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  /or [auto_vacuum
2d3b0 5d 20 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20  ] properties of 
2d3c0 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
2d3d0 62 61 73 65 20 6d 61 79 20 62 65 0a 20 20 20 20  base may be.    
2d3e0 20 63 68 61 6e 67 65 64 20 62 79 20 75 73 69 6e   changed by usin
2d3f0 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65  g the [page_size
2d400 20 70 72 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a   pragma|page_siz
2d410 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20  e]  and/or .    
2d420 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72   [auto_vacuum|pr
2d430 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d  agma auto_vacuum
2d440 5d 20 70 72 61 67 6d 61 73 20 61 6e 64 20 74 68  ] pragmas and th
2d450 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 56  en immediately V
2d460 41 43 55 55 4d 69 6e 67 0a 20 20 20 20 20 74 68  ACUUMing.     th
2d470 65 20 64 61 74 61 62 61 73 65 2e 20 5e 57 68 65  e database. ^Whe
2d480 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61  n in [write-ahea
2d490 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c  d log] mode, onl
2d4a0 79 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75  y the [auto_vacu
2d4b0 75 6d 5d 0a 20 20 20 20 20 73 75 70 70 6f 72 74  um].     support
2d4c0 20 70 72 6f 70 65 72 74 79 20 63 61 6e 20 62 65   property can be
2d4d0 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 56   changed using V
2d4e0 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  ACUUM..</ul>..<p
2d4f0 3e 5e 28 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77  >^(VACUUM only w
2d500 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e  orks on the main
2d510 20 64 61 74 61 62 61 73 65 2e 20 49 74 20 69 73   database. It is
2d520 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
2d530 20 56 41 43 55 55 4d 20 61 6e 0a 61 74 74 61 63   VACUUM an.attac
2d540 68 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c  hed database fil
2d550 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41  e.)^..<p>^The VA
2d560 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72  CUUM command wor
2d570 6b 73 20 62 79 20 63 6f 70 79 69 6e 67 20 74 68  ks by copying th
2d580 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  e contents of th
2d590 65 20 64 61 74 61 62 61 73 65 20 69 6e 74 6f 0a  e database into.
2d5a0 61 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61  a temporary data
2d5b0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 74 68  base file and th
2d5c0 65 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74  en overwriting t
2d5d0 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 74 68  he original with
2d5e0 20 74 68 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f   the .contents o
2d5f0 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary 
2d600 66 69 6c 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72  file. ^When over
2d610 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67  writing the orig
2d620 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b  inal, a rollback
2d630 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69  .journal or [wri
2d640 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 57 41  te-ahead log] WA
2d650 4c 20 66 69 6c 65 20 69 73 20 75 73 65 64 20 6a  L file is used j
2d660 75 73 74 20 61 73 20 69 74 20 77 6f 75 6c 64 20  ust as it would 
2d670 62 65 20 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72  be for any.other
2d680 20 64 61 74 61 62 61 73 65 20 74 72 61 6e 73 61   database transa
2d690 63 74 69 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61  ction. ^This mea
2d6a0 6e 73 20 74 68 61 74 20 77 68 65 6e 20 56 41 43  ns that when VAC
2d6b0 55 55 4d 69 6e 67 20 61 20 64 61 74 61 62 61 73  UUMing a databas
2d6c0 65 2c 20 0a 61 73 20 6d 75 63 68 20 61 73 20 74  e, .as much as t
2d6d0 77 69 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66  wice the size of
2d6e0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61   the original da
2d6f0 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 72  tabase file is r
2d700 65 71 75 69 72 65 64 20 69 6e 20 66 72 65 65 0a  equired in free.
2d710 64 69 73 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e  disk space...<p>
2d720 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d  ^The VACUUM comm
2d730 61 6e 64 20 6d 61 79 20 63 68 61 6e 67 65 20 74  and may change t
2d740 68 65 20 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49  he [ROWID | ROWI
2d750 44 73 5d 20 6f 66 20 65 6e 74 72 69 65 73 20 69  Ds] of entries i
2d760 6e 20 61 6e 79 0a 74 61 62 6c 65 73 20 74 68 61  n any.tables tha
2d770 74 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 61 6e  t do not have an
2d780 20 65 78 70 6c 69 63 69 74 20 5b 49 4e 54 45 47   explicit [INTEG
2d790 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e  ER PRIMARY KEY].
2d7a0 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43  .</p>..<p>^A VAC
2d7b0 55 55 4d 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  UUM will fail if
2d7c0 20 74 68 65 72 65 20 69 73 20 61 6e 20 6f 70 65   there is an ope
2d7d0 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 6f  n transaction, o
2d7e0 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f  r if there are o
2d7f0 6e 65 20 6f 72 0a 6d 6f 72 65 20 61 63 74 69 76  ne or.more activ
2d800 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
2d810 20 77 68 65 6e 20 69 74 20 69 73 20 72 75 6e 2e   when it is run.
2d820 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c  ..<p>^(As of SQL
2d830 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c  ite version 3.1,
2d840 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20   an alternative 
2d850 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41 43  to using the VAC
2d860 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72  UUM command to.r
2d870 65 63 6c 61 69 6d 20 73 70 61 63 65 20 61 66 74  eclaim space aft
2d880 65 72 20 64 61 74 61 20 68 61 73 20 62 65 65 6e  er data has been
2d890 20 64 65 6c 65 74 65 64 20 69 73 20 61 75 74 6f   deleted is auto
2d8a0 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e  -vacuum mode, en
2d8b0 61 62 6c 65 64 20 75 73 69 6e 67 0a 74 68 65 20  abled using.the 
2d8c0 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72  [auto_vacuum] pr
2d8d0 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61  agma.)^ ^When [a
2d8e0 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65  uto_vacuum] is e
2d8f0 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74  nabled for a dat
2d900 61 62 61 73 65 0a 66 72 65 65 20 70 61 67 65 73  abase.free pages
2d910 20 6d 61 79 20 62 65 20 72 65 63 6c 61 69 6d 65   may be reclaime
2d920 64 20 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67  d after deleting
2d930 20 64 61 74 61 2c 20 63 61 75 73 69 6e 67 20 74   data, causing t
2d940 68 65 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e  he file to shrin
2d950 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65 62 75 69  k,.without rebui
2d960 6c 64 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65  lding the entire
2d970 20 64 61 74 61 62 61 73 65 20 75 73 69 6e 67 20   database using 
2d980 56 41 43 55 55 4d 2e 20 20 48 6f 77 65 76 65 72  VACUUM.  However
2d990 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61  , using.[auto_va
2d9a0 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74  cuum] can lead t
2d9b0 6f 20 65 78 74 72 61 20 64 61 74 61 62 61 73 65  o extra database
2d9c0 20 66 69 6c 65 20 66 72 61 67 6d 65 6e 74 61 74   file fragmentat
2d9d0 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f  ion.  And [auto_
2d9e0 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74  vacuum].does not
2d9f0 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c   compact partial
2da00 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20  ly filled pages 
2da10 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2da20 61 73 20 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a  as VACUUM does..
2da30 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
2da40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da80 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
2da90 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59  tion {INDEXED BY
2daa0 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e  } indexedby {{IN
2dab0 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49  DEXED BY} {NOT I
2dac0 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e  NDEXED}}..</tcl>
2dad0 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44  .<p>^The INDEXED
2dae0 20 42 59 20 70 68 72 61 73 65 20 66 6f 72 63 65   BY phrase force
2daf0 73 20 74 68 65 20 5b 53 51 4c 69 74 65 20 71 75  s the [SQLite qu
2db00 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74 6f 20  ery planner] to 
2db10 75 73 65 20 61 0a 70 61 72 74 69 63 75 6c 61 72  use a.particular
2db20 20 6e 61 6d 65 64 20 69 6e 64 65 78 20 6f 6e 20   named index on 
2db30 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 53 45 4c  a [DELETE], [SEL
2db40 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45  ECT], or [UPDATE
2db50 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65  ] statement..The
2db60 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61   INDEXED BY phra
2db70 73 65 20 69 73 20 61 6e 20 65 78 74 65 6e 73 69  se is an extensi
2db80 6f 6e 20 74 68 61 74 20 69 73 20 70 61 72 74 69  on that is parti
2db90 63 75 6c 61 72 20 74 6f 20 53 51 4c 69 74 65 20  cular to SQLite 
2dba0 61 6e 64 0a 69 73 20 6e 6f 74 20 70 6f 72 74 61  and.is not porta
2dbb0 62 6c 65 20 74 6f 20 6f 74 68 65 72 20 53 51 4c  ble to other SQL
2dbc0 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
2dbd0 73 2e 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42  s..The INDEXED B
2dbe0 59 20 70 68 72 61 73 65 20 63 61 6e 20 62 65 20  Y phrase can be 
2dbf0 73 65 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c  seen in the foll
2dc00 6f 77 69 6e 67 20 73 79 6e 74 61 78 0a 64 69 61  owing syntax.dia
2dc10 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  grams:</p>..<tcl
2dc20 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  >.RecursiveBubbl
2dc30 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69  eDiagram qualifi
2dc40 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f  ed-table-name.</
2dc50 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49  tcl>..<p>^The "I
2dc60 4e 44 45 58 45 44 20 42 59 20 69 6e 64 65 78 2d  NDEXED BY index-
2dc70 6e 61 6d 65 22 20 70 68 72 61 73 65 20 73 70 65  name" phrase spe
2dc80 63 69 66 69 65 73 20 74 68 61 74 20 74 68 65 20  cifies that the 
2dc90 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74  named index.must
2dca0 20 62 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65   be used in orde
2dcb0 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c  r to look up val
2dcc0 75 65 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65  ues on the prece
2dcd0 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20  ding table..^If 
2dce0 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20  index-name does 
2dcf0 6e 6f 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e  not exist or can
2dd00 6e 6f 74 20 62 65 20 75 73 65 64 20 66 6f 72 20  not be used for 
2dd10 74 68 65 20 71 75 65 72 79 2c 20 74 68 65 6e 0a  the query, then.
2dd20 74 68 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20  the preparation 
2dd30 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  of the SQL state
2dd40 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68  ment fails..^(Th
2dd50 65 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20  e "NOT INDEXED" 
2dd60 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
2dd70 20 74 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73   that no index s
2dd80 68 61 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65  hall be used whe
2dd90 6e 0a 61 63 63 65 73 73 69 6e 67 20 74 68 65 20  n.accessing the 
2dda0 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2c  preceding table,
2ddb0 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69   including impli
2ddc0 65 64 20 69 6e 64 69 63 65 73 20 63 72 65 61 74  ed indices creat
2ddd0 65 20 62 79 0a 55 4e 49 51 55 45 20 61 6e 64 20  e by.UNIQUE and 
2dde0 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73  PRIMARY KEY cons
2ddf0 74 72 61 69 6e 74 73 2e 20 20 48 6f 77 65 76 65  traints.  Howeve
2de00 72 2c 20 74 68 65 20 49 4e 54 45 47 45 52 20 50  r, the INTEGER P
2de10 52 49 4d 41 52 59 20 4b 45 59 0a 63 61 6e 20 73  RIMARY KEY.can s
2de20 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  till be used to 
2de30 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20  look up entries 
2de40 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49  even when "NOT I
2de50 4e 44 45 58 45 44 22 20 69 73 20 73 70 65 63 69  NDEXED" is speci
2de60 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  fied.)^</p>..<p>
2de70 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73  Some SQL databas
2de80 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64  e engines provid
2de90 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22  e non-standard "
2dea0 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73  hint" mechanisms
2deb0 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73   which.can be us
2dec0 65 64 20 74 6f 20 67 69 76 65 20 74 68 65 20 71  ed to give the q
2ded0 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63  uery optimizer c
2dee0 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61 74 20  lues about what 
2def0 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c  indices it shoul
2df00 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  d.use for a part
2df10 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74  icular statement
2df20 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42 59 20  .  The INDEX BY 
2df30 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65  clause of SQLite
2df40 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d   is .<em>not</em
2df50 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68  > a hinting mech
2df60 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f  anism and it sho
2df70 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20  uld not be used 
2df80 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e  as such..^The IN
2df90 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
2dfa0 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68  does not give th
2dfb0 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74  e optimizer hint
2dfc0 73 20 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e  s about which in
2dfd0 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67  dex.to use; it g
2dfe0 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a  ives the optimiz
2dff0 65 72 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74  er a requirement
2e000 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65 78 20   of which index 
2e010 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20  to use..^If the 
2e020 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
2e030 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65  is unable to use
2e040 20 74 68 65 20 69 6e 64 65 78 20 73 70 65 63 69   the index speci
2e050 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45  fied by the.INDE
2e060 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  X BY clause, the
2e070 6e 20 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c  n the query will
2e080 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
2e090 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ror.</p>..<p>The
2e0a0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
2e0b0 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65  se is <em>not</e
2e0c0 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  m> intended for 
2e0d0 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68  use in tuning.th
2e0e0 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66  e performance of
2e0f0 20 61 20 71 75 65 72 79 2e 20 20 54 68 65 20 69   a query.  The i
2e100 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44  ntent of the IND
2e110 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69  EXED BY clause i
2e120 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e  s.to raise a run
2e130 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61  -time error if a
2e140 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20   schema change, 
2e150 73 75 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67  such as dropping
2e160 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20   or.creating an 
2e170 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20 74 68  index, causes th
2e180 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72  e query plan for
2e190 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76   a time-sensitiv
2e1a0 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67  e query.to chang
2e1b0 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20  e.  The INDEXED 
2e1c0 42 59 20 63 6c 61 75 73 65 20 69 73 20 64 65 73  BY clause is des
2e1d0 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65  igned to help de
2e1e0 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65  tect.undesirable
2e1f0 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e   query plan chan
2e200 67 65 73 20 64 75 72 69 6e 67 20 72 65 67 72 65  ges during regre
2e210 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44  ssion testing..D
2e220 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64  evelopers are ad
2e230 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69 74  monished to omit
2e240 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44 45   all use of INDE
2e250 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a 61 70  XED BY during.ap
2e260 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69 67 6e  plication design
2e270 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  , implementation
2e280 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64 20 74  , testing, and t
2e290 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58  uning.  If.INDEX
2e2a0 45 44 20 42 59 20 69 73 20 74 6f 20 62 65 20 75  ED BY is to be u
2e2b0 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74 20 73  sed at all, it s
2e2c0 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72 74 65  hould be inserte
2e2d0 64 20 61 74 20 74 68 65 20 76 65 72 79 0a 65 6e  d at the very.en
2e2e0 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c 6f 70  d of the develop
2e2f0 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77 68 65  ment process whe
2e300 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22  n "locking down"
2e310 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a   a design.</p>..
2e320 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68  <h3>See Also:</h
2e330 33 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  3>..<ol>.<li><p>
2e340 54 68 65 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e  The [query plann
2e350 65 72 20 63 68 65 63 6b 6c 69 73 74 5d 20 64 65  er checklist] de
2e360 73 63 72 69 62 65 73 20 73 74 65 70 73 20 74 68  scribes steps th
2e370 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64  at application.d
2e380 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64  evelopers should
2e390 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 68 65   following to he
2e3a0 6c 70 20 72 65 73 6f 6c 76 65 20 71 75 65 72 79  lp resolve query
2e3b0 20 70 6c 61 6e 6e 65 72 20 70 72 6f 62 6c 65 6d   planner problem
2e3c0 73 2e 0a 4e 6f 74 69 63 65 20 74 68 65 20 74 68  s..Notice the th
2e3d0 61 74 20 74 68 65 20 75 73 65 20 6f 66 20 49 4e  at the use of IN
2e3e0 44 45 58 45 44 20 42 59 20 69 73 20 61 20 6c 61  DEXED BY is a la
2e3f0 73 74 20 72 65 73 6f 72 74 2c 20 74 6f 20 62 65  st resort, to be
2e400 20 75 73 65 64 20 6f 6e 6c 79 0a 77 68 65 6e 20   used only.when 
2e410 61 6c 6c 20 6f 74 68 65 72 20 6d 65 61 73 75 72  all other measur
2e420 65 73 20 66 61 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c  es fail.</p>..<l
2e430 69 3e 3c 70 3e 5b 75 70 6c 75 73 63 6f 6e 74 72  i><p>[upluscontr
2e440 6f 6c 7c 54 68 65 20 75 6e 61 72 79 20 22 2b 22  ol|The unary "+"
2e450 20 6f 70 65 72 61 74 6f 72 5d 0a 63 61 6e 20 62   operator].can b
2e460 65 20 75 73 65 64 20 74 6f 20 64 69 73 71 75 61  e used to disqua
2e470 6c 69 66 79 20 74 65 72 6d 73 20 69 6e 20 74 68  lify terms in th
2e480 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
2e490 72 6f 6d 20 75 73 65 20 62 79 20 69 6e 64 69 63  rom use by indic
2e4a0 65 73 2e 0a 43 61 72 65 66 75 6c 20 75 73 65 20  es..Careful use 
2e4b0 6f 66 20 75 6e 61 72 79 20 2b 20 63 61 6e 20 73  of unary + can s
2e4c0 6f 6d 65 74 69 6d 65 73 20 68 65 6c 70 20 70 72  ometimes help pr
2e4d0 65 76 65 6e 74 20 74 68 65 20 71 75 65 72 79 20  event the query 
2e4e0 70 6c 61 6e 6e 65 72 20 66 72 6f 6d 0a 63 68 6f  planner from.cho
2e4f0 6f 73 69 6e 67 20 61 20 70 6f 6f 72 20 69 6e 64  osing a poor ind
2e500 65 78 20 77 69 74 68 6f 75 74 20 72 65 73 74 72  ex without restr
2e510 69 63 74 69 6e 67 20 69 74 20 74 6f 20 75 73 69  icting it to usi
2e520 6e 67 20 6f 6e 65 20 73 70 65 63 69 66 69 63 20  ng one specific 
2e530 69 6e 64 65 78 2e 0a 43 61 72 65 66 75 6c 20 70  index..Careful p
2e540 6c 61 63 65 6d 65 6e 74 20 6f 66 20 75 6e 61 72  lacement of unar
2e550 79 20 2b 20 6f 70 65 72 61 74 6f 72 73 20 69 73  y + operators is
2e560 20 61 20 62 65 74 74 65 72 20 6d 65 74 68 6f 64   a better method
2e570 20 66 6f 72 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67   for controlling
2e580 20 0a 77 68 69 63 68 20 69 6e 64 69 63 65 73 20   .which indices 
2e590 61 72 65 20 75 73 65 64 20 62 79 20 61 20 71 75  are used by a qu
2e5a0 65 72 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70  ery.</p>..<li><p
2e5b0 3e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74  >The [sqlite3_st
2e5c0 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 43 2f 43  mt_status()] C/C
2e5d0 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 74 6f 67  ++ interface tog
2e5e0 65 74 68 65 72 20 77 69 74 68 20 74 68 65 0a 5b  ether with the.[
2e5f0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
2e600 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d  S_FULLSCAN_STEP]
2e610 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d   and [SQLITE_STM
2e620 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 20 76 65  TSTATUS_SORT] ve
2e630 72 62 73 0a 63 61 6e 20 62 65 20 75 73 65 64 20  rbs.can be used 
2e640 74 6f 20 64 65 74 65 63 74 20 61 74 20 72 75 6e  to detect at run
2e650 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e 20 53 51  -time when an SQ
2e660 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e  L statement is n
2e670 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65 63 74  ot.making effect
2e680 69 76 65 20 75 73 65 20 6f 66 20 69 6e 64 69 63  ive use of indic
2e690 65 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c 69 63  es.  Many applic
2e6a0 61 74 69 6f 6e 73 20 6d 61 79 20 70 72 65 66 65  ations may prefe
2e6b0 72 20 74 6f 0a 75 73 65 20 74 68 65 20 5b 73 71  r to.use the [sq
2e6c0 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75  lite3_stmt_statu
2e6d0 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74  s()] interface t
2e6e0 6f 20 64 65 74 65 63 74 20 69 6e 64 65 78 20 6d  o detect index m
2e6f0 69 73 75 73 65 0a 72 61 74 68 65 72 20 74 68 61  isuse.rather tha
2e700 6e 20 74 68 65 20 49 4e 44 45 58 45 44 20 42 59  n the INDEXED BY
2e710 20 70 68 72 61 73 65 20 64 65 73 63 72 69 62 65   phrase describe
2e720 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c  d here.</p>.</ol
2e730 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
2e740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e780 23 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74 20  ######.# A list 
2e790 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20  of keywords.  A 
2e7a0 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20  asterisk occurs 
2e7b0 61 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72  after the keywor
2e7c0 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20  d if it is on.# 
2e7d0 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73  the fallback lis
2e7e0 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64  t..#.set keyword
2e7f0 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20  _list [lsort {. 
2e800 20 20 41 42 4f 52 54 0a 20 20 20 41 43 54 49 4f    ABORT.   ACTIO
2e810 4e 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54 45  N.   ADD.   AFTE
2e820 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45  R.   ALL.   ALTE
2e830 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20  R.   ANALYZE.   
2e840 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53 43  AND.   AS.   ASC
2e850 0a 20 20 20 41 54 54 41 43 48 0a 20 20 20 41 55  .   ATTACH.   AU
2e860 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42  TOINCREMENT.   B
2e870 45 46 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a 20  EFORE.   BEGIN. 
2e880 20 20 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a    BETWEEN.   BY.
2e890 20 20 20 43 41 53 43 41 44 45 0a 20 20 20 43 41     CASCADE.   CA
2e8a0 53 45 0a 20 20 20 43 41 53 54 0a 20 20 20 43 48  SE.   CAST.   CH
2e8b0 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20  ECK.   COLLATE. 
2e8c0 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d    COLUMN.   COMM
2e8d0 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20  IT.   CONFLICT. 
2e8e0 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20    CONSTRAINT.   
2e8f0 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a  CREATE.   CROSS.
2e900 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54 45 0a     CURRENT_DATE.
2e910 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a     CURRENT_TIME.
2e920 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53     CURRENT_TIMES
2e930 54 41 4d 50 0a 20 20 20 44 41 54 41 42 41 53 45  TAMP.   DATABASE
2e940 0a 20 20 20 44 45 46 41 55 4c 54 0a 20 20 20 44  .   DEFAULT.   D
2e950 45 46 45 52 52 45 44 0a 20 20 20 44 45 46 45 52  EFERRED.   DEFER
2e960 52 41 42 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a  RABLE.   DELETE.
2e970 20 20 20 44 45 53 43 0a 20 20 20 44 45 54 41 43     DESC.   DETAC
2e980 48 0a 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20  H.   DISTINCT.  
2e990 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20   DROP.   END.   
2e9a0 45 41 43 48 0a 20 20 20 45 4c 53 45 0a 20 20 20  EACH.   ELSE.   
2e9b0 45 53 43 41 50 45 0a 20 20 20 45 58 43 45 50 54  ESCAPE.   EXCEPT
2e9c0 0a 20 20 20 45 58 43 4c 55 53 49 56 45 0a 20 20  .   EXCLUSIVE.  
2e9d0 20 45 58 49 53 54 53 0a 20 20 20 45 58 50 4c 41   EXISTS.   EXPLA
2e9e0 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20 46 4f  IN.   FAIL.   FO
2e9f0 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20  R.   FOREIGN.   
2ea00 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20  FROM.   FULL.   
2ea10 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50 0a 20 20  GLOB.   GROUP.  
2ea20 20 48 41 56 49 4e 47 0a 20 20 20 49 46 0a 20 20   HAVING.   IF.  
2ea30 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44   IGNORE.   IMMED
2ea40 49 41 54 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e  IATE.   IN.   IN
2ea50 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44 0a 20  DEX.   INDEXED. 
2ea60 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49    INITIALLY.   I
2ea70 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52 54 0a 20  NNER.   INSERT. 
2ea80 20 20 49 4e 53 54 45 41 44 0a 20 20 20 49 4e 54    INSTEAD.   INT
2ea90 45 52 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20  ERSECT.   INTO. 
2eaa0 20 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20    IS.   ISNULL. 
2eab0 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20    JOIN.   KEY.  
2eac0 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20   LEFT.   LIKE.  
2ead0 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a   LIMIT.   MATCH.
2eae0 20 20 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f     NATURAL.   NO
2eaf0 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55  .   NOT.   NOTNU
2eb00 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46  LL.   NULL.   OF
2eb10 0a 20 20 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e  .   OFFSET.   ON
2eb20 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a  .   OR.   ORDER.
2eb30 20 20 20 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e     OUTER.   PLAN
2eb40 0a 20 20 20 50 52 41 47 4d 41 0a 20 20 20 50 52  .   PRAGMA.   PR
2eb50 49 4d 41 52 59 0a 20 20 20 51 55 45 52 59 0a 20  IMARY.   QUERY. 
2eb60 20 20 52 41 49 53 45 0a 20 20 20 52 45 43 55 52    RAISE.   RECUR
2eb70 53 49 56 45 0a 20 20 20 52 45 46 45 52 45 4e 43  SIVE.   REFERENC
2eb80 45 53 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20  ES.   REGEXP.   
2eb90 52 45 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41  REINDEX.   RELEA
2eba0 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20  SE.   RENAME.   
2ebb0 52 45 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52  REPLACE.   RESTR
2ebc0 49 43 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20  ICT.   RIGHT.   
2ebd0 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a  ROLLBACK.   ROW.
2ebe0 20 20 20 53 41 56 45 50 4f 49 4e 54 0a 20 20 20     SAVEPOINT.   
2ebf0 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20  SELECT.   SET.  
2ec00 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20   TABLE.   TEMP. 
2ec10 20 20 54 45 4d 50 4f 52 41 52 59 0a 20 20 20 54    TEMPORARY.   T
2ec20 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41  HEN.   TO.   TRA
2ec30 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47  NSACTION.   TRIG
2ec40 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20  GER.   UNION.   
2ec50 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54 45  UNIQUE.   UPDATE
2ec60 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43  .   USING.   VAC
2ec70 55 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20  UUM.   VALUES.  
2ec80 20 56 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c   VIEW.   VIRTUAL
2ec90 0a 20 20 20 57 49 54 48 0a 20 20 20 57 49 54 48  .   WITH.   WITH
2eca0 4f 55 54 0a 20 20 20 57 48 45 4e 0a 20 20 20 57  OUT.   WHEN.   W
2ecb0 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73  HERE.}]..hd_puts
2ecc0 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64   {<DIV class="pd
2ecd0 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63  f_section">}.Sec
2ece0 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79  tion {SQLite Key
2ecf0 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20  words} keywords 
2ed00 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20  {{*SQL keyword} 
2ed10 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
2ed20 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d  hd_puts {</DIV>}
2ed30 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
2ed40 53 51 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65  SQL standard spe
2ed50 63 69 66 69 65 73 20 61 20 68 75 67 65 20 6e 75  cifies a huge nu
2ed60 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73  mber of keywords
2ed70 20 77 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62   which may not.b
2ed80 65 20 75 73 65 64 20 61 73 20 74 68 65 20 6e 61  e used as the na
2ed90 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69  mes of tables, i
2eda0 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c  ndices, columns,
2edb0 20 64 61 74 61 62 61 73 65 73 2c 20 75 73 65 72   databases, user
2edc0 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f  -defined.functio
2edd0 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20  ns, collations, 
2ede0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f  virtual table mo
2edf0 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74  dules, or any ot
2ee00 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74  her named object
2ee10 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65  ..The list of ke
2ee20 79 77 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e  ywords is so lon
2ee30 67 20 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c  g that few peopl
2ee40 65 20 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74  e can remember t
2ee50 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73  hem all..For mos
2ee60 74 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72  t SQL code, your
2ee70 20 73 61 66 65 73 74 20 62 65 74 20 69 73 20 74   safest bet is t
2ee80 6f 20 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20  o never use any 
2ee90 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65  English language
2eea0 0a 77 6f 72 64 20 61 73 20 74 68 65 20 6e 61 6d  .word as the nam
2eeb0 65 20 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69  e of a user-defi
2eec0 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a  ned object.</p>.
2eed0 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20  .<p>If you want 
2eee0 74 6f 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64  to use a keyword
2eef0 20 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20   as a name, you 
2ef00 6e 65 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74  need to quote it
2ef10 2e 20 20 54 68 65 72 65 0a 61 72 65 20 66 6f 75  .  There.are fou
2ef20 72 20 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e  r ways of quotin
2ef30 67 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51  g keywords in SQ
2ef40 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c  Lite:</p>..<p>.<
2ef50 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
2ef60 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  le>.<tr>.<td val
2ef70 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65  ign="top"><b>'ke
2ef80 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c  yword'</b></td><
2ef90 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
2efa0 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77  td>..<td>^A keyw
2efb0 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75  ord in single qu
2efc0 6f 74 65 73 20 69 73 20 61 20 73 74 72 69 6e 67  otes is a string
2efd0 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f   literal.</td></
2efe0 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61  tr>..<tr>.<td va
2eff0 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b  lign="top"><b>"k
2f000 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e  eyword"</b></td>
2f010 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e  <td></td>..<td>^
2f020 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75  A keyword in dou
2f030 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20 61 6e  ble-quotes is an
2f040 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64   identifier.</td
2f050 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
2f060 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
2f070 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64 26 23 39  >&#91;keyword&#9
2f080 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  3;</b></td><td><
2f090 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
2f0a0 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e  word enclosed in
2f0b0 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73   square brackets
2f0c0 20 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20   is .        an 
2f0d0 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69  identifier.  Thi
2f0e0 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72  s is not standar
2f0f0 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f  d SQL.  This quo
2f100 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20  ting mechanism. 
2f110 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62         is used b
2f120 79 20 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20  y MS Access and 
2f130 53 51 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69  SQL Server and i
2f140 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51  s included in SQ
2f150 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20  Lite for.       
2f160 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c   compatibility.<
2f170 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09  /td></tr>..<tr>.
2f180 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
2f190 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64  ><b>&#96;keyword
2f1a0 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  &#96;</b></td><t
2f1b0 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
2f1c0 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64  keyword enclosed
2f1d0 20 69 6e 20 67 72 61 76 65 20 61 63 63 65 6e 74   in grave accent
2f1e0 73 20 28 41 53 43 49 49 20 63 6f 64 65 20 39 36  s (ASCII code 96
2f1f0 29 20 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e  ) is .        an
2f200 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68   identifier.  Th
2f210 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61  is is not standa
2f220 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75  rd SQL.  This qu
2f230 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a  oting mechanism.
2f240 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20          is used 
2f250 62 79 20 4d 79 53 51 4c 20 61 6e 64 20 69 73 20  by MySQL and is 
2f260 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69  included in SQLi
2f270 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63  te for.        c
2f280 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74  ompatibility.</t
2f290 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e  d></tr>.</table>
2f2a0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  .</blockquote>.<
2f2b0 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69  /p>..<p>For resi
2f2c0 6c 69 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66  lience when conf
2f2d0 72 6f 6e 74 65 64 20 77 69 74 68 20 68 69 73 74  ronted with hist
2f2e0 6f 72 69 63 61 6c 20 53 51 4c 20 73 74 61 74 65  orical SQL state
2f2f0 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77 69  ments, SQLite.wi
2f300 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e  ll sometimes ben
2f310 64 20 74 68 65 20 71 75 6f 74 69 6e 67 20 72 75  d the quoting ru
2f320 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a  les above:</p>..
2f330 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  <ul>.<li><p>^If 
2f340 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e  a keyword in sin
2f350 67 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20  gle.quotes (ex: 
2f360 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20  <b>'key'</b> or 
2f370 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69  <b>'glob'</b>) i
2f380 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74  s used in a cont
2f390 65 78 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65  ext where.an ide
2f3a0 6e 74 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77  ntifier is allow
2f3b0 65 64 20 62 75 74 20 77 68 65 72 65 20 61 20 73  ed but where a s
2f3c0 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73  tring literal is
2f3d0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68   not allowed, th
2f3e0 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20  en.the token is 
2f3f0 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65  understood to be
2f400 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69   an identifier i
2f410 6e 73 74 65 61 64 20 6f 66 20 61 20 73 74 72 69  nstead of a stri
2f420 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e  ng literal..</p>
2f430 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49  </li>..<li><p>^I
2f440 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64  f a keyword in d
2f450 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78  ouble.quotes (ex
2f460 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f  : <b>"key"</b> o
2f470 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29  r <b>"glob"</b>)
2f480 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f   is used in a co
2f490 6e 74 65 78 74 20 77 68 65 72 65 0a 69 74 20 63  ntext where.it c
2f4a0 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65  annot be resolve
2f4b0 64 20 74 6f 20 61 6e 20 69 64 65 6e 74 69 66 69  d to an identifi
2f4c0 65 72 20 62 75 74 20 77 68 65 72 65 20 61 20 73  er but where a s
2f4d0 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73  tring literal.is
2f4e0 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74   allowed, then t
2f4f0 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65  he token is unde
2f500 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73  rstood to be a s
2f510 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e  tring literal in
2f520 73 74 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e  stead.of an iden
2f530 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e  tifier.</p></li>
2f540 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72  .</ul>..<p>Progr
2f550 61 6d 6d 65 72 73 20 61 72 65 20 63 61 75 74 69  ammers are cauti
2f560 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20  oned not to use 
2f570 74 68 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f  the two exceptio
2f580 6e 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a  ns described in.
2f590 74 68 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c  the previous bul
2f5a0 6c 65 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73  lets.  We emphas
2f5b0 69 7a 65 20 74 68 61 74 20 74 68 65 79 20 65 78  ize that they ex
2f5c0 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74  ist only so that
2f5d0 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72   old.and ill-for
2f5e0 6d 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  med SQL statemen
2f5f0 74 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72  ts will run corr
2f600 65 63 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76  ectly.  Future v
2f610 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74  ersions of.SQLit
2f620 65 20 6d 69 67 68 74 20 72 61 69 73 65 20 65 72  e might raise er
2f630 72 6f 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  rors instead of 
2f640 61 63 63 65 70 74 69 6e 67 20 74 68 65 20 6d 61  accepting the ma
2f650 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e  lformed.statemen
2f660 74 73 20 63 6f 76 65 72 65 64 20 62 79 20 74 68  ts covered by th
2f670 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61 62 6f  e exceptions abo
2f680 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c  ve.</p>..<p>.SQL
2f690 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79  ite adds new key
2f6a0 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20  words from time 
2f6b0 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20  to time when it 
2f6c0 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65 61  takes on new fea
2f6d0 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65  tures..So to pre
2f6e0 76 65 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 66  vent your code f
2f6f0 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e  rom being broken
2f700 20 62 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e   by future enhan
2f710 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f  cements, you sho
2f720 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f  uld.normally quo
2f730 74 65 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65  te any identifie
2f740 72 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67  r that is an Eng
2f750 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f  lish language wo
2f760 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20  rd, even if.you 
2f770 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a  do not have to..
2f780 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69  </p>..<p>.The li
2f790 73 74 20 62 65 6c 6f 77 20 73 68 6f 77 73 20 61  st below shows a
2f7a0 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6b 65 79 77  ll possible keyw
2f7b0 6f 72 64 73 20 75 73 65 64 20 62 79 20 61 6e 79  ords used by any
2f7c0 20 62 75 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65   build of.SQLite
2f7d0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 5b   regardless of [
2f7e0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
2f7f0 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65  ions].  .Most re
2f800 61 73 6f 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75  asonable configu
2f810 72 61 74 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74  rations use most
2f820 20 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65   or all of these
2f830 20 6b 65 79 77 6f 72 64 73 2c 0a 62 75 74 20 73   keywords,.but s
2f840 6f 6d 65 20 6b 65 79 77 6f 72 64 73 20 6d 61 79  ome keywords may
2f850 20 62 65 20 6f 6d 69 74 74 65 64 20 77 68 65 6e   be omitted when
2f860 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65   SQL language fe
2f870 61 74 75 72 65 73 20 61 72 65 0a 64 69 73 61 62  atures are.disab
2f880 6c 65 64 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73  led..^(Regardles
2f890 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 65  s of the compile
2f8a0 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74  -time configurat
2f8b0 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74 69 66  ion, any identif
2f8c0 69 65 72 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ier that is not 
2f8d0 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  on.the following
2f8e0 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c   <tcl>hd_puts [l
2f8f0 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f  length $keyword_
2f900 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d  list]</tcl> elem
2f910 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20  ent.list is not 
2f920 61 20 6b 65 79 77 6f 72 64 20 74 6f 20 74 68 65  a keyword to the
2f930 20 53 51 4c 20 70 61 72 73 65 72 20 69 6e 20 53   SQL parser in S
2f940 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  QLite:.</p>..<bl
2f950 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
2f960 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e 3c 74   width="100%"><t
2f970 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65  r>.<td align="le
2f980 66 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ft" valign="top"
2f990 20 77 69 64 74 68 3d 22 32 30 25 22 3e 0a 3c 74   width="20%">.<t
2f9a0 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67  cl>.set n [lleng
2f9b0 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74  th $keyword_list
2f9c0 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74  ].set nCol 5.set
2f9d0 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e   nRow [expr {($n
2f9e0 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d  +$nCol-1)/$nCol}
2f9f0 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61 63  ].set i 0.foreac
2fa00 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f  h word $keyword_
2fa10 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 24 69 3d  list {.  if {$i=
2fa20 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64  =$nRow} {.    hd
2fa30 5f 70 75 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20  _puts "</td><td 
2fa40 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61  valign=\"top\" a
2fa50 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69  lign=\"left\" wi
2fa60 64 74 68 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20  dth=\"20%\">".  
2fa70 20 20 73 65 74 20 69 20 31 0a 20 20 7d 20 65 6c    set i 1.  } el
2fa80 73 65 20 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a  se {.    incr i.
2fa90 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 24    }.  hd_puts "$
2faa0 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f  word<br>\n".}.</
2fab0 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c  tcl>.</td></tr><
2fac0 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75  /table></blockqu
2fad0 6f 74 65 3e 29 5e 0a                             ote>)^.