Documentation Source Text

Hex Artifact Content
Login

Artifact eb338063df669a0ba50bde28b3b50214c5bc76a9:


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 2c 20 63 6f 6c 75 6d 6e  -queries, column
8110: 20 6f 72 20 74 61 62 6c 65 20 72 65 66 65 72 65   or table refere
8120: 6e 63 65 73 2c 20 6f 72 20 73 74 72 69 6e 67 20  nces, or string 
8130: 6c 69 74 65 72 61 6c 73 0a 65 6e 63 6c 6f 73 65  literals.enclose
8140: 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74  d in double-quot
8150: 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20 73 69  es instead of si
8160: 6e 67 6c 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c 70  ngle-quotes...<p
8170: 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20 72  >^(Each time a r
8180: 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ow is inserted i
8190: 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 79  nto the table by
81a0: 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
81b0: 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73 20  ment that .does 
81c0: 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70 6c  not provide expl
81d0: 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72 20  icit values for 
81e0: 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  all table column
81f0: 73 20 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f  s the values sto
8200: 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20 72  red in.the new r
8210: 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e 65  ow are determine
8220: 64 20 62 79 20 74 68 65 69 72 20 64 65 66 61 75  d by their defau
8230: 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73 20  lt values)^, as 
8240: 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20  follows:..<ul>. 
8250: 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
8260: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
8270: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61   the column is a
8280: 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c 20   constant NULL, 
8290: 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20 20  text, blob or.  
82a0: 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 20    signed-number 
82b0: 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61 74  value, then that
82c0: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 64   value is used d
82d0: 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20 6e  irectly in the n
82e0: 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c  ew row...  <li><
82f0: 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c  p>^If the defaul
8300: 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c  t value of a col
8310: 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
8320: 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68 65  sion in parenthe
8330: 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74 68  ses, then.    th
8340: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
8350: 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
8360: 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73 65  or each row inse
8370: 72 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 73  rted and the res
8380: 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69 6e  ults.    used in
8390: 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20   the new row... 
83a0: 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
83b0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
83c0: 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55 52   a column is CUR
83d0: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
83e0: 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20 43  NT_DATE or.    C
83f0: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
8400: 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
8410: 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65 77   used in the new
8420: 20 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a 20   row is a text. 
8430: 20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f     representatio
8440: 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  n of the current
8450: 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72   UTC date and/or
8460: 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52 52   time. ^For CURR
8470: 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20 20  ENT_TIME, the.  
8480: 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20    format of the 
8490: 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d 3a  value is "HH:MM:
84a0: 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e  SS". ^For CURREN
84b0: 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d 4d  T_DATE, "YYYY-MM
84c0: 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20 66  -DD". ^The.    f
84d0: 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45 4e  ormat for CURREN
84e0: 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20 22  T_TIMESTAMP is "
84f0: 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
8500: 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  :SS"..</ul>..<p>
8510: 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61  ^The COLLATE cla
8520: 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  use specifies th
8530: 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f 6c  e name of a [col
8540: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
8550: 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20 64   to use as.the d
8560: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
8570: 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74 68   sequence for th
8580: 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f  e column. ^If no
8590: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
85a0: 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68  is.specified, th
85b0: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
85c0: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20  ion sequence is 
85d0: 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54  [BINARY]...<p>^T
85e0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
85f0: 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20  umns in a table 
8600: 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74 68  is limited by th
8610: 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f  e [SQLITE_MAX_CO
8620: 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69  LUMN].compile-ti
8630: 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e 41  me parameter. ^A
8640: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61   single row of a
8650: 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74   table cannot st
8660: 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53  ore more than.[S
8670: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
8680: 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 2e  ] bytes of data.
8690: 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65 20   ^Both of these 
86a0: 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c 6f  limits can be lo
86b0: 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d 65  wered at.runtime
86c0: 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69   using the [sqli
86d0: 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f 43  te3_limit()] C/C
86e0: 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70  ++ interface.</p
86f0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
8700: 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73  ent {constraints
8710: 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c  } {constraints}<
8720: 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44 61  /tcl>.<h3>SQL Da
8730: 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c 2f  ta Constraints</
8740: 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  h3>..<tcl>hd_fra
8750: 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f 6e  gment primkeycon
8760: 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 7d  st {PRIMARY KEY}
8770: 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f   {PRIMARY KEY co
8780: 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a  nstraint}</tcl>.
8790: 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20 69  <p>^Each table i
87a0: 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61 76  n SQLite may hav
87b0: 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62  e at most one <b
87c0: 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e  >PRIMARY KEY</b>
87d0: 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79 77  . ^If the.  keyw
87e0: 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45 59  ords PRIMARY KEY
87f0: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 20   are added to a 
8800: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
8810: 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d  n, then the prim
8820: 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74 68  ary key.  for th
8830: 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74 73  e table consists
8840: 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65 20   of that single 
8850: 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20  column. ^Or, if 
8860: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c  a PRIMARY KEY cl
8870: 61 75 73 65 20 0a 20 20 69 73 20 73 70 65 63 69  ause .  is speci
8880: 66 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c 65  fied as a [table
8890: 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68  -constraint], th
88a0: 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  en the primary k
88b0: 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 0a  ey of the table.
88c0: 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68    consists of th
88d0: 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e  e list of column
88e0: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
88f0: 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d 41  art of the PRIMA
8900: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20  RY KEY clause.. 
8910: 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 72 61   ^An error is ra
8920: 69 73 65 64 20 69 66 20 6d 6f 72 65 20 74 68 61  ised if more tha
8930: 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b 45  n one PRIMARY KE
8940: 59 20 63 6c 61 75 73 65 20 61 70 70 65 61 72 73  Y clause appears
8950: 20 69 6e 20 61 0a 20 20 43 52 45 41 54 45 20 54   in a.  CREATE T
8960: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  ABLE statement. 
8970: 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b 45   ^The PRIMARY KE
8980: 59 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f  Y is optional fo
8990: 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  r ordinary table
89a0: 73 0a 20 20 62 75 74 20 69 73 20 72 65 71 75 69  s.  but is requi
89b0: 72 65 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54  red for [WITHOUT
89c0: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a   ROWID] tables..
89d0: 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20 68  .<p>If a table h
89e0: 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  as a single colu
89f0: 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61  mn primary key a
8a00: 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  nd the declared 
8a10: 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20 20 63  type of that.  c
8a20: 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45  olumn is "INTEGE
8a30: 52 22 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  R" and the table
8a40: 20 69 73 20 6e 6f 74 20 61 20 5b 57 49 54 48 4f   is not a [WITHO
8a50: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c  UT ROWID] table,
8a60: 0a 20 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75  .  then the colu
8a70: 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20 61  mn is known as a
8a80: 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n [INTEGER PRIMA
8a90: 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20 62  RY KEY]..  See b
8aa0: 65 6c 6f 77 20 66 6f 72 20 61 20 64 65 73 63 72  elow for a descr
8ab0: 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 70  iption of the sp
8ac0: 65 63 69 61 6c 20 70 72 6f 70 65 72 74 69 65 73  ecial properties
8ad0: 20 61 6e 64 20 62 65 68 61 76 69 6f 72 73 0a 20   and behaviors. 
8ae0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
8af0: 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49   an [INTEGER PRI
8b00: 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e  MARY KEY]...<p>^
8b10: 45 61 63 68 20 72 6f 77 20 69 6e 20 61 20 74 61  Each row in a ta
8b20: 62 6c 65 20 77 69 74 68 20 61 20 70 72 69 6d 61  ble with a prima
8b30: 72 79 20 6b 65 79 20 6d 75 73 74 20 68 61 76 65  ry key must have
8b40: 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e   a unique combin
8b50: 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65  ation.  of value
8b60: 73 20 69 6e 20 69 74 73 20 70 72 69 6d 61 72 79  s in its primary
8b70: 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e 46   key columns. ^F
8b80: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
8b90: 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a 20  of determining. 
8ba0: 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73 20   the uniqueness 
8bb0: 6f 66 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76  of primary key v
8bc0: 61 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61 6c 75  alues, NULL valu
8bd0: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
8be0: 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 0a  d distinct from.
8bf0: 20 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75    all other valu
8c00: 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74  es, including ot
8c10: 68 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66 20 61  her NULLs. ^If a
8c20: 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55  n [INSERT] or [U
8c30: 50 44 41 54 45 5d 0a 20 20 73 74 61 74 65 6d 65  PDATE].  stateme
8c40: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6d  nt attempts to m
8c50: 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65 20  odify the table 
8c60: 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74 20  content so that 
8c70: 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  two or more rows
8c80: 0a 20 20 66 65 61 74 75 72 65 20 69 64 65 6e 74  .  feature ident
8c90: 69 63 61 6c 20 70 72 69 6d 61 72 79 20 6b 65 79  ical primary key
8ca0: 20 76 61 6c 75 65 73 2c 20 69 74 20 69 73 20 61   values, it is a
8cb0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
8cc0: 61 74 69 6f 6e 2e 0a 20 20 41 63 63 6f 72 64 69  ation..  Accordi
8cd0: 6e 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74  ng to the SQL st
8ce0: 61 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20  andard, PRIMARY 
8cf0: 4b 45 59 20 73 68 6f 75 6c 64 20 61 6c 77 61 79  KEY should alway
8d00: 73 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c  s imply NOT NULL
8d10: 2e 0a 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c  ..  Unfortunatel
8d20: 79 2c 20 64 75 65 20 74 6f 20 61 20 62 75 67 20  y, due to a bug 
8d30: 69 6e 20 73 6f 6d 65 20 65 61 72 6c 79 20 76 65  in some early ve
8d40: 72 73 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20  rsions, this is 
8d50: 6e 6f 74 20 74 68 65 0a 20 20 63 61 73 65 20 69  not the.  case i
8d60: 6e 20 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73  n SQLite. ^Unles
8d70: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  s the column is 
8d80: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
8d90: 41 52 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74 68  ARY KEY] or.  th
8da0: 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49  e table is a [WI
8db0: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
8dc0: 6c 65 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  le or the column
8dd0: 20 69 73 20 64 65 63 6c 61 72 65 64 20 4e 4f 54   is declared NOT
8de0: 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65 20   NULL,.  SQLite 
8df0: 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75  allows NULL valu
8e00: 65 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20  es in a PRIMARY 
8e10: 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c  KEY column.  SQL
8e20: 69 74 65 20 63 6f 75 6c 64 20 62 65 20 66 69 78  ite could be fix
8e30: 65 64 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20  ed to.  conform 
8e40: 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 2c  to the standard,
8e50: 20 62 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d 69   but doing so mi
8e60: 67 68 74 20 62 72 65 61 6b 20 6c 65 67 61 63 79  ght break legacy
8e70: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20   applications.. 
8e80: 20 48 65 6e 63 65 2c 20 69 74 20 68 61 73 20 62   Hence, it has b
8e90: 65 65 6e 20 64 65 63 69 64 65 64 20 74 6f 20 6d  een decided to m
8ea0: 65 72 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20 74  erely document t
8eb0: 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c  he fact that SQL
8ec0: 69 74 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20 4e  ite.  allowing N
8ed0: 55 4c 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52 49  ULLs in most PRI
8ee0: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
8ef0: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
8f00: 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e 73 74 20  ent uniqueconst 
8f10: 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75 65  {UNIQUE} {unique
8f20: 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63   constraint}</tc
8f30: 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55 4e 49 51  l>.<p>^A <b>UNIQ
8f40: 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e  UE</b> constrain
8f50: 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  t is similar to 
8f60: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  a PRIMARY KEY co
8f70: 6e 73 74 72 61 69 6e 74 2c 20 65 78 63 65 70 74  nstraint, except
8f80: 0a 20 20 74 68 61 74 20 61 20 73 69 6e 67 6c 65  .  that a single
8f90: 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20   table may have 
8fa0: 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 55 4e  any number of UN
8fb0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73  IQUE constraints
8fc0: 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20 20 55 4e  . ^For each.  UN
8fd0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
8fe0: 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 65 61  on the table, ea
8ff0: 63 68 20 72 6f 77 20 6d 75 73 74 20 63 6f 6e 74  ch row must cont
9000: 61 69 6e 20 61 20 75 6e 69 71 75 65 20 63 6f 6d  ain a unique com
9010: 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61  bination.  of va
9020: 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  lues in the colu
9030: 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20 62  mns identified b
9040: 79 20 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e  y the UNIQUE con
9050: 73 74 72 61 69 6e 74 2e 20 0a 20 20 5e 46 6f 72  straint. .  ^For
9060: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
9070: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
9080: 6e 74 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  nts, NULL values
9090: 0a 20 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  .  are considere
90a0: 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  d distinct from 
90b0: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
90c0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65  , including othe
90d0: 72 20 4e 55 4c 4c 73 2e 0a 0a 3c 70 3e 5e 49 6e  r NULLs...<p>^In
90e0: 20 6d 6f 73 74 20 63 61 73 65 73 2c 20 55 4e 49   most cases, UNI
90f0: 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20  QUE and PRIMARY 
9100: 4b 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74  KEY.  constraint
9110: 73 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65  s are implemente
9120: 64 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 20  d by creating a 
9130: 75 6e 69 71 75 65 20 69 6e 64 65 78 20 69 6e 20  unique index in 
9140: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
9150: 28 54 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20  (The exceptions 
9160: 61 72 65 20 5b 49 4e 54 45 47 45 52 20 50 52 49  are [INTEGER PRI
9170: 4d 41 52 59 20 4b 45 59 5d 20 61 6e 64 20 50 52  MARY KEY] and PR
9180: 49 4d 41 52 59 20 4b 45 59 73 20 6f 6e 20 0a 20  IMARY KEYs on . 
9190: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
91a0: 20 74 61 62 6c 65 73 2e 29 0a 20 20 48 65 6e 63   tables.).  Henc
91b0: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e, the following
91c0: 20 73 63 68 65 6d 61 73 20 61 72 65 20 6c 6f 67   schemas are log
91d0: 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e  ically equivalen
91e0: 74 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69  t:..  <ol>.  <li
91f0: 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45  ><p>CREATE TABLE
9200: 20 74 31 28 61 2c 20 62 20 55 4e 49 51 55 45 29   t1(a, b UNIQUE)
9210: 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54  ;.  <li><p>CREAT
9220: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20  E TABLE t1(a, b 
9230: 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20  PRIMARY KEY);.  
9240: 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41  <li><p>CREATE TA
9250: 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 3c 62 72  BLE t1(a, b);<br
9260: 3e 0a 20 20 20 20 20 20 20 20 20 43 52 45 41 54  >.         CREAT
9270: 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74  E UNIQUE INDEX t
9280: 31 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 3c  1b ON t1(b);.  <
9290: 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /ol>..<tcl>hd_fr
92a0: 61 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d  agment {ckconst}
92b0: 20 7b 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20   {CHECK} {CHECK 
92c0: 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45  constraint} {CHE
92d0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c  CK constraints}<
92e0: 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e  /tcl>.<p>^(A <b>
92f0: 43 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72  CHECK</b> constr
9300: 61 69 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61  aint may be atta
9310: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
9320: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20   definition or. 
9330: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20   specified as a 
9340: 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  table constraint
9350: 2e 20 49 6e 20 70 72 61 63 74 69 63 65 20 69 74  . In practice it
9360: 20 6d 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72   makes no differ
9370: 65 6e 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20  ence.)^ ^(Each. 
9380: 20 74 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20   time a new row 
9390: 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
93a0: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e   the table or an
93b0: 20 65 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73   existing row is
93c0: 20 75 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20   updated,.  the 
93d0: 65 78 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63  expression assoc
93e0: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
93f0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
9400: 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e   is evaluated an
9410: 64 0a 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55  d.  cast to a NU
9420: 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74  MERIC value in t
9430: 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61  he same way as a
9440: 20 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f   [CAST expressio
9450: 6e 5d 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65  n]. If the .  re
9460: 73 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e  sult is zero (in
9470: 74 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72  teger value 0 or
9480: 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29   real value 0.0)
9490: 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  , then a constra
94a0: 69 6e 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20  int.  violation 
94b0: 68 61 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20  has occurred.)^ 
94c0: 5e 49 66 20 74 68 65 20 43 48 45 43 4b 20 65 78  ^If the CHECK ex
94d0: 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
94e0: 65 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20  es to NULL, or. 
94f0: 20 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a   any other non-z
9500: 65 72 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73  ero value, it is
9510: 20 6e 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e   not a constrain
9520: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e  t violation..  ^
9530: 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  The expression o
9540: 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  f a CHECK constr
9550: 61 69 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  aint may not con
9560: 74 61 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e  tain a subquery.
9570: 0a 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74  ..<p>CHECK const
9580: 72 61 69 6e 74 73 20 68 61 76 65 20 62 65 65 6e  raints have been
9590: 20 73 75 70 70 6f 72 74 65 64 20 73 69 6e 63 65   supported since
95a0: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30 5d   [version 3.3.0]
95b0: 2e 20 50 72 69 6f 72 20 74 6f 0a 20 20 76 65 72  . Prior to.  ver
95c0: 73 69 6f 6e 20 33 2e 33 2e 30 2c 20 43 48 45 43  sion 3.3.0, CHEC
95d0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65  K constraints we
95e0: 72 65 20 70 61 72 73 65 64 20 62 75 74 20 6e 6f  re parsed but no
95f0: 74 20 65 6e 66 6f 72 63 65 64 2e 0a 0a 3c 74 63  t enforced...<tc
9600: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 6e  l>hd_fragment {n
9610: 6f 74 6e 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f  otnullconst} {NO
9620: 54 20 4e 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c  T NULL} {NOT NUL
9630: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74  L constraint}</t
9640: 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54  cl>.<p>^A <b>NOT
9650: 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72   NULL</b> constr
9660: 61 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65  aint may only be
9670: 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63   attached to a c
9680: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
9690: 2c 0a 20 20 6e 6f 74 20 73 70 65 63 69 66 69 65  ,.  not specifie
96a0: 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e  d as a table con
96b0: 73 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20 73 75  straint.  Not su
96c0: 72 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28 61 20  rprisingly, ^(a 
96d0: 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74  NOT NULL.  const
96e0: 72 61 69 6e 74 20 64 69 63 74 61 74 65 73 20 74  raint dictates t
96f0: 68 61 74 20 74 68 65 20 61 73 73 6f 63 69 61 74  hat the associat
9700: 65 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  ed column may no
9710: 74 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c  t contain a NULL
9720: 20 76 61 6c 75 65 2e 0a 20 20 41 74 74 65 6d 70   value..  Attemp
9730: 74 69 6e 67 20 74 6f 20 73 65 74 20 74 68 65 20  ting to set the 
9740: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20  column value to 
9750: 4e 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65 72 74  NULL when insert
9760: 69 6e 67 20 61 20 6e 65 77 20 72 6f 77 20 6f 72  ing a new row or
9770: 0a 20 20 75 70 64 61 74 69 6e 67 20 61 6e 20 65  .  updating an e
9780: 78 69 73 74 69 6e 67 20 6f 6e 65 20 63 61 75 73  xisting one caus
9790: 65 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  es a constraint 
97a0: 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70  violation.)^..<p
97b0: 3e 45 78 61 63 74 6c 79 20 68 6f 77 20 61 20 63  >Exactly how a c
97c0: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
97d0: 69 6f 6e 20 69 73 20 64 65 61 6c 74 20 77 69 74  ion is dealt wit
97e0: 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  h is determined 
97f0: 62 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66 6c 69  by the.  [confli
9800: 63 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73 74 72  ct clause|constr
9810: 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
9820: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
9830: 68 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50 52 49  hm]. Each .  PRI
9840: 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45  MARY KEY, UNIQUE
9850: 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64 20 43  , NOT NULL and C
9860: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
9870: 68 61 73 20 61 20 64 65 66 61 75 6c 74 20 63 6f  has a default co
9880: 6e 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c 75 74  nflict.  resolut
9890: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20 5e  ion algorithm. ^
98a0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49  PRIMARY KEY, UNI
98b0: 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
98c0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 61 79   constraints may
98d0: 20 62 65 0a 20 20 65 78 70 6c 69 63 69 74 6c 79   be.  explicitly
98e0: 20 61 73 73 69 67 6e 65 64 20 61 20 64 65 66 61   assigned a defa
98f0: 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
9900: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
9910: 6d 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 0a 20  m by including. 
9920: 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61   a [conflict-cla
9930: 75 73 65 5d 20 69 6e 20 74 68 65 69 72 20 64 65  use] in their de
9940: 66 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20  finitions. ^Or, 
9950: 69 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  if a constraint 
9960: 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64 6f 65  definition.  doe
9970: 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 20  s not include a 
9980: 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65  [conflict-clause
9990: 5d 20 6f 72 20 69 74 20 69 73 20 61 20 43 48 45  ] or it is a CHE
99a0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74  CK constraint, t
99b0: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 63 6f 6e  he default.  con
99c0: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
99d0: 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42   algorithm is AB
99e0: 4f 52 54 2e 20 5e 44 69 66 66 65 72 65 6e 74 20  ORT. ^Different 
99f0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 74 68  constraints with
9a00: 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 74 61  in the.  same ta
9a10: 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66  ble may have dif
9a20: 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20 63  ferent default c
9a30: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
9a40: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 20 53  on algorithms. S
9a50: 65 65 0a 20 20 74 68 65 20 73 65 63 74 69 6f 6e  ee.  the section
9a60: 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46   titled [ON CONF
9a70: 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69  LICT] for additi
9a80: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
9a90: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
9aa0: 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47  ent rowid {INTEG
9ab0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20  ER PRIMARY KEY} 
9ac0: 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c  ROWID rowid</tcl
9ad0: 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64  >.<h3>ROWIDs and
9ae0: 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49   the INTEGER PRI
9af0: 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c  MARY KEY</h3>..<
9b00: 70 3e 5e 45 78 63 65 70 74 20 66 6f 72 20 5b 57  p>^Except for [W
9b10: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
9b20: 62 6c 65 73 2c 20 61 6c 6c 20 72 6f 77 73 20 77  bles, all rows w
9b30: 69 74 68 69 6e 20 53 51 4c 69 74 65 20 74 61 62  ithin SQLite tab
9b40: 6c 65 73 0a 68 61 76 65 20 61 20 36 34 2d 62 69  les.have a 64-bi
9b50: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
9b60: 20 6b 65 79 20 74 68 61 74 20 75 6e 69 71 75 65   key that unique
9b70: 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68  ly identifies th
9b80: 65 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74 73  e row within its
9b90: 20 74 61 62 6c 65 2e 0a 54 68 69 73 20 69 6e 74   table..This int
9ba0: 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79 0a  eger is usually.
9bb0: 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77 69  called the "rowi
9bc0: 64 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20 76  d". ^The rowid v
9bd0: 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63 65  alue can be acce
9be0: 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f  ssed using one o
9bf0: 66 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63 61  f the special.ca
9c00: 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6e  se-independent n
9c10: 61 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22 6f  ames "rowid", "o
9c20: 69 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64 5f  id", or "_rowid_
9c30: 22 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  " in place of a 
9c40: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66  column name..^If
9c50: 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e   a table contain
9c60: 73 20 61 20 75 73 65 72 20 64 65 66 69 6e 65 64  s a user defined
9c70: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22 72   column named "r
9c80: 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20  owid", "oid" or 
9c90: 22 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e 20  "_rowid_",.then 
9ca0: 74 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79 73  that name always
9cb0: 20 72 65 66 65 72 73 20 74 68 65 20 65 78 70 6c   refers the expl
9cc0: 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20  icitly declared 
9cd0: 63 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f  column and canno
9ce0: 74 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65 74  t be used.to ret
9cf0: 72 69 65 76 65 20 74 68 65 20 69 6e 74 65 67 65  rieve the intege
9d00: 72 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a 0a  r rowid value...
9d10: 3c 70 3e 54 68 65 20 72 6f 77 69 64 20 28 61 6e  <p>The rowid (an
9d20: 64 20 22 6f 69 64 22 20 61 6e 64 20 22 5f 72 6f  d "oid" and "_ro
9d30: 77 69 64 5f 22 29 20 69 73 20 6f 6d 69 74 74 65  wid_") is omitte
9d40: 64 20 69 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f  d in [WITHOUT RO
9d50: 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 57 49 54  WID] tables..WIT
9d60: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
9d70: 73 20 61 72 65 20 6f 6e 6c 79 20 61 76 61 69 6c  s are only avail
9d80: 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 5b  able in SQLite [
9d90: 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 5d 20 61  version 3.8.2] a
9da0: 6e 64 20 6c 61 74 65 72 2e 0a 41 20 74 61 62 6c  nd later..A tabl
9db0: 65 20 74 68 61 74 20 6c 61 63 6b 73 20 74 68 65  e that lacks the
9dc0: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 63   WITHOUT ROWID c
9dd0: 6c 61 75 73 65 20 69 73 20 63 61 6c 6c 65 64 20  lause is called 
9de0: 61 20 22 72 6f 77 69 64 20 74 61 62 6c 65 22 2e  a "rowid table".
9df0: 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f  ..<p>The data fo
9e00: 72 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20 69  r rowid tables i
9e10: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 42 2d  s stored as a B-
9e20: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 63  Tree structure c
9e30: 6f 6e 74 61 69 6e 69 6e 67 0a 6f 6e 65 20 65 6e  ontaining.one en
9e40: 74 72 79 20 66 6f 72 20 65 61 63 68 20 74 61 62  try for each tab
9e50: 6c 65 20 72 6f 77 2c 20 75 73 69 6e 67 20 74 68  le row, using th
9e60: 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 73  e rowid value as
9e70: 20 74 68 65 20 6b 65 79 2e 20 54 68 69 73 20 6d   the key. This m
9e80: 65 61 6e 73 20 74 68 61 74 0a 72 65 74 72 69 65  eans that.retrie
9e90: 76 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67 20  ving or sorting 
9ea0: 72 65 63 6f 72 64 73 20 62 79 20 72 6f 77 69 64  records by rowid
9eb0: 20 69 73 20 66 61 73 74 2e 20 53 65 61 72 63 68   is fast. Search
9ec0: 69 6e 67 20 66 6f 72 20 61 20 72 65 63 6f 72 64  ing for a record
9ed0: 20 77 69 74 68 20 61 0a 73 70 65 63 69 66 69 63   with a.specific
9ee0: 20 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20 61   rowid, or for a
9ef0: 6c 6c 20 72 65 63 6f 72 64 73 20 77 69 74 68 20  ll records with 
9f00: 72 6f 77 69 64 73 20 77 69 74 68 69 6e 20 61 20  rowids within a 
9f10: 73 70 65 63 69 66 69 65 64 20 72 61 6e 67 65 20  specified range 
9f20: 69 73 0a 61 72 6f 75 6e 64 20 74 77 69 63 65 20  is.around twice 
9f30: 61 73 20 66 61 73 74 20 61 73 20 61 20 73 69 6d  as fast as a sim
9f40: 69 6c 61 72 20 73 65 61 72 63 68 20 6d 61 64 65  ilar search made
9f50: 20 62 79 20 73 70 65 63 69 66 79 69 6e 67 20 61   by specifying a
9f60: 6e 79 20 6f 74 68 65 72 20 50 52 49 4d 41 52 59  ny other PRIMARY
9f70: 0a 4b 45 59 20 6f 72 20 69 6e 64 65 78 65 64 20  .KEY or indexed 
9f80: 76 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74  value...<p> ^Wit
9f90: 68 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 20  h one exception 
9fa0: 6e 6f 74 65 64 20 62 65 6c 6f 77 2c 20 69 66 20  noted below, if 
9fb0: 61 20 72 6f 77 69 64 20 74 61 62 6c 65 20 68 61  a rowid table ha
9fc0: 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
9fd0: 74 68 61 74 20 63 6f 6e 73 69 73 74 73 0a 6f 66  that consists.of
9fe0: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
9ff0: 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65   and the declare
a000: 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 20 63  d type of that c
a010: 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45  olumn is "INTEGE
a020: 52 22 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72  R" in any mixtur
a030: 65 20 6f 66 0a 75 70 70 65 72 20 61 6e 64 20 6c  e of.upper and l
a040: 6f 77 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20  ower case, then 
a050: 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d  the column becom
a060: 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  es an alias for 
a070: 74 68 65 20 72 6f 77 69 64 2e 20 53 75 63 68 20  the rowid. Such 
a080: 61 0a 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61  a.column is usua
a090: 6c 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20  lly referred to 
a0a0: 61 73 20 61 6e 20 22 69 6e 74 65 67 65 72 20 70  as an "integer p
a0b0: 72 69 6d 61 72 79 20 6b 65 79 22 2e 20 41 20 50  rimary key". A P
a0c0: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d  RIMARY KEY colum
a0d0: 6e 0a 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61  n.only becomes a
a0e0: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
a0f0: 79 20 6b 65 79 20 69 66 20 74 68 65 20 64 65 63  y key if the dec
a100: 6c 61 72 65 64 20 74 79 70 65 20 6e 61 6d 65 20  lared type name 
a110: 69 73 20 65 78 61 63 74 6c 79 0a 22 49 4e 54 45  is exactly."INTE
a120: 47 45 52 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e  GER".  ^Other in
a130: 74 65 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73  teger type names
a140: 20 6c 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22   like "INT" or "
a150: 42 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52  BIGINT" or "SHOR
a160: 54 20 49 4e 54 45 47 45 52 22 0a 6f 72 20 22 55  T INTEGER".or "U
a170: 4e 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22  NSIGNED INTEGER"
a180: 20 63 61 75 73 65 73 20 74 68 65 20 70 72 69 6d   causes the prim
a190: 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74  ary key column t
a1a0: 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f  o behave as an o
a1b0: 72 64 69 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f  rdinary.table co
a1c0: 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65  lumn with intege
a1d0: 72 20 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64  r [affinity] and
a1e0: 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c   a unique index,
a1f0: 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73   not as an alias
a200: 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a   for.the rowid..
a210: 0a 3c 70 3e 20 54 68 65 20 65 78 63 65 70 74 69  .<p> The excepti
a220: 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f  on mentioned abo
a230: 76 65 20 69 73 20 74 68 61 74 20 5e 69 66 20 74  ve is that ^if t
a240: 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f  he declaration o
a250: 66 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a  f a column with.
a260: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 22 49  declared type "I
a270: 4e 54 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73  NTEGER" includes
a280: 20 61 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59   an "PRIMARY KEY
a290: 20 44 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69   DESC" clause, i
a2a0: 74 20 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d  t does not.becom
a2b0: 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  e an alias for t
a2c0: 68 65 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20  he rowid and is 
a2d0: 6e 6f 74 20 63 6c 61 73 73 69 66 69 65 64 20 61  not classified a
a2e0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  s an integer pri
a2f0: 6d 61 72 79 20 6b 65 79 2e 0a 54 68 69 73 20 71  mary key..This q
a300: 75 69 72 6b 20 69 73 20 6e 6f 74 20 62 79 20 64  uirk is not by d
a310: 65 73 69 67 6e 2e 20 49 74 20 69 73 20 64 75 65  esign. It is due
a320: 20 74 6f 20 61 20 62 75 67 20 69 6e 20 65 61 72   to a bug in ear
a330: 6c 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ly versions of S
a340: 51 4c 69 74 65 2e 0a 42 75 74 20 66 69 78 69 6e  QLite..But fixin
a350: 67 20 74 68 65 20 62 75 67 20 63 6f 75 6c 64 20  g the bug could 
a360: 72 65 73 75 6c 74 20 69 6e 20 62 61 63 6b 77 61  result in backwa
a370: 72 64 73 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c  rds incompatibil
a380: 69 74 69 65 73 2e 0a 48 65 6e 63 65 2c 20 74 68  ities..Hence, th
a390: 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68 61 76  e original behav
a3a0: 69 6f 72 20 68 61 73 20 62 65 65 6e 20 72 65 74  ior has been ret
a3b0: 61 69 6e 65 64 20 28 61 6e 64 20 64 6f 63 75 6d  ained (and docum
a3c0: 65 6e 74 65 64 29 20 62 65 63 61 75 73 65 0a 62  ented) because.b
a3d0: 65 68 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72  ehavior in a cor
a3e0: 6e 65 72 20 63 61 73 65 20 69 73 20 66 61 72 20  ner case is far 
a3f0: 62 65 74 74 65 72 20 74 68 61 6e 20 61 20 63 6f  better than a co
a400: 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72 65 61  mpatibility brea
a410: 6b 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 0a 74  k.  This means.t
a420: 68 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77  hat ^(the follow
a430: 69 6e 67 20 74 68 72 65 65 20 74 61 62 6c 65 20  ing three table 
a440: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c  declarations all
a450: 20 63 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d   cause the colum
a460: 6e 20 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61  n "x" to be an.a
a470: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77  lias for the row
a480: 69 64 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70  id (an integer p
a490: 72 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75  rimary key):..<u
a4a0: 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  l>.<li><tt>CREAT
a4b0: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
a4c0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
a4d0: 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e  ASC, y, z);</tt>
a4e0: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
a4f0: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
a500: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
a510: 20 4b 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74   KEY(x ASC));</t
a520: 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  t>.<li><tt>CREAT
a530: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
a540: 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41  GER, y, z, PRIMA
a550: 52 59 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b  RY KEY(x DESC));
a560: 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  </tt>.</ul>)^..<
a570: 70 3e 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c  p>But ^(the foll
a580: 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f  owing declaratio
a590: 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c  n does not resul
a5a0: 74 20 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61  t in "x" being a
a5b0: 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20  n alias for.the 
a5c0: 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  rowid:.<ul>.<li>
a5d0: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
a5e0: 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49   t(x INTEGER PRI
a5f0: 4d 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79  MARY KEY DESC, y
a600: 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e  , z);</tt>.</ul>
a610: 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61  )^..<p>^Rowid va
a620: 6c 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69  lues may be modi
a630: 66 69 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50  fied using an UP
a640: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
a650: 6e 20 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61  n the same.way a
a660: 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75  s any other colu
a670: 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69  mn value can, ei
a680: 74 68 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f  ther using one o
a690: 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61  f the built-in a
a6a0: 6c 69 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c  liases.("rowid",
a6b0: 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69   "oid" or "_rowi
a6c0: 64 5f 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67  d_") or by using
a6d0: 20 61 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65   an alias create
a6e0: 64 20 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a  d by an integer.
a6f0: 70 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69  primary key. ^Si
a700: 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45  milarly, an INSE
a710: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  RT statement may
a720: 20 70 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65   provide a value
a730: 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72   to use as the.r
a740: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
a750: 77 20 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e  w inserted. ^(Un
a760: 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69  like normal SQLi
a770: 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69  te columns, an i
a780: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
a790: 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75  ey or rowid colu
a7a0: 6d 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  mn must contain 
a7b0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20  integer values. 
a7c0: 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
a7d0: 6b 65 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c  key or rowid.col
a7e0: 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c  umns are not abl
a7f0: 65 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69  e to hold floati
a800: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c  ng point values,
a810: 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c   strings, BLOBs,
a820: 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70   or NULLs.)^..<p
a830: 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73  >^If an UPDATE s
a840: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
a850: 73 20 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65  s to set an inte
a860: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
a870: 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a  or rowid column.
a880: 74 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f  to a NULL or blo
a890: 62 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61  b value, or to a
a8a0: 20 73 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20   string or real 
a8b0: 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
a8c0: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a  t be losslessly.
a8d0: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
a8e0: 69 6e 74 65 67 65 72 2c 20 61 20 22 64 61 74 61  integer, a "data
a8f0: 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65  type mismatch" e
a900: 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20  rror occurs and 
a910: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73  the statement.is
a920: 20 61 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e   aborted. ^If an
a930: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
a940: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  t attempts to in
a950: 73 65 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75  sert a blob valu
a960: 65 2c 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f  e, or a string.o
a970: 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61  r real value tha
a980: 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73  t cannot be loss
a990: 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
a9a0: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69   to an integer i
a9b0: 6e 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70  nto an.integer p
a9c0: 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f  rimary key or ro
a9d0: 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64  wid column, a "d
a9e0: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
a9f0: 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61  " error occurs a
aa00: 6e 64 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74  nd the.statement
aa10: 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70   is aborted...<p
aa20: 3e 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73  >^If an INSERT s
aa30: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
aa40: 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55  s to insert a NU
aa50: 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  LL value into a 
aa60: 72 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72  rowid or.integer
aa70: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
aa80: 75 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20  umn, the system 
aa90: 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67  chooses an integ
aaa0: 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20  er value to use 
aab0: 61 73 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74  as the.rowid aut
aac0: 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65  omatically. A de
aad0: 74 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69  tailed descripti
aae0: 6f 6e 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69  on of how this i
aaf0: 73 20 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64  s done is provid
ab00: 65 64 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f  ed.<a href="auto
ab10: 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61  inc.html">separa
ab20: 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  tely</a>.</p>..<
ab30: 70 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20  p>^(The [parent 
ab40: 6b 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69  key] of a [forei
ab50: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
ab60: 74 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  t] is not allowe
ab70: 64 20 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77  d to.use the row
ab80: 69 64 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20  id.  The parent 
ab90: 6b 65 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61  key must used na
aba0: 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79  med columns only
abb0: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  .)^</p>..<tcl>.#
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 23 23 23 23 23 23 23 23  ################
abe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac00: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
ac10: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52  ction {CREATE TR
ac20: 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69  IGGER} createtri
ac30: 67 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52  gger {{CREATE TR
ac40: 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69  IGGER}}..Recursi
ac50: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
ac60: 63 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d 73  create-trigger-s
ac70: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
ac80: 54 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  The CREATE TRIGG
ac90: 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ER statement is 
aca0: 75 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67  used to add trig
acb0: 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74  gers to the .dat
acc0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 54  abase schema. ^T
acd0: 72 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61  riggers are data
ace0: 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20  base operations 
acf0: 0a 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61  .that are automa
ad00: 74 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65  tically performe
ad10: 64 20 77 68 65 6e 20 61 20 73 70 65 63 69 66 69  d when a specifi
ad20: 65 64 20 64 61 74 61 62 61 73 65 20 65 76 65 6e  ed database even
ad30: 74 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a  t.occurs.  </p>.
ad40: 0a 3c 70 3e 5e 41 20 74 72 69 67 67 65 72 20 6d  .<p>^A trigger m
ad50: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
ad60: 74 6f 20 66 69 72 65 20 77 68 65 6e 65 76 65 72  to fire whenever
ad70: 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e   a [DELETE], [IN
ad80: 53 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54  SERT],.or [UPDAT
ad90: 45 5d 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c  E] of a.particul
ada0: 61 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  ar database tabl
adb0: 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65  e occurs, or whe
adc0: 6e 65 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45  never an [UPDATE
add0: 5d 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f  ] occurs on.on o
ade0: 6e 65 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69  ne or more speci
adf0: 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  fied columns of 
ae00: 61 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  a table.</p>..<p
ae10: 3e 5e 41 74 20 74 68 69 73 20 74 69 6d 65 20 53  >^At this time S
ae20: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f  QLite supports o
ae30: 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57  nly FOR EACH ROW
ae40: 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46   triggers, not F
ae50: 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e  OR EACH.STATEMEN
ae60: 54 20 74 72 69 67 67 65 72 73 2e 20 5e 48 65 6e  T triggers. ^Hen
ae70: 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70  ce explicitly sp
ae80: 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43  ecifying FOR EAC
ae90: 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61  H ROW is optiona
aea0: 6c 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f 57  l..^FOR EACH ROW
aeb0: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
aec0: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
aed0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
aee0: 65 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65  e trigger.may be
aef0: 20 65 78 65 63 75 74 65 64 20 28 64 65 70 65 6e   executed (depen
af00: 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e  ding on the WHEN
af10: 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63   clause) for eac
af20: 68 20 64 61 74 61 62 61 73 65 20 72 6f 77 20 62  h database row b
af30: 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75  eing.inserted, u
af40: 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65  pdated or delete
af50: 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
af60: 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74  nt causing the t
af70: 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c  rigger to fire.<
af80: 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74  /p>..<p>^(Both t
af90: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61  he WHEN clause a
afa0: 6e 64 20 74 68 65 20 74 72 69 67 67 65 72 20 61  nd the trigger a
afb0: 63 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73  ctions may acces
afc0: 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74  s elements of .t
afd0: 68 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73  he row being ins
afe0: 65 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f  erted, deleted o
aff0: 72 20 75 70 64 61 74 65 64 20 75 73 69 6e 67 20  r updated using 
b000: 72 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68  references of th
b010: 65 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e  e form ."NEW.<i>
b020: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22  column-name</i>"
b030: 20 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c   and "OLD.<i>col
b040: 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77  umn-name</i>", w
b050: 68 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  here.<i>column-n
b060: 61 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e  ame</i> is the n
b070: 61 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ame of a column 
b080: 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74  from the table t
b090: 68 61 74 20 74 68 65 20 74 72 69 67 67 65 72 0a  hat the trigger.
b0a0: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
b0b0: 74 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20  th.)^ ^(OLD and 
b0c0: 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 6d  NEW references m
b0d0: 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
b0e0: 69 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a 65  in triggers on.e
b0f0: 76 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20  vents for which 
b100: 74 68 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e  they are relevan
b110: 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  t, as follows:</
b120: 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
b130: 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
b140: 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  10>.<tr>.<td val
b150: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
b160: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
b170: 30 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c  0><i>INSERT</i><
b180: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
b190: 22 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65  "top">NEW refere
b1a0: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
b1b0: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
b1c0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
b1d0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
b1e0: 64 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54  dth=120><i>UPDAT
b1f0: 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  E</i></td>.<td v
b200: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20  align="top">NEW 
b210: 61 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63  and OLD referenc
b220: 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64  es are valid</td
b230: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
b240: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
b250: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
b260: 68 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c  h=120><i>DELETE<
b270: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
b280: 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65  ign="top">OLD re
b290: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
b2a0: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f  id</td>.</tr>.</
b2b0: 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c  table>.</p>)^..<
b2c0: 70 3e 5e 49 66 20 61 20 57 48 45 4e 20 63 6c 61  p>^If a WHEN cla
b2d0: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
b2e0: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
b2f0: 6e 74 73 20 73 70 65 63 69 66 69 65 64 0a 61 72  nts specified.ar
b300: 65 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20  e only executed 
b310: 66 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69  for rows for whi
b320: 63 68 20 74 68 65 20 57 48 45 4e 0a 63 6c 61 75  ch the WHEN.clau
b330: 73 65 20 69 73 20 74 72 75 65 2e 20 5e 49 66 20  se is true. ^If 
b340: 6e 6f 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69  no WHEN clause i
b350: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20  s supplied, the 
b360: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 61  SQL statements.a
b370: 72 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  re executed for 
b380: 61 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c  all rows.</p>..<
b390: 70 3e 5e 54 68 65 20 42 45 46 4f 52 45 20 6f 72  p>^The BEFORE or
b3a0: 20 41 46 54 45 52 20 6b 65 79 77 6f 72 64 20 64   AFTER keyword d
b3b0: 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74  etermines when t
b3c0: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
b3d0: 6e 73 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75  ns.will be execu
b3e0: 74 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20  ted relative to 
b3f0: 74 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d  the insertion, m
b400: 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72  odification or r
b410: 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73  emoval of the.as
b420: 73 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70  sociated row.</p
b430: 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f  >..<p>^An [ON CO
b440: 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d  NFLICT] clause m
b450: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
b460: 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55  as part of an [U
b470: 50 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52  PDATE] or [INSER
b480: 54 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  T].action within
b490: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 74 68 65   the body of the
b4a0: 20 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76   trigger..^Howev
b4b0: 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e  er if an [ON CON
b4c0: 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73  FLICT] clause is
b4d0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
b4e0: 72 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65  rt of .the state
b4f0: 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65  ment causing the
b500: 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65   trigger to fire
b510: 2c 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20  , then conflict 
b520: 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20  handling.policy 
b530: 6f 66 20 74 68 65 20 6f 75 74 65 72 20 73 74 61  of the outer sta
b540: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 69  tement is used i
b550: 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  nstead.</p>..<p>
b560: 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 61 75  ^Triggers are au
b570: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f  tomatically [DRO
b580: 50 20 54 52 49 47 47 45 52 20 7c 20 64 72 6f 70  P TRIGGER | drop
b590: 70 65 64 5d 0a 77 68 65 6e 20 74 68 65 20 74 61  ped].when the ta
b5a0: 62 6c 65 20 74 68 61 74 20 74 68 65 79 20 61 72  ble that they ar
b5b0: 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69  e .associated wi
b5c0: 74 68 20 28 74 68 65 20 3c 69 3e 74 61 62 6c 65  th (the <i>table
b5d0: 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29  -name</i> table)
b5e0: 20 69 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45   is .[DROP TABLE
b5f0: 20 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48   | dropped].  ^H
b600: 6f 77 65 76 65 72 20 69 66 20 74 68 65 20 74 72  owever if the tr
b610: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65  igger actions re
b620: 66 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61  ference.other ta
b630: 62 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67 65  bles, the trigge
b640: 72 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64  r is not dropped
b650: 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20   or modified if 
b660: 74 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c  those other.tabl
b670: 65 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42  es are [DROP TAB
b680: 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72  LE | dropped] or
b690: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20   [ALTER TABLE | 
b6a0: 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a  modified].</p>..
b6b0: 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65  <p>^Triggers are
b6c0: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
b6d0: 68 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52  he [DROP TRIGGER
b6e0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  ] statement.</p>
b6f0: 0a 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73  ..<h3>Syntax Res
b700: 74 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44  trictions On UPD
b710: 41 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64  ATE, DELETE, and
b720: 20 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e   INSERT Statemen
b730: 74 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72  ts Within.    Tr
b740: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
b750: 5e 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b  ^The [UPDATE], [
b760: 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e  DELETE], and [IN
b770: 53 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73  SERT].statements
b780: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
b790: 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a   do not support.
b7a0: 74 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20  the full syntax 
b7b0: 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44  for [UPDATE], [D
b7c0: 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53  ELETE], and [INS
b7d0: 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  ERT] statements.
b7e0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a    The following.
b7f0: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70  restrictions app
b800: 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  ly:</p>..<ul>.<l
b810: 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61  i><p>.  ^(The na
b820: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
b830: 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69  to be modified i
b840: 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b  n an [UPDATE], [
b850: 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53  DELETE], or [INS
b860: 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ERT].  statement
b870: 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75   must be an unqu
b880: 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61  alified table na
b890: 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  me.  In other wo
b8a0: 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20  rds, one must.  
b8b0: 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62  use just "<i>tab
b8c0: 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20  lename</i>" not 
b8d0: 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e  "<i>database</i>
b8e0: 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65  <b>.</b><i>table
b8f0: 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e  name</i>".  when
b900: 20 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20   specifying the 
b910: 74 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74  table.)^  ^The t
b920: 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66  able to be modif
b930: 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69  ied must exist i
b940: 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74  n the.  same dat
b950: 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
b960: 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
b970: 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
b980: 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c  is attached..  <
b990: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
b9a0: 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54  >.  ^The "INSERT
b9b0: 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f   INTO <i>table</
b9c0: 69 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  i> DEFAULT VALUE
b9d0: 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b  S" form of the [
b9e0: 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e  INSERT] statemen
b9f0: 74 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  t.  is not suppo
ba00: 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  rted..  </p></li
ba10: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
ba20: 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
ba30: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
ba40: 75 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  uses are not sup
ba50: 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41  ported for [UPDA
ba60: 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54  TE] and.  [DELET
ba70: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  E] statements.. 
ba80: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
ba90: 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45  <p>.  ^(The ORDE
baa0: 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
bab0: 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54  lauses on [UPDAT
bac0: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
bad0: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e  statements are n
bae0: 6f 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20  ot.  supported. 
baf0: 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
bb00: 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d  MIT are not norm
bb10: 61 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66  ally supported f
bb20: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20  or [UPDATE] or. 
bb30: 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79   [DELETE] in any
bb40: 20 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e   context but can
bb50: 20 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20   be enabled for 
bb60: 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
bb70: 65 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65  ents.  using the
bb80: 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
bb90: 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
bba0: 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  MIT] compile-tim
bbb0: 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76  e option.  Howev
bbc0: 65 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69  er,.  that compi
bbd0: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f  le-time option o
bbe0: 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74  nly applies to t
bbf0: 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45  op-level [UPDATE
bc00: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20  ] and [DELETE]. 
bc10: 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74   statements, not
bc20: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
bc30: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
bc40: 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
bc50: 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  s.)^.  </p></li>
bc60: 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ul>..<tcl>hd_
bc70: 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64  fragment instead
bc80: 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53  _of_trigger {INS
bc90: 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41  TEAD OF} {INSTEA
bca0: 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74  D OF trigger}</t
bcb0: 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20  cl>.<h3>INSTEAD 
bcc0: 4f 46 20 74 72 69 67 67 65 72 3c 2f 68 33 3e 0a  OF trigger</h3>.
bcd0: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d 61  .<p>^Triggers ma
bce0: 79 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20  y be created on 
bcf0: 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c  [views], as well
bd00: 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62   as ordinary tab
bd10: 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69  les, by.specifyi
bd20: 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e  ng INSTEAD OF in
bd30: 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47   the CREATE TRIG
bd40: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a  GER statement. .
bd50: 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ^If one or more 
bd60: 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45  ON INSERT, ON DE
bd70: 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54  LETE.or ON UPDAT
bd80: 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20 64  E triggers are d
bd90: 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77  efined on a view
bda0: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74  , then it is not
bdb0: 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65   an.error to exe
bdc0: 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20  cute an INSERT, 
bdd0: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
bde0: 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68   statement on th
bdf0: 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74  e view, .respect
be00: 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64  ively.  ^Instead
be10: 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49  ,.executing an I
be20: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72  NSERT, DELETE or
be30: 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76   UPDATE on the v
be40: 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20 61  iew causes the a
be50: 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65  ssociated.trigge
be60: 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68 65  rs to fire. ^The
be70: 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64   real tables und
be80: 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77  erlying the view
be90: 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65   are not modifie
bea0: 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69 62  d.(except possib
beb0: 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62  ly explicitly, b
bec0: 79 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67  y a trigger prog
bed0: 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e  ram).</p>..<p>^N
bee0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b 73 71  ote that the [sq
bef0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
bf00: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f   and [sqlite3_to
bf10: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69  tal_changes()] i
bf20: 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74  nterfaces.do not
bf30: 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f   count INSTEAD O
bf40: 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67  F trigger firing
bf50: 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e  s, but the.[coun
bf60: 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61  t_changes pragma
bf70: 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53  ] does count INS
bf80: 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20  TEAD OF trigger 
bf90: 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33  firing.</p>..<h3
bfa0: 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a  >Examples</h3>..
bfb0: 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68  <p>^(Assuming th
bfc0: 61 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f  at customer reco
bfd0: 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  rds are stored i
bfe0: 6e 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73  n the "customers
bff0: 22 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61  " table, and.tha
c000: 74 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20  t order records 
c010: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
c020: 65 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65  e "orders" table
c030: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
c040: 74 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73 20  trigger.ensures 
c050: 74 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69 61  that all associa
c060: 74 65 64 20 6f 72 64 65 72 73 20 61 72 65 20 72  ted orders are r
c070: 65 64 69 72 65 63 74 65 64 20 77 68 65 6e 20 61  edirected when a
c080: 20 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67 65   customer change
c090: 73 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64 64  s.his or her add
c0a0: 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ress:</p>..<tcl>
c0b0: 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45  Example {.CREATE
c0c0: 20 54 52 49 47 47 45 52 20 75 70 64 61 74 65 5f   TRIGGER update_
c0d0: 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73  customer_address
c0e0: 20 55 50 44 41 54 45 20 4f 46 20 61 64 64 72 65   UPDATE OF addre
c0f0: 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73 20  ss ON customers 
c100: 0a 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50 44  .  BEGIN.    UPD
c110: 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61  ATE orders SET a
c120: 64 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64 64  ddress = new.add
c130: 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74 6f  ress WHERE custo
c140: 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e  mer_name = old.n
c150: 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74  ame;.  END;.}</t
c160: 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 69  cl>..<p>With thi
c170: 73 20 74 72 69 67 67 65 72 20 69 6e 73 74 61 6c  s trigger instal
c180: 6c 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20 74  led, executing t
c190: 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f 70  he statement:</p
c1a0: 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20  >..<tcl>Example 
c1b0: 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65  {.UPDATE custome
c1c0: 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d  rs SET address =
c1d0: 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48   '1 Main St.' WH
c1e0: 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b  ERE name = 'Jack
c1f0: 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e   Jones';.}</tcl>
c200: 0a 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20  ..<p>causes the 
c210: 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20  following to be 
c220: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78  automatically ex
c230: 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63  ecuted:</p>..<tc
c240: 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41  l>Example {.UPDA
c250: 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64  TE orders SET ad
c260: 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20  dress = '1 Main 
c270: 53 74 2e 27 20 57 48 45 52 45 20 63 75 73 74 6f  St.' WHERE custo
c280: 6d 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b  mer_name = 'Jack
c290: 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e   Jones';.}</tcl>
c2a0: 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
c2b0: 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72  ment undef_befor
c2c0: 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46  e {undefined BEF
c2d0: 4f 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61  ORE trigger beha
c2e0: 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  vior}</tcl>.<h3>
c2f0: 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20  Cautions On The 
c300: 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72  Use Of BEFORE tr
c310: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
c320: 49 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41  If a BEFORE UPDA
c330: 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c  TE or BEFORE DEL
c340: 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69  ETE trigger modi
c350: 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
c360: 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74  a row.that was t
c370: 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61  o have been upda
c380: 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20  ted or deleted, 
c390: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
c3a0: 6f 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  of the subsequen
c3b0: 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65  t.update or dele
c3c0: 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  te operation is 
c3d0: 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74  undefined.  Furt
c3e0: 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45  hermore, if a BE
c3f0: 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64  FORE trigger.mod
c400: 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73  ifies or deletes
c410: 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20   a row, then it 
c420: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65  is undefined whe
c430: 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45  ther or not AFTE
c440: 52 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20  R triggers.that 
c450: 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72  would have other
c460: 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73  wise run on thos
c470: 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66  e rows will in f
c480: 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  act run..</p>..<
c490: 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e  p>The value of N
c4a0: 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65  EW.rowid is unde
c4b0: 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52  fined in a BEFOR
c4c0: 45 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72  E INSERT trigger
c4d0: 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f   in which.the ro
c4e0: 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69  wid is not expli
c4f0: 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20  citly set to an 
c500: 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70  integer.</p>..<p
c510: 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20  >Because of the 
c520: 62 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69  behaviors descri
c530: 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72  bed above, progr
c540: 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75  ammers are encou
c550: 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20  raged to.prefer 
c560: 41 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f  AFTER triggers o
c570: 76 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67  ver BEFORE trigg
c580: 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 68  ers.</p>..<h3>Th
c590: 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
c5a0: 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  on</h3>..<p>^(A 
c5b0: 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63  special SQL func
c5c0: 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79  tion RAISE() may
c5d0: 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
c5e0: 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
c5f0: 6d 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f  m,)^.with the fo
c600: 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f  llowing syntax</
c610: 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  p> ..<tcl>Bubble
c620: 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
c630: 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70  nction</tcl>..<p
c640: 3e 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52  >^(When one of R
c650: 41 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e  AISE(ROLLBACK,..
c660: 2e 29 2c 20 52 41 49 53 45 28 41 42 4f 52 54 2c  .), RAISE(ABORT,
c670: 2e 2e 2e 29 20 6f 72 20 52 41 49 53 45 28 46 41  ...) or RAISE(FA
c680: 49 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65  IL,...).is calle
c690: 64 20 64 75 72 69 6e 67 20 74 72 69 67 67 65 72  d during trigger
c6a0: 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69  -program.executi
c6b0: 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69 65  on, the specifie
c6c0: 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d [ON CONFLICT] 
c6d0: 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65  processing is pe
c6e0: 72 66 6f 72 6d 65 64 0a 74 68 65 20 63 75 72 72  rformed.the curr
c6f0: 65 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e  ent query termin
c700: 61 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72  ates.)^.An error
c710: 20 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45   code of [SQLITE
c720: 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20  _CONSTRAINT] is 
c730: 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
c740: 61 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f  application,.alo
c750: 6e 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ng with the spec
c760: 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
c770: 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68  age.</p>..<p>^Wh
c780: 65 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29  en RAISE(IGNORE)
c790: 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20   is called, the 
c7a0: 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65  remainder of the
c7b0: 20 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72   current trigger
c7c0: 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74   program,.the st
c7d0: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75  atement that cau
c7e0: 73 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20  sed the trigger 
c7f0: 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75  program to execu
c800: 74 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65  te and any subse
c810: 71 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72  quent.trigger pr
c820: 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c  ograms that woul
c830: 64 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63  d have been exec
c840: 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e  uted are abandon
c850: 65 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73 65  ed. ^No database
c860: 0a 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c  .changes are rol
c870: 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74  led back.  ^If t
c880: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  he statement tha
c890: 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69  t caused the tri
c8a0: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20  gger program.to 
c8b0: 65 78 65 63 75 74 65 20 69 73 20 69 74 73 65 6c  execute is itsel
c8c0: 66 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  f part of a trig
c8d0: 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65  ger program, the
c8e0: 6e 20 74 68 61 74 20 74 72 69 67 67 65 72 20 70  n that trigger p
c8f0: 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65  rogram.resumes e
c900: 78 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20  xecution at the 
c910: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
c920: 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e   next step..</p>
c930: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
c940: 6e 74 20 74 65 6d 70 74 72 69 67 20 7b 54 45 4d  nt temptrig {TEM
c950: 50 20 74 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f  P triggers on no
c960: 6e 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f  n-TEMP tables}</
c970: 74 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72  tcl>.<h3>TEMP Tr
c980: 69 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45  iggers on Non-TE
c990: 4d 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a  MP Tables</h3>..
c9a0: 3c 70 3e 5e 28 41 20 74 72 69 67 67 65 72 20 6e  <p>^(A trigger n
c9b0: 6f 72 6d 61 6c 6c 79 20 65 78 69 73 74 73 20 69  ormally exists i
c9c0: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
c9d0: 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65  ase as the table
c9e0: 20 6e 61 6d 65 64 0a 61 66 74 65 72 20 74 68 65   named.after the
c9f0: 20 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e   "ON" keyword in
ca00: 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47   the CREATE TRIG
ca10: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  GER statement.  
ca20: 45 78 63 65 70 74 2c 20 69 74 20 69 73 0a 70 6f  Except, it is.po
ca30: 73 73 69 62 6c 65 20 74 6f 20 63 72 65 61 74 65  ssible to create
ca40: 20 61 20 54 45 4d 50 20 54 52 49 47 47 45 52 20   a TEMP TRIGGER 
ca50: 6f 6e 20 61 20 74 61 62 6c 65 20 69 6e 20 61 6e  on a table in an
ca60: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 2e 29  other database.)
ca70: 5e 20 20 0a 53 75 63 68 20 61 20 74 72 69 67 67  ^  .Such a trigg
ca80: 65 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72  er will only fir
ca90: 65 20 77 68 65 6e 20 63 68 61 6e 67 65 73 0a 61  e when changes.a
caa0: 72 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 74  re made to the t
cab0: 61 72 67 65 74 20 74 61 62 6c 65 20 62 79 20 74  arget table by t
cac0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74  he application t
cad0: 68 61 74 20 64 65 66 69 6e 65 64 20 74 68 65 20  hat defined the 
cae0: 74 72 69 67 67 65 72 2e 0a 4f 74 68 65 72 20 61  trigger..Other a
caf0: 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74  pplications that
cb00: 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61   modify the data
cb10: 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  base will not be
cb20: 20 61 62 6c 65 20 74 6f 20 73 65 65 20 74 68 65   able to see the
cb30: 0a 54 45 4d 50 20 74 72 69 67 67 65 72 20 61 6e  .TEMP trigger an
cb40: 64 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72  d hence cannot r
cb50: 75 6e 20 74 68 65 20 74 72 69 67 67 65 72 2e 3c  un the trigger.<
cb60: 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66  /p>..<p>When def
cb70: 69 6e 69 6e 67 20 61 20 54 45 4d 50 20 74 72 69  ining a TEMP tri
cb80: 67 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45  gger on a non-TE
cb90: 4d 50 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20  MP table, it is 
cba0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65  important to.spe
cbb0: 63 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73  cify the databas
cbc0: 65 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f  e holding the no
cbd0: 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20 20 46  n-TEMP table.  F
cbe0: 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74  or example,.in t
cbf0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
cc00: 74 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 69 6d  tement, it is im
cc10: 70 6f 72 74 61 6e 74 20 74 6f 20 73 61 79 20 22  portant to say "
cc20: 6d 61 69 6e 2e 74 61 62 31 22 20 69 6e 73 74 65  main.tab1" inste
cc30: 61 64 0a 6f 66 20 6a 75 73 74 20 22 74 61 62 31  ad.of just "tab1
cc40: 22 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ":</p>..<blockqu
cc50: 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
cc60: 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 65 78   TEMP TRIGGER ex
cc70: 31 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f  1 AFTER INSERT O
cc80: 4e 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61  N <b>main.</b>ta
cc90: 62 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70  b1 BEGIN ....</p
cca0: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
ccb0: 0a 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f 20  ..<p>Failure to 
ccc0: 73 70 65 63 69 66 79 20 74 68 65 20 64 61 74 61  specify the data
ccd0: 62 61 73 65 20 6e 61 6d 65 20 6f 6e 20 74 68 65  base name on the
cce0: 20 74 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f   target table co
ccf0: 75 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68  uld result.in th
cd00: 65 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 62  e TEMP trigger b
cd10: 65 69 6e 67 20 72 65 61 74 74 61 63 68 65 64 20  eing reattached 
cd20: 74 6f 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  to a table with 
cd30: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e  the same name in
cd40: 0a 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73  .another databas
cd50: 65 20 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73  e whenever any s
cd60: 63 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63  chema change occ
cd70: 75 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  urs.</p>..<tcl>.
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 23 23 23 23 23 23  ################
cda0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cdb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cdc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
cdd0: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
cde0: 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65  VIEW} {createvie
cdf0: 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57  w} {{CREATE VIEW
ce00: 7d 20 76 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a  } view *views}..
ce10: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
ce20: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69  iagram create-vi
ce30: 65 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ew-stmt.</tcl>..
ce40: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56  <p>^The CREATE V
ce50: 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69  IEW command assi
ce60: 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20  gns a name to a 
ce70: 70 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53  pre-packaged .[S
ce80: 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
ce90: 2e 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65  . .^Once the vie
cea0: 77 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74  w is created, it
ceb0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
cec0: 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  the FROM clause.
ced0: 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45  of another [SELE
cee0: 43 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  CT] in place of 
cef0: 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f  a table name..</
cf00: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22  p>..<p>^If the "
cf10: 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52  TEMP" or "TEMPOR
cf20: 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63  ARY" keyword occ
cf30: 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22  urs in between "
cf40: 43 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45  CREATE".and "VIE
cf50: 57 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77  W" then the view
cf60: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
cf70: 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65   is only visible
cf80: 20 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20   to the.process 
cf90: 74 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20  that opened the 
cfa0: 64 61 74 61 62 61 73 65 20 61 6e 64 20 69 73 20  database and is 
cfb0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
cfc0: 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64  leted when.the d
cfd0: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
cfe0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20  d.</p>..<p> ^If 
cff0: 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e  a &lt;database-n
d000: 61 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69  ame&gt; is speci
d010: 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76  fied, then the v
d020: 69 65 77 20 69 73 20 63 72 65 61 74 65 64 20 69  iew is created i
d030: 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74  n .the named dat
d040: 61 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e  abase. ^It is an
d050: 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66   error to specif
d060: 79 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74  y both a &lt;dat
d070: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61  abase-name&gt;.a
d080: 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77  nd the TEMP keyw
d090: 6f 72 64 20 6f 6e 20 61 20 56 49 45 57 2c 20 75  ord on a VIEW, u
d0a0: 6e 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61  nless the &lt;da
d0b0: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
d0c0: 69 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e  is "temp"..^If n
d0d0: 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  o database name 
d0e0: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e  is specified, an
d0f0: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
d100: 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  rd is not presen
d110: 74 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20 63  t,.the VIEW is c
d120: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61  reated in the ma
d130: 69 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e  in database.</p>
d140: 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74  ..<p>^You cannot
d150: 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45   [DELETE], [INSE
d160: 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d  RT], or [UPDATE]
d170: 20 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73   a view.  ^Views
d180: 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a   are read-only .
d190: 69 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77  in SQLite.  ^How
d1a0: 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61  ever, in many ca
d1b0: 73 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20  ses you can use 
d1c0: 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74  an.[INSTEAD OF t
d1d0: 72 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76  rigger] on the v
d1e0: 69 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73  iew to accomplis
d1f0: 68 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e  h .the same thin
d200: 67 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72  g.  ^Views are r
d210: 65 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65  emoved .with the
d220: 20 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d   [DROP VIEW] com
d230: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  mand.</p>..<tcl>
d240: 0a 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 23 23 23 23 23 23  ################
d260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
d290: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
d2a0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b  VIRTUAL TABLE} {
d2b0: 63 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52  createvtab} {{CR
d2c0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
d2d0: 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  LE}}..RecursiveB
d2e0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65  ubbleDiagram cre
d2f0: 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c  ate-virtual-tabl
d300: 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-stmt.</tcl>..<
d310: 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62  p>A [virtual tab
d320: 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66  le] is an interf
d330: 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e  ace to an extern
d340: 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f  al storage or co
d350: 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65  mputation.engine
d360: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f   that appears to
d370: 20 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20   be a table but 
d380: 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c  does not actuall
d390: 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74  y store informat
d3a0: 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62  ion.in the datab
d3b0: 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
d3c0: 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f  p>In general, yo
d3d0: 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e  u can do anythin
d3e0: 67 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61  g with a [virtua
d3f0: 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61  l table] that ca
d400: 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61  n be done.with a
d410: 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
d420: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79  , except that ^y
d430: 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65  ou cannot create
d440: 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67   indices or trig
d450: 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61  gers on a.virtua
d460: 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20  l table.  ^Some 
d470: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
d480: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69  plementations mi
d490: 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74  ght impose addit
d4a0: 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f  ional.restrictio
d4b0: 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ns.  For example
d4c0: 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74  , many virtual t
d4d0: 61 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f  ables are read-o
d4e0: 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  nly.</p>..<p>The
d4f0: 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65   &lt;module-name
d500: 26 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65  &gt; is the name
d510: 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   of an object th
d520: 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68  at implements.th
d530: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
d540: 20 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c    ^The &lt;modul
d550: 65 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20  e-name&gt; must 
d560: 62 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69  be registered wi
d570: 74 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61  th.the SQLite da
d580: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
d590: 6e 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33  n using.[sqlite3
d5a0: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
d5b0: 5d 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72  ] or [sqlite3_cr
d5c0: 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29  eate_module_v2()
d5d0: 5d 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69  ].prior to issui
d5e0: 6e 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49  ng the CREATE VI
d5f0: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
d600: 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75  ement..^The modu
d610: 6c 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72  le takes zero or
d620: 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61   more comma-sepa
d630: 72 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e  rated arguments.
d640: 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20  .^The arguments 
d650: 63 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75  can be just abou
d660: 74 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f  t any text as lo
d670: 6e 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c  ng as it has bal
d680: 61 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65  anced.parenthese
d690: 73 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74  s.  The argument
d6a0: 20 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69   syntax is suffi
d6b0: 63 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20  ciently general 
d6c0: 74 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e  that the.argumen
d6d0: 74 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  ts can be made t
d6e0: 6f 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c  o appear as [col
d6f0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d  umn definitions]
d700: 20 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61   in a traditiona
d710: 6c 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  l.[CREATE TABLE]
d720: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53   statement.  .^S
d730: 51 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65  QLite passes the
d740: 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
d750: 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68  s directly.to th
d760: 65 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20  e [xCreate] and 
d770: 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f  [xConnect] metho
d780: 64 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  ds of the module
d790: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a   implementation.
d7a0: 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65  without any inte
d7b0: 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20  rpretation.  It 
d7c0: 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62  is the responsib
d7d0: 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64  ility.of the mod
d7e0: 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
d7f0: 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20  on to parse and 
d800: 69 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77  interpret its ow
d810: 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e  n arguments.</p>
d820: 0a 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20  ..<p>^A virtual 
d830: 74 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79  table is destroy
d840: 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64  ed using the ord
d850: 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c  inary.[DROP TABL
d860: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
d870: 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20  here is no.DROP 
d880: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74  VIRTUAL TABLE st
d890: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74  atement.</p>..<t
d8a0: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
d8b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d8c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d8d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d8e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d8f0: 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54  ##.Section DELET
d900: 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45  E delete {DELETE
d910: 20 2a 44 45 4c 45 54 45 73 7d 0a 0a 52 65 63 75   *DELETEs}..Recu
d920: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
d930: 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 0a 3c  am delete-stmt.<
d940: 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45  /tcl>..<p>The DE
d950: 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d  LETE command rem
d960: 6f 76 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f  oves records fro
d970: 6d 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e  m the table iden
d980: 74 69 66 69 65 64 20 62 79 20 74 68 65 0a 20 20  tified by the.  
d990: 20 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61   <i>qualified-ta
d9a0: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 0a 0a  ble-name</i>. ..
d9b0: 3c 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45  <p>^If the WHERE
d9c0: 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70   clause is not p
d9d0: 72 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f  resent, all reco
d9e0: 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  rds in the table
d9f0: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20   are deleted..  
da00: 20 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61   ^If a WHERE cla
da10: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
da20: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65   then only those
da30: 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
da40: 74 68 65 0a 20 20 20 72 65 73 75 6c 74 20 6f 66  the.   result of
da50: 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
da60: 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 73 20  WHERE clause as 
da70: 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  a [boolean expre
da80: 73 73 69 6f 6e 7c 0a 20 20 20 62 6f 6f 6c 65 61  ssion|.   boolea
da90: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
daa0: 74 72 75 65 5d 20 61 72 65 20 64 65 6c 65 74 65  true] are delete
dab0: 64 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  d...<h3>Restrict
dac0: 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53  ions on DELETE S
dad0: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
dae0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
daf0: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
db00: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
db10: 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c  ons apply to DEL
db20: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74  ETE statements t
db30: 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e  hat occur within
db40: 20 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20   the.   body of 
db50: 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
db60: 52 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c  R] statement:..<
db70: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  ul>.  <li><p>^Th
db80: 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
db90: 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  /i> specified as
dba0: 20 70 61 72 74 20 6f 66 20 61 20 44 45 4c 45 54   part of a DELET
dbb0: 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  E statement with
dbc0: 69 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72  in.    a trigger
dbd0: 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e   body must be un
dbe0: 71 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e  qualified.  ^(In
dbf0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
dc00: 65 0a 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73  e.    <i>databas
dc10: 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  e-name</i><b>.</
dc20: 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  b> prefix on the
dc30: 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e   table name is n
dc40: 6f 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20  ot allowed .    
dc50: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
dc60: 29 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  )^ ^If the table
dc70: 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
dc80: 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65  igger is attache
dc90: 64 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20  d is.    not in 
dca0: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
dcb0: 65 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20 73  e, then DELETE s
dcc0: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
dcd0: 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20   the trigger.   
dce0: 20 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72 61   body must opera
dcf0: 74 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74  te on tables wit
dd00: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
dd10: 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66  abase as it. ^If
dd20: 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 74   the table.    t
dd30: 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
dd40: 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20  ger is attached 
dd50: 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64  is in the TEMP d
dd60: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
dd70: 65 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65  e.    unqualifie
dd80: 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
dd90: 62 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65  ble being delete
dda0: 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e  d is resolved in
ddb0: 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
ddc0: 0a 20 20 20 20 69 74 20 69 73 20 66 6f 72 20 61  .    it is for a
ddd0: 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
dde0: 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
ddf0: 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
de00: 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  P database, then
de10: 0a 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64 61  .    the main da
de20: 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79  tabase, then any
de30: 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
de40: 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
de50: 65 79 20 77 65 72 65 0a 20 20 20 20 61 74 74 61  ey were.    atta
de60: 63 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c  ched)..    .  <l
de70: 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
de80: 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
de90: 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
dea0: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
deb0: 44 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74 65  DELETE.    state
dec0: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
ded0: 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c  ggers.</p>..  <l
dee0: 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  i><p>^The LIMIT 
def0: 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
df00: 75 73 65 73 20 28 64 65 73 63 72 69 62 65 64 20  uses (described 
df10: 62 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75 70  below) are unsup
df20: 70 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20 44  ported for.    D
df30: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
df40: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
df50: 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33  .</p>.</ul>..<h3
df60: 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20  >Optional LIMIT 
df70: 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
df80: 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  uses</h3>..<p>^(
df90: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
dfa0: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b  piled with the [
dfb0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
dfc0: 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
dfd0: 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  T].compile-time 
dfe0: 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  option, then the
dff0: 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44   syntax of the D
e000: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
e010: 69 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74  is.extended by t
e020: 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f  he addition of o
e030: 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59  ptional ORDER BY
e040: 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
e050: 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  es:)^</p>..<tcl>
e060: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
e070: 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65  lete-stmt-limite
e080: 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20  d</tcl>..<p>^If 
e090: 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  a DELETE stateme
e0a0: 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63  nt has a LIMIT c
e0b0: 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d  lause, the maxim
e0c0: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  um number of row
e0d0: 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 64  s that.will be d
e0e0: 65 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64 20  eleted is found 
e0f0: 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
e100: 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65  e accompanying e
e110: 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61  xpression and ca
e120: 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69  sting.it to an i
e130: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 49  nteger value. ^I
e140: 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
e150: 74 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74  the evaluating t
e160: 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a  he LIMIT clause.
e170: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
e180: 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
e190: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  o an integer val
e1a0: 75 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  ue, it is an err
e1b0: 6f 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76 65  or. ^A .negative
e1c0: 20 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73 20   LIMIT value is 
e1d0: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22  interpreted as "
e1e0: 6e 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20  no limit". ^(If 
e1f0: 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
e200: 6d 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20 61  ment .also has a
e210: 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  n OFFSET clause,
e220: 20 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69   then it is simi
e230: 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20  larly evaluated 
e240: 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a 69  and cast to an.i
e250: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41 67  nteger value. Ag
e260: 61 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ain, it is an er
e270: 72 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75 65  ror if the value
e280: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
e290: 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20  essly.converted 
e2a0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e  to an integer.)^
e2b0: 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f   ^If there is no
e2c0: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
e2d0: 6f 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65  or the calculate
e2e0: 64 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  d.integer value 
e2f0: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
e300: 20 65 66 66 65 63 74 69 76 65 20 4f 46 46 53 45   effective OFFSE
e310: 54 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e  T value is zero.
e320: 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44 45  ..<p>^(If the DE
e330: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  LETE statement h
e340: 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  as an ORDER BY c
e350: 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
e360: 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rows that would 
e370: 0a 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74  .be deleted in t
e380: 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
e390: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
e3a0: 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64  re sorted accord
e3b0: 69 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44 45  ing to the .ORDE
e3c0: 52 20 42 59 2e 20 54 68 65 20 66 69 72 73 74 20  R BY. The first 
e3d0: 3c 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77  <i>M</i> rows, w
e3e0: 68 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73  here <i>M</i> is
e3f0: 20 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e 64   the value found
e400: 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   by.evaluating t
e410: 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
e420: 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65   expression, are
e430: 20 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74 68   skipped, and th
e440: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e  e following .<i>
e450: 4e 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e  N</i>, where <i>
e460: 4e 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c  N</i> is the val
e470: 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ue of the LIMIT 
e480: 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20  expression, are 
e490: 64 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74  deleted.)^.^If t
e4a0: 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
e4b0: 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73  an <i>N</i> rows
e4c0: 20 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65 72   remaining after
e4d0: 20 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46 53   taking the OFFS
e4e0: 45 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61  ET clause.into a
e4f0: 63 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74 68  ccount, or if th
e500: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 65  e LIMIT clause e
e510: 76 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e 65  valuated to a ne
e520: 67 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68  gative value, th
e530: 65 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67  en all.remaining
e540: 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65   rows are delete
e550: 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44  d...<p>^If the D
e560: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
e570: 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20  has no ORDER BY 
e580: 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
e590: 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64   rows that.would
e5a0: 20 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74   be deleted in t
e5b0: 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
e5c0: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
e5d0: 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20  re assembled in 
e5e0: 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64  an.arbitrary ord
e5f0: 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69  er before applyi
e600: 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64  ng the LIMIT and
e610: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20   OFFSET clauses 
e620: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74 68  to determine .th
e630: 65 20 73 75 62 73 65 74 20 74 68 61 74 20 61 72  e subset that ar
e640: 65 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65 74  e actually delet
e650: 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
e660: 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
e670: 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
e680: 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  ent is used only
e690: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
e6a0: 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69  ich.rows fall wi
e6b0: 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20  thin the LIMIT. 
e6c0: 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  The order in whi
e6d0: 63 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65  ch rows are dele
e6e0: 74 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ted is arbitrary
e6f0: 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c  .and is not infl
e700: 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52  uenced by the OR
e710: 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e  DER BY clause.)^
e720: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
e730: 6e 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20 7b  nt truncateopt {
e740: 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
e750: 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ation}</tcl>.<h3
e760: 3e 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70  >The Truncate Op
e770: 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a  timization</h3>.
e780: 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48  .<p>^When the WH
e790: 45 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ERE is omitted f
e7a0: 72 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61  rom a DELETE sta
e7b0: 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74  tement and the t
e7c0: 61 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74  able.being delet
e7d0: 65 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65  ed has no trigge
e7e0: 72 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20  rs,.SQLite uses 
e7f0: 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  an optimization 
e800: 74 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e 74  to erase the ent
e810: 69 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  ire table conten
e820: 74 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  t.without having
e830: 20 74 6f 20 76 69 73 69 74 20 65 61 63 68 20 72   to visit each r
e840: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ow of the table 
e850: 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68  individually..Th
e860: 69 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70  is "truncate" op
e870: 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73  timization makes
e880: 20 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20   the delete run 
e890: 6d 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69  much faster..Pri
e8a0: 6f 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65  or to SQLite [ve
e8b0: 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68  rsion 3.6.5], th
e8c0: 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d  e truncate optim
e8d0: 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61  ization.also mea
e8e0: 6e 74 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c  nt that the [sql
e8f0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20  ite3_changes()] 
e900: 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74  and.[sqlite3_tot
e910: 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e  al_changes()] in
e920: 74 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65  terfaces.and the
e930: 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20   [count_changes 
e940: 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74  pragma].will not
e950: 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e   actually return
e960: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
e970: 65 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54  eleted rows.  .T
e980: 68 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20  hat problem has 
e990: 62 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66  been fixed as of
e9a0: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d   [version 3.6.5]
e9b0: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63  ...<p>^The trunc
e9c0: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
e9d0: 20 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e   can be permanen
e9e0: 74 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72  tly disabled for
e9f0: 20 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20   all queries.by 
ea00: 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69  recompiling.SQLi
ea10: 74 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  te with the [SQL
ea20: 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54  ITE_OMIT_TRUNCAT
ea30: 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20  E_OPTIMIZATION] 
ea40: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69  compile-time swi
ea50: 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  tch.</p>..<p>The
ea60: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
ea70: 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20  zation can also 
ea80: 62 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72  be disabled at r
ea90: 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65  untime using.the
eaa0: 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75   [sqlite3_set_au
eab0: 74 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65  thorizer()] inte
eac0: 72 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61  rface.  ^If an a
ead0: 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61  uthorizer callba
eae0: 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49  ck.returns [SQLI
eaf0: 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61  TE_IGNORE] for a
eb00: 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  n [SQLITE_DELETE
eb10: 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74  ] action code, t
eb20: 68 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f  hen.the DELETE o
eb30: 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72  peration will pr
eb40: 6f 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72  oceed but the tr
eb50: 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74  uncate optimizat
eb60: 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61  ion will.be bypa
eb70: 73 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69  ssed and rows wi
eb80: 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e  ll be deleted on
eb90: 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c  e by one.</p>..<
eba0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
ebb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ebc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ebd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ebe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ebf0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45  ####.Section {DE
ec00: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
ec10: 65 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 52  etach *DETACH..R
ec20: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
ec30: 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d  agram detach-stm
ec40: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
ec50: 69 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74  is statement det
ec60: 61 63 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f  aches an additio
ec70: 6e 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e  nal database con
ec80: 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73  nection previous
ec90: 6c 79 20 0a 61 74 74 61 63 68 65 64 20 75 73 69  ly .attached usi
eca0: 6e 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20  ng the [ATTACH] 
ecb0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57 68  statement.  .^Wh
ecc0: 65 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72 65  en not in [share
ecd0: 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 0a  d cache mode], .
ece0: 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
ecf0: 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  o have the same 
ed00: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74  database file at
ed10: 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20  tached multiple 
ed20: 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66  times using .dif
ed30: 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e  ferent names, an
ed40: 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20  d detaching one 
ed50: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20  connection to a 
ed60: 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20  file will leave 
ed70: 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61  the .others inta
ed80: 63 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68 61  ct.</p>.^In [sha
ed90: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c  red cache mode],
eda0: 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61   attempting to a
edb0: 74 74 61 63 68 20 74 68 65 20 73 61 6d 65 20 64  ttach the same d
edc0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 6f 72  atabase file mor
edd0: 65 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65 73 75  e.than once resu
ede0: 6c 74 73 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e  lts in an error.
edf0: 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65  ..<p>^This state
ee00: 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69  ment will fail i
ee10: 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74  f SQLite is in t
ee20: 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74  he middle of a t
ee30: 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a  ransaction.</p>.
ee40: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
ee50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee90: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
eea0: 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70  DROP INDEX} drop
eeb0: 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44  index {{DROP IND
eec0: 45 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  EX}}..RecursiveB
eed0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
eee0: 70 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74  p-index-stmt.</t
eef0: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f  cl>..<p>^The DRO
ef00: 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  P INDEX statemen
ef10: 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64  t removes an ind
ef20: 65 78 20 61 64 64 65 64 0a 77 69 74 68 20 74 68  ex added.with th
ef30: 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d  e [CREATE INDEX]
ef40: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
ef50: 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65   index is comple
ef60: 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f  tely removed fro
ef70: 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65  m.the disk.  The
ef80: 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63   only way to rec
ef90: 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69  over the index i
efa0: 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65  s to reenter the
efb0: 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52  .appropriate [CR
efc0: 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d  EATE INDEX] comm
efd0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<tcl>.
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 23 23 23 23 23 23 23  ################
f000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
f030: 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42  ection {DROP TAB
f040: 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b  LE} droptable {{
f050: 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52 65  DROP TABLE}}..Re
f060: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
f070: 67 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d  gram drop-table-
f080: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
f090: 5e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20  ^The DROP TABLE 
f0a0: 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
f0b0: 73 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20  s a table added 
f0c0: 77 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45  with the.[CREATE
f0d0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
f0e0: 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65  t.  The name spe
f0f0: 63 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61  cified is the.ta
f100: 62 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20  ble name.  ^The 
f110: 64 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73  dropped table is
f120: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f   completely remo
f130: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ved from the dat
f140: 61 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e  abase .schema an
f150: 64 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e  d the disk file.
f160: 20 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20    The table can 
f170: 6e 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64  not be recovered
f180: 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73  .  .^All indices
f190: 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73   and triggers.as
f1a0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
f1b0: 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f  e table are also
f1c0: 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   deleted.</p>..<
f1d0: 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p>^The optional 
f1e0: 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  IF EXISTS clause
f1f0: 20 73 75 70 70 72 65 73 73 65 73 20 74 68 65 20   suppresses the 
f200: 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64  error that would
f210: 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74   normally.result
f220: 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f   if the table do
f230: 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70  es not exist.</p
f240: 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69  >..<p>^If [forei
f250: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
f260: 74 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c  ts] are enabled,
f270: 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f   a DROP TABLE co
f280: 6d 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61  mmand performs a
f290: 6e 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45  n.implicit [DELE
f2a0: 54 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d  TE | DELETE FROM
f2b0: 20 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63 6f   &lt;tbl&gt;] co
f2c0: 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d  mmand before rem
f2d0: 6f 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20  oving the.table 
f2e0: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
f2f0: 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74  e schema. ^Any t
f300: 72 69 67 67 65 72 73 20 61 74 74 61 63 68 65 64  riggers attached
f310: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72   to the table ar
f320: 65 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74  e.dropped from t
f330: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
f340: 6d 61 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d  ma before the im
f350: 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52  plicit DELETE FR
f360: 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 0a  OM &lt;tbl&gt; .
f370: 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20  is executed, so 
f380: 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73  this cannot caus
f390: 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20 74  e any triggers t
f3a0: 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72  o fire. By contr
f3b0: 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69  ast, ^an.implici
f3c0: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
f3d0: 74 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20 63  t;tbl&gt; does c
f3e0: 61 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67 75  ause any configu
f3f0: 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79  red.[foreign key
f400: 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61 6b   actions] to tak
f410: 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74 68  e place. .^If th
f420: 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  e implicit DELET
f430: 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67  E FROM &lt;tbl&g
f440: 74 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20 70  t; executed.as p
f450: 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41  art of a DROP TA
f460: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c  BLE command viol
f470: 61 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61  ates any immedia
f480: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
f490: 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65  onstraints,.an e
f4a0: 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
f4b0: 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
f4c0: 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e  s not dropped. ^
f4d0: 49 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74  If .the implicit
f4e0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74   DELETE FROM &lt
f4f0: 3b 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73 20  ;tbl&gt; causes 
f500: 61 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f  any .deferred fo
f510: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
f520: 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c  aints to be viol
f530: 61 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69  ated, and the vi
f540: 6f 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65  olations still.e
f550: 78 69 73 74 20 77 68 65 6e 20 74 68 65 20 74 72  xist when the tr
f560: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d  ansaction is com
f570: 6d 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72  mitted, an error
f580: 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 74 20   is returned at 
f590: 74 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d  the time.of comm
f5a0: 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  it...<tcl>.#####
f5b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5f0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
f600: 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d  n {DROP TRIGGER}
f610: 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44   droptrigger {{D
f620: 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52  ROP TRIGGER}}..R
f630: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
f640: 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67  agram drop-trigg
f650: 65 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  er-stmt.</tcl>..
f660: 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 52 49  <p>^The DROP TRI
f670: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72  GGER statement r
f680: 65 6d 6f 76 65 73 20 61 20 74 72 69 67 67 65 72  emoves a trigger
f690: 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
f6a0: 0a 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52  .[CREATE TRIGGER
f6b0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e  ] statement. ^On
f6c0: 63 65 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20  ce removed, the 
f6d0: 74 72 69 67 67 65 72 20 64 65 66 69 6e 69 74 69  trigger definiti
f6e0: 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20  on is no.longer 
f6f0: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 73  present in the s
f700: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 6f 72  qlite_master (or
f710: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
f720: 74 65 72 29 20 74 61 62 6c 65 20 61 6e 64 20 69  ter) table and i
f730: 73 0a 6e 6f 74 20 66 69 72 65 64 20 62 79 20 61  s.not fired by a
f740: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 20 49 4e  ny subsequent IN
f750: 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
f760: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
f770: 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  s...<p>^Note tha
f780: 74 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61  t triggers are a
f790: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f  utomatically dro
f7a0: 70 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73  pped when the as
f7b0: 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69  sociated table i
f7c0: 73 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c  s.dropped...<tcl
f7d0: 3e 0a 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 23 23 23 23 23  ################
f7f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f820: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56  .Section {DROP V
f830: 49 45 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b  IEW} dropview {{
f840: 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63  DROP VIEW}}..Rec
f850: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
f860: 72 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74  ram drop-view-st
f870: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
f880: 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61  he DROP VIEW sta
f890: 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61  tement removes a
f8a0: 20 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79   view created by
f8b0: 20 74 68 65 20 5b 43 52 45 41 54 45 20 56 49 45   the [CREATE VIE
f8c0: 57 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e  W] .  statement.
f8d0: 20 5e 54 68 65 20 76 69 65 77 20 64 65 66 69 6e   ^The view defin
f8e0: 69 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64  ition is removed
f8f0: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
f900: 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 0a  se schema, but .
f910: 20 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61    no actual data
f920: 20 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69   in the underlyi
f930: 6e 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69  ng base tables i
f940: 73 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e  s modified...<p>
f950: 5e 28 54 68 65 20 76 69 65 77 20 74 6f 20 64 72  ^(The view to dr
f960: 6f 70 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  op is identified
f970: 20 62 79 20 74 68 65 20 76 69 65 77 2d 6e 61 6d   by the view-nam
f980: 65 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a  e and optional .
f990: 20 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20    database-name 
f9a0: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
f9b0: 74 20 6f 66 20 74 68 65 20 44 52 4f 50 20 56 49  t of the DROP VI
f9c0: 45 57 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  EW statement. Th
f9d0: 69 73 20 0a 20 20 72 65 66 65 72 65 6e 63 65 20  is .  reference 
f9e0: 69 73 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e  is resolved usin
f9f0: 67 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 70  g the standard p
fa00: 72 6f 63 65 64 75 72 65 20 66 6f 72 20 5b 6f 62  rocedure for [ob
fa10: 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d  ject resolution]
fa20: 2e 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74  .)^..<p>.  ^If t
fa30: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65  he specified vie
fa40: 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  w cannot be foun
fa50: 64 20 61 6e 64 20 74 68 65 20 49 46 20 45 58 49  d and the IF EXI
fa60: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  STS clause is no
fa70: 74 20 0a 20 20 70 72 65 73 65 6e 74 2c 20 69 74  t .  present, it
fa80: 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49   is an error. ^I
fa90: 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
faa0: 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66  view cannot be f
fab0: 6f 75 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a 20  ound and an IF. 
fac0: 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
fad0: 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  s present in the
fae0: 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65   DROP VIEW state
faf0: 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73  ment, then the s
fb00: 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 61 20  tatement.  is a 
fb10: 6e 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23  no-op....<tcl>.#
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 23 23 23 23 23 23 23 23  ################
fb40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb60: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
fb70: 63 74 69 6f 6e 20 7b 44 61 74 61 62 61 73 65 20  ction {Database 
fb80: 4f 62 6a 65 63 74 20 4e 61 6d 65 20 52 65 73 6f  Object Name Reso
fb90: 6c 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d  lution} {naming}
fba0: 20 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75   {{object resolu
fbb0: 74 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  tion}}.</tcl>..<
fbc0: 70 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c 20  p>.  In SQLite, 
fbd0: 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63  a database objec
fbe0: 74 20 28 61 20 74 61 62 6c 65 2c 20 69 6e 64 65  t (a table, inde
fbf0: 78 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76 69  x, trigger or vi
fc00: 65 77 29 20 69 73 20 69 64 65 6e 74 69 66 69 65  ew) is identifie
fc10: 64 0a 20 20 62 79 20 74 68 65 20 6e 61 6d 65 20  d.  by the name 
fc20: 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20 61 6e  of the object an
fc30: 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
fc40: 65 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20  e database that 
fc50: 69 74 20 72 65 73 69 64 65 73 20 69 6e 2e 20 0a  it resides in. .
fc60: 20 20 44 61 74 61 62 61 73 65 20 6f 62 6a 65 63    Database objec
fc70: 74 73 20 6d 61 79 20 72 65 73 69 64 65 20 69 6e  ts may reside in
fc80: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
fc90: 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74  se, the temp dat
fca0: 61 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61  abase, or in.  a
fcb0: 6e 20 5b 41 54 54 41 43 48 7c 61 74 74 61 63 68  n [ATTACH|attach
fcc0: 65 64 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c  ed database]...<
fcd0: 70 3e 0a 20 20 54 68 65 20 73 79 6e 74 61 78 20  p>.  The syntax 
fce0: 6f 66 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  of the [DROP TAB
fcf0: 4c 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58  LE], [DROP INDEX
fd00: 5d 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20  ], [DROP VIEW], 
fd10: 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a  [DROP TRIGGER],.
fd20: 20 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c    [REINDEX], [AL
fd30: 54 45 52 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d  TER TABLE] and m
fd40: 61 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e  any other comman
fd50: 64 73 20 61 6c 6c 20 70 65 72 6d 69 74 20 74 68  ds all permit th
fd60: 65 20 75 73 65 72 20 74 6f 0a 20 20 73 70 65 63  e user to.  spec
fd70: 69 66 79 20 61 20 64 61 74 61 62 61 73 65 20 6f  ify a database o
fd80: 62 6a 65 63 74 20 65 69 74 68 65 72 20 62 79 20  bject either by 
fd90: 69 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20  its name alone, 
fda0: 6f 72 20 62 79 20 61 20 63 6f 6d 62 69 6e 61 74  or by a combinat
fdb0: 69 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d  ion of.  its nam
fdc0: 65 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f  e and the name o
fdd0: 66 20 69 74 73 20 64 61 74 61 62 61 73 65 2e 20  f its database. 
fde0: 5e 28 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65  ^(If no database
fdf0: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
fe00: 20 70 61 72 74 0a 20 20 6f 66 20 74 68 65 20 6f   part.  of the o
fe10: 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c  bject reference,
fe20: 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61   then SQLite sea
fe30: 72 63 68 65 73 20 74 68 65 20 6d 61 69 6e 2c 20  rches the main, 
fe40: 74 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74 74  temp and all att
fe50: 61 63 68 65 64 0a 20 20 64 61 74 61 62 61 73 65  ached.  database
fe60: 73 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20  s for an object 
fe70: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
fe80: 6e 61 6d 65 2e 20 54 68 65 20 74 65 6d 70 20 64  name. The temp d
fe90: 61 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63  atabase is searc
fea0: 68 65 64 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c  hed.  first, fol
feb0: 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6d 61 69  lowed by the mai
fec0: 6e 20 64 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c  n database, foll
fed0: 6f 77 65 64 20 61 6c 6c 20 61 74 74 61 63 68 65  owed all attache
fee0: 64 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  d databases in t
fef0: 68 65 0a 20 20 6f 72 64 65 72 20 74 68 61 74 20  he.  order that 
ff00: 74 68 65 79 20 77 65 72 65 20 61 74 74 61 63 68  they were attach
ff10: 65 64 2e 20 54 68 65 20 72 65 66 65 72 65 6e 63  ed. The referenc
ff20: 65 20 72 65 73 6f 6c 76 65 73 20 74 6f 20 74 68  e resolves to th
ff30: 65 20 66 69 72 73 74 20 6d 61 74 63 68 0a 20 20  e first match.  
ff40: 66 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61  found.)^ For exa
ff50: 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20  mple:..<pre>^(. 
ff60: 20 20 20 20 20 2f 2a 20 41 64 64 20 61 20 74 61       /* Add a ta
ff70: 62 6c 65 20 6e 61 6d 65 64 20 27 74 31 27 20 74  ble named 't1' t
ff80: 6f 20 74 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e  o the temp, main
ff90: 20 61 6e 64 20 61 6e 20 61 74 74 61 63 68 65 64   and an attached
ffa0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20   database */.   
ffb0: 20 20 20 41 54 54 41 43 48 20 27 66 69 6c 65 2e     ATTACH 'file.
ffc0: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
ffd0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
ffe0: 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43  1(x, y);.      C
fff0: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
10000 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20   t1(x, y);.     
10010 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75   CREATE TABLE au
10020 78 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20  x.t1(x, y);..   
10030 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
10040 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f  ;         /* Dro
10050 70 20 74 61 62 6c 65 20 69 6e 20 74 65 6d 70 20  p table in temp 
10060 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20  database */.    
10070 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
10080 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70           /* Drop
10090 20 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64   table in main d
100a0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20  atabase */.     
100b0 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20   DROP TABLE t1; 
100c0 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20          /* Drop 
100d0 74 61 62 6c 65 20 69 6e 20 61 75 78 20 64 61 74  table in aux dat
100e0 61 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65  abase */.)^</pre
100f0 3e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64  >..<p>.  ^If a d
10100 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20  atabase name is 
10110 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
10120 74 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 72  t of an object r
10130 65 66 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73  eference, it mus
10140 74 20 62 65 0a 20 20 65 69 74 68 65 72 20 22 6d  t be.  either "m
10150 61 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22 20  ain", or "temp" 
10160 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  or the name of a
10170 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
10180 61 73 65 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72  ase. ^Like other
10190 0a 20 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65  .  SQL identifie
101a0 72 73 2c 20 64 61 74 61 62 61 73 65 20 6e 61 6d  rs, database nam
101b0 65 73 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65  es are case-inse
101c0 6e 73 69 74 69 76 65 2e 20 5e 49 66 20 61 20 64  nsitive. ^If a d
101d0 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 20 20 69  atabase name.  i
101e0 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
101f0 6e 20 6f 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64  n only the named
10200 20 64 61 74 61 62 61 73 65 20 69 73 20 73 65 61   database is sea
10210 72 63 68 65 64 20 66 6f 72 20 74 68 65 20 6e 61  rched for the na
10220 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e  med object...<p>
10230 0a 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72  .  Most object r
10240 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e  eferences may on
10250 6c 79 20 72 65 73 6f 6c 76 65 20 74 6f 20 61 20  ly resolve to a 
10260 73 70 65 63 69 66 69 63 20 74 79 70 65 20 6f 66  specific type of
10270 20 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20 20 65   object (for.  e
10280 78 61 6d 70 6c 65 20 61 20 72 65 66 65 72 65 6e  xample a referen
10290 63 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ce that is part 
102a0 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20  of a DROP TABLE 
102b0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e  statement may on
102c0 6c 79 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20  ly resolve.  to 
102d0 61 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  a table object, 
102e0 6e 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20 74 72  not an index, tr
102f0 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 2e 20  igger or view). 
10300 48 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d 65 20  However in some 
10310 63 6f 6e 74 65 78 74 73 20 0a 20 20 28 65 2e 67  contexts .  (e.g
10320 2e 20 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e 20  . [REINDEX]) an 
10330 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65  object reference
10340 20 6d 61 79 20 62 65 20 72 65 73 6f 6c 76 65 20   may be resolve 
10350 74 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  to more than one
10360 20 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63   type.  of objec
10370 74 2e 20 5e 57 68 65 6e 20 73 65 61 72 63 68 69  t. ^When searchi
10380 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
10390 6d 61 73 20 66 6f 72 20 61 20 6e 61 6d 65 64 20  mas for a named 
103a0 6f 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73 20  object, objects 
103b0 6f 66 0a 20 20 74 79 70 65 73 20 74 68 61 74 20  of.  types that 
103c0 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69  cannot be used i
103d0 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66  n the context of
103e0 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 61   the reference a
103f0 72 65 20 61 6c 77 61 79 73 20 0a 20 20 69 67 6e  re always .  ign
10400 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ored...<tcl>.###
10410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10450 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
10460 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c  ion EXPLAIN expl
10470 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62  ain EXPLAIN..Bub
10480 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73  bleDiagram sql-s
10490 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
104a0 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  An SQL statement
104b0 20 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64   can be preceded
104c0 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
104d0 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20  "EXPLAIN" or.by 
104e0 74 68 65 20 70 68 72 61 73 65 20 22 45 58 50 4c  the phrase "EXPL
104f0 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e  AIN QUERY PLAN".
10500 20 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69    ^Either modifi
10510 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  cation causes th
10520 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e.SQL statement 
10530 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
10540 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75  uery and to retu
10550 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  rn information a
10560 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c  bout.how the SQL
10570 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
10580 20 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69   have operated i
10590 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  f the EXPLAIN ke
105a0 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20  yword or.phrase 
105b0 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64  had been omitted
105c0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75  .</p>..<p>The ou
105d0 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49  tput from EXPLAI
105e0 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55  N and EXPLAIN QU
105f0 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65  ERY PLAN is inte
10600 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63  nded for.interac
10610 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e  tive analysis an
10620 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e  d troubleshootin
10630 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74  g only.  The det
10640 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74  ails of the .out
10650 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73  put format are s
10660 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65  ubject to change
10670 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73   from one releas
10680 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74  e of SQLite to t
10690 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61  he next..Applica
106a0 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74  tions should not
106b0 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20   use EXPLAIN or 
106c0 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
106d0 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65  AN since.their e
106e0 78 61 63 74 20 62 65 68 61 76 69 6f 72 20 69 73  xact behavior is
106f0 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e   variable and on
10700 6c 79 20 70 61 72 74 69 61 6c 6c 79 20 64 6f 63  ly partially doc
10710 75 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  umented.</p>..<p
10720 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41  >^When the EXPLA
10730 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61  IN keyword appea
10740 72 73 20 62 79 20 69 74 73 65 6c 66 20 69 74 20  rs by itself it 
10750 63 61 75 73 65 73 20 74 68 65 20 73 74 61 74 65  causes the state
10760 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61  ment.to behave a
10770 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20 72  s a query that r
10780 65 74 75 72 6e 73 20 74 68 65 20 73 65 71 75 65  eturns the seque
10790 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c  nce of .[virtual
107a0 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63   machine instruc
107b0 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20  tions] it would 
107c0 68 61 76 65 20 75 73 65 64 20 74 6f 20 65 78 65  have used to exe
107d0 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64  cute the command
107e0 20 68 61 64 0a 74 68 65 20 45 58 50 4c 41 49 4e   had.the EXPLAIN
107f0 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65   keyword not bee
10800 6e 20 70 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e  n present. ^When
10810 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45   the EXPLAIN QUE
10820 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65 0a 61  RY PLAN phrase.a
10830 70 70 65 61 72 73 2c 20 74 68 65 20 73 74 61 74  ppears, the stat
10840 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 68 69  ement returns hi
10850 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61  gh-level informa
10860 74 69 6f 6e 20 72 65 67 61 72 64 69 6e 67 20 74  tion regarding t
10870 68 65 20 71 75 65 72 79 0a 70 6c 61 6e 20 74 68  he query.plan th
10880 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  at would have be
10890 65 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20 45 58  en used...The EX
108a0 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
108b0 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73 63   command is desc
108c0 72 69 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61  ribed in .[expla
108d0 69 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f  in query plan|mo
108e0 72 65 20 64 65 74 61 69 6c 20 68 65 72 65 5d 2e  re detail here].
108f0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
10900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10940 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65  ######.Section e
10950 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b  xpression expr {
10960 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70  *expression {exp
10970 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d  ression syntax}}
10980 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
10990 65 44 69 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f  eDiagram expr.</
109a0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65  tcl>..<p>This se
109b0 63 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65  ction is differe
109c0 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65  nt from the othe
109d0 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20  rs.  Most other 
109e0 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73  sections of.this
109f0 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20   document talks 
10a00 61 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c  about a particul
10a10 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20  ar SQL command. 
10a20 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f   This section do
10a30 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75  es.not talk abou
10a40 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63  t a standalone c
10a50 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74  ommand but about
10a60 20 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77   "expressions" w
10a70 68 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d  hich are .subcom
10a80 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20  ponents of most 
10a90 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c  other commands.<
10aa0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
10ab0 67 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20  gment binaryops 
10ac0 7b 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72  {binary operator
10ad0 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65  s}</tcl>.<h3>Ope
10ae0 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
10af0 28 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  (SQLite understa
10b00 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
10b10 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
10b20 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
10b30 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
10b40 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
10b50 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
10b60 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
10b70 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
10b80 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
10b90 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
10ba0 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
10bb0 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
10bc0 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
10bd0 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
10be0 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
10bf0 20 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e   </big>IS   IS N
10c00 4f 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20  OT   IN   LIKE  
10c10 20 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20   GLOB   MATCH   
10c20 52 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52  REGEXP.AND   .OR
10c30 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f  </font>.</pre></
10c40 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
10c50 70 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e  p>^(Supported un
10c60 61 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61  ary prefix opera
10c70 74 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c  tors are these:<
10c80 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
10c90 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
10ca0 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
10cb0 67 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20  g>-    +    ~   
10cc0 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74   NOT</big></font
10cd0 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  >.</pre></blockq
10ce0 75 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  uote>)^..<tcl>hd
10cf0 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74  _fragment collat
10d00 65 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65  eop {COLLATE ope
10d10 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  rator}</tcl>.<p>
10d20 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65  ^The COLLATE ope
10d30 72 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79  rator is a unary
10d40 20 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f   postfix.operato
10d50 72 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61  r that assigns a
10d60 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
10d70 65 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72  ence] to an expr
10d80 65 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c  ession..^The COL
10d90 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61  LATE operator ha
10da0 73 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65  s a higher prece
10db0 64 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72  dence (binds mor
10dc0 65 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20  e tightly) than 
10dd0 61 6e 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61  any.binary opera
10de0 74 6f 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72  tor and any unar
10df0 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f  y prefix operato
10e00 72 20 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43  r except "~"..(C
10e10 4f 4c 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61  OLLATE and "~" a
10e20 72 65 20 61 73 73 6f 63 69 61 74 69 76 65 20 73  re associative s
10e30 6f 20 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20  o their binding 
10e40 6f 72 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d  order does not m
10e50 61 74 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c  atter.).^The col
10e60 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
10e70 73 65 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41  set by the COLLA
10e80 54 45 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72  TE operator over
10e90 72 69 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74  rides the.collat
10ea0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 74  ing sequence det
10eb0 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43  ermined by the C
10ec0 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e  OLLATE clause in
10ed0 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e   a table.[column
10ee0 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65   definition]..Se
10ef0 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67  e the [collating
10f00 20 73 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69   sequence| detai
10f10 6c 65 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f  led discussion o
10f20 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  n collating sequ
10f30 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64  ences].in the [d
10f40 61 74 61 74 79 70 65 20 7c 20 44 61 74 61 74 79  atatype | Dataty
10f50 70 65 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64  pe In SQLite3] d
10f60 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69  ocument for addi
10f70 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
10f80 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  on..</p>..<tcl>h
10f90 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65  d_puts ".<p>^The
10fa0 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20   unary operator 
10fb0 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20  [Operator +] is 
10fc0 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61  a no-op.  ^It ca
10fd0 6e 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20  n be applied.to 
10fe0 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73  strings, numbers
10ff0 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20  , blobs or NULL 
11000 61 6e 64 20 69 74 20 61 6c 77 61 79 73 20 72 65  and it always re
11010 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77  turns a result.w
11020 69 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ith the same val
11030 75 65 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e  ue as the operan
11040 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c  d.</p>"</tcl>..<
11050 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72  p>Note that ther
11060 65 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74  e are two variat
11070 69 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61  ions of the equa
11080 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c  ls and not equal
11090 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45  s.operators.  ^E
110a0 71 75 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74  quals can be eit
110b0 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75  her..<tcl>.hd_pu
110c0 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d  ts "[Operator =]
110d0 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d   or [Operator ==
110e0 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61  ]..^The non-equa
110f0 6c 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  ls operator can 
11100 62 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61  be either.[Opera
11110 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72  tor !=] or [Oper
11120 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d  ator {&lt;&gt;}]
11130 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72  ..^The [Operator
11140 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73   ||] operator is
11150 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22   \"concatenate\"
11160 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65   - it joins toge
11170 74 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72  ther.the two str
11180 69 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72  ings of its oper
11190 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61  ands..^The opera
111a0 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d  tor [Operator %]
111b0 20 6f 75 74 70 75 74 73 20 74 68 65 20 76 61 6c   outputs the val
111c0 75 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a  ue of its left .
111d0 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69  operand modulo i
111e0 74 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  ts right operand
111f0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72  .</p>..<p>^The r
11200 65 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e  esult of any bin
11210 61 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ary operator is 
11220 65 69 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63  either a numeric
11230 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c   value or .NULL,
11240 20 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20   except for the 
11250 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f  [Operator ||] co
11260 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72  ncatenation oper
11270 61 74 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79  ator which alway
11280 73 20 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20  s .evaluates to 
11290 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
112a0 20 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e   text value.</p>
112b0 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  "..hd_fragment {
112c0 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65  isisnot} {IS ope
112d0 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f  rator} {IS NOT o
112e0 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74  perator}..hd_put
112f0 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72  s "<p>^The [Oper
11300 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70  ator IS] and [Op
11310 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d  erator {IS NOT}]
11320 20 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a   operators work.
11330 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d  like [Operator =
11340 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20  ] and [Operator 
11350 21 3d 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20  !=] except when 
11360 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74  one or both of t
11370 68 65 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he.operands are 
11380 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63  NULL. ^In this c
11390 61 73 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65  ase, if both ope
113a0 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20  rands are NULL, 
113b0 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72  then the.IS oper
113c0 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74  ator evaluates t
113d0 6f 20 31 20 28 74 72 75 65 29 20 61 6e 64 20 74  o 1 (true) and t
113e0 68 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  he IS NOT operat
113f0 6f 72 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20  or evaluates.to 
11400 30 20 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f  0 (false). ^If o
11410 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
11420 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72  LL and the other
11430 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68   is not, then th
11440 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76  e.IS operator ev
11450 61 6c 75 61 74 65 73 20 74 6f 20 30 20 28 66 61  aluates to 0 (fa
11460 6c 73 65 29 20 61 6e 64 20 74 68 65 20 49 53 20  lse) and the IS 
11470 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20  NOT operator is 
11480 31 20 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73  1 (true)..^It is
11490 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f   not possible fo
114a0 72 20 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f  r an IS or IS NO
114b0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  T expression to 
114c0 65 76 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c  evaluate to NULL
114d0 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70  ..^Operators [Op
114e0 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b  erator IS] and [
114f0 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54  Operator {IS NOT
11500 7d 5d 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  }] have the same
11510 20 0a 70 72 65 63 65 64 65 6e 63 65 20 61 73 20   .precedence as 
11520 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a  [Operator =]."..
11530 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
11540 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72   litvalue {liter
11550 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a  al value}</tcl>.
11560 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75  <h3>Literal Valu
11570 65 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e 41 20 6c  es</h3>.<p>.^A l
11580 69 74 65 72 61 6c 20 76 61 6c 75 65 20 69 73 20  iteral value is 
11590 61 20 63 6f 6e 73 74 61 6e 74 20 6f 66 20 73 6f  a constant of so
115a0 6d 65 20 6b 69 6e 64 2e 0a 5e 4c 69 74 65 72 61  me kind..^Litera
115b0 6c 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20  l values may be 
115c0 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61 74 69  integers, floati
115d0 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73  ng point numbers
115e0 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42 73  , strings,.BLOBs
115f0 2c 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f 70 3e 0a  , or NULLs.</p>.
11600 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66  .<p>The syntax f
11610 6f 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20 66  or integer and f
11620 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
11630 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69  terals (collecti
11640 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69  vely."numeric li
11650 74 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f 77  terals") is show
11660 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n by the followi
11670 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a  ng diagram:</p>.
11680 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
11690 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65  ram numeric-lite
116a0 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e  ral</tcl>..<p>.^
116b0 28 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c 69  (If a numeric li
116c0 74 65 72 61 6c 20 68 61 73 20 61 20 64 65 63 69  teral has a deci
116d0 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20  mal point or an 
116e0 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
116f0 6c 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20 69  lause, then it i
11700 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
11710 6e 74 20 6c 69 74 65 72 61 6c 2e 20 20 4f 74 68  nt literal.  Oth
11720 65 72 77 69 73 65 20 69 73 20 69 74 20 69 73 20  erwise is it is 
11730 61 6e 20 0a 69 6e 74 65 67 65 72 20 6c 69 74 65  an .integer lite
11740 72 61 6c 2e 29 5e 20 20 5e 54 68 65 20 22 45 22  ral.)^  ^The "E"
11750 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
11760 62 65 67 69 6e 73 20 74 68 65 20 65 78 70 6f 6e  begins the expon
11770 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65  entiation.clause
11780 20 6f 66 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   of a floating p
11790 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20 63 61 6e  oint literal can
117a0 20 62 65 20 65 69 74 68 65 72 20 75 70 70 65 72   be either upper
117b0 20 6f 72 20 6c 6f 77 65 72 20 63 61 73 65 2e 0a   or lower case..
117c0 5e 28 54 68 65 20 22 2e 22 20 63 68 61 72 61 63  ^(The "." charac
117d0 74 65 72 20 69 73 20 61 6c 77 61 79 73 20 75 73  ter is always us
117e0 65 64 20 0a 61 73 20 74 68 65 20 64 65 63 69 6d  ed .as the decim
117f0 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20 69 66  al point even if
11800 20 74 68 65 20 6c 6f 63 61 6c 65 20 73 65 74 74   the locale sett
11810 69 6e 67 20 73 70 65 63 69 66 69 65 73 20 22 2c  ing specifies ",
11820 22 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c 65 20  " for.this role 
11830 2d 20 74 68 65 20 75 73 65 20 6f 66 20 22 2c 22  - the use of ","
11840 20 66 6f 72 20 74 68 65 20 64 65 63 69 6d 61 6c   for the decimal
11850 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72 65 73   point would res
11860 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74 69 63  ult in.syntactic
11870 20 61 6d 62 69 67 75 69 74 79 2e 29 5e 3c 2f 70   ambiguity.)^</p
11880 3e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72 69 6e 67  >..<p> ^A string
11890 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72   constant is for
118a0 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67  med by enclosing
118b0 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73   the.string in s
118c0 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29  ingle quotes (')
118d0 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 71 75 6f  .  ^A single quo
118e0 74 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 74  te within the st
118f0 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f  ring can.be enco
11900 64 65 64 20 62 79 20 70 75 74 74 69 6e 67 20 74  ded by putting t
11910 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73  wo single quotes
11920 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73 20 69   in a row - as i
11930 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c  n Pascal..C-styl
11940 65 20 65 73 63 61 70 65 73 20 75 73 69 6e 67 20  e escapes using 
11950 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20 63 68  the backslash ch
11960 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f 74 20  aracter are not 
11970 73 75 70 70 6f 72 74 65 64 20 62 65 63 61 75 73  supported becaus
11980 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74 20 73  e.they are not s
11990 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 5e 42 4c  tandard SQL..^BL
119a0 4f 42 20 6c 69 74 65 72 61 6c 73 20 61 72 65 20  OB literals are 
119b0 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20  string literals 
119c0 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65 78 61 64  containing hexad
119d0 65 63 69 6d 61 6c 20 64 61 74 61 20 61 6e 64 0a  ecimal data and.
119e0 70 72 65 63 65 64 65 64 20 62 79 20 61 20 73 69  preceded by a si
119f0 6e 67 6c 65 20 22 78 22 20 6f 72 20 22 58 22 20  ngle "x" or "X" 
11a00 63 68 61 72 61 63 74 65 72 2e 20 20 5e 28 46 6f  character.  ^(Fo
11a10 72 20 65 78 61 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a  r example:</p>..
11a20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
11a30 3e 0a 58 27 35 33 35 31 34 43 36 39 37 34 36 35  >.X'53514C697465
11a40 27 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  '.</pre></blockq
11a50 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 41 20  uote>)^..<p>.^A 
11a60 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20 63 61  literal value ca
11a70 6e 20 61 6c 73 6f 20 62 65 20 74 68 65 20 74 6f  n also be the to
11a80 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e  ken "NULL"..</p>
11a90 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
11aa0 6e 74 20 76 61 72 70 61 72 61 6d 20 70 61 72 61  nt varparam para
11ab0 6d 65 74 65 72 20 70 61 72 61 6d 65 74 65 72 73  meter parameters
11ac0 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65   {bound paramete
11ad0 72 7d 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65  r} {bound parame
11ae0 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ters}</tcl>.<h3>
11af0 50 61 72 61 6d 65 74 65 72 73 3c 2f 68 33 3e 0a  Parameters</h3>.
11b00 3c 70 3e 0a 41 20 22 76 61 72 69 61 62 6c 65 22  <p>.A "variable"
11b10 20 6f 72 20 22 70 61 72 61 6d 65 74 65 72 22 20   or "parameter" 
11b20 74 6f 6b 65 6e 0a 73 70 65 63 69 66 69 65 73 20  token.specifies 
11b30 61 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e  a placeholder in
11b40 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
11b50 66 6f 72 20 61 20 0a 76 61 6c 75 65 20 74 68 61  for a .value tha
11b60 74 20 69 73 20 66 69 6c 6c 65 64 20 69 6e 20 61  t is filled in a
11b70 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20  t runtime using 
11b80 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e  the.[sqlite3_bin
11b90 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74  d_blob() | sqlit
11ba0 65 33 5f 62 69 6e 64 28 29 5d 20 66 61 6d 69 6c  e3_bind()] famil
11bb0 79 20 6f 66 20 43 2f 43 2b 2b 20 69 6e 74 65 72  y of C/C++ inter
11bc0 66 61 63 65 73 2e 0a 50 61 72 61 6d 65 74 65 72  faces..Parameter
11bd0 73 20 63 61 6e 20 74 61 6b 65 20 73 65 76 65 72  s can take sever
11be0 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a  al forms:.</p>..
11bf0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
11c00 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  ble>.<tr>.<td al
11c10 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
11c20 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62  gn="top"><b>?</b
11c30 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e  ><i>NNN</i></td>
11c40 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
11c50 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41 20 71 75 65  /td>.<td>^(A que
11c60 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f  stion mark follo
11c70 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20  wed by a number 
11c80 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73  <i>NNN</i> holds
11c90 20 61 20 73 70 6f 74 20 66 6f 72 20 74 68 65 0a   a spot for the.
11ca0 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65 74 65 72  NNN-th parameter
11cb0 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62 65 20 62  .  NNN must be b
11cc0 65 74 77 65 65 6e 20 31 20 61 6e 64 20 5b 53 51  etween 1 and [SQ
11cd0 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
11ce0 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74  E_NUMBER].)^.</t
11cf0 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
11d00 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
11d10 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
11d20 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  ?</b></td><td wi
11d30 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
11d40 74 64 3e 5e 41 20 71 75 65 73 74 69 6f 6e 20 6d  td>^A question m
11d50 61 72 6b 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ark that is not 
11d60 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75  followed by a nu
11d70 6d 62 65 72 20 63 72 65 61 74 65 73 20 61 20 70  mber creates a p
11d80 61 72 61 6d 65 74 65 72 0a 77 69 74 68 20 61 20  arameter.with a 
11d90 6e 75 6d 62 65 72 20 6f 6e 65 20 67 72 65 61 74  number one great
11da0 65 72 20 74 68 61 6e 20 74 68 65 20 6c 61 72 67  er than the larg
11db0 65 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75  est parameter nu
11dc0 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61 73 73  mber already ass
11dd0 69 67 6e 65 64 2e 0a 5e 49 66 20 74 68 69 73 20  igned..^If this 
11de0 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65  means the parame
11df0 74 65 72 20 6e 75 6d 62 65 72 20 69 73 20 67 72  ter number is gr
11e00 65 61 74 65 72 20 74 68 61 6e 0a 5b 53 51 4c 49  eater than.[SQLI
11e10 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
11e20 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 20 61  NUMBER], it is a
11e30 6e 20 65 72 72 6f 72 2e 0a 3c 2f 74 64 3e 0a 3c  n error..</td>.<
11e40 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
11e50 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
11e60 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62  gn="top"><b>:</b
11e70 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
11e80 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
11e90 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c  </td>.<td>^A col
11ea0 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  on followed by a
11eb0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  n identifier nam
11ec0 65 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  e holds a spot f
11ed0 6f 72 20 61 20 0a 5b 73 71 6c 69 74 65 33 5f 62  or a .[sqlite3_b
11ee0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
11ef0 6d 65 7c 6e 61 6d 65 64 20 70 61 72 61 6d 65 74  me|named paramet
11f00 65 72 5d 20 77 69 74 68 20 74 68 65 20 6e 61 6d  er] with the nam
11f10 65 20 3a 41 41 41 41 2e 20 20 0a 5e 28 4e 61 6d  e :AAAA.  .^(Nam
11f20 65 64 20 70 61 72 61 6d 65 74 65 72 73 20 61 72  ed parameters ar
11f30 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e  e also numbered.
11f40 20 54 68 65 20 6e 75 6d 62 65 72 20 61 73 73 69   The number assi
11f50 67 6e 65 64 20 69 73 20 6f 6e 65 20 67 72 65 61  gned is one grea
11f60 74 65 72 20 74 68 61 6e 0a 74 68 65 20 6c 61 72  ter than.the lar
11f70 67 65 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e  gest parameter n
11f80 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61 73  umber already as
11f90 73 69 67 6e 65 64 2e 29 5e 20 5e 49 66 20 74 68  signed.)^ ^If th
11fa0 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72  is means the par
11fb0 61 6d 65 74 65 72 0a 77 6f 75 6c 64 20 62 65 20  ameter.would be 
11fc0 61 73 73 69 67 6e 65 64 20 61 20 6e 75 6d 62 65  assigned a numbe
11fd0 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 5b  r greater than [
11fe0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
11ff0 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20  BLE_NUMBER], it 
12000 69 73 0a 61 6e 20 65 72 72 6f 72 2e 20 54 6f 20  is.an error. To 
12010 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c  avoid confusion,
12020 20 69 74 20 69 73 20 62 65 73 74 20 74 6f 20 61   it is best to a
12030 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65  void mixing name
12040 64 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 0a 70  d and numbered.p
12050 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a  arameters.</td>.
12060 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
12070 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
12080 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f  ign="top"><b>@</
12090 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74  b><i>AAAA</i></t
120a0 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
120b0 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22  ></td>.<td>^An "
120c0 61 74 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65  at" sign works e
120d0 78 61 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f  xactly like a co
120e0 6c 6f 6e 2c 20 65 78 63 65 70 74 20 74 68 61 74  lon, except that
120f0 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a 74 68 65   the name of.the
12100 20 70 61 72 61 6d 65 74 65 72 20 63 72 65 61 74   parameter creat
12110 65 64 20 69 73 20 40 41 41 41 41 2e 3c 2f 74 64  ed is @AAAA.</td
12120 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
12130 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
12140 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24  align="top"><b>$
12150 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c  </b><i>AAAA</i><
12160 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
12170 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
12180 64 6f 6c 6c 61 72 2d 73 69 67 6e 20 66 6f 6c 6c  dollar-sign foll
12190 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74  owed by an ident
121a0 69 66 69 65 72 20 6e 61 6d 65 20 61 6c 73 6f 20  ifier name also 
121b0 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72  holds a spot for
121c0 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74   a named.paramet
121d0 65 72 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65  er with the name
121e0 20 24 41 41 41 41 2e 20 20 5e 28 54 68 65 20 69   $AAAA.  ^(The i
121f0 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 69  dentifier name i
12200 6e 20 74 68 69 73 20 63 61 73 65 20 63 61 6e 20  n this case can 
12210 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d  include.one or m
12220 6f 72 65 20 6f 63 63 75 72 72 65 6e 63 65 73 20  ore occurrences 
12230 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61 20 73 75  of "::" and a su
12240 66 66 69 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e  ffix enclosed in
12250 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e   "(...)" contain
12260 69 6e 67 0a 61 6e 79 20 74 65 78 74 20 61 74 20  ing.any text at 
12270 61 6c 6c 2e 29 5e 20 20 54 68 69 73 20 73 79 6e  all.)^  This syn
12280 74 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d 20  tax is the form 
12290 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e 61  of a variable na
122a0 6d 65 20 69 6e 20 74 68 65 0a 5b 68 74 74 70 3a  me in the.[http:
122b0 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 20 7c 20  //www.tcl.tk/ | 
122c0 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20  Tcl programming 
122d0 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65 20  language].  The 
122e0 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69 73  presence.of this
122f0 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73 20   syntax results 
12300 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68  from the fact th
12310 61 74 20 53 51 4c 69 74 65 20 69 73 20 72 65 61  at SQLite is rea
12320 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74 65  lly a .[Tcl exte
12330 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73 20  nsion] that has 
12340 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68 65  escaped into the
12350 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72   wild.</td>.</tr
12360 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  >.</table>.</blo
12370 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61  ckquote>..<p>^Pa
12380 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72  rameters that ar
12390 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 76  e not assigned v
123a0 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c  alues using.[sql
123b0 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29  ite3_bind_blob()
123c0 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28   | sqlite3_bind(
123d0 29 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a 61  )] are treated.a
123e0 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e  s NULL.</p>..<p>
123f0 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 72  ^The maximum par
12400 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73  ameter number is
12410 20 73 65 74 20 61 74 20 63 6f 6d 70 69 6c 65 2d   set at compile-
12420 74 69 6d 65 20 62 79 0a 74 68 65 20 5b 53 51 4c  time by.the [SQL
12430 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
12440 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72 6f 2e 20  _NUMBER] macro. 
12450 20 5e 28 41 6e 20 69 6e 64 69 76 69 64 75 61 6c   ^(An individual
12460 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
12470 63 74 69 6f 6e 73 5d 0a 44 20 63 61 6e 20 72 65  ctions].D can re
12480 64 75 63 65 20 69 74 73 20 6d 61 78 69 6d 75 6d  duce its maximum
12490 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
124a0 72 20 62 65 6c 6f 77 20 74 68 65 20 63 6f 6d 70  r below the comp
124b0 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d 75 6d  ile-time maximum
124c0 0a 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69  .using the [sqli
124d0 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20 5b 53  te3_limit](D, [S
124e0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49  QLITE_LIMIT_VARI
124f0 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e 2e 2e  ABLE_NUMBER],...
12500 29 20 69 6e 74 65 72 66 61 63 65 2e 29 5e 0a 3c  ) interface.)^.<
12510 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
12520 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b 45 20  gment like LIKE 
12530 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33  ESCAPE</tcl>.<h3
12540 3e 54 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c  >The LIKE and GL
12550 4f 42 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33  OB operators</h3
12560 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f  >.<p>^The LIKE o
12570 70 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70  perator does a p
12580 61 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20  attern matching 
12590 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54 68 65  comparison. ^The
125a0 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68 65 20   operand.to the 
125b0 72 69 67 68 74 20 6f 66 20 74 68 65 20 4c 49 4b  right of the LIK
125c0 45 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74 61  E operator conta
125d0 69 6e 73 20 74 68 65 20 70 61 74 74 65 72 6e 20  ins the pattern 
125e0 61 6e 64 20 74 68 65 20 6c 65 66 74 20 68 61 6e  and the left han
125f0 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69  d.operand contai
12600 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 74 6f  ns the string to
12610 20 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74   match against t
12620 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63  he pattern...<tc
12630 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41 20 70 65  l>hd_puts "^A pe
12640 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22  rcent symbol (\"
12650 25 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45  %\") in the LIKE
12660 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73   pattern matches
12670 20 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f 66   any.sequence of
12680 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68   zero or more ch
12690 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20  aracters in the 
126a0 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75 6e 64  string.  ^An und
126b0 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22 29 20  erscore.(\"_\") 
126c0 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
126d0 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 20  ern matches any 
126e0 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
126f0 20 69 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e 20   in the.string. 
12700 20 5e 28 41 6e 79 20 6f 74 68 65 72 20 63 68 61   ^(Any other cha
12710 72 61 63 74 65 72 20 6d 61 74 63 68 65 73 20 69  racter matches i
12720 74 73 65 6c 66 20 6f 72 20 69 74 73 20 6c 6f 77  tself or its low
12730 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65 71  er/upper case.eq
12740 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20 63  uivalent (i.e. c
12750 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20  ase-insensitive 
12760 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20 20 28 41  matching).)^  (A
12770 20 62 75 67 3a 20 5e 53 51 4c 69 74 65 20 6f 6e   bug: ^SQLite on
12780 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75  ly.understands u
12790 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20  pper/lower case 
127a0 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
127b0 74 65 72 73 20 62 79 20 64 65 66 61 75 6c 74 2e  ters by default.
127c0 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65 72    ^The.LIKE oper
127d0 61 74 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e  ator is case sen
127e0 73 69 74 69 76 65 20 62 79 20 64 65 66 61 75 6c  sitive by defaul
127f0 74 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 63 68  t for unicode ch
12800 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 72  aracters that ar
12810 65 0a 62 65 79 6f 6e 64 20 74 68 65 20 41 53 43  e.beyond the ASC
12820 49 49 20 72 61 6e 67 65 2e 20 20 46 6f 72 20 65  II range.  For e
12830 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78 70  xample,.^the exp
12840 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e  ression <b>'a'&n
12850 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41  bsp;LIKE&nbsp;'A
12860 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62 75  '</b>.is TRUE bu
12870 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e  t <b>'&aelig;'&n
12880 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26  bsp;LIKE&nbsp;'&
12890 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46  AElig;'</b> is F
128a0 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74 63 6c 3e  ALSE.)<p>"</tcl>
128b0 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
128c0 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
128d0 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
128e0 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
128f0 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ion.following th
12900 65 20 45 53 43 41 50 45 20 6b 65 79 77 6f 72 64  e ESCAPE keyword
12910 20 6d 75 73 74 20 65 76 61 6c 75 61 74 65 20 74   must evaluate t
12920 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69  o a string consi
12930 73 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67 6c  sting of.a singl
12940 65 20 63 68 61 72 61 63 74 65 72 2e 20 5e 54 68  e character. ^Th
12950 69 73 20 63 68 61 72 61 63 74 65 72 20 6d 61 79  is character may
12960 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20   be used in the 
12970 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74 6f 20  LIKE pattern.to 
12980 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61 6c 20  include literal 
12990 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64 65 72  percent or under
129a0 73 63 6f 72 65 20 63 68 61 72 61 63 74 65 72 73  score characters
129b0 2e 20 5e 54 68 65 20 65 73 63 61 70 65 0a 63 68  . ^The escape.ch
129c0 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65 64  aracter followed
129d0 20 62 79 20 61 20 70 65 72 63 65 6e 74 20 73 79   by a percent sy
129e0 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64 65 72 73  mbol (%), unders
129f0 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20 61 20 73  core (_), or a s
12a00 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63 65 20 6f  econd.instance o
12a10 66 20 74 68 65 20 65 73 63 61 70 65 20 63 68 61  f the escape cha
12a20 72 61 63 74 65 72 20 69 74 73 65 6c 66 20 6d 61  racter itself ma
12a30 74 63 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20  tches a.literal 
12a40 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20  percent symbol, 
12a50 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f 72 20 61  underscore, or a
12a60 20 73 69 6e 67 6c 65 20 65 73 63 61 70 65 20 63   single escape c
12a70 68 61 72 61 63 74 65 72 2c 0a 72 65 73 70 65 63  haracter,.respec
12a80 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65  tively...<p>^The
12a90 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70 65 72   infix LIKE oper
12aa0 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e  ator is implemen
12ab0 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
12ac0 68 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  he.application-d
12ad0 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74  efined SQL funct
12ae0 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c  ions [like(<i>Y<
12af0 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f  /i>,<i>X</i>)] o
12b00 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e  r.[like(<i>Y</i>
12b10 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f  ,<i>X</i>,<i>Z</
12b20 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  i>)]</a>.</p>..<
12b30 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72  p>^The LIKE oper
12b40 61 74 6f 72 20 63 61 6e 20 62 65 20 6d 61 64 65  ator can be made
12b50 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
12b60 75 73 69 6e 67 20 74 68 65 0a 5b 63 61 73 65 5f  using the.[case_
12b70 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65 20 70  sensitive_like p
12b80 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63  ragma].</p>..<tc
12b90 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 67 6c  l>hd_fragment gl
12ba0 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70  ob GLOB</tcl>.<p
12bb0 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72 61  >^The GLOB opera
12bc0 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74  tor is similar t
12bd0 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73 20  o LIKE but uses 
12be0 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67 6c  the Unix.file gl
12bf0 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66 6f  obbing syntax fo
12c00 72 20 69 74 73 20 77 69 6c 64 63 61 72 64 73 2e  r its wildcards.
12c10 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20 69 73    ^Also, GLOB is
12c20 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76 65 2c   case.sensitive,
12c30 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20 5e   unlike LIKE.  ^
12c40 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20 4c 49  Both GLOB and LI
12c50 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63 65 64  KE may be preced
12c60 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20 6b 65  ed by.the NOT ke
12c70 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20  yword to invert 
12c80 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65  the sense of the
12c90 20 74 65 73 74 2e 20 20 5e 54 68 65 20 69 6e 66   test.  ^The inf
12ca0 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74 6f  ix GLOB .operato
12cb0 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  r is implemented
12cc0 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20   by calling the 
12cd0 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c  function.[glob(<
12ce0 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
12cf0 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20 6d 6f  )] and can be mo
12d00 64 69 66 69 65 64 20 62 79 20 6f 76 65 72 72 69  dified by overri
12d10 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63 74 69  ding.that functi
12d20 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  on.</p>..<tcl>hd
12d30 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65 78 70  _fragment regexp
12d40 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70   REGEXP</tcl>.<p
12d50 3e 5e 54 68 65 20 52 45 47 45 58 50 20 6f 70 65  >^The REGEXP ope
12d60 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63 69  rator is a speci
12d70 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68  al syntax for th
12d80 65 20 72 65 67 65 78 70 28 29 0a 75 73 65 72 20  e regexp().user 
12d90 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72  function.  ^No r
12da0 65 67 65 78 70 28 29 20 75 73 65 72 20 66 75 6e  egexp() user fun
12db0 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ction is defined
12dc0 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64 20   by default.and 
12dd0 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52 45  so use of the RE
12de0 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77 69  GEXP operator wi
12df0 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75  ll normally resu
12e00 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d  lt in an.error m
12e10 65 73 73 61 67 65 2e 20 20 5e 49 66 20 61 6e 20  essage.  ^If an 
12e20 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66  [application-def
12e30 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f  ined SQL functio
12e40 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67 65 78 70  n] named "regexp
12e50 22 0a 69 73 20 61 64 64 65 64 20 61 74 20 72 75  ".is added at ru
12e60 6e 2d 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65  n-time, then the
12e70 20 22 3c 69 3e 58 3c 2f 69 3e 20 52 45 47 45 58   "<i>X</i> REGEX
12e80 50 20 3c 69 3e 59 3c 2f 69 3e 22 20 6f 70 65 72  P <i>Y</i>" oper
12e90 61 74 6f 72 20 77 69 6c 6c 0a 62 65 20 69 6d 70  ator will.be imp
12ea0 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 61  lemented as a ca
12eb0 6c 6c 20 74 6f 20 22 72 65 67 65 78 70 28 3c 69  ll to "regexp(<i
12ec0 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29  >Y</i>,<i>X</i>)
12ed0 22 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ".</p>..<tcl>hd_
12ee0 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d  fragment match M
12ef0 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  ATCH</tcl>.<p>^T
12f00 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f  he MATCH operato
12f10 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73  r is a special s
12f20 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d 61  yntax for the ma
12f30 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69 6f  tch().applicatio
12f40 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
12f50 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c  on.  ^The defaul
12f60 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69  t match() functi
12f70 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
12f80 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63 65  n.raises an exce
12f90 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74  ption and is not
12fa0 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66   really useful f
12fb0 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42 75  or anything..^Bu
12fc0 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e  t extensions can
12fd0 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d 61   override the ma
12fe0 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  tch() function w
12ff0 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c  ith more.helpful
13000 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63   logic.</p>..<tc
13010 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 65  l>hd_fragment be
13020 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f 74  tween BETWEEN</t
13030 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54 57  cl>.<h3>The BETW
13040 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33  EEN operator</h3
13050 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57 45  >.<p>^(The BETWE
13060 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 6c  EN operator is l
13070 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c  ogically equival
13080 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f 66  ent to a pair of
13090 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c   comparisons.."<
130a0 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45  i>x</i> <b>BETWE
130b0 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20  EN</b> <i>y</i> 
130c0 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c  <b>AND</b> <i>z<
130d0 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61 6c  /i>" is .equival
130e0 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69  ent to ."<i>x</i
130f0 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e  ><b>&gt;=</b><i>
13100 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e  y</i> <b>AND</b>
13110 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b   <i>x</i><b>&lt;
13120 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65  =</b><i>z</i>" e
13130 78 63 65 70 74 0a 74 68 61 74 20 77 69 74 68 20  xcept.that with 
13140 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69 3e  BETWEEN, the <i>
13150 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e  x</i> expression
13160 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61 74   is only evaluat
13170 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65 20  ed once.)^.^The 
13180 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74 68  precedence of th
13190 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
131a0 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  or is the same a
131b0 73 20 74 68 65 20 70 72 65 63 65 64 65 6e 63 65  s the precedence
131c0 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c 62  .as operators <b
131d0 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 21  >==</b> and <b>!
131e0 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b  =</b> and <b>LIK
131f0 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70 73  E</b> and groups
13200 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 0a   left to right..
13210 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
13220 74 20 63 61 73 65 20 7b 43 41 53 45 20 65 78 70  t case {CASE exp
13230 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c  ression}</tcl>.<
13240 68 33 3e 54 68 65 20 43 41 53 45 20 65 78 70 72  h3>The CASE expr
13250 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41  ession</h3>.<p>A
13260 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
13270 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20 73   serves a role s
13280 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48 45  imilar to IF-THE
13290 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72 0a  N-ELSE in other.
132a0 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67  programming lang
132b0 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68 65  uages.  ..<p>The
132c0 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65 73   optional expres
132d0 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73  sion that occurs
132e0 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20   in between the 
132f0 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e 64  CASE keyword and
13300 20 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e 20   the.first WHEN 
13310 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c 65  keyword is calle
13320 64 20 74 68 65 20 22 62 61 73 65 22 20 65 78 70  d the "base" exp
13330 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65 20  ression. ^There 
13340 61 72 65 20 74 77 6f 20 62 61 73 69 63 20 66 6f  are two basic fo
13350 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45 20  rms.of the CASE 
13360 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f 73  expression: thos
13370 65 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78  e with a base ex
13380 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 6f  pression and tho
13390 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e  se without...<p>
133a0 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 6f  ^In a CASE witho
133b0 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65 73  ut a base expres
133c0 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e 20  sion, each WHEN 
133d0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
133e0 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65 20  aluated.and the 
133f0 72 65 73 75 6c 74 20 74 72 65 61 74 65 64 20 61  result treated a
13400 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61  s a boolean, sta
13410 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20 6c  rting with the l
13420 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e 74  eftmost and cont
13430 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72 69  inuing.to the ri
13440 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74  ght. ^The result
13450 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
13460 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 65  ression is the e
13470 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65  valuation of the
13480 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   THEN.expression
13490 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
134a0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57  s to the first W
134b0 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74  HEN expression t
134c0 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f  hat evaluates to
134d0 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e  .true. ^Or, if n
134e0 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
134f0 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
13500 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74 68  uate to true, th
13510 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61 6c  e result of.eval
13520 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20  uating the ELSE 
13530 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61  expression, if a
13540 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73  ny. ^If there is
13550 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73   no ELSE express
13560 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20  ion and.none of 
13570 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73  the WHEN express
13580 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20 74  ions are true, t
13590 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c 20  hen the overall 
135a0 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
135b0 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73 75  .<p>^A NULL resu
135c0 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  lt is considered
135d0 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76 61   untrue when eva
135e0 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65 72  luating WHEN ter
135f0 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41  ms...<p>^In a CA
13600 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20 65  SE with a base e
13610 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 62  xpression, the b
13620 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ase expression i
13630 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73 74  s evaluated just
13640 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72 65  .once and the re
13650 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65 64  sult is compared
13660 20 61 67 61 69 6e 73 74 20 74 68 65 20 65 76 61   against the eva
13670 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68 20  luation of each 
13680 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f 6e  WHEN .expression
13690 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
136a0 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74  ght. ^The result
136b0 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
136c0 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 0a  ression is the .
136d0 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68  evaluation of th
136e0 65 20 54 48 45 4e 20 65 78 70 72 65 73 73 69 6f  e THEN expressio
136f0 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  n that correspon
13700 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ds to the first 
13710 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20  WHEN.expression 
13720 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63 6f  for which the co
13730 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
13740 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f  . ^Or, if none o
13750 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72 65  f the WHEN.expre
13760 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
13770 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61 6c  to a value equal
13780 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70   to the base exp
13790 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65 73  ression, the res
137a0 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult.of evaluatin
137b0 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65  g the ELSE expre
137c0 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e  ssion, if any. ^
137d0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45  If there is no E
137e0 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61  LSE expression a
137f0 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57  nd.none of the W
13800 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  HEN expressions 
13810 70 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c 74  produce a result
13820 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61   equal to the ba
13830 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a 74  se expression,.t
13840 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c  he overall resul
13850 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e  t is NULL...<p>^
13860 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 61  When comparing a
13870 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
13880 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e 20   against a WHEN 
13890 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
138a0 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  same.collating s
138b0 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69 74  equence, affinit
138c0 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64  y, and NULL-hand
138d0 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c 79  ling rules apply
138e0 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65 20   as if the.base 
138f0 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 57  expression and W
13900 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  HEN expression a
13910 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  re respectively 
13920 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72 69  the left- and.ri
13930 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
13940 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62 3e  s of an <big><b>
13950 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65 72  =</b></big> oper
13960 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74 68  ator.</p> ^If th
13970 65 20 62 61 73 65 20 0a 65 78 70 72 65 73 73 69  e base .expressi
13980 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  on is NULL then 
13990 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
139a0 65 20 43 41 53 45 20 69 73 20 61 6c 77 61 79 73  e CASE is always
139b0 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66 20   the result .of 
139c0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45  evaluating the E
139d0 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  LSE expression i
139e0 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72 20  f it exists, or 
139f0 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73 20  NULL if it does 
13a00 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66  not...<p>^Both f
13a10 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53 45  orms of the CASE
13a20 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 20   expression use 
13a30 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d 63  lazy, or short-c
13a40 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61 74  ircuit, .evaluat
13a50 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f  ion...<p>^(The o
13a60 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62  nly difference b
13a70 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c 6f  etween the follo
13a80 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65 78  wing two CASE ex
13a90 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 61  pressions is tha
13aa0 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20  t .the <i>x</i> 
13ab0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
13ac0 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79 20  aluated exactly 
13ad0 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72 73  once in the firs
13ae0 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a 6d  t example but .m
13af0 69 67 68 74 20 62 65 20 65 76 61 6c 75 61 74 65  ight be evaluate
13b00 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
13b10 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a 0a   in the second:.
13b20 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43  .<ul><pre>.<li>C
13b30 41 53 45 20 78 20 57 48 45 4e 20 77 31 20 54 48  ASE x WHEN w1 TH
13b40 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54 48  EN r1 WHEN w2 TH
13b50 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e  EN r2 ELSE r3 EN
13b60 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e 20  D.<li>CASE WHEN 
13b70 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48 45  x=w1 THEN r1 WHE
13b80 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20 45  N x=w2 THEN r2 E
13b90 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72 65  LSE r3 END.</pre
13ba0 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e  ></ul>)^...<tcl>
13bb0 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f  hd_fragment in_o
13bc0 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d 20  p {IN operator} 
13bd0 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72  {NOT IN operator
13be0 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
13bf0 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70  IN and NOT IN op
13c00 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e  erators</h3>.<p>
13c10 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20  ^The IN and NOT 
13c20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61 6b  IN operators tak
13c30 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c 61  e a single scala
13c40 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  r operand on the
13c50 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63 74  .left and a vect
13c60 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68  or operand on th
13c70 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20 62  e right.formed b
13c80 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c 69  y an explicit li
13c90 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f  st of zero or mo
13ca0 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62 79  re scalars or by
13cb0 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71 75   a .single subqu
13cc0 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72  ery..^When the r
13cd0 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20  ight operand of 
13ce0 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
13cf0 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75  operator is a su
13d00 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71  bquery, the.subq
13d10 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 61  uery must have a
13d20 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20 63   single result c
13d30 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68 65  olumn..^When the
13d40 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 69   right operand i
13d50 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c 20  s an empty set, 
13d60 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  the result of IN
13d70 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74 68   is false and th
13d80 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20  e.result of NOT 
13d90 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67 61  IN is true, rega
13da0 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c 65  rdless of the le
13db0 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20 65  ft operand and e
13dc0 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74 20  ven if the.left 
13dd0 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
13de0 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .^(The result of
13df0 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
13e00 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65 74   operator is det
13e10 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 66  ermined by the f
13e20 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78 3a  ollowing.matrix:
13e30 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c  ..<center>.<tabl
13e40 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  e border=1>.<tr>
13e50 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e  .<th>Left operan
13e60 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74  d <br>is NULL.<t
13e70 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20  h>Right operand 
13e80 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55 4c  <br>contains NUL
13e90 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72  L.<th>Right oper
13ea0 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65 6d  and <br>is an em
13eb0 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66 74  pty set.<th>Left
13ec0 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20 3c   operand found <
13ed0 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74 20  br>within right 
13ee0 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73 75  operand.<th>Resu
13ef0 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70 65  lt of <br>IN ope
13f00 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c 74  rator.<th>Result
13f10 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f   of <br>NOT IN o
13f20 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64  perator.<tr>.<td
13f30 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13f40 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
13f50 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
13f60 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
13f70 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13f80 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13f90 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
13fa0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13fb0 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61  >true.<tr>.<td a
13fc0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f  lign="center">do
13fd0 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74  es not matter.<t
13fe0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13ff0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
14000 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61  enter">yes.<td a
14010 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
14020 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
14030 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c  er">false.<td al
14040 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75  ign="center">tru
14050 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  e.<tr>.<td align
14060 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
14070 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
14080 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
14090 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
140a0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
140b0 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
140c0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
140d0 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  true.<td align="
140e0 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
140f0 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
14100 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
14110 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
14120 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
14130 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
14140 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
14150 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
14160 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ULL.<td align="c
14170 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e  enter">NULL.<tr>
14180 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
14190 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67  er">yes.<td alig
141a0 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
141b0 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
141c0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
141d0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
141e0 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
141f0 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
14200 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20  enter">NULL.<td 
14210 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
14220 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  ULL.</table>.</c
14230 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f  enter>)^..<p>^No
14240 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 61  te that SQLite a
14250 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e 74  llows the parent
14260 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
14270 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f 6e  scalar values on
14280 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20  .the right-hand 
14290 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72  side of an IN or
142a0 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
142b0 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79 20   to be an empty 
142c0 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f 74  list but.most ot
142d0 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
142e0 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
142f0 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32 20  s and the SQL92 
14300 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65  standard require
14310 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f 6e  .the list to con
14320 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e  tain at least on
14330 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  e element.</p>..
14340 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
14350 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f   in_op {EXISTS o
14360 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58  perator} {NOT EX
14370 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f  ISTS operator}</
14380 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49  tcl>.<h3>The EXI
14390 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33  STS operator</h3
143a0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53 54  >..<p>^The EXIST
143b0 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61 79  S operator alway
143c0 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6f  s evaluates to o
143d0 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ne of the intege
143e0 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64 20  r values 0 .and 
143f0 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67  1. ^If executing
14400 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
14410 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64 20  ement specified 
14420 61 73 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  as the right-han
14430 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74 68  d .operand of th
14440 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
14450 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f  r would return o
14460 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c  ne or more rows,
14470 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54 53   then the.EXISTS
14480 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
14490 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65 78  tes to 1. ^If ex
144a0 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45  ecuting the SELE
144b0 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a  CT would return.
144c0 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20  no rows at all, 
144d0 74 68 65 6e 20 74 68 65 20 45 58 49 53 54 53 20  then the EXISTS 
144e0 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
144f0 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54  es to 0. ..<p>^T
14500 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
14510 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f 77  umns in each row
14520 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
14530 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
14540 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20 74  t.(if any) and t
14550 68 65 20 73 70 65 63 69 66 69 63 20 76 61 6c 75  he specific valu
14560 65 73 20 72 65 74 75 72 6e 65 64 20 68 61 76 65  es returned have
14570 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68   no effect on th
14580 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68 65  e results.of the
14590 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
145a0 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61 72  . ^In particular
145b0 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e  , rows containin
145c0 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  g NULL values ar
145d0 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e  e.not handled an
145e0 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66 72  y differently fr
145f0 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20  om rows without 
14600 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 68  NULL values...<h
14610 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65 72  3>Scalar Subquer
14620 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20  ies</h3>..<p>^A 
14630 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
14640 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70  nt enclosed in p
14650 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 61  arentheses may a
14660 70 70 65 61 72 20 61 73 20 61 20 73 63 61 6c 61  ppear as a scala
14670 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20 5b  r.quantity. ^A [
14680 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73 20  SELECT] used as 
14690 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74  a scalar quantit
146a0 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61 20  y must return a 
146b0 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68 20  result set.with 
146c0 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
146d0 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
146e0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
146f0 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
14700 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 69  he.only column i
14710 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 20  n the first row 
14720 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
14730 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
14740 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54  . ^If the SELECT
14750 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74 68   .yields more th
14760 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f  an one result ro
14770 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74 65  w, all rows afte
14780 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65 20  r the first are 
14790 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68 65  ignored. ^If.the
147a0 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20 6e   SELECT yields n
147b0 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65  o rows, then the
147c0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65 78   value of the ex
147d0 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c  pression is NULL
147e0 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f 66  ..^(The LIMIT of
147f0 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65   a scalar subque
14800 72 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e 0a  ry is always 1..
14810 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54 20  Any other LIMIT 
14820 76 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20 74  value given in t
14830 68 65 20 53 51 4c 20 74 65 78 74 20 69 73 20 69  he SQL text is i
14840 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41  gnored.)^..<p>^A
14850 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45 4c  ll types of [SEL
14860 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20  ECT] statement, 
14870 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65 67  including aggreg
14880 61 74 65 20 61 6e 64 20 5b 63 6f 6d 70 6f 75 6e  ate and [compoun
14890 64 20 53 45 4c 45 43 54 5d 0a 71 75 65 72 69 65  d SELECT].querie
148a0 73 20 28 71 75 65 72 69 65 73 20 77 69 74 68 20  s (queries with 
148b0 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e  keywords like UN
148c0 49 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61  ION or EXCEPT) a
148d0 72 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63  re allowed as sc
148e0 61 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73 2e  alar.subqueries.
148f0 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75  ..<h3>Table Colu
14900 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c  mn Names</h3>..<
14910 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  p>^A column name
14920 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74   can be any of t
14930 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64  he names defined
14940 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20   in the [CREATE 
14950 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74  TABLE].statement
14960 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   or one of the f
14970 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c  ollowing special
14980 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c   identifiers: "<
14990 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c  b>ROWID</b>",."<
149a0 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22  b>OID</b>", or "
149b0 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e  <b>_ROWID_</b>".
149c0 0a 5e 54 68 65 73 65 20 73 70 65 63 69 61 6c 20  .^These special 
149d0 69 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20  identifiers all 
149e0 64 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69  describe the.uni
149f0 71 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  que integer key 
14a00 28 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73  (the [rowid]) as
14a10 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76  sociated with ev
14a20 65 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72  ery .row of ever
14a30 79 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70  y table..^The sp
14a40 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72  ecial identifier
14a50 73 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20  s only refer to 
14a60 74 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74  the row key if t
14a70 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he [CREATE TABLE
14a80 5d 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  ].statement does
14a90 20 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65   not define a re
14aa0 61 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74  al column with t
14ab0 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54  he same name..^T
14ac0 68 65 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20  he rowid can be 
14ad0 75 73 65 64 20 61 6e 79 77 68 65 72 65 20 61 20  used anywhere a 
14ae0 72 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63  regular.column c
14af0 61 6e 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a  an be used.</p>.
14b00 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20  .<p>^A [SELECT] 
14b10 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 61  statement used a
14b20 73 20 65 69 74 68 65 72 20 61 20 73 63 61 6c 61  s either a scala
14b30 72 20 73 75 62 71 75 65 72 79 20 6f 72 20 61 73  r subquery or as
14b40 20 74 68 65 20 0a 72 69 67 68 74 2d 68 61 6e 64   the .right-hand
14b50 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49   operand of an I
14b60 4e 2c 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49  N, NOT IN or EXI
14b70 53 54 53 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  STS expression m
14b80 61 79 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65  ay contain .refe
14b90 72 65 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e  rences to column
14ba0 73 20 69 6e 20 74 68 65 20 6f 75 74 65 72 20 71  s in the outer q
14bb0 75 65 72 79 2e 20 53 75 63 68 20 61 20 73 75 62  uery. Such a sub
14bc0 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
14bd0 73 0a 61 20 63 6f 72 72 65 6c 61 74 65 64 20 73  s.a correlated s
14be0 75 62 71 75 65 72 79 2e 20 5e 41 20 63 6f 72 72  ubquery. ^A corr
14bf0 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
14c00 69 73 20 72 65 65 76 61 6c 75 61 74 65 64 20 65  is reevaluated e
14c10 61 63 68 20 74 69 6d 65 0a 69 74 73 20 72 65 73  ach time.its res
14c20 75 6c 74 20 69 73 20 72 65 71 75 69 72 65 64 2e  ult is required.
14c30 20 5e 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65   ^An uncorrelate
14c40 64 20 73 75 62 71 75 65 72 79 20 69 73 20 65 76  d subquery is ev
14c50 61 6c 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63  aluated only onc
14c60 65 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  e.and the result
14c70 20 72 65 75 73 65 64 20 61 73 20 6e 65 63 65 73   reused as neces
14c80 73 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  sary...<tcl>hd_f
14c90 72 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72  ragment castexpr
14ca0 20 7b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f   {CAST expressio
14cb0 6e 7d 20 7b 43 41 53 54 7d 20 7b 63 61 73 74 7d  n} {CAST} {cast}
14cc0 20 7b 43 41 53 54 20 6f 70 65 72 61 74 6f 72 7d   {CAST operator}
14cd0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20  </tcl>.<h3>CAST 
14ce0 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  expressions</h3>
14cf0 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70 72  ..<p>A CAST expr
14d00 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
14d10 72 6d 20 22 43 41 53 54 28 26 6c 74 3b 65 78 70  rm "CAST(&lt;exp
14d20 72 26 67 74 3b 20 41 53 20 26 6c 74 3b 74 79 70  r&gt; AS &lt;typ
14d30 65 2d 6e 61 6d 65 26 67 74 3b 29 22 0a 69 73 20  e-name&gt;)".is 
14d40 75 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 20  used to convert 
14d50 74 68 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74  the value of &lt
14d60 3b 65 78 70 72 26 67 74 3b 20 74 6f 20 0a 61 20  ;expr&gt; to .a 
14d70 64 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72 61  different [stora
14d80 67 65 20 63 6c 61 73 73 5d 20 73 70 65 63 69 66  ge class] specif
14d90 69 65 64 20 62 79 20 26 6c 74 3b 74 79 70 65 2d  ied by &lt;type-
14da0 6e 61 6d 65 26 67 74 3b 2e 0a 5e 41 20 43 41 53  name&gt;..^A CAS
14db0 54 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  T conversion is 
14dc0 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 63  similar to the c
14dd0 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74  onversion that t
14de0 61 6b 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20  akes.place when 
14df0 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  a [column affini
14e00 74 79 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74  ty] is applied t
14e10 6f 20 61 20 76 61 6c 75 65 20 65 78 63 65 70 74  o a value except
14e20 20 74 68 61 74 20 77 69 74 68 0a 74 68 65 20 43   that with.the C
14e30 41 53 54 20 6f 70 65 72 61 74 6f 72 20 74 68 65  AST operator the
14e40 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61   conversion alwa
14e50 79 73 20 74 61 6b 65 73 20 70 6c 61 63 65 20 65  ys takes place e
14e60 76 65 6e 20 69 66 20 74 68 65 20 63 6f 6e 76 65  ven if the conve
14e70 72 73 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20  rsion.lossy and 
14e80 69 72 72 65 76 65 72 73 69 62 6c 65 2c 20 77 68  irreversible, wh
14e90 65 72 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66  ereas column aff
14ea0 69 6e 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67  inity only chang
14eb0 65 73 20 74 68 65 20 64 61 74 61 20 74 79 70 65  es the data type
14ec0 0a 6f 66 20 61 20 76 61 6c 75 65 20 69 66 20 74  .of a value if t
14ed0 68 65 20 63 68 61 6e 67 65 20 69 73 20 6c 6f 73  he change is los
14ee0 73 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72 73  sless and revers
14ef0 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ible...<p>^If th
14f00 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65  e value of &lt;e
14f10 78 70 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c  xpr&gt; is NULL,
14f20 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
14f30 20 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70   of the CAST.exp
14f40 72 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20  ression is also 
14f50 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65  NULL. ^Otherwise
14f60 2c 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  , the storage cl
14f70 61 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ass of the resul
14f80 74 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  t.is determined 
14f90 62 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20  by applying the 
14fa0 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65 72  [rules for deter
14fb0 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66  mining column af
14fc0 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20 26  finity] to.the &
14fd0 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b  lt;type-name&gt;
14fe0 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  ...<table border
14ff0 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20  =1>.<tr>.  <th> 
15000 41 66 66 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b  Affinity of &lt;
15010 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20  type-name&gt;.  
15020 3c 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20  <th> Conversion 
15030 50 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a  Processing.<tr>.
15040 20 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c    <td> NONE .  <
15050 74 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76  td> ^Casting a v
15060 61 6c 75 65 20 74 6f 20 61 20 26 6c 74 3b 74 79  alue to a &lt;ty
15070 70 65 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74 68  pe-name&gt; with
15080 20 6e 6f 20 61 66 66 69 6e 69 74 79 20 63 61 75   no affinity cau
15090 73 65 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f  ses the value to
150a0 0a 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  .  be converted 
150b0 69 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43  into a BLOB.  ^C
150c0 61 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42  asting to a BLOB
150d0 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72   consists of fir
150e0 73 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65  st casting.  the
150f0 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69   value to TEXT i
15100 6e 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d  n the [encoding]
15110 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
15120 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65   connection, the
15130 6e 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67  n.  interpreting
15140 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62   the resulting b
15150 79 74 65 20 73 65 71 75 65 6e 63 65 20 61 73 20  yte sequence as 
15160 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f  a BLOB instead o
15170 66 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e  f as TEXT...<tr>
15180 0a 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c  .  <td> TEXT.  <
15190 74 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42  td> ^To cast a B
151a0 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58  LOB value to TEX
151b0 54 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  T, the sequence 
151c0 6f 66 20 62 79 74 65 73 20 74 68 61 74 20 6d 61  of bytes that ma
151d0 6b 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42  ke up the.  BLOB
151e0 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20   is interpreted 
151f0 61 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20  as text encoded 
15200 75 73 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  using the databa
15210 73 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c  se encoding..  <
15220 70 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61  p>.   ^Casting a
15230 6e 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41  n INTEGER or REA
15240 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58  L value into TEX
15250 54 20 72 65 6e 64 65 72 73 20 74 68 65 20 76 61  T renders the va
15260 6c 75 65 20 61 73 20 69 66 20 76 69 61 20 0a 20  lue as if via . 
15270 20 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72     [sqlite3_snpr
15280 69 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20 74  intf()] except t
15290 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e  hat the resultin
152a0 67 20 54 45 58 54 20 75 73 65 73 20 74 68 65 20  g TEXT uses the 
152b0 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20  [encoding] of.  
152c0 20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63    the database c
152d0 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e  onnection...<tr>
152e0 0a 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c  .  <td> REAL.  <
152f0 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e  td> ^When castin
15300 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74  g a BLOB value t
15310 6f 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61  o a REAL, the va
15320 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e  lue is first con
15330 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20  verted to.      
15340 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c    TEXT..       <
15350 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  p>^When casting 
15360 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20  a TEXT value to 
15370 52 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73  REAL, the longes
15380 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69  t possible prefi
15390 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65  x of.        the
153a0 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
153b0 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
153c0 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20  s a real number 
153d0 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f  is extracted fro
153e0 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45  m.        the TE
153f0 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  XT value and the
15400 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72   remainder ignor
15410 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67  ed. ^Any leading
15420 20 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20   spaces in the. 
15430 20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75         TEXT valu
15440 65 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68  e are ignored wh
15450 65 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72  en converging fr
15460 6f 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e  om TEXT to REAL.
15470 20 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a 20   ^(If there is. 
15480 20 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78         no prefix
15490 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
154a0 65 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65  erpreted as a re
154b0 61 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72  al number, the r
154c0 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20  esult of the.   
154d0 20 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20       conversion 
154e0 69 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a  is 0.0.)^..<tr>.
154f0 20 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20    <td> INTEGER. 
15500 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74   <td> ^When cast
15510 69 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65  ing a BLOB value
15520 20 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65   to INTEGER, the
15530 20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20   value is first 
15540 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20  converted to.   
15550 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20       TEXT..     
15560 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69    <p>^When casti
15570 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20  ng a TEXT value 
15580 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20  to INTEGER, the 
15590 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65  longest possible
155a0 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20   prefix of.     
155b0 20 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61     the value tha
155c0 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72  t can be interpr
155d0 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
155e0 65 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74  er number is ext
155f0 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20  racted from.    
15600 20 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c      the TEXT val
15610 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ue and the remai
15620 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41  nder ignored. ^A
15630 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65  ny leading space
15640 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
15650 20 54 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e   TEXT value when
15660 20 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d   converting from
15670 20 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52   TEXT to INTEGER
15680 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49   are ignored. ^I
15690 66 20 74 68 65 72 65 0a 20 20 20 20 20 20 20 20  f there.        
156a0 69 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61  is no prefix tha
156b0 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72  t can be interpr
156c0 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
156d0 65 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72  er number, the r
156e0 65 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66  esult.        of
156f0 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
15700 69 73 20 30 2e 0a 0a 20 20 20 20 20 20 3c 70 3e  is 0...      <p>
15710 5e 41 20 63 61 73 74 20 6f 66 20 61 20 52 45 41  ^A cast of a REA
15720 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20  L value into an 
15730 49 4e 54 45 47 45 52 20 72 65 73 75 6c 74 73 20  INTEGER results 
15740 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20  in the integer. 
15750 20 20 20 20 20 62 65 74 77 65 65 6e 20 74 68 65       between the
15760 20 52 45 41 4c 20 76 61 6c 75 65 20 61 6e 64 20   REAL value and 
15770 7a 65 72 6f 20 74 68 61 74 20 69 73 20 63 6c 6f  zero that is clo
15780 73 65 73 74 20 74 6f 20 74 68 65 20 52 45 41 4c  sest to the REAL
15790 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49   value..      ^I
157a0 66 20 61 20 52 45 41 4c 20 69 73 20 67 72 65 61  f a REAL is grea
157b0 74 65 72 20 74 68 61 6e 20 74 68 65 20 67 72 65  ter than the gre
157c0 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65 20 73  atest possible s
157d0 69 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65  igned.      inte
157e0 67 65 72 20 28 2b 39 32 32 33 33 37 32 30 33 36  ger (+9223372036
157f0 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
15800 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
15810 65 20 67 72 65 61 74 65 73 74 20 70 6f 73 73 69  e greatest possi
15820 62 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64  ble.      signed
15830 20 69 6e 74 65 67 65 72 20 61 6e 64 20 69 66 20   integer and if 
15840 74 68 65 20 52 45 41 4c 20 69 73 20 6c 65 73 73  the REAL is less
15850 20 74 68 61 6e 20 74 68 65 20 6c 65 61 73 74 20   than the least 
15860 70 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a  possible signed.
15870 20 20 20 20 20 20 69 6e 74 65 67 65 72 20 28 2d        integer (-
15880 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
15890 38 30 38 29 20 74 68 65 6e 20 74 68 65 20 72 65  808) then the re
158a0 73 75 6c 74 20 69 73 20 74 68 65 20 6c 65 61 73  sult is the leas
158b0 74 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20  t possible.     
158c0 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e   signed integer.
158d0 0a 0a 20 20 20 20 20 20 3c 70 3e 50 72 69 6f 72  ..      <p>Prior
158e0 20 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73 69   to SQLite versi
158f0 6f 6e 20 33 2e 38 2e 32 2c 20 63 61 73 74 69 6e  on 3.8.2, castin
15900 67 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20 67  g a REAL value g
15910 72 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20 20  reater than.    
15920 20 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34    +9223372036854
15930 37 37 35 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e  775807.0 into an
15940 20 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74 65   integer resulte
15950 64 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65  d in the most ne
15960 67 61 74 69 76 65 0a 20 20 20 20 20 20 69 6e 74  gative.      int
15970 65 67 65 72 2c 20 2d 39 32 32 33 33 37 32 30 33  eger, -922337203
15980 36 38 35 34 37 37 35 38 30 38 2e 20 20 54 68 69  6854775808.  Thi
15990 73 20 62 65 68 61 76 69 6f 72 20 77 61 73 20 6d  s behavior was m
159a0 65 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65 20  eant to emulate 
159b0 74 68 65 0a 20 20 20 20 20 20 62 65 68 61 76 69  the.      behavi
159c0 6f 72 20 6f 66 20 78 38 36 2f 78 36 34 20 68 61  or of x86/x64 ha
159d0 72 64 77 61 72 65 20 77 68 65 6e 20 64 6f 69 6e  rdware when doin
159e0 67 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74  g the equivalent
159f0 20 63 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c   cast...<tr>.  <
15a00 74 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74  td> NUMERIC.  <t
15a10 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45  d> ^Casting a TE
15a20 58 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65  XT or BLOB value
15a30 20 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69   into NUMERIC fi
15a40 72 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65  rst does a force
15a50 64 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20  d.   conversion 
15a60 69 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68  into REAL but th
15a70 65 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65  en further conve
15a80 72 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69  rts the result i
15a90 6e 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20  nto INTEGER if. 
15aa0 20 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68    and only if th
15ab0 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f  e conversion fro
15ac0 6d 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45  m REAL to INTEGE
15ad0 52 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e  R is lossless an
15ae0 64 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20  d reversible..  
15af0 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
15b00 79 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c  y context in SQL
15b10 69 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55  ite where the NU
15b20 4d 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45  MERIC and INTEGE
15b30 52 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20  R [affinities]. 
15b40 20 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65    behave differe
15b50 6e 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61  ntly..   <p> ^Ca
15b60 73 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20  sting a REAL or 
15b70 49 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f  INTEGER value to
15b80 20 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f   NUMERIC is a no
15b90 2d 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72  -op, even if a r
15ba0 65 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75  eal.   value cou
15bb0 6c 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ld be losslessly
15bc0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
15bd0 20 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e   integer...</tr>
15be0 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e  ..</table>..<p>^
15bf0 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65  Note that the re
15c00 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e  sult from castin
15c10 67 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76  g any non-BLOB v
15c20 61 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f  alue into a .BLO
15c30 42 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  B and the result
15c40 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e   from casting an
15c50 79 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74  y BLOB value int
15c60 6f 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c  o a non-BLOB val
15c70 75 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72  ue.may be differ
15c80 65 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ent depending on
15c90 20 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74   whether the dat
15ca0 61 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d  abase [encoding]
15cb0 20 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31   is UTF-8,.UTF-1
15cc0 36 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65  6be, or UTF-16le
15cd0 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  ....<tcl>hd_frag
15ce0 6d 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72  ment booleanexpr
15cf0 20 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   {boolean expres
15d00 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  sion}</tcl>.<h3>
15d10 42 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69  Boolean Expressi
15d20 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ons</h3>..<p>The
15d30 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65   SQL language fe
15d40 61 74 75 72 65 73 20 73 65 76 65 72 61 6c 20 63  atures several c
15d50 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20 61 6e  ontexts where an
15d60 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a   expression is .
15d70 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68  evaluated and th
15d80 65 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74  e result convert
15d90 65 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20  ed to a boolean 
15da0 28 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20  (true or false) 
15db0 76 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e  value. These.con
15dc0 74 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75  texts are:..  <u
15dd0 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20  l>.    <li> the 
15de0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
15df0 61 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45  a SELECT, UPDATE
15e00 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65   or DELETE state
15e10 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
15e20 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63  he ON or USING c
15e30 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
15e40 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
15e50 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20  ement,.    <li> 
15e60 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  the HAVING claus
15e70 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
15e80 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69  atement,.    <li
15e90 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73  > the WHEN claus
15ea0 65 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67  e of an SQL trig
15eb0 67 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69  ger, and.    <li
15ec0 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73  > the WHEN claus
15ed0 65 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20  e or clauses of 
15ee0 73 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65 73  some CASE expres
15ef0 73 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a  sions..  </ul>..
15f00 3c 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20  <p>^(To convert 
15f10 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  the results of a
15f20 6e 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e  n SQL expression
15f30 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   to a boolean va
15f40 6c 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73  lue, SQLite.firs
15f50 74 20 63 61 73 74 73 20 74 68 65 20 72 65 73 75  t casts the resu
15f60 6c 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20  lt to a NUMERIC 
15f70 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d  value in the sam
15f80 65 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53  e way as a .[CAS
15f90 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41  T expression]. A
15fa0 20 4e 55 4c 4c 20 6f 72 20 7a 65 72 6f 20 76 61   NULL or zero va
15fb0 6c 75 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c  lue (integer val
15fc0 75 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c  ue 0 or real val
15fd0 75 65 20 30 2e 30 29 20 69 73 0a 63 6f 6e 73 69  ue 0.0) is.consi
15fe0 64 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73  dered to be fals
15ff0 65 2e 20 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c  e. All other val
16000 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
16010 65 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e  ed true.)^..<p>^
16020 28 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68  (For example, th
16030 65 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30  e values NULL, 0
16040 2e 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27  .0, 0, 'english'
16050 20 61 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c   and '0' are all
16060 20 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62   considered.to b
16070 65 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c  e false.)^ ^(Val
16080 75 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c  ues 1, 1.0, 0.1,
16090 20 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c   -0.1 and '1engl
160a0 69 73 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65  ish' are conside
160b0 72 65 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e  red to .be true.
160c0 29 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e  )^..<h3>Function
160d0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20  s</h3>.<p>^Both 
160e0 5b 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65  [corefunc|simple
160f0 5d 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61  ] and [aggfunc|a
16100 67 67 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69  ggregate] functi
16110 6f 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  ons are supporte
16120 64 2e 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61  d..(For presenta
16130 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73  tion purposes, s
16140 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  imple functions 
16150 61 72 65 20 66 75 72 74 68 65 72 20 73 75 62 64  are further subd
16160 69 76 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72  ivided into.[cor
16170 65 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e  efunc | core fun
16180 63 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74  ctions] and [dat
16190 65 66 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d  efunc | date-tim
161a0 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e  e functions].).^
161b0 41 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  A simple functio
161c0 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
161d0 20 61 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e   any expression.
161e0 20 20 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69    ^Simple functi
161f0 6f 6e 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73  ons return.a res
16200 75 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ult immediately 
16210 62 61 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69  based on their i
16220 6e 70 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61  nputs.  ^Aggrega
16230 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79  te functions.may
16240 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e   only be used in
16250 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
16260 65 6e 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65  ent.  ^Aggregate
16270 20 66 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75   functions compu
16280 74 65 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20  te.their result 
16290 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20  across all rows 
162a0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  of the result se
162b0 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  t.</p>..<tcl>.##
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 23 23 23 23 23 23 23 23 23  ################
162e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
162f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16300 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
16310 74 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74  tion {Core Funct
16320 69 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b  ions} corefunc {
16330 2a 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20  *corefunc}.proc 
16340 66 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20  funcdef {syntax 
16350 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b  keywords desc} {
16360 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e  .  hd_puts {<tr>
16370 7d 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  }.  regsub -all 
16380 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72  {\s+} [string tr
16390 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72  im $syntax] {<br
163a0 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65   />} syntax.  re
163b0 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e  gsub -all {\(([^
163c0 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78  *)]+)\)} $syntax
163d0 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73   {(<i>\1</i>)} s
163e0 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d  yntax.  regsub -
163f0 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20  all {,} $syntax 
16400 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61  {</i>,<i>} synta
16410 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
16420 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20  {<i>\.\.\.</i>} 
16430 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79  $syntax {...} sy
16440 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20 22  ntax.  hd_puts "
16450 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
16460 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74  \" align=\"right
16470 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c 22  \" width=\"120\"
16480 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74  >".  if {[llengt
16490 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d  h $keywords]==0}
164a0 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b   {.    regexp {[
164b0 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20  a-z_]+} $syntax 
164c0 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67  name.    hd_frag
164d0 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d  ment $name *$nam
164e0 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c  e "${name}() SQL
164f0 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65   function".  } e
16500 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72  lse {.    set fr
16510 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24  agname [lindex $
16520 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20  keywords 0].    
16530 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61  regsub -all {[^a
16540 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b  -z]} $fragname {
16550 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68  } fragname.    h
16560 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67  d_fragment $frag
16570 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64  name.    eval hd
16580 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e  _keywords [strin
16590 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24  g map {\n { }} $
165a0 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20  keywords].  }.  
165b0 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74 61 78  hd_puts "$syntax
165c0 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74 73  </td>".  hd_puts
165d0 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f   {<td valign="to
165e0 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c 76  p">}.  hd_resolv
165f0 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70 75 74  e $desc.  hd_put
16600 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d  s {</td></tr>}.}
16610 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
16620 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  core functions s
16630 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61  hown below are a
16640 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
16650 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20  ult. .[datefunc 
16660 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69 6d  | Date &amp; Tim
16670 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64  e functions] and
16680 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72  .[aggfunc | aggr
16690 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d  egate functions]
166a0 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20   are documented 
166b0 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a  separately.  An.
166c0 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20  application may 
166d0 64 65 66 69 6e 65 20 61 64 64 69 74 69 6f 6e 61  define additiona
166e0 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74  l.functions writ
166f0 74 65 6e 20 69 6e 20 43 20 61 6e 64 20 61 64 64  ten in C and add
16700 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
16710 73 65 20 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a  se engine using.
16720 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  the [sqlite3_cre
16730 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20  ate_function()] 
16740 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65  API.</p>..<table
16750 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
16760 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a  dding=10>.<tcl>.
16770 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29 7d  funcdef {abs(X)}
16780 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62 73   {} {.  ^The abs
16790 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
167a0 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75 74  urns the absolut
167b0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6e  e value of the n
167c0 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65 6e  umeric.  argumen
167d0 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72 65  t X.  ^Abs(X) re
167e0 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58 20  turns NULL if X 
167f0 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41 62  is NULL. .  ^(Ab
16800 73 28 58 29 20 72 65 74 75 72 6e 20 30 2e 30 20  s(X) return 0.0 
16810 69 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67  if X is a string
16820 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61 74 20   or blob.  that 
16830 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
16840 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72 69 63  ted to a numeric
16850 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20 58   value.)^  ^If X
16860 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74 65 67   is the .  integ
16870 65 72 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  er -922337203685
16880 34 37 37 35 38 30 38 20 74 68 65 6e 20 61 62 73  4775808 then abs
16890 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20 69 6e  (X) throws an in
168a0 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a 20  teger overflow. 
168b0 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74 68 65   error since the
168c0 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76 61 6c  re is no equival
168d0 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36 34 2d  ent positive 64-
168e0 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d 65  bit two compleme
168f0 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e  nt value..}..fun
16900 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28 29 7d  cdef {changes()}
16910 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68 61   {} {.  ^The cha
16920 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20  nges() function 
16930 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
16940 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 20 72  er of database r
16950 6f 77 73 20 74 68 61 74 20 77 65 72 65 20 63 68  ows that were ch
16960 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73 65 72  anged.  or inser
16970 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62  ted or deleted b
16980 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  y the most recen
16990 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20 49 4e  tly completed IN
169a0 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a 20 20  SERT, DELETE,.  
169b0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
169c0 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65 20 6f  ent, exclusive o
169d0 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  f statements in 
169e0 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72 69 67  lower-level trig
169f0 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63 68 61  gers..  ^The cha
16a00 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e 63 74  nges() SQL funct
16a10 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72  ion is a wrapper
16a20 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c   around the [sql
16a30 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a  ite3_changes()].
16a40 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e    C/C++ function
16a50 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f   and hence follo
16a60 77 73 20 74 68 65 20 73 61 6d 65 20 72 75 6c 65  ws the same rule
16a70 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63  s for counting c
16a80 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64  hanges..}..funcd
16a90 65 66 20 7b 63 68 61 72 28 58 31 2c 58 32 2c 2e  ef {char(X1,X2,.
16aa0 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ..,XN)} {} {.  ^
16ab0 28 54 68 65 20 63 68 61 72 28 58 31 2c 58 32 2c  (The char(X1,X2,
16ac0 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63 74 69 6f 6e  ...,XN) function
16ad0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
16ae0 67 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 63 68  g composed of ch
16af0 61 72 61 63 74 65 72 73 20 68 61 76 69 6e 67 20  aracters having 
16b00 74 68 65 0a 20 20 20 75 6e 69 63 6f 64 65 20 63  the.   unicode c
16b10 6f 64 65 20 70 6f 69 6e 74 20 76 61 6c 75 65 73  ode point values
16b20 20 6f 66 20 69 6e 74 65 67 65 72 73 20 58 31 20   of integers X1 
16b30 74 68 72 6f 75 67 68 20 58 4e 2c 20 72 65 73 70  through XN, resp
16b40 65 63 74 69 76 65 6c 79 2e 29 5e 0a 7d 0a 0a 66  ectively.)^.}..f
16b50 75 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73 63 65  uncdef {coalesce
16b60 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a  (X,Y,...)} {} {.
16b70 20 20 5e 54 68 65 20 63 6f 61 6c 65 73 63 65 28    ^The coalesce(
16b80 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
16b90 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73  ns a copy of its
16ba0 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20   first non-NULL 
16bb0 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e  argument, or.  N
16bc0 55 4c 4c 20 69 66 20 61 6c 6c 20 61 72 67 75 6d  ULL if all argum
16bd0 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20  ents are NULL.  
16be0 5e 43 6f 61 6c 65 73 63 65 28 29 20 6d 75 73 74  ^Coalesce() must
16bf0 20 68 61 76 65 20 61 74 20 6c 65 61 73 74 20 0a   have at least .
16c00 20 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d    2 arguments..}
16c10 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62 28  ..funcdef {glob(
16c20 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
16c30 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63  e glob(X,Y) func
16c40 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65  tion is equivale
16c50 6e 74 20 74 6f 20 74 68 65 0a 20 20 65 78 70 72  nt to the.  expr
16c60 65 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f  ession "<b>Y GLO
16c70 42 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65  B X</b>"..  Note
16c80 20 74 68 61 74 20 74 68 65 20 58 20 61 6e 64 20   that the X and 
16c90 59 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  Y arguments are 
16ca0 72 65 76 65 72 73 65 64 20 69 6e 20 74 68 65 20  reversed in the 
16cb0 67 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e 0a  glob() function.
16cc0 20 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68    relative to th
16cd0 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20 6f  e infix [GLOB] o
16ce0 70 65 72 61 74 6f 72 2e 0a 20 20 5e 49 66 20 74  perator..  ^If t
16cf0 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  he [sqlite3_crea
16d00 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69  te_function()] i
16d10 6e 74 65 72 66 61 63 65 20 69 73 20 75 73 65 64  nterface is used
16d20 20 74 6f 0a 20 20 6f 76 65 72 72 69 64 65 20 74   to.  override t
16d30 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e  he glob(X,Y) fun
16d40 63 74 69 6f 6e 20 77 69 74 68 20 61 6e 20 61 6c  ction with an al
16d50 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d  ternative implem
16d60 65 6e 74 61 74 69 6f 6e 20 74 68 65 6e 0a 20 20  entation then.  
16d70 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61  the [GLOB] opera
16d80 74 6f 72 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20  tor will invoke 
16d90 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76 65 20  the alternative 
16da0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a  implementation..
16db0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66 6e 75  }..funcdef {ifnu
16dc0 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  ll(X,Y)} {} {.  
16dd0 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75  ^The ifnull() fu
16de0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
16df0 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72   copy of its fir
16e00 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75  st non-NULL argu
16e10 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20  ment, or.  NULL 
16e20 69 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74  if both argument
16e30 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 49 66  s are NULL.  ^If
16e40 6e 75 6c 6c 28 29 20 6d 75 73 74 20 68 61 76 65  null() must have
16e50 20 65 78 61 63 74 6c 79 20 32 20 61 72 67 75 6d   exactly 2 argum
16e60 65 6e 74 73 2e 0a 20 20 5e 54 68 65 20 69 66 6e  ents..  ^The ifn
16e70 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  ull() function i
16e80 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  s equivalent to 
16e90 5b 63 6f 61 6c 65 73 63 65 28 29 5d 20 77 69 74  [coalesce()] wit
16ea0 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2e  h two arguments.
16eb0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 6e 73  .}..funcdef {ins
16ec0 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  tr(X,Y)} {} {.  
16ed0 5e 54 68 65 20 69 6e 73 74 72 28 58 2c 59 29 20  ^The instr(X,Y) 
16ee0 66 75 6e 63 74 69 6f 6e 20 66 69 6e 64 73 20 74  function finds t
16ef0 68 65 20 66 69 72 73 74 20 6f 63 63 75 72 72 65  he first occurre
16f00 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20  nce of string Y 
16f10 77 69 74 68 69 6e 20 0a 20 20 73 74 72 69 6e 67  within .  string
16f20 20 58 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74   X and returns t
16f30 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 72 69  he number of pri
16f40 6f 72 20 63 68 61 72 61 63 74 65 72 73 20 70 6c  or characters pl
16f50 75 73 20 31 2c 20 6f 72 20 30 20 69 66 0a 20 20  us 1, or 0 if.  
16f60 59 20 69 73 20 6e 6f 77 68 65 72 65 20 66 6f 75  Y is nowhere fou
16f70 6e 64 20 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e  nd within X..  ^
16f80 4f 72 2c 20 69 66 20 58 20 61 6e 64 20 59 20 61  Or, if X and Y a
16f90 72 65 20 62 6f 74 68 20 42 4c 4f 42 73 2c 20 74  re both BLOBs, t
16fa0 68 65 6e 20 69 6e 73 74 72 28 58 2c 59 29 20 72  hen instr(X,Y) r
16fb0 65 74 75 72 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72  eturns one.  mor
16fc0 65 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65  e than the numbe
16fd0 72 20 62 79 74 65 73 20 70 72 69 6f 72 20 74 6f  r bytes prior to
16fe0 20 74 68 65 20 66 69 72 73 74 20 6f 63 63 75 72   the first occur
16ff0 72 65 6e 63 65 20 6f 66 20 59 2c 20 6f 72 20 30  rence of Y, or 0
17000 20 69 66 0a 20 20 59 20 64 6f 65 73 20 6e 6f 74   if.  Y does not
17010 20 6f 63 63 75 72 20 61 6e 79 77 68 65 72 65 20   occur anywhere 
17020 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 49 66 20  within X..  ^If 
17030 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 58  both arguments X
17040 20 61 6e 64 20 59 20 74 6f 20 69 6e 73 74 72 28   and Y to instr(
17050 58 2c 59 29 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c  X,Y) are non-NUL
17060 4c 20 61 6e 64 20 61 72 65 20 6e 6f 74 20 42 4c  L and are not BL
17070 4f 42 73 0a 20 20 74 68 65 6e 20 62 6f 74 68 20  OBs.  then both 
17080 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
17090 61 73 20 73 74 72 69 6e 67 73 2e 0a 20 20 5e 49  as strings..  ^I
170a0 66 20 65 69 74 68 65 72 20 58 20 6f 72 20 59 20  f either X or Y 
170b0 61 72 65 20 4e 55 4c 4c 20 69 6e 20 69 6e 73 74  are NULL in inst
170c0 72 28 58 2c 59 29 20 74 68 65 6e 20 74 68 65 20  r(X,Y) then the 
170d0 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
170e0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65 78 28  }..funcdef {hex(
170f0 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
17100 68 65 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  hex() function i
17110 6e 74 65 72 70 72 65 74 73 20 69 74 73 20 61 72  nterprets its ar
17120 67 75 6d 65 6e 74 20 61 73 20 61 20 42 4c 4f 42  gument as a BLOB
17130 20 61 6e 64 20 72 65 74 75 72 6e 73 0a 20 20 61   and returns.  a
17140 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73   string which is
17150 20 74 68 65 20 75 70 70 65 72 2d 63 61 73 65 20   the upper-case 
17160 68 65 78 61 64 65 63 69 6d 61 6c 20 72 65 6e 64  hexadecimal rend
17170 65 72 69 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e  ering of the con
17180 74 65 6e 74 20 6f 66 0a 20 20 74 68 61 74 20 62  tent of.  that b
17190 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  lob..}..funcdef 
171a0 7b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  {last_insert_row
171b0 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  id()} {} {.  ^Th
171c0 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  e last_insert_ro
171d0 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  wid() function r
171e0 65 74 75 72 6e 73 20 74 68 65 20 5b 52 4f 57 49  eturns the [ROWI
171f0 44 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61 73 74  D].  of the last
17200 20 72 6f 77 20 69 6e 73 65 72 74 20 66 72 6f 6d   row insert from
17210 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
17220 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63 68 20 69  nnection which i
17230 6e 76 6f 6b 65 64 20 74 68 65 0a 20 20 66 75 6e  nvoked the.  fun
17240 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c 61  ction..  ^The la
17250 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
17260 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
17270 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
17280 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  nd the.  [sqlite
17290 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
172a0 77 69 64 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74  wid()] C/C++ int
172b0 65 72 66 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e  erface function.
172c0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e  .}..funcdef {len
172d0 67 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  gth(X)} {} {.  ^
172e0 46 6f 72 20 61 20 73 74 72 69 6e 67 20 76 61 6c  For a string val
172f0 75 65 20 58 2c 20 74 68 65 20 6c 65 6e 67 74 68  ue X, the length
17300 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
17310 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
17320 6f 66 20 0a 20 20 63 68 61 72 61 63 74 65 72 73  of .  characters
17330 20 28 6e 6f 74 20 62 79 74 65 73 29 20 69 6e 20   (not bytes) in 
17340 58 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 66  X prior to the f
17350 69 72 73 74 20 4e 55 4c 20 63 68 61 72 61 63 74  irst NUL charact
17360 65 72 2e 0a 20 20 53 69 6e 63 65 20 53 51 4c 69  er..  Since SQLi
17370 74 65 20 73 74 72 69 6e 67 73 20 64 6f 20 6e 6f  te strings do no
17380 74 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61  t normally conta
17390 69 6e 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72  in NUL character
173a0 73 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  s, the length(X)
173b0 0a 20 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c  .  function will
173c0 20 75 73 75 61 6c 6c 79 20 72 65 74 75 72 6e 20   usually return 
173d0 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
173e0 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
173f0 6e 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a  n the string X..
17400 20 20 5e 46 6f 72 20 61 20 62 6c 6f 62 20 76 61    ^For a blob va
17410 6c 75 65 20 58 2c 20 6c 65 6e 67 74 68 28 58 29  lue X, length(X)
17420 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
17430 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
17440 74 68 65 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20  the blob..  ^If 
17450 58 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c  X is NULL then l
17460 65 6e 67 74 68 28 58 29 20 69 73 20 4e 55 4c 4c  ength(X) is NULL
17470 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 6e 75 6d  ..  ^If X is num
17480 65 72 69 63 20 74 68 65 6e 20 6c 65 6e 67 74 68  eric then length
17490 28 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20  (X) returns the 
174a0 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74 72 69  length of a stri
174b0 6e 67 0a 20 20 72 65 70 72 65 73 65 6e 74 61 74  ng.  representat
174c0 69 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e  ion of X..}..fun
174d0 63 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20  cdef {like(X,Y) 
174e0 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20  like(X,Y,Z)} {} 
174f0 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28 29 20  {.  ^The like() 
17500 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
17510 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
17520 65 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58  e.  "<b>Y LIKE X
17530 20 26 23 39 31 3b 45 53 43 41 50 45 20 5a 26 23   &#91;ESCAPE Z&#
17540 39 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65 73 73  93;</b>" express
17550 69 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68 65 20  ion. .  ^If the 
17560 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20  optional ESCAPE 
17570 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
17580 74 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 6c 69  t, then the.  li
17590 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  ke() function is
175a0 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68   invoked with th
175b0 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e 20 20  ree arguments.  
175c0 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69  ^Otherwise, it i
175d0 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69 74 68  s.  invoked with
175e0 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f   two arguments o
175f0 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  nly. Note that t
17600 68 65 20 58 20 61 6e 64 20 59 20 70 61 72 61 6d  he X and Y param
17610 65 74 65 72 73 20 61 72 65 0a 20 20 72 65 76 65  eters are.  reve
17620 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69 6b 65  rsed in the like
17630 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61  () function rela
17640 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69  tive to the infi
17650 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f  x [LIKE] operato
17660 72 2e 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69 74  r..  ^The [sqlit
17670 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
17680 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  on()] interface 
17690 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f  can be used to o
176a0 76 65 72 72 69 64 65 20 74 68 65 0a 20 20 6c 69  verride the.  li
176b0 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ke() function an
176c0 64 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65  d thereby change
176d0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
176e0 66 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f  f the.  [LIKE] o
176f0 70 65 72 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f  perator.  When o
17700 76 65 72 72 69 64 69 6e 67 20 74 68 65 20 6c 69  verriding the li
17710 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69  ke() function, i
17720 74 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61  t may be importa
17730 6e 74 0a 20 20 74 6f 20 6f 76 65 72 72 69 64 65  nt.  to override
17740 20 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e   both the two an
17750 64 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74  d three argument
17760 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65   versions of the
17770 20 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e 63 74   like() .  funct
17780 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ion. Otherwise, 
17790 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d  different code m
177a0 61 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20  ay be called to 
177b0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20  implement the.  
177c0 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20  [LIKE] operator 
177d0 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
177e0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45  ther or not an E
177f0 53 43 41 50 45 20 63 6c 61 75 73 65 20 77 61 73  SCAPE clause was
17800 20 0a 20 20 73 70 65 63 69 66 69 65 64 2e 0a 7d   .  specified..}
17810 0a 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65  ...funcdef {like
17820 6c 69 68 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20  lihood(X,Y)} {} 
17830 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68  {.  ^The likelih
17840 6f 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  ood(X,Y) functio
17850 6e 20 72 65 74 75 72 6e 73 20 61 72 67 75 6d 65  n returns argume
17860 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a  nt X unchanged..
17870 20 20 5e 28 54 68 65 20 76 61 6c 75 65 20 59 20    ^(The value Y 
17880 69 6e 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c  in likelihood(X,
17890 59 29 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f  Y) must be a flo
178a0 61 74 69 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73  ating point cons
178b0 74 61 6e 74 0a 20 20 62 65 74 77 65 65 6e 20 30  tant.  between 0
178c0 2e 30 20 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c  .0 and 1.0, incl
178d0 75 73 69 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20  usive.)^.  ^The 
178e0 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 29 20 66 75  likelihood(X) fu
178f0 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  nction is a no-o
17900 70 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  p that the code 
17910 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69  generator.  opti
17920 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68  mizes away so th
17930 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e  at it consumes n
17940 6f 20 43 50 55 20 63 79 63 6c 65 73 20 64 75 72  o CPU cycles dur
17950 69 6e 67 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28  ing run-time.  (
17960 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20  that is, during 
17970 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65  calls to [sqlite
17980 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54  3_step()])..  ^T
17990 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68  he purpose of th
179a0 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59  e likelihood(X,Y
179b0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f  ) function is to
179c0 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a   provide a hint.
179d0 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70    to the query p
179e0 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20  lanner that the 
179f0 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20  argument X is a 
17a00 62 6f 6f 6c 65 61 6e 20 74 68 61 74 20 69 73 0a  boolean that is.
17a10 20 20 74 72 75 65 20 77 69 74 68 20 61 20 70 72    true with a pr
17a20 6f 62 61 62 69 6c 69 74 79 20 6f 66 20 61 70 70  obability of app
17a30 72 6f 78 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20  roximately Y..  
17a40 5e 28 54 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28  ^(The [unlikely(
17a50 58 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  X)] function is 
17a60 73 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c  short-hand for l
17a70 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36  ikelihood(X,0.06
17a80 32 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  25).)^.}..funcde
17a90 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  f {load_extensio
17aa0 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73  n(X) load_extens
17ab0 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  ion(X,Y)} {} {. 
17ac0 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e   ^The load_exten
17ad0 73 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74 69  sion(X,Y) functi
17ae0 6f 6e 20 6c 6f 61 64 73 20 5b 53 51 4c 69 74 65  on loads [SQLite
17af0 20 65 78 74 65 6e 73 69 6f 6e 73 5d 20 6f 75 74   extensions] out
17b00 20 6f 66 20 74 68 65 20 73 68 61 72 65 64 0a 20   of the shared. 
17b10 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61   library file na
17b20 6d 65 64 20 58 20 75 73 69 6e 67 20 74 68 65 20  med X using the 
17b30 65 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e 20 20  entry point Y.  
17b40 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c  ^The result of l
17b50 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a  oad_extension().
17b60 20 20 69 73 20 61 6c 77 61 79 73 20 61 20 4e 55    is always a NU
17b70 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73 20 6f 6d  LL.  ^If Y is om
17b80 69 74 74 65 64 20 74 68 65 6e 20 74 68 65 20 64  itted then the d
17b90 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69  efault entry poi
17ba0 6e 74 20 6e 61 6d 65 20 69 73 20 75 73 65 64 2e  nt name is used.
17bb0 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74  .  ^The load_ext
17bc0 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f  ension() functio
17bd0 6e 20 72 61 69 73 65 73 20 61 6e 20 65 78 63 65  n raises an exce
17be0 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78 74  ption if the ext
17bf0 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f 0a  ension fails to.
17c00 20 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61    load or initia
17c10 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a  lize correctly..
17c20 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f  .  <p>^The load_
17c30 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63  extension() func
17c40 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69  tion will fail i
17c50 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20  f the extension 
17c60 61 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d  attempts to .  m
17c70 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20  odify or delete 
17c80 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
17c90 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
17ca0 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65  uence.  ^The.  e
17cb0 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64  xtension can add
17cc0 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f   new functions o
17cd0 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
17ce0 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f  ences, but canno
17cf0 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65  t.  modify or de
17d00 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 66 75  lete existing fu
17d10 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61  nctions or colla
17d20 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62  ting sequences b
17d30 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66  ecause.  those f
17d40 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20  unctions and/or 
17d50 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
17d60 63 65 73 20 6d 69 67 68 74 20 62 65 20 75 73 65  ces might be use
17d70 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e  d elsewhere.  in
17d80 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72   the currently r
17d90 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65  unning SQL state
17da0 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61  ment.  To load a
17db0 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74  n extension that
17dc0 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65  .  changes or de
17dd0 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20  letes functions 
17de0 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
17df0 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a  uences, use the.
17e00 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f    [sqlite3_load_
17e10 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c  extension()] C-l
17e20 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e  anguage API.</p>
17e30 0a 0a 20 20 3c 70 3e 46 6f 72 20 73 65 63 75 72  ..  <p>For secur
17e40 69 74 79 20 72 65 61 73 6f 6e 73 2c 20 65 78 74  ity reasons, ext
17e50 65 6e 73 69 6f 6e 20 6c 6f 61 64 65 64 20 69 73  ension loaded is
17e60 20 74 75 72 6e 65 64 20 6f 66 66 20 62 79 20 64   turned off by d
17e70 65 66 61 75 6c 74 20 61 6e 64 20 6d 75 73 74 0a  efault and must.
17e80 20 20 62 65 20 65 6e 61 62 6c 65 64 20 62 79 20    be enabled by 
17e90 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20  a prior call to 
17ea0 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  [sqlite3_enable_
17eb0 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
17ec0 5d 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65  ].</p>.}..funcde
17ed0 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20  f {lower(X)} {} 
17ee0 7b 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72 28 58  {.  ^The lower(X
17ef0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
17f00 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 73 74 72  ns a copy of str
17f10 69 6e 67 20 58 20 77 69 74 68 20 61 6c 6c 20 41  ing X with all A
17f20 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 0a  SCII characters.
17f30 20 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c    converted to l
17f40 6f 77 65 72 20 63 61 73 65 2e 20 20 5e 54 68 65  ower case.  ^The
17f50 20 64 65 66 61 75 6c 74 20 62 75 69 6c 74 2d 69   default built-i
17f60 6e 20 6c 6f 77 65 72 28 29 20 66 75 6e 63 74 69  n lower() functi
17f70 6f 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20 41  on works.  for A
17f80 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20  SCII characters 
17f90 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61 73  only.  To do cas
17fa0 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 6e  e conversions on
17fb0 20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68 61   non-ASCII.  cha
17fc0 72 61 63 74 65 72 73 2c 20 6c 6f 61 64 20 74 68  racters, load th
17fd0 65 20 49 43 55 20 65 78 74 65 6e 73 69 6f 6e 2e  e ICU extension.
17fe0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72  .}..funcdef {ltr
17ff0 69 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c 59 29  im(X) ltrim(X,Y)
18000 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 74  } {} {.  ^The lt
18010 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  rim(X,Y) functio
18020 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
18030 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d  ng formed by rem
18040 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c  oving any and al
18050 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74  l.  characters t
18060 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20  hat appear in Y 
18070 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69  from the left si
18080 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74  de of X..  ^If t
18090 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73  he Y argument is
180a0 20 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69 6d 28   omitted, ltrim(
180b0 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65  X) removes space
180c0 73 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20  s from the left 
180d0 73 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a  side.  of X..}..
180e0 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c 59  funcdef {max(X,Y
180f0 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72 65  ,...)} {*maxCore
18100 46 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78 28 29  Func *max {max()
18110 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20   SQL function}} 
18120 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61  {.  ^The multi-a
18130 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75  rgument max() fu
18140 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
18150 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68  he argument with
18160 20 74 68 65 20 0a 20 20 6d 61 78 69 6d 75 6d 20   the .  maximum 
18170 76 61 6c 75 65 2c 20 6f 72 20 72 65 74 75 72 6e  value, or return
18180 20 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61 72 67   NULL if any arg
18190 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 20 0a  ument is NULL. .
181a0 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67    ^The multi-arg
181b0 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63  ument max() func
181c0 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74  tion searches it
181d0 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  s arguments from
181e0 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20   left to right. 
181f0 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74   for an argument
18200 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20   that defines a 
18210 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
18220 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74  on and uses that
18230 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e   collating.  fun
18240 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74  ction for all st
18250 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73  ring comparisons
18260 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .  ^If none of t
18270 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  he arguments to 
18280 6d 61 78 28 29 0a 20 20 64 65 66 69 6e 65 20 61  max().  define a
18290 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
182a0 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49  ion, then the BI
182b0 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66  NARY collating f
182c0 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e  unction is used.
182d0 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e  .  Note that <b>
182e0 6d 61 78 28 29 3c 2f 62 3e 20 69 73 20 61 20 73  max()</b> is a s
182f0 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77  imple function w
18300 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f  hen.  it has 2 o
18310 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73  r more arguments
18320 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61 73   but operates as
18330 20 61 6e 0a 20 20 5b 6d 69 6e 41 67 67 46 75 6e   an.  [minAggFun
18340 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75  c | aggregate fu
18350 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e  nction] if given
18360 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61   only a single a
18370 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63  rgument..}..func
18380 64 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e  def {min(X,Y,...
18390 29 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63  )} {*minCoreFunc
183a0 20 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c   *min {min() SQL
183b0 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
183c0 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
183d0 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69  ent min() functi
183e0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
183f0 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65  rgument with the
18400 0a 20 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65  .  minimum value
18410 2e 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61  ..  ^The multi-a
18420 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75  rgument min() fu
18430 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20  nction searches 
18440 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72  its arguments fr
18450 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
18460 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65  .  for an argume
18470 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  nt that defines 
18480 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
18490 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68  tion and uses th
184a0 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66  at collating.  f
184b0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20  unction for all 
184c0 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f  string compariso
184d0 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66  ns.  ^If none of
184e0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74   the arguments t
184f0 6f 20 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65  o min().  define
18500 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
18510 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ction, then the 
18520 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67  BINARY collating
18530 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
18540 64 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 3c  d..  Note that <
18550 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61  b>min()</b> is a
18560 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
18570 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32   when.  it has 2
18580 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e   or more argumen
18590 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20  ts but operates 
185a0 61 73 20 61 6e 20 0a 20 20 5b 6d 61 78 41 67 67  as an .  [maxAgg
185b0 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  Func | aggregate
185c0 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69   function] if gi
185d0 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e  ven.  only a sin
185e0 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a  gle argument..}.
185f0 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66  .funcdef {nullif
18600 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
18610 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66  he nullif(X,Y) f
18620 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
18630 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65  its first argume
18640 6e 74 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  nt if the argume
18650 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66 65 72  nts are.  differ
18660 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69 66 20  ent and NULL if 
18670 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72  the arguments ar
18680 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e 54 68  e the same.  ^Th
18690 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75  e nullif(X,Y) fu
186a0 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63 68 65  nction.  searche
186b0 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20  s its arguments 
186c0 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
186d0 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65  ht for an argume
186e0 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  nt that defines 
186f0 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  a.  collating fu
18700 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20  nction and uses 
18710 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66  that collating f
18720 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20  unction for all 
18730 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61 72 69  string.  compari
18740 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69 74 68  sons.  ^If neith
18750 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 6e  er argument to n
18760 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65 73 20  ullif() defines 
18770 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
18780 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68 65 20  tion.  then the 
18790 42 49 4e 41 52 59 20 69 73 20 75 73 65 64 2e 0a  BINARY is used..
187a0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72 69 6e  }..funcdef {prin
187b0 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d 20  tf(FORMAT,...)} 
187c0 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70 72 69  {} {.  ^(The pri
187d0 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 20  ntf(FORMAT,...) 
187e0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  SQL function wor
187f0 6b 73 20 6c 69 6b 65 20 74 68 65 20 5b 73 71 6c  ks like the [sql
18800 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 5d 20  ite3_mprintf()] 
18810 43 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66 75 6e  C-language.  fun
18820 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 20 70 72  ction and the pr
18830 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  intf() function 
18840 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72  from the standar
18850 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a 20  d C library.)^. 
18860 20 54 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   The first argum
18870 65 6e 74 20 69 73 20 61 20 66 6f 72 6d 61 74 20  ent is a format 
18880 73 74 72 69 6e 67 20 74 68 61 74 20 73 70 65 63  string that spec
18890 69 66 69 65 73 20 68 6f 77 20 74 6f 20 63 6f 6e  ifies how to con
188a0 73 74 72 75 63 74 20 74 68 65 20 6f 75 74 70 75  struct the outpu
188b0 74 0a 20 20 73 74 72 69 6e 67 20 75 73 69 6e 67  t.  string using
188c0 20 76 61 6c 75 65 73 20 74 61 6b 65 6e 20 66 72   values taken fr
188d0 6f 6d 20 73 75 62 73 65 71 75 65 6e 74 20 61 72  om subsequent ar
188e0 67 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20 74 68  guments.  ^If th
188f0 65 20 46 4f 52 4d 41 54 20 61 72 67 75 6d 65 6e  e FORMAT argumen
18900 74 20 69 73 0a 20 20 6d 69 73 73 69 6e 67 20 6f  t is.  missing o
18910 72 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  r NULL then the 
18920 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
18930 20 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61 74 20   ^The %n format 
18940 69 73 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f  is silently igno
18950 72 65 64 20 61 6e 64 0a 20 20 64 6f 65 73 20 6e  red and.  does n
18960 6f 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20 61 72  ot consume an ar
18970 67 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20 25 70  gument.  ^The %p
18980 20 66 6f 72 6d 61 74 20 69 73 20 61 6e 20 61 6c   format is an al
18990 69 61 73 20 66 6f 72 20 25 58 2e 20 20 5e 54 68  ias for %X.  ^Th
189a0 65 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20 69 73  e %z format.  is
189b0 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65   interchangeable
189c0 20 77 69 74 68 20 25 73 2e 20 20 5e 28 49 66 20   with %s.  ^(If 
189d0 74 68 65 72 65 20 61 72 65 20 74 6f 6f 20 66 65  there are too fe
189e0 77 20 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 74  w arguments in t
189f0 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74  he argument list
18a00 2c 0a 20 20 6d 69 73 73 69 6e 67 20 61 72 67 75  ,.  missing argu
18a10 6d 65 6e 74 73 20 61 72 65 20 61 73 73 75 6d 65  ments are assume
18a20 64 20 74 6f 20 68 61 76 65 20 61 20 4e 55 4c 4c  d to have a NULL
18a30 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20 69 73   value, which is
18a40 20 74 72 61 6e 73 6c 61 74 65 64 20 69 6e 74 6f   translated into
18a50 0a 20 20 30 20 6f 72 20 30 2e 30 20 66 6f 72 20  .  0 or 0.0 for 
18a60 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74 73 20  numeric formats 
18a70 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  or an empty stri
18a80 6e 67 20 66 6f 72 20 25 73 2e 29 5e 0a 7d 0a 20  ng for %s.)^.}. 
18a90 20 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75 6f 74   ..funcdef {quot
18aa0 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  e(X)} {} {.  ^Th
18ab0 65 20 71 75 6f 74 65 28 58 29 20 66 75 6e 63 74  e quote(X) funct
18ac0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
18ad0 74 65 78 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c  text of an SQL l
18ae0 69 74 65 72 61 6c 20 77 68 69 63 68 0a 20 20 69  iteral which.  i
18af0 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69  s the value of i
18b00 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74  ts argument suit
18b10 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69  able for inclusi
18b20 6f 6e 20 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73  on into an SQL s
18b30 74 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72  tatement..  ^Str
18b40 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75 6e  ings are surroun
18b50 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71 75  ded by single-qu
18b60 6f 74 65 73 20 77 69 74 68 20 65 73 63 61 70 65  otes with escape
18b70 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71 75  s on interior qu
18b80 6f 74 65 73 0a 20 20 61 73 20 6e 65 65 64 65 64  otes.  as needed
18b90 2e 20 20 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e  .  ^BLOBs are en
18ba0 63 6f 64 65 64 20 61 73 20 68 65 78 61 64 65 63  coded as hexadec
18bb0 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20  imal literals.. 
18bc0 20 5e 53 74 72 69 6e 67 73 20 77 69 74 68 20 65   ^Strings with e
18bd0 6d 62 65 64 64 65 64 20 4e 55 4c 20 63 68 61 72  mbedded NUL char
18be0 61 63 74 65 72 73 20 63 61 6e 6e 6f 74 20 62 65  acters cannot be
18bf0 20 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20   represented as 
18c00 73 74 72 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c  string.  literal
18c10 73 20 69 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e  s in SQL and hen
18c20 63 65 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  ce the returned 
18c30 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69  string literal i
18c40 73 20 74 72 75 6e 63 61 74 65 64 20 70 72 69 6f  s truncated prio
18c50 72 0a 20 20 74 6f 20 74 68 65 20 66 69 72 73 74  r.  to the first
18c60 20 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66   NUL..}..funcdef
18c70 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b   {random()} {} {
18c80 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29  .  ^The random()
18c90 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
18ca0 73 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f  s a pseudo-rando
18cb0 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74 77  m integer.  betw
18cc0 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38  een -92233720368
18cd0 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39 32  54775808 and +92
18ce0 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
18cf0 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  7..}..funcdef {r
18d00 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d  andomblob(N)} {}
18d10 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d   {.  ^The random
18d20 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
18d30 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74   return an N-byt
18d40 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e  e blob containin
18d50 67 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a  g pseudo-random.
18d60 20 20 62 79 74 65 73 2e 20 5e 49 66 20 4e 20 69    bytes. ^If N i
18d70 73 20 6c 65 73 73 20 74 68 61 6e 20 31 20 74 68  s less than 1 th
18d80 65 6e 20 61 20 31 2d 62 79 74 65 20 72 61 6e 64  en a 1-byte rand
18d90 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65 74 75 72  om blob is retur
18da0 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a  ned...  <p>Hint:
18db0 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 63    applications c
18dc0 61 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f 62  an generate glob
18dd0 61 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65 6e  ally unique iden
18de0 74 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67 20  tifiers.  using 
18df0 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f  this function to
18e00 67 65 74 68 65 72 20 77 69 74 68 20 5b 68 65 78  gether with [hex
18e10 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f  ()] and/or.  [lo
18e20 77 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69 73  wer()] like this
18e30 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71  :</p>..  <blockq
18e40 75 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e 64  uote>.  hex(rand
18e50 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c  omblob(16))<br><
18e60 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78  /br>.  lower(hex
18e70 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29  (randomblob(16))
18e80 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ).  </blockquote
18e90 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65  >.}..funcdef {re
18ea0 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d  place(X,Y,Z)} {}
18eb0 20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c 61 63   {.  ^The replac
18ec0 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f  e(X,Y,Z) functio
18ed0 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
18ee0 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75 62  ng formed by sub
18ef0 73 74 69 74 75 74 69 6e 67 0a 20 20 73 74 72 69  stituting.  stri
18f00 6e 67 20 5a 20 66 6f 72 20 65 76 65 72 79 20 6f  ng Z for every o
18f10 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72  ccurrence of str
18f20 69 6e 67 20 59 20 69 6e 20 73 74 72 69 6e 67 20  ing Y in string 
18f30 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41 52 59  X.  ^The [BINARY
18f40 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ].  collating se
18f50 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 20 66  quence is used f
18f60 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  or comparisons. 
18f70 20 5e 49 66 20 59 20 69 73 20 61 6e 20 65 6d 70   ^If Y is an emp
18f80 74 79 0a 20 20 73 74 72 69 6e 67 20 74 68 65 6e  ty.  string then
18f90 20 72 65 74 75 72 6e 20 58 20 75 6e 63 68 61 6e   return X unchan
18fa0 67 65 64 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e  ged.  ^If Z is n
18fb0 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61  ot initially.  a
18fc0 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 63   string, it is c
18fd0 61 73 74 20 74 6f 20 61 20 55 54 46 2d 38 20 73  ast to a UTF-8 s
18fe0 74 72 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 70  tring prior to p
18ff0 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75  rocessing..}..fu
19000 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29 20  ncdef {round(X) 
19010 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b  round(X,Y)} {} {
19020 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c  .  ^The round(X,
19030 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
19040 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70  rns a floating-p
19050 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20 72  oint.  value X r
19060 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67 69  ounded to Y digi
19070 74 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  ts to the right 
19080 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70  of the decimal p
19090 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65 20  oint..  ^If the 
190a0 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  Y argument is om
190b0 69 74 74 65 64 2c 20 69 74 20 69 73 20 61 73 73  itted, it is ass
190c0 75 6d 65 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a  umed to be 0..}.
190d0 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69 6d 28  .funcdef {rtrim(
190e0 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b  X) rtrim(X,Y)} {
190f0 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72 69 6d  } {.  ^The rtrim
19100 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
19110 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
19120 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69  formed by removi
19130 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20  ng any and all. 
19140 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
19150 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f   appear in Y fro
19160 6d 20 74 68 65 20 72 69 67 68 74 20 73 69 64 65  m the right side
19170 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65   of X..  ^If the
19180 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f   Y argument is o
19190 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28 58 29  mitted, rtrim(X)
191a0 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20   removes spaces 
191b0 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 0a 20  from the right. 
191c0 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66   side of X..}..f
191d0 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28  uncdef {soundex(
191e0 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
191f0 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e 63 74  soundex(X) funct
19200 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
19210 72 69 6e 67 20 74 68 61 74 20 69 73 20 74 68 65  ring that is the
19220 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e   soundex encodin
19230 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69  g .  of the stri
19240 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73 74 72  ng X..  ^The str
19250 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72 65  ing "?000" is re
19260 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 61 72  turned if the ar
19270 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f  gument is NULL o
19280 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20  r contains.  no 
19290 41 53 43 49 49 20 61 6c 70 68 61 62 65 74 69 63  ASCII alphabetic
192a0 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20 5e   characters..  ^
192b0 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69  (This function i
192c0 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 53  s omitted from S
192d0 51 4c 69 74 65 20 62 79 20 64 65 66 61 75 6c 74  QLite by default
192e0 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 61  ..  It is only a
192f0 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65 20  vailable if the 
19300 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d  [SQLITE_SOUNDEX]
19310 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
19320 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64 20 77  tion.  is used w
19330 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62 75  hen SQLite is bu
19340 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ilt.)^.}..funcde
19350 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  f {sqlite_compil
19360 65 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20  eoption_get(N)} 
19370 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
19380 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
19390 5f 67 65 74 28 29 20 53 51 4c 20 66 75 6e 63 74  _get() SQL funct
193a0 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72  ion is a wrapper
193b0 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73   around the.  [s
193c0 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
193d0 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b  tion_get()] C/C+
193e0 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54  + function..  ^T
193f0 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75  his routine retu
19400 72 6e 73 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d  rns the N-th com
19410 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
19420 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53   used to build S
19430 51 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20  QLite.  or NULL 
19440 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72  if N is out of r
19450 61 6e 67 65 2e 20 20 53 65 65 20 61 6c 73 6f 20  ange.  See also 
19460 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74  the [compile_opt
19470 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a  ions pragma]..}.
19480 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65  .funcdef {sqlite
19490 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
194a0 73 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  sed(X)} {} {.  ^
194b0 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69  The sqlite_compi
194c0 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 20  leoption_used() 
194d0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
194e0 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
194f0 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
19500 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
19510 65 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63  ed()] C/C++ func
19520 74 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68  tion..  ^When th
19530 65 20 61 72 67 75 6d 65 6e 74 20 58 20 74 6f 20  e argument X to 
19540 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
19550 74 69 6f 6e 5f 75 73 65 64 28 58 29 20 69 73 20  tion_used(X) is 
19560 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 0a 20  a string which. 
19570 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
19580 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  a compile-time o
19590 70 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74  ption, this rout
195a0 69 6e 65 20 72 65 74 75 72 6e 73 20 74 72 75 65  ine returns true
195b0 20 28 31 29 20 6f 72 0a 20 20 66 61 6c 73 65 20   (1) or.  false 
195c0 28 30 29 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  (0) depending on
195d0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
195e0 74 68 61 74 20 6f 70 74 69 6f 6e 20 77 61 73 20  that option was 
195f0 75 73 65 64 20 64 75 72 69 6e 67 20 74 68 65 0a  used during the.
19600 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63    build..}..func
19610 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72  def {sqlite_sour
19620 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20  ce_id()} {} {.  
19630 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75 72  ^The sqlite_sour
19640 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  ce_id() function
19650 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
19660 67 20 74 68 61 74 20 69 64 65 6e 74 69 66 69 65  g that identifie
19670 73 20 74 68 65 0a 20 20 73 70 65 63 69 66 69 63  s the.  specific
19680 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
19690 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61 74  source code that
196a0 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75 69   was used to bui
196b0 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20  ld the SQLite.  
196c0 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20 73  library.  ^The s
196d0 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62  tring returned b
196e0 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  y sqlite_source_
196f0 69 64 28 29 20 62 65 67 69 6e 73 20 77 69 74 68  id() begins with
19700 0a 20 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  .  the date and 
19710 74 69 6d 65 20 74 68 61 74 20 74 68 65 20 73 6f  time that the so
19720 75 72 63 65 20 63 6f 64 65 20 77 61 73 20 63 68  urce code was ch
19730 65 63 6b 65 64 20 69 6e 20 61 6e 64 20 69 73 20  ecked in and is 
19740 66 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20  follows by.  an 
19750 53 48 41 31 20 68 61 73 68 20 74 68 61 74 20 75  SHA1 hash that u
19760 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69  niquely identifi
19770 65 73 20 74 68 65 20 73 6f 75 72 63 65 20 74 72  es the source tr
19780 65 65 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74  ee.  ^This funct
19790 69 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c 20  ion is.  an SQL 
197a0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
197b0 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72  he [sqlite3_sour
197c0 63 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72 66  ceid()] C interf
197d0 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ace..}..funcdef 
197e0 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28  {sqlite_version(
197f0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
19800 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
19810 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19820 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72   the version str
19830 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ing for the SQLi
19840 74 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68 61  te.  library tha
19850 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e  t is running.  ^
19860 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
19870 20 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70 65   an SQL.  wrappe
19880 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
19890 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
198a0 28 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65 2e  ()] C-interface.
198b0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 62  .}..funcdef {sub
198c0 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73 74  str(X,Y,Z) subst
198d0 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  r(X,Y)} {} {.  ^
198e0 54 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c 5a  The substr(X,Y,Z
198f0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
19900 6e 73 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f  ns a substring o
19910 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58  f input string X
19920 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77   that begins.  w
19930 69 74 68 20 74 68 65 20 59 2d 74 68 20 63 68 61  ith the Y-th cha
19940 72 61 63 74 65 72 20 61 6e 64 20 77 68 69 63 68  racter and which
19950 20 69 73 20 5a 20 63 68 61 72 61 63 74 65 72 73   is Z characters
19960 20 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69   long..  ^If Z i
19970 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 73  s omitted then s
19980 75 62 73 74 72 28 58 2c 59 29 20 72 65 74 75 72  ubstr(X,Y) retur
19990 6e 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72  ns all character
199a0 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e  s through the en
199b0 64 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e  d.  of the strin
199c0 67 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  g X beginning wi
199d0 74 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e  th the Y-th..  ^
199e0 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68  The left-most ch
199f0 61 72 61 63 74 65 72 20 6f 66 20 58 20 69 73 20  aracter of X is 
19a00 6e 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59  number 1.  ^If Y
19a10 20 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74   is negative.  t
19a20 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 63 68  hen the first ch
19a30 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73  aracter of the s
19a40 75 62 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e  ubstring is foun
19a50 64 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72  d by counting fr
19a60 6f 6d 20 74 68 65 0a 20 20 72 69 67 68 74 20 72  om the.  right r
19a70 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c  ather than the l
19a80 65 66 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e  eft.  ^If Z is n
19a90 65 67 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74  egative then.  t
19aa0 68 65 20 61 62 73 28 5a 29 20 63 68 61 72 61 63  he abs(Z) charac
19ab0 74 65 72 73 20 70 72 65 63 65 64 69 6e 67 20 74  ters preceding t
19ac0 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65  he Y-th characte
19ad0 72 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a  r are returned..
19ae0 20 20 5e 49 66 20 58 20 69 73 20 61 20 73 74 72    ^If X is a str
19af0 69 6e 67 20 74 68 65 6e 20 63 68 61 72 61 63 74  ing then charact
19b00 65 72 73 20 69 6e 64 69 63 65 73 20 72 65 66 65  ers indices refe
19b10 72 20 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d  r to actual UTF-
19b20 38 20 0a 20 20 63 68 61 72 61 63 74 65 72 73 2e  8 .  characters.
19b30 20 20 5e 49 66 20 58 20 69 73 20 61 20 42 4c 4f    ^If X is a BLO
19b40 42 20 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63  B then the indic
19b50 65 73 20 72 65 66 65 72 20 74 6f 20 62 79 74 65  es refer to byte
19b60 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74  s..}..funcdef {t
19b70 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20  otal_changes()} 
19b80 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61  {} {.  ^The tota
19b90 6c 5f 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63  l_changes() func
19ba0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
19bb0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63   number of row c
19bc0 68 61 6e 67 65 73 0a 20 20 63 61 75 73 65 64 20  hanges.  caused 
19bd0 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  by INSERT, UPDAT
19be0 45 20 6f 72 20 44 45 4c 45 54 45 0a 20 20 73 74  E or DELETE.  st
19bf0 61 74 65 6d 65 6e 74 73 20 73 69 6e 63 65 20 74  atements since t
19c00 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 61 62  he current datab
19c10 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77  ase connection w
19c20 61 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68  as opened..  ^Th
19c30 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  is function is a
19c40 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
19c50 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74  the [sqlite3_tot
19c60 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20  al_changes()].  
19c70 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e  C/C++ interface.
19c80 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69  .}..funcdef {tri
19c90 6d 28 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20  m(X) trim(X,Y)} 
19ca0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d  {} {.  ^The trim
19cb0 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
19cc0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
19cd0 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69  formed by removi
19ce0 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20  ng any and all. 
19cf0 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
19d00 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f   appear in Y fro
19d10 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58  m both ends of X
19d20 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
19d30 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
19d40 64 2c 20 74 72 69 6d 28 58 29 20 72 65 6d 6f 76  d, trim(X) remov
19d50 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 62  es spaces from b
19d60 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d  oth ends of X..}
19d70 0a 0a 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f  ..funcdef {typeo
19d80 66 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  f(X)} {} {.  ^Th
19d90 65 20 74 79 70 65 6f 66 28 58 29 20 66 75 6e 63  e typeof(X) func
19da0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
19db0 74 72 69 6e 67 20 74 68 61 74 20 69 6e 64 69 63  tring that indic
19dc0 61 74 65 73 20 74 68 65 20 5b 64 61 74 61 74 79  ates the [dataty
19dd0 70 65 5d 20 6f 66 0a 20 20 74 68 65 20 65 78 70  pe] of.  the exp
19de0 72 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c  ression X: "null
19df0 22 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72  ", "integer", "r
19e00 65 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f 72  eal", "text", or
19e10 20 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63   "blob"..}..func
19e20 64 65 66 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29  def {unlikely(X)
19e30 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e  } {} {.  ^The un
19e40 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69  likely(X) functi
19e50 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
19e60 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e  rgument X unchan
19e70 67 65 64 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69  ged..  ^The unli
19e80 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
19e90 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74   is a no-op that
19ea0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
19eb0 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20  tor.  optimizes 
19ec0 61 77 61 79 20 73 6f 20 74 68 61 74 20 69 74 20  away so that it 
19ed0 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20  consumes no CPU 
19ee0 63 79 63 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d  cycles at.  run-
19ef0 74 69 6d 65 20 28 74 68 61 74 20 69 73 2c 20 64  time (that is, d
19f00 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b  uring calls to [
19f10 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29  sqlite3_step()])
19f20 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65  ..  ^The purpose
19f30 20 6f 66 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79   of the unlikely
19f40 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
19f50 74 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e  to provide a hin
19f60 74 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79  t.  to the query
19f70 20 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68   planner that th
19f80 65 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20  e argument X is 
19f90 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a  a boolean value.
19fa0 20 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c    that is usuall
19fb0 79 20 6e 6f 74 20 74 72 75 65 2e 20 5e 28 54 68  y not true. ^(Th
19fc0 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75  e unlikely(X) fu
19fd0 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61  nction is equiva
19fe0 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c  lent.  to [likel
19ff0 69 68 6f 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35  ihood](X, 0.0625
1a000 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ).)^.}..funcdef 
1a010 7b 75 6e 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20  {unicode(X)} {} 
1a020 7b 0a 20 20 5e 54 68 65 20 75 6e 69 63 6f 64 65  {.  ^The unicode
1a030 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1a040 75 72 6e 73 20 74 68 65 20 6e 75 6d 65 72 69 63  urns the numeric
1a050 20 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70 6f   unicode code po
1a060 69 6e 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  int correspondin
1a070 67 20 74 6f 0a 20 20 74 68 65 20 66 69 72 73 74  g to.  the first
1a080 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
1a090 65 20 73 74 72 69 6e 67 20 58 2e 20 20 49 66 20  e string X.  If 
1a0a0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
1a0b0 75 6e 69 63 6f 64 65 28 58 29 20 69 73 20 6e 6f  unicode(X) is no
1a0c0 74 20 61 20 73 74 72 69 6e 67 0a 20 20 74 68 65  t a string.  the
1a0d0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
1a0e0 75 6e 64 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75  undefined..}..fu
1a0f0 6e 63 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d  ncdef {upper(X)}
1a100 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 70 70   {} {.  ^The upp
1a110 65 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  er(X) function r
1a120 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
1a130 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20   input string X 
1a140 69 6e 20 77 68 69 63 68 20 61 6c 6c 20 0a 20 20  in which all .  
1a150 6c 6f 77 65 72 2d 63 61 73 65 20 41 53 43 49 49  lower-case ASCII
1a160 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20   characters are 
1a170 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65  converted to the
1a180 69 72 20 75 70 70 65 72 2d 63 61 73 65 20 65 71  ir upper-case eq
1a190 75 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e  uivalent..}..fun
1a1a0 63 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e  cdef {zeroblob(N
1a1b0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a  )} {} {.  ^The z
1a1c0 65 72 6f 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74  eroblob(N) funct
1a1d0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 42 4c  ion returns a BL
1a1e0 4f 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66  OB consisting of
1a1f0 20 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30 30   N bytes of 0x00
1a200 2e 0a 20 20 53 51 4c 69 74 65 20 6d 61 6e 61 67  ..  SQLite manag
1a210 65 73 20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f  es these zeroblo
1a220 62 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e  bs very efficien
1a230 74 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20  tly.  Zeroblobs 
1a240 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 20  can be used to. 
1a250 20 72 65 73 65 72 76 65 20 73 70 61 63 65 20 66   reserve space f
1a260 6f 72 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69  or a BLOB that i
1a270 73 20 6c 61 74 65 72 20 77 72 69 74 74 65 6e 20  s later written 
1a280 75 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65  using .  [sqlite
1a290 33 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20  3_blob_open() | 
1a2a0 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42  incremental BLOB
1a2b0 20 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53   I/O]..  ^This S
1a2c0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  QL function is i
1a2d0 6d 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67  mplemented using
1a2e0 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65   the [sqlite3_re
1a2f0 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d  sult_zeroblob()]
1a300 0a 20 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20  .  routine from 
1a310 74 68 65 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  the C/C++ interf
1a320 61 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f  ace..}.</tcl>.</
1a330 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  table>..<tcl>.##
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 23 23 23 23 23 23 23 23 23  ################
1a360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a380 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1a390 74 69 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54  tion {Date And T
1a3a0 69 6d 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64  ime Functions} d
1a3b0 61 74 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75  atefunc {*datefu
1a3c0 6e 63 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  nc}.hd_keywords 
1a3d0 7b 64 61 74 65 28 29 20 53 51 4c 20 66 75 6e 63  {date() SQL func
1a3e0 74 69 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51  tion} {time() SQ
1a3f0 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b  L function}.hd_k
1a400 65 79 77 6f 72 64 73 20 7b 64 61 74 65 74 69 6d  eywords {datetim
1a410 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
1a420 7d 20 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20 53  } {julianday() S
1a430 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f  QL function}.hd_
1a440 6b 65 79 77 6f 72 64 73 20 7b 73 74 72 66 74 69  keywords {strfti
1a450 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  me() SQL functio
1a460 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53  n}.</tcl>..<p>.S
1a470 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 66  QLite supports f
1a480 69 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ive date and tim
1a490 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 20 66  e functions as f
1a4a0 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70  ollows:.</p>..<p
1a4b0 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62  >.<ol>.<li> ^(<b
1a4c0 3e 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d  >date(</b><i>tim
1a4d0 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
1a4e0 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
1a4f0 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
1a500 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74  /li>.<li> ^(<b>t
1a510 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  ime(</b><i>times
1a520 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
1a530 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
1a540 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
1a550 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74  i>.<li> ^(<b>dat
1a560 65 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d  etime(</b><i>tim
1a570 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
1a580 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
1a590 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
1a5a0 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a  /li>.<li> ^(<b>j
1a5b0 75 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e  ulianday(</b><i>
1a5c0 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
1a5d0 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
1a5e0 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
1a5f0 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c  ^ </li>.<li> ^(<
1a600 62 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c  b>strftime(</b><
1a610 69 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74  i>format, timest
1a620 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1a630 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1a640 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1a650 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c  >.</ol>..<p>.^Al
1a660 6c 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20  l five date and 
1a670 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74  time functions t
1a680 61 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e  ake a time strin
1a690 67 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74  g as an argument
1a6a0 2e 20 0a 5e 54 68 65 20 74 69 6d 65 20 73 74 72  . .^The time str
1a6b0 69 6e 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ing is followed 
1a6c0 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  by zero or more 
1a6d0 6d 6f 64 69 66 69 65 72 73 2e 20 0a 5e 54 68 65  modifiers. .^The
1a6e0 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63   strftime() func
1a6f0 74 69 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20  tion also takes 
1a700 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  a format string 
1a710 61 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67  as its first arg
1a720 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ument..</p>..<p>
1a730 0a 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69  .The date and ti
1a740 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65  me functions use
1a750 20 61 20 73 75 62 73 65 74 20 6f 66 0a 5b 68 74   a subset of.[ht
1a760 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1a770 61 2e 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38  a.org/wiki/ISO_8
1a780 36 30 31 20 7c 20 49 53 30 2d 38 36 30 31 5d 20  601 | IS0-8601] 
1a790 64 61 74 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f  date and time.fo
1a7a0 72 6d 61 74 73 2e 0a 5e 54 68 65 20 64 61 74 65  rmats..^The date
1a7b0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1a7c0 72 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20  rns the date in 
1a7d0 74 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59  this format: YYY
1a7e0 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74  Y-MM-DD. .^The t
1a7f0 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ime() function r
1a800 65 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20  eturns the time 
1a810 61 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54  as HH:MM:SS. .^T
1a820 68 65 20 64 61 74 65 74 69 6d 65 28 29 20 66 75  he datetime() fu
1a830 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22  nction returns "
1a840 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
1a850 3a 53 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c  :SS". .^(The jul
1a860 69 61 6e 64 61 79 28 29 20 66 75 6e 63 74 69 6f  ianday() functio
1a870 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 0a 5b  n returns the .[
1a880 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1a890 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c  dia.org/wiki/Jul
1a8a0 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e  ian_day | Julian
1a8b0 20 64 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62   day] - the.numb
1a8c0 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65  er of days since
1a8d0 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69   noon in Greenwi
1a8e0 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32  ch on November 2
1a8f0 34 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b  4, 4714 B.C. .([
1a900 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1a910 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f  dia.org/wiki/Pro
1a920 6c 65 70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e  leptic_Gregorian
1a930 5f 63 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c  _calendar | Prol
1a940 65 70 74 69 63 20 47 72 65 67 6f 72 69 61 6e 20  eptic Gregorian 
1a950 63 61 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54  calendar]).)^.^T
1a960 68 65 20 73 74 72 66 74 69 6d 65 28 29 20 72 6f  he strftime() ro
1a970 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68  utine returns th
1a980 65 20 64 61 74 65 20 66 6f 72 6d 61 74 74 65 64  e date formatted
1a990 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74   according to .t
1a9a0 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
1a9b0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
1a9c0 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
1a9d0 2e 0a 5e 54 68 65 20 66 6f 72 6d 61 74 20 73 74  ..^The format st
1a9e0 72 69 6e 67 20 73 75 70 70 6f 72 74 73 20 74 68  ring supports th
1a9f0 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75  e most common su
1aa00 62 73 74 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e  bstitutions foun
1aa10 64 20 69 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a  d in the .[http:
1aa20 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f  //opengroup.org/
1aa30 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30  onlinepubs/00790
1aa40 38 37 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d  8799/xsh/strftim
1aa50 65 2e 68 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d  e.html | strftim
1aa60 65 28 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72  e() function].fr
1aa70 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  om the standard 
1aa80 43 20 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74  C library plus t
1aa90 77 6f 20 6e 65 77 20 73 75 62 73 74 69 74 75 74  wo new substitut
1aaa0 69 6f 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e  ions, %f and %J.
1aab0 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .^(The following
1aac0 20 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c   is a complete l
1aad0 69 73 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72  ist of valid str
1aae0 66 74 69 6d 65 28 29 20 73 75 62 73 74 69 74 75  ftime() substitu
1aaf0 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  tions:.</p>..<bl
1ab00 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
1ab10 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
1ab20 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
1ab30 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
1ab40 3e 3c 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  ><td><td width="
1ab50 31 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  10"><td></tr>..<
1ab60 74 72 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c  tr><td> %d <td><
1ab70 74 64 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68  td> day of month
1ab80 3a 20 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66  : 00.<tr><td> %f
1ab90 20 3c 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69   <td><td> fracti
1aba0 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53  onal seconds: SS
1abb0 2e 53 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48  .SSS.<tr><td> %H
1abc0 20 3c 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20   <td><td> hour: 
1abd0 30 30 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20  00-24 .<tr><td> 
1abe0 25 6a 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %j <td><td> day 
1abf0 6f 66 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36  of year: 001-366
1ac00 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64  .<tr><td> %J <td
1ac10 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79  ><td> Julian day
1ac20 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e   number.<tr><td>
1ac30 20 25 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e   %m <td><td> mon
1ac40 74 68 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74  th: 01-12.<tr><t
1ac50 64 3e 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d  d> %M <td><td> m
1ac60 69 6e 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72  inute: 00-59.<tr
1ac70 3e 3c 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64  ><td> %s <td><td
1ac80 3e 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  > seconds since 
1ac90 31 39 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c  1970-01-01.<tr><
1aca0 74 64 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20  td> %S <td><td> 
1acb0 73 65 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c  seconds: 00-59.<
1acc0 74 72 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c  tr><td> %w <td><
1acd0 74 64 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20  td> day of week 
1ace0 30 2d 36 20 77 69 74 68 20 53 75 6e 64 61 79 3d  0-6 with Sunday=
1acf0 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c  =0.<tr><td> %W <
1ad00 74 64 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20  td><td> week of 
1ad10 79 65 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e  year: 00-53.<tr>
1ad20 3c 74 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e  <td> %Y <td><td>
1ad30 20 79 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39   year: 0000-9999
1ad40 0a 3c 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64  .<tr><td> %% <td
1ad50 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e  ><td> %.</table>
1ad60 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1ad70 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74  ..<p>.^(Notice t
1ad80 68 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61  hat all other da
1ad90 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1ada0 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70  tions can be exp
1adb0 72 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20  ressed.in terms 
1adc0 6f 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c  of strftime():.<
1add0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1ade0 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
1adf0 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "0" cellpadding=
1ae00 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  "0" cellspacing=
1ae10 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e  "0">.<tr><td><b>
1ae20 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20  Function</b><td 
1ae30 77 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c  width="30"><td><
1ae40 62 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72  b>Equivalent str
1ae50 66 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e  ftime()</b>.<tr>
1ae60 3c 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29  <td>   date(...)
1ae70 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20        <td><td>  
1ae80 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d  strftime('%Y-%m-
1ae90 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74  %d', ...).<tr><t
1aea0 64 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20  d>   time(...)  
1aeb0 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74      <td><td>  st
1aec0 72 66 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53  rftime('%H:%M:%S
1aed0 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e  ', ...).<tr><td>
1aee0 20 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29     datetime(...)
1aef0 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66    <td><td>  strf
1af00 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25  time('%Y-%m-%d %
1af10 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c  H:%M:%S', ...).<
1af20 74 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e  tr><td>   julian
1af30 64 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64  day(...) <td><td
1af40 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27  >  strftime('%J'
1af50 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a  , ...).</table>.
1af60 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1af70 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65  .<p>.The only re
1af80 61 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64  asons for provid
1af90 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74  ing functions ot
1afa0 68 65 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d  her than strftim
1afb0 65 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65  e() is.for conve
1afc0 6e 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65  nience and for e
1afd0 66 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a  fficiency..</p>.
1afe0 0a 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67  .<h3>Time String
1aff0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74  s</h3>..<p>^(A t
1b000 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  ime string can b
1b010 65 20 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 20  e in any of the 
1b020 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74  following format
1b030 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
1b040 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1b050 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1b060 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e  -MM-DD HH:MM</i>
1b070 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1b080 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e  -DD HH:MM:SS</i>
1b090 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1b0a0 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53  -DD HH:MM:SS.SSS
1b0b0 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
1b0c0 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c  Y-MM-DD</i><b>T<
1b0d0 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a  /b><i>HH:MM</i>.
1b0e0 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1b0f0 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69  DD</i><b>T</b><i
1b100 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c  >HH:MM:SS</i>.<l
1b110 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1b120 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48  </i><b>T</b><i>H
1b130 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
1b140 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69  <li> <i>HH:MM</i
1b150 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a  >.<li> <i>HH:MM:
1b160 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48  SS</i>.<li> <i>H
1b170 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
1b180 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a  <li> <b>now</b>.
1b190 3c 6c 69 3e 20 3c 69 3e 44 44 44 44 44 44 44 44  <li> <i>DDDDDDDD
1b1a0 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a  DD</i>.</ol>)^..
1b1b0 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20  <p>.^In formats 
1b1c0 35 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65  5 through 7, the
1b1d0 20 22 54 22 20 69 73 20 61 20 6c 69 74 65 72 61   "T" is a litera
1b1e0 6c 20 63 68 61 72 61 63 74 65 72 20 73 65 70 61  l character sepa
1b1f0 72 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65  rating .the date
1b200 20 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61   and the time, a
1b210 73 20 72 65 71 75 69 72 65 64 20 62 79 20 0a 5b  s required by .[
1b220 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f  http://www.w3c.o
1b230 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74  rg/TR/NOTE-datet
1b240 69 6d 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e  ime | ISO-8601].
1b250 20 0a 5e 46 6f 72 6d 61 74 73 20 38 20 74 68 72   .^Formats 8 thr
1b260 6f 75 67 68 20 31 30 20 74 68 61 74 20 73 70 65  ough 10 that spe
1b270 63 69 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65  cify only a time
1b280 20 61 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f   assume a date o
1b290 66 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46  f .2000-01-01. F
1b2a0 6f 72 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74  ormat 11, the st
1b2b0 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63  ring 'now', is c
1b2c0 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68  onverted into th
1b2d0 65 20 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20  e .current date 
1b2e0 61 6e 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61  and time as obta
1b2f0 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43  ined from the xC
1b300 75 72 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f  urrentTime metho
1b310 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65  d.of the [sqlite
1b320 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e  3_vfs] object in
1b330 20 75 73 65 2e 0a 5e 54 68 65 20 27 6e 6f 77 27   use..^The 'now'
1b340 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 64 61 74   argument to dat
1b350 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1b360 69 6f 6e 73 20 61 6c 77 61 79 73 20 72 65 74 75  ions always retu
1b370 72 6e 73 20 65 78 61 63 74 6c 79 20 74 68 65 0a  rns exactly the.
1b380 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 6d  same value for m
1b390 75 6c 74 69 70 6c 65 20 69 6e 76 6f 63 61 74 69  ultiple invocati
1b3a0 6f 6e 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  ons within the s
1b3b0 61 6d 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 65  ame [sqlite3_ste
1b3c0 70 28 29 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74 74  p()] call..^[htt
1b3d0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1b3e0 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69  .org/wiki/Coordi
1b3f0 6e 61 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f  nated_Universal_
1b400 54 69 6d 65 20 7c 20 55 6e 69 76 65 72 73 61 6c  Time | Universal
1b410 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d   Coordinated Tim
1b420 65 20 28 55 54 43 29 5d 20 69 73 20 75 73 65 64  e (UTC)] is used
1b430 2e 20 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69 73  . .^Format 12 is
1b440 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e   the .[http://en
1b450 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1b460 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c  iki/Julian_day |
1b470 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
1b480 65 72 5d 0a 65 78 70 72 65 73 73 65 64 20 61 73  er].expressed as
1b490 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
1b4a0 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c  t value..</p>..<
1b4b0 70 3e 0a 46 6f 72 6d 61 74 73 20 32 20 74 68 72  p>.Formats 2 thr
1b4c0 6f 75 67 68 20 31 30 20 6d 61 79 20 62 65 20 6f  ough 10 may be o
1b4d0 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
1b4e0 65 64 20 62 79 20 61 20 74 69 6d 65 7a 6f 6e 65  ed by a timezone
1b4f0 20 69 6e 64 69 63 61 74 6f 72 20 6f 66 20 74 68   indicator of th
1b500 65 20 66 6f 72 6d 0a 22 3c 69 3e 26 23 39 31 3b  e form."<i>&#91;
1b510 2b 2d 26 23 39 33 3b 48 48 3a 4d 4d 3c 2f 69 3e  +-&#93;HH:MM</i>
1b520 22 20 6f 72 20 6a 75 73 74 20 22 3c 69 3e 5a 3c  " or just "<i>Z<
1b530 2f 69 3e 22 2e 20 20 54 68 65 20 64 61 74 65 20  /i>".  The date 
1b540 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1b550 6e 73 20 75 73 65 20 55 54 43 20 6f 72 20 22 7a  ns use UTC or "z
1b560 75 6c 75 22 0a 74 69 6d 65 20 69 6e 74 65 72 6e  ulu".time intern
1b570 61 6c 6c 79 2c 20 61 6e 64 20 73 6f 20 74 68 65  ally, and so the
1b580 20 22 5a 22 20 73 75 66 66 69 78 20 69 73 20 61   "Z" suffix is a
1b590 20 6e 6f 2d 6f 70 2e 20 20 41 6e 79 20 6e 6f 6e   no-op.  Any non
1b5a0 2d 7a 65 72 6f 20 22 48 48 3a 4d 4d 22 20 73 75  -zero "HH:MM" su
1b5b0 66 66 69 78 20 69 73 0a 73 75 62 74 72 61 63 74  ffix is.subtract
1b5c0 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 69  ed from the indi
1b5d0 63 61 74 65 64 20 64 61 74 65 20 61 6e 64 20 74  cated date and t
1b5e0 69 6d 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ime in order to 
1b5f0 63 6f 6d 70 75 74 65 20 7a 75 6c 75 20 74 69 6d  compute zulu tim
1b600 65 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e..For example, 
1b610 61 6c 6c 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  all of the follo
1b620 77 69 6e 67 20 74 69 6d 65 20 73 74 72 69 6e 67  wing time string
1b630 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74  s are equivalent
1b640 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
1b650 6f 74 65 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20  ote>.2013-10-07 
1b660 30 38 3a 32 33 3a 31 39 2e 31 32 30 3c 62 72 3e  08:23:19.120<br>
1b670 0a 32 30 31 33 2d 31 30 2d 30 37 54 30 38 3a 32  .2013-10-07T08:2
1b680 33 3a 31 39 2e 31 32 30 5a 3c 62 72 3e 0a 32 30  3:19.120Z<br>.20
1b690 31 33 2d 31 30 2d 30 37 20 30 34 3a 32 33 3a 31  13-10-07 04:23:1
1b6a0 39 2e 31 32 30 2d 30 34 3a 30 30 3c 62 72 3e 0a  9.120-04:00<br>.
1b6b0 32 34 35 36 35 37 32 2e 38 34 39 35 32 36 38 35  2456572.84952685
1b6c0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
1b6d0 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61 74 73  <p>.^(In formats
1b6e0 20 34 2c 20 37 2c 20 61 6e 64 20 31 30 2c 20 74   4, 7, and 10, t
1b6f0 68 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65  he fractional se
1b700 63 6f 6e 64 73 20 76 61 6c 75 65 20 53 53 2e 53  conds value SS.S
1b710 53 53 20 63 61 6e 20 68 61 76 65 0a 6f 6e 65 20  SS can have.one 
1b720 6f 72 20 6d 6f 72 65 20 64 69 67 69 74 73 20 66  or more digits f
1b730 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 65 63  ollowing the dec
1b740 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 45 78 61  imal point.  Exa
1b750 63 74 6c 79 20 74 68 72 65 65 20 64 69 67 69 74  ctly three digit
1b760 73 20 61 72 65 0a 73 68 6f 77 6e 20 69 6e 20 74  s are.shown in t
1b770 68 65 20 65 78 61 6d 70 6c 65 73 20 62 65 63 61  he examples beca
1b780 75 73 65 20 6f 6e 6c 79 20 74 68 65 20 66 69 72  use only the fir
1b790 73 74 20 74 68 72 65 65 20 64 69 67 69 74 73 20  st three digits 
1b7a0 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 0a  are significant.
1b7b0 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2c 20 62  to the result, b
1b7c0 75 74 20 74 68 65 20 69 6e 70 75 74 20 73 74 72  ut the input str
1b7d0 69 6e 67 20 63 61 6e 20 68 61 76 65 20 66 65 77  ing can have few
1b7e0 65 72 20 6f 72 20 6d 6f 72 65 20 74 68 61 6e 20  er or more than 
1b7f0 74 68 72 65 65 20 64 69 67 69 74 73 0a 61 6e 64  three digits.and
1b800 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65 20 66   the date/time f
1b810 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 74  unctions will st
1b820 69 6c 6c 20 6f 70 65 72 61 74 65 20 63 6f 72 72  ill operate corr
1b830 65 63 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61 72  ectly.)^.Similar
1b840 6c 79 2c 20 66 6f 72 6d 61 74 20 31 32 20 69 73  ly, format 12 is
1b850 20 73 68 6f 77 6e 20 77 69 74 68 20 31 30 20 73   shown with 10 s
1b860 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74  ignificant digit
1b870 73 2c 20 62 75 74 20 74 68 65 20 64 61 74 65 2f  s, but the date/
1b880 74 69 6d 65 0a 66 75 6e 63 74 69 6f 6e 73 20 77  time.functions w
1b890 69 6c 6c 20 72 65 61 6c 6c 79 20 61 63 63 65 70  ill really accep
1b8a0 74 20 61 73 20 6d 61 6e 79 20 6f 72 20 61 73 20  t as many or as 
1b8b0 66 65 77 20 64 69 67 69 74 73 20 61 73 20 61 72  few digits as ar
1b8c0 65 20 6e 65 63 65 73 73 61 72 79 20 74 6f 0a 72  e necessary to.r
1b8d0 65 70 72 65 73 65 6e 74 20 74 68 65 20 4a 75 6c  epresent the Jul
1b8e0 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 2e 0a  ian day number..
1b8f0 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69  </p>..<h3>Modifi
1b900 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ers</h3>..<p>^Th
1b910 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61  e time string ca
1b920 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  n be followed by
1b930 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f   zero or more mo
1b940 64 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c  difiers that .al
1b950 74 65 72 20 64 61 74 65 20 61 6e 64 2f 6f 72 20  ter date and/or 
1b960 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64 69  time. ^Each modi
1b970 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66  fier.is a transf
1b980 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
1b990 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20   applied to the 
1b9a0 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69 74  time value to it
1b9b0 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65  s left..^Modifie
1b9c0 72 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 66  rs are applied f
1b9d0 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
1b9e0 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f  t; order is impo
1b9f0 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61  rtant..^(The ava
1ba00 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73  ilable modifiers
1ba10 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e   are as follows.
1ba20 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  </p>..<ol>.<li> 
1ba30 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e  NNN days.<li> NN
1ba40 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e  N hours.<li> NNN
1ba50 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e   minutes.<li> NN
1ba60 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c  N.NNNN seconds.<
1ba70 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c  li> NNN months.<
1ba80 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c  li> NNN years.<l
1ba90 69 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74  i> start of mont
1baa0 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20  h.<li> start of 
1bab0 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20  year.<li> start 
1bac0 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b  of day.<li> week
1bad0 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65  day N.<li> unixe
1bae0 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74  poch.<li> localt
1baf0 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f  ime.<li> utc .</
1bb00 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66  ol>)^..<p>^The f
1bb10 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69 65  irst six modifie
1bb20 72 73 20 28 31 20 74 68 72 6f 75 67 68 20 36 29  rs (1 through 6)
1bb30 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68 65   .simply add the
1bb40 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75 6e   specified amoun
1bb50 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68 65  t of time to the
1bb60 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 0a   date and time .
1bb70 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
1bb80 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73   preceding times
1bb90 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69  tring and modifi
1bba0 65 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20  ers..^Note that 
1bbb0 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e  "&plusmn;NNN mon
1bbc0 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65  ths" works by re
1bbd0 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67  ndering the orig
1bbe0 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74  inal date into.t
1bbf0 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f  he YYYY-MM-DD fo
1bc00 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65  rmat, adding the
1bc10 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20   &plusmn;NNN to 
1bc20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c  the MM month val
1bc30 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69  ue, then.normali
1bc40 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e  zing the result.
1bc50 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78 61    ^Thus, for exa
1bc60 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32  mple, the data 2
1bc70 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69  001-03-31 modifi
1bc80 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27  ed.by '+1 month'
1bc90 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64   initially yield
1bca0 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75  s 2001-04-31, bu
1bcb0 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73  t April only has
1bcc0 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20   30 days.so the 
1bcd0 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a  date is normaliz
1bce0 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31  ed to 2001-05-01
1bcf0 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65 66  .  ^A similar ef
1bd00 66 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e  fect occurs when
1bd10 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61  .the original da
1bd20 74 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32  te is February 2
1bd30 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20  9 of a leapyear 
1bd40 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72  and the modifier
1bd50 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65   is.&plusmn;N ye
1bd60 61 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e  ars where N is n
1bd70 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66  ot a multiple of
1bd80 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   four.</p>..<p>^
1bd90 54 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d  The "start of" m
1bda0 6f 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f  odifiers (7 thro
1bdb0 75 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65  ugh 9) shift the
1bdc0 20 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20   date backwards 
1bdd0 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  .to the beginnin
1bde0 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  g of the current
1bdf0 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20   month, year or 
1be00 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  day.</p>..<p>^Th
1be10 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69  e "weekday" modi
1be20 66 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68  fier advances th
1be30 65 20 64 61 74 65 20 66 6f 72 77 61 72 64 20 74  e date forward t
1be40 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20  o the next date 
1be50 0a 77 68 65 72 65 20 74 68 65 20 77 65 65 6b 64  .where the weekd
1be60 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20  ay number is N. 
1be70 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e  Sunday is 0, Mon
1be80 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f  day is 1, and so
1be90 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e   forth.</p>..<p>
1bea0 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22  ^The "unixepoch"
1beb0 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f   modifier (11) o
1bec0 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20  nly works if it 
1bed0 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
1bee0 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e  ows .a timestrin
1bef0 67 20 69 6e 20 74 68 65 20 44 44 44 44 44 44 44  g in the DDDDDDD
1bf00 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68  DDD format. .^Th
1bf10 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73  is modifier caus
1bf20 65 73 20 74 68 65 20 44 44 44 44 44 44 44 44 44  es the DDDDDDDDD
1bf30 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65  D to be interpre
1bf40 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75  ted not .as a Ju
1bf50 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20  lian day number 
1bf60 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77  as it normally w
1bf70 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a  ould be, but as.
1bf80 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1bf90 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e  edia.org/wiki/Un
1bfa0 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54  ix_time | Unix T
1bfb0 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62  ime] - the .numb
1bfc0 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
1bfd0 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20 74 68  nce 1970.  If th
1bfe0 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
1bff0 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a  difier does not.
1c000 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72  follow a timestr
1c010 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ing of the form 
1c020 44 44 44 44 44 44 44 44 44 44 20 77 68 69 63 68  DDDDDDDDDD which
1c030 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6e   expresses the n
1c040 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73  umber.of seconds
1c050 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69   since 1970 or i
1c060 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72  f other modifier
1c070 73 0a 73 65 70 61 72 61 74 65 20 74 68 65 20 22  s.separate the "
1c080 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
1c090 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44  ier from prior D
1c0a0 44 44 44 44 44 44 44 44 44 20 74 68 65 6e 20 74  DDDDDDDDD then t
1c0b0 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75  he.behavior is u
1c0c0 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74 6f  ndefined..Due to
1c0d0 20 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69 74   precision limit
1c0e0 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20 62  ations imposed b
1c0f0 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
1c100 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34 2d  tions use.of 64-
1c110 62 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74 68  bit integers, th
1c120 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
1c130 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b  difier only work
1c140 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77  s for.dates betw
1c150 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30  een 0000-01-01 0
1c160 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32  0:00:00 and 5352
1c170 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20  -11-01 10:52:47 
1c180 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d  (unix times.of -
1c190 36 32 31 36 37 32 31 39 32 30 30 20 74 68 72 6f  62167219200 thro
1c1a0 75 67 68 20 31 30 36 37 35 31 39 39 31 36 37 29  ugh 10675199167)
1c1b0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  .</p>..<p>^The "
1c1c0 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66  localtime" modif
1c1d0 69 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73  ier (12) assumes
1c1e0 20 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67   the time string
1c1f0 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20   to its left is 
1c200 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f  in.Universal Coo
1c210 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55  rdinated Time (U
1c220 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20  TC) and adjusts 
1c230 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20  the time.string 
1c240 73 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c  so that it displ
1c250 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20  ays localtime.  
1c260 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66  If "localtime".f
1c270 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68  ollows a time th
1c280 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74  at is not UTC, t
1c290 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
1c2a0 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e   is undefined..^
1c2b0 28 54 68 65 20 22 75 74 63 22 20 69 73 20 74 68  (The "utc" is th
1c2c0 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22 6c  e opposite of "l
1c2d0 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22 75 74 63  ocaltime".  "utc
1c2e0 22 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 74  " assumes that t
1c2f0 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73  he string.to its
1c300 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65 20   left is in the 
1c310 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61  local timezone a
1c320 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61 74 20  nd adjusts that 
1c330 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20  string to be in 
1c340 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72  UTC.)^.If the pr
1c350 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f  ior string is no
1c360 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20  t in localtime, 
1c370 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
1c380 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65  of "utc" is.unde
1c390 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  fined.</p>..<h3>
1c3a0 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e  Examples</h3>..^
1c3b0 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1c3c0 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e  current date.<p>
1c3d0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
1c3e0 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29  LECT date('now')
1c3f0 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ;</blockquote>)^
1c400 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1c410 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74  he last day of t
1c420 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68  he current month
1c430 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1c440 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27  te>SELECT date('
1c450 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d  now','start of m
1c460 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27  onth','+1 month'
1c470 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c  ,'-1 day');.</bl
1c480 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1c490 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  p>Compute the da
1c4a0 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65  te and time give
1c4b0 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61  n a unix timesta
1c4c0 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f  mp 1092941466.</
1c4d0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1c4e0 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65  .    SELECT date
1c4f0 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c  time(1092941466,
1c500 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c   'unixepoch');.<
1c510 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1c520 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1c530 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67   date and time g
1c540 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65  iven a unix time
1c550 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36  stamp 1092941466
1c560 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74  , and .compensat
1c570 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c  e for your local
1c580 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a   timezone.</p>..
1c590 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1c5a0 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31  ELECT datetime(1
1c5b0 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78  092941466, 'unix
1c5c0 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69  epoch', 'localti
1c5d0 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  me');.</blockquo
1c5e0 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
1c5f0 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ute the current 
1c600 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c  unix timestamp.<
1c610 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1c620 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74  >.  SELECT strft
1c630 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b  ime('%s','now');
1c640 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1c650 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1c660 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79  he number of day
1c670 73 20 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e  s since the sign
1c680 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44 65  ing of the US De
1c690 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64  claration.of Ind
1c6a0 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a  ependence.</p>..
1c6b0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1c6c0 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28  ELECT julianday(
1c6d0 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64  'now') - juliand
1c6e0 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29  ay('1776-07-04')
1c6f0 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1c700 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1c710 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
1c720 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61  conds since a pa
1c730 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20  rticular moment 
1c740 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62  in 2004:</p>..<b
1c750 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
1c760 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
1c770 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74  ','now') - strft
1c780 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30  ime('%s','2004-0
1c790 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b  1-01 02:34:56');
1c7a0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1c7b0 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20  ..^(<p>.Compute 
1c7c0 74 68 65 20 64 61 74 65 20 6f 66 20 74 68 65 20  the date of the 
1c7d0 66 69 72 73 74 20 54 75 65 73 64 61 79 20 69 6e  first Tuesday in
1c7e0 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65   October.for the
1c7f0 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c   current year..<
1c800 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1c810 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 28  >.  SELECT date(
1c820 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20  'now','start of 
1c830 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73  year','+9 months
1c840 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a  ','weekday 2');.
1c850 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1c860 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1c870 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65  e time since the
1c880 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73   unix epoch in s
1c890 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74  econds .(like st
1c8a0 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77  rftime('%s','now
1c8b0 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64  ') except includ
1c8c0 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61  es fractional pa
1c8d0 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  rt):</p>..<block
1c8e0 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
1c8f0 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27  (julianday('now'
1c900 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38  ) - 2440587.5)*8
1c910 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71  6400.0;.</blockq
1c920 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76  uote>)^..<h3>Cav
1c930 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68  eats And Bugs</h
1c940 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75  3>..<p>The compu
1c950 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20  tation of local 
1c960 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61  time depends hea
1c970 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d  vily on the whim
1c980 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73   .of politicians
1c990 20 61 6e 64 20 69 73 20 74 68 75 73 20 64 69 66   and is thus dif
1c9a0 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f  ficult to get co
1c9b0 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c  rrect for .all l
1c9c0 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73  ocales. ^In this
1c9d0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
1c9e0 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
1c9f0 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f  library .functio
1ca00 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20  n localtime_r() 
1ca10 69 73 20 75 73 65 64 20 74 6f 20 61 73 73 69 73  is used to assis
1ca20 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61  t in the calcula
1ca30 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74  tion of .local t
1ca40 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63  ime.  ^(The .loc
1ca50 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e  altime_r() C fun
1ca60 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f  ction normally o
1ca70 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65  nly works for ye
1ca80 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30  ars.between 1970
1ca90 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64   and 2037. For d
1caa0 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 69  ates outside thi
1cab0 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20  s range, SQLite 
1cac0 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70  .attempts to map
1cad0 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61   the year into a
1cae0 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61  n equivalent yea
1caf0 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72  r within .this r
1cb00 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c  ange, do the cal
1cb10 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  culation, then m
1cb20 61 70 20 74 68 65 20 79 65 61 72 20 62 61 63 6b  ap the year back
1cb30 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54  .)^</p>...<p>^(T
1cb40 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  hese functions o
1cb50 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74  nly work for dat
1cb60 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
1cb70 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61  01-01 00:00:00.a
1cb80 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33  nd 9999-12-31 23
1cb90 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20  :59:59 (julidan 
1cba0 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31  day numbers 1721
1cbb0 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33  059.5 through 53
1cbc0 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20  73484.5).)^.For 
1cbd0 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68  dates outside th
1cbe0 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65  at range, the re
1cbf0 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66  sults of these.f
1cc00 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64  unctions are und
1cc10 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  efined.</p>..<p>
1cc20 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
1cc30 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79  s platforms only
1cc40 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74   support one set
1cc50 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a   of DST rules. .
1cc60 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f  Vista only suppo
1cc70 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f  rts two. Therefo
1cc80 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61  re, on these pla
1cc90 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69  tforms, .histori
1cca0 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74  cal DST calculat
1ccb0 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63  ions will be inc
1ccc0 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61  orrect. .For exa
1ccd0 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c  mple, in the US,
1cce0 20 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54   in 2007 the DST
1ccf0 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20   rules changed. 
1cd00 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f  .Non-Vista Windo
1cd10 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70  ws platforms app
1cd20 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20  ly the new 2007 
1cd30 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c  DST rules .to al
1cd40 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73  l previous years
1cd50 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20   as well. Vista 
1cd60 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65  does somewhat be
1cd70 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73  tter.getting res
1cd80 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63  ults correct bac
1cd90 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20  k to 1986, when 
1cda0 74 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61  the rules were a
1cdb0 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e  lso changed.</p>
1cdc0 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61  ..<p>All interna
1cdd0 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61  l computations a
1cde0 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70  ssume the .[http
1cdf0 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
1ce00 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69  org/wiki/Gregori
1ce10 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72  an_calendar | Gr
1ce20 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72  egorian calendar
1ce30 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73  ].system.  It is
1ce40 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68   also assumed th
1ce50 61 74 20 65 76 65 72 79 0a 64 61 79 20 69 73 20  at every.day is 
1ce60 65 78 61 63 74 6c 79 20 38 36 34 30 30 20 73 65  exactly 86400 se
1ce70 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f  conds in duratio
1ce80 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  n.</p>..<tcl>.##
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 23 23 23 23 23 23 23 23 23  ################
1ceb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ced0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1cee0 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20  tion {Aggregate 
1cef0 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75  Functions} aggfu
1cf00 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f  nc {*aggfunc}.</
1cf10 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67  tcl>..<p>.The ag
1cf20 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1cf30 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72  s shown below ar
1cf40 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64  e available by d
1cf50 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f  efault.  Additio
1cf60 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75  nal.aggregate fu
1cf70 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20  nctions written 
1cf80 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64 65  in C may be adde
1cf90 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73 71  d using the .[sq
1cfa0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
1cfb0 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49  ction()]</a>.API
1cfc0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61  .</p>..<p>.^In a
1cfd0 6e 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ny aggregate fun
1cfe0 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73  ction that takes
1cff0 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a single argume
1d000 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e  nt, that argumen
1d010 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64 65  t.can be precede
1d020 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64  d by the keyword
1d030 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20   DISTINCT.  ^In 
1d040 73 75 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c  such cases, dupl
1d050 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61  icate.elements a
1d060 72 65 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f  re filtered befo
1d070 72 65 20 62 65 69 6e 67 20 70 61 73 73 65 64 20  re being passed 
1d080 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  into the aggrega
1d090 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f  te function..^Fo
1d0a0 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66  r example, the f
1d0b0 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64  unction "count(d
1d0c0 69 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c  istinct X)" will
1d0d0 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
1d0e0 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76  er.of distinct v
1d0f0 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20  alues of column 
1d100 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  X instead of the
1d110 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
1d120 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73   non-null.values
1d130 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f   in column X..</
1d140 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
1d150 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
1d160 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65  10>.<tcl>.funcde
1d170 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76 67  f {avg(X)} {*avg
1d180 20 7b 61 76 67 28 29 20 61 67 67 72 65 67 61 74   {avg() aggregat
1d190 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
1d1a0 20 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e 63   ^The avg() func
1d1b0 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74  tion.  returns t
1d1c0 68 65 20 61 76 65 72 61 67 65 20 76 61 6c 75 65  he average value
1d1d0 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c   of all non-NULL
1d1e0 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e   <i>X</i> within
1d1f0 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53 74   a.  group.  ^St
1d200 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61  ring and BLOB va
1d210 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  lues that do not
1d220 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65   look like numbe
1d230 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70 72  rs are.  interpr
1d240 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54 68  eted as 0..  ^Th
1d250 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28  e result of avg(
1d260 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c  ) is always a fl
1d270 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
1d280 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20  ue as long as.  
1d290 61 74 20 74 68 65 72 65 20 69 73 20 61 74 20 6c  at there is at l
1d2a0 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c  east one non-NUL
1d2b0 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66 20  L input even if 
1d2c0 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72 65  all.  inputs are
1d2d0 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68 65   integers.  ^The
1d2e0 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29   result of avg()
1d2f0 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20   is NULL if and 
1d300 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65 20  only if.  there 
1d310 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
1d320 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e  inputs.  .}..fun
1d330 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20 63  cdef {count(X) c
1d340 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74  ount(*)} {*count
1d350 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67   {count() aggreg
1d360 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  ate function}} {
1d370 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58 29  .  ^The count(X)
1d380 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1d390 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20 74  s.  a count of t
1d3a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d  he number of tim
1d3b0 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f  es.  that <i>X</
1d3c0 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69  i> is not NULL i
1d3d0 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68 65  n a group.  ^The
1d3e0 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69   count(*) functi
1d3f0 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72  on.  (with no ar
1d400 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73  guments) returns
1d410 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
1d420 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
1d430 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64   group..}..funcd
1d440 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74  ef {group_concat
1d450 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  (X) group_concat
1d460 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75  (X,Y)} {.  *grou
1d470 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f  p_concat {group_
1d480 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67 61  concat() aggrega
1d490 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b  te function}.} {
1d4a0 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f  .  ^The group_co
1d4b0 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 20  ncat() function 
1d4c0 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69  returns.  a stri
1d4d0 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
1d4e0 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66  concatenation of
1d4f0 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  .  all non-NULL 
1d500 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f  values of <i>X</
1d510 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65 74  i>.  ^If paramet
1d520 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70  er <i>Y</i> is p
1d530 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69 74  resent then.  it
1d540 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
1d550 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74 77  separator.  betw
1d560 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f 66  een instances of
1d570 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63   <i>X</i>.  ^A c
1d580 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75 73  omma (",") is us
1d590 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61  ed as the separa
1d5a0 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69  tor.  if <i>Y</i
1d5b0 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20 54  > is omitted.  T
1d5c0 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20  he order of the 
1d5d0 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c 65  concatenated ele
1d5e0 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69 74  ments is.  arbit
1d5f0 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  rary..}..funcdef
1d600 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41   {max(X)} {*maxA
1d610 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20  ggFunc *agg_max 
1d620 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65  {max() aggregate
1d630 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1d640 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67 72 65  ^The max() aggre
1d650 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20  gate function.  
1d660 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69  returns the maxi
1d670 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  mum value of all
1d680 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
1d690 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78  roup..  ^The max
1d6a0 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68  imum value is th
1d6b0 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75  e value that wou
1d6c0 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 6c  ld be returned l
1d6d0 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45  ast in an.  ORDE
1d6e0 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d 65  R BY on the same
1d6f0 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65   column.  ^Aggre
1d700 67 61 74 65 20 6d 61 78 28 29 20 72 65 74 75 72  gate max() retur
1d710 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e  ns NULL .  if an
1d720 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20  d only if there 
1d730 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
1d740 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
1d750 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  oup..}..funcdef 
1d760 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67  {min(X)} {*minAg
1d770 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b  gFunc *agg_min {
1d780 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20  min() aggregate 
1d790 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
1d7a0 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65 67  The min() aggreg
1d7b0 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  ate function.  r
1d7c0 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d  eturns the minim
1d7d0 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  um non-NULL valu
1d7e0 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20  e of all values 
1d7f0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
1d800 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c  ^The minimum val
1d810 75 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20  ue is the first 
1d820 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74  non-NULL value t
1d830 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61 72  hat would appear
1d840 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42  .  in an ORDER B
1d850 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  Y of the column.
1d860 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 69  .  ^Aggregate mi
1d870 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  n() returns NULL
1d880 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
1d890 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
1d8a0 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69  -NULL.  values i
1d8b0 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a  n the group..}..
1d8c0 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20  funcdef {sum(X) 
1d8d0 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73  total(X)} {.  *s
1d8e0 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74  umFunc *sum *tot
1d8f0 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67 72  al.  {sum() aggr
1d900 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a  egate function}.
1d910 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72 65    {total() aggre
1d920 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d  gate function}.}
1d930 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29 20   {.  ^The sum() 
1d940 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67 72  and total() aggr
1d950 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a  egate functions.
1d960 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66 20    return sum of 
1d970 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
1d980 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
1d990 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61 72  ..  ^If there ar
1d9a0 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e  e no non-NULL in
1d9b0 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75  put rows then su
1d9c0 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55  m() returns.  NU
1d9d0 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72  LL but total() r
1d9e0 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55  eturns 0.0..  NU
1d9f0 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c  LL is not normal
1da00 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73  ly a helpful res
1da10 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20  ult for the sum 
1da20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74  of no rows.  but
1da30 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72   the SQL standar
1da40 64 20 72 65 71 75 69 72 65 73 20 69 74 20 61 6e  d requires it an
1da50 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 53  d most other.  S
1da60 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
1da70 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75  nes implement su
1da80 6d 28 29 20 74 68 61 74 20 77 61 79 20 73 6f 20  m() that way so 
1da90 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69  SQLite does it i
1daa0 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61 79  n the.  same way
1dab0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20   in order to be 
1dac0 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68  compatible.   Th
1dad0 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74  e non-standard t
1dae0 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a  otal() function.
1daf0 20 20 69 73 20 70 72 6f 76 69 64 65 64 20 61 73    is provided as
1db00 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61   a convenient wa
1db10 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64  y to work around
1db20 20 74 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f   this design pro
1db30 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53 51  blem.  in the SQ
1db40 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a  L language.</p>.
1db50 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c  .  <p>^The resul
1db60 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20  t of total() is 
1db70 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e  always a floatin
1db80 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20  g point value.. 
1db90 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
1dba0 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65  sum() is an inte
1dbb0 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c  ger value if all
1dbc0 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73   non-NULL inputs
1dbd0 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20   are integers.. 
1dbe0 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74   ^If any input t
1dbf0 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68  o sum() is neith
1dc00 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  er an integer or
1dc10 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73   a NULL.  then s
1dc20 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66  um() returns a f
1dc30 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
1dc40 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68  lue.  which migh
1dc50 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d  t be an approxim
1dc60 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75  ation to the tru
1dc70 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  e sum.</p>..  <p
1dc80 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72  >^Sum() will thr
1dc90 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f  ow an "integer o
1dca0 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69  verflow" excepti
1dcb0 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73  on if all inputs
1dcc0 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72 73 20  .  are integers 
1dcd0 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e  or NULL.  and an
1dce0 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f   integer overflo
1dcf0 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20  w occurs at any 
1dd00 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65  point during the
1dd10 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20   computation..  
1dd20 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74  ^Total() never t
1dd30 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72  hrows an integer
1dd40 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74   overflow..}.</t
1dd50 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74  cl>.</table>..<t
1dd60 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1dd70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dda0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ddb0 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52  ##.Section INSER
1ddc0 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54  T insert {INSERT
1ddd0 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 52 65 63 75   *INSERTs}..Recu
1dde0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
1ddf0 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 0a 3c  am insert-stmt.<
1de00 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  /tcl>..<p>The IN
1de10 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63  SERT statement c
1de20 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62 61  omes in three ba
1de30 73 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 75 6c  sic forms.  .<ul
1de40 3e 0a 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 66 69  >.<li><p>^The fi
1de50 72 73 74 20 66 6f 72 6d 20 28 77 69 74 68 20 74  rst form (with t
1de60 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77  he "VALUES" keyw
1de70 6f 72 64 29 20 63 72 65 61 74 65 73 20 6f 6e 65  ord) creates one
1de80 20 6f 72 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77   or more.new row
1de90 73 20 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67  s in.an existing
1dea0 20 74 61 62 6c 65 2e 20 5e 49 66 20 6e 6f 20 63   table. ^If no c
1deb0 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70  olumn-list is sp
1dec0 65 63 69 66 69 65 64 20 74 68 65 6e 20 74 68 65  ecified then the
1ded0 20 6e 75 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65   number.of value
1dee0 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
1def0 65 61 63 68 20 72 6f 77 0a 6d 75 73 74 20 62 65  each row.must be
1df00 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
1df10 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1df20 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
1df30 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 0a 74   ^In this case.t
1df40 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61  he result of eva
1df50 6c 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74  luating the left
1df60 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e  -most expression
1df70 20 66 72 6f 6d 20 65 61 63 68 20 74 65 72 6d 20   from each term 
1df80 6f 66 0a 74 68 65 20 56 41 4c 55 45 53 20 6c 69  of.the VALUES li
1df90 73 74 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  st is inserted i
1dfa0 6e 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  nto the left-mos
1dfb0 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 65 61 63 68  t column of each
1dfc0 20 6e 65 77 20 72 6f 77 2c 0a 61 6e 64 20 73 6f   new row,.and so
1dfd0 20 66 6f 72 74 68 20 66 6f 72 20 65 61 63 68 20   forth for each 
1dfe0 73 75 62 73 65 71 75 65 6e 74 20 65 78 70 72 65  subsequent expre
1dff0 73 73 69 6f 6e 2e 20 5e 49 66 20 61 0a 63 6f 6c  ssion. ^If a.col
1e000 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63  umn-list is spec
1e010 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20  ified, then the 
1e020 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73  number of values
1e030 20 69 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66   in each term of
1e040 20 74 68 65 0a 56 41 4c 55 45 20 6c 69 73 74 20   the.VALUE list 
1e050 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e  must match the n
1e060 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69  umber of.specifi
1e070 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63  ed columns. ^Eac
1e080 68 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 63  h of the named c
1e090 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65  olumns of the ne
1e0a0 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74  w row is populat
1e0b0 65 64 0a 77 69 74 68 20 74 68 65 20 72 65 73 75  ed.with the resu
1e0c0 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  lts of evaluatin
1e0d0 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
1e0e0 69 6e 67 20 56 41 4c 55 45 53 20 65 78 70 72 65  ing VALUES expre
1e0f0 73 73 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f  ssion. ^Table.co
1e100 6c 75 6d 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f  lumns that do no
1e110 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
1e120 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20  column list are 
1e130 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74  populated with t
1e140 68 65 20 64 65 66 61 75 6c 74 0a 63 6f 6c 75 6d  he default.colum
1e150 6e 20 76 61 6c 75 65 20 28 73 70 65 63 69 66 69  n value (specifi
1e160 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
1e170 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  e CREATE TABLE s
1e180 74 61 74 65 6d 65 6e 74 29 2c 20 6f 72 20 77 69  tatement), or wi
1e190 74 68 20 4e 55 4c 4c 20 69 66 0a 6e 6f 20 64 65  th NULL if.no de
1e1a0 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73  fault value is s
1e1b0 70 65 63 69 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c  pecified...<li><
1e1c0 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  p>The second for
1e1d0 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
1e1e0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74 61 69  statement contai
1e1f0 6e 73 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  ns a SELECT stat
1e200 65 6d 65 6e 74 0a 69 6e 73 74 65 61 64 20 6f 66  ement.instead of
1e210 20 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65   a VALUES clause
1e220 2e 20 5e 41 20 6e 65 77 20 65 6e 74 72 79 20 69  . ^A new entry i
1e230 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
1e240 74 68 65 20 74 61 62 6c 65 20 66 6f 72 20 65 61  the table for ea
1e250 63 68 0a 72 6f 77 20 6f 66 20 64 61 74 61 20 72  ch.row of data r
1e260 65 74 75 72 6e 65 64 20 62 79 20 65 78 65 63 75  eturned by execu
1e270 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20  ting the SELECT 
1e280 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 61  statement. ^If a
1e290 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a   column-list is.
1e2a0 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e  specified, the n
1e2b0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1e2c0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f   in the result o
1e2d0 66 20 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73  f the SELECT mus
1e2e0 74 20 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73  t be the same.as
1e2f0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69   the number of i
1e300 74 65 6d 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  tems in the colu
1e310 6d 6e 2d 6c 69 73 74 2e 20 5e 4f 74 68 65 72 77  mn-list. ^Otherw
1e320 69 73 65 2c 20 69 66 20 6e 6f 20 63 6f 6c 75 6d  ise, if no colum
1e330 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66  n-list is.specif
1e340 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  ied, the number 
1e350 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1e360 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
1e370 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74  SELECT must be t
1e380 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e  he same.as the n
1e390 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1e3a0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e   in the table. ^
1e3b0 41 6e 79 20 53 45 4c 45 43 54 20 73 74 61 74 65  Any SELECT state
1e3c0 6d 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a  ment, including.
1e3d0 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
1e3e0 73 5d 20 61 6e 64 20 53 45 4c 45 43 54 20 73 74  s] and SELECT st
1e3f0 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 5b 4f  atements with [O
1e400 52 44 45 52 20 42 59 5d 20 61 6e 64 2f 6f 72 20  RDER BY] and/or 
1e410 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 2c  [LIMIT] clauses,
1e420 20 0a 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e   .may be used in
1e430 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
1e440 6d 65 6e 74 20 6f 66 20 74 68 69 73 20 66 6f 72  ment of this for
1e450 6d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 74  m...<li><p>The t
1e460 68 69 72 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20  hird form of an 
1e470 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
1e480 20 69 73 20 77 69 74 68 20 44 45 46 41 55 4c 54   is with DEFAULT
1e490 20 56 41 4c 55 45 53 2e 0a 5e 28 54 68 65 20 49   VALUES..^(The I
1e4a0 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c  NSERT ... DEFAUL
1e4b0 54 20 56 41 4c 55 45 53 20 73 74 61 74 65 6d 65  T VALUES stateme
1e4c0 6e 74 20 69 6e 73 65 72 74 73 20 61 20 73 69 6e  nt inserts a sin
1e4d0 67 6c 65 20 6e 65 77 20 72 6f 77 20 69 6e 74 6f  gle new row into
1e4e0 20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65   the.named table
1e4f0 2e 29 5e 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e  .)^ ^Each column
1e500 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20   of the new row 
1e510 69 73 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74  is populated wit
1e520 68 20 69 74 73 20 64 65 66 61 75 6c 74 20 76 61  h its default va
1e530 6c 75 65 2c 0a 6f 72 20 77 69 74 68 20 61 20 4e  lue,.or with a N
1e540 55 4c 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c  ULL if no defaul
1e550 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69  t value is speci
1e560 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
1e570 74 68 65 20 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e  the column.defin
1e580 69 74 69 6f 6e 20 69 6e 20 74 68 65 20 43 52 45  ition in the CRE
1e590 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
1e5a0 65 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  ent...</ul>..<p>
1e5b0 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f  ^The optional co
1e5c0 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c  nflict-clause al
1e5d0 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69  lows the specifi
1e5e0 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74  cation of an alt
1e5f0 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61  ernative.constra
1e600 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
1e610 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
1e620 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20  m to use during 
1e630 74 68 69 73 20 6f 6e 65 20 49 4e 53 45 52 54 20  this one INSERT 
1e640 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65  command..See the
1e650 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a   section titled.
1e660 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f  [ON CONFLICT] fo
1e670 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
1e680 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f  ormation..For co
1e690 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
1e6a0 20 4d 79 53 51 4c 2c 20 5e 74 68 65 20 70 61 72   MySQL, ^the par
1e6b0 73 65 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75  ser allows the u
1e6c0 73 65 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65  se of the.single
1e6d0 20 6b 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66   keyword <a href
1e6e0 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68  ="lang_replace.h
1e6f0 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e  tml">REPLACE</a>
1e700 20 61 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f   as an .alias fo
1e710 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50  r "INSERT OR REP
1e720 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54 68 65  LACE"...<p>^(The
1e730 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 64 61   optional "<i>da
1e740 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c  tabase-name</i><
1e750 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78 20  b>.</b>" prefix 
1e760 6f 6e 20 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d  on the <i>table-
1e770 6e 61 6d 65 3c 2f 69 3e 0a 69 73 20 73 75 70 70  name</i>.is supp
1e780 6f 72 74 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65  ort for top-leve
1e790 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  l INSERT stateme
1e7a0 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68  nts only.)^  ^Th
1e7b0 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73  e table name mus
1e7c0 74 20 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64  t be.unqualified
1e7d0 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74   for INSERT stat
1e7e0 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75  ements that occu
1e7f0 72 20 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45  r within [CREATE
1e800 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
1e810 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79  ents..^Similarly
1e820 2c 20 74 68 65 20 22 44 45 46 41 55 4c 54 20 56  , the "DEFAULT V
1e830 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74  ALUES" form of t
1e840 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
1e850 65 6e 74 20 69 73 20 73 75 70 70 6f 72 74 65 64  ent is supported
1e860 20 66 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49   for.top-level I
1e870 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73  NSERT statements
1e880 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f   only and not fo
1e890 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  r INSERT stateme
1e8a0 6e 74 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67  nts within.trigg
1e8b0 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a  ers..<p>..<tcl>.
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 23 23 23 23 23 23 23 23  ################
1e8e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e8f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
1e910 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c  ection {ON CONFL
1e920 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66  ICT clause} conf
1e930 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20  lict {{conflict 
1e940 63 6c 61 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46  clause} {ON CONF
1e950 4c 49 43 54 7d 7d 0a 0a 52 65 63 75 72 73 69 76  LICT}}..Recursiv
1e960 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
1e970 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c  onflict-clause.<
1e980 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e  /tcl>..<p>The ON
1e990 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1e9a0 20 69 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61   is not a separa
1e9b0 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20  te SQL command. 
1e9c0 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61   It is a.non-sta
1e9d0 6e 64 61 72 64 20 63 6c 61 75 73 65 20 74 68 61  ndard clause tha
1e9e0 74 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20  t can appear in 
1e9f0 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63  many other SQL c
1ea00 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67  ommands..It is g
1ea10 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63  iven its own sec
1ea20 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63  tion in this doc
1ea30 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20 69 74  ument because it
1ea40 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20   is not.part of 
1ea50 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64  standard SQL and
1ea60 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74   therefore might
1ea70 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72   not be familiar
1ea80 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73  .</p>..<p>^The s
1ea90 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e  yntax for the ON
1eaa0 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1eab0 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f   is as shown abo
1eac0 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54  ve for.the CREAT
1ead0 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e  E TABLE command.
1eae0 20 20 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52    ^For the INSER
1eaf0 54 20 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d  T and.UPDATE com
1eb00 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f  mands, the keywo
1eb10 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  rds "ON CONFLICT
1eb20 22 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  " are replaced b
1eb30 79 20 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74  y "OR" so that.t
1eb40 68 65 20 73 79 6e 74 61 78 20 72 65 61 64 73 20  he syntax reads 
1eb50 6d 6f 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20  more naturally. 
1eb60 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e   For example, in
1eb70 73 74 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54  stead of."INSERT
1eb80 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e   ON CONFLICT IGN
1eb90 4f 52 45 22 20 77 65 20 68 61 76 65 20 22 49 4e  ORE" we have "IN
1eba0 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e  SERT OR IGNORE".
1ebb0 0a 54 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68  .The keywords ch
1ebc0 61 6e 67 65 20 62 75 74 20 74 68 65 20 6d 65 61  ange but the mea
1ebd0 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75  ning of the clau
1ebe0 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65  se is the same.e
1ebf0 69 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a  ither way.</p>..
1ec00 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
1ec10 43 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65  CT clause applie
1ec20 73 20 74 6f 20 55 4e 49 51 55 45 20 61 6e 64 20  s to UNIQUE and 
1ec30 4e 4f 54 20 4e 55 4c 4c 0a 63 6f 6e 73 74 72 61  NOT NULL.constra
1ec40 69 6e 74 73 20 28 61 6e 64 20 74 6f 20 50 52 49  ints (and to PRI
1ec50 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
1ec60 69 6e 74 73 20 77 68 69 63 68 20 66 6f 72 20 74  ints which for t
1ec70 68 65 20 70 75 72 70 6f 73 65 73 20 0a 6f 66 20  he purposes .of 
1ec80 74 68 69 73 20 73 65 63 74 69 6f 6e 20 61 72 65  this section are
1ec90 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20   the same thing 
1eca0 61 73 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  as UNIQUE constr
1ecb0 61 69 6e 74 73 29 2e 0a 54 68 65 20 4f 4e 20 43  aints)..The ON C
1ecc0 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
1ecd0 6d 20 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c 79  m does not.apply
1ece0 20 74 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45 59   to [FOREIGN KEY
1ecf0 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a 54   constraints]..T
1ed00 68 65 72 65 20 61 72 65 20 66 69 76 65 20 63 6f  here are five co
1ed10 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1ed20 6e 20 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f 69  n algorithm choi
1ed30 63 65 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41  ces:.ROLLBACK, A
1ed40 42 4f 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e 4f  BORT, FAIL, IGNO
1ed50 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e  RE, and REPLACE.
1ed60 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  .^The default co
1ed70 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1ed80 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41  n algorithm is A
1ed90 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77  BORT.  This.is w
1eda0 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f  hat they mean:</
1edb0 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e  p>..<dl>.<dt><b>
1edc0 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74  ROLLBACK</b></dt
1edd0 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
1ede0 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
1edf0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1ee00 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52  on occurs, the R
1ee10 4f 4c 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74 69  OLLBACK.resoluti
1ee20 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f  on algorithm abo
1ee30 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
1ee40 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69  SQL statement wi
1ee50 74 68 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e  th.an SQLITE_CON
1ee60 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e  STRAINT error an
1ee70 64 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68 65  d rolls back the
1ee80 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
1ee90 74 69 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72 61  tion..^If no tra
1eea0 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61 63 74 69  nsaction is.acti
1eeb0 76 65 20 28 6f 74 68 65 72 20 74 68 61 6e 20 74  ve (other than t
1eec0 68 65 20 69 6d 70 6c 69 65 64 20 74 72 61 6e 73  he implied trans
1eed0 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63  action that is c
1eee0 72 65 61 74 65 64 20 6f 6e 20 65 76 65 72 79 0a  reated on every.
1eef0 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74 68  command) then th
1ef00 65 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f 6c  e ROLLBACK resol
1ef10 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
1ef20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
1ef30 73 20 74 68 65 0a 41 42 4f 52 54 20 61 6c 67 6f  s the.ABORT algo
1ef40 72 69 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a  rithm.</p></dd>.
1ef50 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62  .<dt><b>ABORT</b
1ef60 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
1ef70 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
1ef80 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
1ef90 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
1efa0 74 68 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c 75  the ABORT.resolu
1efb0 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61  tion algorithm a
1efc0 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  borts the curren
1efd0 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  t SQL statement.
1efe0 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 43  with an SQLITE_C
1eff0 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20  ONSTRAINT error 
1f000 61 6e 64 20 62 61 63 6b 73 20 6f 75 74 20 61 6e  and backs out an
1f010 79 20 63 68 61 6e 67 65 73 0a 6d 61 64 65 20 62  y changes.made b
1f020 79 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  y the current SQ
1f030 4c 20 73 74 61 74 65 6d 65 6e 74 3b 20 62 75 74  L statement; but
1f040 20 63 68 61 6e 67 65 73 20 63 61 75 73 65 64 0a   changes caused.
1f050 62 79 20 70 72 69 6f 72 20 53 51 4c 20 73 74 61  by prior SQL sta
1f060 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1f070 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74  he same transact
1f080 69 6f 6e 20 61 72 65 20 70 72 65 73 65 72 76 65  ion are preserve
1f090 64 20 61 6e 64 20 74 68 65 0a 74 72 61 6e 73 61  d and the.transa
1f0a0 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63  ction remains ac
1f0b0 74 69 76 65 2e 0a 54 68 69 73 20 69 73 20 74 68  tive..This is th
1f0c0 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69  e default behavi
1f0d0 6f 72 20 61 6e 64 20 74 68 65 20 62 65 68 61 76  or and the behav
1f0e0 69 6f 72 20 73 70 65 63 69 66 69 65 64 20 62 79  ior specified by
1f0f0 20 74 68 65 20 53 51 4c 0a 73 74 61 6e 64 61 72   the SQL.standar
1f100 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  d.</p></dd>..<dt
1f110 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74  ><b>FAIL</b></dt
1f120 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
1f130 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
1f140 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1f150 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 46  on occurs, the F
1f160 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61  AIL.resolution a
1f170 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20  lgorithm aborts 
1f180 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20  the current SQL 
1f190 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 20 61  statement with a
1f1a0 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  n.SQLITE_CONSTRA
1f1b0 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e 42 75 74  INT error.  ^But
1f1c0 20 74 68 65 20 46 41 49 4c 20 72 65 73 6f 6c 75   the FAIL resolu
1f1d0 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 62 61  tion does not.ba
1f1e0 63 6b 20 6f 75 74 20 70 72 69 6f 72 20 63 68 61  ck out prior cha
1f1f0 6e 67 65 73 20 6f 66 20 74 68 65 20 53 51 4c 20  nges of the SQL 
1f200 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 66  statement that f
1f210 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65 73 0a 69  ailed nor does.i
1f220 74 20 65 6e 64 20 74 68 65 20 74 72 61 6e 73 61  t end the transa
1f230 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d  ction..^For exam
1f240 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44 41 54  ple, if an UPDAT
1f250 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f  E.statement enco
1f260 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73 74 72  untered a constr
1f270 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
1f280 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f 77 20  n the 100th row 
1f290 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70 74 73  that.it attempts
1f2a0 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68 65 6e   to update, then
1f2b0 20 74 68 65 20 66 69 72 73 74 20 39 39 20 72 6f   the first 99 ro
1f2c0 77 20 63 68 61 6e 67 65 73 20 61 72 65 20 70 72  w changes are pr
1f2d0 65 73 65 72 76 65 64 0a 62 75 74 20 63 68 61 6e  eserved.but chan
1f2e0 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30 30 20  ges to rows 100 
1f2f0 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76 65 72  and beyond never
1f300 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e   occur.</p></dd>
1f310 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c  ..<dt><b>IGNORE<
1f320 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
1f330 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63   ^When an applic
1f340 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  able constraint 
1f350 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
1f360 2c 20 0a 74 68 65 20 49 47 4e 4f 52 45 20 72 65  , .the IGNORE re
1f370 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
1f380 68 6d 20 73 6b 69 70 73 20 74 68 65 20 6f 6e 65  hm skips the one
1f390 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69   row that contai
1f3a0 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ns.the constrain
1f3b0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 6e 64 20  t violation and 
1f3c0 63 6f 6e 74 69 6e 75 65 73 20 70 72 6f 63 65 73  continues proces
1f3d0 73 69 6e 67 20 73 75 62 73 65 71 75 65 6e 74 20  sing subsequent 
1f3e0 72 6f 77 73 0a 6f 66 20 74 68 65 20 53 51 4c 20  rows.of the SQL 
1f3f0 73 74 61 74 65 6d 65 6e 74 20 61 73 20 69 66 20  statement as if 
1f400 6e 6f 74 68 69 6e 67 20 77 65 6e 74 20 77 72 6f  nothing went wro
1f410 6e 67 2e 0a 4f 74 68 65 72 20 72 6f 77 73 20 62  ng..Other rows b
1f420 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20  efore and after 
1f430 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e  the row that.con
1f440 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e 73 74  tained the const
1f450 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
1f460 61 72 65 20 69 6e 73 65 72 74 65 64 20 6f 72 20  are inserted or 
1f470 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79  updated.normally
1f480 2e 20 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20 72  . ^No error is r
1f490 65 74 75 72 6e 65 64 20 77 68 65 6e 20 74 68 65  eturned when the
1f4a0 20 49 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74   IGNORE conflict
1f4b0 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f   resolution.algo
1f4c0 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f  rithm is used.</
1f4d0 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
1f4e0 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e  REPLACE</b></dt>
1f4f0 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61  .<dd><p> ^When a
1f500 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
1f510 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1f520 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45  urs, the REPLACE
1f530 20 61 6c 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74   algorithm.delet
1f540 65 73 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  es pre-existing 
1f550 72 6f 77 73 20 74 68 61 74 20 61 72 65 20 63 61  rows that are ca
1f560 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72  using the constr
1f570 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70  aint violation.p
1f580 72 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e  rior to insertin
1f590 67 20 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68  g or updating th
1f5a0 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 6e  e current row an
1f5b0 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f  d the command co
1f5c0 6e 74 69 6e 75 65 73 20 0a 65 78 65 63 75 74 69  ntinues .executi
1f5d0 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66  ng normally..^If
1f5e0 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
1f5f0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1f600 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50   occurs, the REP
1f610 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65  LACE conflict.re
1f620 73 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63 65  solution replace
1f630 73 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65  s the NULL value
1f640 20 77 69 74 68 0a 74 68 65 20 64 65 66 61 75 6c   with.the defaul
1f650 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74  t value for that
1f660 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20 74   column, or if t
1f670 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f  he column has no
1f680 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20   default.value, 
1f690 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61  then the ABORT a
1f6a0 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
1f6b0 2e 0a 5e 49 66 20 61 20 43 48 45 43 4b 20 63 6f  ..^If a CHECK co
1f6c0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1f6d0 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52  on occurs, the R
1f6e0 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20  EPLACE conflict 
1f6f0 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72  resolution.algor
1f700 69 74 68 6d 20 61 6c 77 61 79 73 20 77 6f 72 6b  ithm always work
1f710 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70  s like ABORT.</p
1f720 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20  >..<p>^When the 
1f730 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
1f740 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61   resolution stra
1f750 74 65 67 79 20 64 65 6c 65 74 65 73 20 72 6f 77  tegy deletes row
1f760 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61  s in order to.sa
1f770 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72 61 69  tisfy a constrai
1f780 6e 74 2c 20 5b 43 52 45 41 54 45 20 54 52 49 47  nt, [CREATE TRIG
1f790 47 45 52 20 7c 20 64 65 6c 65 74 65 20 74 72 69  GER | delete tri
1f7a0 67 67 65 72 73 5d 20 66 69 72 65 20 69 66 20 61  ggers] fire if a
1f7b0 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75  nd only if.[recu
1f7c0 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 20 70  rsive_triggers p
1f7d0 72 61 67 6d 61 20 7c 20 72 65 63 75 72 73 69 76  ragma | recursiv
1f7e0 65 20 74 72 69 67 67 65 72 73 5d 20 61 72 65 20  e triggers] are 
1f7f0 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  enabled.</p>..<p
1f800 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 75  >^The [sqlite3_u
1f810 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64  pdate_hook | upd
1f820 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74  ate hook] is not
1f830 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77   invoked for row
1f840 73 20 74 68 61 74 0a 61 72 65 20 64 65 6c 65 74  s that.are delet
1f850 65 64 20 62 79 20 74 68 65 20 52 45 50 4c 41 43  ed by the REPLAC
1f860 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  E conflict resol
1f870 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 2e 20  ution strategy. 
1f880 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41   ^Nor does.REPLA
1f890 43 45 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65  CE increment the
1f8a0 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   [sqlite3_change
1f8b0 73 20 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  s | change count
1f8c0 65 72 5d 2e 0a 54 68 65 20 65 78 63 65 70 74 69  er]..The excepti
1f8d0 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73 20 64  onal behaviors d
1f8e0 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20 70  efined in this p
1f8f0 61 72 61 67 72 61 70 68 20 6d 69 67 68 74 20 63  aragraph might c
1f900 68 61 6e 67 65 20 0a 69 6e 20 61 20 66 75 74 75  hange .in a futu
1f910 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a  re release.</p>.
1f920 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61  </dl>..<p>^The a
1f930 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
1f940 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c 61  ed in the OR cla
1f950 75 73 65 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  use of an INSERT
1f960 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72 72   or UPDATE.overr
1f970 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69 74  ides any algorit
1f980 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  hm specified in 
1f990 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a  a CREATE TABLE..
1f9a0 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d  ^If no algorithm
1f9b0 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
1f9c0 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52  ywhere, the ABOR
1f9d0 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  T algorithm is u
1f9e0 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  sed.</p>..<tcl>.
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 23 23 23 23 23 23 23 23  ################
1fa10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fa20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fa30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
1fa40 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72  ection REINDEX r
1fa50 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a 0a  eindex REINDEX..
1fa60 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
1fa70 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d 73  iagram reindex-s
1fa80 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
1fa90 54 68 65 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d  The REINDEX comm
1faa0 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 64  and is used to d
1fab0 65 6c 65 74 65 20 61 6e 64 20 72 65 63 72 65 61  elete and recrea
1fac0 74 65 20 69 6e 64 69 63 65 73 20 66 72 6f 6d 20  te indices from 
1fad0 73 63 72 61 74 63 68 2e 0a 54 68 69 73 20 69 73  scratch..This is
1fae0 20 75 73 65 66 75 6c 20 77 68 65 6e 20 74 68 65   useful when the
1faf0 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
1fb00 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1fb10 6e 63 65 20 68 61 73 20 63 68 61 6e 67 65 64 2e  nce has changed.
1fb20 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  .</p>..<p>^If th
1fb30 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72  e REINDEX keywor
1fb40 64 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65  d is not followe
1fb50 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  d by a collation
1fb60 2d 73 65 71 75 65 6e 63 65 20 6f 72 20 64 61 74  -sequence or dat
1fb70 61 62 61 73 65 20 0a 6f 62 6a 65 63 74 20 69 64  abase .object id
1fb80 65 6e 74 69 66 69 65 72 2c 20 74 68 65 6e 20 61  entifier, then a
1fb90 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c  ll indices in al
1fba0 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
1fbb0 61 73 65 73 20 61 72 65 20 72 65 62 75 69 6c 74  ases are rebuilt
1fbc0 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45  ...<p>^If the RE
1fbd0 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73  INDEX keyword is
1fbe0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
1fbf0 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63  ollation-sequenc
1fc00 65 20 6e 61 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c  e name, then.all
1fc10 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20   indices in all 
1fc20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1fc30 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20  es that use the 
1fc40 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20  named collation 
1fc50 73 65 71 75 65 6e 63 65 73 0a 61 72 65 20 72 65  sequences.are re
1fc60 63 72 65 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f  created. ..<p>^O
1fc70 72 2c 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  r, if the argume
1fc80 6e 74 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  nt attached to t
1fc90 68 65 20 52 45 49 4e 44 45 58 20 69 64 65 6e 74  he REINDEX ident
1fca0 69 66 69 65 73 20 61 20 73 70 65 63 69 66 69 63  ifies a specific
1fcb0 20 0a 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   .database table
1fcc0 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63  , then all indic
1fcd0 65 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  es attached to t
1fce0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
1fcf0 65 20 61 72 65 20 72 65 62 75 69 6c 74 2e 20 0a  e are rebuilt. .
1fd00 5e 49 66 20 69 74 20 69 64 65 6e 74 69 66 69 65  ^If it identifie
1fd10 73 20 61 20 73 70 65 63 69 66 69 63 20 64 61 74  s a specific dat
1fd20 61 62 61 73 65 20 69 6e 64 65 78 2c 20 74 68 65  abase index, the
1fd30 6e 20 6a 75 73 74 20 74 68 61 74 20 69 6e 64 65  n just that inde
1fd40 78 20 69 73 20 72 65 63 72 65 61 74 65 64 2e 0a  x is recreated..
1fd50 0a 3c 70 3e 5e 49 66 20 6e 6f 20 3c 69 3e 64 61  .<p>^If no <i>da
1fd60 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20  tabase-name</i> 
1fd70 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 64  is specified and
1fd80 20 74 68 65 72 65 20 65 78 69 73 74 73 20 62 6f   there exists bo
1fd90 74 68 20 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e  th a table or.in
1fda0 64 65 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74  dex and a collat
1fdb0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20  ion sequence of 
1fdc0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 61  the specified na
1fdd0 6d 65 2c 20 53 51 4c 69 74 65 20 69 6e 74 65 72  me, SQLite inter
1fde0 70 72 65 74 73 0a 74 68 69 73 20 61 73 20 61 20  prets.this as a 
1fdf0 72 65 71 75 65 73 74 20 74 6f 20 72 65 62 75 69  request to rebui
1fe00 6c 64 20 74 68 65 20 69 6e 64 69 63 65 73 20 74  ld the indices t
1fe10 68 61 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65  hat use the name
1fe20 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
1fe30 65 6e 63 65 2e 0a 54 68 69 73 20 61 6d 62 69 67  ence..This ambig
1fe40 75 69 74 79 20 69 6e 20 74 68 65 20 73 79 6e 74  uity in the synt
1fe50 61 78 20 6d 61 79 20 62 65 20 61 76 6f 69 64 65  ax may be avoide
1fe60 64 20 62 79 20 61 6c 77 61 79 73 20 73 70 65 63  d by always spec
1fe70 69 66 79 69 6e 67 20 61 0a 3c 69 3e 64 61 74 61  ifying a.<i>data
1fe80 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68  base-name</i> wh
1fe90 65 6e 20 72 65 69 6e 64 65 78 69 6e 67 20 61 20  en reindexing a 
1fea0 73 70 65 63 69 66 69 63 20 74 61 62 6c 65 20 6f  specific table o
1feb0 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a  r index...<tcl>.
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 23 23 23 23 23 23 23  ################
1fee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ff00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
1ff10 53 65 63 74 69 6f 6e 20 52 45 50 4c 41 43 45 20  Section REPLACE 
1ff20 72 65 70 6c 61 63 65 20 52 45 50 4c 41 43 45 0a  replace REPLACE.
1ff30 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
1ff40 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64   REPLACE command
1ff50 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   is an alias for
1ff60 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49   the "[ON CONFLI
1ff70 43 54 20 7c 20 49 4e 53 45 52 54 20 4f 52 20 52  CT | INSERT OR R
1ff80 45 50 4c 41 43 45 5d 22 0a 76 61 72 69 61 6e 74  EPLACE]".variant
1ff90 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d   of the [INSERT]
1ffa0 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73   command.  .This
1ffb0 20 61 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64   alias is provid
1ffc0 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69  ed for compatibi
1ffd0 6c 69 74 79 20 6f 74 68 65 72 20 53 51 4c 20 64  lity other SQL d
1ffe0 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e  atabase engines.
1fff0 20 20 53 65 65 20 74 68 65 20 0a 5b 49 4e 53 45    See the .[INSE
20000 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75  RT] command docu
20010 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
20020 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
20030 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63  tion.</p>  ..<tc
20040 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
20050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20090 23 23 0a 53 65 63 74 69 6f 6e 20 7b 57 49 54 48  ##.Section {WITH
200a0 20 63 6c 61 75 73 65 7d 20 77 69 74 68 20 7b 7b   clause} with {{
200b0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
200c0 72 65 73 73 69 6f 6e 73 7d 20 57 49 54 48 7d 0a  ressions} WITH}.
200d0 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
200e0 44 69 61 67 72 61 6d 20 77 69 74 68 2d 63 6c 61  Diagram with-cla
200f0 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43  use.</tcl>..<p>C
20100 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72  ommon Table Expr
20110 65 73 73 69 6f 6e 73 20 6f 72 20 43 54 45 73 20  essions or CTEs 
20120 61 63 74 20 6c 69 6b 65 20 74 65 6d 70 6f 72 61  act like tempora
20130 72 79 20 5b 76 69 65 77 73 5d 20 74 68 61 74 20  ry [views] that 
20140 65 78 69 73 74 0a 6f 6e 6c 79 20 66 6f 72 20 74  exist.only for t
20150 68 65 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61  he duration of a
20160 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74   single SQL stat
20170 65 6d 65 6e 74 2e 20 20 54 68 65 72 65 20 61 72  ement.  There ar
20180 65 20 74 77 6f 20 6b 69 6e 64 73 20 6f 66 0a 63  e two kinds of.c
20190 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
201a0 65 73 73 69 6f 6e 73 3a 20 22 6f 72 64 69 6e 61  essions: "ordina
201b0 72 79 22 20 61 6e 64 20 22 72 65 63 75 72 73 69  ry" and "recursi
201c0 76 65 22 2e 20 4f 72 64 69 6e 61 72 79 20 0a 63  ve". Ordinary .c
201d0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
201e0 65 73 73 69 6f 6e 73 20 61 72 65 20 68 65 6c 70  essions are help
201f0 66 75 6c 20 66 6f 72 20 6d 61 6b 69 6e 67 0a 71  ful for making.q
20200 75 65 72 69 65 73 20 65 61 73 69 65 72 20 74 6f  ueries easier to
20210 20 75 6e 64 65 72 73 74 61 6e 64 20 62 79 20 66   understand by f
20220 61 63 74 6f 72 69 6e 67 0a 73 75 62 71 75 65 72  actoring.subquer
20230 69 65 73 20 6f 75 74 20 6f 66 20 74 68 65 20 6d  ies out of the m
20240 61 69 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ain SQL statemen
20250 74 2e 0a 52 65 63 75 72 73 69 76 65 20 63 6f 6d  t..Recursive com
20260 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
20270 73 69 6f 6e 73 0a 70 72 6f 76 69 64 65 20 74 68  sions.provide th
20280 65 20 61 62 69 6c 69 74 79 20 74 6f 20 64 6f 20  e ability to do 
20290 68 69 65 72 61 72 63 68 69 63 61 6c 20 6f 72 0a  hierarchical or.
202a0 72 65 63 75 72 73 69 76 65 20 71 75 65 72 69 65  recursive querie
202b0 73 20 6f 66 20 74 72 65 65 73 20 61 6e 64 20 67  s of trees and g
202c0 72 61 70 68 73 2c 20 61 20 63 61 70 61 62 69 6c  raphs, a capabil
202d0 69 74 79 0a 74 68 61 74 20 69 73 20 6e 6f 74 20  ity.that is not 
202e0 6f 74 68 65 72 77 69 73 65 20 61 76 61 69 6c 61  otherwise availa
202f0 62 6c 65 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  ble in the SQL l
20300 61 6e 67 75 61 67 65 2e 0a 0a 3c 70 3e 41 6c 6c  anguage...<p>All
20310 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
20320 70 72 65 73 73 69 6f 6e 73 20 28 6f 72 64 69 6e  pressions (ordin
20330 61 72 79 20 61 6e 64 20 72 65 63 75 72 73 69 76  ary and recursiv
20340 65 29 20 61 72 65 20 0a 63 72 65 61 74 65 64 20  e) are .created 
20350 62 79 20 70 72 65 70 65 6e 64 69 6e 67 20 61 20  by prepending a 
20360 57 49 54 48 20 63 6c 61 75 73 65 20 69 6e 20 66  WITH clause in f
20370 72 6f 6e 74 20 6f 66 20 61 20 5b 53 45 4c 45 43  ront of a [SELEC
20380 54 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 5b 44  T], [INSERT], [D
20390 45 4c 45 54 45 5d 2c 0a 6f 72 20 5b 55 50 44 41  ELETE],.or [UPDA
203a0 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  TE] statement.  
203b0 41 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  A single WITH cl
203c0 61 75 73 65 20 63 61 6e 20 73 70 65 63 69 66 79  ause can specify
203d0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d   one or more.com
203e0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
203f0 73 69 6f 6e 73 2c 20 73 6f 6d 65 20 6f 66 20 77  sions, some of w
20400 68 69 63 68 20 61 72 65 20 6f 72 64 69 6e 61 72  hich are ordinar
20410 79 20 61 6e 64 20 73 6f 6d 65 20 6f 66 20 77 68  y and some of wh
20420 69 63 68 0a 61 72 65 20 72 65 63 75 72 73 69 76  ich.are recursiv
20430 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e...<tcl>hd_frag
20440 6d 65 6e 74 20 6f 72 64 69 6e 61 72 79 63 74 65  ment ordinarycte
20450 20 7b 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f   {ordinary commo
20460 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
20470 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f  ons}</tcl>.<h3>O
20480 72 64 69 6e 61 72 79 20 43 6f 6d 6d 6f 6e 20 54  rdinary Common T
20490 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73  able Expressions
204a0 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6e 20 6f 72 64  </h3>..<p>An ord
204b0 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62  inary common tab
204c0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 77 6f  le expression wo
204d0 72 6b 73 20 61 73 20 69 66 20 69 74 20 77 65 72  rks as if it wer
204e0 65 20 61 20 5b 76 69 65 77 5d 20 74 68 61 74 0a  e a [view] that.
204f0 65 78 69 73 74 73 20 66 6f 72 20 74 68 65 20 64  exists for the d
20500 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e  uration of a sin
20510 67 6c 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  gle statement.  
20520 4f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  Ordinary common 
20530 74 61 62 6c 65 0a 65 78 70 72 65 73 73 69 6f 6e  table.expression
20540 73 20 61 72 65 20 75 73 65 66 75 6c 20 66 6f 72  s are useful for
20550 20 66 61 63 74 6f 72 69 6e 67 20 6f 75 74 20 73   factoring out s
20560 75 62 71 75 65 72 69 65 73 20 61 6e 64 20 6d 61  ubqueries and ma
20570 6b 69 6e 67 20 74 68 65 20 6f 76 65 72 61 6c 6c  king the overall
20580 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 65  .SQL statement e
20590 61 73 69 65 72 20 74 6f 20 72 65 61 64 20 61 6e  asier to read an
205a0 64 20 75 6e 64 65 72 73 74 61 6e 64 2e 0a 0a 3c  d understand...<
205b0 70 3e 41 20 57 49 54 48 20 63 6c 61 75 73 65 20  p>A WITH clause 
205c0 63 61 6e 20 63 6f 6e 74 61 69 6e 20 6f 72 64 69  can contain ordi
205d0 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  nary common tabl
205e0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  e expressions ev
205f0 65 6e 20 69 66 0a 69 74 20 69 6e 63 6c 75 64 65  en if.it include
20600 73 20 74 68 65 20 52 45 43 55 52 53 49 56 45 20  s the RECURSIVE 
20610 6b 65 79 77 6f 72 64 2e 20 20 54 68 65 20 75 73  keyword.  The us
20620 65 20 6f 66 20 52 45 43 55 52 53 49 56 45 20 64  e of RECURSIVE d
20630 6f 65 73 20 6e 6f 74 20 66 6f 72 63 65 0a 63 6f  oes not force.co
20640 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
20650 73 73 69 6f 6e 73 20 74 6f 20 62 65 20 72 65 63  ssions to be rec
20660 75 72 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 68  ursive...<tcl>.h
20670 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 63 75 72  d_fragment recur
20680 73 69 76 65 63 74 65 20 7b 72 65 63 75 72 73 69  sivecte {recursi
20690 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve common table 
206a0 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b  expressions} \.{
206b0 72 65 63 75 72 73 69 76 65 20 71 75 65 72 79 7d  recursive query}
206c0 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 65 63 75  .</tcl>.<h3>Recu
206d0 72 73 69 76 65 20 43 6f 6d 6d 6f 6e 20 54 61 62  rsive Common Tab
206e0 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f  le Expressions</
206f0 68 33 3e 0a 0a 3c 70 3e 41 20 72 65 63 75 72 73  h3>..<p>A recurs
20700 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ive common table
20710 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20   expression can 
20720 62 65 20 75 73 65 64 20 74 6f 20 77 72 69 74 65  be used to write
20730 20 61 20 71 75 65 72 79 20 74 68 61 74 0a 77 61   a query that.wa
20740 6c 6b 73 20 61 20 74 72 65 65 20 6f 72 20 67 72  lks a tree or gr
20750 61 70 68 2e 20 20 41 20 72 65 63 75 72 73 69 76  aph.  A recursiv
20760 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
20770 78 70 72 65 73 73 69 6f 6e 20 68 61 73 20 74 68  xpression has th
20780 65 20 73 61 6d 65 0a 62 61 73 69 63 20 73 79 6e  e same.basic syn
20790 74 61 78 20 61 73 20 61 6e 20 6f 72 64 69 6e 61  tax as an ordina
207a0 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ry common table 
207b0 65 78 70 72 65 73 73 69 6f 6e 2c 20 62 75 74 20  expression, but 
207c0 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69  with the followi
207d0 6e 67 0a 61 64 64 69 74 69 6f 6e 61 6c 20 66 65  ng.additional fe
207e0 61 74 75 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c  atures:..<ol>.<l
207f0 69 3e 20 54 68 65 20 22 5b 73 65 6c 65 63 74 2d  i> The "[select-
20800 73 74 6d 74 5d 22 0a 20 20 20 20 20 6d 75 73 74  stmt]".     must
20810 20 62 65 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20   be a [compound 
20820 73 65 6c 65 63 74 5d 20 77 68 65 72 65 20 74 68  select] where th
20830 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 63 6f  e right-most [co
20840 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72 5d  mpound-operator]
20850 20 69 73 0a 20 20 20 20 20 65 69 74 68 65 72 20   is.     either 
20860 55 4e 49 4f 4e 20 6f 72 20 55 4e 49 4f 4e 20 41  UNION or UNION A
20870 4c 4c 2e 0a 3c 6c 69 3e 20 54 68 65 20 74 61 62  LL..<li> The tab
20880 6c 65 20 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20  le named on the 
20890 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f  left-hand side o
208a0 66 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64  f the AS keyword
208b0 20 6d 75 73 74 20 61 70 70 65 61 72 0a 20 20 20   must appear.   
208c0 20 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69    exactly once i
208d0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
208e0 65 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d  e of the right-m
208f0 6f 73 74 20 53 45 4c 45 43 54 20 73 74 61 74 65  ost SELECT state
20900 6d 65 6e 74 0a 20 20 20 20 20 6f 66 20 74 68 65  ment.     of the
20910 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74   compound select
20920 2c 20 61 6e 64 20 6e 6f 77 68 65 72 65 20 65 6c  , and nowhere el
20930 73 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f  se..</ol>..<p>To
20940 20 70 75 74 20 69 74 20 61 6e 6f 74 68 65 72 20   put it another 
20950 77 61 79 2c 20 61 20 72 65 63 75 72 73 69 76 65  way, a recursive
20960 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
20970 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f  pression must.lo
20980 6f 6b 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c  ok like the foll
20990 6f 77 69 6e 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63  owing:..<tcl>Rec
209a0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
209b0 72 61 6d 20 72 65 63 75 72 73 69 76 65 2d 63 74  ram recursive-ct
209c0 65 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 65 20 72  e</tcl>..<p>We r
209d0 65 66 65 72 20 74 6f 20 74 68 65 20 74 61 62 6c  efer to the tabl
209e0 65 20 6e 61 6d 65 64 20 62 79 20 74 68 65 20 63  e named by the c
209f0 74 65 2d 74 61 62 6c 65 2d 6e 61 6d 65 20 69 6e  te-table-name in
20a00 20 61 20 72 65 63 75 72 73 69 76 65 0a 63 6f 6d   a recursive.com
20a10 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
20a20 73 69 6f 6e 20 61 73 20 74 68 65 20 22 72 65 63  sion as the "rec
20a30 75 72 73 69 76 65 20 74 61 62 6c 65 22 2e 0a 49  ursive table"..I
20a40 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  n the recursive-
20a50 63 74 65 20 62 75 62 62 6c 65 20 64 69 61 67 72  cte bubble diagr
20a60 61 6d 20 61 62 6f 76 65 2c 20 74 68 65 20 72 65  am above, the re
20a70 63 75 72 73 69 76 65 0a 74 61 62 6c 65 20 6d 75  cursive.table mu
20a80 73 74 20 61 70 70 65 61 72 20 65 78 61 63 74 6c  st appear exactl
20a90 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52  y once in the FR
20aa0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  OM clause of the
20ab0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
20ac0 74 0a 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20 61  t.and must not a
20ad0 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20 65  ppear anywhere e
20ae0 6c 73 65 20 69 6e 20 65 69 74 68 65 72 20 74 68  lse in either th
20af0 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  e initial-select
20b00 20 6f 72 20 74 68 65 0a 72 65 63 75 72 73 69 76   or the.recursiv
20b10 65 2d 73 65 6c 65 63 74 2c 20 69 6e 63 6c 75 64  e-select, includ
20b20 69 6e 67 20 73 75 62 71 75 65 72 69 65 73 2e 20  ing subqueries. 
20b30 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c   The initial-sel
20b40 65 63 74 20 6d 61 79 20 62 65 0a 61 20 5b 63 6f  ect may be.a [co
20b50 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2c 20  mpound select], 
20b60 62 75 74 20 69 74 20 6d 61 79 20 6e 6f 74 20 69  but it may not i
20b70 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45 52 20  nclude an ORDER 
20b80 42 59 2c 20 4c 49 4d 49 54 2c 20 6f 72 20 4f 46  BY, LIMIT, or OF
20b90 46 53 45 54 2e 0a 54 68 65 20 72 65 63 75 72 73  FSET..The recurs
20ba0 69 76 65 2d 73 65 6c 65 63 74 20 6d 75 73 74 20  ive-select must 
20bb0 62 65 20 61 20 73 69 6d 70 6c 65 20 73 65 6c 65  be a simple sele
20bc0 63 74 2c 20 6e 6f 74 20 61 20 63 6f 6d 70 6f 75  ct, not a compou
20bd0 6e 64 2e 20 20 54 68 65 0a 72 65 63 75 72 73 69  nd.  The.recursi
20be0 76 65 2d 73 65 6c 65 63 74 20 69 73 20 61 6c 6c  ve-select is all
20bf0 6f 77 65 64 20 74 6f 20 69 6e 63 6c 75 64 65 20  owed to include 
20c00 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d  an ORDER BY, LIM
20c10 49 54 2c 20 61 6e 64 2f 6f 72 20 4f 46 46 53 45  IT, and/or OFFSE
20c20 54 2e 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63  T...<p>The basic
20c30 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 63   algorithm for c
20c40 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 63 6f 6e  omputing the con
20c50 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75  tent of the recu
20c60 72 73 69 76 65 20 74 61 62 6c 65 0a 69 73 20 61  rsive table.is a
20c70 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e  s follows:..<ol>
20c80 0a 3c 6c 69 3e 20 52 75 6e 20 74 68 65 20 69 6e  .<li> Run the in
20c90 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 61 6e 64  itial-select and
20ca0 20 61 64 64 20 74 68 65 20 72 65 73 75 6c 74 73   add the results
20cb0 20 74 6f 20 61 20 71 75 65 75 65 2e 0a 3c 6c 69   to a queue..<li
20cc0 3e 20 57 68 69 6c 65 20 74 68 65 20 71 75 65 75  > While the queu
20cd0 65 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 3a 0a  e is not empty:.
20ce0 3c 6f 6c 20 74 79 70 65 3d 22 61 22 3e 0a 3c 6c  <ol type="a">.<l
20cf0 69 3e 20 45 78 74 72 61 63 74 20 61 20 73 69 6e  i> Extract a sin
20d00 67 6c 65 20 72 6f 77 20 66 72 6f 6d 20 74 68 65  gle row from the
20d10 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e 73   queue..<li> Ins
20d20 65 72 74 20 74 68 61 74 20 73 69 6e 67 6c 65 20  ert that single 
20d30 72 6f 77 20 69 6e 74 6f 20 74 68 65 20 72 65 63  row into the rec
20d40 75 72 73 69 76 65 20 74 61 62 6c 65 0a 3c 6c 69  ursive table.<li
20d50 3e 20 50 72 65 74 65 6e 64 20 74 68 61 74 20 74  > Pretend that t
20d60 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6a 75  he single row ju
20d70 73 74 20 65 78 74 72 61 63 74 65 64 20 69 73 20  st extracted is 
20d80 74 68 65 20 6f 6e 6c 79 0a 20 20 20 20 20 72 6f  the only.     ro
20d90 77 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69  w in the recursi
20da0 76 65 20 74 61 62 6c 65 20 61 6e 64 20 72 75 6e  ve table and run
20db0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
20dc0 65 6c 65 63 74 2c 0a 20 20 20 20 20 61 64 64 69  elect,.     addi
20dd0 6e 67 20 61 6c 6c 20 72 65 73 75 6c 74 73 20 74  ng all results t
20de0 6f 20 74 68 65 20 71 75 65 75 65 2e 0a 3c 2f 6f  o the queue..</o
20df0 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65  l>.</ol>..<p>The
20e00 20 62 61 73 69 63 20 70 72 6f 63 65 64 75 72 65   basic procedure
20e10 20 61 62 6f 76 65 20 6d 61 79 20 6d 6f 64 69 66   above may modif
20e20 69 65 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f  ied by the follo
20e30 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20  wing additional 
20e40 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69  rules:..<ul>.<li
20e50 3e 3c 70 3e 0a 20 20 49 66 20 61 20 55 4e 49 4f  ><p>.  If a UNIO
20e60 4e 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 6e 65  N operator conne
20e70 63 74 73 20 74 68 65 20 69 6e 69 74 69 61 6c 2d  cts the initial-
20e80 73 65 6c 65 63 74 20 77 69 74 68 20 74 68 65 0a  select with the.
20e90 20 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65    recursive-sele
20ea0 63 74 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 64  ct, then only ad
20eb0 64 20 72 6f 77 73 20 74 6f 20 74 68 65 20 71 75  d rows to the qu
20ec0 65 75 65 20 69 66 20 6e 6f 20 69 64 65 6e 74 69  eue if no identi
20ed0 63 61 6c 20 72 6f 77 20 68 61 73 0a 20 20 62 65  cal row has.  be
20ee0 65 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 61 64  en previously ad
20ef0 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65  ded to the queue
20f00 2e 20 20 52 65 70 65 61 74 65 64 20 72 6f 77 73  .  Repeated rows
20f10 20 61 72 65 20 64 69 73 63 61 72 64 65 64 20 62   are discarded b
20f20 65 66 6f 72 65 20 62 65 69 6e 67 0a 20 20 61 64  efore being.  ad
20f30 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65  ded to the queue
20f40 20 65 76 65 6e 20 69 66 20 74 68 65 20 72 65 70   even if the rep
20f50 65 61 74 65 64 20 72 6f 77 73 20 68 61 76 65 20  eated rows have 
20f60 61 6c 72 65 61 64 79 20 62 65 65 6e 20 65 78 74  already been ext
20f70 72 61 63 74 65 64 0a 20 20 66 72 6f 6d 20 74 68  racted.  from th
20f80 65 20 71 75 65 75 65 20 62 79 20 74 68 65 20 72  e queue by the r
20f90 65 63 75 72 73 69 6f 6e 20 73 74 65 70 2e 20 20  ecursion step.  
20fa0 49 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  If the operator 
20fb0 69 73 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20  is UNION ALL,.  
20fc0 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 67 65  then all rows ge
20fd0 6e 65 72 61 74 65 64 20 62 79 20 62 6f 74 68 20  nerated by both 
20fe0 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  the initial-sele
20ff0 63 74 20 61 6e 64 20 74 68 65 0a 20 20 72 65 63  ct and the.  rec
21000 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 61 72  ursive-select ar
21010 65 20 61 6c 77 61 79 73 20 61 64 64 65 64 20 74  e always added t
21020 6f 20 74 68 65 20 71 75 65 75 65 20 65 76 65 6e  o the queue even
21030 20 69 66 20 74 68 65 79 20 61 72 65 20 72 65 70   if they are rep
21040 65 61 74 73 2e 0a 20 20 57 68 65 6e 20 64 65 74  eats..  When det
21050 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 72 6f  ermining if a ro
21060 77 20 69 73 20 72 65 70 65 61 74 65 64 2c 20 4e  w is repeated, N
21070 55 4c 4c 20 76 61 6c 75 65 73 20 63 6f 6d 70 61  ULL values compa
21080 72 65 0a 20 20 65 71 75 61 6c 20 74 6f 20 6f 6e  re.  equal to on
21090 65 20 61 6e 6f 74 68 65 72 20 61 6e 64 20 6e 6f  e another and no
210a0 74 20 65 71 75 61 6c 20 74 6f 20 61 6e 79 20 6f  t equal to any o
210b0 74 68 65 72 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e  ther value..<li>
210c0 3c 70 3e 0a 20 20 54 68 65 20 4c 49 4d 49 54 20  <p>.  The LIMIT 
210d0 63 6c 61 75 73 65 2c 20 69 66 20 70 72 65 73 65  clause, if prese
210e0 6e 74 2c 20 64 65 74 65 72 6d 69 6e 65 73 20 74  nt, determines t
210f0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
21100 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 20  r of rows that. 
21110 20 77 69 6c 6c 20 65 76 65 72 20 62 65 20 61 64   will ever be ad
21120 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
21130 73 69 76 65 20 74 61 62 6c 65 20 69 6e 20 73 74  sive table in st
21140 65 70 20 32 62 2e 0a 20 20 4f 6e 63 65 20 74 68  ep 2b..  Once th
21150 65 20 6c 69 6d 69 74 20 69 73 20 72 65 61 63 68  e limit is reach
21160 65 64 2c 20 74 68 65 20 72 65 63 75 72 73 69 6f  ed, the recursio
21170 6e 20 73 74 6f 70 73 2e 0a 20 20 41 20 6c 69 6d  n stops..  A lim
21180 69 74 20 6f 66 20 7a 65 72 6f 20 6d 65 61 6e 73  it of zero means
21190 20 74 68 61 74 20 6e 6f 20 72 6f 77 73 20 61 72   that no rows ar
211a0 65 20 65 76 65 72 20 61 64 64 65 64 20 74 6f 20  e ever added to 
211b0 74 68 65 0a 20 20 72 65 63 75 72 73 69 76 65 20  the.  recursive 
211c0 74 61 62 6c 65 2c 20 61 6e 64 20 61 20 6e 65 67  table, and a neg
211d0 61 74 69 76 65 20 6c 69 6d 69 74 20 6d 65 61 6e  ative limit mean
211e0 73 20 61 6e 20 75 6e 6c 69 6d 69 74 65 64 20 6e  s an unlimited n
211f0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 20 20  umber of rows.  
21200 6d 61 79 20 62 65 20 61 64 64 65 64 20 74 6f 20  may be added to 
21210 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61  the recursive ta
21220 62 6c 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54  ble..<li><p>.  T
21230 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
21240 2c 20 69 66 20 69 74 20 69 73 20 70 72 65 73 65  , if it is prese
21250 6e 74 20 61 6e 64 20 68 61 73 20 61 20 70 6f 73  nt and has a pos
21260 69 74 69 76 65 20 76 61 6c 75 65 20 4e 2c 20 70  itive value N, p
21270 72 65 76 65 6e 74 73 20 74 68 65 0a 20 20 66 69  revents the.  fi
21280 72 73 74 20 4e 20 72 6f 77 73 20 66 72 6f 6d 20  rst N rows from 
21290 62 65 69 6e 67 20 61 64 64 65 64 20 74 6f 20 74  being added to t
212a0 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
212b0 6c 65 2e 0a 20 20 54 68 65 20 66 69 72 73 74 20  le..  The first 
212c0 4e 20 72 6f 77 73 20 61 72 65 20 73 74 69 6c 6c  N rows are still
212d0 20 70 72 6f 63 65 73 73 65 64 20 62 79 20 74 68   processed by th
212e0 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
212f0 63 74 3b 20 74 68 65 79 0a 20 20 6a 75 73 74 20  ct; they.  just 
21300 61 72 65 20 6e 6f 74 20 61 64 64 65 64 20 74 6f  are not added to
21310 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
21320 61 62 6c 65 2e 20 20 52 6f 77 73 20 61 72 65 20  able.  Rows are 
21330 6e 6f 74 20 63 6f 75 6e 74 65 64 20 74 6f 77 61  not counted towa
21340 72 64 0a 20 20 66 75 6c 66 69 6c 6c 69 6e 67 20  rd.  fulfilling 
21350 74 68 65 20 4c 49 4d 49 54 20 75 6e 74 69 6c 20  the LIMIT until 
21360 61 6c 6c 20 4f 46 46 53 45 54 20 72 6f 77 73 20  all OFFSET rows 
21370 68 61 76 65 20 62 65 65 6e 20 73 6b 69 70 70 65  have been skippe
21380 64 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20  d..<li><p>.  If 
21390 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
213a0 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 69  se is present, i
213b0 74 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  t determines the
213c0 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
213d0 72 6f 77 73 0a 20 20 61 72 65 20 65 78 74 72 61  rows.  are extra
213e0 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75  cted from the qu
213f0 65 75 65 20 69 6e 20 73 74 65 70 20 32 61 2e 20  eue in step 2a. 
21400 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
21410 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
21420 0a 20 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  .  then the orde
21430 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20  r in which rows 
21440 61 72 65 20 65 78 74 72 61 63 74 65 64 20 69 73  are extracted is
21450 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 28 49 6e   undefined.  (In
21460 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 69   the current.  i
21470 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
21480 68 65 20 71 75 65 75 65 20 62 65 63 6f 6d 65 73  he queue becomes
21490 20 61 20 46 49 46 4f 20 69 66 20 74 68 65 20 4f   a FIFO if the O
214a0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
214b0 73 20 6f 6d 69 74 74 65 64 2c 0a 20 20 62 75 74  s omitted,.  but
214c0 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68   applications sh
214d0 6f 75 6c 64 20 6e 6f 74 20 64 65 70 65 6e 64 20  ould not depend 
214e0 6f 6e 20 74 68 61 74 20 66 61 63 74 20 73 69 6e  on that fact sin
214f0 63 65 20 69 74 20 6d 69 67 68 74 20 63 68 61 6e  ce it might chan
21500 67 65 2e 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  ge.).</ul>..<tcl
21510 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65  >hd_fragment rce
21520 78 31 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65 63  x1</tcl>.<h4>Rec
21530 75 72 73 69 76 65 20 51 75 65 72 79 20 45 78 61  ursive Query Exa
21540 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  mples</h4>..<p>T
21550 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65  he following que
21560 72 79 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 69  ry returns all i
21570 6e 74 65 67 65 72 73 20 62 65 74 77 65 65 6e 20  ntegers between 
21580 31 20 61 6e 64 20 31 30 30 30 30 30 30 3a 0a 0a  1 and 1000000:..
21590 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
215a0 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
215b0 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28 56 41  .  cnt(x) AS (VA
215c0 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c  LUES(1) UNION AL
215d0 4c 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f  L SELECT x+1 FRO
215e0 4d 20 63 6e 74 20 57 48 45 52 45 20 78 3c 31 30  M cnt WHERE x<10
215f0 30 30 30 30 30 29 0a 53 45 4c 45 43 54 20 78 20  00000).SELECT x 
21600 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e  FROM cnt;.</pre>
21610 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
21620 70 3e 43 6f 6e 73 69 64 65 72 20 68 6f 77 20 74  p>Consider how t
21630 68 69 73 20 71 75 65 72 79 20 77 6f 72 6b 73 2e  his query works.
21640 20 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65    The initial-se
21650 6c 65 63 74 0a 72 75 6e 73 20 66 69 72 73 74 20  lect.runs first 
21660 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 73 69  and returns a si
21670 6e 67 6c 65 20 72 6f 77 0a 77 69 74 68 20 61 20  ngle row.with a 
21680 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 22 31  single column "1
21690 22 2e 20 20 54 68 69 73 20 6f 6e 65 20 72 6f 77  ".  This one row
216a0 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
216b0 20 71 75 65 75 65 2e 20 20 49 6e 0a 73 74 65 70   queue.  In.step
216c0 20 32 61 2c 20 74 68 61 74 20 6f 6e 65 20 72 6f   2a, that one ro
216d0 77 20 69 73 20 65 78 74 72 61 63 74 65 64 20 66  w is extracted f
216e0 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 61 6e  rom the queue an
216f0 64 20 61 64 64 65 64 20 74 6f 20 22 63 6e 74 22  d added to "cnt"
21700 2e 0a 54 68 65 6e 20 74 68 65 20 72 65 63 75 72  ..Then the recur
21710 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72  sive-select is r
21720 75 6e 20 69 6e 20 61 63 63 6f 72 64 61 6e 63 65  un in accordance
21730 20 77 69 74 68 20 73 74 65 70 20 32 63 20 67 65   with step 2c ge
21740 6e 65 72 61 74 69 6e 67 0a 61 20 73 69 6e 67 6c  nerating.a singl
21750 65 20 6e 65 77 20 72 6f 77 20 77 69 74 68 20 76  e new row with v
21760 61 6c 75 65 20 22 32 22 20 74 6f 20 61 64 64 20  alue "2" to add 
21770 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 54  to the queue.  T
21780 68 65 20 71 75 65 75 65 20 73 74 69 6c 6c 0a 68  he queue still.h
21790 61 73 20 6f 6e 65 20 72 6f 77 2c 20 73 6f 20 73  as one row, so s
217a0 74 65 70 20 32 20 72 65 70 65 61 74 73 2e 20 20  tep 2 repeats.  
217b0 54 68 65 20 22 32 22 20 72 6f 77 20 69 73 20 65  The "2" row is e
217c0 78 74 72 61 63 74 65 64 20 61 6e 64 20 61 64 64  xtracted and add
217d0 65 64 20 74 6f 20 74 68 65 0a 72 65 63 75 72 73  ed to the.recurs
217e0 69 76 65 20 74 61 62 6c 65 20 62 79 20 73 74 65  ive table by ste
217f0 70 73 20 32 61 20 61 6e 64 20 32 62 2e 20 20 54  ps 2a and 2b.  T
21800 68 65 6e 20 74 68 65 20 72 6f 77 20 63 6f 6e 74  hen the row cont
21810 61 69 6e 69 6e 67 20 32 20 69 73 20 75 73 65 64  aining 2 is used
21820 20 0a 61 73 20 69 66 20 69 74 20 77 65 72 65 20   .as if it were 
21830 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e  the complete con
21840 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75  tent of the recu
21850 72 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20  rsive table and 
21860 74 68 65 20 0a 72 65 63 75 72 73 69 76 65 2d 73  the .recursive-s
21870 65 6c 65 63 74 20 69 73 20 72 75 6e 20 61 67 61  elect is run aga
21880 69 6e 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e  in, resulting in
21890 20 61 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75   a row with valu
218a0 65 20 22 33 22 20 62 65 69 6e 67 20 61 64 64 65  e "3" being adde
218b0 64 0a 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20  d.to the queue. 
218c0 20 54 68 69 73 20 72 65 70 65 61 74 73 20 39 39   This repeats 99
218d0 39 39 39 39 20 74 69 6d 65 73 20 75 6e 74 69 6c  9999 times until
218e0 20 66 69 6e 61 6c 6c 79 20 61 74 20 73 74 65 70   finally at step
218f0 20 32 61 20 74 68 65 0a 6f 6e 6c 79 20 76 61 6c   2a the.only val
21900 75 65 20 6f 6e 20 74 68 65 20 71 75 65 75 65 20  ue on the queue 
21910 69 73 20 61 20 72 6f 77 20 63 6f 6e 74 61 69 6e  is a row contain
21920 69 6e 67 20 31 30 30 30 30 30 30 2e 20 20 54 68  ing 1000000.  Th
21930 61 74 20 72 6f 77 20 69 73 0a 65 78 74 72 61 63  at row is.extrac
21940 74 65 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f  ted and added to
21950 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
21960 61 62 6c 65 2e 20 20 42 75 74 20 74 68 69 73 20  able.  But this 
21970 74 69 6d 65 2c 20 74 68 65 0a 57 48 45 52 45 20  time, the.WHERE 
21980 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 74 68  clause causes th
21990 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
219a0 63 74 20 74 6f 20 72 65 74 75 72 6e 20 6e 6f 20  ct to return no 
219b0 72 6f 77 73 2c 20 73 6f 20 74 68 65 0a 71 75 65  rows, so the.que
219c0 75 65 20 72 65 6d 61 69 6e 73 20 65 6d 70 74 79  ue remains empty
219d0 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73 69   and the recursi
219e0 6f 6e 20 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62  on stops...<p><b
219f0 3e 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f  >Optimization no
21a00 74 65 3a 3c 2f 62 3e 0a 49 6e 20 74 68 65 20 64  te:</b>.In the d
21a10 69 73 63 75 73 73 69 6f 6e 20 61 62 6f 76 65 2c  iscussion above,
21a20 20 73 74 61 74 65 6d 65 6e 74 73 20 6c 69 6b 65   statements like
21a30 20 22 69 6e 73 65 72 74 20 74 68 65 20 72 6f 77   "insert the row
21a40 20 69 6e 74 6f 0a 74 68 65 20 72 65 63 75 72 73   into.the recurs
21a50 69 76 65 20 74 61 62 6c 65 22 20 73 68 6f 75 6c  ive table" shoul
21a60 64 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 20  d be understood 
21a70 63 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 6e 6f  conceptually, no
21a80 74 20 6c 69 74 65 72 61 6c 6c 79 2e 0a 49 74 20  t literally..It 
21a90 73 6f 75 6e 64 73 20 61 73 20 69 66 20 53 51 4c  sounds as if SQL
21aa0 69 74 65 20 69 73 20 61 63 63 75 6d 75 6c 61 74  ite is accumulat
21ab0 69 6e 67 20 61 20 68 75 67 65 20 74 61 62 6c 65  ing a huge table
21ac0 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20  .containing one 
21ad0 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2c 20 74 68  million rows, th
21ae0 65 6e 20 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e  en going back an
21af0 64 20 73 63 61 6e 6e 69 6e 67 20 74 68 61 74 20  d scanning that 
21b00 74 61 62 6c 65 0a 66 72 6f 6d 20 74 6f 70 20 74  table.from top t
21b10 6f 20 62 6f 74 74 6f 6d 20 74 6f 20 67 65 6e 65  o bottom to gene
21b20 72 61 74 65 20 74 68 65 20 72 65 73 75 6c 74 2e  rate the result.
21b30 20 20 57 68 61 74 20 72 65 61 6c 6c 79 20 68 61    What really ha
21b40 70 70 65 6e 73 0a 69 73 20 74 68 61 74 20 74 68  ppens.is that th
21b50 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
21b60 72 20 73 65 65 73 20 74 68 61 74 20 76 61 6c 75  r sees that valu
21b70 65 73 20 69 6e 20 74 68 65 0a 22 63 6e 74 22 20  es in the."cnt" 
21b80 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20  recursive table 
21b90 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 6f 6e  are only used on
21ba0 63 65 2e 20 20 53 6f 20 61 73 20 65 61 63 68 20  ce.  So as each 
21bb0 72 6f 77 20 69 73 20 61 64 64 65 64 20 74 6f 0a  row is added to.
21bc0 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61  the recursive ta
21bd0 62 6c 65 2c 20 74 68 61 74 20 72 6f 77 20 69 73  ble, that row is
21be0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 74   immediately ret
21bf0 75 72 6e 65 64 20 61 73 20 61 20 72 65 73 75 6c  urned as a resul
21c00 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 53 45  t of the main.SE
21c10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61  LECT statement a
21c20 6e 64 20 74 68 65 6e 20 64 69 73 63 61 72 64 65  nd then discarde
21c30 64 2e 20 20 53 51 4c 69 74 65 20 64 6f 65 73 20  d.  SQLite does 
21c40 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63  <em>not</em> acc
21c50 75 6d 75 6c 61 74 65 0a 61 20 74 65 6d 70 6f 72  umulate.a tempor
21c60 61 72 79 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ary table contai
21c70 6e 69 6e 67 20 61 20 6d 69 6c 6c 69 6f 6e 20 72  ning a million r
21c80 6f 77 73 2e 20 20 56 65 72 79 20 6c 69 74 74 6c  ows.  Very littl
21c90 65 20 6d 65 6d 6f 72 79 20 69 73 0a 6e 65 65 64  e memory is.need
21ca0 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 61 62  ed to run the ab
21cb0 6f 76 65 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f  ove example.  Ho
21cc0 77 65 76 65 72 2c 20 69 66 20 74 68 65 20 65 78  wever, if the ex
21cd0 61 6d 70 6c 65 20 68 61 64 20 75 73 65 64 0a 55  ample had used.U
21ce0 4e 49 4f 4e 20 69 6e 73 74 65 61 64 20 6f 66 20  NION instead of 
21cf0 55 4e 49 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e 20  UNION ALL, then 
21d00 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 68 61 76  SQLite would hav
21d10 65 20 68 61 64 20 74 6f 20 6b 65 65 70 20 61 72  e had to keep ar
21d20 6f 75 6e 64 0a 61 6c 6c 20 70 72 65 76 69 6f 75  ound.all previou
21d30 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 63 6f  sly generated co
21d40 6e 74 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74  ntent in order t
21d50 6f 20 63 68 65 63 6b 20 66 6f 72 20 64 75 70 6c  o check for dupl
21d60 69 63 61 74 65 73 2e 0a 46 6f 72 20 74 68 69 73  icates..For this
21d70 20 72 65 61 73 6f 6e 2c 20 70 72 6f 67 72 61 6d   reason, program
21d80 6d 65 72 73 20 73 68 6f 75 6c 64 20 73 74 72 69  mers should stri
21d90 76 65 20 74 6f 20 75 73 65 20 55 4e 49 4f 4e 20  ve to use UNION 
21da0 41 4c 4c 20 69 6e 73 74 65 61 64 0a 6f 66 20 55  ALL instead.of U
21db0 4e 49 4f 4e 20 77 68 65 6e 20 66 65 61 73 69 62  NION when feasib
21dc0 6c 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20  le...<p>Here is 
21dd0 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74  a variation on t
21de0 68 65 20 70 72 65 76 69 6f 75 73 20 65 78 61 6d  he previous exam
21df0 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ple:..<blockquot
21e00 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
21e10 55 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20  URSIVE.  cnt(x) 
21e20 41 53 20 28 0a 20 20 20 20 20 53 45 4c 45 43 54  AS (.     SELECT
21e30 20 31 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c   1.     UNION AL
21e40 4c 0a 20 20 20 20 20 53 45 4c 45 43 54 20 78 2b  L.     SELECT x+
21e50 31 20 46 52 4f 4d 20 63 6e 74 0a 20 20 20 20 20  1 FROM cnt.     
21e60 20 4c 49 4d 49 54 20 31 30 30 30 30 30 30 0a 20   LIMIT 1000000. 
21e70 20 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d   ).SELECT x FROM
21e80 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c   cnt;.</pre></bl
21e90 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
21ea0 65 72 65 20 61 72 65 20 74 77 6f 20 64 69 66 66  ere are two diff
21eb0 65 72 65 6e 63 65 73 20 69 6e 20 74 68 69 73 20  erences in this 
21ec0 76 61 72 69 61 74 69 6f 6e 2e 20 20 54 68 65 20  variation.  The 
21ed0 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 69  initial-select i
21ee0 73 0a 22 53 45 4c 45 43 54 20 31 22 20 69 6e 73  s."SELECT 1" ins
21ef0 74 65 61 64 20 6f 66 20 22 56 41 4c 55 45 53 28  tead of "VALUES(
21f00 31 29 22 2e 20 20 42 75 74 20 74 68 6f 73 65 20  1)".  But those 
21f10 61 72 65 20 6a 75 73 74 20 64 69 66 66 65 72 65  are just differe
21f20 6e 74 0a 73 79 6e 74 61 78 65 73 20 66 6f 72 20  nt.syntaxes for 
21f30 73 61 79 69 6e 67 20 65 78 61 63 74 6c 79 20 74  saying exactly t
21f40 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20  he same thing.  
21f50 54 68 65 20 6f 74 68 65 72 20 63 68 61 6e 67 65  The other change
21f60 20 69 73 20 74 68 61 74 20 74 68 65 0a 72 65 63   is that the.rec
21f70 75 72 73 69 6f 6e 20 69 73 20 73 74 6f 70 70 65  ursion is stoppe
21f80 64 20 62 79 20 61 20 4c 49 4d 49 54 20 72 61 74  d by a LIMIT rat
21f90 68 65 72 20 74 68 61 6e 20 61 20 57 48 45 52 45  her than a WHERE
21fa0 20 63 6c 61 75 73 65 2e 20 20 54 68 65 20 75 73   clause.  The us
21fb0 65 20 6f 66 0a 4c 49 4d 49 54 20 6d 65 61 6e 73  e of.LIMIT means
21fc0 20 74 68 61 74 20 77 68 65 6e 20 74 68 65 20 6f   that when the o
21fd0 6e 65 2d 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f 77  ne-millionth row
21fe0 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
21ff0 20 22 63 6e 74 22 20 74 61 62 6c 65 0a 28 61 6e   "cnt" table.(an
22000 64 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  d returned by th
22010 65 20 6d 61 69 6e 20 53 45 4c 45 43 54 2c 20 74  e main SELECT, t
22020 68 61 6e 6b 73 20 74 6f 20 74 68 65 20 71 75 65  hanks to the que
22030 72 79 20 6f 70 74 69 6d 69 7a 65 72 29 0a 74 68  ry optimizer).th
22040 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  en the recursion
22050 20 73 74 6f 70 73 20 69 6d 6d 65 64 69 61 74 65   stops immediate
22060 6c 79 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  ly regardless of
22070 20 68 6f 77 20 6d 61 6e 79 20 72 6f 77 73 20 6d   how many rows m
22080 69 67 68 74 20 62 65 0a 6c 65 66 74 20 69 6e 20  ight be.left in 
22090 74 68 65 20 71 75 65 75 65 2e 20 20 4f 6e 20 6d  the queue.  On m
220a0 6f 72 65 20 63 6f 6d 70 6c 65 78 20 71 75 65 72  ore complex quer
220b0 69 65 73 2c 20 69 74 20 63 61 6e 20 73 6f 6d 65  ies, it can some
220c0 74 69 6d 65 73 20 62 65 0a 64 69 66 66 69 63 75  times be.difficu
220d0 6c 74 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61  lt to ensure tha
220e0 74 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  t the WHERE clau
220f0 73 65 20 77 69 6c 6c 20 65 76 65 6e 74 75 61 6c  se will eventual
22100 6c 79 20 63 61 75 73 65 20 74 68 65 0a 71 75 65  ly cause the.que
22110 75 65 20 74 6f 20 64 72 61 69 6e 20 61 6e 64 20  ue to drain and 
22120 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 74 6f  the recursion to
22130 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74   terminate.  But
22140 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
22150 65 20 77 69 6c 6c 0a 61 6c 77 61 79 73 20 73 74  e will.always st
22160 6f 70 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  op the recursion
22170 2e 20 20 53 6f 20 69 74 20 69 73 20 67 6f 6f 64  .  So it is good
22180 20 70 72 61 63 74 69 63 65 20 74 6f 20 61 6c 77   practice to alw
22190 61 79 73 20 69 6e 63 6c 75 64 65 20 61 0a 4c 49  ays include a.LI
221a0 4d 49 54 20 63 6c 61 75 73 65 20 61 73 20 61 20  MIT clause as a 
221b0 73 61 66 65 74 79 20 69 66 20 61 6e 20 75 70 70  safety if an upp
221c0 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
221d0 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 63 75  size of the recu
221e0 72 73 69 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e  rsion .is known.
221f0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
22200 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c  nt rcex2</tcl>.<
22210 68 34 3e 48 69 65 72 61 72 63 68 69 63 61 6c 20  h4>Hierarchical 
22220 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f  Query Examples</
22230 68 34 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72  h4>..<p>Consider
22240 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 64 65   a table that de
22250 73 63 72 69 62 65 73 20 74 68 65 20 6d 65 6d 62  scribes the memb
22260 65 72 73 20 6f 66 20 61 6e 20 6f 72 67 61 6e 69  ers of an organi
22270 7a 61 74 69 6f 6e 20 61 73 0a 77 65 6c 6c 20 61  zation as.well a
22280 73 20 74 68 65 20 63 68 61 69 6e 2d 6f 66 2d 63  s the chain-of-c
22290 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 20 74 68  ommand within th
222a0 61 74 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a  at organization:
222b0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
222c0 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
222d0 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58   org(.  name TEX
222e0 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20  T PRIMARY KEY,. 
222f0 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45 52   boss TEXT REFER
22300 45 4e 43 45 53 20 6f 72 67 2c 0a 20 20 68 65 69  ENCES org,.  hei
22310 67 68 74 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74  ght INT,.  -- ot
22320 68 65 72 20 63 6f 6e 74 65 6e 74 20 6f 6d 69 74  her content omit
22330 74 65 64 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ted.);.</pre></b
22340 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45  lockquote>..<p>E
22350 76 65 72 79 20 6d 65 6d 62 65 72 20 69 6e 20 74  very member in t
22360 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20  he organization 
22370 68 61 73 20 61 20 6e 61 6d 65 2c 20 61 6e 64 20  has a name, and 
22380 6d 6f 73 74 20 6d 65 6d 62 65 72 73 20 68 61 76  most members hav
22390 65 0a 61 20 73 69 6e 67 6c 65 20 62 6f 73 73 2e  e.a single boss.
223a0 20 20 28 54 68 65 20 68 65 61 64 20 6f 66 20 74    (The head of t
223b0 68 65 20 77 68 6f 6c 65 20 6f 72 67 61 6e 69 7a  he whole organiz
223c0 61 74 69 6f 6e 20 68 61 73 20 61 20 4e 55 4c 4c  ation has a NULL
223d0 0a 22 62 6f 73 73 22 20 66 69 65 6c 64 2e 29 20  ."boss" field.) 
223e0 54 68 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20  The rows of the 
223f0 22 6f 72 67 22 20 74 61 62 6c 65 20 66 6f 72 6d  "org" table form
22400 20 61 20 74 72 65 65 2e 0a 0a 3c 70 3e 48 65 72   a tree...<p>Her
22410 65 20 69 73 20 61 20 71 75 65 72 79 20 74 68 61  e is a query tha
22420 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 61  t computes the a
22430 76 65 72 61 67 65 20 68 65 69 67 68 74 20 6f 76  verage height ov
22440 65 72 20 65 76 65 72 79 6f 6e 65 0a 69 6e 20 41  er everyone.in A
22450 6c 69 63 65 27 73 20 6f 72 67 61 6e 69 7a 61 74  lice's organizat
22460 69 6f 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 20 41  ion, including A
22470 6c 69 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  lice:..<blockquo
22480 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
22490 43 55 52 53 49 56 45 0a 20 20 77 6f 72 6b 73 5f  CURSIVE.  works_
224a0 66 6f 72 5f 61 6c 69 63 65 28 6e 29 20 41 53 20  for_alice(n) AS 
224b0 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c  (.    VALUES('Al
224c0 69 63 65 27 29 0a 20 20 20 20 55 4e 49 4f 4e 0a  ice').    UNION.
224d0 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
224e0 46 52 4f 4d 20 6f 72 67 2c 20 77 6f 72 6b 73 5f  FROM org, works_
224f0 66 6f 72 5f 61 6c 69 63 65 0a 20 20 20 20 20 57  for_alice.     W
22500 48 45 52 45 20 6f 72 67 2e 62 6f 73 73 3d 77 6f  HERE org.boss=wo
22510 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a  rks_for_alice.n.
22520 20 20 29 0a 53 45 4c 45 43 54 20 61 76 67 28 68    ).SELECT avg(h
22530 65 69 67 68 74 29 20 46 52 4f 4d 20 6f 72 67 0a  eight) FROM org.
22540 20 57 48 45 52 45 20 6f 72 67 2e 6e 61 6d 65 20   WHERE org.name 
22550 49 4e 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69  IN works_for_ali
22560 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  ce;.</pre></bloc
22570 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
22580 6e 65 78 74 20 65 78 61 6d 70 6c 65 20 75 73 65  next example use
22590 73 20 74 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61  s two .common ta
225a0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ble expressions 
225b0 69 6e 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  in a single WITH
225c0 20 63 6c 61 75 73 65 2e 20 20 0a 54 68 65 20 66   clause.  .The f
225d0 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 72  ollowing table r
225e0 65 63 6f 72 64 73 20 61 20 66 61 6d 69 6c 79 20  ecords a family 
225f0 74 72 65 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  tree:..<blockquo
22600 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
22610 54 41 42 4c 45 20 66 61 6d 69 6c 79 28 0a 20 20  TABLE family(.  
22620 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52  name TEXT PRIMAR
22630 59 20 4b 45 59 2c 0a 20 20 6d 6f 6d 20 54 45 58  Y KEY,.  mom TEX
22640 54 20 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d  T REFERENCES fam
22650 69 6c 79 2c 0a 20 20 64 61 64 20 54 45 58 54 20  ily,.  dad TEXT 
22660 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c  REFERENCES famil
22670 79 2c 0a 20 20 62 6f 72 6e 20 44 41 54 45 54 49  y,.  born DATETI
22680 4d 45 2c 0a 20 20 64 69 65 64 20 44 41 54 45 54  ME,.  died DATET
22690 49 4d 45 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66 20  IME, -- NULL if 
226a0 73 74 69 6c 6c 20 61 6c 69 76 65 0a 20 20 2d 2d  still alive.  --
226b0 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e 74 0a 29   other content.)
226c0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
226d0 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 66  uote>..<p>The "f
226e0 61 6d 69 6c 79 22 20 74 61 62 6c 65 20 69 73 20  amily" table is 
226f0 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 65  similar to the e
22700 61 72 6c 69 65 72 20 22 6f 72 67 22 20 74 61 62  arlier "org" tab
22710 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 20 0a  le except that .
22720 6e 6f 77 20 74 68 65 72 65 20 61 72 65 20 74 77  now there are tw
22730 6f 20 70 61 72 65 6e 74 73 20 74 6f 20 65 61 63  o parents to eac
22740 68 20 6d 65 6d 62 65 72 2e 0a 57 65 20 77 61 6e  h member..We wan
22750 74 20 74 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69  t to know all li
22760 76 69 6e 67 20 61 6e 63 65 73 74 6f 72 73 20 6f  ving ancestors o
22770 66 20 41 6c 69 63 65 2c 20 66 72 6f 6d 20 6f 6c  f Alice, from ol
22780 64 65 73 74 20 74 6f 20 79 6f 75 6e 67 65 73 74  dest to youngest
22790 2e 0a 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f  ..An ordinary co
227a0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
227b0 73 73 69 6f 6e 2c 20 22 70 61 72 65 6e 74 5f 6f  ssion, "parent_o
227c0 66 22 2c 20 69 73 20 64 65 66 69 6e 65 64 20 66  f", is defined f
227d0 69 72 73 74 2e 20 20 54 68 61 74 0a 6f 72 64 69  irst.  That.ordi
227e0 6e 61 72 79 20 43 54 45 20 69 73 20 61 20 76 69  nary CTE is a vi
227f0 65 77 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  ew that can be u
22800 73 65 64 20 74 6f 20 66 69 6e 64 20 61 6c 6c 20  sed to find all 
22810 70 61 72 65 6e 74 73 20 6f 66 20 61 6e 79 0a 69  parents of any.i
22820 6e 64 69 76 69 64 75 61 6c 2e 20 20 54 68 61 74  ndividual.  That
22830 20 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69 73   ordinary CTE is
22840 20 74 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68   then used in th
22850 65 20 22 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61  e "ancestor_of_a
22860 6c 69 63 65 22 0a 72 65 63 75 72 73 69 76 65 20  lice".recursive 
22870 43 54 45 2e 20 20 54 68 65 20 72 65 63 75 72 73  CTE.  The recurs
22880 69 76 65 20 43 54 45 20 69 73 20 74 68 65 6e 20  ive CTE is then 
22890 75 73 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61  used in the fina
228a0 6c 20 71 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b  l query:..<block
228b0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
228c0 20 52 45 43 55 52 53 49 56 45 0a 20 20 70 61 72   RECURSIVE.  par
228d0 65 6e 74 5f 6f 66 28 6e 61 6d 65 2c 20 70 61 72  ent_of(name, par
228e0 65 6e 74 29 20 41 53 0a 20 20 20 20 28 53 45 4c  ent) AS.    (SEL
228f0 45 43 54 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52  ECT name, mom FR
22900 4f 4d 20 66 61 6d 69 6c 79 20 55 4e 49 4f 4e 20  OM family UNION 
22910 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 64 61 64  SELECT name, dad
22920 20 46 52 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a 20   FROM family),. 
22930 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69   ancestor_of_ali
22940 63 65 28 6e 61 6d 65 29 20 41 53 0a 20 20 20 20  ce(name) AS.    
22950 28 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46  (SELECT parent F
22960 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 57 48  ROM parent_of WH
22970 45 52 45 20 6e 61 6d 65 3d 27 41 6c 69 63 65 27  ERE name='Alice'
22980 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  .     UNION ALL.
22990 20 20 20 20 20 53 45 4c 45 43 54 20 70 61 72 65       SELECT pare
229a0 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f  nt FROM parent_o
229b0 66 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 5f  f JOIN ancestor_
229c0 6f 66 5f 61 6c 69 63 65 20 55 53 49 4e 47 28 6e  of_alice USING(n
229d0 61 6d 65 29 29 0a 53 45 4c 45 43 54 20 66 61 6d  ame)).SELECT fam
229e0 69 6c 79 2e 6e 61 6d 65 20 46 52 4f 4d 20 61 6e  ily.name FROM an
229f0 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c  cestor_of_alice,
22a00 20 66 61 6d 69 6c 79 0a 20 57 48 45 52 45 20 61   family. WHERE a
22a10 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
22a20 2e 6e 61 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d  .name=family.nam
22a30 65 0a 20 20 20 41 4e 44 20 64 69 65 64 20 49 53  e.   AND died IS
22a40 20 4e 55 4c 4c 0a 20 4f 52 44 45 52 20 42 59 20   NULL. ORDER BY 
22a50 62 6f 72 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  born;.</pre></bl
22a60 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e  ockquote>..<tcl>
22a70 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78  hd_fragment rcex
22a80 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 51 75 65 72  2</tcl>.<h4>Quer
22a90 69 65 73 20 41 67 61 69 6e 73 74 20 41 20 47 72  ies Against A Gr
22aa0 61 70 68 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76  aph</h4>..<p>A v
22ab0 65 72 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73  ersion control s
22ac0 79 73 74 65 6d 20 28 56 43 53 29 20 77 69 6c 6c  ystem (VCS) will
22ad0 20 74 79 70 69 63 61 6c 6c 79 20 73 74 6f 72 65   typically store
22ae0 20 74 68 65 20 65 76 6f 6c 76 69 6e 67 0a 76 65   the evolving.ve
22af0 72 73 69 6f 6e 73 20 6f 66 20 61 20 70 72 6f 6a  rsions of a proj
22b00 65 63 74 20 61 73 20 61 20 64 69 72 65 63 74 65  ect as a directe
22b10 64 20 61 63 79 63 6c 69 63 20 67 72 61 70 68 20  d acyclic graph 
22b20 28 44 41 47 29 2e 20 20 43 61 6c 6c 20 65 61 63  (DAG).  Call eac
22b30 68 0a 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  h.version of the
22b40 20 70 72 6f 6a 65 63 74 20 61 20 22 63 68 65 63   project a "chec
22b50 6b 69 6e 22 2e 20 20 41 20 73 69 6e 67 6c 65 0a  kin".  A single.
22b60 63 68 65 63 6b 69 6e 20 63 61 6e 20 68 61 76 65  checkin can have
22b70 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61   zero or more pa
22b80 72 65 6e 74 73 2e 20 20 4d 6f 73 74 20 63 68 65  rents.  Most che
22b90 63 6b 69 6e 73 20 28 65 78 63 65 70 74 20 74 68  ckins (except th
22ba0 65 0a 66 69 72 73 74 29 20 68 61 76 65 20 61 20  e.first) have a 
22bb0 73 69 6e 67 6c 65 20 70 61 72 65 6e 74 2c 20 62  single parent, b
22bc0 75 74 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f  ut in the case o
22bd0 66 20 61 20 6d 65 72 67 65 2c 20 61 20 63 68 65  f a merge, a che
22be0 63 6b 69 6e 0a 6d 69 67 68 74 20 68 61 76 65 20  ckin.might have 
22bf0 74 77 6f 20 6f 72 20 74 68 72 65 65 20 6f 72 20  two or three or 
22c00 6d 6f 72 65 20 70 61 72 65 6e 74 73 2e 20 20 41  more parents.  A
22c10 20 73 63 68 65 6d 61 20 74 6f 20 6b 65 65 70 20   schema to keep 
22c20 74 72 61 63 6b 20 6f 66 0a 63 68 65 63 6b 69 6e  track of.checkin
22c30 73 20 61 6e 64 20 74 68 65 20 6f 72 64 65 72 20  s and the order 
22c40 69 6e 20 77 68 69 63 68 20 74 68 65 79 20 6f 63  in which they oc
22c50 63 75 72 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73  cur might look s
22c60 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65 0a 74 68  omething like.th
22c70 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
22c80 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
22c90 42 4c 45 20 63 68 65 63 6b 69 6e 28 0a 20 20 69  BLE checkin(.  i
22ca0 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  d INTEGER PRIMAR
22cb0 59 20 4b 45 59 2c 0a 20 20 6d 74 69 6d 65 20 49  Y KEY,.  mtime I
22cc0 4e 54 45 47 45 52 20 2d 2d 20 74 69 6d 65 73 74  NTEGER -- timest
22cd0 61 6d 70 20 77 68 65 6e 20 74 68 69 73 20 63 68  amp when this ch
22ce0 65 63 6b 69 6e 20 6f 63 63 75 72 72 65 64 0a 29  eckin occurred.)
22cf0 3b 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 64  ;.CREATE TABLE d
22d00 65 72 69 76 65 64 66 72 6f 6d 28 0a 20 20 78 66  erivedfrom(.  xf
22d10 72 6f 6d 20 49 4e 54 45 47 45 52 20 4e 4f 54 20  rom INTEGER NOT 
22d20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20  NULL REFERENCES 
22d30 63 68 65 63 6b 69 6e 2c 20 2d 2d 20 70 61 72 65  checkin, -- pare
22d40 6e 74 20 63 68 65 63 6b 69 6e 0a 20 20 78 74 6f  nt checkin.  xto
22d50 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c   INTEGER NOT NUL
22d60 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68 65  L REFERENCES che
22d70 63 6b 69 6e 2c 20 20 20 2d 2d 20 64 65 72 69 76  ckin,   -- deriv
22d80 65 64 20 63 68 65 63 6b 69 6e 0a 20 20 50 52 49  ed checkin.  PRI
22d90 4d 41 52 59 20 4b 45 59 28 78 66 72 6f 6d 2c 78  MARY KEY(xfrom,x
22da0 74 6f 29 0a 29 3b 0a 43 52 45 41 54 45 20 49 4e  to).);.CREATE IN
22db0 44 45 58 20 64 65 72 69 76 65 64 66 72 6f 6d 5f  DEX derivedfrom_
22dc0 62 61 63 6b 20 4f 4e 20 64 65 72 69 76 65 64 66  back ON derivedf
22dd0 72 6f 6d 28 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a  rom(xto,xfrom);.
22de0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
22df0 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 67 72 61  te>..<p>This gra
22e00 70 68 20 69 73 20 61 63 79 63 6c 69 63 2e 20 20  ph is acyclic.  
22e10 41 6e 64 20 77 65 20 61 73 73 75 6d 65 20 74 68  And we assume th
22e20 61 74 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20  at the mtime of 
22e30 65 76 65 72 79 0a 63 68 69 6c 64 20 63 68 65 63  every.child chec
22e40 6b 69 6e 20 69 73 20 6e 6f 20 6c 65 73 73 20 74  kin is no less t
22e50 68 61 6e 20 74 68 65 20 6d 74 69 6d 65 20 6f 66  han the mtime of
22e60 20 61 6c 6c 20 69 74 73 20 70 61 72 65 6e 74 73   all its parents
22e70 2e 20 20 42 75 74 0a 75 6e 6c 69 6b 65 20 74 68  .  But.unlike th
22e80 65 20 65 61 72 6c 69 65 72 20 65 78 61 6d 70 6c  e earlier exampl
22e90 65 73 2c 20 74 68 69 73 20 67 72 61 70 68 20 6d  es, this graph m
22ea0 69 67 68 74 20 68 61 76 65 20 6d 75 6c 74 69 70  ight have multip
22eb0 6c 65 20 70 61 74 68 73 20 6f 66 0a 64 69 66 66  le paths of.diff
22ec0 65 72 69 6e 67 20 6c 65 6e 67 74 68 73 20 62 65  ering lengths be
22ed0 74 77 65 65 6e 20 61 6e 79 20 74 77 6f 20 63 68  tween any two ch
22ee0 65 63 6b 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77  eckins...<p>We w
22ef0 61 6e 74 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20  ant to know the 
22f00 74 77 65 6e 74 79 20 6d 6f 73 74 20 72 65 63 65  twenty most rece
22f10 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20  nt ancestors in 
22f20 74 69 6d 65 20 28 6f 75 74 20 6f 66 0a 74 68 65  time (out of.the
22f30 20 74 68 6f 75 73 61 6e 64 73 20 61 6e 64 20 74   thousands and t
22f40 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e 63 65  housands of ance
22f50 73 74 6f 72 73 20 69 6e 20 74 68 65 20 77 68 6f  stors in the who
22f60 6c 65 20 44 41 47 29 20 66 6f 72 0a 63 68 65 63  le DAG) for.chec
22f70 6b 69 6e 20 22 40 42 41 53 45 4c 49 4e 45 22 2e  kin "@BASELINE".
22f80 20 20 28 41 20 71 75 65 72 79 20 73 69 6d 69 6c    (A query simil
22f90 61 72 20 74 6f 20 74 68 69 73 20 69 73 20 75 73  ar to this is us
22fa0 65 64 0a 62 79 20 74 68 65 20 3c 61 20 68 72 65  ed.by the <a hre
22fb0 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 66 6f  f="http://www.fo
22fc0 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46  ssil-scm.org/">F
22fd0 6f 73 73 69 6c 3c 2f 61 3e 20 56 43 53 20 74 6f  ossil</a> VCS to
22fe0 0a 73 68 6f 77 20 74 68 65 20 4e 20 6d 6f 73 74  .show the N most
22ff0 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72   recent ancestor
23000 73 20 6f 66 20 61 20 63 68 65 63 6b 2e 20 20 46  s of a check.  F
23010 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 3c 61 20 68  or example:.<a h
23020 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e  ref="http://www.
23030 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74  sqlite.org/src/t
23040 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26  imeline?p=trunk&
23050 6e 3d 33 30 22 3e 68 74 74 70 3a 2f 2f 77 77 77  n=30">http://www
23060 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f  .sqlite.org/src/
23070 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b  timeline?p=trunk
23080 26 6e 3d 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c  &n=30</a>.)..<bl
23090 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
230a0 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
230b0 61 6e 63 65 73 74 6f 72 28 69 64 2c 6d 74 69 6d  ancestor(id,mtim
230c0 65 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  e) AS (.    SELE
230d0 43 54 20 69 64 2c 20 6d 74 69 6d 65 20 46 52 4f  CT id, mtime FRO
230e0 4d 20 63 68 65 63 6b 69 6e 20 57 48 45 52 45 20  M checkin WHERE 
230f0 69 64 3d 40 42 41 53 45 4c 49 4e 45 0a 20 20 20  id=@BASELINE.   
23100 20 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43   UNION.    SELEC
23110 54 20 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 66  T derivedfrom.xf
23120 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 2e 6d 74 69  rom, checkin.mti
23130 6d 65 0a 20 20 20 20 20 20 46 52 4f 4d 20 61 6e  me.      FROM an
23140 63 65 73 74 6f 72 2c 20 64 65 72 69 76 65 64 66  cestor, derivedf
23150 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 0a 20 20 20  rom, checkin.   
23160 20 20 57 48 45 52 45 20 61 6e 63 65 73 74 6f 72    WHERE ancestor
23170 2e 69 64 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e  .id=derivedfrom.
23180 78 74 6f 0a 20 20 20 20 20 20 20 41 4e 44 20 63  xto.       AND c
23190 68 65 63 6b 69 6e 2e 69 64 3d 64 65 72 69 76 65  heckin.id=derive
231a0 64 66 72 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20 20  dfrom.xfrom.    
231b0 20 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b 69   ORDER BY checki
231c0 6e 2e 6d 74 69 6d 65 20 44 45 53 43 0a 20 20 20  n.mtime DESC.   
231d0 20 20 4c 49 4d 49 54 20 32 30 0a 20 20 29 0a 53    LIMIT 20.  ).S
231e0 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 68 65  ELECT * FROM che
231f0 63 6b 69 6e 20 4a 4f 49 4e 20 61 6e 63 65 73 74  ckin JOIN ancest
23200 6f 72 20 55 53 49 4e 47 28 69 64 29 3b 0a 3c 2f  or USING(id);.</
23210 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
23220 3e 0a 0a 3c 70 3e 0a 54 68 65 20 22 4f 52 44 45  >..<p>.The "ORDE
23230 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69  R BY checkin.mti
23240 6d 65 20 44 45 53 43 22 20 74 65 72 6d 20 69 6e  me DESC" term in
23250 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
23260 65 6c 65 63 74 20 6d 61 6b 65 73 0a 74 68 65 20  elect makes.the 
23270 71 75 65 72 79 20 72 75 6e 20 6d 75 63 68 20 66  query run much f
23280 61 73 74 65 72 20 62 79 20 70 72 65 76 65 6e 74  aster by prevent
23290 69 6e 67 20 69 74 20 66 72 6f 6d 20 66 6f 6c 6c  ing it from foll
232a0 6f 77 69 6e 67 0a 62 72 61 6e 63 68 65 73 20 74  owing.branches t
232b0 68 61 74 20 6d 65 72 67 65 20 63 68 65 63 6b 69  hat merge checki
232c0 6e 73 0a 66 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f  ns.from long ago
232d0 2e 20 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  .  The ORDER BY 
232e0 66 6f 72 63 65 73 20 74 68 65 20 72 65 63 75 72  forces the recur
232f0 73 69 76 65 2d 73 65 6c 65 63 74 20 74 6f 20 66  sive-select to f
23300 6f 63 75 73 0a 6f 6e 20 74 68 65 20 6d 6f 73 74  ocus.on the most
23310 20 72 65 63 65 6e 74 20 63 68 65 63 6b 69 6e 73   recent checkins
23320 2c 20 74 68 65 20 6f 6e 65 73 20 77 65 20 77 61  , the ones we wa
23330 6e 74 2e 20 20 57 69 74 68 6f 75 74 20 74 68 65  nt.  Without the
23340 20 4f 52 44 45 52 20 42 59 0a 6f 6e 20 74 68 65   ORDER BY.on the
23350 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
23360 74 2c 20 6f 6e 65 20 77 6f 75 6c 64 20 62 65 20  t, one would be 
23370 66 6f 72 63 65 64 20 74 6f 20 63 6f 6d 70 75 74  forced to comput
23380 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 73  e the complete s
23390 65 74 20 6f 66 0a 74 68 6f 75 73 61 6e 64 73 20  et of.thousands 
233a0 6f 66 20 61 6e 63 65 73 74 6f 72 73 2c 20 73 6f  of ancestors, so
233b0 72 74 20 74 68 65 6d 20 61 6c 6c 20 62 79 20 6d  rt them all by m
233c0 74 69 6d 65 2c 20 74 68 65 6e 20 74 61 6b 65 20  time, then take 
233d0 74 68 65 20 74 6f 70 20 74 77 65 6e 74 79 2e 0a  the top twenty..
233e0 54 68 65 20 4f 52 44 45 52 20 42 59 20 65 73 73  The ORDER BY ess
233f0 65 6e 74 69 61 6c 6c 79 20 73 65 74 73 20 75 70  entially sets up
23400 20 61 20 70 72 69 6f 72 69 74 79 20 71 75 65 75   a priority queu
23410 65 20 74 68 61 74 0a 66 6f 72 63 65 73 20 74 68  e that.forces th
23420 65 20 72 65 63 75 72 73 69 76 65 20 71 75 65 72  e recursive quer
23430 79 20 74 6f 20 6c 6f 6f 6b 20 61 74 20 74 68 65  y to look at the
23440 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63   most recent anc
23450 65 73 74 6f 72 73 20 66 69 72 73 74 2c 0a 61 6c  estors first,.al
23460 6c 6f 77 69 6e 67 20 74 68 65 20 75 73 65 20 6f  lowing the use o
23470 66 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  f a LIMIT clause
23480 20 74 6f 20 72 65 73 74 72 69 63 74 20 74 68 65   to restrict the
23490 20 73 63 6f 70 65 20 6f 66 20 74 68 65 0a 71 75   scope of the.qu
234a0 65 72 79 20 74 6f 20 6a 75 73 74 20 74 68 65 20  ery to just the 
234b0 63 68 65 63 6b 69 6e 73 20 6f 66 20 69 6e 74 65  checkins of inte
234c0 72 65 73 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  rest...<tcl>hd_f
234d0 72 61 67 6d 65 6e 74 20 77 69 74 68 6f 72 64 65  ragment withorde
234e0 72 62 79 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f  rby</tcl>.<h4>Co
234f0 6e 74 72 6f 6c 6c 69 6e 67 20 44 65 70 74 68 2d  ntrolling Depth-
23500 46 69 72 73 74 20 56 65 72 73 75 73 20 42 72 65  First Versus Bre
23510 61 64 74 68 2d 46 69 72 73 74 20 53 65 61 72 63  adth-First Searc
23520 68 20 4f 66 20 61 20 54 72 65 65 0a 55 73 69 6e  h Of a Tree.Usin
23530 67 20 4f 52 44 45 52 20 42 59 3c 2f 68 34 3e 0a  g ORDER BY</h4>.
23540 0a 3c 70 3e 41 6e 20 4f 52 44 45 52 20 42 59 20  .<p>An ORDER BY 
23550 63 6c 61 75 73 65 20 6f 6e 20 74 68 65 20 72 65  clause on the re
23560 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 63  cursive-select c
23570 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 6f  an be used to co
23580 6e 74 72 6f 6c 0a 77 68 65 74 68 65 72 20 74 68  ntrol.whether th
23590 65 20 73 65 61 72 63 68 20 6f 66 20 61 20 74 72  e search of a tr
235a0 65 65 20 69 73 20 64 65 70 74 68 2d 66 69 72 73  ee is depth-firs
235b0 74 20 6f 72 20 62 72 65 61 64 74 68 2d 66 69 72  t or breadth-fir
235c0 73 74 2e 20 20 54 6f 0a 69 6c 6c 75 73 74 72 61  st.  To.illustra
235d0 74 65 2c 20 77 65 20 77 69 6c 6c 20 75 73 65 20  te, we will use 
235e0 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74  a variation on t
235f0 68 65 20 22 6f 72 67 22 20 74 61 62 6c 65 20 66  he "org" table f
23600 72 6f 6d 20 61 6e 20 65 78 61 6d 70 6c 65 0a 61  rom an example.a
23610 62 6f 76 65 2c 20 77 69 74 68 6f 75 74 20 74 68  bove, without th
23620 65 20 22 68 65 69 67 68 74 22 20 63 6f 6c 75 6d  e "height" colum
23630 6e 2c 20 61 6e 64 20 77 69 74 68 20 73 6f 6d 65  n, and with some
23640 20 72 65 61 6c 20 64 61 74 61 20 69 6e 73 65 72   real data inser
23650 74 65 64 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ted:..<blockquot
23660 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
23670 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65  ABLE org(.  name
23680 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45   TEXT PRIMARY KE
23690 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54 20 52  Y,.  boss TEXT R
236a0 45 46 45 52 45 4e 43 45 53 20 6f 72 67 0a 29 20  EFERENCES org.) 
236b0 57 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 49  WITHOUT ROWID;.I
236c0 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
236d0 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 4e 55  ALUES('Alice',NU
236e0 4c 4c 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  LL);.INSERT INTO
236f0 20 6f 72 67 20 56 41 4c 55 45 53 28 27 42 6f 62   org VALUES('Bob
23700 27 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45  ','Alice');.INSE
23710 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55  RT INTO org VALU
23720 45 53 28 27 43 69 6e 64 79 27 2c 27 41 6c 69 63  ES('Cindy','Alic
23730 65 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  e');.INSERT INTO
23740 20 6f 72 67 20 56 41 4c 55 45 53 28 27 44 61 76   org VALUES('Dav
23750 65 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52  e','Bob');.INSER
23760 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
23770 53 28 27 45 6d 6d 61 27 2c 27 42 6f 62 27 29 3b  S('Emma','Bob');
23780 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
23790 20 56 41 4c 55 45 53 28 27 46 72 65 64 27 2c 27   VALUES('Fred','
237a0 43 69 6e 64 79 27 29 3b 0a 49 4e 53 45 52 54 20  Cindy');.INSERT 
237b0 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
237c0 27 47 61 69 6c 27 2c 27 43 69 6e 64 79 27 29 3b  'Gail','Cindy');
237d0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
237e0 6f 74 65 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73  ote>..<p>Here is
237f0 20 61 20 71 75 65 72 79 20 74 6f 20 73 68 6f 77   a query to show
23800 20 74 68 65 20 74 72 65 65 20 73 74 72 75 63 74   the tree struct
23810 75 72 65 20 69 6e 20 61 20 62 72 65 61 64 74 68  ure in a breadth
23820 2d 66 69 72 73 74 20 70 61 74 74 65 72 6e 3a 0a  -first pattern:.
23830 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
23840 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56  e>.WITH RECURSIV
23850 45 0a 20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28  E.  under_alice(
23860 6e 61 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20 28  name,level) AS (
23870 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69  .    VALUES('Ali
23880 63 65 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e  ce',0).    UNION
23890 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20   ALL.    SELECT 
238a0 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f  org.name, under_
238b0 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20  alice.level+1.  
238c0 20 20 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49      FROM org JOI
238d0 4e 20 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e  N under_alice ON
238e0 20 6f 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f   org.boss=under_
238f0 61 6c 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20  alice.name.     
23900 4f 52 44 45 52 20 42 59 20 32 0a 20 20 29 0a 53  ORDER BY 2.  ).S
23910 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e  ELECT substr('..
23920 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65  ........',1,leve
23930 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f  l*3) || name FRO
23940 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c  M under_alice;.<
23950 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
23960 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 4f 52 44 45  e>..<p>The "ORDE
23970 52 20 42 59 20 32 22 20 28 77 68 69 63 68 20 6d  R BY 2" (which m
23980 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73  eans the same as
23990 20 22 4f 52 44 45 52 20 42 59 20 75 6e 64 65 72   "ORDER BY under
239a0 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 22 29  _alice.level+1")
239b0 0a 63 61 75 73 65 73 20 68 69 67 68 65 72 20 6c  .causes higher l
239c0 65 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67  evels in the org
239d0 61 6e 69 7a 61 74 69 6f 6e 20 63 68 61 72 74 20  anization chart 
239e0 28 77 69 74 68 20 73 6d 61 6c 6c 65 72 20 22 6c  (with smaller "l
239f0 65 76 65 6c 22 20 76 61 6c 75 65 73 29 0a 74 6f  evel" values).to
23a00 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 66 69   be processed fi
23a10 72 73 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  rst, resulting i
23a20 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72 73  n a breadth-firs
23a30 74 20 73 65 61 72 63 68 2e 20 20 54 68 65 20 6f  t search.  The o
23a40 75 74 70 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63  utput is:..<bloc
23a50 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69  kquote><pre>.Ali
23a60 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e  ce....Bob....Cin
23a70 64 79 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e  dy.......Dave...
23a80 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46  ....Emma.......F
23a90 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c  red.......Gail.<
23aa0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
23ab0 65 3e 0a 0a 3c 70 3e 42 75 74 20 69 66 20 77 65  e>..<p>But if we
23ac0 20 63 68 61 6e 67 65 20 74 68 65 20 4f 52 44 45   change the ORDE
23ad0 52 20 42 59 20 63 6c 61 75 73 65 20 74 6f 20 61  R BY clause to a
23ae0 64 64 20 74 68 65 20 22 44 45 53 43 22 20 6d 6f  dd the "DESC" mo
23af0 64 69 66 69 65 72 2c 20 74 68 61 74 20 77 69 6c  difier, that wil
23b00 6c 0a 63 61 75 73 65 20 6c 6f 77 65 72 20 6c 65  l.cause lower le
23b10 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61  vels in the orga
23b20 6e 69 7a 61 74 69 6f 6e 20 28 77 69 74 68 20 6c  nization (with l
23b30 61 72 67 65 72 20 22 6c 65 76 65 6c 22 20 76 61  arger "level" va
23b40 6c 75 65 73 29 20 74 6f 20 62 65 0a 70 72 6f 63  lues) to be.proc
23b50 65 73 73 65 64 20 66 69 72 73 74 20 62 79 20 74  essed first by t
23b60 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
23b70 65 63 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  ect, resulting i
23b80 6e 20 61 20 64 65 70 74 68 2d 66 69 72 73 74 20  n a depth-first 
23b90 73 65 61 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71  search:..<blockq
23ba0 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
23bb0 52 45 43 55 52 53 49 56 45 0a 20 20 75 6e 64 65  RECURSIVE.  unde
23bc0 72 5f 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76  r_alice(name,lev
23bd0 65 6c 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c  el) AS (.    VAL
23be0 55 45 53 28 27 41 6c 69 63 65 27 2c 30 29 0a 20  UES('Alice',0). 
23bf0 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20     UNION ALL.   
23c00 20 53 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65   SELECT org.name
23c10 2c 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65  , under_alice.le
23c20 76 65 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d  vel+1.      FROM
23c30 20 6f 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f   org JOIN under_
23c40 61 6c 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73  alice ON org.bos
23c50 73 3d 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61  s=under_alice.na
23c60 6d 65 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59  me.     ORDER BY
23c70 20 32 20 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a 20   2 <b>DESC</b>. 
23c80 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73 74 72   ).SELECT substr
23c90 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c  ('..........',1,
23ca0 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65  level*3) || name
23cb0 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63   FROM under_alic
23cc0 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  e;.</pre></block
23cd0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f  quote>..<p>The o
23ce0 75 74 70 75 74 20 6f 66 20 74 68 69 73 20 72 65  utput of this re
23cf0 76 69 73 65 64 20 71 75 65 72 79 20 69 73 3a 0a  vised query is:.
23d00 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
23d10 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a  e>.Alice....Bob.
23d20 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e  ......Dave......
23d30 2e 45 6d 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e  .Emma....Cindy..
23d40 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e  .....Fred.......
23d50 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  Gail.</pre></blo
23d60 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65  ckquote>..<p>Whe
23d70 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  n the ORDER BY c
23d80 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64  lause is omitted
23d90 20 66 72 6f 6d 20 74 68 65 20 72 65 63 75 72 73   from the recurs
23da0 69 76 65 2d 73 65 6c 65 63 74 2c 20 74 68 65 0a  ive-select, the.
23db0 71 75 65 75 65 20 62 65 68 61 76 65 73 20 61 73  queue behaves as
23dc0 20 61 20 46 49 46 4f 2c 20 77 68 69 63 68 20 72   a FIFO, which r
23dd0 65 73 75 6c 74 73 20 69 6e 20 61 20 62 72 65 61  esults in a brea
23de0 64 74 68 2d 66 69 72 73 74 20 73 65 61 72 63 68  dth-first search
23df0 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  ....<tcl>hd_frag
23e00 6d 65 6e 74 20 6d 61 6e 64 65 6c 62 72 6f 74 20  ment mandelbrot 
23e10 7b 63 6f 6d 70 75 74 65 20 74 68 65 20 4d 61 6e  {compute the Man
23e20 64 65 6c 62 72 6f 74 20 73 65 74 7d 3c 2f 74 63  delbrot set}</tc
23e30 6c 3e 0a 3c 68 34 3e 4f 75 74 6c 61 6e 64 69 73  l>.<h4>Outlandis
23e40 68 20 52 65 63 75 72 73 69 76 65 20 51 75 65 72  h Recursive Quer
23e50 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a  y Examples</h4>.
23e60 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
23e70 67 20 71 75 65 72 79 20 63 6f 6d 70 75 74 65 73  g query computes
23e80 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f   an approximatio
23e90 6e 20 6f 66 20 74 68 65 20 4d 61 6e 64 65 6c 62  n of the Mandelb
23ea0 72 6f 74 20 53 65 74 0a 61 6e 64 20 6f 75 74 70  rot Set.and outp
23eb0 75 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 61  uts the result a
23ec0 73 20 41 53 43 49 49 2d 61 72 74 3a 0a 0a 3c 62  s ASCII-art:..<b
23ed0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
23ee0 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
23ef0 20 78 61 78 69 73 28 78 29 20 41 53 20 28 56 41   xaxis(x) AS (VA
23f00 4c 55 45 53 28 2d 32 2e 30 29 20 55 4e 49 4f 4e  LUES(-2.0) UNION
23f10 20 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b 30 2e   ALL SELECT x+0.
23f20 30 35 20 46 52 4f 4d 20 78 61 78 69 73 20 57 48  05 FROM xaxis WH
23f30 45 52 45 20 78 3c 31 2e 32 29 2c 0a 20 20 79 61  ERE x<1.2),.  ya
23f40 78 69 73 28 79 29 20 41 53 20 28 56 41 4c 55 45  xis(y) AS (VALUE
23f50 53 28 2d 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c  S(-1.0) UNION AL
23f60 4c 20 53 45 4c 45 43 54 20 79 2b 30 2e 31 20 46  L SELECT y+0.1 F
23f70 52 4f 4d 20 79 61 78 69 73 20 57 48 45 52 45 20  ROM yaxis WHERE 
23f80 79 3c 31 2e 30 29 2c 0a 20 20 6d 28 69 74 65 72  y<1.0),.  m(iter
23f90 2c 20 63 78 2c 20 63 79 2c 20 78 2c 20 79 29 20  , cx, cy, x, y) 
23fa0 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20  AS (.    SELECT 
23fb0 30 2c 20 78 2c 20 79 2c 20 30 2e 30 2c 20 30 2e  0, x, y, 0.0, 0.
23fc0 30 20 46 52 4f 4d 20 78 61 78 69 73 2c 20 79 61  0 FROM xaxis, ya
23fd0 78 69 73 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c  xis.    UNION AL
23fe0 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 69 74 65  L.    SELECT ite
23ff0 72 2b 31 2c 20 63 78 2c 20 63 79 2c 20 78 2a 78  r+1, cx, cy, x*x
24000 2d 79 2a 79 20 2b 20 63 78 2c 20 32 2e 30 2a 78  -y*y + cx, 2.0*x
24010 2a 79 20 2b 20 63 79 20 46 52 4f 4d 20 6d 20 0a  *y + cy FROM m .
24020 20 20 20 20 20 57 48 45 52 45 20 28 78 2a 78 20       WHERE (x*x 
24030 2b 20 79 2a 79 29 20 3c 20 34 2e 30 20 41 4e 44  + y*y) < 4.0 AND
24040 20 69 74 65 72 3c 32 38 0a 20 20 29 2c 0a 20 20   iter<28.  ),.  
24050 6d 32 28 69 74 65 72 2c 20 63 78 2c 20 63 79 29  m2(iter, cx, cy)
24060 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
24070 20 6d 61 78 28 69 74 65 72 29 2c 20 63 78 2c 20   max(iter), cx, 
24080 63 79 20 46 52 4f 4d 20 6d 20 47 52 4f 55 50 20  cy FROM m GROUP 
24090 42 59 20 63 78 2c 20 63 79 0a 20 20 29 2c 0a 20  BY cx, cy.  ),. 
240a0 20 61 28 74 29 20 41 53 20 28 0a 20 20 20 20 53   a(t) AS (.    S
240b0 45 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63  ELECT group_conc
240c0 61 74 28 20 73 75 62 73 74 72 28 27 20 2e 2b 2a  at( substr(' .+*
240d0 23 27 2c 20 31 2b 6d 69 6e 28 69 74 65 72 2f 37  #', 1+min(iter/7
240e0 2c 34 29 2c 20 31 29 2c 20 27 27 29 20 0a 20 20  ,4), 1), '') .  
240f0 20 20 46 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20    FROM m2 GROUP 
24100 42 59 20 63 79 0a 20 20 29 0a 53 45 4c 45 43 54  BY cy.  ).SELECT
24110 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74   group_concat(rt
24120 72 69 6d 28 74 29 2c 78 27 30 61 27 29 20 46 52  rim(t),x'0a') FR
24130 4f 4d 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  OM a;.</pre></bl
24140 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e  ockquote>..<p>In
24150 20 74 68 69 73 20 71 75 65 72 79 2c 20 74 68 65   this query, the
24160 20 22 78 61 78 69 73 22 20 61 6e 64 20 22 79 61   "xaxis" and "ya
24170 78 69 73 22 20 43 54 45 73 20 64 65 66 69 6e 65  xis" CTEs define
24180 20 74 68 65 20 67 72 69 64 20 6f 66 20 70 6f 69   the grid of poi
24190 6e 74 73 20 66 6f 72 0a 77 68 69 63 68 20 74 68  nts for.which th
241a0 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65 74  e Mandelbrot Set
241b0 20 77 69 6c 6c 20 62 65 20 61 70 70 72 6f 78 69   will be approxi
241c0 6d 61 74 65 64 2e 20 20 45 61 63 68 20 72 6f 77  mated.  Each row
241d0 20 69 6e 20 74 68 65 0a 22 6d 28 69 74 65 72 2c   in the."m(iter,
241e0 63 78 2c 63 79 2c 78 2c 79 29 22 20 43 54 45 20  cx,cy,x,y)" CTE 
241f0 6d 65 61 6e 73 20 74 68 61 74 20 61 66 74 65 72  means that after
24200 20 22 69 74 65 72 22 20 69 74 65 72 61 74 69 6f   "iter" iteratio
24210 6e 73 2c 20 74 68 65 20 4d 61 6e 64 65 6c 62 72  ns, the Mandelbr
24220 6f 74 0a 69 74 65 72 61 74 69 6f 6e 20 73 74 61  ot.iteration sta
24230 72 74 69 6e 67 20 61 74 20 63 78 2c 63 79 20 68  rting at cx,cy h
24240 61 73 20 72 65 61 63 68 65 64 20 70 6f 69 6e 74  as reached point
24250 20 78 2c 79 2e 20 20 54 68 65 20 6e 75 6d 62 65   x,y.  The numbe
24260 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 0a  r of iterations.
24270 69 6e 20 74 68 69 73 20 65 78 61 6d 70 6c 65 20  in this example 
24280 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 32 38  is limited to 28
24290 20 28 77 68 69 63 68 20 73 65 76 65 72 65 6c 79   (which severely
242a0 20 6c 69 6d 69 74 73 20 74 68 65 20 72 65 73 6f   limits the reso
242b0 6c 75 74 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f  lution of.the co
242c0 6d 70 75 74 61 74 69 6f 6e 2c 20 62 75 74 20 69  mputation, but i
242d0 73 20 73 75 66 66 69 63 69 65 6e 74 20 66 6f 72  s sufficient for
242e0 20 6c 6f 77 2d 72 65 73 6f 6c 75 74 69 6f 6e 20   low-resolution 
242f0 41 53 43 49 49 2d 61 72 74 20 6f 75 74 70 75 74  ASCII-art output
24300 29 2e 0a 54 68 65 20 22 6d 32 28 69 74 65 72 2c  )..The "m2(iter,
24310 63 78 2c 63 79 29 22 20 43 54 45 20 68 6f 6c 64  cx,cy)" CTE hold
24320 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
24330 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
24340 6e 73 20 72 65 61 63 68 65 64 20 77 68 65 6e 0a  ns reached when.
24350 73 74 61 72 74 69 6e 67 20 61 74 20 70 6f 69 6e  starting at poin
24360 74 20 63 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79  t cx,cy..Finally
24370 2c 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  , each row in th
24380 65 20 22 61 28 74 29 22 20 43 54 45 20 68 6f 6c  e "a(t)" CTE hol
24390 64 73 20 61 20 73 74 72 69 6e 67 20 0a 77 68 69  ds a string .whi
243a0 63 68 20 69 73 20 61 20 73 69 6e 67 6c 65 20 6c  ch is a single l
243b0 69 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75  ine of the outpu
243c0 74 20 41 53 43 49 49 2d 61 72 74 2e 0a 54 68 65  t ASCII-art..The
243d0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
243e0 74 20 61 74 20 74 68 65 20 65 6e 64 20 6a 75 73  t at the end jus
243f0 74 20 71 75 65 72 69 65 73 20 74 68 65 20 22 61  t queries the "a
24400 22 20 43 54 45 20 74 6f 0a 72 65 74 72 69 65 76  " CTE to.retriev
24410 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 41  e all lines of A
24420 53 43 49 49 2d 61 72 74 2c 20 6f 6e 65 20 62 79  SCII-art, one by
24430 20 6f 6e 65 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e   one...<p>Runnin
24440 67 20 74 68 65 20 71 75 65 72 79 20 61 62 6f 76  g the query abov
24450 65 20 69 6e 20 61 6e 20 53 51 4c 69 74 65 20 5b  e in an SQLite [
24460 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
24470 6c 6c 5d 20 72 65 73 75 6c 74 73 0a 69 6e 20 74  ll] results.in t
24480 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74  he following out
24490 70 75 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  put:..<blockquot
244a0 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 20 20 20  e><pre>.        
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244c0 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
244d0 23 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #.              
244e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244f0 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20       ..#*...    
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b               ..+
24520 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20  ####+..         
24530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24540 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e     .......+####.
24550 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20  ...   +.        
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24570 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23     ..##+*#######
24580 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20  ###+.++++.      
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245a0 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23 23 23      .+.#########
245b0 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20  #########+..    
245c0 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e            ......
245d0 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23  .......+########
245e0 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20  ###########+.+. 
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b               ..+
24600 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23  +..#.....*######
24610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b  ###############+
24620 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  ..             .
24630 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23 23 23  ..+#######++####
24640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24650 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20 2e  ###..          .
24660 2e 2e 2e 2b 2a 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 23  ################
24680 23 23 23 23 23 2e 0a 20 23 23 23 23 23 23 23 23  #####.. ########
24690 23 23 23 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 23 23 2e 2e 2e 0a 20 20 20 20 20 20 20  #####....       
246c0 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 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 23 23 23 2e 0a 20 20 20 20 20  #########..     
246f0 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23          ...+####
24700 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23 23  ###++###########
24710 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20  ############..  
24720 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b              ..++
24730 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23  ..#.....*#######
24740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e  ##############+.
24750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  .              .
24760 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23  ............+###
24770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24780 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +.+.            
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b                .+
247a0 2e 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
247b0 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23   ..##+*#########
247e0 23 2b 2e 2b 2b 2b 2b 0a 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 2e 2e 2e 2e 2e 2b 23 23 23 23      .......+####
24810 2e 2e 2e 2e 20 20 20 2b 0a 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 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23            ..+###
24840 23 2b 2e 0a 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 20 20 20 20                  
24860 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 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 20 20 20 20 20 20 20 20 20 20                  
24890 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20    ....#.        
248a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248b0 20 20 20 20 20 20 20 20 20 20 20 20 2b 2e 0a 3c              +..<
248c0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
248d0 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e>..<tcl>hd_frag
248e0 6d 65 6e 74 20 73 75 64 6f 6b 75 20 7b 73 6f 6c  ment sudoku {sol
248f0 76 65 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65  ve Sudoku puzzle
24900 73 7d 20 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69  s} </tcl>.<p>Thi
24910 73 20 6e 65 78 74 20 71 75 65 72 79 20 73 6f 6c  s next query sol
24920 76 65 73 20 61 20 53 75 64 6f 6b 75 20 70 75 7a  ves a Sudoku puz
24930 7a 6c 65 2e 20 20 54 68 65 20 73 74 61 74 65 20  zle.  The state 
24940 6f 66 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73  of the puzzle is
24950 0a 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 38  .defined by an 8
24960 31 2d 63 68 61 72 61 63 74 65 72 20 73 74 72 69  1-character stri
24970 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 61  ng formed by rea
24980 64 69 6e 67 20 65 6e 74 72 69 65 73 20 66 72 6f  ding entries fro
24990 6d 20 74 68 65 0a 70 75 7a 7a 6c 65 20 62 6f 78  m the.puzzle box
249a0 20 72 6f 77 20 62 79 20 72 6f 77 20 66 72 6f 6d   row by row from
249b0 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 61   left to right a
249c0 6e 64 20 74 68 65 6e 20 66 72 6f 6d 20 74 6f 70  nd then from top
249d0 20 74 6f 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e   to bottom..Blan
249e0 6b 20 73 71 75 61 72 65 73 20 69 6e 20 74 68 65  k squares in the
249f0 20 70 75 7a 7a 6c 65 20 61 72 65 20 64 65 6e 6f   puzzle are deno
24a00 74 65 64 20 62 79 20 61 20 22 2e 22 20 63 68 61  ted by a "." cha
24a10 72 61 63 74 65 72 2e 20 20 0a 54 68 75 73 20 74  racter.  .Thus t
24a20 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 3a  he input string:
24a30 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35  ..<blockquote>.5
24a40 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e  3..7....6..195..
24a50 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e  ..98....6.8...6.
24a60 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e  ..34..8.3..17...
24a70 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e  2...6.6....28...
24a80 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39  .419..5....8..79
24a90 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
24aa0 3c 70 3e 43 6f 72 72 65 73 70 6f 6e 64 73 20 74  <p>Corresponds t
24ab0 6f 20 61 20 70 75 7a 7a 6c 65 20 6c 69 6b 65 20  o a puzzle like 
24ac0 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  this:..<blockquo
24ad0 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  te>.<table borde
24ae0 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64 69 6e  r="1" cellpaddin
24af0 67 3d 22 35 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35  g="5">.<tr><td>5
24b00 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>3<td> <td> <
24b10 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>7<td> <td> <t
24b20 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e  d> <td>.<tr><td>
24b30 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31  6<td> <td> <td>1
24b40 3c 74 64 3e 39 3c 74 64 3e 35 3c 74 64 3e 20 3c  <td>9<td>5<td> <
24b50 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64  td> <td>.<tr><td
24b60 3e 20 3c 74 64 3e 39 3c 74 64 3e 38 3c 74 64 3e  > <td>9<td>8<td>
24b70 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20   <td> <td> <td> 
24b80 3c 74 64 3e 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td>6<td>.<tr><t
24b90 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>8<td> <td> <td
24ba0 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e  > <td>6<td> <td>
24bb0 20 3c 74 64 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e   <td> <td>3.<tr>
24bc0 3c 74 64 3e 34 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>4<td> <td> <
24bd0 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 33 3c 74  td>8<td> <td>3<t
24be0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 0a 3c 74  d> <td> <td>1.<t
24bf0 72 3e 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e  r><td>7<td> <td>
24c00 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 20   <td> <td>2<td> 
24c10 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 0a  <td> <td> <td>6.
24c20 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 36 3c 74  <tr><td> <td>6<t
24c30 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
24c40 3e 20 3c 74 64 3e 32 3c 74 64 3e 38 3c 74 64 3e  > <td>2<td>8<td>
24c50 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c  .<tr><td> <td> <
24c60 74 64 3e 20 3c 74 64 3e 34 3c 74 64 3e 31 3c 74  td> <td>4<td>1<t
24c70 64 3e 39 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>9<td> <td> <td
24c80 3e 35 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e  >5.<tr><td> <td>
24c90 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38   <td> <td> <td>8
24ca0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c  <td> <td> <td>7<
24cb0 74 64 3e 39 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  td>9.</table>.</
24cc0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
24cd0 54 68 69 73 20 69 73 20 74 68 65 20 71 75 65 72  This is the quer
24ce0 79 20 74 68 61 74 20 73 6f 6c 76 65 73 20 74 68  y that solves th
24cf0 65 20 70 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63  e puzzle:..<bloc
24d00 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
24d10 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 69 6e  H RECURSIVE.  in
24d20 70 75 74 28 73 75 64 29 20 41 53 20 28 0a 20 20  put(sud) AS (.  
24d30 20 20 56 41 4c 55 45 53 28 27 35 33 2e 2e 37 2e    VALUES('53..7.
24d40 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e  ...6..195....98.
24d50 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e  ...6.8...6...34.
24d60 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36  .8.3..17...2...6
24d70 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e  .6....28....419.
24d80 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 27 29 0a 20 20  .5....8..79').  
24d90 29 2c 0a 20 20 64 69 67 69 74 73 28 7a 2c 20 6c  ),.  digits(z, l
24da0 70 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55  p) AS (.    VALU
24db0 45 53 28 27 31 27 2c 20 31 29 0a 20 20 20 20 55  ES('1', 1).    U
24dc0 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 0a  NION ALL SELECT.
24dd0 20 20 20 20 43 41 53 54 28 6c 70 2b 31 20 41 53      CAST(lp+1 AS
24de0 20 54 45 58 54 29 2c 20 6c 70 2b 31 20 46 52 4f   TEXT), lp+1 FRO
24df0 4d 20 64 69 67 69 74 73 20 57 48 45 52 45 20 6c  M digits WHERE l
24e00 70 3c 39 0a 20 20 29 2c 0a 20 20 78 28 73 2c 20  p<9.  ),.  x(s, 
24e10 69 6e 64 29 20 41 53 20 28 0a 20 20 20 20 53 45  ind) AS (.    SE
24e20 4c 45 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28  LECT sud, instr(
24e30 73 75 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69  sud, '.') FROM i
24e40 6e 70 75 74 0a 20 20 20 20 55 4e 49 4f 4e 20 41  nput.    UNION A
24e50 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 0a 20 20  LL.    SELECT.  
24e60 20 20 20 20 73 75 62 73 74 72 28 73 2c 20 31 2c      substr(s, 1,
24e70 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20   ind-1) || z || 
24e80 73 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29  substr(s, ind+1)
24e90 2c 0a 20 20 20 20 20 20 69 6e 73 74 72 28 20 73  ,.      instr( s
24ea0 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d  ubstr(s, 1, ind-
24eb0 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74  1) || z || subst
24ec0 72 28 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27  r(s, ind+1), '.'
24ed0 20 29 0a 20 20 20 20 20 46 52 4f 4d 20 78 2c 20   ).     FROM x, 
24ee0 64 69 67 69 74 73 20 41 53 20 7a 0a 20 20 20 20  digits AS z.    
24ef0 57 48 45 52 45 20 69 6e 64 3e 30 0a 20 20 20 20  WHERE ind>0.    
24f00 20 20 41 4e 44 20 4e 4f 54 20 45 58 49 53 54 53    AND NOT EXISTS
24f10 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 53   (.            S
24f20 45 4c 45 43 54 20 31 0a 20 20 20 20 20 20 20 20  ELECT 1.        
24f30 20 20 20 20 20 20 46 52 4f 4d 20 64 69 67 69 74        FROM digit
24f40 73 20 41 53 20 6c 70 0a 20 20 20 20 20 20 20 20  s AS lp.        
24f50 20 20 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d       WHERE z.z =
24f60 20 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64   substr(s, ((ind
24f70 2d 31 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31  -1)/9)*9 + lp, 1
24f80 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
24f90 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74    OR z.z = subst
24fa0 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 25 39 29  r(s, ((ind-1)%9)
24fb0 20 2b 20 28 6c 70 2d 31 29 2a 39 20 2b 20 31 2c   + (lp-1)*9 + 1,
24fc0 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   1).            
24fd0 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62      OR z.z = sub
24fe0 73 74 72 28 73 2c 20 28 28 28 69 6e 64 2d 31 29  str(s, (((ind-1)
24ff0 2f 33 29 20 25 20 33 29 20 2a 20 33 0a 20 20 20  /3) % 3) * 3.   
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 20 20 20 20 2b 20 28 28 69 6e 64 2d 31 29 2f       + ((ind-1)/
25020 32 37 29 20 2a 20 32 37 20 2b 20 6c 70 0a 20 20  27) * 27 + lp.  
25030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25040 20 20 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20        + ((lp-1) 
25050 2f 20 33 29 20 2a 20 36 2c 20 31 29 0a 20 20 20  / 3) * 6, 1).   
25060 20 20 20 20 20 20 29 0a 20 20 29 0a 53 45 4c 45        ).  ).SELE
25070 43 54 20 73 20 46 52 4f 4d 20 78 20 57 48 45 52  CT s FROM x WHER
25080 45 20 69 6e 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c  E ind=0;.</pre><
25090 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
250a0 3e 54 68 65 20 22 69 6e 70 75 74 22 20 43 54 45  >The "input" CTE
250b0 20 64 65 66 69 6e 65 73 20 74 68 65 20 69 6e 70   defines the inp
250c0 75 74 20 70 75 7a 7a 6c 65 2e 0a 54 68 65 20 22  ut puzzle..The "
250d0 64 69 67 69 74 73 22 20 43 54 45 20 64 65 66 69  digits" CTE defi
250e0 6e 65 73 20 61 20 74 61 62 6c 65 20 74 68 61 74  nes a table that
250f0 20 68 6f 6c 64 73 20 61 6c 6c 20 64 69 67 69 74   holds all digit
25100 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  s between 1 and 
25110 39 2e 0a 54 68 65 20 77 6f 72 6b 20 6f 66 20 73  9..The work of s
25120 6f 6c 76 69 6e 67 20 74 68 65 20 70 75 7a 7a 6c  olving the puzzl
25130 65 20 69 73 20 75 6e 64 65 72 74 61 6b 65 6e 20  e is undertaken 
25140 62 79 20 74 68 65 20 22 78 22 20 43 54 45 2e 0a  by the "x" CTE..
25150 41 6e 20 65 6e 74 72 79 20 69 6e 20 78 28 73 2c  An entry in x(s,
25160 69 6e 64 29 20 6d 65 61 6e 73 20 74 68 61 74 20  ind) means that 
25170 74 68 65 20 38 31 2d 63 68 61 72 61 63 74 65 72  the 81-character
25180 20 73 74 72 69 6e 67 20 22 73 22 20 69 73 20 61   string "s" is a
25190 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75   valid.sudoku pu
251a0 7a 7a 6c 65 20 28 69 74 20 68 61 73 20 6e 6f 20  zzle (it has no 
251b0 63 6f 6e 66 6c 69 63 74 73 29 20 61 6e 64 20 74  conflicts) and t
251c0 68 61 74 20 74 68 65 20 66 69 72 73 74 20 75 6e  hat the first un
251d0 6b 6e 6f 77 6e 20 63 68 61 72 61 63 74 65 72 0a  known character.
251e0 69 73 20 61 74 20 70 6f 73 69 74 69 6f 6e 20 22  is at position "
251f0 69 6e 64 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20  ind", or ind==0 
25200 69 66 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72  if all character
25210 20 70 6f 73 69 74 69 6f 6e 73 20 61 72 65 20 66   positions are f
25220 69 6c 6c 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f  illed in..The go
25230 61 6c 2c 20 74 68 65 6e 2c 20 69 73 20 74 6f 20  al, then, is to 
25240 63 6f 6d 70 75 74 65 20 65 6e 74 72 69 65 73 20  compute entries 
25250 66 6f 72 20 22 78 22 20 77 69 74 68 20 61 6e 20  for "x" with an 
25260 22 69 6e 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e  "ind" of 0...<p>
25270 54 68 65 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73  The solver works
25280 20 62 79 20 61 64 64 69 6e 67 20 6e 65 77 20 65   by adding new e
25290 6e 74 72 69 65 73 20 74 6f 20 74 68 65 20 22 78  ntries to the "x
252a0 22 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  " recursive tabl
252b0 65 2e 0a 47 69 76 65 6e 20 70 72 69 6f 72 20 65  e..Given prior e
252c0 6e 74 72 69 65 73 2c 20 74 68 65 20 72 65 63 75  ntries, the recu
252d0 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74 72 69  rsive-select tri
252e0 65 73 20 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20  es to fill in a 
252f0 73 69 6e 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74  single new.posit
25300 69 6f 6e 20 77 69 74 68 20 61 6c 6c 20 76 61 6c  ion with all val
25310 75 65 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e  ues between 1 an
25320 64 20 39 20 74 68 61 74 20 61 63 74 75 61 6c 6c  d 9 that actuall
25330 79 20 77 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70  y work in that.p
25340 6f 73 69 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f  osition.  The co
25350 6d 70 6c 69 63 61 74 65 64 20 22 4e 4f 54 20 45  mplicated "NOT E
25360 58 49 53 54 53 22 20 73 75 62 71 75 65 72 79 20  XISTS" subquery 
25370 69 73 20 74 68 65 20 6d 61 67 69 63 20 74 68 61  is the magic tha
25380 74 0a 66 69 67 75 72 65 73 20 6f 75 74 20 77 68  t.figures out wh
25390 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
253a0 68 20 63 61 6e 64 69 64 61 74 65 20 22 73 22 20  h candidate "s" 
253b0 73 74 72 69 6e 67 20 69 73 20 61 20 76 61 6c 69  string is a vali
253c0 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20  d.sudoku puzzle 
253d0 6f 72 20 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20  or not...<p>The 
253e0 66 69 6e 61 6c 20 61 6e 73 77 65 72 20 69 73 20  final answer is 
253f0 66 6f 75 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67  found by looking
25400 20 66 6f 72 20 61 20 73 74 72 69 6e 67 20 77 69   for a string wi
25410 74 68 20 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68  th ind==0..If th
25420 65 20 6f 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b  e original sudok
25430 75 20 70 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f  u problem did no
25440 74 20 68 61 76 65 20 61 20 75 6e 69 71 75 65 20  t have a unique 
25450 73 6f 6c 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74  solution, then.t
25460 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 72 65  he query will re
25470 74 75 72 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c  turn all possibl
25480 65 20 73 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66  e solutions.  If
25490 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 70 72   the original pr
254a0 6f 62 6c 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76  oblem.was unsolv
254b0 61 62 6c 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f  able, then no ro
254c0 77 73 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72  ws will be retur
254d0 6e 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  ned.  In this ca
254e0 73 65 2c 20 74 68 65 20 75 6e 69 71 75 65 0a 61  se, the unique.a
254f0 6e 73 77 65 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63  nswer is:..<bloc
25500 6b 71 75 6f 74 65 3e 0a 35 33 34 36 37 38 39 31  kquote>.53467891
25510 32 36 37 32 31 39 35 33 34 38 31 39 38 33 34 32  2672195348198342
25520 35 36 37 38 35 39 37 36 31 34 32 33 34 32 36 38  5678597614234268
25530 35 33 37 39 31 37 31 33 39 32 34 38 35 36 39 36  5379171392485696
25540 31 35 33 37 32 38 34 32 38 37 34 31 39 36 33 35  1537284287419635
25550 33 34 35 32 38 36 31 37 39 0a 3c 2f 62 6c 6f 63  345286179.</bloc
25560 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
25570 73 6f 6c 75 74 69 6f 6e 20 77 61 73 20 63 6f 6d  solution was com
25580 70 75 74 65 64 20 69 6e 20 6c 65 73 73 20 74 68  puted in less th
25590 61 6e 20 33 30 30 20 6d 69 6c 6c 69 73 65 63 6f  an 300 milliseco
255a0 6e 64 73 20 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a  nds on a modern.
255b0 77 6f 72 6b 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68  workstation...<h
255c0 33 3e 4c 69 6d 69 74 61 74 69 6f 6e 73 20 41 6e  3>Limitations An
255d0 64 20 43 61 76 65 61 74 73 3c 2f 68 33 3e 0a 0a  d Caveats</h3>..
255e0 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65  <ul>.<li><p>.The
255f0 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e   WITH clause can
25600 6e 6f 74 20 62 65 20 75 73 65 64 20 77 69 74 68  not be used with
25610 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 52 49  in a [CREATE TRI
25620 47 47 45 52 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54  GGER]..<li><p>.T
25630 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 6d  he WITH clause m
25640 75 73 74 20 61 70 70 65 61 72 20 61 74 20 74 68  ust appear 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 74 6f 70 2d 6c 65 76 65 6c 20 5b 53 45 4c 45   top-level [SELE
25670 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72  CT] statement.or
25680 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
25690 67 20 6f 66 20 61 20 73 75 62 71 75 65 72 79 2e  g of a subquery.
256a0 20 20 54 68 65 20 57 49 54 48 20 63 6c 61 75 73    The WITH claus
256b0 65 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 70  e cannot be prep
256c0 65 6e 64 65 64 20 74 6f 0a 74 68 65 20 73 65 63  ended to.the sec
256d0 6f 6e 64 20 6f 72 20 73 75 62 73 65 71 75 65 6e  ond or subsequen
256e0 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t SELECT stateme
256f0 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e  nt of a [compoun
25700 64 20 73 65 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c  d select]..<li><
25710 70 3e 0a 54 68 65 20 53 51 4c 3a 31 39 39 39 20  p>.The SQL:1999 
25720 73 70 65 63 20 72 65 71 75 69 72 65 73 20 74 68  spec requires th
25730 61 74 20 74 68 65 20 52 45 43 55 52 53 49 56 45  at the RECURSIVE
25740 20 6b 65 79 77 6f 72 64 20 66 6f 6c 6c 6f 77 20   keyword follow 
25750 57 49 54 48 20 69 6e 20 61 6e 79 0a 57 49 54 48  WITH in any.WITH
25760 20 63 6c 61 75 73 65 20 74 68 61 74 20 69 6e 63   clause that inc
25770 6c 75 64 65 73 20 61 20 72 65 63 75 72 73 69 76  ludes a recursiv
25780 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
25790 78 70 72 65 73 73 69 6f 6e 2e 20 20 48 6f 77 65  xpression.  Howe
257a0 76 65 72 2c 20 66 6f 72 0a 63 6f 6d 70 61 74 69  ver, for.compati
257b0 62 69 6c 69 74 79 20 77 69 74 68 20 53 71 6c 53  bility with SqlS
257c0 65 72 76 65 72 20 61 6e 64 20 4f 72 61 63 6c 65  erver and Oracle
257d0 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
257e0 74 20 65 6e 66 6f 72 63 65 20 74 68 69 73 20 72  t enforce this r
257f0 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  ule..</ul>..<tcl
25800 3e 0a 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 23 23 23 23 23  ################
25820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25850 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54  #.Section SELECT
25860 20 73 65 6c 65 63 74 20 7b 53 45 4c 45 43 54 20   select {SELECT 
25870 71 75 65 72 79 7d 0a 0a 52 65 63 75 72 73 69 76  query}..Recursiv
25880 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  eBubbleDiagram s
25890 65 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c  elect-stmt.</tcl
258a0 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  >...<p>The SELEC
258b0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  T statement is u
258c0 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  sed to query the
258d0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a   database.  The.
258e0 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45  result of a SELE
258f0 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  CT is zero or mo
25900 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20  re rows of data 
25910 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68  where each row.h
25920 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65  as a fixed numbe
25930 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 41  r of columns.  A
25940 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
25950 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 0a  t does not make.
25960 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74  any changes to t
25970 68 65 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70  he database...<p
25980 3e 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74  >The "[select-st
25990 6d 74 5d 22 20 73 79 6e 74 61 78 20 64 69 61 67  mt]" syntax diag
259a0 72 61 6d 20 61 62 6f 76 65 20 61 74 74 65 6d 70  ram above attemp
259b0 74 73 20 74 6f 20 73 68 6f 77 20 61 73 20 6d 75  ts to show as mu
259c0 63 68 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54  ch of the.SELECT
259d0 20 73 74 61 74 65 6d 65 6e 74 20 73 79 6e 74 61   statement synta
259e0 78 20 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e  x as possible in
259f0 20 61 20 73 69 6e 67 6c 65 20 64 69 61 67 72 61   a single diagra
25a00 6d 2c 20 62 65 63 61 75 73 65 20 73 6f 6d 65 20  m, because some 
25a10 72 65 61 64 65 72 73 0a 66 69 6e 64 20 74 68 61  readers.find tha
25a20 74 20 68 65 6c 70 66 75 6c 2e 20 20 54 68 65 20  t helpful.  The 
25a30 66 6f 6c 6c 6f 77 69 6e 67 20 22 5b 66 61 63 74  following "[fact
25a40 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74  ored-select-stmt
25a50 5d 22 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61  ]" is an alterna
25a60 74 69 76 65 0a 73 79 6e 74 61 78 20 64 69 61 67  tive.syntax diag
25a70 72 61 6d 73 20 74 68 61 74 20 65 78 70 72 65 73  rams that expres
25a80 73 65 73 20 74 68 65 20 73 61 6d 65 20 73 79 6e  ses the same syn
25a90 74 61 78 20 62 75 74 20 74 72 69 65 73 20 74 6f  tax but tries to
25aa0 20 62 72 65 61 6b 20 74 68 65 20 73 79 6e 74 61   break the synta
25ab0 78 20 0a 64 6f 77 6e 20 69 6e 74 6f 20 73 6d 61  x .down into sma
25ac0 6c 6c 65 72 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74  ller chunks...<t
25ad0 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62  cl>.RecursiveBub
25ae0 62 6c 65 44 69 61 67 72 61 6d 20 2d 2d 69 6e 69  bleDiagram --ini
25af0 74 69 61 6c 6c 79 2d 68 69 64 64 65 6e 20 66 61  tially-hidden fa
25b00 63 74 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74  ctored-select-st
25b10 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c  mt select-core.<
25b20 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74  /tcl>..<p>Note t
25b30 68 61 74 20 74 68 65 72 65 20 61 72 65 20 70 61  hat there are pa
25b40 74 68 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ths through the 
25b50 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
25b60 74 68 61 74 0a 61 72 65 20 6e 6f 74 20 61 6c 6c  that.are not all
25b70 6f 77 65 64 20 69 6e 20 70 72 61 63 74 69 63 65  owed in practice
25b80 2e 20 20 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73  .  Some examples
25b90 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41  :.<ul>.<li>A [VA
25ba0 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e  LUES] clause can
25bb0 20 62 65 20 74 68 65 20 66 69 72 73 74 20 65 6c   be the first el
25bc0 65 6d 65 6e 74 20 69 6e 20 61 20 5b 63 6f 6d 70  ement in a [comp
25bd0 6f 75 6e 64 20 53 45 4c 45 43 54 5d 0a 20 20 20  ound SELECT].   
25be0 20 74 68 61 74 20 75 73 65 73 20 61 20 5b 57 49   that uses a [WI
25bf0 54 48 5d 20 63 6c 61 75 73 65 2c 20 62 75 74 20  TH] clause, but 
25c00 61 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  a [simple SELECT
25c10 5d 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20  ] that consists 
25c20 6f 66 0a 20 20 20 20 6a 75 73 74 20 61 20 5b 56  of.    just a [V
25c30 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61  ALUES] clause ca
25c40 6e 6e 6f 74 20 62 65 20 70 72 65 63 65 64 65 64  nnot be preceded
25c50 20 62 79 20 61 20 5b 57 49 54 48 5d 20 63 6c 61   by a [WITH] cla
25c60 75 73 65 2e 0a 3c 6c 69 3e 54 68 65 20 5b 57 49  use..<li>The [WI
25c70 54 48 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20  TH] clause must 
25c80 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 66 69 72  occur on the fir
25c90 73 74 20 53 45 4c 45 43 54 20 6f 66 20 61 20 5b  st SELECT of a [
25ca0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
25cb0 2e 0a 20 20 20 20 49 74 20 63 61 6e 6e 6f 74 20  ..    It cannot 
25cc0 66 6f 6c 6c 6f 77 20 61 20 5b 63 6f 6d 70 6f 75  follow a [compou
25cd0 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f  nd-operator]..</
25ce0 75 6c 3e 0a 54 68 65 73 65 20 61 6e 64 20 6f 74  ul>.These and ot
25cf0 68 65 72 20 73 69 6d 69 6c 61 72 20 73 79 6e 74  her similar synt
25d00 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  ax restrictions 
25d10 61 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e  are described in
25d20 20 74 68 65 20 74 65 78 74 2e 0a 0a 3c 70 3e 54   the text...<p>T
25d30 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
25d40 65 6e 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ent is the most 
25d50 63 6f 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d  complicated comm
25d60 61 6e 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  and in the SQL l
25d70 61 6e 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65  anguage..To make
25d80 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e   the description
25d90 20 65 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f   easier to follo
25da0 77 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70  w, some of the p
25db0 61 73 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65  assages below de
25dc0 73 63 72 69 62 65 0a 74 68 65 20 77 61 79 20 74  scribe.the way t
25dd0 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  he data returned
25de0 20 62 79 20 61 20 53 45 4c 45 43 54 20 73 74 61   by a SELECT sta
25df0 74 65 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d  tement is determ
25e00 69 6e 65 64 20 61 73 20 61 20 73 65 72 69 65 73  ined as a series
25e10 20 6f 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73   of.steps. It is
25e20 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65   important to ke
25e30 65 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20  ep in mind that 
25e40 74 68 69 73 20 69 73 20 70 75 72 65 6c 79 20 69  this is purely i
25e50 6c 6c 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e  llustrative -.in
25e60 20 70 72 61 63 74 69 63 65 20 6e 65 69 74 68 65   practice neithe
25e70 72 20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79  r SQLite nor any
25e80 20 6f 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e   other SQL engin
25e90 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  e is required to
25ea0 20 66 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72   follow .this or
25eb0 20 61 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69   any other speci
25ec0 66 69 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 74  fic process...<t
25ed0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
25ee0 69 6d 70 6c 65 73 65 6c 65 63 74 20 7b 73 69 6d  impleselect {sim
25ef0 70 6c 65 20 53 45 4c 45 43 54 7d 3c 2f 74 63 6c  ple SELECT}</tcl
25f00 3e 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c  >.<h3>Simple Sel
25f10 65 63 74 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f  ect Processing</
25f20 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65  h3>..<p>The core
25f30 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
25f40 74 65 6d 65 6e 74 20 69 73 20 61 20 22 73 69 6d  tement is a "sim
25f50 70 6c 65 20 53 45 4c 45 43 54 22 20 73 68 6f 77  ple SELECT" show
25f60 6e 20 62 79 20 74 68 65 0a 5b 73 65 6c 65 63 74  n by the.[select
25f70 2d 63 6f 72 65 5d 20 61 6e 64 20 5b 73 69 6d 70  -core] and [simp
25f80 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 20  le-select-stmt] 
25f90 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
25fa0 62 65 6c 6f 77 2e 20 20 0a 49 6e 20 70 72 61 63  below.  .In prac
25fb0 74 69 63 65 2c 20 6d 6f 73 74 20 53 45 4c 45 43  tice, most SELEC
25fc0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65  T statements are
25fd0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
25fe0 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c  tatements...<tcl
25ff0 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  >.RecursiveBubbl
26000 65 44 69 61 67 72 61 6d 20 73 69 6d 70 6c 65 2d  eDiagram simple-
26010 73 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65  select-stmt sele
26020 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a  ct-core.</tcl>..
26030 3c 70 3e 47 65 6e 65 72 61 74 69 6e 67 20 74 68  <p>Generating th
26040 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73  e results of a s
26050 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73 74 61  imple SELECT.sta
26060 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e  tement is presen
26070 74 65 64 20 61 73 20 61 20 66 6f 75 72 20 73 74  ted as a four st
26080 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20 74 68  ep process in th
26090 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62 65  e description be
260a0 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69  low:..<ol>.  <li
260b0 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73  > <p>[FROM claus
260c0 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54  e] processing: T
260d0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 6f  he input data fo
260e0 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  r the simple SEL
260f0 45 43 54 20 69 73 0a 20 20 20 20 20 20 20 64 65  ECT is.       de
26100 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e  termined. The in
26110 70 75 74 20 64 61 74 61 20 69 73 20 65 69 74 68  put data is eith
26120 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20  er implicitly a 
26130 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20  single row with 
26140 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73  0.       columns
26150 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f   (if there is no
26160 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72   FROM clause) or
26170 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
26180 79 20 74 68 65 20 46 52 4f 4d 0a 20 20 20 20 20  y the FROM.     
26190 20 20 63 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e    clause..  <li>
261a0 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c 61 75 73   <p>[WHERE claus
261b0 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54  e] processing: T
261c0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73  he input data is
261d0 20 66 69 6c 74 65 72 65 64 20 75 73 69 6e 67 20   filtered using 
261e0 74 68 65 20 57 48 45 52 45 0a 20 20 20 20 20 20  the WHERE.      
261f0 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
26200 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e  on.  .  <li> <p>
26210 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f 55 50 20  [GROUP BY|GROUP 
26220 42 59 2c 20 48 41 56 49 4e 47 20 61 6e 64 20 72  BY, HAVING and r
26230 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70  esult-column exp
26240 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73  ression] process
26250 69 6e 67 3a 20 0a 20 20 20 20 20 20 20 54 68 65  ing: .       The
26260 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
26270 6f 77 73 20 69 73 20 63 6f 6d 70 75 74 65 64 20  ows is computed 
26280 62 79 20 61 67 67 72 65 67 61 74 69 6e 67 20 74  by aggregating t
26290 68 65 20 64 61 74 61 20 61 63 63 6f 72 64 69 6e  he data accordin
262a0 67 20 74 6f 0a 20 20 20 20 20 20 20 61 6e 79 20  g to.       any 
262b0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
262c0 61 6e 64 20 63 61 6c 63 75 6c 61 74 69 6e 67 20  and calculating 
262d0 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 65  the result-set e
262e0 78 70 72 65 73 73 69 6f 6e 73 20 66 6f 72 20 74  xpressions for t
262f0 68 65 0a 20 20 20 20 20 20 20 72 6f 77 73 20 6f  he.       rows o
26300 66 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  f the filtered i
26310 6e 70 75 74 20 64 61 74 61 73 65 74 2e 20 20 0a  nput dataset.  .
26320 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49    <li> <p>[DISTI
26330 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c  NCT|DISTINCT/ALL
26340 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f 63 65 73   keyword] proces
26350 73 69 6e 67 3a 20 49 66 20 74 68 65 20 71 75 65  sing: If the que
26360 72 79 20 69 73 20 61 20 22 53 45 4c 45 43 54 0a  ry is a "SELECT.
26370 20 20 20 20 20 20 20 44 49 53 54 49 4e 43 54 22         DISTINCT"
26380 20 71 75 65 72 79 2c 20 64 75 70 6c 69 63 61 74   query, duplicat
26390 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76  e rows are remov
263a0 65 64 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20  ed from the set 
263b0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a  of result rows..
263c0 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  </ol>..<p>There 
263d0 61 72 65 20 74 77 6f 20 74 79 70 65 73 20 6f 66  are two types of
263e0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
263f0 74 61 74 65 6d 65 6e 74 20 2d 20 61 67 67 72 65  tatement - aggre
26400 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67  gate and .non-ag
26410 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2e  gregate queries.
26420 20 5e 41 20 73 69 6d 70 6c 65 20 53 45 4c 45 43   ^A simple SELEC
26430 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  T statement is a
26440 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
26450 79 20 69 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73  y if.it contains
26460 20 65 69 74 68 65 72 20 61 20 47 52 4f 55 50 20   either a GROUP 
26470 42 59 20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65  BY clause or one
26480 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
26490 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20  te functions.in 
264a0 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2e 20  the result-set. 
264b0 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 61  ^Otherwise, if a
264c0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 63   simple SELECT c
264d0 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67 67 72 65  ontains no aggre
264e0 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f  gate.functions o
264f0 72 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  r a GROUP BY cla
26500 75 73 65 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e  use, it is a non
26510 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
26520 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65  ...<p><b>1. Dete
26530 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70  rmination of inp
26540 75 74 20 64 61 74 61 20 28 46 52 4f 4d 20 63 6c  ut data (FROM cl
26550 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 29  ause processing)
26560 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72  .</b>.<tcl>hd_fr
26570 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73  agment fromclaus
26580 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  e</tcl>.<tcl>hd_
26590 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63  keywords {FROM c
265a0 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  lause}</tcl>..<p
265b0 3e 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20  >The input data 
265c0 75 73 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65  used by a simple
265d0 20 53 45 4c 45 43 54 20 71 75 65 72 79 20 69 73   SELECT query is
265e0 20 61 20 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f   a set of <i>N</
265f0 69 3e 20 72 6f 77 73 20 0a 65 61 63 68 20 3c 69  i> rows .each <i
26600 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77  >M</i> columns w
26610 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68  ide...<p>^(If th
26620 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
26630 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20   omitted from a 
26640 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
26650 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
26660 65 20 0a 69 6e 70 75 74 20 64 61 74 61 20 69 73  e .input data is
26670 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69   implicitly a si
26680 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f  ngle row zero co
26690 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20 28 69 2e  lumns wide)^ (i.
266a0 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e  e. <i>N</i>=1 an
266b0 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a  d.<i>M</i>=0)...
266c0 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20 63 6c 61  <p>If a FROM cla
266d0 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
266e0 2c 20 74 68 65 20 64 61 74 61 20 6f 6e 20 77 68  , the data on wh
266f0 69 63 68 20 61 20 73 69 6d 70 6c 65 20 53 45 4c  ich a simple SEL
26700 45 43 54 20 71 75 65 72 79 0a 6f 70 65 72 61 74  ECT query.operat
26710 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68  es comes from th
26720 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  e one or more ta
26730 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
26740 65 73 20 28 53 45 4c 45 43 54 20 73 74 61 74 65  es (SELECT state
26750 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68  ments.in parenth
26760 65 73 69 73 29 20 73 70 65 63 69 66 69 65 64 20  esis) specified 
26770 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52  following the FR
26780 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73  OM keyword. ^A s
26790 75 62 71 75 65 72 79 20 73 70 65 63 69 66 69 65  ubquery specifie
267a0 64 0a 69 6e 20 74 68 65 20 74 61 62 6c 65 2d 6f  d.in the table-o
267b0 72 2d 73 75 62 71 75 65 72 79 20 66 6f 6c 6c 6f  r-subquery follo
267c0 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c  wing the FROM cl
267d0 61 75 73 65 20 69 6e 20 61 20 0a 73 69 6d 70 6c  ause in a .simpl
267e0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
267f0 6e 74 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73  nt is.handled as
26800 20 69 66 20 69 74 20 77 61 73 20 61 20 74 61 62   if it was a tab
26810 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
26820 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20  e data returned 
26830 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  by executing the
26840 0a 73 75 62 71 75 65 72 79 20 73 74 61 74 65 6d  .subquery statem
26850 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d  ent. ^Each colum
26860 6e 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  n of the subquer
26870 79 20 68 61 73 20 74 68 65 0a 5b 63 6f 6c 6c 61  y has the.[colla
26880 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73  tion|collation s
26890 65 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66  equence] and [af
268a0 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
268b0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70  orresponding exp
268c0 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73  ression.in the s
268d0 75 62 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e  ubquery statemen
268e0 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72 65  t...<p>^If there
268f0 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c   is only a singl
26900 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  e table or subqu
26910 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 0a  ery in the FROM.
26920 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
26930 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
26940 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
26950 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
26960 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a  contents of the.
26970 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66  named table. ^If
26980 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74   there is more t
26990 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 6f 72  han one table or
269a0 20 73 75 62 71 75 65 72 79 20 69 6e 20 46 52 4f   subquery in FRO
269b0 4d 20 63 6c 61 75 73 65 0a 74 68 65 6e 20 74 68  M clause.then th
269c0 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 6c  e contents of al
269d0 6c 20 74 61 62 6c 65 73 20 61 6e 64 2f 6f 72 20  l tables and/or 
269e0 73 75 62 71 75 65 72 69 65 73 0a 61 72 65 20 6a  subqueries.are j
269f0 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  oined into a sin
26a00 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f 72 20  gle dataset for 
26a10 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  the simple SELEC
26a20 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 6f  T statement to o
26a30 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63 74  perate on..Exact
26a40 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74 61 20  ly how the data 
26a50 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65 70 65  is combined depe
26a60 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69  nds on the speci
26a70 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74  fic [join-operat
26a80 6f 72 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f  or] and.[join-co
26a90 6e 73 74 72 61 69 6e 74 5d 20 75 73 65 64 20 74  nstraint] used t
26aa0 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65 20 74 61  o connect the ta
26ab0 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
26ac0 65 73 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70  es together...<p
26ad0 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51  >All joins in SQ
26ae0 4c 69 74 65 20 61 72 65 20 62 61 73 65 64 20 6f  Lite are based o
26af0 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
26b00 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c  product of the l
26b10 65 66 74 20 61 6e 64 0a 72 69 67 68 74 2d 68 61  eft and.right-ha
26b20 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 54 68  nd datasets. ^Th
26b30 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
26b40 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
26b50 63 74 20 64 61 74 61 73 65 74 20 61 72 65 2c 20  ct dataset are, 
26b60 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74  in .order, all t
26b70 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
26b80 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61  e left-hand data
26b90 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  set followed by 
26ba0 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a  all the columns.
26bb0 6f 66 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  of the right-han
26bc0 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 72  d dataset. ^Ther
26bd0 65 20 69 73 20 61 20 72 6f 77 20 69 6e 20 74 68  e is a row in th
26be0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
26bf0 75 63 74 20 64 61 74 61 73 65 74 0a 66 6f 72 6d  uct dataset.form
26c00 65 64 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20  ed by combining 
26c10 65 61 63 68 20 75 6e 69 71 75 65 20 63 6f 6d 62  each unique comb
26c20 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77  ination of a row
26c30 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68   from the left-h
26c40 61 6e 64 20 0a 61 6e 64 20 72 69 67 68 74 2d 68  and .and right-h
26c50 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 28  and datasets. ^(
26c60 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
26c70 69 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  if the left-hand
26c80 20 64 61 74 61 73 65 74 20 63 6f 6e 73 69 73 74   dataset consist
26c90 73 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73  s of.<i>N<sub><s
26ca0 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
26cb0 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73  ></sub></i> rows
26cc0 20 6f 66 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73   of .<i>M<sub><s
26cd0 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
26ce0 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75  ></sub></i> colu
26cf0 6d 6e 73 2c 20 61 6e 64 20 74 68 65 20 72 69 67  mns, and the rig
26d00 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ht-hand dataset 
26d10 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61  of.<i>N<sub><sma
26d20 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
26d30 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20  </sub></i> rows 
26d40 6f 66 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61  of.<i>M<sub><sma
26d50 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
26d60 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d  </sub></i> colum
26d70 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 63 61 72  ns, then the car
26d80 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 69  tesian product i
26d90 73 20 61 0a 64 61 74 61 73 65 74 20 6f 66 20 0a  s a.dataset of .
26da0 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>N<sub><small>
26db0 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  left</small></su
26dc0 62 3e 26 74 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c  b>&times;N<sub><
26dd0 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61  small>right</sma
26de0 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f  ll></sub></i>.ro
26df0 77 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e  ws, each contain
26e00 69 6e 67 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73  ing .<i>M<sub><s
26e10 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
26e20 3e 3c 2f 73 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73  ></sub>+M<sub><s
26e30 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c  mall>right</smal
26e40 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c  l></sub></i> col
26e50 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  umns.)^..<p>^If 
26e60 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f  the join-operato
26e70 72 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e  r is "CROSS JOIN
26e80 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c  ", "INNER JOIN",
26e90 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d   "JOIN" or a com
26ea0 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68 65  ma.(",") and the
26eb0 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55  re is no ON or U
26ec0 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65  SING clause, the
26ed0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
26ee0 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70  the join is.simp
26ef0 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  ly the cartesian
26f00 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20   product of the 
26f10 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
26f20 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a 49  and datasets. .I
26f30 66 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  f join-operator 
26f40 64 6f 65 73 20 68 61 76 65 20 4f 4e 20 6f 72 20  does have ON or 
26f50 55 53 49 4e 47 20 63 6c 61 75 73 65 73 2c 20 74  USING clauses, t
26f60 68 6f 73 65 20 61 72 65 20 68 61 6e 64 6c 65 64  hose are handled
26f70 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74 68   according to.th
26f80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c  e following bull
26f90 65 74 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e  et points:..<ul>
26fa0 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20  .  <li> <p>^(If 
26fb0 74 68 65 72 65 20 69 73 20 61 6e 20 4f 4e 20 63  there is an ON c
26fc0 6c 61 75 73 65 20 74 68 65 6e 20 74 68 65 20 4f  lause then the O
26fd0 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a  N expression is.
26fe0 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 65 64         evaluated
26ff0 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
27000 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
27010 72 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20 20  roduct as a .   
27020 20 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70      [boolean exp
27030 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72  ression]. Only r
27040 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
27050 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
27060 6c 75 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20  luates to .     
27070 20 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75    true are inclu
27080 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ded from the dat
27090 61 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20  aset.)^..  <li> 
270a0 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
270b0 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 0a 20  a USING clause. 
270c0 20 20 20 20 20 20 74 68 65 6e 20 65 61 63 68 20        then each 
270d0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
270e0 6d 65 73 20 73 70 65 63 69 66 69 65 64 20 6d 75  mes specified mu
270f0 73 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 20  st exist in the 
27100 64 61 74 61 73 65 74 73 20 74 6f 20 0a 20 20 20  datasets to .   
27110 20 20 20 20 62 6f 74 68 20 74 68 65 20 6c 65 66      both the lef
27120 74 20 61 6e 64 20 72 69 67 68 74 20 6f 66 20 74  t and right of t
27130 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
27140 2e 20 5e 28 46 6f 72 20 65 61 63 68 20 70 61 69  . ^(For each pai
27150 72 20 6f 66 20 6e 61 6d 65 64 0a 20 20 20 20 20  r of named.     
27160 20 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65    columns, the e
27170 78 70 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58  xpression "lhs.X
27180 20 3d 20 72 68 73 2e 58 22 20 69 73 20 65 76 61   = rhs.X" is eva
27190 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
271a0 72 6f 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68  row of.       th
271b0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
271c0 75 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61  uct as a [boolea
271d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f  n expression]. O
271e0 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69  nly rows for whi
271f0 63 68 0a 20 20 20 20 20 20 20 61 6c 6c 20 73 75  ch.       all su
27200 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65  ch expressions e
27210 76 61 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65  valuates to true
27220 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72   are included fr
27230 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20 72 65  om the.       re
27240 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68 65  sult set.)^ ^Whe
27250 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75  n comparing valu
27260 65 73 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  es as a result o
27270 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  f a USING clause
27280 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e 6f 72  , the.       nor
27290 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 68 61  mal rules for ha
272a0 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74 69 65  ndling affinitie
272b0 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  s, collation seq
272c0 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a  uences and NULL.
272d0 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e         values in
272e0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70 70   comparisons app
272f0 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20  ly. ^The column 
27300 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
27310 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 6c   on the.       l
27320 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
27330 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74   the join-operat
27340 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  or is considered
27350 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c 65   to be on the le
27360 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 73  ft-hand.       s
27370 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ide of the compa
27380 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28  rison operator (
27390 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  =) for the purpo
273a0 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ses of collation
273b0 20 0a 20 20 20 20 20 20 20 73 65 71 75 65 6e 63   .       sequenc
273c0 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79 20 70  e and affinity p
273d0 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20  recedence...    
273e0 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20     <p>^For each 
273f0 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  pair of columns 
27400 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
27410 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
27420 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  e column.       
27430 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
27440 61 6e 64 20 64 61 74 61 73 65 74 20 69 73 20 6f  and dataset is o
27450 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
27460 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74 2e 20  joined dataset. 
27470 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20 69 73  ^This .       is
27480 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72   the only differ
27490 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 55  ence between a U
274a0 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e 64 20  SING clause and 
274b0 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 4f  its equivalent O
274c0 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61  N.       constra
274d0 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  int...  <li> <p>
274e0 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52 41 4c  ^(If the NATURAL
274f0 20 6b 65 79 77 6f 72 64 20 69 73 20 69 6e 20 74   keyword is in t
27500 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
27510 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20 20 20   then an.       
27520 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47 20 63  implicit USING c
27530 6c 61 75 73 65 20 69 73 20 61 64 64 65 64 20 74  lause is added t
27540 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74  o the join-const
27550 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c  raints. The impl
27560 69 63 69 74 0a 20 20 20 20 20 20 20 55 53 49 4e  icit.       USIN
27570 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e  G clause contain
27580 73 20 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f  s each of the co
27590 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20  lumn names that 
275a0 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68 0a 20  appear in both. 
275b0 20 20 20 20 20 20 74 68 65 20 6c 65 66 74 20 61        the left a
275c0 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e  nd right-hand in
275d0 70 75 74 20 64 61 74 61 73 65 74 73 2e 29 5e 20  put datasets.)^ 
275e0 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ^If the left and
275f0 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20 20 20   right-hand.    
27600 20 20 20 69 6e 70 75 74 20 64 61 74 61 73 65 74     input dataset
27610 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d  s feature no com
27620 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  mon column names
27630 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54 55 52  , then the NATUR
27640 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20 20 20  AL keyword.     
27650 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20    has no effect 
27660 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
27670 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55  f the join. ^A U
27680 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73  SING or ON claus
27690 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f 74  e may.       not
276a0 20 62 65 20 61 64 64 65 64 20 74 6f 20 61 20 6a   be added to a j
276b0 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69 66 69  oin that specifi
276c0 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  es the NATURAL k
276d0 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20  eyword...  <li> 
276e0 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e  <p>^(If the join
276f0 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 22  -operator is a "
27700 4c 45 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c  LEFT JOIN" or "L
27710 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c  EFT OUTER JOIN",
27720 20 74 68 65 6e 0a 20 20 20 20 20 20 20 61 66 74   then.       aft
27730 65 72 0a 20 20 20 20 20 20 20 74 68 65 20 4f 4e  er.       the ON
27740 20 6f 72 20 55 53 49 4e 47 20 66 69 6c 74 65 72   or USING filter
27750 69 6e 67 20 63 6c 61 75 73 65 73 20 68 61 76 65  ing clauses have
27760 20 62 65 65 6e 20 61 70 70 6c 69 65 64 2c 20 61   been applied, a
27770 6e 20 65 78 74 72 61 20 72 6f 77 20 69 73 20 0a  n extra row is .
27780 20 20 20 20 20 20 20 61 64 64 65 64 20 74 6f 20         added to 
27790 74 68 65 20 6f 75 74 70 75 74 20 66 6f 72 20 65  the output for e
277a0 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 6f  ach row in the o
277b0 72 69 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e  riginal left-han
277c0 64 20 69 6e 70 75 74 20 0a 20 20 20 20 20 20 20  d input .       
277d0 64 61 74 61 73 65 74 20 74 68 61 74 20 63 6f 72  dataset that cor
277e0 72 65 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72  responds to no r
277f0 6f 77 73 20 61 74 20 61 6c 6c 20 69 6e 20 74 68  ows at all in th
27800 65 20 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20  e composite.    
27810 20 20 20 64 61 74 61 73 65 74 20 28 69 66 20 61     dataset (if a
27820 6e 79 29 2e 29 5e 20 5e 54 68 65 20 61 64 64 65  ny).)^ ^The adde
27830 64 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e  d rows contain N
27840 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  ULL values in th
27850 65 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20  e columns.      
27860 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
27870 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c  ally contain val
27880 75 65 73 20 63 6f 70 69 65 64 20 66 72 6f 6d 20  ues copied from 
27890 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 69  the right-hand i
278a0 6e 70 75 74 0a 20 20 20 20 20 20 20 64 61 74 61  nput.       data
278b0 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70  set.  .</ul>..<p
278c0 3e 5e 28 57 68 65 6e 20 6d 6f 72 65 20 74 68 61  >^(When more tha
278d0 6e 20 74 77 6f 20 74 61 62 6c 65 73 20 61 72 65  n two tables are
278e0 20 6a 6f 69 6e 65 64 20 74 6f 67 65 74 68 65 72   joined together
278f0 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 46 52   as part of a FR
27900 4f 4d 20 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a  OM clause,.the j
27910 6f 69 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20 61  oin operations a
27920 72 65 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20  re processed in 
27930 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20  order from left 
27940 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68  to right. In oth
27950 65 72 20 0a 77 6f 72 64 73 2c 20 74 68 65 20 46  er .words, the F
27960 52 4f 4d 20 63 6c 61 75 73 65 20 28 41 20 6a 6f  ROM clause (A jo
27970 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f  in-op-1 B join-o
27980 70 2d 32 20 43 29 20 69 73 20 63 6f 6d 70 75 74  p-2 C) is comput
27990 65 64 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d  ed as .((A join-
279a0 6f 70 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d  op-1 B) join-op-
279b0 32 20 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  2 C).)^..<tcl>hd
279c0 5f 66 72 61 67 6d 65 6e 74 20 63 72 6f 73 73 6a  _fragment crossj
279d0 6f 69 6e 20 7b 74 72 65 61 74 73 20 74 68 65 20  oin {treats the 
279e0 43 52 4f 53 53 20 4a 4f 49 4e 20 6f 70 65 72 61  CROSS JOIN opera
279f0 74 6f 72 20 73 70 65 63 69 61 6c 6c 79 7d 3c 2f  tor specially}</
27a00 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20  tcl>.<p><b>Side 
27a10 6e 6f 74 65 3a 20 53 70 65 63 69 61 6c 20 68 61  note: Special ha
27a20 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20  ndling of CROSS 
27a30 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65  JOIN.</b>.^There
27a40 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63   is no differenc
27a50 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 22 49  e between the "I
27a60 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49  NNER JOIN", "JOI
27a70 4e 22 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a  N" and "," join.
27a80 6f 70 65 72 61 74 6f 72 73 2e 20 54 68 65 79 20  operators. They 
27a90 61 72 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69  are completely i
27aa0 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20 69  nterchangeable i
27ab0 6e 20 53 51 4c 69 74 65 2e 0a 5e 28 54 68 65 20  n SQLite..^(The 
27ac0 22 43 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69  "CROSS JOIN" joi
27ad0 6e 20 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75  n operator produ
27ae0 63 65 73 20 74 68 65 20 73 61 6d 65 20 72 65 73  ces the same res
27af0 75 6c 74 20 61 73 20 74 68 65 20 0a 22 49 4e 4e  ult as the ."INN
27b00 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
27b10 20 61 6e 64 20 22 2c 22 20 6f 70 65 72 61 74 6f   and "," operato
27b20 72 73 29 5e 2c 20 62 75 74 20 69 73 20 0a 5b 43  rs)^, but is .[C
27b30 52 4f 53 53 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65  ROSS JOIN|handle
27b40 64 20 64 69 66 66 65 72 65 6e 74 6c 79 20 62 79  d differently by
27b50 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
27b60 69 7a 65 72 5d 0a 69 6e 20 74 68 61 74 20 69 74  izer].in that it
27b70 20 70 72 65 76 65 6e 74 73 20 74 68 65 20 71 75   prevents the qu
27b80 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 66 72  ery optimizer fr
27b90 6f 6d 20 72 65 6f 72 64 65 72 69 6e 67 0a 74 68  om reordering.th
27ba0 65 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  e tables in the 
27bb0 6a 6f 69 6e 2e 20 20 41 6e 20 61 70 70 6c 69 63  join.  An applic
27bc0 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 72  ation programmer
27bd0 20 63 61 6e 20 75 73 65 20 74 68 65 20 43 52 4f   can use the CRO
27be0 53 53 20 4a 4f 49 4e 20 0a 6f 70 65 72 61 74 6f  SS JOIN .operato
27bf0 72 20 74 6f 20 64 69 72 65 63 74 6c 79 20 69 6e  r to directly in
27c00 66 6c 75 65 6e 63 65 20 74 68 65 20 61 6c 67 6f  fluence the algo
27c10 72 69 74 68 6d 20 74 68 61 74 20 69 73 20 63 68  rithm that is ch
27c20 6f 73 65 6e 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  osen to implemen
27c30 74 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  t.the SELECT sta
27c40 74 65 6d 65 6e 74 2e 20 20 41 76 6f 69 64 20 75  tement.  Avoid u
27c50 73 69 6e 67 20 43 52 4f 53 53 20 4a 4f 49 4e 20  sing CROSS JOIN 
27c60 65 78 63 65 70 74 20 69 6e 20 73 70 65 63 69 66  except in specif
27c70 69 63 20 73 69 74 75 61 74 69 6f 6e 73 20 0a 77  ic situations .w
27c80 68 65 72 65 20 6d 61 6e 75 61 6c 20 63 6f 6e 74  here manual cont
27c90 72 6f 6c 20 6f 66 20 74 68 65 20 71 75 65 72 79  rol of the query
27ca0 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 64 65   optimizer is de
27cb0 73 69 72 65 64 2e 20 20 41 76 6f 69 64 20 75 73  sired.  Avoid us
27cc0 69 6e 67 0a 43 52 4f 53 53 20 4a 4f 49 4e 20 65  ing.CROSS JOIN e
27cd0 61 72 6c 79 20 69 6e 20 74 68 65 20 64 65 76 65  arly in the deve
27ce0 6c 6f 70 6d 65 6e 74 20 6f 66 20 61 6e 20 61 70  lopment of an ap
27cf0 70 6c 69 63 61 74 69 6f 6e 20 61 73 20 64 6f 69  plication as doi
27d00 6e 67 20 73 6f 20 69 73 0a 61 20 3c 61 20 68 72  ng so is.a <a hr
27d10 65 66 3d 22 68 74 74 70 3a 2f 2f 63 32 2e 63 6f  ef="http://c2.co
27d20 6d 2f 63 67 69 2f 77 69 6b 69 3f 50 72 65 6d 61  m/cgi/wiki?Prema
27d30 74 75 72 65 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  tureOptimization
27d40 22 3e 70 72 65 6d 61 74 75 72 65 0a 6f 70 74 69  ">premature.opti
27d50 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54  mization</a>.  T
27d60 68 65 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c  he special handl
27d70 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49  ing of CROSS JOI
27d80 4e 20 69 73 20 61 6e 20 53 51 4c 69 74 65 2d 73  N is an SQLite-s
27d90 70 65 63 69 66 69 63 0a 66 65 61 74 75 72 65 20  pecific.feature 
27da0 61 6e 64 20 69 73 20 6e 6f 74 20 61 20 70 61 72  and is not a par
27db0 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51  t of standard SQ
27dc0 4c 2e 0a 20 20 20 20 20 20 20 0a 0a 3c 74 63 6c  L..       ..<tcl
27dd0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65  >hd_fragment whe
27de0 72 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c  reclause</tcl>.<
27df0 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
27e00 7b 57 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f  {WHERE clause}</
27e10 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48  tcl>.<p><b>2. WH
27e20 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74 65  ERE clause filte
27e30 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28  ring.</b>..<p>^(
27e40 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
27e50 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
27e60 74 68 65 20 57 48 45 52 45 20 65 78 70 72 65 73  the WHERE expres
27e70 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
27e80 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f 77 20  d for .each row 
27e90 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  in the input dat
27ea0 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20  a as a [boolean 
27eb0 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c  expression]. Onl
27ec0 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  y rows for which
27ed0 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
27ee0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
27ef0 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65 20 61  luates to true a
27f00 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d  re included from
27f10 20 74 68 65 20 64 61 74 61 73 65 74 20 62 65 66   the dataset bef
27f20 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e 29  ore.continuing.)
27f30 5e 20 20 52 6f 77 73 20 61 72 65 20 65 78 63 6c  ^  Rows are excl
27f40 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  uded from the re
27f50 73 75 6c 74 20 69 66 20 74 68 65 20 57 48 45 52  sult if the WHER
27f60 45 20 63 6c 61 75 73 65 0a 65 76 61 6c 75 61 74  E clause.evaluat
27f70 65 73 20 74 6f 20 65 69 74 68 65 72 20 66 61 6c  es to either fal
27f80 73 65 20 6f 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  se or NULL...<p>
27f90 46 6f 72 20 61 20 4a 4f 49 4e 20 6f 72 20 49 4e  For a JOIN or IN
27fa0 4e 45 52 20 4a 4f 49 4e 20 6f 72 20 43 52 4f 53  NER JOIN or CROS
27fb0 53 20 4a 4f 49 4e 2c 20 74 68 65 72 65 20 69 73  S JOIN, there is
27fc0 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62   no difference b
27fd0 65 74 77 65 65 6e 20 0a 61 20 63 6f 6e 73 74 72  etween .a constr
27fe0 61 69 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  aint expression 
27ff0 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  in the WHERE cla
28000 75 73 65 20 61 6e 64 20 6f 6e 65 20 69 6e 20 74  use and one in t
28010 68 65 20 4f 4e 20 63 6c 61 75 73 65 2e 20 20 48  he ON clause.  H
28020 6f 77 65 76 65 72 2c 0a 66 6f 72 20 61 20 4c 45  owever,.for a LE
28030 46 54 20 4a 4f 49 4e 20 6f 72 20 4c 45 46 54 20  FT JOIN or LEFT 
28040 4f 55 54 45 52 20 4a 4f 49 4e 2c 20 74 68 65 20  OUTER JOIN, the 
28050 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 76 65  difference is ve
28060 72 79 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 0a  ry important.  .
28070 49 6e 20 61 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a  In a LEFT JOIN,.
28080 74 68 65 20 65 78 74 72 61 20 4e 55 4c 4c 20 72  the extra NULL r
28090 6f 77 20 66 6f 72 20 74 68 65 20 72 69 67 68 74  ow for the right
280a0 2d 68 61 6e 64 20 74 61 62 6c 65 20 69 73 20 61  -hand table is a
280b0 64 64 65 64 20 61 66 74 65 72 20 4f 4e 20 63 6c  dded after ON cl
280c0 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 0a  ause processing.
280d0 62 75 74 20 62 65 66 6f 72 65 20 57 48 45 52 45  but before WHERE
280e0 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
280f0 6e 67 2e 20 20 41 20 63 6f 6e 73 74 72 61 69 6e  ng.  A constrain
28100 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 6c  t of the form "l
28110 65 66 74 2e 78 3d 72 69 67 68 74 2e 79 22 0a 69  eft.x=right.y".i
28120 6e 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 77  n an ON clause w
28130 69 6c 6c 20 74 68 65 72 65 66 6f 72 65 20 61 6c  ill therefore al
28140 6c 6f 77 20 74 68 72 6f 75 67 68 20 74 68 65 20  low through the 
28150 61 64 64 65 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72  added all-NULL r
28160 6f 77 73 20 6f 66 20 74 68 65 0a 72 69 67 68 74  ows of the.right
28170 20 74 61 62 6c 65 2e 20 20 42 75 74 20 69 66 20   table.  But if 
28180 74 68 61 74 20 73 61 6d 65 20 63 6f 6e 73 74 72  that same constr
28190 61 69 6e 74 20 69 73 20 69 6e 20 74 68 65 20 57  aint is in the W
281a0 48 45 52 45 20 63 6c 61 75 73 65 20 61 20 4e 55  HERE clause a NU
281b0 4c 4c 20 69 6e 0a 22 72 69 67 68 74 2e 79 22 20  LL in."right.y" 
281c0 77 69 6c 6c 20 70 72 65 76 65 6e 74 20 74 68 65  will prevent the
281d0 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 65 66   expression "lef
281e0 74 2e 78 3d 72 69 67 68 74 2e 79 22 20 66 72 6f  t.x=right.y" fro
281f0 6d 20 62 65 69 6e 67 20 74 72 75 65 2c 20 61 6e  m being true, an
28200 64 0a 74 68 75 73 20 65 78 63 6c 75 64 65 20 74  d.thus exclude t
28210 68 61 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65  hat row from the
28220 20 6f 75 74 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e   output...<p><b>
28230 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66  3. Generation of
28240 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
28250 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63  lt rows.</b>.<tc
28260 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65  l>hd_fragment re
28270 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74  sultset</tcl>.<t
28280 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
28290 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
282a0 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42  ssions} {GROUP B
282b0 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63  Y}</tcl>..<p>Onc
282c0 65 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  e the input data
282d0 20 66 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63   from the FROM c
282e0 6c 61 75 73 65 20 68 61 73 20 62 65 65 6e 20 66  lause has been f
282f0 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 0a 57  iltered by the.W
28300 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
28310 65 73 73 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c  ession (if any),
28320 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
28330 6c 74 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20  lt rows for the 
28340 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 61  simple .SELECT a
28350 72 65 20 63 61 6c 63 75 6c 61 74 65 64 2e 20 45  re calculated. E
28360 78 61 63 74 6c 79 20 68 6f 77 20 74 68 69 73 20  xactly how this 
28370 69 73 20 64 6f 6e 65 20 64 65 70 65 6e 64 73 20  is done depends 
28380 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 73  on whether the s
28390 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 69 73  imple .SELECT is
283a0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 6f 72   an aggregate or
283b0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
283c0 75 65 72 79 2c 20 61 6e 64 20 77 68 65 74 68 65  uery, and whethe
283d0 72 20 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55 50  r or not a GROUP
283e0 0a 42 59 20 63 6c 61 75 73 65 20 77 61 73 20 73  .BY clause was s
283f0 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54  pecified...<p> T
28400 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65  he list of expre
28410 73 73 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 74  ssions between t
28420 68 65 20 53 45 4c 45 43 54 20 61 6e 64 20 46 52  he SELECT and FR
28430 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69 73 20 6b  OM keywords is k
28440 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72 65 73 75  nown as.the resu
28450 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
28460 73 74 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c  st.  ^If a resul
28470 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
28480 74 68 65 20 73 70 65 63 69 61 6c 20 65 78 70 72  the special expr
28490 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20  ession."*" then 
284a0 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  all columns in t
284b0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 72  he input data ar
284c0 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e substituted fo
284d0 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65  r that one expre
284e0 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20  ssion..^(If the 
284f0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
28500 65 20 61 6c 69 61 73 20 6f 66 20 61 20 74 61 62  e alias of a tab
28510 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
28520 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
28530 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e  e.followed by ".
28540 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75  *" then all colu
28550 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d  mns from the nam
28560 65 64 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ed table or subq
28570 75 65 72 79 20 61 72 65 0a 73 75 62 73 74 69 74  uery are.substit
28580 75 74 65 64 20 66 6f 72 20 74 68 65 20 73 69 6e  uted for the sin
28590 67 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 29  gle expression.)
285a0 5e 20 5e 28 49 74 20 69 73 20 61 6e 20 65 72 72  ^ ^(It is an err
285b0 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20  or to use a "*" 
285c0 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78 70  or."alias.*" exp
285d0 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63  ression in any c
285e0 6f 6e 74 65 78 74 20 6f 74 68 65 72 20 74 68 61  ontext other tha
285f0 6e 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65  n a result expre
28600 73 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28  ssion list.)^.^(
28610 49 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72  It is also an er
28620 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22  ror to use a "*"
28630 20 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78   or "alias.*" ex
28640 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69  pression in a si
28650 6d 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72  mple SELECT.quer
28660 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  y that does not 
28670 68 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75  have a FROM clau
28680 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65  se.)^..<p> ^(The
28690 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
286a0 6e 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72  ns in the rows r
286b0 65 74 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d  eturned by a sim
286c0 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
286d0 6d 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f  ment.is equal to
286e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
286f0 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
28700 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
28710 69 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73  ion list after.s
28720 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a  ubstitution of *
28730 20 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70   and alias.* exp
28740 72 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68  ressions.)^ Each
28750 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63   result row is c
28760 61 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61  alculated by.eva
28770 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72  luating the expr
28780 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72  essions in the r
28790 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
287a0 20 6c 69 73 74 20 77 69 74 68 20 72 65 73 70 65   list with respe
287b0 63 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72  ct to a.single r
287c0 6f 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  ow of input data
287d0 20 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61   or, for aggrega
287e0 74 65 20 71 75 65 72 69 65 73 2c 20 77 69 74 68  te queries, with
287f0 20 72 65 73 70 65 63 74 20 74 6f 20 61 20 67 72   respect to a gr
28800 6f 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75  oup.of rows...<u
28810 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
28820 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
28830 6d 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e  ment is <b>a non
28840 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
28850 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20  </b>, then .    
28860 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
28870 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
28880 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73  pression list is
28890 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
288a0 61 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74  ach row in.    t
288b0 68 65 20 64 61 74 61 73 65 74 20 66 69 6c 74 65  he dataset filte
288c0 72 65 64 20 62 79 20 74 68 65 20 57 48 45 52 45  red by the WHERE
288d0 20 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e   clause...  <li>
288e0 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43  <p>^If the SELEC
288f0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
28900 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
28910 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47  uery without a G
28920 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20  ROUP.    BY</b> 
28930 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63  clause, then eac
28940 68 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  h aggregate expr
28950 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
28960 73 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20  sult-set is .   
28970 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
28980 61 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72  across the entir
28990 65 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68  e dataset. ^Each
289a0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
289b0 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e  xpression.    in
289c0 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20   the result-set 
289d0 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  is evaluated onc
289e0 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61  e for an arbitra
289f0 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
28a00 77 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74  w of.    the dat
28a10 61 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20  aset. ^The same 
28a20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65  arbitrarily sele
28a30 63 74 65 64 20 72 6f 77 20 69 73 20 75 73 65 64  cted row is used
28a40 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f   for each.    no
28a50 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
28a60 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20  ession. ^Or, if 
28a70 74 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74  the dataset cont
28a80 61 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20  ains zero rows, 
28a90 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e  then .    each n
28aa0 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
28ab0 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
28ac0 61 74 65 64 20 61 67 61 69 6e 73 74 20 61 20 72  ated against a r
28ad0 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20  ow consisting.  
28ae0 20 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55    entirely of NU
28af0 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c  LL values...   <
28b00 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f  p>^The single ro
28b10 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  w of result-set 
28b20 64 61 74 61 20 63 72 65 61 74 65 64 20 62 79 20  data created by 
28b30 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
28b40 67 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64  ggregate.    and
28b50 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
28b60 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
28b70 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72  e result-set for
28b80 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ms the result of
28b90 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74   an.    aggregat
28ba0 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20  e query without 
28bb0 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
28bc0 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65  e. ^An aggregate
28bd0 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
28be0 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c  .    GROUP BY cl
28bf0 61 75 73 65 20 61 6c 77 61 79 73 20 72 65 74 75  ause always retu
28c00 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  rns exactly one 
28c10 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65  row of data, eve
28c20 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 20  n if there are. 
28c30 20 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20     zero rows of 
28c40 69 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c  input data...  <
28c50 6c 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53  li><p>^(If the S
28c60 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
28c70 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
28c80 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
28c90 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e  GROUP.    BY</b>
28ca0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61   clause, then ea
28cb0 63 68 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  ch of the expres
28cc0 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20  sions specified 
28cd0 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20  as part of the. 
28ce0 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
28cf0 73 65 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  se is evaluated 
28d00 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
28d10 74 68 65 20 64 61 74 61 73 65 74 2e 20 45 61 63  the dataset. Eac
28d20 68 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65  h row.    is the
28d30 6e 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20  n assigned to a 
28d40 22 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e  "group" based on
28d50 20 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f   the results; ro
28d60 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20  ws for which.   
28d70 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
28d80 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47  evaluating the G
28d90 52 4f 55 50 20 42 59 20 65 78 70 72 65 73 73 69  ROUP BY expressi
28da0 6f 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  ons are the same
28db0 20 67 65 74 0a 20 20 20 20 61 73 73 69 67 6e 65   get.    assigne
28dc0 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72  d to the same gr
28dd0 6f 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  oup.)^ ^For the 
28de0 70 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75  purposes of grou
28df0 70 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20  ping rows, NULL 
28e00 0a 20 20 20 20 76 61 6c 75 65 73 20 61 72 65 20  .    values are 
28e10 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c  considered equal
28e20 2e 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c  . ^The usual rul
28e30 65 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f  es for [collatio
28e40 6e 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20  n|selecting a.  
28e50 20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75    collation sequ
28e60 65 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63 68  ence] with which
28e70 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
28e80 20 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68   values apply wh
28e90 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20  en evaluating.  
28ea0 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e    expressions in
28eb0 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
28ec0 73 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73  se.  ^The expres
28ed0 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f  sions in the GRO
28ee0 55 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20  UP BY clause.   
28ef0 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   do <em>not</em>
28f00 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70 72   have to be expr
28f10 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70  essions that app
28f20 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ear in the resul
28f30 74 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72  t. ^The.    expr
28f40 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f  essions in a GRO
28f50 55 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79  UP BY clause may
28f60 20 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61 74   not be aggregat
28f70 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a  e expressions...
28f80 20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41      <p>^(If a HA
28f90 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
28fa0 70 65 63 69 66 69 65 64 2c 20 69 74 20 69 73 20  pecified, it is 
28fb0 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
28fc0 6f 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20  or each group . 
28fd0 20 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20     of rows as a 
28fe0 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
28ff0 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73  ion]. If the res
29000 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
29010 67 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47  g the.    HAVING
29020 20 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65   clause is false
29030 2c 20 74 68 65 20 67 72 6f 75 70 20 69 73 20 64  , the group is d
29040 69 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20  iscarded.)^ ^If 
29050 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  the HAVING claus
29060 65 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72  e is.    an aggr
29070 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
29080 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
29090 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77  d across all row
290a0 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  s in the group. 
290b0 5e 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47  ^If.    a HAVING
290c0 20 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e   clause is a non
290d0 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
290e0 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
290f0 6c 75 61 74 65 64 20 77 69 74 68 20 72 65 73 70  luated with resp
29100 65 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72  ect.    to an ar
29110 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
29120 65 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20  ed row from the 
29130 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56  group.  ^The HAV
29140 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ING expression m
29150 61 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20  ay.    refer to 
29160 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67  values, even agg
29170 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
29180 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69  , that are not i
29190 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70  n the result.</p
291a0 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  >..    <p>^Each 
291b0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
291c0 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
291d0 74 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f  then evaluated o
291e0 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20  nce for each.   
291f0 20 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20   group of rows. 
29200 5e 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69  ^If the expressi
29210 6f 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  on is an aggrega
29220 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
29230 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61  t is .    evalua
29240 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ted across all r
29250 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
29260 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74  . ^Otherwise, it
29270 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67   is evaluated ag
29280 61 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67  ainst.    a sing
29290 6c 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 63  le arbitrarily c
292a0 68 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77  hosen row from w
292b0 69 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ithin the group.
292c0 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f   ^If there is mo
292d0 72 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20  re.    than one 
292e0 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
292f0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
29300 72 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e  result-set, then
29310 20 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78   all such.    ex
29320 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76  pressions are ev
29330 61 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65 20  aluated for the 
29340 73 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c  same row...    <
29350 70 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66  p>^Each group of
29360 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 20 72   input dataset r
29370 6f 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20  ows contributes 
29380 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20  a single row to 
29390 74 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20  the .    set of 
293a0 72 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75  result rows. ^Su
293b0 62 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69  bject to filteri
293c0 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ng associated wi
293d0 74 68 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a  th the DISTINCT.
293e0 20 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65      keyword, the
293f0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
29400 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61  returned by an a
29410 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
29420 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20  ith a GROUP.    
29430 42 59 20 63 6c 61 75 73 65 20 69 73 20 74 68 65  BY clause is the
29440 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d   same as the num
29450 62 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66  ber of groups of
29460 20 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62   rows produced b
29470 79 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74  y applying.    t
29480 68 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20  he GROUP BY and 
29490 48 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74  HAVING clauses t
294a0 6f 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  o the filtered i
294b0 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f  nput dataset..</
294c0 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65  ul>..<p><b>4. Re
294d0 6d 6f 76 61 6c 20 6f 66 20 64 75 70 6c 69 63 61  moval of duplica
294e0 74 65 20 72 6f 77 73 20 28 44 49 53 54 49 4e 43  te rows (DISTINC
294f0 54 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f  T processing).</
29500 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
29510 65 6e 74 20 64 69 73 74 69 6e 63 74 3c 2f 74 63  ent distinct</tc
29520 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
29530 72 64 73 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f  rds {DISTINCT}</
29540 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66  tcl>..<p>^One of
29550 20 74 68 65 20 41 4c 4c 20 6f 72 20 44 49 53 54   the ALL or DIST
29560 49 4e 43 54 20 6b 65 79 77 6f 72 64 73 20 6d 61  INCT keywords ma
29570 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c  y follow the SEL
29580 45 43 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 61  ECT keyword in a
29590 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20   .simple SELECT 
295a0 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74  statement. ^If t
295b0 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  he simple SELECT
295c0 20 69 73 20 61 20 53 45 4c 45 43 54 20 41 4c 4c   is a SELECT ALL
295d0 2c 20 74 68 65 6e 20 74 68 65 0a 65 6e 74 69 72  , then the.entir
295e0 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
295f0 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
29600 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 2e  d by the SELECT.
29610 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41 4c 4c   ^If neither ALL
29620 20 6f 72 0a 44 49 53 54 49 4e 43 54 20 61 72 65   or.DISTINCT are
29630 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
29640 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 61  he behavior is a
29650 73 20 69 66 20 41 4c 4c 20 77 65 72 65 20 73 70  s if ALL were sp
29660 65 63 69 66 69 65 64 2e 20 0a 5e 49 66 20 74 68  ecified. .^If th
29670 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
29680 69 73 20 61 20 53 45 4c 45 43 54 20 44 49 53 54  is a SELECT DIST
29690 49 4e 43 54 2c 20 74 68 65 6e 20 64 75 70 6c 69  INCT, then dupli
296a0 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
296b0 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 73  moved.from the s
296c0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
296d0 73 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 72  s before it is r
296e0 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72 20 74 68  eturned. ^For th
296f0 65 20 70 75 72 70 6f 73 65 73 20 6f 66 0a 64 65  e purposes of.de
29700 74 65 63 74 69 6e 67 20 64 75 70 6c 69 63 61 74  tecting duplicat
29710 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e 55 4c 4c  e rows, two NULL
29720 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
29730 69 64 65 72 65 64 20 74 6f 20 62 65 20 65 71 75  idered to be equ
29740 61 6c 2e 20 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20  al. ^The.normal 
29750 72 75 6c 65 73 20 66 6f 72 20 73 65 6c 65 63 74  rules for select
29760 69 6e 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ing a collation 
29770 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70  sequence to comp
29780 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 20  are text values 
29790 77 69 74 68 0a 61 70 70 6c 79 2e 0a 0a 3c 74 63  with.apply...<tc
297a0 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  l>.hd_fragment c
297b0 6f 6d 70 6f 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e  ompound {compoun
297c0 64 20 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f  d select} {compo
297d0 75 6e 64 20 71 75 65 72 79 7d 20 7b 63 6f 6d 70  und query} {comp
297e0 6f 75 6e 64 20 53 45 4c 45 43 54 7d 20 7b 63 6f  ound SELECT} {co
297f0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 7d 0a  mpound SELECTs}.
29800 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f  </tcl>.<h3>Compo
29810 75 6e 64 20 53 65 6c 65 63 74 20 53 74 61 74 65  und Select State
29820 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  ments</h3>..<p>T
29830 77 6f 20 6f 72 20 6d 6f 72 65 20 5b 73 69 6d 70  wo or more [simp
29840 6c 65 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65  le SELECT] state
29850 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e  ments may be con
29860 6e 65 63 74 65 64 20 74 6f 67 65 74 68 65 72 20  nected together 
29870 74 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75  to form.a compou
29880 6e 64 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20  nd SELECT using 
29890 74 68 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e  the UNION, UNION
298a0 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20   ALL, INTERSECT 
298b0 6f 72 20 45 58 43 45 50 54 20 6f 70 65 72 61 74  or EXCEPT operat
298c0 6f 72 2c 0a 61 73 20 73 68 6f 77 6e 20 62 79 20  or,.as shown by 
298d0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69  the following di
298e0 61 67 72 61 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65  agram:..<tcl>.Re
298f0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
29900 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 73 65  gram compound-se
29910 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  lect-stmt.</tcl>
29920 0a 0a 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f  ..<p>^In a compo
29930 75 6e 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20  und SELECT, all 
29940 74 68 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20  the constituent 
29950 53 45 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74  SELECTs must ret
29960 75 72 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75  urn the same .nu
29970 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63  mber of result c
29980 6f 6c 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20  olumns. ^As the 
29990 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20  components of a 
299a0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20  compound SELECT 
299b0 6d 75 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53  must.be simple S
299c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
299d0 2c 20 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63  , they may not c
299e0 6f 6e 74 61 69 6e 20 5b 4f 52 44 45 52 20 42 59  ontain [ORDER BY
299f0 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61  ] or [LIMIT] cla
29a00 75 73 65 73 2e 0a 5e 5b 4f 52 44 45 52 20 42 59  uses..^[ORDER BY
29a10 5d 20 61 6e 64 20 5b 4c 49 4d 49 54 5d 20 63 6c  ] and [LIMIT] cl
29a20 61 75 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f  auses may only o
29a30 63 63 75 72 20 61 74 20 74 68 65 20 65 6e 64 20  ccur at the end 
29a40 6f 66 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f  of the entire co
29a50 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 2c 20 61  mpound.SELECT, a
29a60 6e 64 20 74 68 65 6e 20 6f 6e 6c 79 20 69 66 20  nd then only if 
29a70 74 68 65 20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e  the final elemen
29a80 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e  t of the compoun
29a90 64 20 69 73 20 6e 6f 74 20 61 20 5b 56 41 4c 55  d is not a [VALU
29aa0 45 53 5d 20 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e  ES] clause...<p>
29ab0 5e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  ^A compound SELE
29ac0 43 54 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  CT created using
29ad0 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61   UNION ALL opera
29ae0 74 6f 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  tor returns all 
29af0 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68  the rows.from th
29b00 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  e SELECT to the 
29b10 6c 65 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f  left of the UNIO
29b20 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20  N ALL operator, 
29b30 61 6e 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73  and all the rows
29b40 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54  .from the SELECT
29b50 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66   to the right of
29b60 20 69 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20   it. ^The UNION 
29b70 6f 70 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74  operator works t
29b80 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55  he same way as.U
29b90 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74  NION ALL, except
29ba0 20 74 68 61 74 20 64 75 70 6c 69 63 61 74 65 20   that duplicate 
29bb0 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
29bc0 20 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20   from the final 
29bd0 72 65 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65  result set..^The
29be0 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61   INTERSECT opera
29bf0 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65 20  tor returns the 
29c00 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20  intersection of 
29c10 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
29c20 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
29c30 74 20 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65  t SELECTs.  ^The
29c40 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
29c50 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 75 62   returns the sub
29c60 73 65 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75  set of rows retu
29c70 72 6e 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74  rned by the.left
29c80 20 53 45 4c 45 43 54 20 74 68 61 74 20 61 72 65   SELECT that are
29c90 20 6e 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e   not also return
29ca0 65 64 20 62 79 20 74 68 65 20 72 69 67 68 74 2d  ed by the right-
29cb0 68 61 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75  hand SELECT. ^Du
29cc0 70 6c 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65  plicate.rows are
29cd0 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
29ce0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54  e results of INT
29cf0 45 52 53 45 43 54 20 61 6e 64 20 45 58 43 45 50  ERSECT and EXCEP
29d00 54 20 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f  T operators befo
29d10 72 65 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65  re the.result se
29d20 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a  t is returned...
29d30 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70  <p>^For the purp
29d40 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e  oses of determin
29d50 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
29d60 77 73 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ws for the resul
29d70 74 73 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53  ts of compound.S
29d80 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c  ELECT operators,
29d90 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
29da0 20 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61   considered equa
29db0 6c 20 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20  l to other NULL 
29dc0 76 61 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69  values and.disti
29dd0 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e  nct from all non
29de0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54  -NULL values. ^T
29df0 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
29e00 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f  uence used to co
29e10 6d 70 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20  mpare .two text 
29e20 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d  values is determ
29e30 69 6e 65 64 20 61 73 20 69 66 20 74 68 65 20 63  ined as if the c
29e40 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
29e50 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
29e60 64 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d.SELECT stateme
29e70 6e 74 73 20 77 65 72 65 20 74 68 65 20 6c 65 66  nts were the lef
29e80 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
29e90 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65   operands of the
29ea0 20 65 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72   equals (=).oper
29eb0 61 74 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61  ator, except tha
29ec0 74 20 67 72 65 61 74 65 72 20 70 72 65 63 65 64  t greater preced
29ed0 65 6e 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69  ence is not assi
29ee0 67 6e 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74  gned to a collat
29ef0 69 6f 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70  ion .sequence sp
29f00 65 63 69 66 69 65 64 20 77 69 74 68 20 74 68 65  ecified with the
29f10 20 70 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45   postfix COLLATE
29f20 20 6f 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61   operator. ^No a
29f30 66 66 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72  ffinity.transfor
29f40 6d 61 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c  mations are appl
29f50 69 65 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65  ied to any value
29f60 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
29f70 20 72 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66   rows as part of
29f80 20 61 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a.compound SELE
29f90 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  CT. ..<p>^(When 
29fa0 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69  three or more si
29fb0 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65  mple SELECTs are
29fc0 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20   connected into 
29fd0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
29fe0 54 2c 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72  T,.they group fr
29ff0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
2a000 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
2a010 2c 20 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e  , if "A", "B" an
2a020 64 20 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69  d "C" are all.si
2a030 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
2a040 65 6d 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20  ements, (A op B 
2a050 6f 70 20 43 29 20 69 73 20 70 72 6f 63 65 73 73  op C) is process
2a060 65 64 20 61 73 20 28 28 41 20 6f 70 20 42 29 20  ed as ((A op B) 
2a070 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a  op C).)^..</p>..
2a080 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2a090 20 6f 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20   orderby {order 
2a0a0 62 79 7d 20 7b 4f 52 44 45 52 20 42 59 7d 3c 2f  by} {ORDER BY}</
2a0b0 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4f 52 44  tcl>.<h3>The ORD
2a0c0 45 52 20 42 59 20 63 6c 61 75 73 65 3c 2f 68 33  ER BY clause</h3
2a0d0 3e 0a 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43  >..<p>If a SELEC
2a0e0 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  T statement that
2a0f0 20 72 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68   returns more th
2a100 61 6e 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20  an one row does 
2a110 6e 6f 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45  not have an.ORDE
2a120 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
2a130 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
2a140 74 68 65 20 72 6f 77 73 20 61 72 65 20 72 65 74  the rows are ret
2a150 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e  urned is undefin
2a160 65 64 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c  ed..Or, if a SEL
2a170 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ECT statement do
2a180 65 73 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52  es have an ORDER
2a190 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
2a1a0 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70   the list of.exp
2a1b0 72 65 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65  ressions attache
2a1c0 64 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42  d to the ORDER B
2a1d0 59 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  Y determine the 
2a1e0 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
2a1f0 6f 77 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64  ows.are returned
2a200 20 74 6f 20 74 68 65 20 75 73 65 72 2e 0a 0a 3c   to the user...<
2a210 70 3e 0a 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e  p>.In a [compoun
2a220 64 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d  d SELECT] statem
2a230 65 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61  ent, only the la
2a240 73 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74  st or right-most
2a250 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d   [simple SELECT]
2a260 0a 6d 61 79 20 68 61 76 65 20 61 6e 20 4f 52 44  .may have an ORD
2a270 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
2a280 61 74 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  at ORDER BY clau
2a290 73 65 20 77 69 6c 6c 20 61 70 70 6c 79 20 61 63  se will apply ac
2a2a0 72 6f 73 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74  ross all element
2a2b0 73 20 6f 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e  s of.the compoun
2a2c0 64 2e 20 49 66 20 74 68 65 20 72 69 67 68 74 2d  d. If the right-
2a2d0 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  most element of 
2a2e0 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
2a2f0 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53  CT] is a [VALUES
2a300 5d 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e  ] clause,.then n
2a310 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
2a320 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20  e is allowed on 
2a330 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a  that statement..
2a340 0a 0a 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20 66  ..<p>^Rows are f
2a350 69 72 73 74 20 73 6f 72 74 65 64 20 62 61 73 65  irst sorted base
2a360 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  d on the results
2a370 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   of.evaluating t
2a380 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70  he left-most exp
2a390 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f  ression in the O
2a3a0 52 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68  RDER BY list, th
2a3b0 65 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b  en ties are brok
2a3c0 65 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67  en.by evaluating
2a3d0 20 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74   the second left
2a3e0 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e  -most expression
2a3f0 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20   and so on. The 
2a400 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74  order in which.t
2a410 77 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  wo rows for whic
2a420 68 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65  h all ORDER BY e
2a430 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
2a440 61 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c  ate to equal val
2a450 75 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64  ues are.returned
2a460 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e   is undefined. ^
2a470 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78  Each ORDER BY ex
2a480 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20  pression may be 
2a490 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
2a4a0 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68  wed.by one of th
2a4b0 65 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28  e keywords ASC (
2a4c0 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61  smaller values a
2a4d0 72 65 20 72 65 74 75 72 6e 65 64 20 66 69 72 73  re returned firs
2a4e0 74 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67  t) or DESC (larg
2a4f0 65 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65  er.values are re
2a500 74 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e  turned first). ^
2a510 49 66 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f  If neither ASC o
2a520 72 20 44 45 53 43 20 61 72 65 20 73 70 65 63 69  r DESC are speci
2a530 66 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73  fied, rows.are s
2a540 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69  orted in ascendi
2a550 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75  ng (smaller valu
2a560 65 73 20 66 69 72 73 74 29 20 6f 72 64 65 72 20  es first) order 
2a570 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e  by default...<p>
2a580 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78  Each ORDER BY ex
2a590 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63  pression is proc
2a5a0 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73  essed as follows
2a5b0 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
2a5c0 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52  <p>^If the ORDER
2a5d0 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
2a5e0 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74  s a constant int
2a5f0 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a  eger K then the.
2a600 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
2a610 6e 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61  nsidered an alia
2a620 73 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63  s for the K-th c
2a630 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73  olumn of the res
2a640 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73  ult set.(columns
2a650 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72   are numbered fr
2a660 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
2a670 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31   starting with 1
2a680 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  )...<li><p>^If t
2a690 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
2a6a0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65  ession is an ide
2a6b0 6e 74 69 66 69 65 72 20 74 68 61 74 20 63 6f 72  ntifier that cor
2a6c0 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20  responds to.the 
2a6d0 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20  alias of one of 
2a6e0 74 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d  the output colum
2a6f0 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70  ns, then the exp
2a700 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69  ression is consi
2a710 64 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66  dered.an alias f
2a720 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  or that column..
2a730 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69  .<li><p>^Otherwi
2a740 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
2a750 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
2a760 73 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72  s any other expr
2a770 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65  ession, it .is e
2a780 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
2a790 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20   returned value 
2a7a0 75 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68  used to order th
2a7b0 65 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e  e output rows. ^
2a7c0 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74  If.the SELECT st
2a7d0 61 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d  atement is a sim
2a7e0 70 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ple SELECT, then
2a7f0 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79   an ORDER BY may
2a800 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62   contain any.arb
2a810 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f  itrary expressio
2a820 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  ns. ^However, if
2a830 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20 61   the SELECT is a
2a840 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
2a850 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20  , then.ORDER BY 
2a860 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
2a870 20 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73   are not aliases
2a880 20 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   to output colum
2a890 6e 73 20 6d 75 73 74 20 62 65 20 65 78 61 63 74  ns must be exact
2a8a0 6c 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61  ly.the same as a
2a8b0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  n expression use
2a8c0 64 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63  d as an output c
2a8d0 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70  olumn..</ol>..<p
2a8e0 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73  >^For the purpos
2a8f0 65 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f  es of sorting ro
2a900 77 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ws, values are c
2a910 6f 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20 73  ompared in the s
2a920 61 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b  ame way.as for [
2a930 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65  comparison expre
2a940 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c  ssions]. The col
2a950 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
2a960 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a  used to compare.
2a970 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20  two text values 
2a980 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73  is determined as
2a990 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
2a9a0 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
2a9b0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2a9c0 73 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64  sion is assigned
2a9d0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
2a9e0 75 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68  uence using.  th
2a9f0 65 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41  e postfix [COLLA
2aa00 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68  TE operator], th
2aa10 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  en the specified
2aa20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
2aa30 6e 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20  nce is.  used.. 
2aa40 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69   <li><p>^Otherwi
2aa50 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
2aa60 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
2aa70 73 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e  s an alias to an
2aa80 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68   expression.  th
2aa90 61 74 20 68 61 73 20 62 65 65 6e 20 61 73 73 69  at has been assi
2aaa0 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  gned a collation
2aab0 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20   sequence using 
2aac0 74 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b  the postfix .  [
2aad0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
2aae0 5d 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c  ], then the coll
2aaf0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61  ation sequence a
2ab00 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61  ssigned to the a
2ab10 6c 69 61 73 65 64 0a 20 20 65 78 70 72 65 73 73  liased.  express
2ab20 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c  ion is used..  <
2ab30 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
2ab40 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
2ab50 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2ab60 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61  a column or an a
2ab70 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70  lias of.  an exp
2ab80 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
2ab90 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74  a column, then t
2aba0 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
2abb0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f  tion sequence fo
2abc0 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  r.  the column i
2abd0 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c  s used. .  <li><
2abe0 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68  p>^Otherwise, th
2abf0 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61  e [BINARY] colla
2ac00 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
2ac10 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   used..</ol>..<p
2ac20 3e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20  >In a [compound 
2ac30 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
2ac40 74 2c 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20  t, all ORDER BY 
2ac50 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
2ac60 68 61 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73  handled.as alias
2ac70 65 73 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68  es for one of th
2ac80 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  e result columns
2ac90 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64   of the compound
2aca0 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20  ..^(If an ORDER 
2acb0 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2acc0 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20   not an integer 
2acd0 61 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69  alias, then SQLi
2ace0 74 65 20 73 65 61 72 63 68 65 73 0a 74 68 65 20  te searches.the 
2acf0 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54  left-most SELECT
2ad00 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64   in the compound
2ad10 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f   for a result co
2ad20 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65  lumn that matche
2ad30 73 20 65 69 74 68 65 72 0a 74 68 65 20 73 65 63  s either.the sec
2ad40 6f 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c  ond or third rul
2ad50 65 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d  es above. If a m
2ad60 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
2ad70 68 65 20 73 65 61 72 63 68 20 73 74 6f 70 73 20  he search stops 
2ad80 61 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73 69  and.the expressi
2ad90 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73  on is handled as
2ada0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
2adb0 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
2adc0 74 68 61 74 20 69 74 20 68 61 73 20 62 65 65 6e  that it has been
2add0 0a 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74  .matched against
2ade0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  . Otherwise, the
2adf0 20 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20   next SELECT to 
2ae00 74 68 65 20 72 69 67 68 74 20 69 73 20 74 72 69  the right is tri
2ae10 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e  ed, and so on.)^
2ae20 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67  .^If no matching
2ae30 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20   expression can 
2ae40 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  be found in the 
2ae50 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
2ae60 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e  f any.constituen
2ae70 74 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20  t SELECT, it is 
2ae80 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20  an error. ^Each 
2ae90 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45  term of the ORDE
2aea0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70  R BY clause is.p
2aeb0 72 6f 63 65 73 73 65 64 20 73 65 70 61 72 61 74  rocessed separat
2aec0 65 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d  ely and may be m
2aed0 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 20 72  atched against r
2aee0 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72  esult columns fr
2aef0 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c  om different.SEL
2af00 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69  ECT statements i
2af10 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c  n the compound.<
2af20 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
2af30 67 6d 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65  gment limitoffse
2af40 74 20 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45  t {LIMIT} {OFFSE
2af50 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  T}</tcl>.<h3>The
2af60 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68   LIMIT clause</h
2af70 33 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d 49 54  3>..<p>The LIMIT
2af80 20 63 6c 61 75 73 65 20 69 73 20 75 73 65 64 20   clause is used 
2af90 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65  to place an uppe
2afa0 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e  r bound on the n
2afb0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65  umber of rows.re
2afc0 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e  turned by the en
2afd0 74 69 72 65 20 53 45 4c 45 43 54 20 73 74 61 74  tire SELECT stat
2afe0 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 49 6e 20 61 20  ement...<p>In a 
2aff0 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2b000 5d 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74  ], only the.last
2b010 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b   or right-most [
2b020 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d  simple SELECT] m
2b030 61 79 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d  ay contain a LIM
2b040 49 54 20 63 6c 61 75 73 65 2e 20 20 0a 49 6e 20  IT clause.  .In 
2b050 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
2b060 43 54 5d 2c 20 0a 74 68 65 20 4c 49 4d 49 54 20  CT], .the LIMIT 
2b070 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20 74  clause applies t
2b080 6f 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d  o the entire com
2b090 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a 75 73 74 20  pound, not just 
2b0a0 74 68 65 20 66 69 6e 61 6c 20 53 45 4c 45 43 54  the final SELECT
2b0b0 2e 0a 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d  ..If the right-m
2b0c0 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45  ost [simple SELE
2b0d0 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53  CT] is a [VALUES
2b0e0 20 63 6c 61 75 73 65 5d 20 74 68 65 6e 20 6e 6f   clause] then no
2b0f0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 69 73   LIMIT clause.is
2b100 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70 3e 5e 41   allowed...<p>^A
2b110 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72 65 73  ny scalar expres
2b120 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73 65 64  sion may be used
2b130 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54 20 63   in the .LIMIT c
2b140 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67 20 61  lause, so long a
2b150 73 20 69 74 20 65 76 61 6c 75 61 74 65 73 20 74  s it evaluates t
2b160 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  o an integer or 
2b170 61 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  a value that can
2b180 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be.losslessly c
2b190 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
2b1a0 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68 65 20  nteger. ^If the 
2b1b0 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
2b1c0 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c 20 0a  ates to a NULL .
2b1d0 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f 74 68  value or any oth
2b1e0 65 72 20 76 61 6c 75 65 20 74 68 61 74 20 63 61  er value that ca
2b1f0 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73  nnot be lossless
2b200 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly converted to 
2b210 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e 0a 65  an integer, an.e
2b220 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
2b230 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20  . ^If the LIMIT 
2b240 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
2b250 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69  ates to a negati
2b260 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e 20 74  ve value,.then t
2b270 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70 65 72  here is no upper
2b280 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75   bound on the nu
2b290 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74  mber of rows ret
2b2a0 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77 69 73  urned. ^Otherwis
2b2b0 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20 72 65  e, the.SELECT re
2b2c0 74 75 72 6e 73 20 74 68 65 20 66 69 72 73 74 20  turns the first 
2b2d0 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20 72 65  N rows of its re
2b2e0 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c 20 77  sult set only, w
2b2f0 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 76 61  here N is the va
2b300 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c 49 4d  lue.that the LIM
2b310 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  IT expression ev
2b320 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f 72 2c  aluates to. ^Or,
2b330 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 20 73   if the SELECT s
2b340 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 0a 72  tatement would.r
2b350 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20  eturn less than 
2b360 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20 61  N rows without a
2b370 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
2b380 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 72  hen the entire r
2b390 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72 65 74  esult set is.ret
2b3a0 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65  urned. ..<p>^The
2b3b0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74 74 61   expression atta
2b3c0 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70 74 69  ched to the opti
2b3d0 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c 61 75  onal OFFSET clau
2b3e0 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f 6c 6c  se that may foll
2b3f0 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73  ow a.LIMIT claus
2b400 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76 61 6c  e must also eval
2b410 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74 65 67  uate to an integ
2b420 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65 20 74  er, or a value t
2b430 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c  hat can be.lossl
2b440 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
2b450 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e  to an integer. ^
2b460 49 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  If an expression
2b470 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63   has an OFFSET c
2b480 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68 65 20  lause,.then the 
2b490 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65  first M rows are
2b4a0 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
2b4b0 65 20 72 65 73 75 6c 74 20 73 65 74 20 72 65 74  e result set ret
2b4c0 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
2b4d0 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20 61 6e  ECT.statement an
2b4e0 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72 6f 77  d the next N row
2b4f0 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 2c 20  s are returned, 
2b500 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20 61 72  where M and N ar
2b510 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61  e the values tha
2b520 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64  t.the OFFSET and
2b530 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 65   LIMIT clauses e
2b540 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65 73 70  valuate to, resp
2b550 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c 20 69  ectively. ^Or, i
2b560 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77 6f 75  f the SELECT.wou
2b570 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73 20 74  ld return less t
2b580 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69 66 20  han M+N rows if 
2b590 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76 65 20  it did not have 
2b5a0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
2b5b0 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74 20 4d  then the.first M
2b5c0 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65   rows are skippe
2b5d0 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  d and the remain
2b5e0 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61 6e 79  ing rows (if any
2b5f0 29 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 20  ) are returned. 
2b600 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54 20 63  ^If the.OFFSET c
2b610 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 73 20  lause evaluates 
2b620 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61  to a negative va
2b630 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73  lue, the results
2b640 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 61 73   are the same as
2b650 20 69 66 20 69 74 0a 68 61 64 20 65 76 61 6c 75   if it.had evalu
2b660 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c  ated to zero...<
2b670 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20 61 20  p>^Instead of a 
2b680 73 65 70 61 72 61 74 65 20 4f 46 46 53 45 54 20  separate OFFSET 
2b690 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49 4d 49  clause, the LIMI
2b6a0 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70 65  T clause may spe
2b6b0 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61 72 20  cify two.scalar 
2b6c0 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65 70 61  expressions sepa
2b6d0 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d 6d 61  rated by a comma
2b6e0 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c  . ^In this case,
2b6f0 20 74 68 65 20 66 69 72 73 74 20 65 78 70 72 65   the first expre
2b700 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20 61 73  ssion.is used as
2b710 20 74 68 65 20 4f 46 46 53 45 54 20 65 78 70 72   the OFFSET expr
2b720 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73  ession and the s
2b730 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c 49 4d  econd as the LIM
2b740 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 54  IT expression..T
2b750 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72 2d 69  his is counter-i
2b760 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77 68 65  ntuitive, as whe
2b770 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46 46 53  n using the OFFS
2b780 45 54 20 63 6c 61 75 73 65 20 74 68 65 20 73 65  ET clause the se
2b790 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77 6f 20  cond of.the two 
2b7a0 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74  expressions is t
2b7b0 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 74 68  he OFFSET and th
2b7c0 65 20 66 69 72 73 74 20 74 68 65 20 4c 49 4d 49  e first the LIMI
2b7d0 54 2e 20 0a 54 68 69 73 20 72 65 76 65 72 73 61  T. .This reversa
2b7e0 6c 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20  l of the offset 
2b7f0 61 6e 64 20 6c 69 6d 69 74 20 69 73 20 69 6e 74  and limit is int
2b800 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61  entional.- it ma
2b810 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62  ximizes compatib
2b820 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72  ility with other
2b830 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79   SQL database sy
2b840 73 74 65 6d 73 2e 0a 48 6f 77 65 76 65 72 2c 20  stems..However, 
2b850 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
2b860 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20  on, programmers 
2b870 61 72 65 20 73 74 72 6f 6e 67 6c 79 20 65 6e 63  are strongly enc
2b880 6f 75 72 61 67 65 64 20 74 6f 20 75 73 65 0a 74  ouraged to use.t
2b890 68 65 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 4c  he form of the L
2b8a0 49 4d 49 54 20 63 6c 61 75 73 65 20 74 68 61 74  IMIT clause that
2b8b0 20 75 73 65 73 20 74 68 65 20 22 4f 46 46 53 45   uses the "OFFSE
2b8c0 54 22 20 6b 65 79 77 6f 72 64 20 61 6e 64 20 61  T" keyword and a
2b8d0 76 6f 69 64 0a 75 73 69 6e 67 20 61 20 4c 49 4d  void.using a LIM
2b8e0 49 54 20 63 6c 61 75 73 65 20 77 69 74 68 20 61  IT clause with a
2b8f0 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64   comma-separated
2b900 20 6f 66 66 73 65 74 2e 0a 0a 3c 74 63 6c 3e 68   offset...<tcl>h
2b910 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c 75 65  d_fragment value
2b920 73 20 7b 56 41 4c 55 45 53 20 63 6c 61 75 73 65  s {VALUES clause
2b930 7d 20 56 41 4c 55 45 53 3c 2f 74 63 6c 3e 0a 3c  } VALUES</tcl>.<
2b940 68 33 3e 54 68 65 20 56 41 4c 55 45 53 20 63 6c  h3>The VALUES cl
2b950 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ause</h3>..<p>Th
2b960 65 20 70 68 72 61 73 65 20 22 56 41 4c 55 45 53  e phrase "VALUES
2b970 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69  (<i>expr-list</i
2b980 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61  >)" means the sa
2b990 6d 65 20 74 68 69 6e 67 0a 61 73 20 22 53 45 4c  me thing.as "SEL
2b9a0 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74  ECT <i>expr-list
2b9b0 3c 2f 69 3e 22 2e 20 20 54 68 65 20 70 68 72 61  </i>".  The phra
2b9c0 73 65 0a 22 56 41 4c 55 45 53 28 3c 69 3e 65 78  se."VALUES(<i>ex
2b9d0 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 29 2c 2e  pr-list-1</i>),.
2b9e0 2e 2e 2c 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74  ..,(<i>expr-list
2b9f0 2d 4e 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74  -N</i>)" means t
2ba00 68 65 20 73 61 6d 65 0a 74 68 69 6e 67 20 61 73  he same.thing as
2ba10 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72   "SELECT <i>expr
2ba20 2d 6c 69 73 74 2d 31 3c 2f 69 3e 20 55 4e 49 4f  -list-1</i> UNIO
2ba30 4e 20 41 4c 4c 20 2e 2e 2e 20 55 4e 49 4f 4e 20  N ALL ... UNION 
2ba40 41 4c 4c 0a 53 45 4c 45 43 54 20 3c 69 3e 65 78  ALL.SELECT <i>ex
2ba50 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 22 2e 20  pr-list-N</i>". 
2ba60 20 54 68 65 72 65 20 69 73 20 6e 6f 20 61 64 76   There is no adv
2ba70 61 6e 74 61 67 65 20 74 6f 20 75 73 69 6e 67 20  antage to using 
2ba80 6f 6e 65 20 66 6f 72 6d 0a 6f 76 65 72 20 74 68  one form.over th
2ba90 65 20 6f 74 68 65 72 2e 20 20 42 6f 74 68 20 66  e other.  Both f
2baa0 6f 72 6d 73 20 79 69 65 6c 64 20 74 68 65 20 73  orms yield the s
2bab0 61 6d 65 20 72 65 73 75 6c 74 20 61 6e 64 20 62  ame result and b
2bac0 6f 74 68 20 66 6f 72 6d 73 20 75 73 65 0a 74 68  oth forms use.th
2bad0 65 20 73 61 6d 65 20 61 6d 6f 75 6e 74 20 6f 66  e same amount of
2bae0 20 6d 65 6d 6f 72 79 20 61 6e 64 20 70 72 6f 63   memory and proc
2baf0 65 73 73 69 6e 67 20 74 69 6d 65 2e 0a 0a 3c 70  essing time...<p
2bb00 3e 54 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20  >There are some 
2bb10 72 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20  restrictions on 
2bb20 74 68 65 20 75 73 65 20 6f 66 20 61 20 56 41 4c  the use of a VAL
2bb30 55 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20  UES clause that 
2bb40 61 72 65 0a 6e 6f 74 20 73 68 6f 77 6e 20 6f 6e  are.not shown on
2bb50 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
2bb60 72 61 6d 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  rams:..<ul>.<li>
2bb70 3c 70 3e 0a 41 20 56 41 4c 55 45 53 20 63 6c 61  <p>.A VALUES cla
2bb80 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f  use cannot be fo
2bb90 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 52 44 45 52  llowed by [ORDER
2bba0 20 42 59 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d 2e   BY] or [LIMIT].
2bbb0 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41 20 56 41 4c 55  ..<li><p>.A VALU
2bbc0 45 53 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  ES clause cannot
2bbd0 20 62 65 20 75 73 65 64 20 74 6f 67 65 74 68 65   be used togethe
2bbe0 72 20 77 69 74 68 20 61 20 5b 57 49 54 48 5d 20  r with a [WITH] 
2bbf0 63 6c 61 75 73 65 20 69 6e 20 61 0a 5b 73 69 6d  clause in a.[sim
2bc00 70 6c 65 20 53 45 4c 45 43 54 5d 2e 0a 3c 2f 75  ple SELECT]..</u
2bc10 6c 3e 0a 0a 0a 3c 68 33 3e 54 68 65 20 57 49 54  l>...<h3>The WIT
2bc20 48 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c  H Clause</h3>..<
2bc30 70 3e 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  p>SELECT stateme
2bc40 6e 74 73 20 6d 61 79 20 62 65 20 6f 70 74 69 6f  nts may be optio
2bc50 6e 61 6c 6c 79 20 70 72 65 63 65 64 65 64 20 62  nally preceded b
2bc60 79 20 61 20 73 69 6e 67 6c 65 0a 5b 57 49 54 48  y a single.[WITH
2bc70 20 63 6c 61 75 73 65 5d 20 74 68 61 74 20 64 65   clause] that de
2bc80 66 69 6e 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  fines one or mor
2bc90 65 20 5b 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  e [common table 
2bca0 65 78 70 72 65 73 73 69 6f 6e 73 5d 0a 66 6f 72  expressions].for
2bcb0 20 75 73 65 20 77 69 74 68 69 6e 20 74 68 65 20   use within the 
2bcc0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2bcd0 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ....<tcl>.######
2bce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bcf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd20 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
2bd30 20 55 50 44 41 54 45 20 75 70 64 61 74 65 20 7b   UPDATE update {
2bd40 55 50 44 41 54 45 20 2a 55 50 44 41 54 45 73 7d  UPDATE *UPDATEs}
2bd50 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
2bd60 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d  eDiagram update-
2bd70 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
2bd80 5e 41 6e 20 55 50 44 41 54 45 20 73 74 61 74 65  ^An UPDATE state
2bd90 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
2bda0 6d 6f 64 69 66 79 20 61 20 73 75 62 73 65 74 20  modify a subset 
2bdb0 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  of the values st
2bdc0 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72  ored in .zero or
2bdd0 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68   more rows of th
2bde0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
2bdf0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
2be00 68 65 20 0a 3c 69 3e 71 75 61 6c 69 66 69 65 64  he .<i>qualified
2be10 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  -table-name</i> 
2be20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
2be30 74 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  t of the UPDATE 
2be40 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e  statement...<p>^
2be50 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
2be60 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
2be70 20 68 61 76 65 20 61 20 57 48 45 52 45 20 63 6c   have a WHERE cl
2be80 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69  ause, all rows i
2be90 6e 20 74 68 65 0a 74 61 62 6c 65 20 61 72 65 20  n the.table are 
2bea0 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68 65 20  modified by the 
2beb0 55 50 44 41 54 45 2e 20 5e 4f 74 68 65 72 77 69  UPDATE. ^Otherwi
2bec0 73 65 2c 20 74 68 65 20 55 50 44 41 54 45 20 61  se, the UPDATE a
2bed0 66 66 65 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73  ffects only thos
2bee0 65 0a 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  e.rows for which
2bef0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65   the result of e
2bf00 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57 48  valuating the WH
2bf10 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
2bf20 73 73 69 6f 6e 20 61 73 20 61 20 0a 5b 62 6f 6f  ssion as a .[boo
2bf30 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c  lean expression|
2bf40 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
2bf50 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20 5e 49 74  on is true]. ^It
2bf60 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   is not an error
2bf70 20 69 66 20 74 68 65 0a 57 48 45 52 45 20 63 6c   if the.WHERE cl
2bf80 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 65 76  ause does not ev
2bf90 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65 20 66  aluate to true f
2bfa0 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68  or any row in th
2bfb0 65 20 74 61 62 6c 65 20 2d 20 74 68 69 73 20 6a  e table - this j
2bfc0 75 73 74 0a 6d 65 61 6e 73 20 74 68 61 74 20 74  ust.means that t
2bfd0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
2bfe0 65 6e 74 20 61 66 66 65 63 74 73 20 7a 65 72 6f  ent affects zero
2bff0 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d   rows...<p>The m
2c000 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 6d 61 64  odifications mad
2c010 65 20 74 6f 20 65 61 63 68 20 72 6f 77 20 61 66  e to each row af
2c020 66 65 63 74 65 64 20 62 79 20 61 6e 20 55 50 44  fected by an UPD
2c030 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 72  ATE statement ar
2c040 65 0a 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e.determined by 
2c050 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69  the list of assi
2c060 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e  gnments followin
2c070 67 20 74 68 65 20 53 45 54 20 6b 65 79 77 6f 72  g the SET keywor
2c080 64 2e 20 45 61 63 68 0a 61 73 73 69 67 6e 6d 65  d. Each.assignme
2c090 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 20 63  nt specifies a c
2c0a0 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68  olumn name to th
2c0b0 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71  e left of the eq
2c0c0 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 0a  uals sign and a.
2c0d0 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
2c0e0 6e 20 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20  n to the right. 
2c0f0 5e 46 6f 72 20 65 61 63 68 20 61 66 66 65 63 74  ^For each affect
2c100 65 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65  ed row, the name
2c110 64 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65  d columns.are se
2c120 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20  t to the values 
2c130 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74  found by evaluat
2c140 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
2c150 6e 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65 78  nding scalar .ex
2c160 70 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61  pressions. ^If a
2c170 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e   single column-n
2c180 61 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72 65  ame appears more
2c190 20 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68   than once in th
2c1a0 65 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e  e list of.assign
2c1b0 6d 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  ment expressions
2c1c0 2c 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72 69  , all but the ri
2c1d0 67 68 74 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e  ghtmost occurren
2c1e0 63 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e  ce is ignored. ^
2c1f0 43 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20  Columns.that do 
2c200 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  not appear in th
2c210 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e  e list of assign
2c220 6d 65 6e 74 73 20 61 72 65 20 6c 65 66 74 20 75  ments are left u
2c230 6e 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68 65 20  nmodified. ^The 
2c240 73 63 61 6c 61 72 0a 65 78 70 72 65 73 73 69 6f  scalar.expressio
2c250 6e 73 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20  ns may refer to 
2c260 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 72  columns of the r
2c270 6f 77 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  ow being updated
2c280 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 20  . ^In this case 
2c290 61 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70 72 65  all.scalar expre
2c2a0 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75  ssions are evalu
2c2b0 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20  ated before any 
2c2c0 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20  assignments are 
2c2d0 6d 61 64 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  made...<p>^The o
2c2e0 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74  ptional conflict
2c2f0 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74  -clause allows t
2c300 68 65 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e  he user to nomin
2c310 61 74 65 20 61 20 73 70 65 63 69 66 69 63 0a 63  ate a specific.c
2c320 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
2c330 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
2c340 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64  gorithm to use d
2c350 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55  uring this one U
2c360 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52  PDATE command..R
2c370 65 66 65 72 20 74 6f 20 74 68 65 20 73 65 63 74  efer to the sect
2c380 69 6f 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e  ion entitled [ON
2c390 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61   CONFLICT] for a
2c3a0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
2c3b0 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74  ation...<h3>Rest
2c3c0 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41  rictions on UPDA
2c3d0 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69  TE Statements Wi
2c3e0 74 68 69 6e 20 43 52 45 41 54 45 20 54 52 49 47  thin CREATE TRIG
2c3f0 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  GER</h3>..<p>The
2c400 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74   following addit
2c410 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73  ional syntax res
2c420 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  trictions apply 
2c430 74 6f 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  to UPDATE statem
2c440 65 6e 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20  ents that.occur 
2c450 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
2c460 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54 52 49  of a [CREATE TRI
2c470 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
2c480 20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c    ..<ul>.  <li><
2c490 70 3e 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d  p>^The <i>table-
2c4a0 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69  name</i> specifi
2c4b0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
2c4c0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2c4d0 74 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61  t within.      a
2c4e0 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75   trigger body mu
2c4f0 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65  st be unqualifie
2c500 64 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f  d. ^(In other wo
2c510 72 64 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c  rds, the.      <
2c520 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
2c530 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66  /i><b>.</b> pref
2c540 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  ix on the table 
2c550 6e 61 6d 65 20 6f 66 20 74 68 65 20 55 50 44 41  name of the UPDA
2c560 54 45 20 69 73 0a 20 20 20 20 20 20 6e 6f 74 20  TE is.      not 
2c570 61 6c 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74  allowed within t
2c580 72 69 67 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65  riggers.)^ ^Unle
2c590 73 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  ss the table to 
2c5a0 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
2c5b0 72 0a 20 20 20 20 20 20 69 73 20 61 74 74 61 63  r.      is attac
2c5c0 68 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45  hed is in the TE
2c5d0 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  MP database, the
2c5e0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64   table being upd
2c5f0 61 74 65 64 20 62 79 20 74 68 65 0a 20 20 20 20  ated by the.    
2c600 20 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61    trigger progra
2c610 6d 20 6d 75 73 74 20 72 65 73 69 64 65 20 69 6e  m must reside in
2c620 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
2c630 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68  se as it. ^If th
2c640 65 20 74 61 62 6c 65 0a 20 20 20 20 20 20 74 6f  e table.      to
2c650 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
2c660 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69  er is attached i
2c670 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
2c680 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65  tabase, then the
2c690 0a 20 20 20 20 20 20 75 6e 71 75 61 6c 69 66 69  .      unqualifi
2c6a0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
2c6b0 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74  able being updat
2c6c0 65 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69  ed is resolved i
2c6d0 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a 20  n the same way. 
2c6e0 20 20 20 20 20 61 73 20 69 74 20 69 73 20 66 6f       as it is fo
2c6f0 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74  r a top-level st
2c700 61 74 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72  atement (by sear
2c710 63 68 69 6e 67 20 66 69 72 73 74 20 74 68 65 20  ching first the 
2c720 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 0a 20  TEMP database,. 
2c730 20 20 20 20 20 74 68 65 6e 20 74 68 65 20 6d 61       then the ma
2c740 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  in database, the
2c750 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61  n any other data
2c760 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64  bases in the ord
2c770 65 72 20 74 68 65 79 20 77 65 72 65 0a 20 20 20  er they were.   
2c780 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 0a 20     attached)... 
2c790 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44   <li><p>^The IND
2c7a0 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20  EXED BY and NOT 
2c7b0 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20  INDEXED clauses 
2c7c0 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  are not allowed 
2c7d0 6f 6e 20 55 50 44 41 54 45 0a 20 20 20 20 20 20  on UPDATE.      
2c7e0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
2c7f0 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  n triggers.</p>.
2c800 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c  .  <li><p>^The L
2c810 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42  IMIT and ORDER B
2c820 59 20 63 6c 61 75 73 65 73 20 66 6f 72 20 55 50  Y clauses for UP
2c830 44 41 54 45 20 61 72 65 20 75 6e 73 75 70 70 6f  DATE are unsuppo
2c840 72 74 65 64 20 77 69 74 68 69 6e 0a 20 20 20 20  rted within.    
2c850 20 20 74 72 69 67 67 65 72 73 2c 20 72 65 67 61    triggers, rega
2c860 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f  rdless of the co
2c870 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
2c880 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  s used to build 
2c890 53 51 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  SQLite..</ul>..<
2c8a0 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49  h3>Optional LIMI
2c8b0 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 43  T and ORDER BY C
2c8c0 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  lauses</h3>..<p>
2c8d0 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73 20 62  ^(If SQLite is b
2c8e0 75 69 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53  uilt with the [S
2c8f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
2c900 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
2c910 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ].compile-time o
2c920 70 74 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73  ption then the s
2c930 79 6e 74 61 78 20 6f 66 20 74 68 65 20 55 50 44  yntax of the UPD
2c940 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ATE statement is
2c950 20 65 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f   extended.with o
2c960 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59  ptional ORDER BY
2c970 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
2c980 65 73 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  es)^ as follows:
2c990 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
2c9a0 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d  eDiagram update-
2c9b0 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
2c9c0 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50  l>..<p>^If an UP
2c9d0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  DATE statement h
2c9e0 61 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  as a LIMIT claus
2c9f0 65 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  e, the maximum n
2ca00 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68  umber of rows th
2ca10 61 74 0a 77 69 6c 6c 20 62 65 20 75 70 64 61 74  at.will be updat
2ca20 65 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65  ed is found by e
2ca30 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63  valuating the ac
2ca40 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65  companying expre
2ca50 73 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e  ssion and castin
2ca60 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  g.it to an integ
2ca70 65 72 20 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67  er value. ^A neg
2ca80 61 74 69 76 65 20 76 61 6c 75 65 20 69 73 20 69  ative value is i
2ca90 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22 6e  nterpreted as "n
2caa0 6f 20 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49  o limit"...<p>^I
2cab0 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72  f the LIMIT expr
2cac0 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
2cad0 20 74 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65   to non-negative
2cae0 20 76 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20   value <i>N</i> 
2caf0 61 6e 64 20 74 68 65 0a 55 50 44 41 54 45 20 73  and the.UPDATE s
2cb00 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20  tatement has an 
2cb10 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
2cb20 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74   then all rows t
2cb30 68 61 74 20 77 6f 75 6c 64 20 62 65 20 75 70 64  hat would be upd
2cb40 61 74 65 64 20 69 6e 0a 74 68 65 20 61 62 73 65  ated in.the abse
2cb50 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  nce of the LIMIT
2cb60 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74   clause are sort
2cb70 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ed according to 
2cb80 74 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64  the ORDER BY and
2cb90 20 74 68 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c   the.first <i>N<
2cba0 2f 69 3e 20 75 70 64 61 74 65 64 2e 20 5e 28 49  /i> updated. ^(I
2cbb0 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
2cbc0 74 65 6d 65 6e 74 20 61 6c 73 6f 20 68 61 73 20  tement also has 
2cbd0 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  an OFFSET clause
2cbe0 2c 0a 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d  ,.then it is sim
2cbf0 69 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64  ilarly evaluated
2cc00 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 20   and cast to an 
2cc10 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
2cc20 66 20 74 68 65 20 4f 46 46 53 45 54 0a 65 78 70  f the OFFSET.exp
2cc30 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
2cc40 73 20 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74  s to a non-negat
2cc50 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f  ive value <i>M</
2cc60 69 3e 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72  i>, then the fir
2cc70 73 74 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73  st <i>M</i>.rows
2cc80 20 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64   are skipped and
2cc90 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c   the following <
2cca0 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64  i>N</i> rows upd
2ccb0 61 74 65 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a  ated instead.)^.
2ccc0 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41  .<p>^If the UPDA
2ccd0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
2cce0 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61   no ORDER BY cla
2ccf0 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f  use, then all ro
2cd00 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65  ws that.would be
2cd10 20 75 70 64 61 74 65 64 20 69 6e 20 74 68 65 20   updated in the 
2cd20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
2cd30 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
2cd40 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a  assembled in an.
2cd50 61 72 62 69 74 72 61 72 79 20 6f 72 64 65 72 20  arbitrary order 
2cd60 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20  before applying 
2cd70 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  the LIMIT and OF
2cd80 46 53 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20  FSET clauses to 
2cd90 64 65 74 65 72 6d 69 6e 65 20 0a 77 68 69 63 68  determine .which
2cda0 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 70   are actually up
2cdb0 64 61 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65  dated...<p>^(The
2cdc0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2cdd0 20 6f 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74   on an UPDATE st
2cde0 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
2cdf0 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e  only to determin
2ce00 65 20 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c  e which.rows fal
2ce10 6c 20 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d  l within the LIM
2ce20 49 54 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e  IT. The order in
2ce30 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
2ce40 6d 6f 64 69 66 69 65 64 20 69 73 20 61 72 62 69  modified is arbi
2ce50 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74  trary.and is not
2ce60 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74   influenced by t
2ce70 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
2ce80 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  se.)^..<tcl>.###
2ce90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ceb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ced0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
2cee0 69 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75  ion VACUUM vacuu
2cef0 6d 20 56 41 43 55 55 4d 0a 0a 52 65 63 75 72 73  m VACUUM..Recurs
2cf00 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
2cf10 20 76 61 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74   vacuum-stmt.</t
2cf20 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56  cl>..<p>.  The V
2cf30 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65  ACUUM command re
2cf40 62 75 69 6c 64 73 20 74 68 65 20 65 6e 74 69 72  builds the entir
2cf50 65 20 64 61 74 61 62 61 73 65 2e 20 54 68 65 72  e database. Ther
2cf60 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 0a 20  e are several . 
2cf70 20 72 65 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c   reasons an appl
2cf80 69 63 61 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f  ication might do
2cf90 20 74 68 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c   this:..<ul>.  <
2cfa0 6c 69 3e 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20  li> <p> ^Unless 
2cfb0 53 51 4c 69 74 65 20 69 73 20 72 75 6e 6e 69 6e  SQLite is runnin
2cfc0 67 20 69 6e 20 22 61 75 74 6f 5f 76 61 63 75 75  g in "auto_vacuu
2cfd0 6d 3d 46 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68  m=FULL" mode, wh
2cfe0 65 6e 20 61 20 6c 61 72 67 65 0a 20 20 20 20 20  en a large.     
2cff0 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69  amount of data i
2d000 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74  s deleted from t
2d010 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2d020 20 69 74 20 6c 65 61 76 65 73 20 62 65 68 69 6e   it leaves behin
2d030 64 20 65 6d 70 74 79 0a 20 20 20 20 20 73 70 61  d empty.     spa
2d040 63 65 2c 20 6f 72 20 22 66 72 65 65 22 20 64 61  ce, or "free" da
2d050 74 61 62 61 73 65 20 70 61 67 65 73 2e 20 54 68  tabase pages. Th
2d060 69 73 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74  is means the dat
2d070 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74  abase file might
2d080 0a 20 20 20 20 20 62 65 20 6c 61 72 67 65 72 20  .     be larger 
2d090 74 68 61 6e 20 73 74 72 69 63 74 6c 79 20 6e 65  than strictly ne
2d0a0 63 65 73 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e  cessary. ^Runnin
2d0b0 67 20 56 41 43 55 55 4d 20 74 6f 20 72 65 62 75  g VACUUM to rebu
2d0c0 69 6c 64 20 74 68 65 20 0a 20 20 20 20 20 64 61  ild the .     da
2d0d0 74 61 62 61 73 65 20 72 65 63 6c 61 69 6d 73 20  tabase reclaims 
2d0e0 74 68 69 73 20 73 70 61 63 65 20 61 6e 64 20 72  this space and r
2d0f0 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 20  educes the size 
2d100 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2d110 66 69 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  file...  <li> <p
2d120 3e 20 5e 46 72 65 71 75 65 6e 74 20 69 6e 73 65  > ^Frequent inse
2d130 72 74 73 2c 20 75 70 64 61 74 65 73 2c 20 61 6e  rts, updates, an
2d140 64 20 64 65 6c 65 74 65 73 20 63 61 6e 20 63 61  d deletes can ca
2d150 75 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65  use the database
2d160 20 66 69 6c 65 0a 20 20 20 20 20 74 6f 20 62 65   file.     to be
2d170 63 6f 6d 65 20 66 72 61 67 6d 65 6e 74 65 64 20  come fragmented 
2d180 2d 20 77 68 65 72 65 20 64 61 74 61 20 66 6f 72  - where data for
2d190 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
2d1a0 6f 72 20 69 6e 64 65 78 20 69 73 20 73 63 61 74  or index is scat
2d1b0 74 65 72 65 64 20 0a 20 20 20 20 20 61 72 6f 75  tered .     arou
2d1c0 6e 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  nd the database 
2d1d0 66 69 6c 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  file. ^Running V
2d1e0 41 43 55 55 4d 20 65 6e 73 75 72 65 73 20 74 68  ACUUM ensures th
2d1f0 61 74 20 65 61 63 68 20 74 61 62 6c 65 20 61 6e  at each table an
2d200 64 0a 20 20 20 20 20 69 6e 64 65 78 20 69 73 20  d.     index is 
2d210 6c 61 72 67 65 6c 79 20 73 74 6f 72 65 64 20 63  largely stored c
2d220 6f 6e 74 69 67 75 6f 75 73 6c 79 20 77 69 74 68  ontiguously with
2d230 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2d240 66 69 6c 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20  file. ^In some. 
2d250 20 20 20 20 63 61 73 65 73 2c 20 56 41 43 55 55      cases, VACUU
2d260 4d 20 6d 61 79 20 61 6c 73 6f 20 72 65 64 75 63  M may also reduc
2d270 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
2d280 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64  partially filled
2d290 20 70 61 67 65 73 20 69 6e 0a 20 20 20 20 20 74   pages in.     t
2d2a0 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 64  he database, red
2d2b0 75 63 69 6e 67 20 74 68 65 20 73 69 7a 65 20 6f  ucing the size o
2d2c0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
2d2d0 69 6c 65 20 66 75 72 74 68 65 72 2e 0a 0a 20 20  ile further...  
2d2e0 3c 6c 69 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c  <li> <p> ^Normal
2d2f0 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ly, the database
2d300 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64   [page_size] and
2d310 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2d320 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
2d330 20 20 73 75 70 70 6f 72 74 73 20 5b 61 75 74 6f    supports [auto
2d340 5f 76 61 63 75 75 6d 5d 20 6d 75 73 74 20 62 65  _vacuum] must be
2d350 20 63 6f 6e 66 69 67 75 72 65 64 20 62 65 66 6f   configured befo
2d360 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database 
2d370 66 69 6c 65 20 69 73 0a 20 20 20 20 20 61 63 74  file is.     act
2d380 75 61 6c 6c 79 20 63 72 65 61 74 65 64 2e 20 5e  ually created. ^
2d390 48 6f 77 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f  However, when no
2d3a0 74 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61  t in [write-ahea
2d3b0 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65  d log] mode, the
2d3c0 20 0a 20 20 20 20 20 5b 70 61 67 65 5f 73 69 7a   .     [page_siz
2d3d0 65 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f  e] and/or [auto_
2d3e0 76 61 63 75 75 6d 5d 20 70 72 6f 70 65 72 74 69  vacuum] properti
2d3f0 65 73 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e  es of an existin
2d400 67 20 64 61 74 61 62 61 73 65 20 6d 61 79 20 62  g database may b
2d410 65 0a 20 20 20 20 20 63 68 61 6e 67 65 64 20 62  e.     changed b
2d420 79 20 75 73 69 6e 67 20 74 68 65 20 5b 70 61 67  y using the [pag
2d430 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 7c 70 61  e_size pragma|pa
2d440 67 65 5f 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72  ge_size]  and/or
2d450 20 0a 20 20 20 20 20 5b 61 75 74 6f 5f 76 61 63   .     [auto_vac
2d460 75 75 6d 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f  uum|pragma auto_
2d470 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 73 20  vacuum] pragmas 
2d480 61 6e 64 20 74 68 65 6e 20 69 6d 6d 65 64 69 61  and then immedia
2d490 74 65 6c 79 20 56 41 43 55 55 4d 69 6e 67 0a 20  tely VACUUMing. 
2d4a0 20 20 20 20 74 68 65 20 64 61 74 61 62 61 73 65      the database
2d4b0 2e 20 5e 57 68 65 6e 20 69 6e 20 5b 77 72 69 74  . ^When in [writ
2d4c0 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64  e-ahead log] mod
2d4d0 65 2c 20 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74  e, only the [aut
2d4e0 6f 5f 76 61 63 75 75 6d 5d 0a 20 20 20 20 20 73  o_vacuum].     s
2d4f0 75 70 70 6f 72 74 20 70 72 6f 70 65 72 74 79 20  upport property 
2d500 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20 75  can be changed u
2d510 73 69 6e 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75  sing VACUUM..</u
2d520 6c 3e 0a 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20  l>..<p>^(VACUUM 
2d530 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68  only works on th
2d540 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  e main database.
2d550 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69   It is not possi
2d560 62 6c 65 20 74 6f 20 56 41 43 55 55 4d 20 61 6e  ble to VACUUM an
2d570 0a 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61  .attached databa
2d580 73 65 20 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e  se file.)^..<p>^
2d590 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
2d5a0 6e 64 20 77 6f 72 6b 73 20 62 79 20 63 6f 70 79  nd works by copy
2d5b0 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  ing the contents
2d5c0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2d5d0 20 69 6e 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72   into.a temporar
2d5e0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
2d5f0 61 6e 64 20 74 68 65 6e 20 6f 76 65 72 77 72 69  and then overwri
2d600 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61  ting the origina
2d610 6c 20 77 69 74 68 20 74 68 65 20 0a 63 6f 6e 74  l with the .cont
2d620 65 6e 74 73 20 6f 66 20 74 68 65 20 74 65 6d 70  ents of the temp
2d630 6f 72 61 72 79 20 66 69 6c 65 2e 20 5e 57 68 65  orary file. ^Whe
2d640 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68  n overwriting th
2d650 65 20 6f 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f  e original, a ro
2d660 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f  llback.journal o
2d670 72 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  r [write-ahead l
2d680 6f 67 5d 20 57 41 4c 20 66 69 6c 65 20 69 73 20  og] WAL file is 
2d690 75 73 65 64 20 6a 75 73 74 20 61 73 20 69 74 20  used just as it 
2d6a0 77 6f 75 6c 64 20 62 65 20 66 6f 72 20 61 6e 79  would be for any
2d6b0 0a 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20  .other database 
2d6c0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68  transaction. ^Th
2d6d0 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20 77 68  is means that wh
2d6e0 65 6e 20 56 41 43 55 55 4d 69 6e 67 20 61 20 64  en VACUUMing a d
2d6f0 61 74 61 62 61 73 65 2c 20 0a 61 73 20 6d 75 63  atabase, .as muc
2d700 68 20 61 73 20 74 77 69 63 65 20 74 68 65 20 73  h as twice the s
2d710 69 7a 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69  ize of the origi
2d720 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c  nal database fil
2d730 65 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e  e is required in
2d740 20 66 72 65 65 0a 64 69 73 6b 20 73 70 61 63 65   free.disk space
2d750 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55  ...<p>^The VACUU
2d760 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68  M command may ch
2d770 61 6e 67 65 20 74 68 65 20 5b 52 4f 57 49 44 20  ange the [ROWID 
2d780 7c 20 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74  | ROWIDs] of ent
2d790 72 69 65 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c  ries in any.tabl
2d7a0 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 68  es that do not h
2d7b0 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20  ave an explicit 
2d7c0 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
2d7d0 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   KEY]..</p>..<p>
2d7e0 5e 41 20 56 41 43 55 55 4d 20 77 69 6c 6c 20 66  ^A VACUUM will f
2d7f0 61 69 6c 20 69 66 20 74 68 65 72 65 20 69 73 20  ail if there is 
2d800 61 6e 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  an open transact
2d810 69 6f 6e 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ion, or if there
2d820 20 61 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65   are one or.more
2d830 20 61 63 74 69 76 65 20 53 51 4c 20 73 74 61 74   active SQL stat
2d840 65 6d 65 6e 74 73 20 77 68 65 6e 20 69 74 20 69  ements when it i
2d850 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20  s run...<p>^(As 
2d860 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  of SQLite versio
2d870 6e 20 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e  n 3.1, an altern
2d880 61 74 69 76 65 20 74 6f 20 75 73 69 6e 67 20 74  ative to using t
2d890 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
2d8a0 64 20 74 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61  d to.reclaim spa
2d8b0 63 65 20 61 66 74 65 72 20 64 61 74 61 20 68 61  ce after data ha
2d8c0 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 20 69  s been deleted i
2d8d0 73 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f  s auto-vacuum mo
2d8e0 64 65 2c 20 65 6e 61 62 6c 65 64 20 75 73 69 6e  de, enabled usin
2d8f0 67 0a 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75  g.the [auto_vacu
2d900 75 6d 5d 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57  um] pragma.)^ ^W
2d910 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  hen [auto_vacuum
2d920 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72  ] is enabled for
2d930 20 61 20 64 61 74 61 62 61 73 65 0a 66 72 65 65   a database.free
2d940 20 70 61 67 65 73 20 6d 61 79 20 62 65 20 72 65   pages may be re
2d950 63 6c 61 69 6d 65 64 20 61 66 74 65 72 20 64 65  claimed after de
2d960 6c 65 74 69 6e 67 20 64 61 74 61 2c 20 63 61 75  leting data, cau
2d970 73 69 6e 67 20 74 68 65 20 66 69 6c 65 20 74 6f  sing the file to
2d980 20 73 68 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74   shrink,.without
2d990 20 72 65 62 75 69 6c 64 69 6e 67 20 74 68 65 20   rebuilding the 
2d9a0 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
2d9b0 75 73 69 6e 67 20 56 41 43 55 55 4d 2e 20 20 48  using VACUUM.  H
2d9c0 6f 77 65 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61  owever, using.[a
2d9d0 75 74 6f 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20  uto_vacuum] can 
2d9e0 6c 65 61 64 20 74 6f 20 65 78 74 72 61 20 64 61  lead to extra da
2d9f0 74 61 62 61 73 65 20 66 69 6c 65 20 66 72 61 67  tabase file frag
2da00 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20  mentation.  And 
2da10 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f  [auto_vacuum].do
2da20 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70  es not compact p
2da30 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20  artially filled 
2da40 70 61 67 65 73 20 6f 66 20 74 68 65 20 64 61 74  pages of the dat
2da50 61 62 61 73 65 20 61 73 20 56 41 43 55 55 4d 20  abase as VACUUM 
2da60 64 6f 65 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74  does...</p>...<t
2da70 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
2da80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2daa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dac0 23 23 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45  ##.Section {INDE
2dad0 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62  XED BY} indexedb
2dae0 79 20 7b 7b 49 4e 44 45 58 45 44 20 42 59 7d 20  y {{INDEXED BY} 
2daf0 7b 4e 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a  {NOT INDEXED}}..
2db00 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49  </tcl>.<p>^The I
2db10 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65  NDEXED BY phrase
2db20 20 66 6f 72 63 65 73 20 74 68 65 20 5b 53 51 4c   forces the [SQL
2db30 69 74 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  ite query planne
2db40 72 5d 20 74 6f 20 75 73 65 20 61 0a 70 61 72 74  r] to use a.part
2db50 69 63 75 6c 61 72 20 6e 61 6d 65 64 20 69 6e 64  icular named ind
2db60 65 78 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d  ex on a [DELETE]
2db70 2c 20 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b  , [SELECT], or [
2db80 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e  UPDATE] statemen
2db90 74 2e 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42  t..The INDEXED B
2dba0 59 20 70 68 72 61 73 65 20 69 73 20 61 6e 20 65  Y phrase is an e
2dbb0 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 20 69 73  xtension that is
2dbc0 20 70 61 72 74 69 63 75 6c 61 72 20 74 6f 20 53   particular to S
2dbd0 51 4c 69 74 65 20 61 6e 64 0a 69 73 20 6e 6f 74  QLite and.is not
2dbe0 20 70 6f 72 74 61 62 6c 65 20 74 6f 20 6f 74 68   portable to oth
2dbf0 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
2dc00 65 6e 67 69 6e 65 73 2e 0a 54 68 65 20 49 4e 44  engines..The IND
2dc10 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 63  EXED BY phrase c
2dc20 61 6e 20 62 65 20 73 65 65 6e 20 69 6e 20 74 68  an be seen in th
2dc30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74  e following synt
2dc40 61 78 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70 3e  ax.diagrams:</p>
2dc50 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76  ..<tcl>.Recursiv
2dc60 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71  eBubbleDiagram q
2dc70 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
2dc80 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ame.</tcl>..<p>^
2dc90 54 68 65 20 22 49 4e 44 45 58 45 44 20 42 59 20  The "INDEXED BY 
2dca0 69 6e 64 65 78 2d 6e 61 6d 65 22 20 70 68 72 61  index-name" phra
2dcb0 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61  se specifies tha
2dcc0 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65  t the named inde
2dcd0 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20 69  x.must be used i
2dce0 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20  n order to look 
2dcf0 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65  up values on the
2dd00 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65   preceding table
2dd10 2e 0a 5e 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65  ..^If index-name
2dd20 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20   does not exist 
2dd30 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65  or cannot be use
2dd40 64 20 66 6f 72 20 74 68 65 20 71 75 65 72 79 2c  d for the query,
2dd50 20 74 68 65 6e 0a 74 68 65 20 70 72 65 70 61 72   then.the prepar
2dd60 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c  ation of the SQL
2dd70 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c 73   statement fails
2dd80 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e 44  ..^(The "NOT IND
2dd90 45 58 45 44 22 20 63 6c 61 75 73 65 20 73 70 65  EXED" clause spe
2dda0 63 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20 69  cifies that no i
2ddb0 6e 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75 73  ndex shall be us
2ddc0 65 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69 6e  ed when.accessin
2ddd0 67 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20  g the preceding 
2dde0 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67  table, including
2ddf0 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73   implied indices
2de00 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49 51 55   create by.UNIQU
2de10 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  E and PRIMARY KE
2de20 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20  Y constraints.  
2de30 48 6f 77 65 76 65 72 2c 20 74 68 65 20 49 4e 54  However, the INT
2de40 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
2de50 0a 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 75 73  .can still be us
2de60 65 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e  ed to look up en
2de70 74 72 69 65 73 20 65 76 65 6e 20 77 68 65 6e 20  tries even when 
2de80 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 69 73  "NOT INDEXED" is
2de90 20 73 70 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70   specified.)^</p
2dea0 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64  >..<p>Some SQL d
2deb0 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20  atabase engines 
2dec0 70 72 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e  provide non-stan
2ded0 64 61 72 64 20 22 68 69 6e 74 22 20 6d 65 63 68  dard "hint" mech
2dee0 61 6e 69 73 6d 73 20 77 68 69 63 68 0a 63 61 6e  anisms which.can
2def0 20 62 65 20 75 73 65 64 20 74 6f 20 67 69 76 65   be used to give
2df00 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
2df10 69 7a 65 72 20 63 6c 75 65 73 20 61 62 6f 75 74  izer clues about
2df20 20 77 68 61 74 20 69 6e 64 69 63 65 73 20 69 74   what indices it
2df30 20 73 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20   should.use for 
2df40 61 20 70 61 72 74 69 63 75 6c 61 72 20 73 74 61  a particular sta
2df50 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e 44  tement.  The IND
2df60 45 58 20 42 59 20 63 6c 61 75 73 65 20 6f 66 20  EX BY clause of 
2df70 53 51 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e  SQLite is .<em>n
2df80 6f 74 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e  ot</em> a hintin
2df90 67 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20  g mechanism and 
2dfa0 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65  it should not be
2dfb0 20 75 73 65 64 20 61 73 20 73 75 63 68 2e 0a 5e   used as such..^
2dfc0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  The INDEXED BY c
2dfd0 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 67  lause does not g
2dfe0 69 76 65 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  ive the optimize
2dff0 72 20 68 69 6e 74 73 20 61 62 6f 75 74 20 77 68  r hints about wh
2e000 69 63 68 20 69 6e 64 65 78 0a 74 6f 20 75 73 65  ich index.to use
2e010 3b 20 69 74 20 67 69 76 65 73 20 74 68 65 20 6f  ; it gives the o
2e020 70 74 69 6d 69 7a 65 72 20 61 20 72 65 71 75 69  ptimizer a requi
2e030 72 65 6d 65 6e 74 20 6f 66 20 77 68 69 63 68 20  rement of which 
2e040 69 6e 64 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49  index to use..^I
2e050 66 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  f the query opti
2e060 6d 69 7a 65 72 20 69 73 20 75 6e 61 62 6c 65 20  mizer is unable 
2e070 74 6f 20 75 73 65 20 74 68 65 20 69 6e 64 65 78  to use the index
2e080 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
2e090 65 0a 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73  e.INDEX BY claus
2e0a0 65 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65 72  e, then the quer
2e0b0 79 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  y will fail with
2e0c0 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a   an error.</p>..
2e0d0 3c 70 3e 54 68 65 20 49 4e 44 45 58 45 44 20 42  <p>The INDEXED B
2e0e0 59 20 63 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e  Y clause is <em>
2e0f0 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65  not</em> intende
2e100 64 20 66 6f 72 20 75 73 65 20 69 6e 20 74 75 6e  d for use in tun
2e110 69 6e 67 0a 74 68 65 20 70 65 72 66 6f 72 6d 61  ing.the performa
2e120 6e 63 65 20 6f 66 20 61 20 71 75 65 72 79 2e 20  nce of a query. 
2e130 20 54 68 65 20 69 6e 74 65 6e 74 20 6f 66 20 74   The intent of t
2e140 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
2e150 61 75 73 65 20 69 73 0a 74 6f 20 72 61 69 73 65  ause is.to raise
2e160 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f   a run-time erro
2e170 72 20 69 66 20 61 20 73 63 68 65 6d 61 20 63 68  r if a schema ch
2e180 61 6e 67 65 2c 20 73 75 63 68 20 61 73 20 64 72  ange, such as dr
2e190 6f 70 70 69 6e 67 20 6f 72 0a 63 72 65 61 74 69  opping or.creati
2e1a0 6e 67 20 61 6e 20 69 6e 64 65 78 2c 20 63 61 75  ng an index, cau
2e1b0 73 65 73 20 74 68 65 20 71 75 65 72 79 20 70 6c  ses the query pl
2e1c0 61 6e 20 66 6f 72 20 61 20 74 69 6d 65 2d 73 65  an for a time-se
2e1d0 6e 73 69 74 69 76 65 20 71 75 65 72 79 0a 74 6f  nsitive query.to
2e1e0 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 49 4e   change.  The IN
2e1f0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
2e200 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 68  is designed to h
2e210 65 6c 70 20 64 65 74 65 63 74 0a 75 6e 64 65 73  elp detect.undes
2e220 69 72 61 62 6c 65 20 71 75 65 72 79 20 70 6c 61  irable query pla
2e230 6e 20 63 68 61 6e 67 65 73 20 64 75 72 69 6e 67  n changes during
2e240 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
2e250 69 6e 67 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20  ing..Developers 
2e260 61 72 65 20 61 64 6d 6f 6e 69 73 68 65 64 20 74  are admonished t
2e270 6f 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f  o omit all use o
2e280 66 20 49 4e 44 45 58 45 44 20 42 59 20 64 75 72  f INDEXED BY dur
2e290 69 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20  ing.application 
2e2a0 64 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e  design, implemen
2e2b0 74 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c  tation, testing,
2e2c0 20 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49 66   and tuning.  If
2e2d0 0a 49 4e 44 45 58 45 44 20 42 59 20 69 73 20 74  .INDEXED BY is t
2e2e0 6f 20 62 65 20 75 73 65 64 20 61 74 20 61 6c 6c  o be used at all
2e2f0 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 69  , it should be i
2e300 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
2e310 65 72 79 0a 65 6e 64 20 6f 66 20 74 68 65 20 64  ery.end of the d
2e320 65 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65  evelopment proce
2e330 73 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67  ss when "locking
2e340 20 64 6f 77 6e 22 20 61 20 64 65 73 69 67 6e 2e   down" a design.
2e350 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c  </p>..<h3>See Al
2e360 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c  so:</h3>..<ol>.<
2e370 6c 69 3e 3c 70 3e 54 68 65 20 5b 71 75 65 72 79  li><p>The [query
2e380 20 70 6c 61 6e 6e 65 72 20 63 68 65 63 6b 6c 69   planner checkli
2e390 73 74 5d 20 64 65 73 63 72 69 62 65 73 20 73 74  st] describes st
2e3a0 65 70 73 20 74 68 61 74 20 61 70 70 6c 69 63 61  eps that applica
2e3b0 74 69 6f 6e 0a 64 65 76 65 6c 6f 70 65 72 73 20  tion.developers 
2e3c0 73 68 6f 75 6c 64 20 66 6f 6c 6c 6f 77 69 6e 67  should following
2e3d0 20 74 6f 20 68 65 6c 70 20 72 65 73 6f 6c 76 65   to help resolve
2e3e0 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 70   query planner p
2e3f0 72 6f 62 6c 65 6d 73 2e 0a 4e 6f 74 69 63 65 20  roblems..Notice 
2e400 74 68 65 20 74 68 61 74 20 74 68 65 20 75 73 65  the that the use
2e410 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20 69   of INDEXED BY i
2e420 73 20 61 20 6c 61 73 74 20 72 65 73 6f 72 74 2c  s a last resort,
2e430 20 74 6f 20 62 65 20 75 73 65 64 20 6f 6e 6c 79   to be used only
2e440 0a 77 68 65 6e 20 61 6c 6c 20 6f 74 68 65 72 20  .when all other 
2e450 6d 65 61 73 75 72 65 73 20 66 61 69 6c 2e 3c 2f  measures fail.</
2e460 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5b 75 70 6c 75  p>..<li><p>[uplu
2e470 73 63 6f 6e 74 72 6f 6c 7c 54 68 65 20 75 6e 61  scontrol|The una
2e480 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f 72 5d  ry "+" operator]
2e490 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
2e4a0 64 69 73 71 75 61 6c 69 66 79 20 74 65 72 6d 73  disqualify terms
2e4b0 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c   in the WHERE cl
2e4c0 61 75 73 65 20 66 72 6f 6d 20 75 73 65 20 62 79  ause from use by
2e4d0 20 69 6e 64 69 63 65 73 2e 0a 43 61 72 65 66 75   indices..Carefu
2e4e0 6c 20 75 73 65 20 6f 66 20 75 6e 61 72 79 20 2b  l use of unary +
2e4f0 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 68   can sometimes h
2e500 65 6c 70 20 70 72 65 76 65 6e 74 20 74 68 65 20  elp prevent the 
2e510 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 66 72  query planner fr
2e520 6f 6d 0a 63 68 6f 6f 73 69 6e 67 20 61 20 70 6f  om.choosing a po
2e530 6f 72 20 69 6e 64 65 78 20 77 69 74 68 6f 75 74  or index without
2e540 20 72 65 73 74 72 69 63 74 69 6e 67 20 69 74 20   restricting it 
2e550 74 6f 20 75 73 69 6e 67 20 6f 6e 65 20 73 70 65  to using one spe
2e560 63 69 66 69 63 20 69 6e 64 65 78 2e 0a 43 61 72  cific index..Car
2e570 65 66 75 6c 20 70 6c 61 63 65 6d 65 6e 74 20 6f  eful placement o
2e580 66 20 75 6e 61 72 79 20 2b 20 6f 70 65 72 61 74  f unary + operat
2e590 6f 72 73 20 69 73 20 61 20 62 65 74 74 65 72 20  ors is a better 
2e5a0 6d 65 74 68 6f 64 20 66 6f 72 20 63 6f 6e 74 72  method for contr
2e5b0 6f 6c 6c 69 6e 67 20 0a 77 68 69 63 68 20 69 6e  olling .which in
2e5c0 64 69 63 65 73 20 61 72 65 20 75 73 65 64 20 62  dices are used b
2e5d0 79 20 61 20 71 75 65 72 79 2e 3c 2f 70 3e 0a 0a  y a query.</p>..
2e5e0 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 73 71 6c 69  <li><p>The [sqli
2e5f0 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
2e600 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  )] C/C++ interfa
2e610 63 65 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ce together with
2e620 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d   the.[SQLITE_STM
2e630 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e  TSTATUS_FULLSCAN
2e640 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49  _STEP] and [SQLI
2e650 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
2e660 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20 62 65  RT] verbs.can be
2e670 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
2e680 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e  at run-time when
2e690 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
2e6a0 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20  t is not.making 
2e6b0 65 66 66 65 63 74 69 76 65 20 75 73 65 20 6f 66  effective use of
2e6c0 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79 20   indices.  Many 
2e6d0 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79  applications may
2e6e0 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65 20 74   prefer to.use t
2e6f0 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74  he [sqlite3_stmt
2e700 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65 72  _status()] inter
2e710 66 61 63 65 20 74 6f 20 64 65 74 65 63 74 20 69  face to detect i
2e720 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61 74 68  ndex misuse.rath
2e730 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e 44 45  er than the INDE
2e740 58 45 44 20 42 59 20 70 68 72 61 73 65 20 64 65  XED BY phrase de
2e750 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c 2f 70  scribed here.</p
2e760 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23  >.</ol>..<tcl>.#
2e770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e7a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e7b0 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 41  ############.# A
2e7c0 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64   list of keyword
2e7d0 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b 20 6f  s.  A asterisk o
2e7e0 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65 20  ccurs after the 
2e7f0 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20 69 73  keyword if it is
2e800 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c 62 61   on.# the fallba
2e810 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b  ck list..#.set k
2e820 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f  eyword_list [lso
2e830 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 0a 20 20  rt {.   ABORT.  
2e840 20 41 43 54 49 4f 4e 0a 20 20 20 41 44 44 0a 20   ACTION.   ADD. 
2e850 20 20 41 46 54 45 52 0a 20 20 20 41 4c 4c 0a 20    AFTER.   ALL. 
2e860 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c 59    ALTER.   ANALY
2e870 5a 45 0a 20 20 20 41 4e 44 0a 20 20 20 41 53 0a  ZE.   AND.   AS.
2e880 20 20 20 41 53 43 0a 20 20 20 41 54 54 41 43 48     ASC.   ATTACH
2e890 0a 20 20 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .   AUTOINCREMEN
2e8a0 54 0a 20 20 20 42 45 46 4f 52 45 0a 20 20 20 42  T.   BEFORE.   B
2e8b0 45 47 49 4e 0a 20 20 20 42 45 54 57 45 45 4e 0a  EGIN.   BETWEEN.
2e8c0 20 20 20 42 59 0a 20 20 20 43 41 53 43 41 44 45     BY.   CASCADE
2e8d0 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41 53 54  .   CASE.   CAST
2e8e0 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c  .   CHECK.   COL
2e8f0 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20  LATE.   COLUMN. 
2e900 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46    COMMIT.   CONF
2e910 4c 49 43 54 0a 20 20 20 43 4f 4e 53 54 52 41 49  LICT.   CONSTRAI
2e920 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20 20 20  NT.   CREATE.   
2e930 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45 4e 54  CROSS.   CURRENT
2e940 5f 44 41 54 45 0a 20 20 20 43 55 52 52 45 4e 54  _DATE.   CURRENT
2e950 5f 54 49 4d 45 0a 20 20 20 43 55 52 52 45 4e 54  _TIME.   CURRENT
2e960 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20 20 44 41  _TIMESTAMP.   DA
2e970 54 41 42 41 53 45 0a 20 20 20 44 45 46 41 55 4c  TABASE.   DEFAUL
2e980 54 0a 20 20 20 44 45 46 45 52 52 45 44 0a 20 20  T.   DEFERRED.  
2e990 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44   DEFERRABLE.   D
2e9a0 45 4c 45 54 45 0a 20 20 20 44 45 53 43 0a 20 20  ELETE.   DESC.  
2e9b0 20 44 45 54 41 43 48 0a 20 20 20 44 49 53 54 49   DETACH.   DISTI
2e9c0 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20 20 45  NCT.   DROP.   E
2e9d0 4e 44 0a 20 20 20 45 41 43 48 0a 20 20 20 45 4c  ND.   EACH.   EL
2e9e0 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20 20 20  SE.   ESCAPE.   
2e9f0 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c 55 53  EXCEPT.   EXCLUS
2ea00 49 56 45 0a 20 20 20 45 58 49 53 54 53 0a 20 20  IVE.   EXISTS.  
2ea10 20 45 58 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c   EXPLAIN.   FAIL
2ea20 0a 20 20 20 46 4f 52 0a 20 20 20 46 4f 52 45 49  .   FOR.   FOREI
2ea30 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46 55  GN.   FROM.   FU
2ea40 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20 20 20 47 52  LL.   GLOB.   GR
2ea50 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a 20 20  OUP.   HAVING.  
2ea60 20 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20   IF.   IGNORE.  
2ea70 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 20 49 4e   IMMEDIATE.   IN
2ea80 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49 4e 44  .   INDEX.   IND
2ea90 45 58 45 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c  EXED.   INITIALL
2eaa0 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e  Y.   INNER.   IN
2eab0 53 45 52 54 0a 20 20 20 49 4e 53 54 45 41 44 0a  SERT.   INSTEAD.
2eac0 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20     INTERSECT.   
2ead0 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53  INTO.   IS.   IS
2eae0 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20  NULL.   JOIN.   
2eaf0 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c  KEY.   LEFT.   L
2eb00 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20  IKE.   LIMIT.   
2eb10 4d 41 54 43 48 0a 20 20 20 4e 41 54 55 52 41 4c  MATCH.   NATURAL
2eb20 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20  .   NO.   NOT.  
2eb30 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c   NOTNULL.   NULL
2eb40 0a 20 20 20 4f 46 0a 20 20 20 4f 46 46 53 45 54  .   OF.   OFFSET
2eb50 0a 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20  .   ON.   OR.   
2eb60 4f 52 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20  ORDER.   OUTER. 
2eb70 20 20 50 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41    PLAN.   PRAGMA
2eb80 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51  .   PRIMARY.   Q
2eb90 55 45 52 59 0a 20 20 20 52 41 49 53 45 0a 20 20  UERY.   RAISE.  
2eba0 20 52 45 43 55 52 53 49 56 45 0a 20 20 20 52 45   RECURSIVE.   RE
2ebb0 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45  FERENCES.   REGE
2ebc0 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a 20 20  XP.   REINDEX.  
2ebd0 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45 4e 41   RELEASE.   RENA
2ebe0 4d 45 0a 20 20 20 52 45 50 4c 41 43 45 0a 20 20  ME.   REPLACE.  
2ebf0 20 52 45 53 54 52 49 43 54 0a 20 20 20 52 49 47   RESTRICT.   RIG
2ec00 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20  HT.   ROLLBACK. 
2ec10 20 20 52 4f 57 0a 20 20 20 53 41 56 45 50 4f 49    ROW.   SAVEPOI
2ec20 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20  NT.   SELECT.   
2ec30 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20  SET.   TABLE.   
2ec40 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41 52  TEMP.   TEMPORAR
2ec50 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a  Y.   THEN.   TO.
2ec60 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20     TRANSACTION. 
2ec70 20 20 54 52 49 47 47 45 52 0a 20 20 20 55 4e 49    TRIGGER.   UNI
2ec80 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20  ON.   UNIQUE.   
2ec90 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a  UPDATE.   USING.
2eca0 20 20 20 56 41 43 55 55 4d 0a 20 20 20 56 41 4c     VACUUM.   VAL
2ecb0 55 45 53 0a 20 20 20 56 49 45 57 0a 20 20 20 56  UES.   VIEW.   V
2ecc0 49 52 54 55 41 4c 0a 20 20 20 57 49 54 48 0a 20  IRTUAL.   WITH. 
2ecd0 20 20 57 49 54 48 4f 55 54 0a 20 20 20 57 48 45    WITHOUT.   WHE
2ece0 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68  N.   WHERE.}]..h
2ecf0 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63 6c 61  d_puts {<DIV cla
2ed00 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e 22  ss="pdf_section"
2ed10 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69  >}.Section {SQLi
2ed20 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79  te Keywords} key
2ed30 77 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b 65 79  words {{*SQL key
2ed40 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f  word} {SQL keywo
2ed50 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c  rds}}.hd_puts {<
2ed60 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  /DIV>}.</tcl>..<
2ed70 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e 64 61  p>The SQL standa
2ed80 72 64 20 73 70 65 63 69 66 69 65 73 20 61 20 68  rd specifies a h
2ed90 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65  uge number of ke
2eda0 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d 61 79  ywords which may
2edb0 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61 73 20   not.be used as 
2edc0 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 61 62  the names of tab
2edd0 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f  les, indices, co
2ede0 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61 73 65 73  lumns, databases
2edf0 2c 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0a 66  , user-defined.f
2ee00 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74  unctions, collat
2ee10 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20 74 61  ions, virtual ta
2ee20 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20  ble modules, or 
2ee30 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65 64 20  any other named 
2ee40 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73 74  object..The list
2ee50 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 69 73 20   of keywords is 
2ee60 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66 65 77  so long that few
2ee70 20 70 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65   people can reme
2ee80 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46  mber them all..F
2ee90 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65  or most SQL code
2eea0 2c 20 79 6f 75 72 20 73 61 66 65 73 74 20 62 65  , your safest be
2eeb0 74 20 69 73 20 74 6f 20 6e 65 76 65 72 20 75 73  t is to never us
2eec0 65 20 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61  e any English la
2eed0 6e 67 75 61 67 65 0a 77 6f 72 64 20 61 73 20 74  nguage.word as t
2eee0 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 75 73 65  he name of a use
2eef0 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74  r-defined object
2ef00 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75  .</p>..<p>If you
2ef10 20 77 61 6e 74 20 74 6f 20 75 73 65 20 61 20 6b   want to use a k
2ef20 65 79 77 6f 72 64 20 61 73 20 61 20 6e 61 6d 65  eyword as a name
2ef30 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f 20 71 75  , you need to qu
2ef40 6f 74 65 20 69 74 2e 20 20 54 68 65 72 65 0a 61  ote it.  There.a
2ef50 72 65 20 66 6f 75 72 20 77 61 79 73 20 6f 66 20  re four ways of 
2ef60 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64 73  quoting keywords
2ef70 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a   in SQLite:</p>.
2ef80 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  .<p>.<blockquote
2ef90 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c  >.<table>.<tr>.<
2efa0 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
2efb0 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e  <b>'keyword'</b>
2efc0 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
2efd0 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e  20"></td>..<td>^
2efe0 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e  A keyword in sin
2eff0 67 6c 65 20 71 75 6f 74 65 73 20 69 73 20 61 20  gle quotes is a 
2f000 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c  string literal.<
2f010 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09  /td></tr>..<tr>.
2f020 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
2f030 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62  ><b>"keyword"</b
2f040 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
2f050 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
2f060 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73  in double-quotes
2f070 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65   is an identifie
2f080 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  r.</td></tr>..<t
2f090 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
2f0a0 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77  op"><b>&#91;keyw
2f0b0 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64  ord&#93;</b></td
2f0c0 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
2f0d0 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f  ^A keyword enclo
2f0e0 73 65 64 20 69 6e 20 73 71 75 61 72 65 20 62 72  sed in square br
2f0f0 61 63 6b 65 74 73 20 69 73 20 0a 20 20 20 20 20  ackets is .     
2f100 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72     an identifier
2f110 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73  .  This is not s
2f120 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68  tandard SQL.  Th
2f130 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61  is quoting mecha
2f140 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20  nism.        is 
2f150 75 73 65 64 20 62 79 20 4d 53 20 41 63 63 65 73  used by MS Acces
2f160 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65 72  s and SQL Server
2f170 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64   and is included
2f180 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20   in SQLite for. 
2f190 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69         compatibi
2f1a0 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  lity.</td></tr>.
2f1b0 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
2f1c0 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36 3b 6b  ="top"><b>&#96;k
2f1d0 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62 3e 3c  eyword&#96;</b><
2f1e0 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c  /td><td></td>..<
2f1f0 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e  td>^A keyword en
2f200 63 6c 6f 73 65 64 20 69 6e 20 67 72 61 76 65 20  closed in grave 
2f210 61 63 63 65 6e 74 73 20 28 41 53 43 49 49 20 63  accents (ASCII c
2f220 6f 64 65 20 39 36 29 20 69 73 20 0a 20 20 20 20  ode 96) is .    
2f230 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65      an identifie
2f240 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  r.  This is not 
2f250 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54  standard SQL.  T
2f260 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68  his quoting mech
2f270 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73  anism.        is
2f280 20 75 73 65 64 20 62 79 20 4d 79 53 51 4c 20 61   used by MySQL a
2f290 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  nd is included i
2f2a0 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20  n SQLite for.   
2f2b0 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69       compatibili
2f2c0 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f  ty.</td></tr>.</
2f2d0 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
2f2e0 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f  ote>.</p>..<p>Fo
2f2f0 72 20 72 65 73 69 6c 69 65 6e 63 65 20 77 68 65  r resilience whe
2f300 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77 69 74  n confronted wit
2f310 68 20 68 69 73 74 6f 72 69 63 61 6c 20 53 51 4c  h historical SQL
2f320 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 53 51 4c   statements, SQL
2f330 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74 69 6d  ite.will sometim
2f340 65 73 20 62 65 6e 64 20 74 68 65 20 71 75 6f 74  es bend the quot
2f350 69 6e 67 20 72 75 6c 65 73 20 61 62 6f 76 65 3a  ing rules above:
2f360 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ul>.<li><
2f370 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20  p>^If a keyword 
2f380 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73  in single.quotes
2f390 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f   (ex: <b>'key'</
2f3a0 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c  b> or <b>'glob'<
2f3b0 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20  /b>) is used in 
2f3c0 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a  a context where.
2f3d0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 73  an identifier is
2f3e0 20 61 6c 6c 6f 77 65 64 20 62 75 74 20 77 68 65   allowed but whe
2f3f0 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  re a string lite
2f400 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ral is not allow
2f410 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b  ed, then.the tok
2f420 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64  en is understood
2f430 20 74 6f 20 62 65 20 61 6e 20 69 64 65 6e 74 69   to be an identi
2f440 66 69 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20  fier instead of 
2f450 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
2f460 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  ..</p></li>..<li
2f470 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72  ><p>^If a keywor
2f480 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74  d in double.quot
2f490 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22  es (ex: <b>"key"
2f4a0 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62  </b> or <b>"glob
2f4b0 22 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69  "</b>) is used i
2f4c0 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72  n a context wher
2f4d0 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 72  e.it cannot be r
2f4e0 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20 69 64  esolved to an id
2f4f0 65 6e 74 69 66 69 65 72 20 62 75 74 20 77 68 65  entifier but whe
2f500 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  re a string lite
2f510 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20  ral.is allowed, 
2f520 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69  then the token i
2f530 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20  s understood to 
2f540 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  be a string lite
2f550 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66 20 61  ral instead.of a
2f560 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 70  n identifier.</p
2f570 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  ></li>.</ul>..<p
2f580 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65  >Programmers are
2f590 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74   cautioned not t
2f5a0 6f 20 75 73 65 20 74 68 65 20 74 77 6f 20 65 78  o use the two ex
2f5b0 63 65 70 74 69 6f 6e 73 20 64 65 73 63 72 69 62  ceptions describ
2f5c0 65 64 20 69 6e 0a 74 68 65 20 70 72 65 76 69 6f  ed in.the previo
2f5d0 75 73 20 62 75 6c 6c 65 74 73 2e 20 20 57 65 20  us bullets.  We 
2f5e0 65 6d 70 68 61 73 69 7a 65 20 74 68 61 74 20 74  emphasize that t
2f5f0 68 65 79 20 65 78 69 73 74 20 6f 6e 6c 79 20 73  hey exist only s
2f600 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69  o that old.and i
2f610 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20 73 74  ll-formed SQL st
2f620 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75  atements will ru
2f630 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 46 75  n correctly.  Fu
2f640 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
2f650 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20 72 61  .SQLite might ra
2f660 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73 74 65  ise errors inste
2f670 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e 67 20  ad of accepting 
2f680 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73 74  the malformed.st
2f690 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72 65 64  atements covered
2f6a0 20 62 79 20 74 68 65 20 65 78 63 65 70 74 69 6f   by the exceptio
2f6b0 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c  ns above.</p>..<
2f6c0 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20 6e  p>.SQLite adds n
2f6d0 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d  ew keywords from
2f6e0 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77 68   time to time wh
2f6f0 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e  en it takes on n
2f700 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f 20  ew features..So 
2f710 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72 20  to prevent your 
2f720 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67 20  code from being 
2f730 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72 65  broken by future
2f740 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79   enhancements, y
2f750 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c  ou should.normal
2f760 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69 64 65  ly quote any ide
2f770 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20  ntifier that is 
2f780 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  an English langu
2f790 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20 69  age word, even i
2f7a0 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76  f.you do not hav
2f7b0 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  e to..</p>..<p>.
2f7c0 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77 20 73  The list below s
2f7d0 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69 62 6c  hows all possibl
2f7e0 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65 64 20  e keywords used 
2f7f0 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f 66 0a  by any build of.
2f800 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c 65 73  SQLite regardles
2f810 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74 69  s of [compile-ti
2f820 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d  me options].  .M
2f830 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65 20 63  ost reasonable c
2f840 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 75 73  onfigurations us
2f850 65 20 6d 6f 73 74 20 6f 72 20 61 6c 6c 20 6f 66  e most or all of
2f860 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64 73 2c   these keywords,
2f870 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f 72  .but some keywor
2f880 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65  ds may be omitte
2f890 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67 75  d when SQL langu
2f8a0 61 67 65 20 66 65 61 74 75 72 65 73 20 61 72 65  age features are
2f8b0 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65 67  .disabled..^(Reg
2f8c0 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63  ardless of the c
2f8d0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66  ompile-time conf
2f8e0 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20 69  iguration, any i
2f8f0 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69  dentifier that i
2f900 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f 6c  s not on.the fol
2f910 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f 70  lowing <tcl>hd_p
2f920 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65  uts [llength $ke
2f930 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c  yword_list]</tcl
2f940 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20 69  > element.list i
2f950 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64 20  s not a keyword 
2f960 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72 73 65  to the SQL parse
2f970 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f 70  r in SQLite:.</p
2f980 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
2f990 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30  <table width="10
2f9a0 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  0%"><tr>.<td ali
2f9b0 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67 6e  gn="left" valign
2f9c0 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32 30  ="top" width="20
2f9d0 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e 20  %">.<tcl>.set n 
2f9e0 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
2f9f0 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f 6c  d_list].set nCol
2fa00 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78 70   5.set nRow [exp
2fa10 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f  r {($n+$nCol-1)/
2fa20 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30 0a  $nCol}].set i 0.
2fa30 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24 6b 65  foreach word $ke
2fa40 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20 69  yword_list {.  i
2fa50 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a  f {$i==$nRow} {.
2fa60 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f 74      hd_puts "</t
2fa70 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74  d><td valign=\"t
2fa80 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66  op\" align=\"lef
2fa90 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25 5c  t\" width=\"20%\
2faa0 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31 0a  ">".    set i 1.
2fab0 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69    } else {.    i
2fac0 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70  ncr i.  }.  hd_p
2fad0 75 74 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c 6e  uts "$word<br>\n
2fae0 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e  ".}.</tcl>.</td>
2faf0 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62  </tr></table></b
2fb00 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a           lockquote>)^.