Documentation Source Text

Hex Artifact Content
Login

Artifact 30dec24c0734db6b0f1cfad6ae7daae28dd32e29:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 7b 57 49 54 48 20 63 6c 61 75  .    {{WITH clau
03d0: 73 65 7d 20 77 69 74 68 63 6c 61 75 73 65 7d 0a  se} withclause}.
03e0: 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d      {comment com
03f0: 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c 41  ment}.    {EXPLA
0400: 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20 20  IN explain}.    
0410: 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  {expression expr
0420: 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54 52  }.    {{BEGIN TR
0430: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
0440: 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43 4f  action}.    {{CO
0450: 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e  MMIT TRANSACTION
0460: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f  } transaction CO
0470: 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44 20  MMIT}.    {{END 
0480: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0490: 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54 7d  nsaction COMMIT}
04a0: 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20  .    {{ROLLBACK 
04b0: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
04c0: 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41 43  nsaction ROLLBAC
04d0: 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49 4e  K}.    {SAVEPOIN
04e0: 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20 20  T savepoint}.   
04f0: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
0500: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
0510: 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20 7b  SAVEPOINT}.    {
0520: 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68 74  PRAGMA pragma.ht
0530: 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f 4e  ml}.    {{ON CON
0540: 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
0550: 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43 52  nflict}.    {{CR
0560: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0570: 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52 4f  eview}.    {{DRO
0580: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
0590: 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20 54  }.    {{CREATE T
05a0: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
05b0: 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52 4f  igger}.    {{DRO
05c0: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
05d0: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41 54  rigger}.    {{AT
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
05f0: 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45 54  ttach}.    {{DET
0600: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
0610: 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45 49  tach}.      {REI
0620: 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20  NDEX reindex}.  
0630: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
0640: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20   altertable}.   
0650: 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c   {{ANALYZE} anal
0660: 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58  yze}.    {{INDEX
0670: 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
0680: 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74  }.    {{aggregat
0690: 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e functions} agg
06a0: 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20  func aggfunc}.  
06b0: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
06c0: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72  ns} corefunc cor
06d0: 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74  efunc}.    {{dat
06e0: 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
06f0: 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64  ions} datefunc d
0700: 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65  atefunc}.    {ke
0710: 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20  ywords keywords 
0720: 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
0730: 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73    }.  set lang_s
0740: 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78  ection_break [ex
0750: 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c  pr {([llength $l
0760: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
0770: 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61  ]+2)/3}].  forea
0780: 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73  ch {section} [ls
0790: 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69  ort -index 0 -di
07a0: 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73  ctionary $lang_s
07b0: 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20  ection_list] {. 
07c0: 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c   foreach {s_titl
07d0: 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73  e s_tag s_kw} $s
07e0: 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b  ection {}.  if {
07f0: 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20  $s_kw == ""} {. 
0800: 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74     set s_kw $s_t
0810: 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24  itle.  }.  if {$
0820: 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68  s_tag=="pragma.h
0830: 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  tml"} {.    set 
0840: 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65  url $s_tag.  } e
0850: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72  lse {.    set ur
0860: 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74  l lang_$s_tag.ht
0870: 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f  ml.  }.  hd_reso
0880: 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77  lve "<li>\[$s_kw
0890: 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e  |$s_title\]</li>
08a0: 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20  ".  incr i.  if 
08b0: 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69  {$i==$lang_secti
08c0: 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d  on_break || $i==
08d0: 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f  2*$lang_section_
08e0: 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f  break} {.    hd_
08f0: 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e  puts "</ul></td>
0900: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
0910: 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c  \"><ul>".  }.}.<
0920: 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e  /tcl>.</ul></td>
0930: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  </tr></table>..<
0940: 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20  p>^The routines 
0950: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0960: 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33  _v2()], [sqlite3
0970: 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71  _prepare()],.[sq
0980: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
0990: 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  )], [sqlite3_pre
09a0: 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b  pare16_v2()], .[
09b0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c  sqlite3_exec()],
09c0: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65   and [sqlite3_ge
09d0: 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70  t_table()] accep
09e0: 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  t.an SQL stateme
09f0: 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d  nt list (sql-stm
0a00: 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73  t-list) which is
0a10: 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70   a semicolon-sep
0a20: 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73  arated.list of s
0a30: 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  tatements.</p>..
0a40: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
0a50: 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74  am sql-stmt-list
0a60: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20  </tcl>..<p>Each 
0a70: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  SQL statement in
0a80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c   the statement l
0a90: 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ist is an instan
0aa0: 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77  ce of the.follow
0ab0: 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ing:</p>..<tcl>B
0ac0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
0ad0: 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63  -stmt</tcl>..<tc
0ae0: 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72  l>.proc Operator
0af0: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75   {name} {.  retu
0b00: 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  rn "<font color=
0b10: 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67  \"#2c2cf0\"><big
0b20: 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f  >$name</big></fo
0b30: 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74  nt>".}.proc Nont
0b40: 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b  erminal {name} {
0b50: 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66  .  return "<i><f
0b60: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33  ont color=\"#ff3
0b70: 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e  434\">$name</fon
0b80: 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b  t></i>".}.proc K
0b90: 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a  eyword {name} {.
0ba0: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0bb0: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0bc0: 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a  ">$name</font>".
0bd0: 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b  }.proc Example {
0be0: 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74  text} {.  hd_put
0bf0: 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  s "<blockquote><
0c00: 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c  pre>$text</pre><
0c10: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a  /blockquote>".}.
0c20: 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e  .proc Section {n
0c30: 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72  ame label keywor
0c40: 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44  ds} {.  global D
0c50: 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61  OC.  hd_close_ma
0c60: 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69  in.  hd_open_mai
0c70: 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74  n lang_$label.ht
0c80: 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22  ml.  hd_header "
0c90: 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e  SQLite Query Lan
0ca0: 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44  guage: $name" $D
0cb0: 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e  OC/pages/lang.in
0cc0: 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f  .  eval hd_keywo
0cd0: 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20  rds $keywords.  
0ce0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65  if {[lsearch $ke
0cf0: 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d  ywords $name] ==
0d00: 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20   -1 && [lsearch 
0d10: 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65  $keywords *$name
0d20: 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65  ] == -1} {.    e
0d30: 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
0d40: 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20  { $name }.  }.  
0d50: 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69  hd_puts {<h1 ali
0d60: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20  gn="center">SQL 
0d70: 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79  As Understood By
0d80: 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20   SQLite</h1>}.  
0d90: 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68  hd_puts {<p><a h
0da0: 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e  ref="lang.html">
0db0: 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20  [Top]</a></p>}. 
0dc0: 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e   hd_puts "<h2>$n
0dd0: 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23  ame</h2>".}..###
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e20: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0e30: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0e40: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0e50: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41  ALTER TABLE} {*A
0e60: 4c 54 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  LTER}}..Recursiv
0e70: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
0e80: 6c 74 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  lter-table-stmt.
0e90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69 74  </tcl>..<p>SQLit
0ea0: 65 20 73 75 70 70 6f 72 74 73 20 61 20 6c 69 6d  e supports a lim
0eb0: 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20 41  ited subset of A
0ec0: 4c 54 45 52 20 54 41 42 4c 45 2e 0a 54 68 65 20  LTER TABLE..The 
0ed0: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
0ee0: 61 6e 64 20 69 6e 20 53 51 4c 69 74 65 20 61 6c  and in SQLite al
0ef0: 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f  lows the user to
0f00: 20 72 65 6e 61 6d 65 20 61 20 74 61 62 6c 65 0a   rename a table.
0f10: 6f 72 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  or to add a new 
0f20: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
0f30: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 3c 2f 70  sting table..</p
0f40: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f50: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 69 73  AME TO syntax is
0f60: 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d 65 20   used to rename 
0f70: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
0f80: 66 69 65 64 20 62 79 20 0a 3c 69 3e 26 23 39 31  fied by .<i>&#91
0f90: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26  ;database-name.&
0fa0: 23 39 33 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  #93;table-name</
0fb0: 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62  i> to <i>new-tab
0fc0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54  le-name</i>.)^.T
0fd0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e  his command .can
0fe0: 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d  not be used to m
0ff0: 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77  ove a table betw
1000: 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  een attached dat
1010: 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20  abases, only to 
1020: 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20  rename .a table 
1030: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
1040: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
1050: 70 3e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  p> ^If the table
1060: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68   being renamed h
1070: 61 73 20 74 72 69 67 67 65 72 73 20 6f 72 20 69  as triggers or i
1080: 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65  ndices, then the
1090: 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68  se remain.attach
10a0: 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ed to the table 
10b0: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
10c0: 6e 20 72 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77  n renamed.  ^How
10d0: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
10e0: 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66 69  re.any view defi
10f0: 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74  nitions, or stat
1100: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
1110: 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61 74  by triggers that
1120: 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74 61   refer to.the ta
1130: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1140: 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74  d, these are not
1150: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d   automatically m
1160: 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20 74  odified to use t
1170: 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d  he new.table nam
1180: 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72 65  e. If this is re
1190: 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69 67  quired, the trig
11a0: 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65 66  gers or view def
11b0: 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62 65  initions must be
11c0: 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63  .dropped and rec
11d0: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
11e0: 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d 65  e new table name
11f0: 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a   by hand..</p>..
1200: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62  <blockquote><tab
1210: 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65  le border="1" ce
1220: 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a  llpadding="10">.
1230: 3c 74 72 3e 3c 74 64 3e 0a 3c 65 6d 3e 49 6d 70  <tr><td>.<em>Imp
1240: 6f 72 74 61 6e 74 20 4e 6f 74 65 3a 3c 2f 65 6d  ortant Note:</em
1250: 3e 0a 54 68 65 20 27 41 4c 54 45 52 20 54 41 42  >.The 'ALTER TAB
1260: 4c 45 20 2e 2e 2e 20 52 45 4e 41 4d 45 20 54 4f  LE ... RENAME TO
1270: 20 2e 2e 2e 27 20 63 6f 6d 6d 61 6e 64 20 64 6f   ...' command do
1280: 65 73 20 6e 6f 74 20 75 70 64 61 74 65 20 61 63  es not update ac
1290: 74 69 6f 6e 0a 73 74 61 74 65 6d 65 6e 74 73 20  tion.statements 
12a0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
12b0: 6f 72 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  or SELECT statem
12c0: 65 6e 74 73 20 77 69 74 68 69 6e 20 76 69 65 77  ents within view
12d0: 73 2e 0a 49 66 20 74 68 65 20 74 61 62 6c 65 20  s..If the table 
12e0: 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 69 73  being renamed is
12f0: 20 72 65 66 65 72 65 6e 63 65 64 20 66 72 6f 6d   referenced from
1300: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1310: 20 6f 72 20 76 69 65 77 73 2c 0a 74 68 65 6e 20   or views,.then 
1320: 74 68 6f 73 65 20 74 72 69 67 67 65 72 73 20 61  those triggers a
1330: 6e 64 20 76 69 65 77 73 20 6d 75 73 74 20 62 65  nd views must be
1340: 20 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63   dropped and rec
1350: 72 65 61 74 65 64 20 73 65 70 61 72 61 74 65 6c  reated separatel
1360: 79 0a 62 79 20 74 68 65 20 61 70 70 6c 69 63 61  y.by the applica
1370: 74 69 6f 6e 2e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e  tion..</td></tr>
1380: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1390: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 49 66 20 5b  quote>..<p>^If [
13a0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
13b0: 74 72 61 69 6e 74 73 5d 20 61 72 65 20 0a 5b 66  traints] are .[f
13c0: 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61 67  oreign_keys prag
13d0: 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20 77 68  ma | enabled] wh
13e0: 65 6e 20 61 20 74 61 62 6c 65 20 69 73 20 72 65  en a table is re
13f0: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 61 6e 79 0a  named, then any.
1400: 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61  [foreign-key-cla
1410: 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45 53  use | REFERENCES
1420: 20 63 6c 61 75 73 65 73 5d 20 69 6e 20 61 6e 79   clauses] in any
1430: 20 74 61 62 6c 65 20 28 65 69 74 68 65 72 20 74   table (either t
1440: 68 65 0a 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he.table being r
1450: 65 6e 61 6d 65 64 20 6f 72 20 73 6f 6d 65 20 6f  enamed or some o
1460: 74 68 65 72 20 74 61 62 6c 65 29 0a 74 68 61 74  ther table).that
1470: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 74 61   refer to the ta
1480: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1490: 64 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 74  d are modified t
14a0: 6f 20 72 65 66 65 72 20 0a 74 6f 20 74 68 65 20  o refer .to the 
14b0: 72 65 6e 61 6d 65 64 20 74 61 62 6c 65 20 62 79  renamed table by
14c0: 20 69 74 73 20 6e 65 77 20 6e 61 6d 65 2e 0a 0a   its new name...
14d0: 3c 70 3e 20 5e 54 68 65 20 41 44 44 20 43 4f 4c  <p> ^The ADD COL
14e0: 55 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75 73  UMN syntax.is us
14f0: 65 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  ed to add a new 
1500: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
1510: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 54 68  sting table..^Th
1520: 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20  e new column is 
1530: 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64 20  always appended 
1540: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
1550: 65 20 6c 69 73 74 20 6f 66 20 65 78 69 73 74 69  e list of existi
1560: 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20  ng columns..The 
1570: 5b 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c  [column-def] rul
1580: 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 68  e defines the ch
1590: 61 72 61 63 74 65 72 69 73 74 69 63 73 20 6f 66  aracteristics of
15a0: 20 74 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e   the new column.
15b0: 0a 5e 28 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  .^(The new colum
15c0: 6e 20 6d 61 79 20 74 61 6b 65 20 61 6e 79 20 6f  n may take any o
15d0: 66 20 74 68 65 20 66 6f 72 6d 73 20 70 65 72 6d  f the forms perm
15e0: 69 73 73 69 62 6c 65 20 69 6e 20 61 20 5b 43 52  issible in a [CR
15f0: 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
1600: 65 6d 65 6e 74 2c 20 77 69 74 68 20 74 68 65 20  ement, with the 
1610: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69  following restri
1620: 63 74 69 6f 6e 73 3a 29 5e 0a 3c 75 6c 3e 0a 3c  ctions:)^.<ul>.<
1630: 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d  li>^The column m
1640: 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 50 52  ay not have a PR
1650: 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 55 4e 49  IMARY KEY or UNI
1660: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 3c  QUE constraint.<
1670: 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f  /li>.<li>^The co
1680: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76  lumn may not hav
1690: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
16a0: 65 20 6f 66 20 43 55 52 52 45 4e 54 5f 54 49 4d  e of CURRENT_TIM
16b0: 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c  E, CURRENT_DATE,
16c0: 20 0a 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49   .    CURRENT_TI
16d0: 4d 45 53 54 41 4d 50 2c 20 6f 72 20 61 6e 20 65  MESTAMP, or an e
16e0: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70 61 72  xpression in par
16f0: 65 6e 74 68 65 73 65 73 2e 3c 2f 6c 69 3e 0a 3c  entheses.</li>.<
1700: 6c 69 3e 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c  li>^If a NOT NUL
1710: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  L constraint is 
1720: 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
1730: 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20  the column must 
1740: 68 61 76 65 20 61 0a 20 20 20 20 64 65 66 61 75  have a.    defau
1750: 6c 74 20 76 61 6c 75 65 20 6f 74 68 65 72 20 74  lt value other t
1760: 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c 69 3e 5e 49  han NULL..<li>^I
1770: 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  f [foreign key c
1780: 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20  onstraints] are 
1790: 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72  [foreign_keys pr
17a0: 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20  agma | enabled] 
17b0: 61 6e 64 0a 20 20 20 20 61 20 63 6f 6c 75 6d 6e  and.    a column
17c0: 20 77 69 74 68 20 61 20 5b 66 6f 72 65 69 67 6e   with a [foreign
17d0: 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45  -key-clause | RE
17e0: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 5d  FERENCES clause]
17f0: 0a 20 20 20 20 69 73 20 61 64 64 65 64 2c 20 74  .    is added, t
1800: 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68  he column must h
1810: 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 76 61  ave a default va
1820: 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 3c 2f 75  lue of NULL..</u
1830: 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 61 6c 73  l>..<p>^Note als
1840: 6f 20 74 68 61 74 20 77 68 65 6e 20 61 64 64 69  o that when addi
1850: 6e 67 20 61 20 5b 43 48 45 43 4b 20 63 6f 6e 73  ng a [CHECK cons
1860: 74 72 61 69 6e 74 5d 2c 20 74 68 65 20 43 48 45  traint], the CHE
1870: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a 69 73  CK constraint.is
1880: 20 6e 6f 74 20 74 65 73 74 65 64 20 61 67 61 69   not tested agai
1890: 6e 73 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  nst preexisting 
18a0: 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c  rows of the tabl
18b0: 65 2e 0a 5e 54 68 69 73 20 63 61 6e 20 72 65 73  e..^This can res
18c0: 75 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20 74  ult in a table t
18d0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61 74  hat contains dat
18e0: 61 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69 6f  a that.is in vio
18f0: 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43 48  lation of the CH
1900: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ECK constraint. 
1910: 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   Future versions
1920: 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74   of SQLite might
1930: 0a 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69 64  .change to valid
1940: 61 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  ate CHECK constr
1950: 61 69 6e 74 73 20 61 73 20 74 68 65 79 20 61 72  aints as they ar
1960: 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  e added.</p>..<p
1970: 3e 20 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20  > The execution 
1980: 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54 45  time of the ALTE
1990: 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  R TABLE command 
19a0: 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f  is independent o
19b0: 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  f.the amount of 
19c0: 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62 6c  data in the tabl
19d0: 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54 41  e.  The ALTER TA
19e0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  BLE command runs
19f0: 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20 61   as quickly.on a
1a00: 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20 6d   table with 10 m
1a10: 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20 69  illion rows as i
1a20: 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62 6c  t does on a tabl
1a30: 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c 2f  e with 1 row..</
1a40: 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44 44  p>..<p>After ADD
1a50: 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65 6e   COLUMN has been
1a60: 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62 61   run on a databa
1a70: 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61 73  se, that databas
1a80: 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72 65  e will not.be re
1a90: 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74 65  adable by SQLite
1aa0: 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 61   version 3.1.3 a
1ab0: 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a  nd earlier.</p>.
1ac0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
1ad0: 74 20 6f 74 68 65 72 61 6c 74 65 72 3c 2f 74 63  t otheralter</tc
1ae0: 6c 3e 0a 3c 68 33 3e 4d 61 6b 69 6e 67 20 4f 74  l>.<h3>Making Ot
1af0: 68 65 72 20 4b 69 6e 64 73 20 4f 66 20 54 61 62  her Kinds Of Tab
1b00: 6c 65 20 53 63 68 65 6d 61 20 43 68 61 6e 67 65  le Schema Change
1b10: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 54 68 65 20  s</h3>..<p> The 
1b20: 6f 6e 6c 79 20 73 63 68 65 6d 61 20 61 6c 74 65  only schema alte
1b30: 72 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 20 64 69  ring commands di
1b40: 72 65 63 74 6c 79 20 73 75 70 70 6f 72 74 65 64  rectly supported
1b50: 20 62 79 20 53 51 4c 69 74 65 20 61 72 65 20 74   by SQLite are t
1b60: 68 65 0a 22 72 65 6e 61 6d 65 20 74 61 62 6c 65  he."rename table
1b70: 22 20 61 6e 64 20 22 61 64 64 20 63 6f 6c 75 6d  " and "add colum
1b80: 6e 22 20 63 6f 6d 6d 61 6e 64 73 20 73 68 6f 77  n" commands show
1b90: 6e 20 61 62 6f 76 65 2e 20 20 48 6f 77 65 76 65  n above.  Howeve
1ba0: 72 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  r, applications.
1bb0: 63 61 6e 20 6d 61 6b 65 20 6f 74 68 65 72 20 61  can make other a
1bc0: 72 62 69 74 72 61 72 79 20 63 68 61 6e 67 65 73  rbitrary changes
1bd0: 20 74 6f 20 74 68 65 20 66 6f 72 6d 61 74 20 6f   to the format o
1be0: 66 20 61 20 74 61 62 6c 65 20 75 73 69 6e 67 20  f a table using 
1bf0: 61 20 73 69 6d 70 6c 65 0a 73 65 71 75 65 6e 63  a simple.sequenc
1c00: 65 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e  e of operations.
1c10: 0a 54 68 65 20 73 74 65 70 73 20 74 6f 20 6d 61  .The steps to ma
1c20: 6b 65 20 61 72 62 69 74 72 61 72 79 20 63 68 61  ke arbitrary cha
1c30: 6e 67 65 73 20 74 6f 20 74 68 65 20 73 63 68 65  nges to the sche
1c40: 6d 61 20 64 65 73 69 67 6e 20 6f 66 20 73 6f 6d  ma design of som
1c50: 65 20 74 61 62 6c 65 20 58 0a 61 72 65 20 61 73  e table X.are as
1c60: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
1c70: 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69  <li><p>.If forei
1c80: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
1c90: 74 73 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 0a  ts are enabled,.
1ca0: 64 69 73 61 62 6c 65 20 74 68 65 6d 20 75 73 69  disable them usi
1cb0: 6e 67 20 5b 50 52 41 47 4d 41 20 66 6f 72 65 69  ng [PRAGMA forei
1cc0: 67 6e 5f 6b 65 79 73 20 7c 20 50 52 41 47 4d 41  gn_keys | PRAGMA
1cd0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 46   foreign_keys=OF
1ce0: 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 53 74 61  F]...<li><p>.Sta
1cf0: 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
1d00: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 52 65 6d 65 6d  ...<li><p>.Remem
1d10: 62 65 72 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  ber the format o
1d20: 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 20 61 6e  f all indexes an
1d30: 64 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  d triggers assoc
1d40: 69 61 74 65 64 20 77 69 74 68 20 74 61 62 6c 65  iated with table
1d50: 20 58 2e 0a 54 68 69 73 20 69 6e 66 6f 72 6d 61   X..This informa
1d60: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 6e 65 65  tion will be nee
1d70: 64 65 64 20 69 6e 20 73 74 65 70 20 38 20 62 65  ded in step 8 be
1d80: 6c 6f 77 2e 20 20 4f 6e 65 20 77 61 79 20 74 6f  low.  One way to
1d90: 20 64 6f 20 74 68 69 73 20 69 73 0a 74 6f 20 72   do this is.to r
1da0: 75 6e 20 61 20 71 75 65 72 79 20 6c 69 6b 65 20  un a query like 
1db0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 53  the following:.S
1dc0: 45 4c 45 43 54 20 74 79 70 65 2c 20 73 71 6c 20  ELECT type, sql 
1dd0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
1de0: 65 72 20 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d  er WHERE tbl_nam
1df0: 65 3d 27 58 27 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  e='X'...<li><p>.
1e00: 55 73 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c  Use [CREATE TABL
1e10: 45 5d 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  E] to construct 
1e20: 61 20 6e 65 77 20 74 61 62 6c 65 20 22 6e 65 77  a new table "new
1e30: 5f 58 22 20 74 68 61 74 20 69 73 20 69 6e 20 74  _X" that is in t
1e40: 68 65 20 64 65 73 69 72 65 64 0a 72 65 76 69 73  he desired.revis
1e50: 65 64 20 66 6f 72 6d 61 74 20 6f 66 20 74 61 62  ed format of tab
1e60: 6c 65 20 58 2e 20 20 4d 61 6b 65 20 73 75 72 65  le X.  Make sure
1e70: 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20 22   that the name "
1e80: 6e 65 77 5f 58 22 20 64 6f 65 73 20 6e 6f 74 20  new_X" does not 
1e90: 63 6f 6c 6c 69 64 65 0a 77 69 74 68 20 61 6e 79  collide.with any
1ea0: 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 20   existing table 
1eb0: 6e 61 6d 65 2c 20 6f 66 20 63 6f 75 72 73 65 2e  name, of course.
1ec0: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 54 72 61 6e 73 66  ..<li><p>.Transf
1ed0: 65 72 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20  er content from 
1ee0: 58 20 69 6e 74 6f 20 6e 65 77 5f 58 20 75 73 69  X into new_X usi
1ef0: 6e 67 20 61 20 73 74 61 74 65 6d 65 6e 74 0a 6c  ng a statement.l
1f00: 69 6b 65 3a 20 49 4e 53 45 52 54 20 49 4e 54 4f  ike: INSERT INTO
1f10: 20 6e 65 77 5f 58 20 53 45 4c 45 43 54 20 2e 2e   new_X SELECT ..
1f20: 2e 20 46 52 4f 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c  . FROM X...<li><
1f30: 70 3e 0a 44 72 6f 70 20 74 68 65 20 6f 6c 64 20  p>.Drop the old 
1f40: 74 61 62 6c 65 20 58 3a 20 20 5b 44 52 4f 50 20  table X:  [DROP 
1f50: 54 41 42 4c 45 20 7c 20 44 52 4f 50 20 54 41 42  TABLE | DROP TAB
1f60: 4c 45 20 58 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  LE X]...<li><p>.
1f70: 43 68 61 6e 67 65 20 74 68 65 20 6e 61 6d 65 20  Change the name 
1f80: 6f 66 20 6e 65 77 5f 58 20 74 6f 20 58 20 75 73  of new_X to X us
1f90: 69 6e 67 3a 20 41 4c 54 45 52 20 54 41 42 4c 45  ing: ALTER TABLE
1fa0: 20 6e 65 77 5f 58 20 52 45 4e 41 4d 45 20 54 4f   new_X RENAME TO
1fb0: 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65   X...<li><p>.Use
1fc0: 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
1fd0: 61 6e 64 20 5b 43 52 45 41 54 45 20 54 52 49 47  and [CREATE TRIG
1fe0: 47 45 52 5d 20 74 6f 20 72 65 63 6f 6e 73 74 72  GER] to reconstr
1ff0: 75 63 74 20 69 6e 64 65 78 65 73 20 61 6e 64 20  uct indexes and 
2000: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
2010: 74 65 64 20 77 69 74 68 20 74 61 62 6c 65 20 58  ted with table X
2020: 2e 20 20 50 65 72 68 61 70 73 20 75 73 65 20 74  .  Perhaps use t
2030: 68 65 20 6f 6c 64 20 66 6f 72 6d 61 74 20 6f 66  he old format of
2040: 20 74 68 65 20 74 72 69 67 67 65 72 73 20 61 6e   the triggers an
2050: 64 0a 69 6e 64 65 78 65 73 20 73 61 76 65 64 20  d.indexes saved 
2060: 66 72 6f 6d 20 73 74 65 70 20 33 20 61 62 6f 76  from step 3 abov
2070: 65 20 61 73 20 61 20 67 75 69 64 65 2c 20 6d 61  e as a guide, ma
2080: 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 61 73 20  king changes as 
2090: 61 70 70 72 6f 70 72 69 61 74 65 0a 66 6f 72 20  appropriate.for 
20a0: 74 68 65 20 61 6c 74 65 72 61 74 69 6f 6e 2e 0a  the alteration..
20b0: 0a 3c 6c 69 3e 3c 70 3e 49 66 20 61 6e 79 20 76  .<li><p>If any v
20c0: 69 65 77 73 20 72 65 66 65 72 20 74 6f 20 74 61  iews refer to ta
20d0: 62 6c 65 20 58 20 69 6e 20 61 20 77 61 79 20 74  ble X in a way t
20e0: 68 61 74 20 69 73 20 61 66 66 65 63 74 65 64 20  hat is affected 
20f0: 62 79 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68  by the.schema ch
2100: 61 6e 67 65 2c 20 74 68 65 6e 20 64 72 6f 70 20  ange, then drop 
2110: 74 68 6f 73 65 20 76 69 65 77 73 20 75 73 69 6e  those views usin
2120: 67 20 5b 44 52 4f 50 20 56 49 45 57 5d 20 61 6e  g [DROP VIEW] an
2130: 64 20 72 65 63 72 65 61 74 65 20 74 68 65 6d 0a  d recreate them.
2140: 77 69 74 68 20 77 68 61 74 65 76 65 72 20 63 68  with whatever ch
2150: 61 6e 67 65 73 20 61 72 65 20 6e 65 63 65 73 73  anges are necess
2160: 61 72 79 20 74 6f 20 61 63 63 6f 6d 6d 6f 64 61  ary to accommoda
2170: 74 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  te the schema ch
2180: 61 6e 67 65 0a 75 73 69 6e 67 20 5b 43 52 45 41  ange.using [CREA
2190: 54 45 20 56 49 45 57 5d 2e 0a 0a 3c 6c 69 3e 3c  TE VIEW]...<li><
21a0: 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b 65  p>.If foreign ke
21b0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65  y constraints we
21c0: 72 65 20 6f 72 69 67 69 6e 61 6c 6c 79 20 65 6e  re originally en
21d0: 61 62 6c 65 64 0a 74 68 65 6e 20 72 75 6e 20 5b  abled.then run [
21e0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
21f0: 65 79 5f 63 68 65 63 6b 5d 20 74 6f 20 76 65 72  ey_check] to ver
2200: 69 66 79 20 74 68 61 74 20 74 68 65 20 73 63 68  ify that the sch
2210: 65 6d 61 0a 63 68 61 6e 67 65 20 64 69 64 20 6e  ema.change did n
2220: 6f 74 20 62 72 65 61 6b 20 61 6e 79 20 66 6f 72  ot break any for
2230: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2240: 69 6e 74 73 2e 0a 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ints....<li><p>.
2250: 43 6f 6d 6d 69 74 20 74 68 65 20 74 72 61 6e 73  Commit the trans
2260: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 69  action started i
2270: 6e 20 73 74 65 70 20 32 2e 0a 0a 3c 6c 69 3e 3c  n step 2...<li><
2280: 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b 65  p>.If foreign ke
2290: 79 73 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  ys constraints w
22a0: 65 72 65 20 6f 72 69 67 69 6e 61 6c 6c 79 20 65  ere originally e
22b0: 6e 61 62 6c 65 64 2c 20 72 65 65 6e 61 62 6c 65  nabled, reenable
22c0: 20 74 68 65 6d 20 6e 6f 77 2e 0a 3c 2f 6f 6c 3e   them now..</ol>
22d0: 0a 0a 3c 70 3e 54 68 65 20 70 72 6f 63 65 64 75  ..<p>The procedu
22e0: 72 65 20 61 62 6f 76 65 20 69 73 20 63 6f 6d 70  re above is comp
22f0: 6c 65 74 65 6c 79 20 67 65 6e 65 72 61 6c 20 61  letely general a
2300: 6e 64 20 77 69 6c 6c 20 77 6f 72 6b 20 65 76 65  nd will work eve
2310: 6e 20 69 66 20 74 68 65 0a 73 63 68 65 6d 61 20  n if the.schema 
2320: 63 68 61 6e 67 65 20 63 61 75 73 65 73 20 74 68  change causes th
2330: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 74  e information st
2340: 6f 72 65 64 20 69 6e 20 74 68 65 20 74 61 62 6c  ored in the tabl
2350: 65 20 74 6f 20 63 68 61 6e 67 65 2e 0a 53 6f 20  e to change..So 
2360: 74 68 65 20 66 75 6c 6c 20 70 72 6f 63 65 64 75  the full procedu
2370: 72 65 20 61 62 6f 76 65 20 69 73 20 61 70 70 72  re above is appr
2380: 6f 70 72 69 61 74 65 20 66 6f 72 20 64 72 6f 70  opriate for drop
2390: 70 69 6e 67 20 61 20 63 6f 6c 75 6d 6e 2c 0a 63  ping a column,.c
23a0: 68 61 6e 67 69 6e 67 20 74 68 65 20 6f 72 64 65  hanging the orde
23b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 61 64  r of columns, ad
23c0: 64 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67  ding or removing
23d0: 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
23e0: 61 69 6e 74 0a 6f 72 20 50 52 49 4d 41 52 59 20  aint.or PRIMARY 
23f0: 4b 45 59 2c 20 61 64 64 69 6e 67 20 43 48 45 43  KEY, adding CHEC
2400: 4b 20 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45 59  K or FOREIGN KEY
2410: 20 6f 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e   or NOT NULL con
2420: 73 74 72 61 69 6e 74 73 2c 0a 6f 72 20 63 68 61  straints,.or cha
2430: 6e 67 69 6e 67 20 74 68 65 20 64 61 74 61 74 79  nging the dataty
2440: 70 65 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 2c  pe for a column,
2450: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2e 20 20 48   for example.  H
2460: 6f 77 65 76 65 72 2c 20 61 20 73 69 6d 70 6c 65  owever, a simple
2470: 72 0a 61 6e 64 20 66 61 73 74 65 72 20 70 72 6f  r.and faster pro
2480: 63 65 64 75 72 65 20 63 61 6e 20 6f 70 74 69 6f  cedure can optio
2490: 6e 61 6c 6c 79 20 62 65 20 75 73 65 64 20 66 6f  nally be used fo
24a0: 72 0a 73 6f 6d 65 20 63 68 61 6e 67 65 73 20 74  r.some changes t
24b0: 68 61 74 20 64 6f 20 6e 6f 20 61 66 66 65 63 74  hat do no affect
24c0: 20 74 68 65 20 6f 6e 2d 64 69 73 6b 20 63 6f 6e   the on-disk con
24d0: 74 65 6e 74 20 69 6e 20 61 6e 79 20 77 61 79 2e  tent in any way.
24e0: 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73  .The following s
24f0: 69 6d 70 6c 65 72 20 70 72 6f 63 65 64 75 72 65  impler procedure
2500: 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 20   is appropriate 
2510: 66 6f 72 20 72 65 6d 6f 76 69 6e 67 0a 43 48 45  for removing.CHE
2520: 43 4b 20 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45  CK or FOREIGN KE
2530: 59 20 6f 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  Y or NOT NULL co
2540: 6e 73 74 72 61 69 6e 74 73 2c 0a 72 65 6e 61 6d  nstraints,.renam
2550: 69 6e 67 20 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20  ing columns, or 
2560: 61 64 64 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69  adding or removi
2570: 6e 67 20 6f 72 20 63 68 61 6e 67 69 6e 67 20 64  ng or changing d
2580: 65 66 61 75 6c 74 20 76 61 6c 75 65 73 20 6f 6e  efault values on
2590: 0a 61 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6f 6c 3e  .a column...<ol>
25a0: 0a 3c 6c 49 3e 3c 70 3e 20 53 74 61 72 74 20 61  .<lI><p> Start a
25b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 0a 3c   transaction...<
25c0: 6c 69 3e 3c 70 3e 20 52 75 6e 20 5b 50 52 41 47  li><p> Run [PRAG
25d0: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
25e0: 6e 5d 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  n] to determine 
25f0: 74 68 65 20 63 75 72 72 65 6e 74 20 73 63 68 65  the current sche
2600: 6d 61 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma.version numbe
2610: 72 2e 20 20 54 68 69 73 20 6e 75 6d 62 65 72 20  r.  This number 
2620: 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20 66  will be needed f
2630: 6f 72 20 73 74 65 70 20 36 20 62 65 6c 6f 77 2e  or step 6 below.
2640: 0a 0a 3c 6c 69 3e 3c 70 3e 20 41 63 74 69 76 61  ..<li><p> Activa
2650: 74 65 20 73 63 68 65 6d 61 20 65 64 69 74 69 6e  te schema editin
2660: 67 20 75 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41  g using .[PRAGMA
2670: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
2680: 20 7c 20 50 52 41 47 4d 41 20 77 72 69 74 61 62   | PRAGMA writab
2690: 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 5d 2e 0a 0a  le_schema=ON]...
26a0: 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20 61 6e 20 5b  <li><p> Run an [
26b0: 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e  UPDATE] statemen
26c0: 74 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20  t to change the 
26d0: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 61  definition of ta
26e0: 62 6c 65 20 58 0a 69 6e 20 74 68 65 20 5b 73 71  ble X.in the [sq
26f0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
2700: 65 5d 3a 20 0a 55 50 44 41 54 45 20 73 71 6c 69  e]: .UPDATE sqli
2710: 74 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71  te_master SET sq
2720: 6c 3d 2e 2e 2e 20 57 48 45 52 45 20 74 79 70 65  l=... WHERE type
2730: 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d  ='table' AND nam
2740: 65 3d 27 58 27 3b 0a 3c 70 3e 3c 65 6d 3e 43 61  e='X';.<p><em>Ca
2750: 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4d 61 6b  ution:</em>  Mak
2760: 69 6e 67 20 61 20 63 68 61 6e 67 65 20 74 6f 20  ing a change to 
2770: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
2780: 72 20 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69  r table like thi
2790: 73 20 77 69 6c 6c 0a 72 65 6e 64 65 72 20 74 68  s will.render th
27a0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  e database corru
27b0: 70 74 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c  pt and unreadabl
27c0: 65 20 69 66 20 74 68 65 20 63 68 61 6e 67 65 20  e if the change 
27d0: 63 6f 6e 74 61 69 6e 73 0a 61 20 73 79 6e 74 61  contains.a synta
27e0: 78 20 65 72 72 6f 72 2e 20 20 49 74 20 69 73 20  x error.  It is 
27f0: 73 75 67 67 65 73 74 65 64 20 74 68 61 74 20 63  suggested that c
2800: 61 72 65 66 75 6c 20 74 65 73 74 69 6e 67 20 6f  areful testing o
2810: 66 20 74 68 65 20 55 50 44 41 54 45 0a 73 74 61  f the UPDATE.sta
2820: 74 65 6d 65 6e 74 20 62 65 20 64 6f 6e 65 20 6f  tement be done o
2830: 6e 20 61 20 73 65 70 61 72 61 74 65 20 62 6c 61  n a separate bla
2840: 6e 6b 20 64 61 74 61 62 61 73 65 20 70 72 69 6f  nk database prio
2850: 72 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e  r to using it on
2860: 0a 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  .a database cont
2870: 61 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74  aining important
2880: 20 64 61 74 61 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20   data...<li><p> 
2890: 49 66 20 74 68 65 20 63 68 61 6e 67 65 20 74 6f  If the change to
28a0: 20 74 61 62 6c 65 20 58 20 61 6c 73 6f 20 61 66   table X also af
28b0: 66 65 63 74 73 20 6f 74 68 65 72 20 74 61 62 6c  fects other tabl
28c0: 65 73 20 6f 72 20 69 6e 64 65 78 65 73 20 6f 72  es or indexes or
28d0: 0a 74 72 69 67 67 65 72 73 20 61 72 65 20 76 69  .triggers are vi
28e0: 65 77 73 20 77 69 74 68 69 6e 20 73 63 68 65 6d  ews within schem
28f0: 61 2c 20 74 68 65 6e 20 72 75 6e 20 5b 55 50 44  a, then run [UPD
2900: 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ATE] statements 
2910: 74 6f 20 6d 6f 64 69 66 79 0a 74 68 6f 73 65 20  to modify.those 
2920: 6f 74 68 65 72 20 74 61 62 6c 65 73 20 69 6e 64  other tables ind
2930: 65 78 65 73 20 61 6e 64 20 76 69 65 77 73 20 74  exes and views t
2940: 6f 6f 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  oo.  For example
2950: 2c 20 69 66 20 74 68 65 20 6e 61 6d 65 20 6f 66  , if the name of
2960: 0a 61 20 63 6f 6c 75 6d 6e 20 63 68 61 6e 67 65  .a column change
2970: 73 2c 20 61 6c 6c 20 46 4f 52 45 49 47 4e 20 4b  s, all FOREIGN K
2980: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  EY constraints, 
2990: 74 72 69 67 67 65 72 73 2c 20 69 6e 64 65 78 65  triggers, indexe
29a0: 73 2c 20 61 6e 64 0a 76 69 65 77 73 20 74 68 61  s, and.views tha
29b0: 74 20 72 65 66 65 72 20 74 6f 20 74 68 61 74 20  t refer to that 
29c0: 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 62 65 20 6d  column must be m
29d0: 6f 64 69 66 69 65 64 2e 0a 3c 70 3e 3c 65 6d 3e  odified..<p><em>
29e0: 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4f  Caution:</em>  O
29f0: 6e 63 65 20 61 67 61 69 6e 2c 20 6d 61 6b 69 6e  nce again, makin
2a00: 67 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  g changes to the
2a10: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a   sqlite_master .
2a20: 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73 20  table like this 
2a30: 77 69 6c 6c 20 72 65 6e 64 65 72 20 74 68 65 20  will render the 
2a40: 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
2a50: 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65 20   and unreadable 
2a60: 69 66 20 74 68 65 20 0a 63 68 61 6e 67 65 20 63  if the .change c
2a70: 6f 6e 74 61 69 6e 73 20 61 6e 20 65 72 72 6f 72  ontains an error
2a80: 2e 20 20 43 61 72 65 66 75 6c 6c 79 20 74 65 73  .  Carefully tes
2a90: 74 20 6f 66 20 74 68 69 73 20 65 6e 74 69 72 65  t of this entire
2aa0: 20 70 72 6f 63 65 64 75 72 65 0a 6f 6e 20 61 20   procedure.on a 
2ab0: 73 65 70 61 72 61 74 65 20 74 65 73 74 20 64 61  separate test da
2ac0: 74 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20  tabase prior to 
2ad0: 75 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61  using it on.a da
2ae0: 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e  tabase containin
2af0: 67 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61  g important data
2b00: 20 61 6e 64 2f 6f 72 20 6d 61 6b 65 20 62 61 63   and/or make bac
2b10: 6b 75 70 20 63 6f 70 69 65 73 20 6f 66 0a 69 6d  kup copies of.im
2b20: 70 6f 72 74 61 6e 74 20 64 61 74 61 62 61 73 65  portant database
2b30: 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69  s prior to runni
2b40: 6e 67 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  ng this procedur
2b50: 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 6e 63 72  e...<li><p> Incr
2b60: 65 6d 65 6e 74 20 74 68 65 20 73 63 68 65 6d 61  ement the schema
2b70: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
2b80: 75 73 69 6e 67 0a 5b 50 52 41 47 4d 41 20 73 63  using.[PRAGMA sc
2b90: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7c 20 50  hema_version | P
2ba0: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
2bb0: 73 69 6f 6e 3d 58 5d 20 77 68 65 72 65 20 58 20  sion=X] where X 
2bc0: 69 73 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e  is one.more than
2bd0: 20 74 68 65 20 6f 6c 64 20 73 63 68 65 6d 61 20   the old schema 
2be0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
2bf0: 6f 75 6e 64 20 69 6e 20 73 74 65 70 20 32 20 61  ound in step 2 a
2c00: 62 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 44  bove...<li><p> D
2c10: 69 73 61 62 6c 65 20 73 63 68 65 6d 61 20 65 64  isable schema ed
2c20: 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52  iting using .[PR
2c30: 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
2c40: 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72  hema | PRAGMA wr
2c50: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46  itable_schema=OF
2c60: 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 28 4f 70  F]...<li><p> (Op
2c70: 74 69 6f 6e 61 6c 29 20 52 75 6e 20 5b 50 52 41  tional) Run [PRA
2c80: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2c90: 65 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74  eck] to verify t
2ca0: 68 61 74 20 74 68 65 0a 73 63 68 65 6d 61 20 63  hat the.schema c
2cb0: 68 61 6e 67 65 73 20 64 69 64 20 6e 6f 74 20 64  hanges did not d
2cc0: 61 6d 61 67 65 20 74 68 65 20 64 61 74 61 62 61  amage the databa
2cd0: 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 43 6f 6d  se...<li><p> Com
2ce0: 6d 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  mit the transact
2cf0: 69 6f 6e 20 73 74 61 72 74 65 64 20 6f 6e 20 73  ion started on s
2d00: 74 65 70 20 31 20 61 62 6f 76 65 2e 0a 3c 2f 6f  tep 1 above..</o
2d10: 6c 3e 0a 0a 3c 70 3e 49 66 20 73 6f 6d 65 20 66  l>..<p>If some f
2d20: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 20 6f 66  uture version of
2d30: 20 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77   SQLite adds new
2d40: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61 70   ALTER TABLE cap
2d50: 61 62 69 6c 69 74 69 65 73 2c 20 0a 74 68 6f 73  abilities, .thos
2d60: 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 77  e capabilities w
2d70: 69 6c 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79 20  ill very likely 
2d80: 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 74  use one of the t
2d90: 77 6f 20 70 72 6f 63 65 64 75 72 65 73 0a 6f 75  wo procedures.ou
2da0: 74 6c 69 6e 65 64 20 61 62 6f 76 65 2e 0a 0a 3c  tlined above...<
2db0: 74 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f 66 20 74  tcl>.#  One of t
2dc0: 68 65 20 72 65 61 73 6f 6e 73 20 74 68 61 74 0a  he reasons that.
2dd0: 23 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  # SQLite does no
2de0: 74 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70  t currently supp
2df0: 6f 72 74 20 6d 6f 72 65 20 41 4c 54 45 52 20 54  ort more ALTER T
2e00: 41 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69 65  ABLE capabilitie
2e10: 73 20 69 73 20 74 68 61 74 0a 23 20 74 68 65 20  s is that.# the 
2e20: 70 72 6f 63 65 64 75 72 65 20 73 68 6f 77 6e 20  procedure shown 
2e30: 61 62 6f 76 65 20 69 73 20 64 69 66 66 69 63 75  above is difficu
2e40: 6c 74 20 74 6f 20 61 75 74 6f 6d 61 74 65 20 66  lt to automate f
2e50: 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  or an arbitrary 
2e60: 73 63 68 65 6d 61 2e 0a 23 20 50 61 72 74 69 63  schema..# Partic
2e70: 75 6c 61 72 6c 79 20 74 72 6f 75 62 6c 65 73 6f  ularly troubleso
2e80: 6d 65 20 61 72 65 61 73 20 61 72 65 20 69 64 65  me areas are ide
2e90: 6e 74 69 66 79 69 6e 67 20 61 6c 6c 20 76 69 65  ntifying all vie
2ea0: 77 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ws associated wi
2eb0: 74 68 0a 23 20 74 61 62 6c 65 20 58 20 69 6e 20  th.# table X in 
2ec0: 73 74 65 70 20 31 20 61 6e 64 20 63 72 65 61 74  step 1 and creat
2ed0: 69 6e 67 20 6e 65 77 20 76 69 65 77 73 20 61 6e  ing new views an
2ee0: 64 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20  d triggers that 
2ef0: 61 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 0a 23  are compatible.#
2f00: 20 77 69 74 68 20 74 68 65 20 61 6c 74 65 72 65   with the altere
2f10: 64 20 73 63 68 65 6d 61 20 66 6f 72 20 74 61 62  d schema for tab
2f20: 6c 65 20 58 20 69 6e 20 73 74 65 70 20 36 2e 20  le X in step 6. 
2f30: 20 49 74 20 69 73 20 61 20 74 72 69 63 6b 79 20   It is a tricky 
2f40: 62 75 74 20 73 6f 6c 76 61 62 6c 65 0a 23 20 70  but solvable.# p
2f50: 72 6f 62 6c 65 6d 20 74 6f 20 63 72 65 61 74 65  roblem to create
2f60: 20 63 6f 64 65 20 74 68 61 74 20 77 69 6c 6c 20   code that will 
2f70: 70 65 72 66 6f 72 6d 20 74 68 65 20 73 74 65 70  perform the step
2f80: 73 20 61 62 6f 76 65 20 0a 23 20 66 6f 72 20 22  s above .# for "
2f90: 72 65 61 73 6f 6e 61 62 6c 65 22 20 73 63 68 65  reasonable" sche
2fa0: 6d 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75  mas commonly fou
2fb0: 6e 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20  nd in practice. 
2fc0: 20 0a 23 20 42 75 74 20 74 68 65 72 65 20 65 78   .# But there ex
2fd0: 69 73 74 20 6d 61 6c 65 76 6f 6c 65 6e 74 20 73  ist malevolent s
2fe0: 63 68 65 6d 61 73 20 66 6f 72 20 77 68 69 63 68  chemas for which
2ff0: 0a 23 20 74 68 65 73 65 20 73 74 65 70 73 20 61  .# these steps a
3000: 72 65 20 6d 61 64 64 65 6e 69 6e 67 6c 79 20 64  re maddeningly d
3010: 69 66 66 69 63 75 6c 74 20 74 6f 20 64 6f 20 63  ifficult to do c
3020: 6f 72 72 65 63 74 6c 79 2e 20 20 52 61 74 68 65  orrectly.  Rathe
3030: 72 20 74 68 61 6e 20 63 72 65 61 74 65 0a 23 20  r than create.# 
3040: 41 4c 54 45 52 20 54 41 42 4c 45 20 66 65 61 74  ALTER TABLE feat
3050: 75 72 65 73 20 74 68 61 74 20 77 6f 72 6b 20 63  ures that work c
3060: 6f 72 72 65 63 74 6c 79 20 39 39 2e 39 25 20 6f  orrectly 99.9% o
3070: 66 20 74 68 65 20 74 69 6d 65 20 62 75 74 20 70  f the time but p
3080: 6f 73 73 69 62 6c 79 0a 23 20 63 6f 72 72 75 70  ossibly.# corrup
3090: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 6e 20  t the schema on 
30a0: 74 68 65 20 6f 74 68 65 72 20 30 2e 31 25 2c 20  the other 0.1%, 
30b0: 74 68 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c  the SQLite devel
30c0: 6f 70 65 72 73 20 68 61 76 65 20 64 65 63 69 64  opers have decid
30d0: 65 64 0a 23 20 74 6f 20 70 75 73 68 20 74 68 65  ed.# to push the
30e0: 20 70 72 6f 62 6c 65 6d 20 69 6e 74 6f 20 74 68   problem into th
30f0: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f  e application do
3100: 6d 61 69 6e 2c 20 77 68 65 72 65 20 69 74 20 69  main, where it i
3110: 73 20 6d 75 63 68 20 65 61 73 69 65 72 0a 23 20  s much easier.# 
3120: 74 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e  to solve..</tcl>
3130: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
3140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3180: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
3190: 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a  {ANALYZE} analyz
31a0: 65 20 41 4e 41 4c 59 5a 45 0a 0a 52 65 63 75 72  e ANALYZE..Recur
31b0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
31c0: 6d 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c  m analyze-stmt.<
31d0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  /tcl>..<p> ^The 
31e0: 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20  ANALYZE command 
31f0: 67 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69  gathers statisti
3200: 63 73 20 61 62 6f 75 74 20 74 61 62 6c 65 73 20  cs about tables 
3210: 61 6e 64 0a 69 6e 64 69 63 65 73 20 61 6e 64 20  and.indices and 
3220: 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 6c 65  stores the colle
3230: 63 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cted information
3240: 0a 69 6e 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61  .in [internal ta
3250: 62 6c 65 73 5d 20 6f 66 20 74 68 65 20 64 61 74  bles] of the dat
3260: 61 62 61 73 65 20 77 68 65 72 65 20 74 68 65 20  abase where the 
3270: 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
3280: 63 61 6e 0a 61 63 63 65 73 73 20 74 68 65 20 69  can.access the i
3290: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 75  nformation and u
32a0: 73 65 20 69 74 20 74 6f 20 68 65 6c 70 20 6d 61  se it to help ma
32b0: 6b 65 20 62 65 74 74 65 72 20 71 75 65 72 79 20  ke better query 
32c0: 70 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63 65 73  planning choices
32d0: 2e 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e  ..^If no argumen
32e0: 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61 6c  ts are given, al
32f0: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
3300: 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a 65  ases are.analyze
3310: 64 2e 20 20 5e 49 66 20 61 20 64 61 74 61 62 61  d.  ^If a databa
3320: 73 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e  se name is given
3330: 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
3340: 2c 20 74 68 65 6e 20 61 6c 6c 20 74 61 62 6c 65  , then all table
3350: 73 0a 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e  s.and indices in
3360: 20 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61   that one databa
3370: 73 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e  se are analyzed.
3380: 20 20 0a 5e 49 66 20 74 68 65 20 61 72 67 75 6d    .^If the argum
3390: 65 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e  ent is a table n
33a0: 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ame, then only t
33b0: 68 61 74 20 74 61 62 6c 65 20 61 6e 64 20 74 68  hat table and th
33c0: 65 0a 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69  e.indices associ
33d0: 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74  ated with that t
33e0: 61 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65  able are analyze
33f0: 64 2e 20 20 5e 49 66 20 74 68 65 20 61 72 67 75  d.  ^If the argu
3400: 6d 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64 65 78  ment.is an index
3410: 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79   name, then only
3420: 20 74 68 61 74 20 6f 6e 65 20 69 6e 64 65 78 20   that one index 
3430: 69 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e  is analyzed.</p>
3440: 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61 75  ..<p> ^The defau
3450: 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  lt implementatio
3460: 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61  n stores all sta
3470: 74 69 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e  tistics in a sin
3480: 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20  gle.table named 
3490: 22 5b 73 71 6c 69 74 65 5f 73 74 61 74 31 5d 22  "[sqlite_stat1]"
34a0: 2e 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73  .  ^If SQLite is
34b0: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
34c0: 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he.[SQLITE_ENABL
34d0: 45 5f 53 54 41 54 33 5d 20 6f 70 74 69 6f 6e 20  E_STAT3] option 
34e0: 61 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20  and without the 
34f0: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
3500: 54 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68  TAT4].option, th
3510: 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69  en additional hi
3520: 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a  stogram data is.
3530: 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74  collected and st
3540: 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f  ored in [sqlite_
3550: 73 74 61 74 33 5d 2e 0a 20 5e 49 66 20 53 51 4c  stat3].. ^If SQL
3560: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
3570: 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45  with the.[SQLITE
3580: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 6f  _ENABLE_STAT4] o
3590: 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69  ption, then addi
35a0: 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d  tional histogram
35b0: 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74   data is.collect
35c0: 65 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e  ed and stored in
35d0: 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 34 5d 2e   [sqlite_stat4].
35e0: 0a 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20  .Older versions 
35f0: 6f 66 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20  of SQLite would 
3600: 6d 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65 20  make use of the 
3610: 5b 73 71 6c 69 74 65 5f 73 74 61 74 32 5d 20 74  [sqlite_stat2] t
3620: 61 62 6c 65 0a 77 68 65 6e 20 63 6f 6d 70 69 6c  able.when compil
3630: 65 64 20 77 69 74 68 20 5b 53 51 4c 49 54 45 5f  ed with [SQLITE_
3640: 45 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 62 75  ENABLE_STAT2] bu
3650: 74 20 61 6c 6c 20 72 65 63 65 6e 74 20 76 65 72  t all recent ver
3660: 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
3670: 69 67 6e 6f 72 65 20 74 68 65 20 73 71 6c 69 74  ignore the sqlit
3680: 65 5f 73 74 61 74 32 20 74 61 62 6c 65 2e 0a 46  e_stat2 table..F
3690: 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e  uture enhancemen
36a0: 74 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64  ts may create.ad
36b0: 64 69 74 69 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e  ditional [intern
36c0: 61 6c 20 74 61 62 6c 65 73 5d 20 77 69 74 68 20  al tables] with 
36d0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61  the same name pa
36e0: 74 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74  ttern except wit
36f0: 68 0a 66 69 6e 61 6c 20 64 69 67 69 74 20 6c 61  h.final digit la
3700: 72 67 65 72 20 74 68 61 6e 20 22 34 22 2e 0a 41  rger than "4"..A
3710: 6c 6c 20 6f 66 20 74 68 65 73 65 20 74 61 62 6c  ll of these tabl
3720: 65 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76  es are collectiv
3730: 65 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20  ely referred to 
3740: 61 73 20 22 73 74 61 74 69 73 74 69 63 73 20 74  as "statistics t
3750: 61 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ables"..</p>..<p
3760: 3e 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  > ^The content o
3770: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
3780: 20 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71   tables can be q
3790: 75 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45  ueried using [SE
37a0: 4c 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65  LECT].and can be
37b0: 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 74   changed using t
37c0: 68 65 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e  he [DELETE], [IN
37d0: 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41  SERT], and [UPDA
37e0: 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28  TE] commands..^(
37f0: 54 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  The [DROP TABLE]
3800: 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f   command works o
3810: 6e 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62  n statistics tab
3820: 6c 65 73 0a 61 73 20 6f 66 20 53 51 4c 69 74 65  les.as of SQLite
3830: 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29   version 3.7.9.)
3840: 5e 0a 5e 54 68 65 20 5b 41 4c 54 45 52 20 54 41  ^.^The [ALTER TA
3850: 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  BLE] command doe
3860: 73 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 73 74  s not work on st
3870: 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 2e  atistics tables.
3880: 0a 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72  .Appropriate car
3890: 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  e should be used
38a0: 20 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74   when changing t
38b0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
38c0: 65 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62  e statistics.tab
38d0: 6c 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63  les as invalid c
38e0: 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65  ontent can cause
38f0: 20 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63   SQLite to selec
3900: 74 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75  t inefficient.qu
3910: 65 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65  ery plans.  Gene
3920: 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20  rally speaking, 
3930: 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d  one should not m
3940: 6f 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e  odify the conten
3950: 74 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74  t of.the statist
3960: 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e  ics tables by an
3970: 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65  y mechanism othe
3980: 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20  r than invoking 
3990: 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d  the.ANALYZE comm
39a0: 61 6e 64 2e 20 20 0a 53 65 65 20 22 5b 4d 61 6e  and.  .See "[Man
39b0: 75 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66 20 51  ual Control Of Q
39c0: 75 65 72 79 20 50 6c 61 6e 73 20 55 73 69 6e 67  uery Plans Using
39d0: 20 53 51 4c 49 54 45 5f 53 54 41 54 20 54 61 62   SQLITE_STAT Tab
39e0: 6c 65 73 5d 22 20 66 6f 72 0a 66 75 72 74 68 65  les]" for.furthe
39f0: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  r information.</
3a00: 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74  p>..<p> ^Statist
3a10: 69 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20  ics gathered by 
3a20: 41 4e 41 4c 59 5a 45 20 61 72 65 20 6e 6f 74 20  ANALYZE are not 
3a30: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70  automatically up
3a40: 64 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e  dated as.the con
3a50: 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61  tent of the data
3a60: 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49  base changes.  I
3a70: 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
3a80: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68   the database.ch
3a90: 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e  anges significan
3aa0: 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64  tly, or if the d
3ab0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
3ac0: 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65  hanges, then one
3ad0: 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72   should.consider
3ae0: 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41   rerunning the A
3af0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69  NALYZE command i
3b00: 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74  n order to updat
3b10: 65 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  e the statistics
3b20: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71  .</p>..<p> The q
3b30: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6c 6f 61  uery planner loa
3b40: 64 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ds the content o
3b50: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
3b60: 20 74 61 62 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d   tables.into mem
3b70: 6f 72 79 20 77 68 65 6e 20 74 68 65 20 73 63 68  ory when the sch
3b80: 65 6d 61 20 69 73 20 72 65 61 64 2e 20 20 5e 48  ema is read.  ^H
3b90: 65 6e 63 65 2c 20 77 68 65 6e 20 61 6e 20 61 70  ence, when an ap
3ba0: 70 6c 69 63 61 74 69 6f 6e 0a 63 68 61 6e 67 65  plication.change
3bb0: 73 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  s the statistics
3bc0: 20 74 61 62 6c 65 73 20 64 69 72 65 63 74 6c 79   tables directly
3bd0: 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f  , SQLite will no
3be0: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 6e 6f  t immediately.no
3bf0: 74 69 63 65 20 74 68 65 20 63 68 61 6e 67 65 73  tice the changes
3c00: 2e 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f  . ^An applicatio
3c10: 6e 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20  n.can force the 
3c20: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f  query planner to
3c30: 20 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74   reread the stat
3c40: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79  istics tables by
3c50: 20 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c   running.<b>ANAL
3c60: 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  YZE sqlite_maste
3c70: 72 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e  r</b>. </p>..<p>
3c80: 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23   ..<tcl>.#######
3c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cd0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
3ce0: 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45  {ATTACH DATABASE
3cf0: 7d 20 61 74 74 61 63 68 20 7b 61 74 74 61 63 68  } attach {attach
3d00: 65 64 20 2a 41 54 54 41 43 48 7d 0a 0a 52 65 63  ed *ATTACH}..Rec
3d10: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
3d20: 72 61 6d 20 61 74 74 61 63 68 2d 73 74 6d 74 0a  ram attach-stmt.
3d30: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65  </tcl>..<p> ^The
3d40: 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45   ATTACH DATABASE
3d50: 20 73 74 61 74 65 6d 65 6e 74 20 61 64 64 73 20   statement adds 
3d60: 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  another database
3d70: 20 0a 66 69 6c 65 20 74 6f 20 74 68 65 20 63 75   .file to the cu
3d80: 72 72 65 6e 74 20 5b 64 61 74 61 62 61 73 65 20  rrent [database 
3d90: 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e 20 0a 5e 54  connection]. .^T
3da0: 68 65 20 66 69 6c 65 6e 61 6d 65 20 66 6f 72 20  he filename for 
3db0: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
3dc0: 62 65 20 61 74 74 61 63 68 65 64 20 69 73 20 74  be attached is t
3dd0: 68 65 20 76 61 6c 75 65 20 6f 66 0a 74 68 65 20  he value of.the 
3de0: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
3df0: 6f 63 63 75 72 73 20 62 65 66 6f 72 65 20 74 68  occurs before th
3e00: 65 20 41 53 20 6b 65 79 77 6f 72 64 2e 0a 5e 54  e AS keyword..^T
3e10: 68 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74  he filename of t
3e20: 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 6c 6c  he database foll
3e30: 6f 77 73 20 74 68 65 20 73 61 6d 65 20 73 65 6d  ows the same sem
3e40: 61 6e 74 69 63 73 20 61 73 20 74 68 65 0a 66 69  antics as the.fi
3e50: 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20  lename argument 
3e60: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  to [sqlite3_open
3e70: 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33  ()] and [sqlite3
3e80: 5f 6f 70 65 6e 5f 76 32 28 29 5d 3b 20 74 68 65  _open_v2()]; the
3e90: 0a 73 70 65 63 69 61 6c 20 6e 61 6d 65 20 22 5b  .special name "[
3ea0: 3a 6d 65 6d 6f 72 79 3a 5d 22 20 72 65 73 75 6c  :memory:]" resul
3eb0: 74 73 20 69 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d  ts in an [in-mem
3ec0: 6f 72 79 20 64 61 74 61 62 61 73 65 5d 20 61 6e  ory database] an
3ed0: 64 20 61 6e 0a 65 6d 70 74 79 20 73 74 72 69 6e  d an.empty strin
3ee0: 67 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 6e  g results in a n
3ef0: 65 77 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74  ew temporary dat
3f00: 61 62 61 73 65 2e 0a 5e 54 68 65 20 66 69 6c 65  abase..^The file
3f10: 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 63 61  name argument ca
3f20: 6e 20 62 65 20 61 20 5b 55 52 49 20 66 69 6c 65  n be a [URI file
3f30: 6e 61 6d 65 5d 20 69 66 20 55 52 49 20 66 69 6c  name] if URI fil
3f40: 65 6e 61 6d 65 20 70 72 6f 63 65 73 73 69 6e 67  ename processing
3f50: 0a 69 73 20 65 6e 61 62 6c 65 20 6f 6e 20 74 68  .is enable on th
3f60: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
3f70: 63 74 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61  ction.  The defa
3f80: 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  ult behavior is 
3f90: 66 6f 72 0a 55 52 49 20 66 69 6c 65 6e 61 6d 65  for.URI filename
3fa0: 73 20 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64  s to be disabled
3fb0: 2c 20 68 6f 77 65 76 65 72 20 74 68 61 74 20 6d  , however that m
3fc0: 69 67 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61  ight change in a
3fd0: 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 0a   future release.
3fe0: 6f 66 20 53 51 4c 69 74 65 2c 20 73 6f 20 61 70  of SQLite, so ap
3ff0: 70 6c 69 63 61 74 69 6f 6e 20 64 65 76 65 6c 6f  plication develo
4000: 70 65 72 73 20 61 72 65 20 61 64 76 69 73 65 64  pers are advised
4010: 20 74 6f 20 70 6c 61 6e 20 61 63 63 6f 72 64 69   to plan accordi
4020: 6e 67 6c 79 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61  ngly...<p>The na
4030: 6d 65 20 74 68 61 74 20 6f 63 63 75 72 73 20 61  me that occurs a
4040: 66 74 65 72 20 74 68 65 20 41 53 20 6b 65 79 77  fter the AS keyw
4050: 6f 72 64 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ord is the name 
4060: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
4070: 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  used internally 
4080: 62 79 20 53 51 4c 69 74 65 2e 0a 5e 54 68 65 20  by SQLite..^The 
4090: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 73 20 27  database-names '
40a0: 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70  main' and .'temp
40b0: 27 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d  ' refer to the m
40c0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64  ain database and
40d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73   the database us
40e0: 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72  ed for .temporar
40f0: 79 20 74 61 62 6c 65 73 2e 20 20 5e 54 68 65 20  y tables.  ^The 
4100: 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61  main and temp da
4110: 74 61 62 61 73 65 73 20 63 61 6e 6e 6f 74 20 62  tabases cannot b
4120: 65 20 61 74 74 61 63 68 65 64 20 6f 72 0a 64 65  e attached or.de
4130: 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tached.</p>..<p>
4140: 20 5e 28 54 61 62 6c 65 73 20 69 6e 20 61 6e 20   ^(Tables in an 
4150: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
4160: 65 20 63 61 6e 20 62 65 20 72 65 66 65 72 72 65  e can be referre
4170: 64 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73  d to using the s
4180: 79 6e 74 61 78 20 0a 3c 69 3e 64 61 74 61 62 61  yntax .<i>databa
4190: 73 65 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d 6e 61  se-name.table-na
41a0: 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e 49 66 20 74  me</i>.)^  ^If t
41b0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
41c0: 61 62 6c 65 20 69 73 20 75 6e 69 71 75 65 0a 61  able is unique.a
41d0: 63 72 6f 73 73 20 61 6c 6c 20 61 74 74 61 63 68  cross all attach
41e0: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ed databases and
41f0: 20 74 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65   the main and te
4200: 6d 70 20 64 61 74 61 62 61 73 65 73 2c 20 74 68  mp databases, th
4210: 65 6e 20 74 68 65 0a 3c 69 3e 64 61 74 61 62 61  en the.<i>databa
4220: 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66  se-name</i> pref
4230: 69 78 20 69 73 20 6e 6f 74 20 72 65 71 75 69 72  ix is not requir
4240: 65 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f 72 20  ed.  ^If two or 
4250: 6d 6f 72 65 20 74 61 62 6c 65 73 20 69 6e 0a 64  more tables in.d
4260: 69 66 66 65 72 65 6e 74 20 64 61 74 61 62 61 73  ifferent databas
4270: 65 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  es have the same
4280: 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 0a 3c   name and the .<
4290: 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
42a0: 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f  /i> prefix is no
42b0: 74 20 75 73 65 64 20 6f 6e 20 61 20 74 61 62 6c  t used on a tabl
42c0: 65 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65  e reference, the
42d0: 6e 20 74 68 65 0a 74 61 62 6c 65 20 63 68 6f 73  n the.table chos
42e0: 65 6e 20 69 73 20 74 68 65 20 6f 6e 65 20 69 6e  en is the one in
42f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68   the database th
4300: 61 74 20 77 61 73 20 6c 65 61 73 74 20 72 65 63  at was least rec
4310: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 2e 3c  ently attached.<
4320: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61  /p>..<p>.^Transa
4330: 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67  ctions involving
4340: 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68   multiple attach
4350: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
4360: 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e   atomic,.assumin
4370: 67 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20  g that the main 
4380: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
4390: 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61 6e 64  "[:memory:]" and
43a0: 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d   the .[journal_m
43b0: 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57 41 4c  ode] is not [WAL
43c0: 5d 2e 20 20 5e 28 49 66 20 74 68 65 20 6d 61 69  ].  ^(If the mai
43d0: 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20 22 3a  n.database is ":
43e0: 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66 20 74  memory:" or if t
43f0: 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  he journal_mode 
4400: 69 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a 74 72  is WAL, then .tr
4410: 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74 69  ansactions conti
4420: 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69 63  nue to be atomic
4430: 20 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e 64   within each ind
4440: 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73 65  ividual.database
4450: 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74 68   file. But if th
4460: 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20  e host computer 
4470: 63 72 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d  crashes in the m
4480: 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f 4d 4d  iddle.of a [COMM
4490: 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20 6f 72  IT] where two or
44a0: 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65 20 66   more database f
44b0: 69 6c 65 73 20 61 72 65 20 75 70 64 61 74 65 64  iles are updated
44c0: 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73 65 20  ,.some of those 
44d0: 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65 74 20  files might get 
44e0: 74 68 65 20 63 68 61 6e 67 65 73 20 77 68 65 72  the changes wher
44f0: 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74 20 6e  e others.might n
4500: 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20  ot.)^.</p>..<p> 
4510: 5e 54 68 65 72 65 20 69 73 20 61 20 6c 69 6d 69  ^There is a limi
4520: 74 2c 20 73 65 74 20 75 73 69 6e 67 20 5b 73 71  t, set using [sq
4530: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 61  lite3_limit()] a
4540: 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  nd .[SQLITE_LIMI
4550: 54 5f 41 54 54 41 43 48 45 44 5d 2c 20 74 6f 20  T_ATTACHED], to 
4560: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61  the number of da
4570: 74 61 62 61 73 65 73 20 74 68 61 74 20 63 61 6e  tabases that can
4580: 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65 6f 75 73   be.simultaneous
4590: 6c 79 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  ly attached to a
45a0: 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
45b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e   connection.</p>
45c0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
45d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4610: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
4620: 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49  {BEGIN TRANSACTI
4630: 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ON} transaction 
4640: 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20 52  {*BEGIN COMMIT R
4650: 4f 4c 4c 42 41 43 4b 7d 0a 0a 52 65 63 75 72 73  OLLBACK}..Recurs
4660: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
4670: 20 62 65 67 69 6e 2d 73 74 6d 74 0a 52 65 63 75   begin-stmt.Recu
4680: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
4690: 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 52  am commit-stmt.R
46a0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
46b0: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
46c0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  tmt.</tcl>..<p>.
46d0: 5e 4e 6f 20 63 68 61 6e 67 65 73 20 63 61 6e 20  ^No changes can 
46e0: 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 64  be made to the d
46f0: 61 74 61 62 61 73 65 20 65 78 63 65 70 74 20 77  atabase except w
4700: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
4710: 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f 6d 6d 61 6e  ion..^Any comman
4720: 64 20 74 68 61 74 20 63 68 61 6e 67 65 73 20 74  d that changes t
4730: 68 65 20 64 61 74 61 62 61 73 65 20 28 62 61 73  he database (bas
4740: 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53 51 4c 20  ically, any SQL 
4750: 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72 20 74 68  command.other th
4760: 61 6e 20 5b 53 45 4c 45 43 54 5d 29 20 77 69 6c  an [SELECT]) wil
4770: 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
4780: 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
4790: 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f  ion if.one is no
47a0: 74 20 61 6c 72 65 61 64 79 20 69 6e 20 65 66 66  t already in eff
47b0: 65 63 74 2e 20 20 5e 41 75 74 6f 6d 61 74 69 63  ect.  ^Automatic
47c0: 61 6c 6c 79 20 73 74 61 72 74 65 64 20 74 72 61  ally started tra
47d0: 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f  nsactions.are co
47e0: 6d 6d 69 74 74 65 64 20 77 68 65 6e 20 74 68 65  mmitted when the
47f0: 20 6c 61 73 74 20 71 75 65 72 79 20 66 69 6e 69   last query fini
4800: 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  shes..</p>..<p>.
4810: 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61  ^Transactions ca
4820: 6e 20 62 65 20 73 74 61 72 74 65 64 20 6d 61 6e  n be started man
4830: 75 61 6c 6c 79 20 75 73 69 6e 67 20 74 68 65 20  ually using the 
4840: 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20  BEGIN.command.  
4850: 5e 28 53 75 63 68 20 74 72 61 6e 73 61 63 74 69  ^(Such transacti
4860: 6f 6e 73 20 75 73 75 61 6c 6c 79 20 70 65 72 73  ons usually pers
4870: 69 73 74 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ist until the ne
4880: 78 74 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c  xt.COMMIT or ROL
4890: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20  LBACK command.  
48a0: 42 75 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  But a transactio
48b0: 6e 20 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c  n will also .ROL
48c0: 4c 42 41 43 4b 20 69 66 20 74 68 65 20 64 61 74  LBACK if the dat
48d0: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20  abase is closed 
48e0: 6f 72 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  or if an error o
48f0: 63 63 75 72 73 0a 61 6e 64 20 74 68 65 20 52 4f  ccurs.and the RO
4900: 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20  LLBACK conflict 
4910: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
4920: 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65  ithm is specifie
4930: 64 2e 29 5e 0a 53 65 65 20 74 68 65 20 64 6f 63  d.)^.See the doc
4940: 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68  umentation on th
4950: 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a  e [ON CONFLICT].
4960: 63 6c 61 75 73 65 20 66 6f 72 20 61 64 64 69 74  clause for addit
4970: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
4980: 6e 20 61 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c  n about the ROLL
4990: 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65  BACK.conflict re
49a0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
49b0: 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 45  hm..</p>..<p>.^E
49c0: 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 20 69  ND TRANSACTION i
49d0: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 43  s an alias for C
49e0: 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  OMMIT..</p>..<p>
49f0: 20 5e 28 54 72 61 6e 73 61 63 74 69 6f 6e 73 20   ^(Transactions 
4a00: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 42 45  created using BE
4a10: 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 20 64 6f 20  GIN...COMMIT do 
4a20: 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a 5e 46 6f 72  not nest.)^.^For
4a30: 20 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63 74   nested transact
4a40: 69 6f 6e 73 2c 20 75 73 65 20 74 68 65 20 5b 53  ions, use the [S
4a50: 41 56 45 50 4f 49 4e 54 5d 20 61 6e 64 20 5b 52  AVEPOINT] and [R
4a60: 45 4c 45 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 73  ELEASE] commands
4a70: 2e 0a 54 68 65 20 22 54 4f 20 53 41 56 45 50 4f  ..The "TO SAVEPO
4a80: 49 4e 54 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22  INT <i>name</i>"
4a90: 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 52   clause of the R
4aa0: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
4ab0: 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e  shown.in the syn
4ac0: 74 61 78 20 64 69 61 67 72 61 6d 20 61 62 6f 76  tax diagram abov
4ad0: 65 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63  e is only applic
4ae0: 61 62 6c 65 20 74 6f 20 5b 53 41 56 45 50 4f 49  able to [SAVEPOI
4af0: 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73  NT].transactions
4b00: 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70 74 20 74  .  ^An attempt t
4b10: 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 42 45 47  o invoke the BEG
4b20: 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69  IN command withi
4b30: 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n.a transaction 
4b40: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
4b50: 6e 20 65 72 72 6f 72 2c 20 72 65 67 61 72 64 6c  n error, regardl
4b60: 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 0a 74  ess of whether.t
4b70: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  he transaction w
4b80: 61 73 20 73 74 61 72 74 65 64 20 62 79 20 5b 53  as started by [S
4b90: 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70  AVEPOINT] or a p
4ba0: 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65  rior BEGIN..^The
4bb0: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20   COMMIT command 
4bc0: 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  and the ROLLBACK
4bd0: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74   command without
4be0: 20 74 68 65 20 54 4f 20 63 6c 61 75 73 65 0a 77   the TO clause.w
4bf0: 6f 72 6b 20 74 68 65 20 73 61 6d 65 20 6f 6e 20  ork the same on 
4c00: 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e  [SAVEPOINT] tran
4c10: 73 61 63 74 69 6f 6e 73 20 61 73 20 74 68 65 79  sactions as they
4c20: 20 64 6f 20 77 69 74 68 20 74 72 61 6e 73 61 63   do with transac
4c30: 74 69 6f 6e 73 0a 73 74 61 72 74 65 64 20 62 79  tions.started by
4c40: 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63   BEGIN.</p>..<tc
4c50: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6d  l>hd_fragment im
4c60: 6d 65 64 69 61 74 65 20 7b 42 45 47 49 4e 20 49  mediate {BEGIN I
4c70: 4d 4d 45 44 49 41 54 45 7d 20 7b 42 45 47 49 4e  MMEDIATE} {BEGIN
4c80: 20 45 58 43 4c 55 53 49 56 45 7d 3c 2f 74 63 6c   EXCLUSIVE}</tcl
4c90: 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69  >.<p>.^Transacti
4ca0: 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66 65 72  ons can be defer
4cb0: 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20  red, immediate, 
4cc0: 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a  or exclusive.  .
4cd0: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74 72 61  ^The default tra
4ce0: 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f  nsaction behavio
4cf0: 72 20 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e  r is deferred..^
4d00: 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74  Deferred means t
4d10: 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65  hat no locks are
4d20: 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65   acquired.on the
4d30: 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20   database until 
4d40: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
4d50: 66 69 72 73 74 20 61 63 63 65 73 73 65 64 2e 20  first accessed. 
4d60: 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a 64 65   ^Thus with a.de
4d70: 66 65 72 72 65 64 20 74 72 61 6e 73 61 63 74 69  ferred transacti
4d80: 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74  on, the BEGIN st
4d90: 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64  atement itself d
4da0: 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74  oes nothing to t
4db0: 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20  he.filesystem.  
4dc0: 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61  ^Locks.are not a
4dd0: 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68  cquired until th
4de0: 65 20 66 69 72 73 74 20 72 65 61 64 20 6f 72 20  e first read or 
4df0: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e  write operation.
4e00: 20 20 5e 54 68 65 20 66 69 72 73 74 20 72 65 61    ^The first rea
4e10: 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69  d.operation agai
4e20: 6e 73 74 20 61 20 64 61 74 61 62 61 73 65 20 63  nst a database c
4e30: 72 65 61 74 65 73 20 61 20 5b 53 48 41 52 45 44  reates a [SHARED
4e40: 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66  ] lock and the f
4e50: 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61  irst.write opera
4e60: 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b  tion creates a [
4e70: 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20  RESERVED] lock. 
4e80: 20 20 5e 42 65 63 61 75 73 65 20 74 68 65 20 61    ^Because the a
4e90: 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f  cquisition of.lo
4ea0: 63 6b 73 20 69 73 20 64 65 66 65 72 72 65 64 20  cks is deferred 
4eb0: 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e  until they are n
4ec0: 65 65 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73  eeded, it is pos
4ed0: 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
4ee0: 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f  er.thread or pro
4ef0: 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74  cess could creat
4f00: 65 20 61 20 73 65 70 61 72 61 74 65 20 74 72 61  e a separate tra
4f10: 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69  nsaction and wri
4f20: 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61  te to.the databa
4f30: 73 65 20 61 66 74 65 72 20 74 68 65 20 42 45 47  se after the BEG
4f40: 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e  IN on the curren
4f50: 74 20 74 68 72 65 61 64 20 68 61 73 20 65 78 65  t thread has exe
4f60: 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74  cuted..^If the t
4f70: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d  ransaction is im
4f80: 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52  mediate, then [R
4f90: 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61  ESERVED] locks.a
4fa0: 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  re acquired on a
4fb0: 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61 73 20  ll databases as 
4fc0: 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49  soon as the BEGI
4fd0: 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65  N command is.exe
4fe0: 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77  cuted, without w
4ff0: 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64  aiting for the.d
5000: 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 75 73  atabase to be us
5010: 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45  ed.  ^After a BE
5020: 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a  GIN IMMEDIATE, .
5030: 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61  no other [databa
5040: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77  se connection] w
5050: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77  ill be able to w
5060: 72 69 74 65 20 74 6f 20 74 68 65 20 64 61 74 61  rite to the data
5070: 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47  base or.do a BEG
5080: 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20  IN IMMEDIATE or 
5090: 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e  BEGIN EXCLUSIVE.
50a0: 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73    ^Other process
50b0: 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a  es can continue.
50c0: 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65  to read from the
50d0: 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76   database, howev
50e0: 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69  er.  ^An exclusi
50f0: 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  ve transaction c
5100: 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45  auses.[EXCLUSIVE
5110: 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63  ] locks to be ac
5120: 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61  quired on all da
5130: 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72  tabases.  ^After
5140: 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49   a BEGIN.EXCLUSI
5150: 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61  VE, no other [da
5160: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5170: 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72  n] except for [r
5180: 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d  ead_uncommitted]
5190: 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c  .connections wil
51a0: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61  l be able to rea
51b0: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  d the database a
51c0: 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e  nd no other conn
51d0: 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65  ection without.e
51e0: 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65  xception will be
51f0: 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74   able to write t
5200: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
5210: 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  l the transactio
5220: 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c  n is.complete..<
5230: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d  /p>..<p>.^(An im
5240: 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63 74 69  plicit transacti
5250: 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f  on (a transactio
5260: 6e 20 74 68 61 74 20 69 73 20 73 74 61 72 74 65  n that is starte
5270: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c  d automatically,
5280: 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69  .not a transacti
5290: 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20 42 45  on started by BE
52a0: 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65  GIN) is committe
52b0: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
52c0: 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63  when.the last ac
52d0: 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66  tive statement f
52e0: 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74 61 74  inishes.  A stat
52f0: 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77  ement finishes w
5300: 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64  hen its.prepared
5310: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73   statement is [s
5320: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c  qlite3_reset() |
5330: 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69   reset] or.[sqli
5340: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c  te3_finalize() |
5350: 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e   finalized].  An
5360: 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62   open [sqlite3_b
5370: 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e  lob] used for.in
5380: 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49  cremental BLOB I
5390: 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20  /O counts as an 
53a0: 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61 74 65  unfinished state
53b0: 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69  ment.  The [sqli
53c0: 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68  te3_blob].finish
53d0: 65 73 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73  es when it is [s
53e0: 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73  qlite3_blob_clos
53f0: 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e  e() | closed].)^
5400: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20  .</p>..<p>.^The 
5410: 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20  explicit COMMIT 
5420: 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d  command runs imm
5430: 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69  ediately, even i
5440: 66 20 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64  f there are.pend
5450: 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  ing [SELECT] sta
5460: 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76  tements.  ^Howev
5470: 65 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65  er, if there are
5480: 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f   pending.write o
5490: 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43  perations, the C
54a0: 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69  OMMIT command.wi
54b0: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
54c0: 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49  error code [SQLI
54d0: 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a  TE_BUSY]..</p>..
54e0: 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20  <p>.^An attempt 
54f0: 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49  to execute COMMI
5500: 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65 73  T might also res
5510: 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54  ult in an [SQLIT
5520: 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20 63  E_BUSY] return c
5530: 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65  ode.if an anothe
5540: 72 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63  r thread or proc
5550: 65 73 73 20 68 61 73 20 61 20 5b 73 68 61 72 65  ess has a [share
5560: 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64  d lock] on the d
5570: 61 74 61 62 61 73 65 0a 74 68 61 74 20 70 72 65  atabase.that pre
5580: 76 65 6e 74 65 64 20 74 68 65 20 64 61 74 61 62  vented the datab
5590: 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 75  ase from being u
55a0: 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20 43  pdated.  ^When C
55b0: 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20 74  OMMIT fails in t
55c0: 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72 61  his.way, the tra
55d0: 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73  nsaction remains
55e0: 20 61 63 74 69 76 65 20 61 6e 64 20 74 68 65 20   active and the 
55f0: 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72 65  COMMIT can be re
5600: 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74 65  tried later.afte
5610: 72 20 74 68 65 20 72 65 61 64 65 72 20 68 61 73  r the reader has
5620: 20 68 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f   had a chance to
5630: 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70   clear..</p>..<p
5640: 3e 0a 49 6e 20 76 65 72 79 20 6f 6c 64 20 76 65  >.In very old ve
5650: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
5660: 20 28 62 65 66 6f 72 65 20 76 65 72 73 69 6f 6e   (before version
5670: 20 33 2e 37 2e 31 31 20 63 69 72 63 61 20 32 30   3.7.11 circa 20
5680: 31 32 2d 30 33 2d 32 30 29 0a 74 68 65 20 52 4f  12-03-20).the RO
5690: 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 66 61 69 6c  LLBACK will fail
56a0: 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63   with an error c
56b0: 6f 64 65 20 0a 5b 53 51 4c 49 54 45 5f 42 55 53  ode .[SQLITE_BUS
56c0: 59 5d 20 69 66 20 74 68 65 72 65 20 61 72 65 20  Y] if there are 
56d0: 61 6e 79 20 70 65 6e 64 69 6e 67 20 71 75 65 72  any pending quer
56e0: 69 65 73 2e 20 20 5e 49 6e 20 6d 6f 72 65 20 72  ies.  ^In more r
56f0: 65 63 65 6e 74 0a 76 65 72 73 69 6f 6e 73 20 6f  ecent.versions o
5700: 66 20 53 51 4c 69 74 65 2c 20 74 68 65 20 52 4f  f SQLite, the RO
5710: 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 70 72 6f 63  LLBACK will proc
5720: 65 65 64 20 61 6e 64 20 70 65 6e 64 69 6e 67 20  eed and pending 
5730: 73 74 61 74 65 6d 65 6e 74 73 0a 77 69 6c 6c 20  statements.will 
5740: 6f 66 74 65 6e 20 62 65 20 61 62 6f 72 74 65 64  often be aborted
5750: 2c 20 63 61 75 73 69 6e 67 20 74 68 65 6d 20 74  , causing them t
5760: 6f 20 72 65 74 75 72 6e 20 61 6e 20 5b 53 51 4c  o return an [SQL
5770: 49 54 45 5f 41 42 4f 52 54 5d 20 6f 72 0a 5b 53  ITE_ABORT] or.[S
5780: 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
5790: 42 41 43 4b 5d 20 65 72 72 6f 72 2e 0a 5e 49 6e  BACK] error..^In
57a0: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
57b0: 33 2e 38 2e 38 20 61 6e 64 20 6c 61 74 65 72 2c  3.8.8 and later,
57c0: 20 61 20 70 65 6e 64 69 6e 67 20 72 65 61 64 20   a pending read 
57d0: 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 66 75  will continue fu
57e0: 6e 63 74 69 6f 6e 69 6e 67 0a 61 66 74 65 72 20  nctioning.after 
57f0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 61 73 20  the ROLLBACK as 
5800: 6c 6f 6e 67 20 61 73 20 74 68 65 20 52 4f 4c 4c  long as the ROLL
5810: 42 41 43 4b 20 64 6f 65 73 20 6e 6f 74 20 6d 6f  BACK does not mo
5820: 64 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73  dify the databas
5830: 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f 70 3e 0a 0a  e.schema..</p>..
5840: 3c 70 3e 0a 49 66 20 5b 50 52 41 47 4d 41 20 6a  <p>.If [PRAGMA j
5850: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20  ournal_mode] is 
5860: 73 65 74 20 74 6f 20 4f 46 46 20 28 74 68 75 73  set to OFF (thus
5870: 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65 20 72   disabling the r
5880: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a  ollback journal.
5890: 66 69 6c 65 29 20 74 68 65 6e 20 74 68 65 20 62  file) then the b
58a0: 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 52  ehavior of the R
58b0: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
58c0: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f  is undefined..</
58d0: 70 3e 0a 0a 3c 68 33 3e 52 65 73 70 6f 6e 73 65  p>..<h3>Response
58e0: 20 54 6f 20 45 72 72 6f 72 73 20 57 69 74 68 69   To Errors Withi
58f0: 6e 20 41 20 54 72 61 6e 73 61 63 74 69 6f 6e 3c  n A Transaction<
5900: 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28 49 66 20 63  /h3>..<p> ^(If c
5910: 65 72 74 61 69 6e 20 6b 69 6e 64 73 20 6f 66 20  ertain kinds of 
5920: 65 72 72 6f 72 73 20 6f 63 63 75 72 20 77 69 74  errors occur wit
5930: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
5940: 6e 2c 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69  n, the.transacti
5950: 6f 6e 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f  on may or may no
5960: 74 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  t be rolled back
5970: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20   automatically. 
5980: 20 54 68 65 0a 65 72 72 6f 72 73 20 74 68 61 74   The.errors that
5990: 20 63 61 6e 20 63 61 75 73 65 20 61 6e 20 61 75   can cause an au
59a0: 74 6f 6d 61 74 69 63 20 72 6f 6c 6c 62 61 63 6b  tomatic rollback
59b0: 20 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c   include:</p>..<
59c0: 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ul>.<li> [SQLITE
59d0: 5f 46 55 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65  _FULL]: database
59e0: 20 6f 72 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c   or disk full.<l
59f0: 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52  i> [SQLITE_IOERR
5a00: 5d 3a 20 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f  ]: disk I/O erro
5a10: 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42  r.<li> [SQLITE_B
5a20: 55 53 59 5d 3a 20 64 61 74 61 62 61 73 65 20 69  USY]: database i
5a30: 6e 20 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72  n use by another
5a40: 20 70 72 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53   process.<li> [S
5a50: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75  QLITE_NOMEM]: ou
5a60: 74 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c 2f 75 6c  t or memory.</ul
5a70: 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c  >)^..<p>.^For al
5a80: 6c 20 6f 66 20 74 68 65 73 65 20 65 72 72 6f 72  l of these error
5a90: 73 2c 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  s, SQLite attemp
5aa0: 74 73 20 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20  ts to undo just 
5ab0: 74 68 65 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e  the one statemen
5ac0: 74 0a 69 74 20 77 61 73 20 77 6f 72 6b 69 6e 67  t.it was working
5ad0: 20 6f 6e 20 61 6e 64 20 6c 65 61 76 65 20 63 68   on and leave ch
5ae0: 61 6e 67 65 73 20 66 72 6f 6d 20 70 72 69 6f 72  anges from prior
5af0: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
5b00: 69 6e 20 74 68 65 0a 73 61 6d 65 20 74 72 61 6e  in the.same tran
5b10: 73 61 63 74 69 6f 6e 20 69 6e 74 61 63 74 20 61  saction intact a
5b20: 6e 64 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68  nd continue with
5b30: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
5b40: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65  .  ^However, .de
5b50: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 73  pending on the s
5b60: 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65  tatement being e
5b70: 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
5b80: 20 70 6f 69 6e 74 20 61 74 20 77 68 69 63 68 20   point at which 
5b90: 74 68 65 0a 65 72 72 6f 72 20 6f 63 63 75 72 73  the.error occurs
5ba0: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65  , it might be ne
5bb0: 63 65 73 73 61 72 79 20 66 6f 72 20 53 51 4c 69  cessary for SQLi
5bc0: 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  te to rollback a
5bd0: 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65 20 65 6e  nd.cancel the en
5be0: 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
5bf0: 2e 20 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69  .  ^An applicati
5c00: 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68 69 63  on can tell whic
5c10: 68 0a 63 6f 75 72 73 65 20 6f 66 20 61 63 74 69  h.course of acti
5c20: 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62  on SQLite took b
5c30: 79 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c  y using the.[sql
5c40: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
5c50: 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  mit()] C-languag
5c60: 65 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  e interface.</p>
5c70: 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65 63 6f 6d  ..<p>It is recom
5c80: 6d 65 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c  mended that appl
5c90: 69 63 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64  ications respond
5ca0: 20 74 6f 20 74 68 65 20 65 72 72 6f 72 73 0a 6c   to the errors.l
5cb0: 69 73 74 65 64 20 61 62 6f 76 65 20 62 79 20 65  isted above by e
5cc0: 78 70 6c 69 63 69 74 6c 79 20 69 73 73 75 69 6e  xplicitly issuin
5cd0: 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  g a ROLLBACK com
5ce0: 6d 61 6e 64 2e 20 20 5e 49 66 20 74 68 65 20 0a  mand.  ^If the .
5cf0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20  transaction has 
5d00: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c  already been rol
5d10: 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74  led back automat
5d20: 69 63 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72  ically.by the er
5d30: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68  ror response, th
5d40: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
5d50: 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69  command will fai
5d60: 6c 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c  l with an.error,
5d70: 20 62 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20   but no harm is 
5d80: 63 61 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c  caused by this.<
5d90: 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76  /p>..<p>Future v
5da0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
5db0: 65 20 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65  e may extend the
5dc0: 20 6c 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20   list of errors 
5dd0: 77 68 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73  which.might caus
5de0: 65 20 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e  e automatic tran
5df0: 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b  saction rollback
5e00: 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
5e10: 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67  ns of.SQLite mig
5e20: 68 74 20 63 68 61 6e 67 65 20 74 68 65 20 65 72  ht change the er
5e30: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49  ror response.  I
5e40: 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65  n particular, we
5e50: 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73   may.choose to s
5e60: 69 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65  implify the inte
5e70: 72 66 61 63 65 20 69 6e 20 66 75 74 75 72 65 20  rface in future 
5e80: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
5e90: 74 65 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68  te by.causing th
5ea0: 65 20 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74  e errors above t
5eb0: 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e  o force an uncon
5ec0: 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63  ditional rollbac
5ed0: 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  k.</p>..<tcl>.##
5ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65  #############.Se
5f30: 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54  ction {SAVEPOINT
5f40: 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b 53 41 56  } savepoint {SAV
5f50: 45 50 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a  EPOINT RELEASE}.
5f60: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
5f70: 44 69 61 67 72 61 6d 20 73 61 76 65 70 6f 69 6e  Diagram savepoin
5f80: 74 2d 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65  t-stmt.Recursive
5f90: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65  BubbleDiagram re
5fa0: 6c 65 61 73 65 2d 73 74 6d 74 0a 52 65 63 75 72  lease-stmt.Recur
5fb0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
5fc0: 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a  m rollback-stmt.
5fd0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41 56  </tcl>..<p> ^SAV
5fe0: 45 50 4f 49 4e 54 73 20 61 72 65 20 61 20 6d 65  EPOINTs are a me
5ff0: 74 68 6f 64 20 6f 66 20 63 72 65 61 74 69 6e 67  thod of creating
6000: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 73   transactions, s
6010: 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49 4e  imilar to.[BEGIN
6020: 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c 20  ] and [COMMIT], 
6030: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
6040: 53 41 56 45 50 4f 49 4e 54 20 61 6e 64 20 52 45  SAVEPOINT and RE
6050: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a 61  LEASE commands.a
6060: 72 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61 79  re named and may
6070: 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e 0a   be nested.</p>.
6080: 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56 45 50 4f  .<p> ^The SAVEPO
6090: 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72  INT command star
60a0: 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63  ts a new transac
60b0: 74 69 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d 65  tion with a name
60c0: 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61 63 74 69  ..^The transacti
60d0: 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e 6f  on names need no
60e0: 74 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28 41  t be unique..^(A
60f0: 20 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20 62   SAVEPOINT can b
6100: 65 20 73 74 61 72 74 65 64 20 65 69 74 68 65 72  e started either
6110: 20 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73 69   within or outsi
6120: 64 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d 2e  de of.a [BEGIN].
6130: 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20 5e  ..[COMMIT].)^  ^
6140: 28 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49 4e  (When a SAVEPOIN
6150: 54 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d 6d  T is the outer-m
6160: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e  ost savepoint.an
6170: 64 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74 68  d it is not with
6180: 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b  in a [BEGIN]...[
6190: 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68 65  COMMIT] then the
61a0: 20 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 65   behavior is the
61b0: 0a 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20 44  .same as BEGIN D
61c0: 45 46 45 52 52 45 44 20 54 52 41 4e 53 41 43 54  EFERRED TRANSACT
61d0: 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ION.)^</p>..<p>^
61e0: 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  The ROLLBACK TO 
61f0: 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74 73 20  command reverts 
6200: 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
6210: 20 64 61 74 61 62 61 73 65 20 62 61 63 6b 20 74   database back t
6220: 6f 20 77 68 61 74 0a 69 74 20 77 61 73 20 6a 75  o what.it was ju
6230: 73 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 72  st after the cor
6240: 72 65 73 70 6f 6e 64 69 6e 67 20 53 41 56 45 50  responding SAVEP
6250: 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68 61  OINT.  ^Note tha
6260: 74 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70 6c  t unlike that.pl
6270: 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63  ain [ROLLBACK] c
6280: 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75 74 20  ommand (without 
6290: 74 68 65 20 54 4f 20 6b 65 79 77 6f 72 64 29 20  the TO keyword) 
62a0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  the ROLLBACK TO 
62b0: 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f 74  command.does not
62c0: 20 63 61 6e 63 65 6c 20 74 68 65 20 74 72 61 6e   cancel the tran
62d0: 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74 65  saction.  ^Inste
62e0: 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e 67  ad of cancelling
62f0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6300: 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  ,.the ROLLBACK T
6310: 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61 72  O command restar
6320: 74 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ts the transacti
6330: 6f 6e 20 61 67 61 69 6e 20 61 74 20 74 68 65 20  on again at the 
6340: 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c 20  beginning..^All 
6350: 69 6e 74 65 72 76 65 6e 69 6e 67 20 53 41 56 45  intervening SAVE
6360: 50 4f 49 4e 54 73 20 61 72 65 20 63 61 6e 63 65  POINTs are cance
6370: 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f 70  led, however.</p
6380: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41  >..<p>^The RELEA
6390: 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c 69  SE command is li
63a0: 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f  ke a [COMMIT] fo
63b0: 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 5e  r a SAVEPOINT..^
63c0: 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  The RELEASE comm
63d0: 61 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20 73  and causes all s
63e0: 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20 74  avepoints back t
63f0: 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20  o and including 
6400: 74 68 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e 74  the .most recent
6410: 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20   savepoint with 
6420: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20  a matching name 
6430: 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 66 72  to be removed fr
6440: 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74  om the .transact
6450: 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68 65  ion stack.  ^The
6460: 20 52 45 4c 45 41 53 45 20 6f 66 20 61 6e 20 69   RELEASE of an i
6470: 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  nner transaction
6480: 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20  .does not cause 
6490: 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 62  any changes to b
64a0: 65 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65  e written to the
64b0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 3b 20   database file; 
64c0: 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76 65  it merely.remove
64d0: 73 20 73 61 76 65 70 6f 69 6e 74 73 20 66 72 6f  s savepoints fro
64e0: 6d 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  m the transactio
64f0: 6e 20 73 74 61 63 6b 20 73 75 63 68 20 74 68 61  n stack such tha
6500: 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67 65  t it is.no longe
6510: 72 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 52 4f  r possible to RO
6520: 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73 65 20  LLBACK TO those 
6530: 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66 20  savepoints..^If 
6540: 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
6550: 64 20 72 65 6c 65 61 73 65 73 20 74 68 65 20 6f  d releases the o
6560: 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69  utermost savepoi
6570: 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74 68 65 20  nt, so.that the 
6580: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
6590: 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79 2c  k becomes empty,
65a0: 20 74 68 65 6e 20 52 45 4c 45 41 53 45 20 69 73   then RELEASE is
65b0: 20 74 68 65 20 73 61 6d 65 0a 61 73 20 5b 43 4f   the same.as [CO
65c0: 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f 4d  MMIT]..^The [COM
65d0: 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79  MIT] command may
65e0: 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 6c 65   be used to rele
65f0: 61 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e  ase all savepoin
6600: 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68  ts and.commit th
6610: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76  e transaction ev
6620: 65 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73 61  en if the transa
6630: 63 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e  ction was origin
6640: 61 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20  ally started.by 
6650: 61 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d  a SAVEPOINT comm
6660: 61 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61  and instead of a
6670: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
6680: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  .</p>..<p>^If th
6690: 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  e savepoint-name
66a0: 20 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63 6f   in a RELEASE co
66b0: 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d  mmand does not m
66c0: 61 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f 69  atch any.savepoi
66d0: 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  nt currently in 
66e0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
66f0: 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20 73  stack, then no s
6700: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 0a 72 65  avepoints are.re
6710: 6c 65 61 73 65 64 2c 20 74 68 65 20 64 61 74 61  leased, the data
6720: 62 61 73 65 20 69 73 20 75 6e 63 68 61 6e 67 65  base is unchange
6730: 64 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41  d, and the RELEA
6740: 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72  SE command retur
6750: 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  ns.an error.</p>
6760: 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
6770: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
6780: 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d 69  tion might commi
6790: 74 20 28 75 73 69 6e 67 20 74 68 65 20 52 45 4c  t (using the REL
67a0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62 75  EASE command).bu
67b0: 74 20 74 68 65 6e 20 6c 61 74 65 72 20 68 61 76  t then later hav
67c0: 65 20 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f 6e  e its work undon
67d0: 65 20 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b 20  e by a ROLLBACK 
67e0: 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e  in an outer tran
67f0: 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77 65  saction..^A powe
6800: 72 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72 6f  r failure or pro
6810: 67 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f 53  gram crash or OS
6820: 20 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75 73   crash will caus
6830: 65 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74  e the outer-most
6840: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20  .transaction to 
6850: 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69 6e  rollback, undoin
6860: 67 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  g all changes th
6870: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
6880: 20 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75 74   within.that out
6890: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  er transaction, 
68a0: 65 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68 61  even changes tha
68b0: 74 20 68 61 76 65 20 73 75 70 70 6f 73 65 64 6c  t have supposedl
68c0: 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74 65  y been "committe
68d0: 64 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41 53  d".by the RELEAS
68e0: 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f 6e  E command.  ^Con
68f0: 74 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74 75  tent is not actu
6900: 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f  ally committed o
6910: 6e 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74 69  n the disk .unti
6920: 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  l the outermost 
6930: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
6940: 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  its.</p>..<p>The
6950: 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 77  re are several w
6960: 61 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67 20  ays of thinking 
6970: 61 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41 53  about the RELEAS
6980: 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a  E command:</p>..
6990: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d  <ul>.<li><p>.Som
69a0: 65 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52 45  e people view RE
69b0: 4c 45 41 53 45 20 61 73 20 74 68 65 20 65 71 75  LEASE as the equ
69c0: 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d 49  ivalent of COMMI
69d0: 54 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  T for a SAVEPOIN
69e0: 54 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61 63  T..This is an ac
69f0: 63 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20 6f  ceptable point o
6a00: 66 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20 61  f view as long a
6a10: 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73 20  s one remembers 
6a20: 74 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65 73  that the.changes
6a30: 20 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61 6e   committed by an
6a40: 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69   inner transacti
6a50: 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20 62  on might later b
6a60: 65 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72 6f  e undone by a.ro
6a70: 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75 74  llback in an out
6a80: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c  er transaction.<
6a90: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
6aa0: 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20 6f  >.Another view o
6ab0: 66 20 52 45 4c 45 41 53 45 20 69 73 20 74 68 61  f RELEASE is tha
6ac0: 74 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e 61  t it merges a na
6ad0: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
6ae0: 69 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74 20  into its.parent 
6af0: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f 20  transaction, so 
6b00: 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 74  that the named t
6b10: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69  ransaction and i
6b20: 74 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d 65  ts parent become
6b30: 0a 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61  .the same transa
6b40: 63 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52 45  ction.  After RE
6b50: 4c 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65 64  LEASE, the named
6b60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
6b70: 20 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c 6c   its parent.will
6b80: 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62   commit or rollb
6b90: 61 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77 68  ack together, wh
6ba0: 61 74 65 76 65 72 20 74 68 65 69 72 20 66 61 74  atever their fat
6bb0: 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f  e may be..</p></
6bc0: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65  li>..<li><p>.One
6bd0: 20 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b 20   can also think 
6be0: 6f 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61 73  of savepoints as
6bf0: 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65 20  ."marks" in the 
6c00: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d 65  transaction time
6c10: 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20 76  line.  In this v
6c20: 69 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f 49  iew, the SAVEPOI
6c30: 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61 74  NT command.creat
6c40: 65 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20 74  es a new mark, t
6c50: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
6c60: 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20 74  ommand rewinds t
6c70: 68 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63 6b  he timeline back
6c80: 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73 74  .to a point just
6c90: 20 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65 64   after the named
6ca0: 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20 52   mark, and the R
6cb0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a 65  ELEASE command.e
6cc0: 72 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f 6d  rases marks from
6cd0: 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77 69   the timeline wi
6ce0: 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20 6d  thout actually m
6cf0: 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67 65  aking any.change
6d00: 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
6d10: 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75  e..</p></li>.</u
6d20: 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73 61  l>....<h3>Transa
6d30: 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52 75  ction Nesting Ru
6d40: 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  les</h3>..<p>^Th
6d50: 65 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74 69  e last transacti
6d60: 6f 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c 20  on started will 
6d70: 62 65 20 74 68 65 20 66 69 72 73 74 0a 74 72 61  be the first.tra
6d80: 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74  nsaction committ
6d90: 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63  ed or rolled bac
6da0: 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  k.</p>..<p>^The 
6db0: 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20  [BEGIN] command 
6dc0: 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 74 68  only works if th
6dd0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
6de0: 61 63 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f 72  ack is empty, or
6df0: 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 20  .in other words 
6e00: 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
6e10: 70 65 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74  pending transact
6e20: 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65 20 74  ions.  ^If the t
6e30: 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63 6b  ransaction.stack
6e40: 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 77 68   is not empty wh
6e50: 65 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d 20 63  en the [BEGIN] c
6e60: 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65  ommand is invoke
6e70: 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d  d, then the comm
6e80: 61 6e 64 0a 66 61 69 6c 73 20 77 69 74 68 20 61  and.fails with a
6e90: 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70  n error.</p>..<p
6ea0: 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63  >^The [COMMIT] c
6eb0: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20 61  ommand commits a
6ec0: 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 74  ll outstanding t
6ed0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 20  ransactions and 
6ee0: 6c 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e 73  leaves.the trans
6ef0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70  action stack emp
6f00: 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ty.</p>..<p>^The
6f10: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
6f20: 20 73 74 61 72 74 73 20 77 69 74 68 20 74 68 65   starts with the
6f30: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64 64   most recent add
6f40: 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72 61  ition to the.tra
6f50: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 61  nsaction stack a
6f60: 6e 64 20 72 65 6c 65 61 73 65 73 20 73 61 76 65  nd releases save
6f70: 70 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64 73  points backwards
6f80: 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c 20   .in time until 
6f90: 69 74 20 72 65 6c 65 61 73 65 73 20 61 20 73 61  it releases a sa
6fa0: 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20 6d  vepoint with a m
6fb0: 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e  atching savepoin
6fc0: 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20 73  t-name..^Prior s
6fd0: 61 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20  avepoints, even 
6fe0: 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20  savepoints with 
6ff0: 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69  matching savepoi
7000: 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e  nt-names, are.un
7010: 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68 65  changed..^If the
7020: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
7030: 20 63 61 75 73 65 73 20 74 68 65 0a 74 72 61 6e   causes the.tran
7040: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 74 6f  saction stack to
7050: 20 62 65 63 6f 6d 65 20 65 6d 70 74 79 20 28 69   become empty (i
7060: 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  f the RELEASE co
7070: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
7080: 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72 61  he.outermost tra
7090: 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68  nsaction from th
70a0: 65 20 73 74 61 63 6b 29 20 74 68 65 6e 20 74 68  e stack) then th
70b0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  e transaction co
70c0: 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  mmits.</p>..<p>^
70d0: 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63  The [ROLLBACK] c
70e0: 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 61  ommand without a
70f0: 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73   TO clause rolls
7100: 20 62 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e 73   backs all trans
7110: 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61 76  actions.and leav
7120: 65 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  es the transacti
7130: 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c  on stack empty.<
7140: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c  /p>..<p>^The ROL
7150: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69  LBACK command wi
7160: 74 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72  th a TO clause r
7170: 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73 61  olls back transa
7180: 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61 63  ctions going.bac
7190: 6b 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20 62  kwards in time b
71a0: 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74 20  ack to the most 
71b0: 72 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e 54  recent SAVEPOINT
71c0: 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67   with a matching
71d0: 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56 45   name..^The SAVE
71e0: 50 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20 6d  POINT with the m
71f0: 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65 6d  atching name rem
7200: 61 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61 6e  ains on the tran
7210: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a 62  saction stack,.b
7220: 75 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20  ut all database 
7230: 63 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63 63  changes that occ
7240: 75 72 72 65 64 20 61 66 74 65 72 20 74 68 61 74  urred after that
7250: 20 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20 63   SAVEPOINT was c
7260: 72 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c 65  reated.are rolle
7270: 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65  d back.  ^If the
7280: 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20   savepoint-name 
7290: 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  in a ROLLBACK TO
72a0: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
72b0: 74 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56 45  t.match any SAVE
72c0: 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74 61  POINT on the sta
72d0: 63 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c  ck, then the ROL
72e0: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66 61  LBACK command fa
72f0: 69 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72 6f  ils with an.erro
7300: 72 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65  r and leaves the
7310: 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61   state of the da
7320: 74 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65 64  tabase unchanged
7330: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
7340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7380: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
7390: 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d  tion comment com
73a0: 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a 63  ment {comment *c
73b0: 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65 63 75 72 73  omments}..Recurs
73c0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
73d0: 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74 61 78 0a   comment-syntax.
73e0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d  </tcl>..<p>^Comm
73f0: 65 6e 74 73 20 61 72 65 20 6e 6f 74 20 53 51 4c  ents are not SQL
7400: 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75 74 20 63   commands, but c
7410: 61 6e 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  an occur within 
7420: 74 68 65 20 74 65 78 74 20 6f 66 0a 53 51 4c 20  the text of.SQL 
7430: 71 75 65 72 69 65 73 20 70 61 73 73 65 64 20 74  queries passed t
7440: 6f 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  o [sqlite3_prepa
7450: 72 65 5f 76 32 28 29 5d 20 61 6e 64 20 72 65 6c  re_v2()] and rel
7460: 61 74 65 64 20 69 6e 74 65 72 66 61 63 65 73 2e  ated interfaces.
7470: 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 74  .^Comments are t
7480: 72 65 61 74 65 64 20 61 73 20 77 68 69 74 65 73  reated as whites
7490: 70 61 63 65 20 62 79 20 74 68 65 20 70 61 72 73  pace by the pars
74a0: 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 63 61  er..^Comments ca
74b0: 6e 20 62 65 67 69 6e 20 61 6e 79 77 68 65 72 65  n begin anywhere
74c0: 20 77 68 69 74 65 73 70 61 63 65 20 0a 63 61 6e   whitespace .can
74d0: 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e 63 6c 75   be found, inclu
74e0: 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72  ding inside expr
74f0: 65 73 73 69 6f 6e 73 20 74 68 61 74 20 73 70 61  essions that spa
7500: 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73  n multiple lines
7510: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 20  ..</p>..<p>^SQL 
7520: 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 20 77  comments begin w
7530: 69 74 68 20 74 77 6f 20 63 6f 6e 73 65 63 75 74  ith two consecut
7540: 69 76 65 20 22 2d 22 20 63 68 61 72 61 63 74 65  ive "-" characte
7550: 72 73 20 28 41 53 43 49 49 20 30 78 32 64 29 0a  rs (ASCII 0x2d).
7560: 61 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74 6f  and extend up to
7570: 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
7580: 68 65 20 6e 65 78 74 20 6e 65 77 6c 69 6e 65 20  he next newline 
7590: 63 68 61 72 61 63 74 65 72 20 28 41 53 43 49 49  character (ASCII
75a0: 20 30 78 30 61 29 0a 6f 72 20 75 6e 74 69 6c 20   0x0a).or until 
75b0: 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
75c0: 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65  , whichever come
75d0: 73 20 66 69 72 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  s first.</p>..<p
75e0: 3e 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e  >^C-style commen
75f0: 74 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22 2f  ts begin.with "/
7600: 2a 22 20 61 6e 64 20 65 78 74 65 6e 64 20 75 70  *" and extend up
7610: 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e   to and includin
7620: 67 20 74 68 65 20 6e 65 78 74 20 22 2a 2f 22 20  g the next "*/" 
7630: 63 68 61 72 61 63 74 65 72 20 70 61 69 72 0a 6f  character pair.o
7640: 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20  r until the end 
7650: 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65  of input, whiche
7660: 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e  ver comes first.
7670: 20 20 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65    ^C-style comme
7680: 6e 74 73 0a 63 61 6e 20 73 70 61 6e 20 6d 75 6c  nts.can span mul
7690: 74 69 70 6c 65 20 6c 69 6e 65 73 2e 20 3c 2f 70  tiple lines. </p
76a0: 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20  >..<p>^Comments 
76b0: 63 61 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68  can appear anywh
76c0: 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20 63  ere whitespace c
76d0: 61 6e 20 6f 63 63 75 72 2c 0a 69 6e 63 6c 75 64  an occur,.includ
76e0: 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72 65  ing inside expre
76f0: 73 73 69 6f 6e 73 20 61 6e 64 20 69 6e 20 74 68  ssions and in th
7700: 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f 74 68 65  e middle of othe
7710: 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  r SQL statements
7720: 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e  ..^Comments do n
7730: 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e 0a 0a 0a  ot nest..</p>...
7740: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
7750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7790: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
77a0: 45 41 54 45 20 49 4e 44 45 58 7d 20 63 72 65 61  EATE INDEX} crea
77b0: 74 65 69 6e 64 65 78 20 7b 7b 43 52 45 41 54 45  teindex {{CREATE
77c0: 20 49 4e 44 45 58 7d 7d 0a 0a 52 65 63 75 72 73   INDEX}}..Recurs
77d0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
77e0: 20 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74   create-index-st
77f0: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
7800: 68 65 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  he CREATE INDEX 
7810: 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73  command consists
7820: 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73   of the keywords
7830: 20 22 43 52 45 41 54 45 20 49 4e 44 45 58 22 20   "CREATE INDEX" 
7840: 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20  followed.by the 
7850: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20  name of the new 
7860: 69 6e 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f  index, the keywo
7870: 72 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d  rd "ON", the nam
7880: 65 20 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c  e of a previousl
7890: 79 0a 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y.created table 
78a0: 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e  that is to be in
78b0: 64 65 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72  dexed, and a par
78c0: 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20  enthesized list 
78d0: 6f 66 20 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75  of names of.colu
78e0: 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
78f0: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 66   that are used f
7900: 6f 72 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  or the index key
7910: 2e 0a 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61  ..If the optiona
7920: 6c 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  l WHERE clause i
7930: 73 20 69 6e 63 6c 75 64 65 64 2c 20 74 68 65 6e  s included, then
7940: 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 61 20   the index is a 
7950: 22 5b 70 61 72 74 69 61 6c 20 69 6e 64 65 78 5d  "[partial index]
7960: 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  "..</p>..<tcl>hd
7970: 5f 66 72 61 67 6d 65 6e 74 20 7b 64 65 73 63 69  _fragment {desci
7980: 64 78 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20  dx} {descending 
7990: 69 6e 64 69 63 65 73 7d 20 7b 64 65 73 63 65 6e  indices} {descen
79a0: 64 69 6e 67 20 69 6e 64 65 78 7d 20 7b 64 65 73  ding index} {des
79b0: 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 65 73 7d  cending indexes}
79c0: 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63 68 20  </tcl>.<p>^Each 
79d0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20  column name can 
79e0: 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f  be followed by o
79f0: 6e 65 20 6f 66 20 74 68 65 20 22 41 53 43 22 20  ne of the "ASC" 
7a00: 6f 72 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72  or "DESC" keywor
7a10: 64 73 0a 74 6f 20 69 6e 64 69 63 61 74 65 20 73  ds.to indicate s
7a20: 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65  ort order.  ^The
7a30: 20 73 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20   sort order may 
7a40: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67  or may not be ig
7a50: 6e 6f 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a  nored depending.
7a60: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
7a70: 66 69 6c 65 20 66 6f 72 6d 61 74 2c 20 61 6e 64  file format, and
7a80: 20 69 6e 20 70 61 72 74 69 63 75 6c 61 72 20 74   in particular t
7a90: 68 65 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61  he [schema forma
7aa0: 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68 65 20  t number]..^The 
7ab0: 22 6c 65 67 61 63 79 22 20 73 63 68 65 6d 61 20  "legacy" schema 
7ac0: 66 6f 72 6d 61 74 20 28 31 29 20 69 67 6e 6f 72  format (1) ignor
7ad0: 65 73 20 69 6e 64 65 78 0a 73 6f 72 74 20 6f 72  es index.sort or
7ae0: 64 65 72 2e 20 20 5e 54 68 65 20 64 65 73 63 65  der.  ^The desce
7af0: 6e 64 69 6e 67 20 69 6e 64 65 78 20 73 63 68 65  nding index sche
7b00: 6d 61 20 66 6f 72 6d 61 74 20 28 34 29 20 74 61  ma format (4) ta
7b10: 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20 6f  kes index sort o
7b20: 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75 6e  rder.into accoun
7b30: 74 2e 20 20 4f 6e 6c 79 20 76 65 72 73 69 6f 6e  t.  Only version
7b40: 73 20 6f 66 20 53 51 4c 69 74 65 20 33 2e 33 2e  s of SQLite 3.3.
7b50: 30 20 61 6e 64 20 6c 61 74 65 72 20 61 72 65 20  0 and later are 
7b60: 61 62 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61  able to understa
7b70: 6e 64 0a 74 68 65 20 64 65 73 63 65 6e 64 69 6e  nd.the descendin
7b80: 67 20 69 6e 64 65 78 20 66 6f 72 6d 61 74 2e 20  g index format. 
7b90: 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  For compatibilit
7ba0: 79 2c 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51  y, version of SQ
7bb0: 4c 69 74 65 20 62 65 74 77 65 65 6e 20 33 2e 33  Lite between 3.3
7bc0: 2e 30 0a 61 6e 64 20 33 2e 37 2e 39 20 75 73 65  .0.and 3.7.9 use
7bd0: 20 74 68 65 20 6c 65 67 61 63 79 20 73 63 68 65   the legacy sche
7be0: 6d 61 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66  ma format by def
7bf0: 61 75 6c 74 2e 20 20 54 68 65 20 6e 65 77 65 72  ault.  The newer
7c00: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69   schema format i
7c10: 73 0a 75 73 65 64 20 62 79 20 64 65 66 61 75 6c  s.used by defaul
7c20: 74 20 69 6e 20 76 65 72 73 69 6f 6e 20 33 2e 37  t in version 3.7
7c30: 2e 31 30 20 61 6e 64 20 6c 61 74 65 72 2e 0a 5e  .10 and later..^
7c40: 54 68 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65  The [legacy_file
7c50: 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20  _format pragma] 
7c60: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63  can be used to c
7c70: 68 61 6e 67 65 20 73 65 74 20 74 68 65 20 73 70  hange set the sp
7c80: 65 63 69 66 69 63 0a 62 65 68 61 76 69 6f 72 20  ecific.behavior 
7c90: 66 6f 72 20 61 6e 79 20 76 65 72 73 69 6f 6e 20  for any version 
7ca0: 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a  of SQLite.</p>..
7cb0: 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  <p>^The COLLATE 
7cc0: 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c  clause optionall
7cd0: 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68  y following each
7ce0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65 66   column name def
7cf0: 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67  ines a.collating
7d00: 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 66   sequence used f
7d10: 6f 72 20 74 65 78 74 20 65 6e 74 72 69 65 73 20  or text entries 
7d20: 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  in that column..
7d30: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c  ^The default col
7d40: 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20  lating.sequence 
7d50: 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  is the collating
7d60: 20 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65   sequence define
7d70: 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  d for that colum
7d80: 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45  n in the.[CREATE
7d90: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
7da0: 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f  t.  ^Or if no co
7db0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
7dc0: 20 69 73 20 6f 74 68 65 72 77 69 73 65 20 64 65   is otherwise de
7dd0: 66 69 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74  fined,.the built
7de0: 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61  -in BINARY colla
7df0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
7e00: 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   used.</p>..<p>T
7e10: 68 65 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69  here are no arbi
7e20: 74 72 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20  trary limits on 
7e30: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e  the number of in
7e40: 64 69 63 65 73 20 74 68 61 74 20 63 61 6e 20 62  dices that can b
7e50: 65 0a 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  e.attached to a 
7e60: 73 69 6e 67 6c 65 20 74 61 62 6c 65 2e 20 20 5e  single table.  ^
7e70: 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  (The number of c
7e80: 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 69 6e 64  olumns in an ind
7e90: 65 78 20 69 73 20 0a 6c 69 6d 69 74 65 64 20 74  ex is .limited t
7ea0: 6f 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 20  o the value set 
7eb0: 62 79 0a 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69  by.[sqlite3_limi
7ec0: 74 5d 28 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  t]([SQLITE_LIMIT
7ed0: 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e  _COLUMN],...).)^
7ee0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
7ef0: 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 69 64 78  agment uniqueidx
7f00: 20 7b 75 6e 69 71 75 65 20 69 6e 64 65 78 7d 3c   {unique index}<
7f10: 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66 20 74 68 65  /tcl>.<p>^If the
7f20: 20 55 4e 49 51 55 45 20 6b 65 79 77 6f 72 64 20   UNIQUE keyword 
7f30: 61 70 70 65 61 72 73 20 62 65 74 77 65 65 6e 20  appears between 
7f40: 43 52 45 41 54 45 20 61 6e 64 20 49 4e 44 45 58  CREATE and INDEX
7f50: 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65 0a   then duplicate.
7f60: 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 61 72  index entries ar
7f70: 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e 20 20  e not allowed.  
7f80: 5e 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20  ^Any attempt to 
7f90: 69 6e 73 65 72 74 20 61 20 64 75 70 6c 69 63 61  insert a duplica
7fa0: 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c 20 72 65  te entry.will re
7fb0: 73 75 6c 74 20 69 6e 20 61 6e 20 65 72 72 6f 72  sult in an error
7fc0: 2e 20 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70  .  ^For the purp
7fd0: 6f 73 65 73 20 6f 66 20 75 6e 69 71 75 65 20 69  oses of unique i
7fe0: 6e 64 69 63 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c  ndices, all NULL
7ff0: 20 76 61 6c 75 65 73 0a 61 72 65 20 63 6f 6e 73   values.are cons
8000: 69 64 65 72 65 64 20 74 6f 20 64 69 66 66 65 72  idered to differ
8010: 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68  ent from all oth
8020: 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  er NULL values a
8030: 6e 64 20 61 72 65 20 74 68 75 73 20 75 6e 69 71  nd are thus uniq
8040: 75 65 2e 0a 54 68 69 73 20 69 73 20 6f 6e 65 20  ue..This is one 
8050: 6f 66 20 74 68 65 20 74 77 6f 20 70 6f 73 73 69  of the two possi
8060: 62 6c 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  ble interpretati
8070: 6f 6e 73 20 6f 66 20 74 68 65 20 53 51 4c 2d 39  ons of the SQL-9
8080: 32 20 73 74 61 6e 64 61 72 64 0a 28 74 68 65 20  2 standard.(the 
8090: 6c 61 6e 67 75 61 67 65 20 69 6e 20 74 68 65 20  language in the 
80a0: 73 74 61 6e 64 61 72 64 20 69 73 20 61 6d 62 69  standard is ambi
80b0: 67 75 6f 75 73 29 20 61 6e 64 20 69 73 20 74 68  guous) and is th
80c0: 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
80d0: 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 50 6f 73  .followed by Pos
80e0: 74 67 72 65 53 51 4c 2c 20 4d 79 53 51 4c 2c 20  tgreSQL, MySQL, 
80f0: 46 69 72 65 62 69 72 64 2c 20 61 6e 64 20 4f 72  Firebird, and Or
8100: 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d 69 78 20  acle.  Informix 
8110: 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74 20 53 51  and.Microsoft SQ
8120: 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c 6f 77 20  L Server follow 
8130: 74 68 65 20 6f 74 68 65 72 20 69 6e 74 65 72 70  the other interp
8140: 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
8150: 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c  standard.</p>..<
8160: 70 3e 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e  p>^If the option
8170: 61 6c 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53  al IF NOT EXISTS
8180: 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
8190: 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69  nt and another i
81a0: 6e 64 65 78 0a 77 69 74 68 20 74 68 65 20 73 61  ndex.with the sa
81b0: 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20  me name already 
81c0: 65 78 69 73 74 73 2c 20 74 68 65 6e 20 74 68 69  exists, then thi
81d0: 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65  s command become
81e0: 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a  s a no-op.</p>..
81f0: 3c 70 3e 5e 49 6e 64 65 78 65 73 20 61 72 65 20  <p>^Indexes are 
8200: 72 65 6d 6f 76 65 64 20 77 69 74 68 20 74 68 65  removed with the
8210: 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 20 63 6f   [DROP INDEX] co
8220: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63  mmand.</p>...<tc
8230: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
8240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8280: 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
8290: 45 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65  E TABLE} {create
82a0: 74 61 62 6c 65 7d 20 7b 7b 43 52 45 41 54 45 20  table} {{CREATE 
82b0: 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69  TABLE}}..Recursi
82c0: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
82d0: 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73 74 6d  create-table-stm
82e0: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  t.</tcl>..<p>The
82f0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 22 20   "CREATE TABLE" 
8300: 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20  command is used 
8310: 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
8320: 74 61 62 6c 65 20 69 6e 20 61 6e 20 53 51 4c 69  table in an SQLi
8330: 74 65 20 0a 64 61 74 61 62 61 73 65 2e 20 41 20  te .database. A 
8340: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d  CREATE TABLE com
8350: 6d 61 6e 64 20 73 70 65 63 69 66 69 65 73 20 74  mand specifies t
8360: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 74 74  he following att
8370: 72 69 62 75 74 65 73 20 6f 66 20 74 68 65 0a 6e  ributes of the.n
8380: 65 77 20 74 61 62 6c 65 3a 0a 0a 3c 75 6c 3e 0a  ew table:..<ul>.
8390: 20 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 6e 61 6d    <li><p>The nam
83a0: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  e of the new tab
83b0: 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54  le...  <li><p> T
83c0: 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 77  he database in w
83d0: 68 69 63 68 20 74 68 65 20 6e 65 77 20 74 61 62  hich the new tab
83e0: 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 54  le is created. T
83f0: 61 62 6c 65 73 20 6d 61 79 20 62 65 20 0a 20 20  ables may be .  
8400: 20 20 20 20 63 72 65 61 74 65 64 20 69 6e 20 74      created in t
8410: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
8420: 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62  , the temp datab
8430: 61 73 65 2c 20 6f 72 20 69 6e 20 61 6e 79 20 61  ase, or in any a
8440: 74 74 61 63 68 65 64 0a 20 20 20 20 20 20 64 61  ttached.      da
8450: 74 61 62 61 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c  tabase...  <li><
8460: 70 3e 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 65  p> The name of e
8470: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
8480: 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  e table...  <li>
8490: 3c 70 3e 20 54 68 65 20 64 65 63 6c 61 72 65 64  <p> The declared
84a0: 20 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f   type of each co
84b0: 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c  lumn in the tabl
84c0: 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20  e...  <li><p> A 
84d0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72  default value or
84e0: 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20   expression for 
84f0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
8500: 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69  he table...  <li
8510: 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20 63  ><p> A default c
8520: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
8530: 65 20 74 6f 20 75 73 65 20 77 69 74 68 20 65 61  e to use with ea
8540: 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20 20 3c 6c  ch column...  <l
8550: 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61 6c 6c 79  i><p> Optionally
8560: 2c 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  , a PRIMARY KEY 
8570: 66 6f 72 20 74 68 65 20 74 61 62 6c 65 2e 20 42  for the table. B
8580: 6f 74 68 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  oth single colum
8590: 6e 20 61 6e 64 0a 20 20 20 20 20 20 20 63 6f 6d  n and.       com
85a0: 70 6f 73 69 74 65 20 28 6d 75 6c 74 69 70 6c 65  posite (multiple
85b0: 20 63 6f 6c 75 6d 6e 29 20 70 72 69 6d 61 72 79   column) primary
85c0: 20 6b 65 79 73 20 61 72 65 20 73 75 70 70 6f 72   keys are suppor
85d0: 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20  ted...  <li><p> 
85e0: 41 20 73 65 74 20 6f 66 20 53 51 4c 20 63 6f 6e  A set of SQL con
85f0: 73 74 72 61 69 6e 74 73 20 66 6f 72 20 65 61 63  straints for eac
8600: 68 20 74 61 62 6c 65 2e 20 53 51 4c 69 74 65 20  h table. SQLite 
8610: 73 75 70 70 6f 72 74 73 20 55 4e 49 51 55 45 2c  supports UNIQUE,
8620: 20 4e 4f 54 0a 20 20 20 20 20 20 20 4e 55 4c 4c   NOT.       NULL
8630: 2c 20 43 48 45 43 4b 20 61 6e 64 20 46 4f 52 45  , CHECK and FORE
8640: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
8650: 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20  nts...  <li><p> 
8660: 57 68 65 74 68 65 72 20 74 68 65 20 74 61 62 6c  Whether the tabl
8670: 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20  e is a [WITHOUT 
8680: 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a 3c 2f  ROWID] table..</
8690: 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 43 52  ul>..<p>Every CR
86a0: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
86b0: 6d 65 6e 74 20 6d 75 73 74 20 73 70 65 63 69 66  ment must specif
86c0: 79 20 61 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  y a name for the
86d0: 20 6e 65 77 20 74 61 62 6c 65 2e 0a 20 20 5e 28   new table..  ^(
86e0: 54 61 62 6c 65 20 6e 61 6d 65 73 20 74 68 61 74  Table names that
86f0: 20 62 65 67 69 6e 20 77 69 74 68 20 22 73 71 6c   begin with "sql
8700: 69 74 65 5f 22 20 61 72 65 20 72 65 73 65 72 76  ite_" are reserv
8710: 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20  ed for internal 
8720: 75 73 65 2e 20 49 74 0a 20 20 69 73 20 61 6e 20  use. It.  is an 
8730: 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74  error to attempt
8740: 20 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62   to create a tab
8750: 6c 65 20 77 69 74 68 20 61 20 6e 61 6d 65 20 74  le with a name t
8760: 68 61 74 20 73 74 61 72 74 73 20 77 69 74 68 0a  hat starts with.
8770: 20 20 22 73 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a    "sqlite_".)^..
8780: 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61  <p> ^If a &lt;da
8790: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
87a0: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 69 74  is specified, it
87b0: 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20   must be either 
87c0: 22 6d 61 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70  "main", .  "temp
87d0: 22 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f  ", or the name o
87e0: 66 20 61 6e 20 5b 41 54 54 41 43 48 20 44 41 54  f an [ATTACH DAT
87f0: 41 42 41 53 45 7c 61 74 74 61 63 68 65 64 20 64  ABASE|attached d
8800: 61 74 61 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68  atabase]. ^In th
8810: 69 73 20 63 61 73 65 0a 20 20 74 68 65 20 6e 65  is case.  the ne
8820: 77 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  w table is creat
8830: 65 64 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20  ed in the named 
8840: 64 61 74 61 62 61 73 65 2e 20 5e 49 66 20 74 68  database. ^If th
8850: 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d  e "TEMP" or "TEM
8860: 50 4f 52 41 52 59 22 0a 20 20 6b 65 79 77 6f 72  PORARY".  keywor
8870: 64 20 6f 63 63 75 72 73 20 62 65 74 77 65 65 6e  d occurs between
8880: 20 74 68 65 20 22 43 52 45 41 54 45 22 20 61 6e   the "CREATE" an
8890: 64 20 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74  d "TABLE" then t
88a0: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 0a  he new table is.
88b0: 20 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65    created in the
88c0: 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 2e 20   temp database. 
88d0: 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20  ^It is an error 
88e0: 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20  to specify both 
88f0: 61 20 0a 20 20 26 6c 74 3b 64 61 74 61 62 61 73  a .  &lt;databas
8900: 65 2d 6e 61 6d 65 26 67 74 3b 20 61 6e 64 20 74  e-name&gt; and t
8910: 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f  he TEMP or TEMPO
8920: 52 41 52 59 20 6b 65 79 77 6f 72 64 2c 20 75 6e  RARY keyword, un
8930: 6c 65 73 73 20 74 68 65 0a 20 20 26 6c 74 3b 64  less the.  &lt;d
8940: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
8950: 20 69 73 20 22 74 65 6d 70 22 2e 20 5e 49 66 20   is "temp". ^If 
8960: 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  no database name
8970: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
8980: 64 20 74 68 65 0a 20 20 54 45 4d 50 20 6b 65 79  d the.  TEMP key
8990: 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73  word is not pres
89a0: 65 6e 74 20 74 68 65 6e 20 74 68 65 20 74 61 62  ent then the tab
89b0: 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  le is created in
89c0: 20 74 68 65 20 6d 61 69 6e 0a 20 20 64 61 74 61   the main.  data
89d0: 62 61 73 65 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74  base...<p>.  ^It
89e0: 20 69 73 20 75 73 75 61 6c 6c 79 20 61 6e 20 65   is usually an e
89f0: 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20  rror to attempt 
8a00: 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
8a10: 74 61 62 6c 65 20 69 6e 20 61 20 64 61 74 61 62  table in a datab
8a20: 61 73 65 20 74 68 61 74 0a 20 20 61 6c 72 65 61  ase that.  alrea
8a30: 64 79 20 63 6f 6e 74 61 69 6e 73 20 61 20 74 61  dy contains a ta
8a40: 62 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20 76 69  ble, index or vi
8a50: 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e  ew of the same n
8a60: 61 6d 65 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69  ame. ^However, i
8a70: 66 20 74 68 65 0a 20 20 22 49 46 20 4e 4f 54 20  f the.  "IF NOT 
8a80: 45 58 49 53 54 53 22 20 63 6c 61 75 73 65 20 69  EXISTS" clause i
8a90: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
8aa0: 61 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54  art of the CREAT
8ab0: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
8ac0: 74 20 61 6e 64 0a 20 20 61 20 74 61 62 6c 65 20  t and.  a table 
8ad0: 6f 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73  or view of the s
8ae0: 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64 79  ame name already
8af0: 20 65 78 69 73 74 73 2c 20 74 68 65 20 43 52 45   exists, the CRE
8b00: 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e  ATE TABLE comman
8b10: 64 0a 20 20 73 69 6d 70 6c 79 20 68 61 73 20 6e  d.  simply has n
8b20: 6f 20 65 66 66 65 63 74 20 28 61 6e 64 20 6e 6f  o effect (and no
8b30: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
8b40: 73 20 72 65 74 75 72 6e 65 64 29 2e 20 5e 41 6e  s returned). ^An
8b50: 20 65 72 72 6f 72 20 69 73 20 73 74 69 6c 6c 0a   error is still.
8b60: 20 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68    returned if th
8b70: 65 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62  e table cannot b
8b80: 65 20 63 72 65 61 74 65 64 20 62 65 63 61 75 73  e created becaus
8b90: 65 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67  e of an existing
8ba0: 20 69 6e 64 65 78 2c 20 65 76 65 6e 20 0a 20 20   index, even .  
8bb0: 69 66 20 74 68 65 20 22 49 46 20 4e 4f 54 20 45  if the "IF NOT E
8bc0: 58 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73  XISTS" clause is
8bd0: 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e   specified...<p>
8be0: 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72  ^It is not an er
8bf0: 72 6f 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  ror to create a 
8c00: 74 61 62 6c 65 20 74 68 61 74 20 68 61 73 20 74  table that has t
8c10: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20  he same name as 
8c20: 61 6e 20 0a 20 20 65 78 69 73 74 69 6e 67 20 5b  an .  existing [
8c30: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 7c 74  CREATE TRIGGER|t
8c40: 72 69 67 67 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61  rigger]...<p>^Ta
8c50: 62 6c 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  bles are removed
8c60: 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50   using the [DROP
8c70: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
8c80: 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 52  t.  </p>..<h3>CR
8c90: 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41  EATE TABLE ... A
8ca0: 53 20 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65  S SELECT Stateme
8cb0: 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41  nts</h3>..<p>^(A
8cc0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e   "CREATE TABLE .
8cd0: 2e 2e 20 41 53 20 53 45 4c 45 43 54 22 20 73 74  .. AS SELECT" st
8ce0: 61 74 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20  atement creates 
8cf0: 61 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20  and populates a 
8d00: 64 61 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62  database.table b
8d10: 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75  ased on the resu
8d20: 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20  lts of a SELECT 
8d30: 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54  statement.)^ ^(T
8d40: 68 65 20 74 61 62 6c 65 20 68 61 73 20 74 68 65  he table has the
8d50: 20 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20   same.number of 
8d60: 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72  columns as the r
8d70: 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ows returned by 
8d80: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
8d90: 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f  ment. The name o
8da0: 66 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  f.each column is
8db0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
8dc0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72   name of the cor
8dd0: 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d  responding colum
8de0: 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a  n in the result.
8df0: 73 65 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43  set of the SELEC
8e00: 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e  T statement.)^ ^
8e10: 28 54 68 65 20 64 65 63 6c 61 72 65 64 20 74 79  (The declared ty
8e20: 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  pe of each colum
8e30: 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a  n is determined.
8e40: 62 79 20 74 68 65 20 5b 65 78 70 72 65 73 73 69  by the [expressi
8e50: 6f 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20  on affinity] of 
8e60: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
8e70: 67 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  g expression in 
8e80: 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f  the result set.o
8e90: 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f the SELECT sta
8ea0: 74 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f  tement, as follo
8eb0: 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  ws:.</p>..<cente
8ec0: 72 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  r><table border=
8ed0: 31 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70  1>.  <tr><th>Exp
8ee0: 72 65 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79  ression Affinity
8ef0: 20 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65     <th>Column De
8f00: 63 6c 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74  clared Type.  <t
8f10: 72 3e 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20  r><td>TEXT      
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e              <td>
8f30: 22 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64  "TEXT".  <tr><td
8f40: 3e 4e 55 4d 45 52 49 43 20 20 20 20 20 20 20 20  >NUMERIC        
8f50: 20 20 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22         <td>"NUM"
8f60: 0a 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47  .  <tr><td>INTEG
8f70: 45 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ER              
8f80: 20 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72   <td>"INT".  <tr
8f90: 3e 3c 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20  ><td>REAL       
8fa0: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
8fb0: 52 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e  REAL".  <tr><td>
8fc0: 4e 4f 4e 45 20 20 20 20 20 20 20 20 20 20 20 20  NONE            
8fd0: 20 20 20 20 20 20 3c 74 64 3e 22 22 20 28 65 6d        <td>"" (em
8fe0: 70 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61  pty string).</ta
8ff0: 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  ble></center>)^.
9000: 0a 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72  .<p>^(A table cr
9010: 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
9020: 54 45 20 54 41 42 4c 45 20 41 53 20 68 61 73 20  TE TABLE AS has 
9030: 6e 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  no PRIMARY KEY a
9040: 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74  nd no.constraint
9050: 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54  s of any kind. T
9060: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
9070: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
9080: 69 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66  is NULL. The def
9090: 61 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73  ault.collation s
90a0: 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
90b0: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e   column of the n
90c0: 65 77 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41  ew table is BINA
90d0: 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65  RY.)^..<p>^Table
90e0: 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
90f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20  CREATE TABLE AS 
9100: 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f  are initially po
9110: 70 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65  pulated with the
9120: 0a 72 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65  .rows of data re
9130: 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
9140: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
9150: 5e 52 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e  ^Rows are assign
9160: 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a  ed contiguously.
9170: 61 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64  ascending [rowid
9180: 5d 20 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69  ] values, starti
9190: 6e 67 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68  ng with 1, in th
91a0: 65 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65  e [order by|orde
91b0: 72 5d 20 74 68 61 74 20 74 68 65 79 0a 61 72 65  r] that they.are
91c0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
91d0: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
91e0: 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  t...<tcl>hd_frag
91f0: 6d 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65  ment {tablecolde
9200: 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  f} {column defin
9210: 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64  ition} {column d
9220: 65 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c  efinitions}</tcl
9230: 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66  >.<h3>Column Def
9240: 69 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c  initions</h3>..<
9250: 70 3e 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61  p>Unless it is a
9260: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e   CREATE TABLE ..
9270: 2e 20 41 53 20 53 45 4c 45 43 54 20 73 74 61 74  . AS SELECT stat
9280: 65 6d 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20  ement, a CREATE 
9290: 54 41 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f  TABLE includes.o
92a0: 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75  ne or more [colu
92b0: 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65  mn-def|column de
92c0: 66 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69  finitions], opti
92d0: 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20  onally followed 
92e0: 62 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61  by a list of.[ta
92f0: 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74  ble-constraint|t
9300: 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  able constraints
9310: 5d 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20  ].  Each column 
9320: 64 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69  definition consi
9330: 73 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20  sts of the.name 
9340: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f  of the column, o
9350: 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
9360: 65 64 20 62 79 20 74 68 65 20 64 65 63 6c 61 72  ed by the declar
9370: 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 63  ed type of the c
9380: 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20  olumn,.then one 
9390: 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c  or more optional
93a0: 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61   [column-constra
93b0: 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74  int|column const
93c0: 72 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65  raints]. Include
93d0: 64 20 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74  d in.the definit
93e0: 69 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63  ion of "column c
93f0: 6f 6e 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20  onstraints" for 
9400: 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
9410: 74 68 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61  the previous.sta
9420: 74 65 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43  tement are the C
9430: 4f 4c 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55  OLLATE and DEFAU
9440: 4c 54 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e  LT clauses, even
9450: 20 74 68 6f 75 67 68 20 74 68 65 73 65 20 61 72   though these ar
9460: 65 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e  e not really.con
9470: 73 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20  straints in the 
9480: 73 65 6e 73 65 20 74 68 61 74 20 74 68 65 79 20  sense that they 
9490: 64 6f 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20  do not restrict 
94a0: 74 68 65 20 64 61 74 61 20 74 68 61 74 20 74 68  the data that th
94b0: 65 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74  e table may.cont
94c0: 61 69 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63  ain. The other c
94d0: 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54  onstraints - NOT
94e0: 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e   NULL, CHECK, UN
94f0: 49 51 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45  IQUE, PRIMARY KE
9500: 59 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45  Y and.FOREIGN KE
9510: 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20  Y constraints - 
9520: 69 6d 70 6f 73 65 20 72 65 73 74 72 69 63 74 69  impose restricti
9530: 6f 6e 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65  ons on the table
9540: 73 20 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20  s data, and are 
9550: 61 72 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e  are.described un
9560: 64 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73  der [constraints
9570: 7c 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72  |SQL Data Constr
9580: 61 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c  aints] below...<
9590: 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53  p>^Unlike most S
95a0: 51 4c 20 64 61 74 61 62 61 73 65 73 2c 20 53 51  QL databases, SQ
95b0: 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65  Lite does not re
95c0: 73 74 72 69 63 74 20 74 68 65 20 74 79 70 65 20  strict the type 
95d0: 6f 66 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79  of data that.may
95e0: 20 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74   be inserted int
95f0: 6f 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64  o a column based
9600: 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   on the columns 
9610: 64 65 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49  declared type. I
9620: 6e 73 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75  nstead,.SQLite u
9630: 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70  ses [dynamic typ
9640: 69 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61  ing]. ^The decla
9650: 72 65 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f  red type of a co
9660: 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a  lumn is used to.
9670: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61  determine the [a
9680: 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20  ffinity] of the 
9690: 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 70  column only...<p
96a0: 3e 54 68 65 20 44 45 46 41 55 4c 54 20 63 6c 61  >The DEFAULT cla
96b0: 75 73 65 20 73 70 65 63 69 66 69 65 73 20 61 20  use specifies a 
96c0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74 6f  default value to
96d0: 20 75 73 65 20 66 6f 72 20 74 68 65 20 63 6f 6c   use for the col
96e0: 75 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c 75 65 20  umn if no.value 
96f0: 69 73 20 65 78 70 6c 69 63 69 74 6c 79 20 70 72  is explicitly pr
9700: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 75 73  ovided by the us
9710: 65 72 20 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e  er when doing an
9720: 20 5b 49 4e 53 45 52 54 5d 2e 20 5e 49 66 20 74   [INSERT]. ^If t
9730: 68 65 72 65 0a 69 73 20 6e 6f 20 65 78 70 6c 69  here.is no expli
9740: 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75  cit DEFAULT clau
9750: 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  se attached to a
9760: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
9770: 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 0a 64 65  on, then the .de
9780: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
9790: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c  he column is NUL
97a0: 4c 2e 20 5e 28 41 6e 20 65 78 70 6c 69 63 69 74  L. ^(An explicit
97b0: 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20   DEFAULT clause 
97c0: 6d 61 79 20 73 70 65 63 69 66 79 0a 74 68 61 74  may specify.that
97d0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
97e0: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 61 20 73 74  ue is NULL, a st
97f0: 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 2c 20 61  ring constant, a
9800: 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2c 20   blob constant, 
9810: 61 0a 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 2c  a.signed-number,
9820: 20 6f 72 20 61 6e 79 20 63 6f 6e 73 74 61 6e 74   or any constant
9830: 20 65 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6c   expression encl
9840: 6f 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65  osed in parenthe
9850: 73 65 73 2e 20 41 0a 64 65 66 61 75 6c 74 20 76  ses. A.default v
9860: 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20 62 65  alue may also be
9870: 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63   one of the spec
9880: 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e  ial case-indepen
9890: 64 65 6e 74 20 6b 65 79 77 6f 72 64 73 0a 43 55  dent keywords.CU
98a0: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
98b0: 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52  ENT_DATE or CURR
98c0: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e 29 5e  ENT_TIMESTAMP.)^
98d0: 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
98e0: 65 73 20 6f 66 20 74 68 65 0a 44 45 46 41 55 4c  es of the.DEFAUL
98f0: 54 20 63 6c 61 75 73 65 2c 20 61 6e 20 65 78 70  T clause, an exp
9900: 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69  ression is consi
9910: 64 65 72 65 64 20 63 6f 6e 73 74 61 6e 74 20 69  dered constant i
9920: 66 20 69 74 20 64 6f 65 73 0a 63 6f 6e 74 61 69  f it does.contai
9930: 6e 73 20 6e 6f 20 73 75 62 2d 71 75 65 72 69 65  ns no sub-querie
9940: 73 2c 20 63 6f 6c 75 6d 6e 20 6f 72 20 74 61 62  s, column or tab
9950: 6c 65 20 72 65 66 65 72 65 6e 63 65 73 2c 20 5b  le references, [
9960: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73  bound parameters
9970: 5d 2c 0a 6f 72 20 73 74 72 69 6e 67 20 6c 69 74  ],.or string lit
9980: 65 72 61 6c 73 20 65 6e 63 6c 6f 73 65 64 20 69  erals enclosed i
9990: 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20  n double-quotes 
99a0: 69 6e 73 74 65 61 64 20 6f 66 20 73 69 6e 67 6c  instead of singl
99b0: 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28  e-quotes...<p>^(
99c0: 45 61 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20  Each time a row 
99d0: 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
99e0: 20 74 68 65 20 74 61 62 6c 65 20 62 79 20 61 6e   the table by an
99f0: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
9a00: 74 20 74 68 61 74 20 0a 64 6f 65 73 20 6e 6f 74  t that .does not
9a10: 20 70 72 6f 76 69 64 65 20 65 78 70 6c 69 63 69   provide explici
9a20: 74 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c  t values for all
9a30: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 74   table columns t
9a40: 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64  he values stored
9a50: 20 69 6e 0a 74 68 65 20 6e 65 77 20 72 6f 77 20   in.the new row 
9a60: 61 72 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62  are determined b
9a70: 79 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20  y their default 
9a80: 76 61 6c 75 65 73 29 5e 2c 20 61 73 20 66 6f 6c  values)^, as fol
9a90: 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  lows:..<ul>.  <l
9aa0: 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66  i><p>^If the def
9ab0: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
9ac0: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f  e column is a co
9ad0: 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78  nstant NULL, tex
9ae0: 74 2c 20 62 6c 6f 62 20 6f 72 0a 20 20 20 20 73  t, blob or.    s
9af0: 69 67 6e 65 64 2d 6e 75 6d 62 65 72 20 76 61 6c  igned-number val
9b00: 75 65 2c 20 74 68 65 6e 20 74 68 61 74 20 76 61  ue, then that va
9b10: 6c 75 65 20 69 73 20 75 73 65 64 20 64 69 72 65  lue is used dire
9b20: 63 74 6c 79 20 69 6e 20 74 68 65 20 6e 65 77 20  ctly in the new 
9b30: 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  row...  <li><p>^
9b40: 49 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  If the default v
9b50: 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  alue of a column
9b60: 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
9b70: 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73  n in parentheses
9b80: 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20 65  , then.    the e
9b90: 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
9ba0: 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20  luated once for 
9bb0: 65 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65  each row inserte
9bc0: 64 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  d and the result
9bd0: 73 0a 20 20 20 20 75 73 65 64 20 69 6e 20 74 68  s.    used in th
9be0: 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c  e new row...  <l
9bf0: 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66  i><p>^If the def
9c00: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20  ault value of a 
9c10: 63 6f 6c 75 6d 6e 20 69 73 20 43 55 52 52 45 4e  column is CURREN
9c20: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
9c30: 44 41 54 45 20 6f 72 0a 20 20 20 20 43 55 52 52  DATE or.    CURR
9c40: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74  ENT_TIMESTAMP, t
9c50: 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 75 73  hen the value us
9c60: 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ed in the new ro
9c70: 77 20 69 73 20 61 20 74 65 78 74 0a 20 20 20 20  w is a text.    
9c80: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
9c90: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 55 54  f the current UT
9ca0: 43 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69  C date and/or ti
9cb0: 6d 65 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54  me. ^For CURRENT
9cc0: 5f 54 49 4d 45 2c 20 74 68 65 0a 20 20 20 20 66  _TIME, the.    f
9cd0: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 76 61 6c  ormat of the val
9ce0: 75 65 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22  ue is "HH:MM:SS"
9cf0: 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44  . ^For CURRENT_D
9d00: 41 54 45 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44  ATE, "YYYY-MM-DD
9d10: 22 2e 20 5e 54 68 65 0a 20 20 20 20 66 6f 72 6d  ". ^The.    form
9d20: 61 74 20 66 6f 72 20 43 55 52 52 45 4e 54 5f 54  at for CURRENT_T
9d30: 49 4d 45 53 54 41 4d 50 20 69 73 20 22 59 59 59  IMESTAMP is "YYY
9d40: 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
9d50: 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68  "..</ul>..<p>^Th
9d60: 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
9d70: 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e   specifies the n
9d80: 61 6d 65 20 6f 66 20 61 20 5b 63 6f 6c 6c 61 74  ame of a [collat
9d90: 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f  ing sequence] to
9da0: 20 75 73 65 20 61 73 0a 74 68 65 20 64 65 66 61   use as.the defa
9db0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
9dc0: 71 75 65 6e 63 65 20 66 6f 72 20 74 68 65 20 63  quence for the c
9dd0: 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f  olumn. ^If no CO
9de0: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a  LLATE clause is.
9df0: 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64  specified, the d
9e00: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
9e10: 20 73 65 71 75 65 6e 63 65 20 69 73 20 5b 42 49   sequence is [BI
9e20: 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20  NARY]...<p>^The 
9e30: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
9e40: 73 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20  s in a table is 
9e50: 6c 69 6d 69 74 65 64 20 62 79 20 74 68 65 20 5b  limited by the [
9e60: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d  SQLITE_MAX_COLUM
9e70: 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  N].compile-time 
9e80: 70 61 72 61 6d 65 74 65 72 2e 20 5e 41 20 73 69  parameter. ^A si
9e90: 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61  ngle row of a ta
9ea0: 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65  ble cannot store
9eb0: 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49   more than.[SQLI
9ec0: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62  TE_MAX_LENGTH] b
9ed0: 79 74 65 73 20 6f 66 20 64 61 74 61 2e 20 5e 42  ytes of data. ^B
9ee0: 6f 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d  oth of these lim
9ef0: 69 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72  its can be lower
9f00: 65 64 20 61 74 0a 72 75 6e 74 69 6d 65 20 75 73  ed at.runtime us
9f10: 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ing the [sqlite3
9f20: 5f 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20  _limit()] C/C++ 
9f30: 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a  interface.</p>..
9f40: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9f50: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 20 7b   {constraints} {
9f60: 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63  constraints}</tc
9f70: 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44 61 74 61 20  l>.<h3>SQL Data 
9f80: 43 6f 6e 73 74 72 61 69 6e 74 73 3c 2f 68 33 3e  Constraints</h3>
9f90: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
9fa0: 6e 74 20 70 72 69 6d 6b 65 79 63 6f 6e 73 74 20  nt primkeyconst 
9fb0: 7b 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 7b 50  {PRIMARY KEY} {P
9fc0: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
9fd0: 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  raint}</tcl>.<p>
9fe0: 5e 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53  ^Each table in S
9ff0: 51 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20 61  QLite may have a
a000: 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52  t most one <b>PR
a010: 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e  IMARY KEY</b>. ^
a020: 49 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64  If the.  keyword
a030: 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72  s PRIMARY KEY ar
a040: 65 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c  e added to a col
a050: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20  umn definition, 
a060: 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79  then the primary
a070: 20 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74   key.  for the t
a080: 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  able consists of
a090: 20 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c   that single col
a0a0: 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50  umn. ^Or, if a P
a0b0: 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73  RIMARY KEY claus
a0c0: 65 20 0a 20 20 69 73 20 73 70 65 63 69 66 69 65  e .  is specifie
a0d0: 64 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f  d as a [table-co
a0e0: 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20  nstraint], then 
a0f0: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
a100: 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63  of the table.  c
a110: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c  onsists of the l
a120: 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ist of columns s
a130: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
a140: 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20   of the PRIMARY 
a150: 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 41  KEY clause..  ^A
a160: 6e 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65  n error is raise
a170: 64 20 69 66 20 6d 6f 72 65 20 74 68 61 6e 20 6f  d if more than o
a180: 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  ne PRIMARY KEY c
a190: 6c 61 75 73 65 20 61 70 70 65 61 72 73 20 69 6e  lause appears in
a1a0: 20 61 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   a.  CREATE TABL
a1b0: 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54  E statement.  ^T
a1c0: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  he PRIMARY KEY i
a1d0: 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f 72 20 6f  s optional for o
a1e0: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 0a 20  rdinary tables. 
a1f0: 20 62 75 74 20 69 73 20 72 65 71 75 69 72 65 64   but is required
a200: 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20 52 4f   for [WITHOUT RO
a210: 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 0a 3c 70  WID] tables...<p
a220: 3e 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20  >If a table has 
a230: 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20  a single column 
a240: 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20  primary key and 
a250: 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  the declared typ
a260: 65 20 6f 66 20 74 68 61 74 0a 20 20 63 6f 6c 75  e of that.  colu
a270: 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22 20  mn is "INTEGER" 
a280: 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73  and the table is
a290: 20 6e 6f 74 20 61 20 5b 57 49 54 48 4f 55 54 20   not a [WITHOUT 
a2a0: 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 0a 20 20  ROWID] table,.  
a2b0: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
a2c0: 69 73 20 6b 6e 6f 77 6e 20 61 73 20 61 6e 20 5b  is known as an [
a2d0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
a2e0: 4b 45 59 5d 2e 0a 20 20 53 65 65 20 62 65 6c 6f  KEY]..  See belo
a2f0: 77 20 66 6f 72 20 61 20 64 65 73 63 72 69 70 74  w for a descript
a300: 69 6f 6e 20 6f 66 20 74 68 65 20 73 70 65 63 69  ion of the speci
a310: 61 6c 20 70 72 6f 70 65 72 74 69 65 73 20 61 6e  al properties an
a320: 64 20 62 65 68 61 76 69 6f 72 73 0a 20 20 61 73  d behaviors.  as
a330: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 6e  sociated with an
a340: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
a350: 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e 45 61 63  Y KEY]...<p>^Eac
a360: 68 20 72 6f 77 20 69 6e 20 61 20 74 61 62 6c 65  h row in a table
a370: 20 77 69 74 68 20 61 20 70 72 69 6d 61 72 79 20   with a primary 
a380: 6b 65 79 20 6d 75 73 74 20 68 61 76 65 20 61 20  key must have a 
a390: 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69  unique combinati
a3a0: 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69  on.  of values i
a3b0: 6e 20 69 74 73 20 70 72 69 6d 61 72 79 20 6b 65  n its primary ke
a3c0: 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e 46 6f 72 20  y columns. ^For 
a3d0: 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
a3e0: 64 65 74 65 72 6d 69 6e 69 6e 67 0a 20 20 74 68  determining.  th
a3f0: 65 20 75 6e 69 71 75 65 6e 65 73 73 20 6f 66 20  e uniqueness of 
a400: 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75  primary key valu
a410: 65 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  es, NULL values 
a420: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64  are considered d
a430: 69 73 74 69 6e 63 74 20 66 72 6f 6d 0a 20 20 61  istinct from.  a
a440: 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c  ll other values,
a450: 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72   including other
a460: 20 4e 55 4c 4c 73 2e 20 5e 49 66 20 61 6e 20 5b   NULLs. ^If an [
a470: 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41  INSERT] or [UPDA
a480: 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20  TE].  statement 
a490: 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64 69  attempts to modi
a4a0: 66 79 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e  fy the table con
a4b0: 74 65 6e 74 20 73 6f 20 74 68 61 74 20 74 77 6f  tent so that two
a4c0: 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 0a 20 20   or more rows.  
a4d0: 68 61 76 65 20 69 64 65 6e 74 69 63 61 6c 20 70  have identical p
a4e0: 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65  rimary key value
a4f0: 73 2c 20 74 68 61 74 20 69 73 20 61 20 63 6f 6e  s, that is a con
a500: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
a510: 6e 2e 0a 0a 3c 70 3e 20 41 63 63 6f 72 64 69 6e  n...<p> Accordin
a520: 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74 61  g to the SQL sta
a530: 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20 4b  ndard, PRIMARY K
a540: 45 59 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73  EY should always
a550: 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e   imply NOT NULL.
a560: 0a 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  .  Unfortunately
a570: 2c 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69  , due to a bug i
a580: 6e 20 73 6f 6d 65 20 65 61 72 6c 79 20 76 65 72  n some early ver
a590: 73 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20 6e  sions, this is n
a5a0: 6f 74 20 74 68 65 0a 20 20 63 61 73 65 20 69 6e  ot the.  case in
a5b0: 20 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73   SQLite. ^Unless
a5c0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61   the column is a
a5d0: 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n [INTEGER PRIMA
a5e0: 52 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74 68 65  RY KEY] or.  the
a5f0: 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54   table is a [WIT
a600: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
a610: 65 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e or the column 
a620: 69 73 20 64 65 63 6c 61 72 65 64 20 4e 4f 54 20  is declared NOT 
a630: 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65 20 61  NULL,.  SQLite a
a640: 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65  llows NULL value
a650: 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20 4b  s in a PRIMARY K
a660: 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c 69  EY column.  SQLi
a670: 74 65 20 63 6f 75 6c 64 20 62 65 20 66 69 78 65  te could be fixe
a680: 64 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74  d to.  conform t
a690: 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 2c 20  o the standard, 
a6a0: 62 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d 69 67  but doing so mig
a6b0: 68 74 20 62 72 65 61 6b 20 6c 65 67 61 63 79 20  ht break legacy 
a6c0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20 20  applications..  
a6d0: 48 65 6e 63 65 2c 20 69 74 20 68 61 73 20 62 65  Hence, it has be
a6e0: 65 6e 20 64 65 63 69 64 65 64 20 74 6f 20 6d 65  en decided to me
a6f0: 72 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20 74 68  rely document th
a700: 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69  e fact that SQLi
a710: 74 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20 4e 55  te.  allowing NU
a720: 4c 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52 49 4d  LLs in most PRIM
a730: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e  ARY KEY columns.
a740: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
a750: 6e 74 20 75 6e 69 71 75 65 63 6f 6e 73 74 20 7b  nt uniqueconst {
a760: 55 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75 65 20  UNIQUE} {unique 
a770: 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 55 4e 49  constraint} {UNI
a780: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c  QUE constraint}<
a790: 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55  /tcl>.<p>^A <b>U
a7a0: 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72  NIQUE</b> constr
a7b0: 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20  aint is similar 
a7c0: 74 6f 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  to a PRIMARY KEY
a7d0: 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78 63   constraint, exc
a7e0: 65 70 74 0a 20 20 74 68 61 74 20 61 20 73 69 6e  ept.  that a sin
a7f0: 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61  gle table may ha
a800: 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66  ve any number of
a810: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
a820: 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20  nts. ^For each. 
a830: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
a840: 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c  nt on the table,
a850: 20 65 61 63 68 20 72 6f 77 20 6d 75 73 74 20 63   each row must c
a860: 6f 6e 74 61 69 6e 20 61 20 75 6e 69 71 75 65 20  ontain a unique 
a870: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66  combination.  of
a880: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
a890: 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65  olumns identifie
a8a0: 64 20 62 79 20 74 68 65 20 55 4e 49 51 55 45 20  d by the UNIQUE 
a8b0: 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 20 20 5e  constraint. .  ^
a8c0: 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
a8d0: 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74   of UNIQUE const
a8e0: 72 61 69 6e 74 73 2c 20 4e 55 4c 4c 20 76 61 6c  raints, NULL val
a8f0: 75 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69 64  ues.  are consid
a900: 65 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72  ered distinct fr
a910: 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c  om all other val
a920: 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f  ues, including o
a930: 74 68 65 72 20 4e 55 4c 4c 73 2e 0a 0a 3c 70 3e  ther NULLs...<p>
a940: 5e 49 6e 20 6d 6f 73 74 20 63 61 73 65 73 2c 20  ^In most cases, 
a950: 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41  UNIQUE and PRIMA
a960: 52 59 20 4b 45 59 0a 20 20 63 6f 6e 73 74 72 61  RY KEY.  constra
a970: 69 6e 74 73 20 61 72 65 20 69 6d 70 6c 65 6d 65  ints are impleme
a980: 6e 74 65 64 20 62 79 20 63 72 65 61 74 69 6e 67  nted by creating
a990: 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 20   a unique index 
a9a0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
a9b0: 0a 20 20 28 54 68 65 20 65 78 63 65 70 74 69 6f  .  (The exceptio
a9c0: 6e 73 20 61 72 65 20 5b 49 4e 54 45 47 45 52 20  ns are [INTEGER 
a9d0: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 61 6e 64  PRIMARY KEY] and
a9e0: 20 50 52 49 4d 41 52 59 20 4b 45 59 73 20 6f 6e   PRIMARY KEYs on
a9f0: 20 0a 20 20 5b 57 49 54 48 4f 55 54 20 52 4f 57   .  [WITHOUT ROW
aa00: 49 44 5d 20 74 61 62 6c 65 73 2e 29 0a 20 20 48  ID] tables.).  H
aa10: 65 6e 63 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  ence, the follow
aa20: 69 6e 67 20 73 63 68 65 6d 61 73 20 61 72 65 20  ing schemas are 
aa30: 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61  logically equiva
aa40: 6c 65 6e 74 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20 20  lent:..  <ol>.  
aa50: 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41  <li><p>CREATE TA
aa60: 42 4c 45 20 74 31 28 61 2c 20 62 20 55 4e 49 51  BLE t1(a, b UNIQ
aa70: 55 45 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52  UE);.  <li><p>CR
aa80: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
aa90: 20 62 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b   b PRIMARY KEY);
aaa0: 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45  .  <li><p>CREATE
aab0: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b   TABLE t1(a, b);
aac0: 3c 62 72 3e 0a 20 20 20 20 20 20 20 20 20 43 52  <br>.         CR
aad0: 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45  EATE UNIQUE INDE
aae0: 58 20 74 31 62 20 4f 4e 20 74 31 28 62 29 3b 0a  X t1b ON t1(b);.
aaf0: 20 20 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64    </ol>..<tcl>hd
ab00: 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e  _fragment {ckcon
ab10: 73 74 7d 20 7b 43 48 45 43 4b 7d 20 7b 43 48 45  st} {CHECK} {CHE
ab20: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b  CK constraint} {
ab30: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
ab40: 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20  s}</tcl>.<p>^(A 
ab50: 3c 62 3e 43 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e  <b>CHECK</b> con
ab60: 73 74 72 61 69 6e 74 20 6d 61 79 20 62 65 20 61  straint may be a
ab70: 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c  ttached to a col
ab80: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  umn definition o
ab90: 72 0a 20 20 73 70 65 63 69 66 69 65 64 20 61 73  r.  specified as
aba0: 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61   a table constra
abb0: 69 6e 74 2e 20 49 6e 20 70 72 61 63 74 69 63 65  int. In practice
abc0: 20 69 74 20 6d 61 6b 65 73 20 6e 6f 20 64 69 66   it makes no dif
abd0: 66 65 72 65 6e 63 65 2e 29 5e 20 5e 28 45 61 63  ference.)^ ^(Eac
abe0: 68 0a 20 20 74 69 6d 65 20 61 20 6e 65 77 20 72  h.  time a new r
abf0: 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ow is inserted i
ac00: 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 72  nto the table or
ac10: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 72 6f 77   an existing row
ac20: 20 69 73 20 75 70 64 61 74 65 64 2c 0a 20 20 74   is updated,.  t
ac30: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  he expression as
ac40: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61  sociated with ea
ac50: 63 68 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ch CHECK constra
ac60: 69 6e 74 20 69 73 20 65 76 61 6c 75 61 74 65 64  int is evaluated
ac70: 20 61 6e 64 0a 20 20 63 61 73 74 20 74 6f 20 61   and.  cast to a
ac80: 20 4e 55 4d 45 52 49 43 20 76 61 6c 75 65 20 69   NUMERIC value i
ac90: 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
aca0: 73 20 61 20 5b 43 41 53 54 20 65 78 70 72 65 73  s a [CAST expres
acb0: 73 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 0a 20  sion]. If the . 
acc0: 20 72 65 73 75 6c 74 20 69 73 20 7a 65 72 6f 20   result is zero 
acd0: 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 30  (integer value 0
ace0: 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 30   or real value 0
acf0: 2e 30 29 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73  .0), then a cons
ad00: 74 72 61 69 6e 74 0a 20 20 76 69 6f 6c 61 74 69  traint.  violati
ad10: 6f 6e 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e  on has occurred.
ad20: 29 5e 20 5e 49 66 20 74 68 65 20 43 48 45 43 4b  )^ ^If the CHECK
ad30: 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
ad40: 75 61 74 65 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f  uates to NULL, o
ad50: 72 0a 20 20 61 6e 79 20 6f 74 68 65 72 20 6e 6f  r.  any other no
ad60: 6e 2d 7a 65 72 6f 20 76 61 6c 75 65 2c 20 69 74  n-zero value, it
ad70: 20 69 73 20 6e 6f 74 20 61 20 63 6f 6e 73 74 72   is not a constr
ad80: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a  aint violation..
ad90: 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f    ^The expressio
ada0: 6e 20 6f 66 20 61 20 43 48 45 43 4b 20 63 6f 6e  n of a CHECK con
adb0: 73 74 72 61 69 6e 74 20 6d 61 79 20 6e 6f 74 20  straint may not 
adc0: 63 6f 6e 74 61 69 6e 20 61 20 73 75 62 71 75 65  contain a subque
add0: 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ry...<tcl>hd_fra
ade0: 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75 6c 6c 63 6f  gment {notnullco
adf0: 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 7d 20  nst} {NOT NULL} 
ae00: 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72  {NOT NULL constr
ae10: 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  aint}</tcl>.<p>^
ae20: 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c 3c 2f 62  A <b>NOT NULL</b
ae30: 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79  > constraint may
ae40: 20 6f 6e 6c 79 20 62 65 20 61 74 74 61 63 68 65   only be attache
ae50: 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65  d to a column de
ae60: 66 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e 6f 74 20  finition,.  not 
ae70: 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74  specified as a t
ae80: 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e  able constraint.
ae90: 20 20 4e 6f 74 20 73 75 72 70 72 69 73 69 6e 67    Not surprising
aea0: 6c 79 2c 20 5e 28 61 20 4e 4f 54 20 4e 55 4c 4c  ly, ^(a NOT NULL
aeb0: 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 69  .  constraint di
aec0: 63 74 61 74 65 73 20 74 68 61 74 20 74 68 65 20  ctates that the 
aed0: 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6c 75 6d  associated colum
aee0: 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69  n may not contai
aef0: 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 0a  n a NULL value..
af00: 20 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20    Attempting to 
af10: 73 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76  set the column v
af20: 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 77 68 65  alue to NULL whe
af30: 6e 20 69 6e 73 65 72 74 69 6e 67 20 61 20 6e 65  n inserting a ne
af40: 77 20 72 6f 77 20 6f 72 0a 20 20 75 70 64 61 74  w row or.  updat
af50: 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ing an existing 
af60: 6f 6e 65 20 63 61 75 73 65 73 20 61 20 63 6f 6e  one causes a con
af70: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
af80: 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63 74 6c 79  n.)^..<p>Exactly
af90: 20 68 6f 77 20 61 20 63 6f 6e 73 74 72 61 69 6e   how a constrain
afa0: 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20 64  t violation is d
afb0: 65 61 6c 74 20 77 69 74 68 20 69 73 20 64 65 74  ealt with is det
afc0: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20  ermined by the. 
afd0: 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73   [conflict claus
afe0: 65 7c 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  e|constraint con
aff0: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
b000: 20 61 6c 67 6f 72 69 74 68 6d 5d 2e 20 45 61 63   algorithm]. Eac
b010: 68 20 0a 20 20 50 52 49 4d 41 52 59 20 4b 45 59  h .  PRIMARY KEY
b020: 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e 55  , UNIQUE, NOT NU
b030: 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20 63 6f 6e  LL and CHECK con
b040: 73 74 72 61 69 6e 74 20 68 61 73 20 61 20 64 65  straint has a de
b050: 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 0a 20  fault conflict. 
b060: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
b070: 72 69 74 68 6d 2e 20 5e 50 52 49 4d 41 52 59 20  rithm. ^PRIMARY 
b080: 4b 45 59 2c 20 55 4e 49 51 55 45 20 61 6e 64 20  KEY, UNIQUE and 
b090: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
b0a0: 69 6e 74 73 20 6d 61 79 20 62 65 0a 20 20 65 78  ints may be.  ex
b0b0: 70 6c 69 63 69 74 6c 79 20 61 73 73 69 67 6e 65  plicitly assigne
b0c0: 64 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e 66  d a default conf
b0d0: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
b0e0: 61 6c 67 6f 72 69 74 68 6d 20 62 79 20 69 6e 63  algorithm by inc
b0f0: 6c 75 64 69 6e 67 0a 20 20 61 20 5b 63 6f 6e 66  luding.  a [conf
b100: 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 69 6e 20  lict-clause] in 
b110: 74 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f 6e  their definition
b120: 73 2e 20 5e 4f 72 2c 20 69 66 20 61 20 63 6f 6e  s. ^Or, if a con
b130: 73 74 72 61 69 6e 74 20 64 65 66 69 6e 69 74 69  straint definiti
b140: 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f 74 20 69 6e  on.  does not in
b150: 63 6c 75 64 65 20 61 20 5b 63 6f 6e 66 6c 69 63  clude a [conflic
b160: 74 2d 63 6c 61 75 73 65 5d 20 6f 72 20 69 74 20  t-clause] or it 
b170: 69 73 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74  is a CHECK const
b180: 72 61 69 6e 74 2c 20 74 68 65 20 64 65 66 61 75  raint, the defau
b190: 6c 74 0a 20 20 63 6f 6e 66 6c 69 63 74 20 72 65  lt.  conflict re
b1a0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
b1b0: 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 5e 44 69  hm is ABORT. ^Di
b1c0: 66 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69  fferent constrai
b1d0: 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a 20  nts within the. 
b1e0: 20 73 61 6d 65 20 74 61 62 6c 65 20 6d 61 79 20   same table may 
b1f0: 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 20 64  have different d
b200: 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20  efault conflict 
b210: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
b220: 69 74 68 6d 73 2e 20 53 65 65 0a 20 20 74 68 65  ithms. See.  the
b230: 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 20   section titled 
b240: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f  [ON CONFLICT] fo
b250: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
b260: 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e  ormation...<tcl>
b270: 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 77 69  hd_fragment rowi
b280: 64 20 7b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  d {INTEGER PRIMA
b290: 52 59 20 4b 45 59 7d 20 52 4f 57 49 44 20 72 6f  RY KEY} ROWID ro
b2a0: 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 4f  wid</tcl>.<h3>RO
b2b0: 57 49 44 73 20 61 6e 64 20 74 68 65 20 49 4e 54  WIDs and the INT
b2c0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
b2d0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 78 63 65 70  </h3>..<p>^Excep
b2e0: 74 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20 52  t for [WITHOUT R
b2f0: 4f 57 49 44 5d 20 74 61 62 6c 65 73 2c 20 61 6c  OWID] tables, al
b300: 6c 20 72 6f 77 73 20 77 69 74 68 69 6e 20 53 51  l rows within SQ
b310: 4c 69 74 65 20 74 61 62 6c 65 73 0a 68 61 76 65  Lite tables.have
b320: 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64   a 64-bit signed
b330: 20 69 6e 74 65 67 65 72 20 6b 65 79 20 74 68 61   integer key tha
b340: 74 20 75 6e 69 71 75 65 6c 79 20 69 64 65 6e 74  t uniquely ident
b350: 69 66 69 65 73 20 74 68 65 20 72 6f 77 20 77 69  ifies the row wi
b360: 74 68 69 6e 20 69 74 73 20 74 61 62 6c 65 2e 0a  thin its table..
b370: 54 68 69 73 20 69 6e 74 65 67 65 72 20 69 73 20  This integer is 
b380: 75 73 75 61 6c 6c 79 0a 63 61 6c 6c 65 64 20 74  usually.called t
b390: 68 65 20 22 72 6f 77 69 64 22 2e 20 5e 54 68 65  he "rowid". ^The
b3a0: 20 72 6f 77 69 64 20 76 61 6c 75 65 20 63 61 6e   rowid value can
b3b0: 20 62 65 20 61 63 63 65 73 73 65 64 20 75 73 69   be accessed usi
b3c0: 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70  ng one of the sp
b3d0: 65 63 69 61 6c 0a 63 61 73 65 2d 69 6e 64 65 70  ecial.case-indep
b3e0: 65 6e 64 65 6e 74 20 6e 61 6d 65 73 20 22 72 6f  endent names "ro
b3f0: 77 69 64 22 2c 20 22 6f 69 64 22 2c 20 6f 72 20  wid", "oid", or 
b400: 22 5f 72 6f 77 69 64 5f 22 20 69 6e 20 70 6c 61  "_rowid_" in pla
b410: 63 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  ce of a column n
b420: 61 6d 65 2e 0a 5e 49 66 20 61 20 74 61 62 6c 65  ame..^If a table
b430: 20 63 6f 6e 74 61 69 6e 73 20 61 20 75 73 65 72   contains a user
b440: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
b450: 6e 61 6d 65 64 20 22 72 6f 77 69 64 22 2c 20 22  named "rowid", "
b460: 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f  oid" or "_rowid_
b470: 22 2c 0a 74 68 65 6e 20 74 68 61 74 20 6e 61 6d  ",.then that nam
b480: 65 20 61 6c 77 61 79 73 20 72 65 66 65 72 73 20  e always refers 
b490: 74 68 65 20 65 78 70 6c 69 63 69 74 6c 79 20 64  the explicitly d
b4a0: 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20 61  eclared column a
b4b0: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65  nd cannot be use
b4c0: 64 0a 74 6f 20 72 65 74 72 69 65 76 65 20 74 68  d.to retrieve th
b4d0: 65 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 20  e integer rowid 
b4e0: 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54 68 65 20 72  value...<p>The r
b4f0: 6f 77 69 64 20 28 61 6e 64 20 22 6f 69 64 22 20  owid (and "oid" 
b500: 61 6e 64 20 22 5f 72 6f 77 69 64 5f 22 29 20 69  and "_rowid_") i
b510: 73 20 6f 6d 69 74 74 65 64 20 69 6e 20 5b 57 49  s omitted in [WI
b520: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
b530: 6c 65 73 2e 0a 57 49 54 48 4f 55 54 20 52 4f 57  les..WITHOUT ROW
b540: 49 44 20 74 61 62 6c 65 73 20 61 72 65 20 6f 6e  ID tables are on
b550: 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20  ly available in 
b560: 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e 20  SQLite [version 
b570: 33 2e 38 2e 32 5d 20 61 6e 64 20 6c 61 74 65 72  3.8.2] and later
b580: 2e 0a 41 20 74 61 62 6c 65 20 74 68 61 74 20 6c  ..A table that l
b590: 61 63 6b 73 20 74 68 65 20 57 49 54 48 4f 55 54  acks the WITHOUT
b5a0: 20 52 4f 57 49 44 20 63 6c 61 75 73 65 20 69 73   ROWID clause is
b5b0: 20 63 61 6c 6c 65 64 20 61 20 22 72 6f 77 69 64   called a "rowid
b5c0: 20 74 61 62 6c 65 22 2e 0a 0a 3c 70 3e 54 68 65   table"...<p>The
b5d0: 20 64 61 74 61 20 66 6f 72 20 72 6f 77 69 64 20   data for rowid 
b5e0: 74 61 62 6c 65 73 20 69 73 20 73 74 6f 72 65 64  tables is stored
b5f0: 20 61 73 20 61 20 42 2d 54 72 65 65 20 73 74 72   as a B-Tree str
b600: 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e  ucture containin
b610: 67 0a 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  g.one entry for 
b620: 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 2c 20  each table row, 
b630: 75 73 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  using the rowid 
b640: 76 61 6c 75 65 20 61 73 20 74 68 65 20 6b 65 79  value as the key
b650: 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61  . This means tha
b660: 74 0a 72 65 74 72 69 65 76 69 6e 67 20 6f 72 20  t.retrieving or 
b670: 73 6f 72 74 69 6e 67 20 72 65 63 6f 72 64 73 20  sorting records 
b680: 62 79 20 72 6f 77 69 64 20 69 73 20 66 61 73 74  by rowid is fast
b690: 2e 20 53 65 61 72 63 68 69 6e 67 20 66 6f 72 20  . Searching for 
b6a0: 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 61 0a  a record with a.
b6b0: 73 70 65 63 69 66 69 63 20 72 6f 77 69 64 2c 20  specific rowid, 
b6c0: 6f 72 20 66 6f 72 20 61 6c 6c 20 72 65 63 6f 72  or for all recor
b6d0: 64 73 20 77 69 74 68 20 72 6f 77 69 64 73 20 77  ds with rowids w
b6e0: 69 74 68 69 6e 20 61 20 73 70 65 63 69 66 69 65  ithin a specifie
b6f0: 64 20 72 61 6e 67 65 20 69 73 0a 61 72 6f 75 6e  d range is.aroun
b700: 64 20 74 77 69 63 65 20 61 73 20 66 61 73 74 20  d twice as fast 
b710: 61 73 20 61 20 73 69 6d 69 6c 61 72 20 73 65 61  as a similar sea
b720: 72 63 68 20 6d 61 64 65 20 62 79 20 73 70 65 63  rch made by spec
b730: 69 66 79 69 6e 67 20 61 6e 79 20 6f 74 68 65 72  ifying any other
b740: 20 50 52 49 4d 41 52 59 0a 4b 45 59 20 6f 72 20   PRIMARY.KEY or 
b750: 69 6e 64 65 78 65 64 20 76 61 6c 75 65 2e 0a 0a  indexed value...
b760: 3c 70 3e 20 5e 57 69 74 68 20 6f 6e 65 20 65 78  <p> ^With one ex
b770: 63 65 70 74 69 6f 6e 20 6e 6f 74 65 64 20 62 65  ception noted be
b780: 6c 6f 77 2c 20 69 66 20 61 20 72 6f 77 69 64 20  low, if a rowid 
b790: 74 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d  table has a prim
b7a0: 61 72 79 20 6b 65 79 20 74 68 61 74 20 63 6f 6e  ary key that con
b7b0: 73 69 73 74 73 0a 6f 66 20 61 20 73 69 6e 67 6c  sists.of a singl
b7c0: 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65  e column and the
b7d0: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f   declared type o
b7e0: 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73  f that column is
b7f0: 20 22 49 4e 54 45 47 45 52 22 20 69 6e 20 61 6e   "INTEGER" in an
b800: 79 20 6d 69 78 74 75 72 65 20 6f 66 0a 75 70 70  y mixture of.upp
b810: 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63 61 73  er and lower cas
b820: 65 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75  e, then the colu
b830: 6d 6e 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c  mn becomes an al
b840: 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69  ias for the rowi
b850: 64 2e 20 53 75 63 68 20 61 0a 63 6f 6c 75 6d 6e  d. Such a.column
b860: 20 69 73 20 75 73 75 61 6c 6c 79 20 72 65 66 65   is usually refe
b870: 72 72 65 64 20 74 6f 20 61 73 20 61 6e 20 22 69  rred to as an "i
b880: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
b890: 65 79 22 2e 20 41 20 50 52 49 4d 41 52 59 20 4b  ey". A PRIMARY K
b8a0: 45 59 20 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79 20 62  EY column.only b
b8b0: 65 63 6f 6d 65 73 20 61 6e 20 69 6e 74 65 67 65  ecomes an intege
b8c0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 66  r primary key if
b8d0: 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79   the declared ty
b8e0: 70 65 20 6e 61 6d 65 20 69 73 20 65 78 61 63 74  pe name is exact
b8f0: 6c 79 0a 22 49 4e 54 45 47 45 52 22 2e 20 20 5e  ly."INTEGER".  ^
b900: 4f 74 68 65 72 20 69 6e 74 65 67 65 72 20 74 79  Other integer ty
b910: 70 65 20 6e 61 6d 65 73 20 6c 69 6b 65 20 22 49  pe names like "I
b920: 4e 54 22 20 6f 72 20 22 42 49 47 49 4e 54 22 20  NT" or "BIGINT" 
b930: 6f 72 20 22 53 48 4f 52 54 20 49 4e 54 45 47 45  or "SHORT INTEGE
b940: 52 22 0a 6f 72 20 22 55 4e 53 49 47 4e 45 44 20  R".or "UNSIGNED 
b950: 49 4e 54 45 47 45 52 22 20 63 61 75 73 65 73 20  INTEGER" causes 
b960: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
b970: 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68 61 76 65  column to behave
b980: 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 0a   as an ordinary.
b990: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77 69 74  table column wit
b9a0: 68 20 69 6e 74 65 67 65 72 20 5b 61 66 66 69 6e  h integer [affin
b9b0: 69 74 79 5d 20 61 6e 64 20 61 20 75 6e 69 71 75  ity] and a uniqu
b9c0: 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 61 73 20  e index, not as 
b9d0: 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65  an alias for.the
b9e0: 20 72 6f 77 69 64 2e 0a 0a 3c 70 3e 20 54 68 65   rowid...<p> The
b9f0: 20 65 78 63 65 70 74 69 6f 6e 20 6d 65 6e 74 69   exception menti
ba00: 6f 6e 65 64 20 61 62 6f 76 65 20 69 73 20 74 68  oned above is th
ba10: 61 74 20 5e 69 66 20 74 68 65 20 64 65 63 6c 61  at ^if the decla
ba20: 72 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75  ration of a colu
ba30: 6d 6e 20 77 69 74 68 0a 64 65 63 6c 61 72 65 64  mn with.declared
ba40: 20 74 79 70 65 20 22 49 4e 54 45 47 45 52 22 20   type "INTEGER" 
ba50: 69 6e 63 6c 75 64 65 73 20 61 6e 20 22 50 52 49  includes an "PRI
ba60: 4d 41 52 59 20 4b 45 59 20 44 45 53 43 22 20 63  MARY KEY DESC" c
ba70: 6c 61 75 73 65 2c 20 69 74 20 64 6f 65 73 20 6e  lause, it does n
ba80: 6f 74 0a 62 65 63 6f 6d 65 20 61 6e 20 61 6c 69  ot.become an ali
ba90: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
baa0: 20 61 6e 64 20 69 73 20 6e 6f 74 20 63 6c 61 73   and is not clas
bab0: 73 69 66 69 65 64 20 61 73 20 61 6e 20 69 6e 74  sified as an int
bac0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
bad0: 2e 0a 54 68 69 73 20 71 75 69 72 6b 20 69 73 20  ..This quirk is 
bae0: 6e 6f 74 20 62 79 20 64 65 73 69 67 6e 2e 20 49  not by design. I
baf0: 74 20 69 73 20 64 75 65 20 74 6f 20 61 20 62 75  t is due to a bu
bb00: 67 20 69 6e 20 65 61 72 6c 79 20 76 65 72 73 69  g in early versi
bb10: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 0a 42  ons of SQLite..B
bb20: 75 74 20 66 69 78 69 6e 67 20 74 68 65 20 62 75  ut fixing the bu
bb30: 67 20 63 6f 75 6c 64 20 72 65 73 75 6c 74 20 69  g could result i
bb40: 6e 20 62 61 63 6b 77 61 72 64 73 20 69 6e 63 6f  n backwards inco
bb50: 6d 70 61 74 69 62 69 6c 69 74 69 65 73 2e 0a 48  mpatibilities..H
bb60: 65 6e 63 65 2c 20 74 68 65 20 6f 72 69 67 69 6e  ence, the origin
bb70: 61 6c 20 62 65 68 61 76 69 6f 72 20 68 61 73 20  al behavior has 
bb80: 62 65 65 6e 20 72 65 74 61 69 6e 65 64 20 28 61  been retained (a
bb90: 6e 64 20 64 6f 63 75 6d 65 6e 74 65 64 29 20 62  nd documented) b
bba0: 65 63 61 75 73 65 20 6f 64 64 0a 62 65 68 61 76  ecause odd.behav
bbb0: 69 6f 72 20 69 6e 20 61 20 63 6f 72 6e 65 72 20  ior in a corner 
bbc0: 63 61 73 65 20 69 73 20 66 61 72 20 62 65 74 74  case is far bett
bbd0: 65 72 20 74 68 61 6e 20 61 20 63 6f 6d 70 61 74  er than a compat
bbe0: 69 62 69 6c 69 74 79 20 62 72 65 61 6b 2e 20 20  ibility break.  
bbf0: 54 68 69 73 20 6d 65 61 6e 73 0a 74 68 61 74 20  This means.that 
bc00: 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ^(the following 
bc10: 74 68 72 65 65 20 74 61 62 6c 65 20 64 65 63 6c  three table decl
bc20: 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75  arations all cau
bc30: 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78  se the column "x
bc40: 22 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69 61 73  " to be an.alias
bc50: 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 28   for the rowid (
bc60: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
bc70: 72 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e 0a 3c  ry key):..<ul>.<
bc80: 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41  li><tt>CREATE TA
bc90: 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 20  BLE t(x INTEGER 
bca0: 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c  PRIMARY KEY ASC,
bcb0: 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 6c 69   y, z);</tt>.<li
bcc0: 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c  ><tt>CREATE TABL
bcd0: 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79  E t(x INTEGER, y
bce0: 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  , z, PRIMARY KEY
bcf0: 28 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c  (x ASC));</tt>.<
bd00: 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41  li><tt>CREATE TA
bd10: 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c  BLE t(x INTEGER,
bd20: 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b   y, z, PRIMARY K
bd30: 45 59 28 78 20 44 45 53 43 29 29 3b 3c 2f 74 74  EY(x DESC));</tt
bd40: 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 42 75  >.</ul>)^..<p>Bu
bd50: 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  t ^(the followin
bd60: 67 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 64 6f  g declaration do
bd70: 65 73 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e  es not result in
bd80: 20 22 78 22 20 62 65 69 6e 67 20 61 6e 20 61 6c   "x" being an al
bd90: 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69  ias for.the rowi
bda0: 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e  d:.<ul>.<li><tt>
bdb0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78  CREATE TABLE t(x
bdc0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
bdd0: 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29   KEY DESC, y, z)
bde0: 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a  ;</tt>.</ul>)^..
bdf0: 3c 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75 65 73  <p>^Rowid values
be00: 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69 65 64   may be modified
be10: 20 75 73 69 6e 67 20 61 6e 20 55 50 44 41 54 45   using an UPDATE
be20: 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68   statement in th
be30: 65 20 73 61 6d 65 0a 77 61 79 20 61 73 20 61 6e  e same.way as an
be40: 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 20 76  y other column v
be50: 61 6c 75 65 20 63 61 6e 2c 20 65 69 74 68 65 72  alue can, either
be60: 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68   using one of th
be70: 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69 61 73  e built-in alias
be80: 65 73 0a 28 22 72 6f 77 69 64 22 2c 20 22 6f 69  es.("rowid", "oi
be90: 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 29  d" or "_rowid_")
bea0: 20 6f 72 20 62 79 20 75 73 69 6e 67 20 61 6e 20   or by using an 
beb0: 61 6c 69 61 73 20 63 72 65 61 74 65 64 20 62 79  alias created by
bec0: 20 61 6e 20 69 6e 74 65 67 65 72 0a 70 72 69 6d   an integer.prim
bed0: 61 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69 6c 61  ary key. ^Simila
bee0: 72 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54 20 73  rly, an INSERT s
bef0: 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 70 72 6f  tatement may pro
bf00: 76 69 64 65 20 61 20 76 61 6c 75 65 20 74 6f 20  vide a value to 
bf10: 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77 69 64  use as the.rowid
bf20: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
bf30: 73 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69 6b 65  serted. ^(Unlike
bf40: 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65 20 63   normal SQLite c
bf50: 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74 65 67  olumns, an integ
bf60: 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f  er primary.key o
bf70: 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d  r rowid column m
bf80: 75 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65  ust contain inte
bf90: 67 65 72 20 76 61 6c 75 65 73 2e 20 49 6e 74 65  ger values. Inte
bfa0: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
bfb0: 6f 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d 6e 73  or rowid.columns
bfc0: 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f   are not able to
bfd0: 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70   hold floating p
bfe0: 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20 73 74 72  oint values, str
bff0: 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20  ings, BLOBs, or 
c000: 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66  NULLs.)^..<p>^If
c010: 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
c020: 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f  ment attempts to
c030: 20 73 65 74 20 61 6e 20 69 6e 74 65 67 65 72 20   set an integer 
c040: 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72  primary key or r
c050: 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f 20 61  owid column.to a
c060: 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20 76 61   NULL or blob va
c070: 6c 75 65 2c 20 6f 72 20 74 6f 20 61 20 73 74 72  lue, or to a str
c080: 69 6e 67 20 6f 72 20 72 65 61 6c 20 76 61 6c 75  ing or real valu
c090: 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65  e that cannot be
c0a0: 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76   losslessly.conv
c0b0: 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
c0c0: 67 65 72 2c 20 61 20 22 64 61 74 61 74 79 70 65  ger, a "datatype
c0d0: 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72   mismatch" error
c0e0: 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 20   occurs and the 
c0f0: 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 61 62 6f  statement.is abo
c100: 72 74 65 64 2e 20 5e 49 66 20 61 6e 20 49 4e 53  rted. ^If an INS
c110: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74  ERT statement at
c120: 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74  tempts to insert
c130: 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f   a blob value, o
c140: 72 20 61 20 73 74 72 69 6e 67 0a 6f 72 20 72 65  r a string.or re
c150: 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63 61  al value that ca
c160: 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73  nnot be lossless
c170: 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly converted to 
c180: 61 6e 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20  an integer into 
c190: 61 6e 0a 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an.integer prima
c1a0: 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20  ry key or rowid 
c1b0: 63 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74 61 74  column, a "datat
c1c0: 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72  ype mismatch" er
c1d0: 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74  ror occurs and t
c1e0: 68 65 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20  he.statement is 
c1f0: 61 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66  aborted...<p>^If
c200: 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
c210: 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f  ment attempts to
c220: 20 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c 20 76   insert a NULL v
c230: 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f 77 69  alue into a rowi
c240: 64 20 6f 72 0a 69 6e 74 65 67 65 72 20 70 72 69  d or.integer pri
c250: 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 2c  mary key column,
c260: 20 74 68 65 20 73 79 73 74 65 6d 20 63 68 6f 6f   the system choo
c270: 73 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76  ses an integer v
c280: 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20 74  alue to use as t
c290: 68 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d 61 74  he.rowid automat
c2a0: 69 63 61 6c 6c 79 2e 20 41 20 64 65 74 61 69 6c  ically. A detail
c2b0: 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  ed description o
c2c0: 66 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f  f how this is do
c2d0: 6e 65 20 69 73 20 70 72 6f 76 69 64 65 64 0a 3c  ne is provided.<
c2e0: 61 20 68 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e  a href="autoinc.
c2f0: 68 74 6d 6c 22 3e 73 65 70 61 72 61 74 65 6c 79  html">separately
c300: 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  </a>.</p>..<p>^(
c310: 54 68 65 20 5b 70 61 72 65 6e 74 20 6b 65 79 5d  The [parent key]
c320: 20 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e 20 6b   of a [foreign k
c330: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20 69  ey constraint] i
c340: 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f  s not allowed to
c350: 0a 75 73 65 20 74 68 65 20 72 6f 77 69 64 2e 20  .use the rowid. 
c360: 20 54 68 65 20 70 61 72 65 6e 74 20 6b 65 79 20   The parent key 
c370: 6d 75 73 74 20 75 73 65 64 20 6e 61 6d 65 64 20  must used named 
c380: 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29 5e 3c  columns only.)^<
c390: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
c3a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c3b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c3c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c3d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c3e0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
c3f0: 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47 47 45  n {CREATE TRIGGE
c400: 52 7d 20 63 72 65 61 74 65 74 72 69 67 67 65 72  R} createtrigger
c410: 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47 45   {{CREATE TRIGGE
c420: 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  R}}..RecursiveBu
c430: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
c440: 74 65 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 0a  te-trigger-stmt.
c450: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
c460: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
c470: 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
c480: 20 74 6f 20 61 64 64 20 74 72 69 67 67 65 72 73   to add triggers
c490: 20 74 6f 20 74 68 65 20 0a 64 61 74 61 62 61 73   to the .databas
c4a0: 65 20 73 63 68 65 6d 61 2e 20 5e 54 72 69 67 67  e schema. ^Trigg
c4b0: 65 72 73 20 61 72 65 20 64 61 74 61 62 61 73 65  ers are database
c4c0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a 74 68 61   operations .tha
c4d0: 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  t are automatica
c4e0: 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77 68  lly performed wh
c4f0: 65 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 64  en a specified d
c500: 61 74 61 62 61 73 65 20 65 76 65 6e 74 0a 6f 63  atabase event.oc
c510: 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e  curs.  </p>..<p>
c520: 5e 41 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  ^A trigger may b
c530: 65 20 73 70 65 63 69 66 69 65 64 20 74 6f 20 66  e specified to f
c540: 69 72 65 20 77 68 65 6e 65 76 65 72 20 61 20 5b  ire whenever a [
c550: 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54  DELETE], [INSERT
c560: 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f  ],.or [UPDATE] o
c570: 66 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20 64  f a.particular d
c580: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 63  atabase table oc
c590: 63 75 72 73 2c 20 6f 72 20 77 68 65 6e 65 76 65  curs, or wheneve
c5a0: 72 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63  r an [UPDATE] oc
c5b0: 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f  curs on.on one o
c5c0: 72 20 6d 6f 72 65 20 73 70 65 63 69 66 69 65 64  r more specified
c5d0: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61   columns of a ta
c5e0: 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74  ble.</p>..<p>^At
c5f0: 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c 69 74   this time SQLit
c600: 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20  e supports only 
c610: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74 72 69  FOR EACH ROW tri
c620: 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45  ggers, not FOR E
c630: 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20 74 72  ACH.STATEMENT tr
c640: 69 67 67 65 72 73 2e 20 5e 48 65 6e 63 65 20 65  iggers. ^Hence e
c650: 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69 66  xplicitly specif
c660: 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52 4f  ying FOR EACH RO
c670: 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e  W is optional..^
c680: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 6d 70  FOR EACH ROW imp
c690: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 53 51  lies that the SQ
c6a0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
c6b0: 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 74 72  cified in the tr
c6c0: 69 67 67 65 72 0a 6d 61 79 20 62 65 20 65 78 65  igger.may be exe
c6d0: 63 75 74 65 64 20 28 64 65 70 65 6e 64 69 6e 67  cuted (depending
c6e0: 20 6f 6e 20 74 68 65 20 57 48 45 4e 20 63 6c 61   on the WHEN cla
c6f0: 75 73 65 29 20 66 6f 72 20 65 61 63 68 20 64 61  use) for each da
c700: 74 61 62 61 73 65 20 72 6f 77 20 62 65 69 6e 67  tabase row being
c710: 0a 69 6e 73 65 72 74 65 64 2c 20 75 70 64 61 74  .inserted, updat
c720: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79  ed or deleted by
c730: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
c740: 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67  ausing the trigg
c750: 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a  er to fire.</p>.
c760: 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68 65 20 57  .<p>^(Both the W
c770: 48 45 4e 20 63 6c 61 75 73 65 20 61 6e 64 20 74  HEN clause and t
c780: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
c790: 6e 73 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c  ns may access el
c7a0: 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72  ements of .the r
c7b0: 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65  ow being inserte
c7c0: 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70  d, deleted or up
c7d0: 64 61 74 65 64 20 75 73 69 6e 67 20 72 65 66 65  dated using refe
c7e0: 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f  rences of the fo
c7f0: 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75  rm ."NEW.<i>colu
c800: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64  mn-name</i>" and
c810: 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d   "OLD.<i>column-
c820: 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65  name</i>", where
c830: 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
c840: 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  /i> is the name 
c850: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  of a column from
c860: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
c870: 74 68 65 20 74 72 69 67 67 65 72 0a 69 73 20 61  the trigger.is a
c880: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 29  ssociated with.)
c890: 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20  ^ ^(OLD and NEW 
c8a0: 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f  references may o
c8b0: 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 74  nly be used in t
c8c0: 72 69 67 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74  riggers on.event
c8d0: 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 79  s for which they
c8e0: 20 61 72 65 20 72 65 6c 65 76 61 6e 74 2c 20 61   are relevant, a
c8f0: 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
c900: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
c910: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a  cellpadding=10>.
c920: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
c930: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
c940: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
c950: 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e  >INSERT</i></td>
c960: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
c970: 22 3e 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73  ">NEW references
c980: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
c990: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  </tr>.<tr>.<td v
c9a0: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
c9b0: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
c9c0: 31 32 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69  120><i>UPDATE</i
c9d0: 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  ></td>.<td valig
c9e0: 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20  n="top">NEW and 
c9f0: 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61  OLD references a
ca00: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
ca10: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  tr>.<tr>.<td val
ca20: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
ca30: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
ca40: 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c  0><i>DELETE</i><
ca50: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
ca60: 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72 65  "top">OLD refere
ca70: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
ca80: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  td>.</tr>.</tabl
ca90: 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49  e>.</p>)^..<p>^I
caa0: 66 20 61 20 57 48 45 4e 20 63 6c 61 75 73 65 20  f a WHEN clause 
cab0: 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65  is supplied, the
cac0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
cad0: 73 70 65 63 69 66 69 65 64 0a 61 72 65 20 6f 6e  specified.are on
cae0: 6c 79 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  ly executed for 
caf0: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
cb00: 68 65 20 57 48 45 4e 0a 63 6c 61 75 73 65 20 69  he WHEN.clause i
cb10: 73 20 74 72 75 65 2e 20 5e 49 66 20 6e 6f 20 57  s true. ^If no W
cb20: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
cb30: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
cb40: 73 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 65  statements.are e
cb50: 78 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20  xecuted for all 
cb60: 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  rows.</p>..<p>^T
cb70: 68 65 20 42 45 46 4f 52 45 20 6f 72 20 41 46 54  he BEFORE or AFT
cb80: 45 52 20 6b 65 79 77 6f 72 64 20 64 65 74 65 72  ER keyword deter
cb90: 6d 69 6e 65 73 20 77 68 65 6e 20 74 68 65 20 74  mines when the t
cba0: 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 0a 77  rigger actions.w
cbb0: 69 6c 6c 20 62 65 20 65 78 65 63 75 74 65 64 20  ill be executed 
cbc0: 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20  relative to the 
cbd0: 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66  insertion, modif
cbe0: 69 63 61 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76  ication or remov
cbf0: 61 6c 20 6f 66 20 74 68 65 0a 61 73 73 6f 63 69  al of the.associ
cc00: 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c  ated row.</p>..<
cc10: 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49  p>^An [ON CONFLI
cc20: 43 54 5d 20 63 6c 61 75 73 65 20 6d 61 79 20 62  CT] clause may b
cc30: 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  e specified as p
cc40: 61 72 74 20 6f 66 20 61 6e 20 5b 55 50 44 41 54  art of an [UPDAT
cc50: 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61  E] or [INSERT].a
cc60: 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 74 68 65  ction within the
cc70: 20 62 6f 64 79 20 6f 66 20 74 68 65 20 74 72 69   body of the tri
cc80: 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69  gger..^However i
cc90: 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  f an [ON CONFLIC
cca0: 54 5d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  T] clause is spe
ccb0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
ccc0: 66 20 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74  f .the statement
ccd0: 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69   causing the tri
cce0: 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68  gger to fire, th
ccf0: 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64  en conflict hand
cd00: 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74  ling.policy of t
cd10: 68 65 20 6f 75 74 65 72 20 73 74 61 74 65 6d 65  he outer stateme
cd20: 6e 74 20 69 73 20 75 73 65 64 20 69 6e 73 74 65  nt is used inste
cd30: 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69  ad.</p>..<p>^Tri
cd40: 67 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61  ggers are automa
cd50: 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52  tically [DROP TR
cd60: 49 47 47 45 52 20 7c 20 64 72 6f 70 70 65 64 5d  IGGER | dropped]
cd70: 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20  .when the table 
cd80: 74 68 61 74 20 74 68 65 79 20 61 72 65 20 0a 61  that they are .a
cd90: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 28  ssociated with (
cda0: 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d  the <i>table-nam
cdb0: 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20 69 73 20  e</i> table) is 
cdc0: 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64  .[DROP TABLE | d
cdd0: 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76  ropped].  ^Howev
cde0: 65 72 20 69 66 20 74 68 65 20 74 72 69 67 67 65  er if the trigge
cdf0: 72 20 61 63 74 69 6f 6e 73 20 72 65 66 65 72 65  r actions refere
ce00: 6e 63 65 0a 6f 74 68 65 72 20 74 61 62 6c 65 73  nce.other tables
ce10: 2c 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  , the trigger is
ce20: 20 6e 6f 74 20 64 72 6f 70 70 65 64 20 6f 72 20   not dropped or 
ce30: 6d 6f 64 69 66 69 65 64 20 69 66 20 74 68 6f 73  modified if thos
ce40: 65 20 6f 74 68 65 72 0a 74 61 62 6c 65 73 20 61  e other.tables a
ce50: 72 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c  re [DROP TABLE |
ce60: 20 64 72 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c   dropped] or [AL
ce70: 54 45 52 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69  TER TABLE | modi
ce80: 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  fied].</p>..<p>^
ce90: 54 72 69 67 67 65 72 73 20 61 72 65 20 72 65 6d  Triggers are rem
cea0: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
ceb0: 44 52 4f 50 20 54 52 49 47 47 45 52 5d 20 73 74  DROP TRIGGER] st
cec0: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68  atement.</p>..<h
ced0: 33 3e 53 79 6e 74 61 78 20 52 65 73 74 72 69 63  3>Syntax Restric
cee0: 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c  tions On UPDATE,
cef0: 20 44 45 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53   DELETE, and INS
cf00: 45 52 54 20 53 74 61 74 65 6d 65 6e 74 73 20 57  ERT Statements W
cf10: 69 74 68 69 6e 0a 20 20 20 20 54 72 69 67 67 65  ithin.    Trigge
cf20: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  rs</h3>..<p>^The
cf30: 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45   [UPDATE], [DELE
cf40: 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54  TE], and [INSERT
cf50: 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  ].statements wit
cf60: 68 69 6e 20 74 72 69 67 67 65 72 73 20 64 6f 20  hin triggers do 
cf70: 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74 68 65 20  not support.the 
cf80: 66 75 6c 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  full syntax for 
cf90: 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54  [UPDATE], [DELET
cfa0: 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d  E], and [INSERT]
cfb0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 54 68   statements.  Th
cfc0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74  e following.rest
cfd0: 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c  rictions apply:<
cfe0: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
cff0: 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f  >.  ^(The name o
d000: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  f the table to b
d010: 65 20 6d 6f 64 69 66 69 65 64 20 69 6e 20 61 6e  e modified in an
d020: 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45   [UPDATE], [DELE
d030: 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d  TE], or [INSERT]
d040: 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73  .  statement mus
d050: 74 20 62 65 20 61 6e 20 75 6e 71 75 61 6c 69 66  t be an unqualif
d060: 69 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20  ied table name. 
d070: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
d080: 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75 73 65 20   one must.  use 
d090: 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61  just "<i>tablena
d0a0: 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e  me</i>" not "<i>
d0b0: 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e  database</i><b>.
d0c0: 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65  </b><i>tablename
d0d0: 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20 73 70 65  </i>".  when spe
d0e0: 63 69 66 79 69 6e 67 20 74 68 65 20 74 61 62 6c  cifying the tabl
d0f0: 65 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  e.)^  ^The table
d100: 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20   to be modified 
d110: 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68  must exist in th
d120: 65 0a 20 20 73 61 6d 65 20 64 61 74 61 62 61 73  e.  same databas
d130: 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6f  e as the table o
d140: 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
d150: 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61  the trigger is a
d160: 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c  ttached..  </p><
d170: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  /li>..<li><p>.  
d180: 5e 54 68 65 20 22 49 4e 53 45 52 54 20 49 4e 54  ^The "INSERT INT
d190: 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44  O <i>table</i> D
d1a0: 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66  EFAULT VALUES" f
d1b0: 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  orm of the [INSE
d1c0: 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 20 20  RT] statement.  
d1d0: 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  is not supported
d1e0: 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ..  </p></li>..<
d1f0: 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e  li><p>.  ^The IN
d200: 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54  DEXED BY and NOT
d210: 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73   INDEXED clauses
d220: 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74   are not support
d230: 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20  ed for [UPDATE] 
d240: 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73  and.  [DELETE] s
d250: 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70  tatements..  </p
d260: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
d270: 20 20 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59    ^(The ORDER BY
d280: 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
d290: 65 73 20 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61  es on [UPDATE] a
d2a0: 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  nd [DELETE] stat
d2b0: 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20  ements are not. 
d2c0: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 4f 52 44   supported.  ORD
d2d0: 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
d2e0: 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79  are not normally
d2f0: 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b   supported for [
d300: 55 50 44 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45  UPDATE] or.  [DE
d310: 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e  LETE] in any con
d320: 74 65 78 74 20 62 75 74 20 63 61 6e 20 62 65 20  text but can be 
d330: 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d  enabled for top-
d340: 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 73  level statements
d350: 0a 20 20 75 73 69 6e 67 20 74 68 65 20 5b 53 51  .  using the [SQ
d360: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
d370: 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
d380: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
d390: 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a  tion.  However,.
d3a0: 20 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74    that compile-t
d3b0: 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20  ime option only 
d3c0: 61 70 70 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c  applies to top-l
d3d0: 65 76 65 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e  evel [UPDATE] an
d3e0: 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20 73 74 61  d [DELETE].  sta
d3f0: 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50  tements, not [UP
d400: 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54  DATE] and [DELET
d410: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  E] statements wi
d420: 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e  thin triggers.)^
d430: 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  .  </p></li>..<l
d440: 69 3e 3c 70 3e 0a 20 20 5e 5b 63 6f 6d 6d 6f 6e  i><p>.  ^[common
d450: 2d 74 61 62 6c 65 2d 65 78 70 72 65 73 73 69 6f  -table-expressio
d460: 6e 7c 43 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  n|Common table e
d470: 78 70 72 65 73 73 69 6f 6e 5d 20 61 72 65 20 6e  xpression] are n
d480: 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72  ot supported for
d490: 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  .  statements in
d4a0: 73 69 64 65 20 6f 66 20 74 72 69 67 67 65 72 73  side of triggers
d4b0: 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  ..  </p></li>.</
d4c0: 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ul>..<tcl>hd_fra
d4d0: 67 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f 6f 66  gment instead_of
d4e0: 5f 74 72 69 67 67 65 72 20 7b 49 4e 53 54 45 41  _trigger {INSTEA
d4f0: 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44 20 4f  D OF} {INSTEAD O
d500: 46 20 74 72 69 67 67 65 72 7d 3c 2f 74 63 6c 3e  F trigger}</tcl>
d510: 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f 46 20  .<h3>INSTEAD OF 
d520: 74 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c  triggers</h3>..<
d530: 70 3e 5e 54 72 69 67 67 65 72 73 20 6d 61 79 20  p>^Triggers may 
d540: 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20 5b 76  be created on [v
d550: 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c 20 61  iews], as well a
d560: 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  s ordinary table
d570: 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69 6e 67  s, by.specifying
d580: 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e 20 74   INSTEAD OF in t
d590: 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45  he CREATE TRIGGE
d5a0: 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 49  R statement. .^I
d5b0: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 4f 4e  f one or more ON
d5c0: 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45 4c 45   INSERT, ON DELE
d5d0: 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54 45 20  TE.or ON UPDATE 
d5e0: 74 72 69 67 67 65 72 73 20 61 72 65 20 64 65 66  triggers are def
d5f0: 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77 2c 20  ined on a view, 
d600: 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74 20 61  then it is not a
d610: 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65 63 75  n.error to execu
d620: 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  te an INSERT, DE
d630: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
d640: 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65 20  tatement on the 
d650: 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74 69 76  view, .respectiv
d660: 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64 2c 0a  ely.  ^Instead,.
d670: 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49 4e 53  executing an INS
d680: 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55  ERT, DELETE or U
d690: 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76 69 65  PDATE on the vie
d6a0: 77 20 63 61 75 73 65 73 20 74 68 65 20 61 73 73  w causes the ass
d6b0: 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65 72 73  ociated.triggers
d6c0: 20 74 6f 20 66 69 72 65 2e 20 5e 54 68 65 20 72   to fire. ^The r
d6d0: 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64 65 72  eal tables under
d6e0: 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77 20 61  lying the view a
d6f0: 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65 64 0a  re not modified.
d700: 28 65 78 63 65 70 74 20 70 6f 73 73 69 62 6c 79  (except possibly
d710: 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62 79 20   explicitly, by 
d720: 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  a trigger progra
d730: 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74  m).</p>..<p>^Not
d740: 65 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69  e that the [sqli
d750: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61  te3_changes()] a
d760: 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61  nd [sqlite3_tota
d770: 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74  l_changes()] int
d780: 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74 20 63  erfaces.do not c
d790: 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20  ount INSTEAD OF 
d7a0: 74 72 69 67 67 65 72 20 66 69 72 69 6e 67 73 2c  trigger firings,
d7b0: 20 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e 74 5f   but the.[count_
d7c0: 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 20  changes pragma] 
d7d0: 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53 54 45  does count INSTE
d7e0: 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66 69  AD OF trigger fi
d7f0: 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53  ring.</p>..<h3>S
d800: 6f 6d 65 20 45 78 61 6d 70 6c 65 20 54 72 69 67  ome Example Trig
d810: 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  gers</h3>..<p>^(
d820: 41 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63 75  Assuming that cu
d830: 73 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20 61  stomer records a
d840: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
d850: 20 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61 62   "customers" tab
d860: 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72 64  le, and.that ord
d870: 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73  er records are s
d880: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f 72  tored in the "or
d890: 64 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68 65  ders" table, the
d8a0: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 55 50 44 41 54   following.UPDAT
d8b0: 45 20 74 72 69 67 67 65 72 0a 65 6e 73 75 72 65  E trigger.ensure
d8c0: 73 20 74 68 61 74 20 61 6c 6c 20 61 73 73 6f 63  s that all assoc
d8d0: 69 61 74 65 64 20 6f 72 64 65 72 73 20 61 72 65  iated orders are
d8e0: 20 72 65 64 69 72 65 63 74 65 64 20 77 68 65 6e   redirected when
d8f0: 20 61 20 63 75 73 74 6f 6d 65 72 20 63 68 61 6e   a customer chan
d900: 67 65 73 0a 68 69 73 20 6f 72 20 68 65 72 20 61  ges.his or her a
d910: 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63  ddress:</p>..<tc
d920: 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41  l>Example {.CREA
d930: 54 45 20 54 52 49 47 47 45 52 20 75 70 64 61 74  TE TRIGGER updat
d940: 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65  e_customer_addre
d950: 73 73 20 55 50 44 41 54 45 20 4f 46 20 61 64 64  ss UPDATE OF add
d960: 72 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72  ress ON customer
d970: 73 20 0a 20 20 42 45 47 49 4e 0a 20 20 20 20 55  s .  BEGIN.    U
d980: 50 44 41 54 45 20 6f 72 64 65 72 73 20 53 45 54  PDATE orders SET
d990: 20 61 64 64 72 65 73 73 20 3d 20 6e 65 77 2e 61   address = new.a
d9a0: 64 64 72 65 73 73 20 57 48 45 52 45 20 63 75 73  ddress WHERE cus
d9b0: 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64  tomer_name = old
d9c0: 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c  .name;.  END;.}<
d9d0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74  /tcl>..<p>With t
d9e0: 68 69 73 20 74 72 69 67 67 65 72 20 69 6e 73 74  his trigger inst
d9f0: 61 6c 6c 65 64 2c 20 65 78 65 63 75 74 69 6e 67  alled, executing
da00: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c   the statement:<
da10: 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c  /p>..<tcl>Exampl
da20: 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f  e {.UPDATE custo
da30: 6d 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73  mers SET address
da40: 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20   = '1 Main St.' 
da50: 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61  WHERE name = 'Ja
da60: 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63  ck Jones';.}</tc
da70: 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73 20 74 68  l>..<p>causes th
da80: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62  e following to b
da90: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
daa0: 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c  executed:</p>..<
dab0: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50  tcl>Example {.UP
dac0: 44 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20  DATE orders SET 
dad0: 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69  address = '1 Mai
dae0: 6e 20 53 74 2e 27 20 57 48 45 52 45 20 63 75 73  n St.' WHERE cus
daf0: 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61  tomer_name = 'Ja
db00: 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63  ck Jones';.}</tc
db10: 6c 3e 29 5e 0a 0a 3c 70 3e 46 6f 72 20 61 6e 20  l>)^..<p>For an 
db20: 65 78 61 6d 70 6c 65 20 6f 66 20 61 6e 20 49 4e  example of an IN
db30: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
db40: 2c 20 63 6f 6e 73 69 64 65 72 20 74 68 65 20 66  , consider the f
db50: 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d 61 3a  ollowing schema:
db60: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
db70: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 75  .CREATE TABLE cu
db80: 73 74 6f 6d 65 72 28 0a 20 20 63 75 73 74 5f 69  stomer(.  cust_i
db90: 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  d INTEGER PRIMAR
dba0: 59 20 4b 45 59 2c 0a 20 20 63 75 73 74 5f 6e 61  Y KEY,.  cust_na
dbb0: 6d 65 20 54 45 58 54 2c 0a 20 20 63 75 73 74 5f  me TEXT,.  cust_
dbc0: 61 64 64 72 20 54 45 58 54 0a 29 3b 0a 43 52 45  addr TEXT.);.CRE
dbd0: 41 54 45 20 56 49 45 57 20 63 75 73 74 6f 6d 65  ATE VIEW custome
dbe0: 72 5f 61 64 64 72 65 73 73 20 41 53 0a 20 20 20  r_address AS.   
dbf0: 53 45 4c 45 43 54 20 63 75 73 74 5f 69 64 2c 20  SELECT cust_id, 
dc00: 63 75 73 74 5f 61 64 64 72 20 46 52 4f 4d 20 63  cust_addr FROM c
dc10: 75 73 74 6f 6d 65 72 3b 0a 43 52 45 41 54 45 20  ustomer;.CREATE 
dc20: 54 52 49 47 47 45 52 20 63 75 73 74 5f 61 64 64  TRIGGER cust_add
dc30: 72 5f 63 68 6e 67 0a 49 4e 53 54 45 41 44 20 4f  r_chng.INSTEAD O
dc40: 46 20 55 50 44 41 54 45 20 4f 46 20 63 75 73 74  F UPDATE OF cust
dc50: 5f 61 64 64 72 20 4f 4e 20 63 75 73 74 6f 6d 65  _addr ON custome
dc60: 72 5f 61 64 64 72 65 73 73 0a 42 45 47 49 4e 0a  r_address.BEGIN.
dc70: 20 20 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65    UPDATE custome
dc80: 72 20 53 45 54 20 63 75 73 74 5f 61 64 64 72 3d  r SET cust_addr=
dc90: 4e 45 57 2e 63 75 73 74 5f 61 64 64 72 0a 20 20  NEW.cust_addr.  
dca0: 20 57 48 45 52 45 20 63 75 73 74 5f 69 64 3d 4e   WHERE cust_id=N
dcb0: 45 57 2e 63 75 73 74 5f 69 64 3b 0a 45 4e 44 3b  EW.cust_id;.END;
dcc0: 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74  .}</tcl>..<p>Wit
dcd0: 68 20 74 68 65 20 73 63 68 65 6d 61 20 61 62 6f  h the schema abo
dce0: 76 65 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ve, a statement 
dcf0: 6f 66 20 74 68 65 20 66 6f 72 6d 3a 3c 2f 70 3e  of the form:</p>
dd00: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
dd10: 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72  .UPDATE customer
dd20: 5f 61 64 64 72 65 73 73 20 53 45 54 20 63 75 73  _address SET cus
dd30: 74 5f 61 64 64 72 3d 24 6e 65 77 5f 61 64 64 72  t_addr=$new_addr
dd40: 65 73 73 20 57 48 45 52 45 20 63 75 73 74 5f 69  ess WHERE cust_i
dd50: 64 3d 24 63 75 73 74 5f 69 64 3b 0a 7d 3c 2f 74  d=$cust_id;.}</t
dd60: 63 6c 3e 0a 0a 3c 70 3e 43 61 75 73 65 73 20 74  cl>..<p>Causes t
dd70: 68 65 20 63 75 73 74 6f 6d 65 72 2e 63 75 73 74  he customer.cust
dd80: 5f 61 64 64 72 20 66 69 65 6c 64 20 74 6f 20 62  _addr field to b
dd90: 65 20 75 70 64 61 74 65 64 20 66 6f 72 20 61 20  e updated for a 
dda0: 73 70 65 63 69 66 69 63 0a 63 75 73 74 6f 6d 65  specific.custome
ddb0: 72 20 65 6e 74 72 79 20 74 68 61 74 20 68 61 73  r entry that has
ddc0: 20 63 75 73 74 6f 6d 65 72 2e 63 75 73 74 5f 69   customer.cust_i
ddd0: 64 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 24  d equal to the $
dde0: 63 75 73 74 5f 69 64 20 70 61 72 61 6d 65 74 65  cust_id paramete
ddf0: 72 2e 0a 4e 6f 74 65 20 68 6f 77 20 74 68 65 20  r..Note how the 
de00: 76 61 6c 75 65 73 20 61 73 73 69 67 6e 65 64 20  values assigned 
de10: 74 6f 20 74 68 65 20 76 69 65 77 20 61 72 65 20  to the view are 
de20: 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 20 61  made available a
de30: 73 20 66 69 65 6c 64 0a 69 6e 20 74 68 65 20 73  s field.in the s
de40: 70 65 63 69 61 6c 20 22 4e 45 57 22 20 74 61 62  pecial "NEW" tab
de50: 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20 74 72  le within the tr
de60: 69 67 67 65 72 20 62 6f 64 79 2e 3c 2f 70 3e 0a  igger body.</p>.
de70: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
de80: 74 20 75 6e 64 65 66 5f 62 65 66 6f 72 65 20 7b  t undef_before {
de90: 75 6e 64 65 66 69 6e 65 64 20 42 45 46 4f 52 45  undefined BEFORE
dea0: 20 74 72 69 67 67 65 72 20 62 65 68 61 76 69 6f   trigger behavio
deb0: 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 61 75  r}</tcl>.<h3>Cau
dec0: 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55 73 65  tions On The Use
ded0: 20 4f 66 20 42 45 46 4f 52 45 20 74 72 69 67 67   Of BEFORE trigg
dee0: 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20  ers</h3>..<p>If 
def0: 61 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  a BEFORE UPDATE 
df00: 6f 72 20 42 45 46 4f 52 45 20 44 45 4c 45 54 45  or BEFORE DELETE
df10: 20 74 72 69 67 67 65 72 20 6d 6f 64 69 66 69 65   trigger modifie
df20: 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72  s or deletes a r
df30: 6f 77 0a 74 68 61 74 20 77 61 73 20 74 6f 20 68  ow.that was to h
df40: 61 76 65 20 62 65 65 6e 20 75 70 64 61 74 65 64  ave been updated
df50: 20 6f 72 20 64 65 6c 65 74 65 64 2c 20 74 68 65   or deleted, the
df60: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
df70: 74 68 65 20 73 75 62 73 65 71 75 65 6e 74 0a 75  the subsequent.u
df80: 70 64 61 74 65 20 6f 72 20 64 65 6c 65 74 65 20  pdate or delete 
df90: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 6e 64  operation is und
dfa0: 65 66 69 6e 65 64 2e 20 20 46 75 72 74 68 65 72  efined.  Further
dfb0: 6d 6f 72 65 2c 20 69 66 20 61 20 42 45 46 4f 52  more, if a BEFOR
dfc0: 45 20 74 72 69 67 67 65 72 0a 6d 6f 64 69 66 69  E trigger.modifi
dfd0: 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20  es or deletes a 
dfe0: 72 6f 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20  row, then it is 
dff0: 75 6e 64 65 66 69 6e 65 64 20 77 68 65 74 68 65  undefined whethe
e000: 72 20 6f 72 20 6e 6f 74 20 41 46 54 45 52 20 74  r or not AFTER t
e010: 72 69 67 67 65 72 73 0a 74 68 61 74 20 77 6f 75  riggers.that wou
e020: 6c 64 20 68 61 76 65 20 6f 74 68 65 72 77 69 73  ld have otherwis
e030: 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65 20 72  e run on those r
e040: 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66 61 63 74  ows will in fact
e050: 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54   run..</p>..<p>T
e060: 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 45 57 2e  he value of NEW.
e070: 72 6f 77 69 64 20 69 73 20 75 6e 64 65 66 69 6e  rowid is undefin
e080: 65 64 20 69 6e 20 61 20 42 45 46 4f 52 45 20 49  ed in a BEFORE I
e090: 4e 53 45 52 54 20 74 72 69 67 67 65 72 20 69 6e  NSERT trigger in
e0a0: 20 77 68 69 63 68 0a 74 68 65 20 72 6f 77 69 64   which.the rowid
e0b0: 20 69 73 20 6e 6f 74 20 65 78 70 6c 69 63 69 74   is not explicit
e0c0: 6c 79 20 73 65 74 20 74 6f 20 61 6e 20 69 6e 74  ly set to an int
e0d0: 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65  eger.</p>..<p>Be
e0e0: 63 61 75 73 65 20 6f 66 20 74 68 65 20 62 65 68  cause of the beh
e0f0: 61 76 69 6f 72 73 20 64 65 73 63 72 69 62 65 64  aviors described
e100: 20 61 62 6f 76 65 2c 20 70 72 6f 67 72 61 6d 6d   above, programm
e110: 65 72 73 20 61 72 65 20 65 6e 63 6f 75 72 61 67  ers are encourag
e120: 65 64 20 74 6f 0a 70 72 65 66 65 72 20 41 46 54  ed to.prefer AFT
e130: 45 52 20 74 72 69 67 67 65 72 73 20 6f 76 65 72  ER triggers over
e140: 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 73   BEFORE triggers
e150: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
e160: 72 61 67 6d 65 6e 74 20 72 61 69 73 65 20 7b 52  ragment raise {R
e170: 41 49 53 45 20 66 75 6e 63 74 69 6f 6e 7d 3c 2f  AISE function}</
e180: 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 52 41 49  tcl>.<h3>The RAI
e190: 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f 68  SE() function</h
e1a0: 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70 65 63 69  3>..<p>^(A speci
e1b0: 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  al SQL function 
e1c0: 52 41 49 53 45 28 29 20 6d 61 79 20 62 65 20 75  RAISE() may be u
e1d0: 73 65 64 20 77 69 74 68 69 6e 20 61 20 74 72 69  sed within a tri
e1e0: 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a  gger-program,)^.
e1f0: 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69  with the followi
e200: 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a  ng syntax</p> ..
e210: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
e220: 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69 6f  am raise-functio
e230: 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 28 57 68  n</tcl>..<p>^(Wh
e240: 65 6e 20 6f 6e 65 20 6f 66 20 52 41 49 53 45 28  en one of RAISE(
e250: 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e 29 2c 20 52  ROLLBACK,...), R
e260: 41 49 53 45 28 41 42 4f 52 54 2c 2e 2e 2e 29 20  AISE(ABORT,...) 
e270: 6f 72 20 52 41 49 53 45 28 46 41 49 4c 2c 2e 2e  or RAISE(FAIL,..
e280: 2e 29 0a 69 73 20 63 61 6c 6c 65 64 20 64 75 72  .).is called dur
e290: 69 6e 67 20 74 72 69 67 67 65 72 2d 70 72 6f 67  ing trigger-prog
e2a0: 72 61 6d 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74  ram.execution, t
e2b0: 68 65 20 73 70 65 63 69 66 69 65 64 20 5b 4f 4e  he specified [ON
e2c0: 20 43 4f 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65   CONFLICT] proce
e2d0: 73 73 69 6e 67 20 69 73 20 70 65 72 66 6f 72 6d  ssing is perform
e2e0: 65 64 0a 74 68 65 20 63 75 72 72 65 6e 74 20 71  ed.the current q
e2f0: 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65 73 2e  uery terminates.
e300: 29 5e 0a 41 6e 20 65 72 72 6f 72 20 63 6f 64 65  )^.An error code
e310: 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53   of [SQLITE_CONS
e320: 54 52 41 49 4e 54 5d 20 69 73 20 72 65 74 75 72  TRAINT] is retur
e330: 6e 65 64 20 74 6f 20 74 68 65 20 61 70 70 6c 69  ned to the appli
e340: 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69  cation,.along wi
e350: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
e360: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c   error message.<
e370: 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41  /p>..<p>^When RA
e380: 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20 63  ISE(IGNORE) is c
e390: 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61 69  alled, the remai
e3a0: 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75 72 72  nder of the curr
e3b0: 65 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f 67  ent trigger prog
e3c0: 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d 65  ram,.the stateme
e3d0: 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74  nt that caused t
e3e0: 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
e3f0: 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e  am to execute an
e400: 64 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74  d any subsequent
e410: 0a 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d  .trigger program
e420: 73 20 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76  s that would hav
e430: 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20  e been executed 
e440: 61 72 65 20 61 62 61 6e 64 6f 6e 65 64 2e 20 5e  are abandoned. ^
e450: 4e 6f 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e  No database.chan
e460: 67 65 73 20 61 72 65 20 72 6f 6c 6c 65 64 20 62  ges are rolled b
e470: 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20 73 74  ack.  ^If the st
e480: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75  atement that cau
e490: 73 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20  sed the trigger 
e4a0: 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78 65 63 75  program.to execu
e4b0: 74 65 20 69 73 20 69 74 73 65 6c 66 20 70 61 72  te is itself par
e4c0: 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 20 70  t of a trigger p
e4d0: 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20 74 68 61  rogram, then tha
e4e0: 74 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  t trigger progra
e4f0: 6d 0a 72 65 73 75 6d 65 73 20 65 78 65 63 75 74  m.resumes execut
e500: 69 6f 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e  ion at the begin
e510: 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e 65 78 74  ning of the next
e520: 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63   step..</p>..<tc
e530: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 65  l>hd_fragment te
e540: 6d 70 74 72 69 67 20 7b 54 45 4d 50 20 74 72 69  mptrig {TEMP tri
e550: 67 67 65 72 73 20 6f 6e 20 6e 6f 6e 2d 54 45 4d  ggers on non-TEM
e560: 50 20 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a  P tables}</tcl>.
e570: 3c 68 33 3e 54 45 4d 50 20 54 72 69 67 67 65 72  <h3>TEMP Trigger
e580: 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d 50 20 54 61  s on Non-TEMP Ta
e590: 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  bles</h3>..<p>^(
e5a0: 41 20 74 72 69 67 67 65 72 20 6e 6f 72 6d 61 6c  A trigger normal
e5b0: 6c 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  ly exists in the
e5c0: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
e5d0: 73 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  s the table name
e5e0: 64 0a 61 66 74 65 72 20 74 68 65 20 22 4f 4e 22  d.after the "ON"
e5f0: 20 6b 65 79 77 6f 72 64 20 69 6e 20 74 68 65 20   keyword in the 
e600: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
e610: 74 61 74 65 6d 65 6e 74 2e 20 20 45 78 63 65 70  tatement.  Excep
e620: 74 2c 20 69 74 20 69 73 0a 70 6f 73 73 69 62 6c  t, it is.possibl
e630: 65 20 74 6f 20 63 72 65 61 74 65 20 61 20 54 45  e to create a TE
e640: 4d 50 20 54 52 49 47 47 45 52 20 6f 6e 20 61 20  MP TRIGGER on a 
e650: 74 61 62 6c 65 20 69 6e 20 61 6e 6f 74 68 65 72  table in another
e660: 20 64 61 74 61 62 61 73 65 2e 29 5e 20 20 0a 53   database.)^  .S
e670: 75 63 68 20 61 20 74 72 69 67 67 65 72 20 77 69  uch a trigger wi
e680: 6c 6c 20 6f 6e 6c 79 20 66 69 72 65 20 77 68 65  ll only fire whe
e690: 6e 20 63 68 61 6e 67 65 73 0a 61 72 65 20 6d 61  n changes.are ma
e6a0: 64 65 20 74 6f 20 74 68 65 20 74 61 72 67 65 74  de to the target
e6b0: 20 74 61 62 6c 65 20 62 79 20 74 68 65 20 61 70   table by the ap
e6c0: 70 6c 69 63 61 74 69 6f 6e 20 74 68 61 74 20 64  plication that d
e6d0: 65 66 69 6e 65 64 20 74 68 65 20 74 72 69 67 67  efined the trigg
e6e0: 65 72 2e 0a 4f 74 68 65 72 20 61 70 70 6c 69 63  er..Other applic
e6f0: 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 6f 64 69  ations that modi
e700: 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20  fy the database 
e710: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 61 62 6c 65  will not be able
e720: 20 74 6f 20 73 65 65 20 74 68 65 0a 54 45 4d 50   to see the.TEMP
e730: 20 74 72 69 67 67 65 72 20 61 6e 64 20 68 65 6e   trigger and hen
e740: 63 65 20 63 61 6e 6e 6f 74 20 72 75 6e 20 74 68  ce cannot run th
e750: 65 20 74 72 69 67 67 65 72 2e 3c 2f 70 3e 0a 0a  e trigger.</p>..
e760: 3c 70 3e 57 68 65 6e 20 64 65 66 69 6e 69 6e 67  <p>When defining
e770: 20 61 20 54 45 4d 50 20 74 72 69 67 67 65 72 20   a TEMP trigger 
e780: 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d 50 20 74 61  on a non-TEMP ta
e790: 62 6c 65 2c 20 69 74 20 69 73 20 69 6d 70 6f 72  ble, it is impor
e7a0: 74 61 6e 74 20 74 6f 0a 73 70 65 63 69 66 79 20  tant to.specify 
e7b0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 6f 6c  the database hol
e7c0: 64 69 6e 67 20 74 68 65 20 6e 6f 6e 2d 54 45 4d  ding the non-TEM
e7d0: 50 20 74 61 62 6c 65 2e 20 20 46 6f 72 20 65 78  P table.  For ex
e7e0: 61 6d 70 6c 65 2c 0a 69 6e 20 74 68 65 20 66 6f  ample,.in the fo
e7f0: 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
e800: 74 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74 61  t, it is importa
e810: 6e 74 20 74 6f 20 73 61 79 20 22 6d 61 69 6e 2e  nt to say "main.
e820: 74 61 62 31 22 20 69 6e 73 74 65 61 64 0a 6f 66  tab1" instead.of
e830: 20 6a 75 73 74 20 22 74 61 62 31 22 3a 3c 2f 70   just "tab1":</p
e840: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
e850: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 45 4d 50  pre>.CREATE TEMP
e860: 20 54 52 49 47 47 45 52 20 65 78 31 20 41 46 54   TRIGGER ex1 AFT
e870: 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 3c 62 3e  ER INSERT ON <b>
e880: 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62 31 20 42 45  main.</b>tab1 BE
e890: 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72 65 3e 3c 2f  GIN ....</pre></
e8a0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
e8b0: 46 61 69 6c 75 72 65 20 74 6f 20 73 70 65 63 69  Failure to speci
e8c0: 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20  fy the database 
e8d0: 6e 61 6d 65 20 6f 6e 20 74 68 65 20 74 61 72 67  name on the targ
e8e0: 65 74 20 74 61 62 6c 65 20 63 6f 75 6c 64 20 72  et table could r
e8f0: 65 73 75 6c 74 0a 69 6e 20 74 68 65 20 54 45 4d  esult.in the TEM
e900: 50 20 74 72 69 67 67 65 72 20 62 65 69 6e 67 20  P trigger being 
e910: 72 65 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  reattached to a 
e920: 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 73  table with the s
e930: 61 6d 65 20 6e 61 6d 65 20 69 6e 0a 61 6e 6f 74  ame name in.anot
e940: 68 65 72 20 64 61 74 61 62 61 73 65 20 77 68 65  her database whe
e950: 6e 65 76 65 72 20 61 6e 79 20 73 63 68 65 6d 61  never any schema
e960: 20 63 68 61 6e 67 65 20 6f 63 63 75 72 73 2e 3c   change occurs.<
e970: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
e980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9c0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
e9d0: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57 7d  on {CREATE VIEW}
e9e0: 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20 7b 7b   {createview} {{
e9f0: 43 52 45 41 54 45 20 56 49 45 57 7d 20 76 69 65  CREATE VIEW} vie
ea00: 77 20 2a 76 69 65 77 73 7d 0a 0a 52 65 63 75 72  w *views}..Recur
ea10: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
ea20: 6d 20 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74  m create-view-st
ea30: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
ea40: 68 65 20 43 52 45 41 54 45 20 56 49 45 57 20 63  he CREATE VIEW c
ea50: 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e 73 20 61  ommand assigns a
ea60: 20 6e 61 6d 65 20 74 6f 20 61 20 70 72 65 2d 70   name to a pre-p
ea70: 61 63 6b 61 67 65 64 20 0a 5b 53 45 4c 45 43 54  ackaged .[SELECT
ea80: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f  ] statement. .^O
ea90: 6e 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20  nce the view is 
eaa0: 63 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20  created, it can 
eab0: 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46  be used in the F
eac0: 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e  ROM clause.of an
ead0: 6f 74 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69  other [SELECT] i
eae0: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
eaf0: 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le name..</p>..<
eb00: 70 3e 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22  p>^If the "TEMP"
eb10: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
eb20: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69  keyword occurs i
eb30: 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54  n between "CREAT
eb40: 45 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68  E".and "VIEW" th
eb50: 65 6e 20 74 68 65 20 76 69 65 77 20 74 68 61 74  en the view that
eb60: 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f   is created is o
eb70: 6e 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74  nly visible to t
eb80: 68 65 0a 70 72 6f 63 65 73 73 20 74 68 61 74 20  he.process that 
eb90: 6f 70 65 6e 65 64 20 74 68 65 20 64 61 74 61 62  opened the datab
eba0: 61 73 65 20 61 6e 64 20 69 73 20 61 75 74 6f 6d  ase and is autom
ebb0: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
ebc0: 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61   when.the databa
ebd0: 73 65 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70  se is closed.</p
ebe0: 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74  >..<p> ^If a &lt
ebf0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
ec00: 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  t; is specified,
ec10: 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 69   then the view i
ec20: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
ec30: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
ec40: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
ec50: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
ec60: 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  h a &lt;database
ec70: 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68  -name&gt;.and th
ec80: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f  e TEMP keyword o
ec90: 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c 65 73 73  n a VIEW, unless
eca0: 20 74 68 65 20 26 6c 74 3b 64 61 74 61 62 61 73   the &lt;databas
ecb0: 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 22 74  e-name&gt; is "t
ecc0: 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 64 61 74  emp"..^If no dat
ecd0: 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70  abase name is sp
ece0: 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74 68 65  ecified, and the
ecf0: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73   TEMP keyword is
ed00: 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74 68   not present,.th
ed10: 65 20 56 49 45 57 20 69 73 20 63 72 65 61 74 65  e VIEW is create
ed20: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  d in the main da
ed30: 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tabase.</p>..<p>
ed40: 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c  ^You cannot [DEL
ed50: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20  ETE], [INSERT], 
ed60: 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 20 76 69  or [UPDATE] a vi
ed70: 65 77 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20  ew.  ^Views are 
ed80: 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51  read-only .in SQ
ed90: 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c  Lite.  ^However,
eda0: 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 79   in many cases y
edb0: 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49  ou can use an.[I
edc0: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
edd0: 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77 20 74  r] on the view t
ede0: 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68  o accomplish .th
edf0: 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e  e same thing.  ^
ee00: 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65  Views are remove
ee10: 64 20 0a 77 69 74 68 20 74 68 65 20 5b 44 52 4f  d .with the [DRO
ee20: 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e  P VIEW] command.
ee30: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
ee40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee60: 23 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 0a 53 65 63 74 69  ##########.Secti
ee90: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 52 54 55  on {CREATE VIRTU
eea0: 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74  AL TABLE} {creat
eeb0: 65 76 74 61 62 7d 20 7b 7b 43 52 45 41 54 45 20  evtab} {{CREATE 
eec0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a  VIRTUAL TABLE}}.
eed0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
eee0: 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76  Diagram create-v
eef0: 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d  irtual-table-stm
ef00: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 5b  t.</tcl>..<p>A [
ef10: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 69  virtual table] i
ef20: 73 20 61 6e 20 69 6e 74 65 72 66 61 63 65 20 74  s an interface t
ef30: 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 73 74  o an external st
ef40: 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70 75 74 61  orage or computa
ef50: 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68 61 74  tion.engine that
ef60: 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61   appears to be a
ef70: 20 74 61 62 6c 65 20 62 75 74 20 64 6f 65 73 20   table but does 
ef80: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74 6f  not actually sto
ef90: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69  re information.i
efa0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
efb0: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20  ile.</p>..<p>In 
efc0: 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63 61 6e  general, you can
efd0: 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 77 69 74   do anything wit
efe0: 68 20 61 20 5b 76 69 72 74 75 61 6c 20 74 61 62  h a [virtual tab
eff0: 6c 65 5d 20 74 68 61 74 20 63 61 6e 20 62 65 20  le] that can be 
f000: 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f 72 64  done.with an ord
f010: 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 65 78 63  inary table, exc
f020: 65 70 74 20 74 68 61 74 20 5e 79 6f 75 20 63 61  ept that ^you ca
f030: 6e 6e 6f 74 20 63 72 65 61 74 65 20 69 6e 64 69  nnot create indi
f040: 63 65 73 20 6f 72 20 74 72 69 67 67 65 72 73 20  ces or triggers 
f050: 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20 74 61 62  on a.virtual tab
f060: 6c 65 2e 20 20 5e 53 6f 6d 65 20 76 69 72 74 75  le.  ^Some virtu
f070: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
f080: 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 69  ntations might i
f090: 6d 70 6f 73 65 20 61 64 64 69 74 69 6f 6e 61 6c  mpose additional
f0a0: 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 2e 20 20  .restrictions.  
f0b0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e  For example, man
f0c0: 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  y virtual tables
f0d0: 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c   are read-only.<
f0e0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 26 6c 74 3b  /p>..<p>The &lt;
f0f0: 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20  module-name&gt; 
f100: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
f110: 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 6d  n object that im
f120: 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69 72  plements.the vir
f130: 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54 68  tual table.  ^Th
f140: 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d  e &lt;module-nam
f150: 65 26 67 74 3b 20 6d 75 73 74 20 62 65 20 72 65  e&gt; must be re
f160: 67 69 73 74 65 72 65 64 20 77 69 74 68 0a 74 68  gistered with.th
f170: 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  e SQLite databas
f180: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75 73 69  e connection usi
f190: 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  ng.[sqlite3_crea
f1a0: 74 65 5f 6d 6f 64 75 6c 65 28 29 5d 20 6f 72 20  te_module()] or 
f1b0: 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
f1c0: 6d 6f 64 75 6c 65 5f 76 32 28 29 5d 0a 70 72 69  module_v2()].pri
f1d0: 6f 72 20 74 6f 20 69 73 73 75 69 6e 67 20 74 68  or to issuing th
f1e0: 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  e CREATE VIRTUAL
f1f0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
f200: 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c 65 20 74 61  ..^The module ta
f210: 6b 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  kes zero or more
f220: 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64   comma-separated
f230: 20 61 72 67 75 6d 65 6e 74 73 2e 0a 5e 54 68 65   arguments..^The
f240: 20 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62   arguments can b
f250: 65 20 6a 75 73 74 20 61 62 6f 75 74 20 61 6e 79  e just about any
f260: 20 74 65 78 74 20 61 73 20 6c 6f 6e 67 20 61 73   text as long as
f270: 20 69 74 20 68 61 73 20 62 61 6c 61 6e 63 65 64   it has balanced
f280: 0a 70 61 72 65 6e 74 68 65 73 65 73 2e 20 20 54  .parentheses.  T
f290: 68 65 20 61 72 67 75 6d 65 6e 74 20 73 79 6e 74  he argument synt
f2a0: 61 78 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  ax is sufficient
f2b0: 6c 79 20 67 65 6e 65 72 61 6c 20 74 68 61 74 20  ly general that 
f2c0: 74 68 65 0a 61 72 67 75 6d 65 6e 74 73 20 63 61  the.arguments ca
f2d0: 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 61 70 70  n be made to app
f2e0: 65 61 72 20 61 73 20 5b 63 6f 6c 75 6d 6e 20 64  ear as [column d
f2f0: 65 66 69 6e 69 74 69 6f 6e 73 5d 20 69 6e 20 61  efinitions] in a
f300: 20 74 72 61 64 69 74 69 6f 6e 61 6c 0a 5b 43 52   traditional.[CR
f310: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
f320: 65 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c 69 74 65  ement.  .^SQLite
f330: 20 70 61 73 73 65 73 20 74 68 65 20 6d 6f 64 75   passes the modu
f340: 6c 65 20 61 72 67 75 6d 65 6e 74 73 20 64 69 72  le arguments dir
f350: 65 63 74 6c 79 0a 74 6f 20 74 68 65 20 5b 78 43  ectly.to the [xC
f360: 72 65 61 74 65 5d 20 61 6e 64 20 5b 78 43 6f 6e  reate] and [xCon
f370: 6e 65 63 74 5d 20 6d 65 74 68 6f 64 73 20 6f 66  nect] methods of
f380: 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
f390: 65 6d 65 6e 74 61 74 69 6f 6e 0a 77 69 74 68 6f  ementation.witho
f3a0: 75 74 20 61 6e 79 20 69 6e 74 65 72 70 72 65 74  ut any interpret
f3b0: 61 74 69 6f 6e 2e 20 20 49 74 20 69 73 20 74 68  ation.  It is th
f3c0: 65 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74 79  e responsibility
f3d0: 0a 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69  .of the module i
f3e0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
f3f0: 20 70 61 72 73 65 20 61 6e 64 20 69 6e 74 65 72   parse and inter
f400: 70 72 65 74 20 69 74 73 20 6f 77 6e 20 61 72 67  pret its own arg
f410: 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  uments.</p>..<p>
f420: 5e 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ^A virtual table
f430: 20 69 73 20 64 65 73 74 72 6f 79 65 64 20 75 73   is destroyed us
f440: 69 6e 67 20 74 68 65 20 6f 72 64 69 6e 61 72 79  ing the ordinary
f450: 0a 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74  .[DROP TABLE] st
f460: 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65 20  atement.  There 
f470: 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49 52 54 55  is no.DROP VIRTU
f480: 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
f490: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  nt.</p>..<tcl>.#
f4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
f4f0: 63 74 69 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c  ction DELETE del
f500: 65 74 65 20 7b 44 45 4c 45 54 45 20 2a 44 45 4c  ete {DELETE *DEL
f510: 45 54 45 73 7d 0a 0a 52 65 63 75 72 73 69 76 65  ETEs}..Recursive
f520: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
f530: 6c 65 74 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  lete-stmt.</tcl>
f540: 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20  ..<p>The DELETE 
f550: 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20  command removes 
f560: 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 74 68 65  records from the
f570: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
f580: 64 20 62 79 20 74 68 65 0a 20 20 20 3c 69 3e 71  d by the.   <i>q
f590: 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
f5a0: 61 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c 70 3e 5e 49  ame</i>. ..<p>^I
f5b0: 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  f the WHERE clau
f5c0: 73 65 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  se is not presen
f5d0: 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 69  t, all records i
f5e0: 6e 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20  n the table are 
f5f0: 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e 49 66 20  deleted..   ^If 
f600: 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
f610: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e  s supplied, then
f620: 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73   only those rows
f630: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 20   for which the. 
f640: 20 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c    result of eval
f650: 75 61 74 69 6e 67 20 74 68 65 20 57 48 45 52 45  uating the WHERE
f660: 20 63 6c 61 75 73 65 20 61 73 20 61 20 5b 62 6f   clause as a [bo
f670: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
f680: 7c 0a 20 20 20 62 6f 6f 6c 65 61 6e 20 65 78 70  |.   boolean exp
f690: 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d  ression is true]
f6a0: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
f6b0: 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20  h3>Restrictions 
f6c0: 6f 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d  on DELETE Statem
f6d0: 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41  ents Within CREA
f6e0: 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a  TE TRIGGER</h3>.
f6f0: 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
f700: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  g restrictions a
f710: 70 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73  pply to DELETE s
f720: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f  tatements that o
f730: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a  ccur within the.
f740: 20 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52     body of a [CR
f750: 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
f760: 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20  atement:..<ul>. 
f770: 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e   <li><p>^The <i>
f780: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73  table-name</i> s
f790: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
f7a0: 20 6f 66 20 61 20 44 45 4c 45 54 45 20 73 74 61   of a DELETE sta
f7b0: 74 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20  tement within.  
f7c0: 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79    a trigger body
f7d0: 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69   must be unquali
f7e0: 66 69 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65  fied.  ^(In othe
f7f0: 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20  r words, the.   
f800: 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
f810: 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72  e</i><b>.</b> pr
f820: 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c  efix on the tabl
f830: 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c  e name is not al
f840: 6c 6f 77 65 64 20 0a 20 20 20 20 77 69 74 68 69  lowed .    withi
f850: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 49  n triggers.)^ ^I
f860: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  f the table to w
f870: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
f880: 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 0a   is attached is.
f890: 20 20 20 20 6e 6f 74 20 69 6e 20 74 68 65 20 74      not in the t
f8a0: 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20 74 68  emp database, th
f8b0: 65 6e 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  en DELETE statem
f8c0: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20  ents within the 
f8d0: 74 72 69 67 67 65 72 0a 20 20 20 20 62 6f 64 79  trigger.    body
f8e0: 20 6d 75 73 74 20 6f 70 65 72 61 74 65 20 6f 6e   must operate on
f8f0: 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e 20 74   tables within t
f900: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
f910: 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20   as it. ^If the 
f920: 74 61 62 6c 65 0a 20 20 20 20 74 6f 20 77 68 69  table.    to whi
f930: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
f940: 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e  s attached is in
f950: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
f960: 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20  se, then the.   
f970: 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d   unqualified nam
f980: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
f990: 65 69 6e 67 20 64 65 6c 65 74 65 64 20 69 73 20  eing deleted is 
f9a0: 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20  resolved in the 
f9b0: 73 61 6d 65 20 77 61 79 20 61 73 0a 20 20 20 20  same way as.    
f9c0: 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d  it is for a top-
f9d0: 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20  level statement 
f9e0: 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69  (by searching fi
f9f0: 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74  rst the TEMP dat
fa00: 61 62 61 73 65 2c 20 74 68 65 6e 0a 20 20 20 20  abase, then.    
fa10: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
fa20: 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65  e, then any othe
fa30: 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  r databases in t
fa40: 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77 65  he order they we
fa50: 72 65 0a 20 20 20 20 61 74 74 61 63 68 65 64 29  re.    attached)
fa60: 2e 0a 20 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e  ..    .  <li><p>
fa70: 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
fa80: 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
fa90: 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
faa0: 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54  allowed on DELET
fab0: 45 0a 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73  E.    statements
fac0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
fad0: 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
fae0: 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f  ^The LIMIT and O
faf0: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20  RDER BY clauses 
fb00: 28 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77  (described below
fb10: 29 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  ) are unsupporte
fb20: 64 20 66 6f 72 0a 20 20 20 20 44 45 4c 45 54 45  d for.    DELETE
fb30: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
fb40: 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
fb50: 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69  .</ul>..<h3>Opti
fb60: 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f  onal LIMIT and O
fb70: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 3c  RDER BY clauses<
fb80: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51  /h3>..<p>^(If SQ
fb90: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
fba0: 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54   with the [SQLIT
fbb0: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
fbc0: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f  DELETE_LIMIT].co
fbd0: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
fbe0: 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  n, then the synt
fbf0: 61 78 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  ax of the DELETE
fc00: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 65 78   statement is.ex
fc10: 74 65 6e 64 65 64 20 62 79 20 74 68 65 20 61 64  tended by the ad
fc20: 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e  dition of option
fc30: 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
fc40: 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 3a 29 5e  LIMIT clauses:)^
fc50: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
fc60: 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
fc70: 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
fc80: 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c  l>..<p>^If a DEL
fc90: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
fca0: 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
fcb0: 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  , the maximum nu
fcc0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
fcd0: 74 0a 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65  t.will be delete
fce0: 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76  d is found by ev
fcf0: 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63  aluating the acc
fd00: 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73  ompanying expres
fd10: 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67  sion and casting
fd20: 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  .it to an intege
fd30: 72 20 76 61 6c 75 65 2e 20 5e 49 66 20 74 68 65  r value. ^If the
fd40: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65   result of the e
fd50: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4c 49  valuating the LI
fd60: 4d 49 54 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f  MIT clause.canno
fd70: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
fd80: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
fd90: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69  integer value, i
fda0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
fdb0: 41 20 0a 6e 65 67 61 74 69 76 65 20 4c 49 4d 49  A .negative LIMI
fdc0: 54 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72  T value is inter
fdd0: 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69  preted as "no li
fde0: 6d 69 74 22 2e 20 5e 28 49 66 20 74 68 65 20 44  mit". ^(If the D
fdf0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
fe00: 0a 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46  .also has an OFF
fe10: 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  SET clause, then
fe20: 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79   it is similarly
fe30: 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63   evaluated and c
fe40: 61 73 74 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65  ast to an.intege
fe50: 72 20 76 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20  r value. Again, 
fe60: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69  it is an error i
fe70: 66 20 74 68 65 20 76 61 6c 75 65 20 63 61 6e 6e  f the value cann
fe80: 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
fe90: 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e  .converted to an
fea0: 20 69 6e 74 65 67 65 72 2e 29 5e 20 5e 49 66 20   integer.)^ ^If 
feb0: 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53  there is no OFFS
fec0: 45 54 20 63 6c 61 75 73 65 2c 20 6f 72 20 74 68  ET clause, or th
fed0: 65 20 63 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74  e calculated.int
fee0: 65 67 65 72 20 76 61 6c 75 65 20 69 73 20 6e 65  eger value is ne
fef0: 67 61 74 69 76 65 2c 20 74 68 65 20 65 66 66 65  gative, the effe
ff00: 63 74 69 76 65 20 4f 46 46 53 45 54 20 76 61 6c  ctive OFFSET val
ff10: 75 65 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e  ue is zero...<p>
ff20: 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54 45 20  ^(If the DELETE 
ff30: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e  statement has an
ff40: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
ff50: 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
ff60: 74 68 61 74 20 77 6f 75 6c 64 20 0a 62 65 20 64  that would .be d
ff70: 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
ff80: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
ff90: 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f  IT clause are so
ffa0: 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  rted according t
ffb0: 6f 20 74 68 65 20 0a 4f 52 44 45 52 20 42 59 2e  o the .ORDER BY.
ffc0: 20 54 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c   The first <i>M<
ffd0: 2f 69 3e 20 72 6f 77 73 2c 20 77 68 65 72 65 20  /i> rows, where 
ffe0: 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20  <i>M</i> is the 
fff0: 76 61 6c 75 65 20 66 6f 75 6e 64 20 62 79 0a 65  value found by.e
10000 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4f 46  valuating the OF
10010 46 53 45 54 20 63 6c 61 75 73 65 20 65 78 70 72  FSET clause expr
10020 65 73 73 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70  ession, are skip
10030 70 65 64 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c  ped, and the fol
10040 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e  lowing .<i>N</i>
10050 2c 20 77 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e  , where <i>N</i>
10060 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
10070 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
10080 73 73 69 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74  ssion, are delet
10090 65 64 2e 29 5e 0a 5e 49 66 20 74 68 65 72 65 20  ed.)^.^If there 
100a0 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 3c 69  are less than <i
100b0 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61  >N</i> rows rema
100c0 69 6e 69 6e 67 20 61 66 74 65 72 20 74 61 6b 69  ining after taki
100d0 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c  ng the OFFSET cl
100e0 61 75 73 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e  ause.into accoun
100f0 74 2c 20 6f 72 20 69 66 20 74 68 65 20 4c 49 4d  t, or if the LIM
10100 49 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61  IT clause evalua
10110 74 65 64 20 74 6f 20 61 20 6e 65 67 61 74 69 76  ted to a negativ
10120 65 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c  e value, then al
10130 6c 0a 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73  l.remaining rows
10140 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
10150 70 3e 5e 49 66 20 74 68 65 20 44 45 4c 45 54 45  p>^If the DELETE
10160 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e   statement has n
10170 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
10180 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
10190 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 64   that.would be d
101a0 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
101b0 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
101c0 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73  IT clause are as
101d0 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72  sembled in an.ar
101e0 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65  bitrary order be
101f0 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68  fore applying th
10200 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
10210 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65  ET clauses to de
10220 74 65 72 6d 69 6e 65 20 0a 74 68 65 20 73 75 62  termine .the sub
10230 73 65 74 20 74 68 61 74 20 61 72 65 20 61 63 74  set that are act
10240 75 61 6c 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a  ually deleted...
10250 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42  <p>^(The ORDER B
10260 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44 45  Y clause on a DE
10270 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
10280 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64  s used only to d
10290 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72  etermine which.r
102a0 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20  ows fall within 
102b0 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f  the LIMIT. The o
102c0 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
102d0 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69  ws are deleted i
102e0 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
102f0 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65  is not influence
10300 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
10310 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63  Y clause.)^..<tc
10320 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72  l>hd_fragment tr
10330 75 6e 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63  uncateopt {trunc
10340 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
10350 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
10360 54 72 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a  Truncate Optimiz
10370 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ation</h3>..<p>^
10380 57 68 65 6e 20 74 68 65 20 57 48 45 52 45 20 69  When the WHERE i
10390 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61  s omitted from a
103a0 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
103b0 74 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a  t and the table.
103c0 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61  being deleted ha
103d0 73 20 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53  s no triggers,.S
103e0 51 4c 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70  QLite uses an op
103f0 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72  timization to er
10400 61 73 65 20 74 68 65 20 65 6e 74 69 72 65 20 74  ase the entire t
10410 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74  able content.wit
10420 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76  hout having to v
10430 69 73 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66  isit each row of
10440 20 74 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76   the table indiv
10450 69 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74  idually..This "t
10460 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a  runcate" optimiz
10470 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20  ation makes the 
10480 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20  delete run much 
10490 66 61 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f  faster..Prior to
104a0 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e   SQLite [version
104b0 20 33 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75   3.6.5], the tru
104c0 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
104d0 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68  on.also meant th
104e0 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  at the [sqlite3_
104f0 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b  changes()] and.[
10500 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
10510 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61  anges()] interfa
10520 63 65 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75  ces.and the [cou
10530 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d  nt_changes pragm
10540 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75  a].will not actu
10550 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  ally return the 
10560 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65  number of delete
10570 64 20 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70  d rows.  .That p
10580 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20  roblem has been 
10590 66 69 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72  fixed as of [ver
105a0 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70  sion 3.6.5]...<p
105b0 3e 5e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f  >^The truncate o
105c0 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20  ptimization can 
105d0 62 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  be permanently d
105e0 69 73 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20  isabled for all 
105f0 71 75 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d  queries.by recom
10600 70 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69  piling.SQLite wi
10610 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f  th the [SQLITE_O
10620 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54  MIT_TRUNCATE_OPT
10630 49 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69  IMIZATION] compi
10640 6c 65 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c  le-time switch.<
10650 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e  /p>..<p>The trun
10660 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
10670 6e 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69  n can also be di
10680 73 61 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d  sabled at runtim
10690 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c  e using.the [sql
106a0 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69  ite3_set_authori
106b0 7a 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65  zer()] interface
106c0 2e 20 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72  .  ^If an author
106d0 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65  izer callback.re
106e0 74 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47  turns [SQLITE_IG
106f0 4e 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51  NORE] for an [SQ
10700 4c 49 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74  LITE_DELETE] act
10710 69 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74  ion code, then.t
10720 68 65 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74  he DELETE operat
10730 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64  ion will proceed
10740 20 62 75 74 20 74 68 65 20 74 72 75 6e 63 61 74   but the truncat
10750 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77  e optimization w
10760 69 6c 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20  ill.be bypassed 
10770 61 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65  and rows will be
10780 20 64 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20   deleted one by 
10790 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  one.</p>..<tcl>.
107a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
107b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
107c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
107d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
107e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
107f0 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
10800 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
10810 20 2a 44 45 54 41 43 48 0a 0a 52 65 63 75 72 73   *DETACH..Recurs
10820 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
10830 20 64 65 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74   detach-stmt.</t
10840 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74  cl>..<p>^This st
10850 61 74 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73  atement detaches
10860 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64   an additional d
10870 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
10880 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61  on previously .a
10890 74 74 61 63 68 65 64 20 75 73 69 6e 67 20 74 68  ttached using th
108a0 65 20 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65  e [ATTACH] state
108b0 6d 65 6e 74 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f  ment.  .^When no
108c0 74 20 69 6e 20 5b 73 68 61 72 65 64 20 63 61 63  t in [shared cac
108d0 68 65 20 6d 6f 64 65 5d 2c 20 0a 69 74 20 69 73  he mode], .it is
108e0 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76   possible to hav
108f0 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
10900 61 73 65 20 66 69 6c 65 20 61 74 74 61 63 68 65  ase file attache
10910 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
10920 20 75 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e   using .differen
10930 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74  t names, and det
10940 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65  aching one conne
10950 63 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20  ction to a file 
10960 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a  will leave the .
10970 6f 74 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f  others intact.</
10980 70 3e 0a 5e 49 6e 20 5b 73 68 61 72 65 64 20 63  p>.^In [shared c
10990 61 63 68 65 20 6d 6f 64 65 5d 2c 20 61 74 74 65  ache mode], atte
109a0 6d 70 74 69 6e 67 20 74 6f 20 61 74 74 61 63 68  mpting to attach
109b0 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
109c0 73 65 20 66 69 6c 65 20 6d 6f 72 65 0a 74 68 61  se file more.tha
109d0 6e 20 6f 6e 63 65 20 72 65 73 75 6c 74 73 20 69  n once results i
109e0 6e 20 61 6e 20 65 72 72 6f 72 2e 0a 0a 3c 70 3e  n an error...<p>
109f0 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20  ^This statement 
10a00 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c  will fail if SQL
10a10 69 74 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69  ite is in the mi
10a20 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61  ddle of a transa
10a30 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63  ction.</p>...<tc
10a40 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
10a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10a90 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20  #.Section {DROP 
10aa0 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78  INDEX} dropindex
10ab0 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a   {{DROP INDEX}}.
10ac0 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
10ad0 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64  Diagram drop-ind
10ae0 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ex-stmt.</tcl>..
10af0 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 49 4e 44  <p>^The DROP IND
10b00 45 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d  EX statement rem
10b10 6f 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64  oves an index ad
10b20 64 65 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52  ded.with the [CR
10b30 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74  EATE INDEX] stat
10b40 65 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65  ement.  The inde
10b50 78 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  x is completely 
10b60 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65  removed from.the
10b70 20 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79   disk.  The only
10b80 20 77 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20   way to recover 
10b90 74 68 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20  the index is to 
10ba0 72 65 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72  reenter the.appr
10bb0 6f 70 72 69 61 74 65 20 5b 43 52 45 41 54 45 20  opriate [CREATE 
10bc0 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  INDEX] command.<
10bd0 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
10be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c20 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
10c30 6e 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64  n {DROP TABLE} d
10c40 72 6f 70 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20  roptable {{DROP 
10c50 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69  TABLE}}..Recursi
10c60 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
10c70 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  drop-table-stmt.
10c80 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
10c90 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
10ca0 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
10cb0 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
10cc0 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
10cd0 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
10ce0 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
10cf0 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
10d00 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70  ame.  ^The dropp
10d10 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70  ed table is comp
10d20 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
10d30 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
10d40 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65   .schema and the
10d50 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65   disk file.  The
10d60 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
10d70 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e  e recovered.  .^
10d80 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
10d90 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
10da0 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
10db0 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
10dc0 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ted.</p>..<p>^Th
10dd0 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
10de0 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
10df0 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
10e00 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
10e10 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
10e20 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
10e30 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  t exist.</p>..<p
10e40 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
10e50 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
10e60 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52  re enabled, a DR
10e70 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
10e80 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70   performs an.imp
10e90 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20  licit [DELETE | 
10ea0 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
10eb0 74 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64  tbl&gt;] command
10ec0 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
10ed0 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
10ee0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
10ef0 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
10f00 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
10f10 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
10f20 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
10f30 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
10f40 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
10f50 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
10f60 74 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78  t;tbl&gt; .is ex
10f70 65 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20  ecuted, so this 
10f80 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79  cannot cause any
10f90 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72   triggers to fir
10fa0 65 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20  e. By contrast, 
10fb0 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c  ^an.implicit DEL
10fc0 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c  ETE FROM &lt;tbl
10fd0 26 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20  &gt; does cause 
10fe0 61 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b  any configured.[
10ff0 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
11000 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61  ons] to take pla
11010 63 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70  ce. .^If the imp
11020 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
11030 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78  M &lt;tbl&gt; ex
11040 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f  ecuted.as part o
11050 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  f a DROP TABLE c
11060 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20  ommand violates 
11070 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  any immediate fo
11080 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
11090 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20  aints,.an error 
110a0 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  is returned and 
110b0 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
110c0 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74   dropped. ^If .t
110d0 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
110e0 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
110f0 67 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a  gt; causes any .
11100 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
11110 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
11120 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c   to be violated,
11130 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69   and the violati
11140 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20  ons still.exist 
11150 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  when the transac
11160 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65  tion is committe
11170 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  d, an error is r
11180 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74  eturned at the t
11190 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a  ime.of commit...
111a0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
111b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111f0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
11200 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
11210 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54  trigger {{DROP T
11220 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73  RIGGER}}..Recurs
11230 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
11240 20 64 72 6f 70 2d 74 72 69 67 67 65 72 2d 73 74   drop-trigger-st
11250 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
11260 68 65 20 44 52 4f 50 20 54 52 49 47 47 45 52 20  he DROP TRIGGER 
11270 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
11280 73 20 61 20 74 72 69 67 67 65 72 20 63 72 65 61  s a trigger crea
11290 74 65 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45  ted by the .[CRE
112a0 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
112b0 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20 72 65  tement. ^Once re
112c0 6d 6f 76 65 64 2c 20 74 68 65 20 74 72 69 67 67  moved, the trigg
112d0 65 72 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73  er definition is
112e0 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72 65 73 65   no.longer prese
112f0 6e 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  nt in the sqlite
11300 5f 6d 61 73 74 65 72 20 28 6f 72 20 73 71 6c 69  _master (or sqli
11310 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20  te_temp_master) 
11320 74 61 62 6c 65 20 61 6e 64 20 69 73 0a 6e 6f 74  table and is.not
11330 20 66 69 72 65 64 20 62 79 20 61 6e 79 20 73 75   fired by any su
11340 62 73 65 71 75 65 6e 74 20 49 4e 53 45 52 54 2c  bsequent INSERT,
11350 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
11360 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c  E statements...<
11370 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 72 69  p>^Note that tri
11380 67 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61  ggers are automa
11390 74 69 63 61 6c 6c 79 20 64 72 6f 70 70 65 64 20  tically dropped 
113a0 77 68 65 6e 20 74 68 65 20 61 73 73 6f 63 69 61  when the associa
113b0 74 65 64 20 74 61 62 6c 65 20 69 73 0a 64 72 6f  ted table is.dro
113c0 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  pped...<tcl>.###
113d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11410 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
11420 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20  ion {DROP VIEW} 
11430 64 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20  dropview {{DROP 
11440 56 49 45 57 7d 7d 0a 0a 52 65 63 75 72 73 69 76  VIEW}}..Recursiv
11450 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  eBubbleDiagram d
11460 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f  rop-view-stmt.</
11470 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
11480 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
11490 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77  t removes a view
114a0 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
114b0 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 0a 20  [CREATE VIEW] . 
114c0 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54 68 65   statement. ^The
114d0 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e   view definition
114e0 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d   is removed from
114f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
11500 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e 6f 20  hema, but .  no 
11510 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e 20 74  actual data in t
11520 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 62 61  he underlying ba
11530 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d 6f 64  se tables is mod
11540 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65  ified...<p>^(The
11550 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20 69 73   view to drop is
11560 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
11570 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61 6e 64  he view-name and
11580 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 64 61 74   optional .  dat
11590 61 62 61 73 65 2d 6e 61 6d 65 20 73 70 65 63 69  abase-name speci
115a0 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
115b0 74 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74  the DROP VIEW st
115c0 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20  atement. This . 
115d0 20 72 65 66 65 72 65 6e 63 65 20 69 73 20 72 65   reference is re
115e0 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74 68 65  solved using the
115f0 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63 65 64   standard proced
11600 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20  ure for [object 
11610 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a  resolution].)^..
11620 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20 73 70  <p>.  ^If the sp
11630 65 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e  ecified view can
11640 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64  not be found and
11650 20 74 68 65 20 49 46 20 45 58 49 53 54 53 20 63   the IF EXISTS c
11660 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a 20 20  lause is not .  
11670 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73 20 61  present, it is a
11680 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74 68 65  n error. ^If the
11690 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20   specified view 
116a0 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20  cannot be found 
116b0 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58 49 53  and an IF.  EXIS
116c0 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
116d0 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52 4f 50  sent in the DROP
116e0 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2c   VIEW statement,
116f0 20 74 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d   then the statem
11700 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70  ent.  is a no-op
11710 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ....<tcl>.######
11720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11760 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
11770 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a 65 63   {Database Objec
11780 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f  t Name Resolutio
11790 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62  n} {naming} {{ob
117a0 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d  ject resolution}
117b0 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20  }.</tcl>..<p>.  
117c0 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64 61 74  In SQLite, a dat
117d0 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28 61 20  abase object (a 
117e0 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72  table, index, tr
117f0 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 20 69  igger or view) i
11800 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20 20 62  s identified.  b
11810 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
11820 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  e object and the
11830 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
11840 61 62 61 73 65 20 74 68 61 74 20 69 74 20 72 65  abase that it re
11850 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44 61 74  sides in. .  Dat
11860 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20 6d 61  abase objects ma
11870 79 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  y reside in the 
11880 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
11890 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
118a0 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54  , or in.  an [AT
118b0 54 41 43 48 7c 61 74 74 61 63 68 65 64 20 64 61  TACH|attached da
118c0 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20  tabase]...<p>.  
118d0 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68  The syntax of th
118e0 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20  e [DROP TABLE], 
118f0 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44  [DROP INDEX], [D
11900 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50  ROP VIEW], [DROP
11910 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45   TRIGGER],.  [RE
11920 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54  INDEX], [ALTER T
11930 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f  ABLE] and many o
11940 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c  ther commands al
11950 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75 73 65  l permit the use
11960 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79 20 61  r to.  specify a
11970 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   database object
11980 20 65 69 74 68 65 72 20 62 79 20 69 74 73 20 6e   either by its n
11990 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79  ame alone, or by
119a0 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
119b0 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61 6e 64  f.  its name and
119c0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69 74 73   the name of its
119d0 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49 66 20   database. ^(If 
119e0 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73 20 73  no database is s
119f0 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
11a00 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74  .  of the object
11a10 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65 6e   reference, then
11a20 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73   SQLite searches
11a30 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20   the main, temp 
11a40 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64  and all attached
11a50 0a 20 20 64 61 74 61 62 61 73 65 73 20 66 6f 72  .  databases for
11a60 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74 68 20   an object with 
11a70 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
11a80 20 54 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   The temp databa
11a90 73 65 20 69 73 20 73 65 61 72 63 68 65 64 0a 20  se is searched. 
11aa0 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64   first, followed
11ab0 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64 61 74   by the main dat
11ac0 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20  abase, followed 
11ad0 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
11ae0 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a 20 20  abases in the.  
11af0 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
11b00 77 65 72 65 20 61 74 74 61 63 68 65 64 2e 20 54  were attached. T
11b10 68 65 20 72 65 66 65 72 65 6e 63 65 20 72 65 73  he reference res
11b20 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66 69 72  olves to the fir
11b30 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64  st match.  found
11b40 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a  .)^ For example:
11b50 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 20 20  ..<pre>^(.      
11b60 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65 20 6e  /* Add a table n
11b70 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74 68 65  amed 't1' to the
11b80 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20   temp, main and 
11b90 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
11ba0 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 41 54  base */.      AT
11bb0 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27 20 41  TACH 'file.db' A
11bc0 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45  S aux;.      CRE
11bd0 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
11be0 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  y);.      CREATE
11bf0 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 78   TEMP TABLE t1(x
11c00 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
11c10 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28  TE TABLE aux.t1(
11c20 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20 44 52  x, y);..      DR
11c30 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
11c40 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
11c50 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74 61 62  le in temp datab
11c60 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f  ase */.      DRO
11c70 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20  P TABLE t1;     
11c80 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c      /* Drop tabl
11c90 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61 62 61  e in main databa
11ca0 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50  se */.      DROP
11cb0 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20   TABLE t1;      
11cc0 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65     /* Drop table
11cd0 20 69 6e 20 61 75 78 20 64 61 74 61 62 61 73 65   in aux database
11ce0 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70   */.)^</pre>..<p
11cf0 3e 0a 20 20 5e 49 66 20 61 20 64 61 74 61 62 61  >.  ^If a databa
11d00 73 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69  se name is speci
11d10 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
11d20 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  an object refere
11d30 6e 63 65 2c 20 69 74 20 6d 75 73 74 20 62 65 0a  nce, it must be.
11d40 20 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c    either "main",
11d50 20 6f 72 20 22 74 65 6d 70 22 20 6f 72 20 74 68   or "temp" or th
11d60 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61 74 74  e name of an att
11d70 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 20  ached database. 
11d80 5e 4c 69 6b 65 20 6f 74 68 65 72 0a 20 20 53 51  ^Like other.  SQ
11d90 4c 20 69 64 65 6e 74 69 66 69 65 72 73 2c 20 64  L identifiers, d
11da0 61 74 61 62 61 73 65 20 6e 61 6d 65 73 20 61 72  atabase names ar
11db0 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  e case-insensiti
11dc0 76 65 2e 20 5e 49 66 20 61 20 64 61 74 61 62 61  ve. ^If a databa
11dd0 73 65 20 6e 61 6d 65 0a 20 20 69 73 20 73 70 65  se name.  is spe
11de0 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c  cified, then onl
11df0 79 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61  y the named data
11e00 62 61 73 65 20 69 73 20 73 65 61 72 63 68 65 64  base is searched
11e10 20 66 6f 72 20 74 68 65 20 6e 61 6d 65 64 20 6f   for the named o
11e20 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f  bject...<p>.  Mo
11e30 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  st object refere
11e40 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65  nces may only re
11e50 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65 63 69  solve to a speci
11e60 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62 6a 65  fic type of obje
11e70 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c  ct (for.  exampl
11e80 65 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 68  e a reference th
11e90 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 20  at is part of a 
11ea0 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
11eb0 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65  ment may only re
11ec0 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74 61 62  solve.  to a tab
11ed0 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61  le object, not a
11ee0 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72  n index, trigger
11ef0 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77 65 76   or view). Howev
11f00 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65  er in some conte
11f10 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45  xts .  (e.g. [RE
11f20 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63  INDEX]) an objec
11f30 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61 79 20  t reference may 
11f40 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f  be resolve to mo
11f50 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79 70 65  re than one type
11f60 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57  .  of object. ^W
11f70 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20 64 61  hen searching da
11f80 74 61 62 61 73 65 20 73 63 68 65 6d 61 73 20 66  tabase schemas f
11f90 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63  or a named objec
11fa0 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20  t, objects of.  
11fb0 74 79 70 65 73 20 74 68 61 74 20 63 61 6e 6e 6f  types that canno
11fc0 74 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65  t be used in the
11fd0 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20   context of the 
11fe0 72 65 66 65 72 65 6e 63 65 20 61 72 65 20 61 6c  reference are al
11ff0 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e  ways .  ignored.
12000 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
12010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12050 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45  ######.Section E
12060 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45  XPLAIN explain E
12070 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69  XPLAIN..BubbleDi
12080 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c  agram sql-stmt.<
12090 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51  /tcl>..<p>^An SQ
120a0 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20  L statement can 
120b0 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74  be preceded by t
120c0 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c  he keyword "EXPL
120d0 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70  AIN" or.by the p
120e0 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51  hrase "EXPLAIN Q
120f0 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69  UERY PLAN".  ^Ei
12100 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f  ther modificatio
12110 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c  n causes the.SQL
12120 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65   statement to be
12130 68 61 76 65 20 61 73 20 61 20 71 75 65 72 79 20  have as a query 
12140 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e  and to return in
12150 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a  formation about.
12160 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74 61 74  how the SQL stat
12170 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
12180 20 6f 70 65 72 61 74 65 64 20 69 66 20 74 68 65   operated if the
12190 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
121a0 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64 20 62   or.phrase had b
121b0 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e  een omitted.</p>
121c0 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20  ..<p>The output 
121d0 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64  from EXPLAIN and
121e0 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
121f0 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  LAN is intended 
12200 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76 65 20  for.interactive 
12210 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74 72 6f  analysis and tro
12220 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c  ubleshooting onl
12230 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20  y.  The details 
12240 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74 20 66  of the .output f
12250 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a 65 63  ormat are subjec
12260 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d  t to change from
12270 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f 66 20   one release of 
12280 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65  SQLite to the ne
12290 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73  xt..Applications
122a0 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20   should not use 
122b0 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41  EXPLAIN or EXPLA
122c0 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 69  IN QUERY PLAN si
122d0 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63 74 20  nce.their exact 
122e0 62 65 68 61 76 69 6f 72 20 69 73 20 76 61 72 69  behavior is vari
122f0 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61  able and only pa
12300 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74  rtially document
12310 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ed.</p>..<p>^Whe
12320 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  n the EXPLAIN ke
12330 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 79  yword appears by
12340 20 69 74 73 65 6c 66 20 69 74 20 63 61 75 73 65   itself it cause
12350 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  s the statement.
12360 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
12370 75 65 72 79 20 74 68 61 74 20 72 65 74 75 72 6e  uery that return
12380 73 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  s the sequence o
12390 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63 68  f .[virtual mach
123a0 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ine instructions
123b0 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ] it would have 
123c0 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
123d0 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a  the command had.
123e0 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
123f0 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65  ord not been pre
12400 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68 65 20  sent. ^When the 
12410 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
12420 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65 61 72  AN phrase.appear
12430 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  s, the statement
12440 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d 6c 65   returns high-le
12450 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  vel information 
12460 72 65 67 61 72 64 69 6e 67 20 74 68 65 20 71 75  regarding the qu
12470 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f  ery.plan that wo
12480 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75 73  uld have been us
12490 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e  ed...The EXPLAIN
124a0 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d   QUERY PLAN comm
124b0 61 6e 64 20 69 73 20 64 65 73 63 72 69 62 65 64  and is described
124c0 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75   in .[explain qu
124d0 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65  ery plan|more de
124e0 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63  tail here]...<tc
124f0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
12500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12540 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  #.Section expres
12550 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72  sion expr {*expr
12560 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69  ession {expressi
12570 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 52 65 63  on syntax}}..Rec
12580 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
12590 72 61 6d 20 65 78 70 72 0a 3c 2f 74 63 6c 3e 0a  ram expr.</tcl>.
125a0 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e  .<p>This section
125b0 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
125c0 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20  om the others.  
125d0 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69  Most other secti
125e0 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75  ons of.this docu
125f0 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74  ment talks about
12600 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51   a particular SQ
12610 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73  L command.  This
12620 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f   section does.no
12630 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73  t talk about a s
12640 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e  tandalone comman
12650 64 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70  d but about "exp
12660 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20  ressions" which 
12670 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e  are .subcomponen
12680 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72  ts of most other
12690 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a   commands.</p>..
126a0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
126b0 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61   binaryops {bina
126c0 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74  ry operators}</t
126d0 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72  cl>.<h3>Operator
126e0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69  s</h3>.<p>^(SQLi
126f0 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74  te understands t
12700 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e  he following bin
12710 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69  ary operators, i
12720 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67  n order from.hig
12730 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70  hest to lowest p
12740 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a  recedence:</p>..
12750 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
12760 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
12770 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a  2c2cf0"><big>||.
12780 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20  *    /    %.+   
12790 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67   -.&lt;&lt;   &g
127a0 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20  t;&gt;   &amp;  
127b0 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b    |.&lt;    &lt;
127c0 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b  =   &gt;    &gt;
127d0 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20  =.=    ==   !=  
127e0 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69   &lt;&gt;   </bi
127f0 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20  g>IS   IS NOT   
12800 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42  IN   LIKE   GLOB
12810 20 20 20 4d 41 54 43 48 20 20 20 52 45 47 45 58     MATCH   REGEX
12820 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e  P.AND   .OR</fon
12830 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
12840 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53  quote>)^..<p>^(S
12850 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
12860 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
12870 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
12880 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
12890 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
128a0 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
128b0 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
128c0 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
128d0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
128e0 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
128f0 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b  ment collateop {
12900 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
12910 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
12920 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
12930 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74   is a unary post
12940 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61  fix.operator tha
12950 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c  t assigns a [col
12960 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
12970 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f   to an expressio
12980 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  n..^The COLLATE 
12990 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61 20 68  operator has a h
129a0 69 67 68 65 72 20 70 72 65 63 65 64 65 6e 63 65  igher precedence
129b0 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67   (binds more tig
129c0 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 62  htly) than any.b
129d0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 61  inary operator a
129e0 6e 64 20 61 6e 79 20 75 6e 61 72 79 20 70 72 65  nd any unary pre
129f0 66 69 78 20 6f 70 65 72 61 74 6f 72 20 65 78 63  fix operator exc
12a00 65 70 74 20 22 7e 22 2e 0a 28 43 4f 4c 4c 41 54  ept "~"..(COLLAT
12a10 45 20 61 6e 64 20 22 7e 22 20 61 72 65 20 61 73  E and "~" are as
12a20 73 6f 63 69 61 74 69 76 65 20 73 6f 20 74 68 65  sociative so the
12a30 69 72 20 62 69 6e 64 69 6e 67 20 6f 72 64 65 72  ir binding order
12a40 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72   does not matter
12a50 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e  .).^The collatin
12a60 67 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  g sequence set b
12a70 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70  y the COLLATE op
12a80 65 72 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73  erator overrides
12a90 20 74 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73   the.collating s
12aa0 65 71 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e  equence determin
12ab0 65 64 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54  ed by the COLLAT
12ac0 45 20 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61  E clause in a ta
12ad0 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69  ble.[column defi
12ae0 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65  nition]..See the
12af0 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
12b00 65 6e 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64  ence| detailed d
12b10 69 73 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c  iscussion on col
12b20 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
12b30 5d 0a 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79  ].in the [dataty
12b40 70 65 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e  pe | Datatype In
12b50 20 53 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65   SQLite3] docume
12b60 6e 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  nt for additiona
12b70 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c  l information..<
12b80 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74  /p>..<tcl>hd_put
12b90 73 20 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72  s ".<p>^The unar
12ba0 79 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72  y operator [Oper
12bb0 61 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d  ator +] is a no-
12bc0 6f 70 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20  op.  ^It can be 
12bd0 61 70 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e  applied.to strin
12be0 67 73 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f  gs, numbers, blo
12bf0 62 73 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69  bs or NULL and i
12c00 74 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73  t always returns
12c10 20 61 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74   a result.with t
12c20 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73  he same value as
12c30 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70   the operand.</p
12c40 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74  >"</tcl>..<p>Not
12c50 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  e that there are
12c60 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20   two variations 
12c70 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e  of the equals an
12c80 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65  d not equals.ope
12c90 72 61 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73  rators.  ^Equals
12ca0 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a   can be either..
12cb0 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b  <tcl>.hd_puts "[
12cc0 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b  Operator =] or [
12cd0 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54  Operator ==]..^T
12ce0 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70  he non-equals op
12cf0 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69  erator can be ei
12d00 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21  ther.[Operator !
12d10 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  =] or [Operator 
12d20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68  {&lt;&gt;}]..^Th
12d30 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20  e [Operator ||] 
12d40 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f  operator is \"co
12d50 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74  ncatenate\" - it
12d60 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a   joins together.
12d70 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20  the two strings 
12d80 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e  of its operands.
12d90 0a 5e 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b  .^The operator [
12da0 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70  Operator %] outp
12db0 75 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  uts the value of
12dc0 20 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72 61   its left .opera
12dd0 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69  nd modulo its ri
12de0 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e  ght operand.</p>
12df0 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74  ..<p>^The result
12e00 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f   of any binary o
12e10 70 65 72 61 74 6f 72 20 69 73 20 65 69 74 68 65  perator is eithe
12e20 72 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  r a numeric valu
12e30 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65  e or .NULL, exce
12e40 70 74 20 66 6f 72 20 74 68 65 20 5b 4f 70 65 72  pt for the [Oper
12e50 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65  ator ||] concate
12e60 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20  nation operator 
12e70 77 68 69 63 68 20 61 6c 77 61 79 73 20 0a 65 76  which always .ev
12e80 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65  aluates to eithe
12e90 72 20 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78 74  r NULL or a text
12ea0 20 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64   value.</p>"..hd
12eb0 5f 66 72 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e  _fragment {isisn
12ec0 6f 74 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f 72  ot} {IS operator
12ed0 7d 20 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  } {IS NOT operat
12ee0 6f 72 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70  or}..hd_puts "<p
12ef0 3e 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20  >^The [Operator 
12f00 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f  IS] and [Operato
12f10 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72  r {IS NOT}] oper
12f20 61 74 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20  ators work.like 
12f30 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64  [Operator =] and
12f40 20 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 65   [Operator !=] e
12f50 78 63 65 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f  xcept when one o
12f60 72 20 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70  r both of the.op
12f70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e  erands are NULL.
12f80 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20   ^In this case, 
12f90 69 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  if both operands
12fa0 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   are NULL, then 
12fb0 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20  the.IS operator 
12fc0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 20 28  evaluates to 1 (
12fd0 74 72 75 65 29 20 61 6e 64 20 74 68 65 20 49 53  true) and the IS
12fe0 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 65 76   NOT operator ev
12ff0 61 6c 75 61 74 65 73 0a 74 6f 20 30 20 28 66 61  aluates.to 0 (fa
13000 6c 73 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70  lse). ^If one op
13010 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e  erand is NULL an
13020 64 20 74 68 65 20 6f 74 68 65 72 20 69 73 20 6e  d the other is n
13030 6f 74 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20  ot, then the.IS 
13040 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
13050 65 73 20 74 6f 20 30 20 28 66 61 6c 73 65 29 20  es to 0 (false) 
13060 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f  and the IS NOT o
13070 70 65 72 61 74 6f 72 20 69 73 20 31 20 28 74 72  perator is 1 (tr
13080 75 65 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20  ue)..^It is not 
13090 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 6e 20  possible for an 
130a0 49 53 20 6f 72 20 49 53 20 4e 4f 54 20 65 78 70  IS or IS NOT exp
130b0 72 65 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75  ression to evalu
130c0 61 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70  ate to NULL..^Op
130d0 65 72 61 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f  erators [Operato
130e0 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61  r IS] and [Opera
130f0 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61  tor {IS NOT}] ha
13100 76 65 20 74 68 65 20 73 61 6d 65 20 0a 70 72 65  ve the same .pre
13110 63 65 64 65 6e 63 65 20 61 73 20 5b 4f 70 65 72  cedence as [Oper
13120 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e  ator =]."..<tcl>
13130 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74 76  hd_fragment litv
13140 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20 76 61  alue {literal va
13150 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c  lue}</tcl>.<h3>L
13160 69 74 65 72 61 6c 20 56 61 6c 75 65 73 20 28 43  iteral Values (C
13170 6f 6e 73 74 61 6e 74 73 29 3c 2f 68 33 3e 0a 3c  onstants)</h3>.<
13180 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76 61 6c  p>.A literal val
13190 75 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ue represents a 
131a0 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c 69 74 65 72  constant..^Liter
131b0 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65  al values may be
131c0 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61 74   integers, float
131d0 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
131e0 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42  s, strings,.BLOB
131f0 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a 3c 70 3e  s, or NULLs..<p>
13200 0a 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20  .The syntax for 
13210 69 6e 74 65 67 65 72 20 61 6e 64 20 66 6c 6f 61  integer and floa
13220 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72  ting point liter
13230 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c  als (collectivel
13240 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69 74 65 72  y."numeric liter
13250 61 6c 73 22 29 20 69 73 20 73 68 6f 77 6e 20 62  als") is shown b
13260 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  y the following 
13270 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c 74  diagram:</p>..<t
13280 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
13290 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65 72 61 6c   numeric-literal
132a0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49 66  </tcl>..<p>.^(If
132b0 20 61 20 6e 75 6d 65 72 69 63 20 6c 69 74 65 72   a numeric liter
132c0 61 6c 20 68 61 73 20 61 20 64 65 63 69 6d 61 6c  al has a decimal
132d0 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20 65 78 70   point or an exp
132e0 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75  onentiation.clau
132f0 73 65 20 6f 72 20 69 66 20 69 74 73 20 6d 61 67  se or if its mag
13300 6e 69 74 75 64 65 20 69 73 20 6c 65 73 73 20 74  nitude is less t
13310 68 61 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38  han -92233720368
13320 35 34 37 37 35 38 30 38 20 6f 72 0a 67 72 65 61  54775808 or.grea
13330 74 65 72 20 74 68 61 6e 20 39 32 32 33 33 37 32  ter than 9223372
13340 30 33 36 38 35 34 37 37 35 38 30 37 2c 20 74 68  036854775807, th
13350 65 6e 20 69 74 20 69 73 20 61 20 66 6c 6f 61 74  en it is a float
13360 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
13370 6c 2e 0a 4f 74 68 65 72 77 69 73 65 20 69 73 20  l..Otherwise is 
13380 69 74 20 69 73 20 61 6e 20 20 69 6e 74 65 67 65  it is an  intege
13390 72 20 6c 69 74 65 72 61 6c 2e 29 5e 0a 5e 54 68  r literal.)^.^Th
133a0 65 20 22 45 22 20 63 68 61 72 61 63 74 65 72 20  e "E" character 
133b0 74 68 61 74 20 62 65 67 69 6e 73 20 74 68 65 20  that begins the 
133c0 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
133d0 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74  lause of a float
133e0 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
133f0 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  l can be either 
13400 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63  upper or lower c
13410 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63  ase..^(The "." c
13420 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61  haracter is alwa
13430 79 73 20 75 73 65 64 20 0a 61 73 20 74 68 65 20  ys used .as the 
13440 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76  decimal point ev
13450 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65  en if the locale
13460 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69   setting specifi
13470 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20  es "," for.this 
13480 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f  role - the use o
13490 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65  f "," for the de
134a0 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c  cimal point woul
134b0 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74  d result in.synt
134c0 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e  actic ambiguity.
134d0 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
134e0 6d 65 6e 74 20 68 65 78 69 6e 74 20 7b 68 65 78  ment hexint {hex
134f0 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
13500 20 6c 69 74 65 72 61 6c 73 7d 20 7b 68 65 78 61   literals} {hexa
13510 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73  decimal integers
13520 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 48 65 78 61  }</tcl>.<p>^Hexa
13530 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20  decimal integer 
13540 6c 69 74 65 72 61 6c 73 20 66 6f 6c 6c 6f 77 20  literals follow 
13550 74 68 65 20 43 2d 6c 61 6e 67 75 61 67 65 20 6e  the C-language n
13560 6f 74 61 74 69 6f 6e 20 6f 66 0a 22 30 78 22 20  otation of."0x" 
13570 6f 72 20 22 30 58 22 20 66 6f 6c 6c 6f 77 65 64  or "0X" followed
13580 20 62 79 20 68 65 78 61 64 65 63 69 6d 61 6c 20   by hexadecimal 
13590 64 69 67 69 74 73 2e 0a 5e 46 6f 72 20 65 78 61  digits..^For exa
135a0 6d 70 6c 65 2c 20 30 78 31 32 33 34 20 6d 65 61  mple, 0x1234 mea
135b0 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 34  ns the same as 4
135c0 36 36 30 0a 61 6e 64 20 30 78 38 30 30 30 30 30  660.and 0x800000
135d0 30 30 30 30 30 30 30 30 30 30 20 6d 65 61 6e 73  0000000000 means
135e0 20 74 68 65 20 73 61 6d 65 20 61 73 20 2d 39 32   the same as -92
135f0 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
13600 38 2e 0a 20 5e 28 48 65 78 61 64 65 63 69 6d 61  8.. ^(Hexadecima
13610 6c 20 69 6e 74 65 67 65 72 20 6c 69 74 65 72 61  l integer litera
13620 6c 73 20 61 72 65 20 69 6e 74 65 72 70 72 65 74  ls are interpret
13630 65 64 20 61 73 20 36 34 2d 62 69 74 0a 74 77 6f  ed as 64-bit.two
13640 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  's-complement in
13650 74 65 67 65 72 73 20 61 6e 64 20 61 72 65 20 74  tegers and are t
13660 68 75 73 20 6c 69 6d 69 74 65 64 0a 74 6f 20 73  hus limited.to s
13670 69 78 74 65 65 6e 20 73 69 67 6e 69 66 69 63 61  ixteen significa
13680 6e 74 20 64 69 67 69 74 73 20 6f 66 20 70 72 65  nt digits of pre
13690 63 69 73 69 6f 6e 2e 29 5e 0a 53 75 70 70 6f 72  cision.)^.Suppor
136a0 74 20 66 6f 72 20 68 65 78 61 64 65 63 69 6d 61  t for hexadecima
136b0 6c 20 69 6e 74 65 67 65 72 73 20 77 61 73 20 61  l integers was a
136c0 64 64 65 64 20 74 6f 20 53 51 4c 69 74 65 20 76  dded to SQLite v
136d0 65 72 73 69 6f 6e 20 33 2e 38 2e 36 2e 0a 5e 46  ersion 3.8.6..^F
136e0 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
136f0 70 61 74 69 62 69 6c 69 74 79 2c 20 74 68 65 20  patibility, the 
13700 22 30 78 22 20 68 65 78 61 64 65 63 69 6d 61 6c  "0x" hexadecimal
13710 20 69 6e 74 65 67 65 72 0a 6e 6f 74 61 74 69 6f   integer.notatio
13720 6e 20 69 73 20 6f 6e 6c 79 20 75 6e 64 65 72 73  n is only unders
13730 74 6f 6f 64 20 62 79 20 74 68 65 20 53 51 4c 20  tood by the SQL 
13740 6c 61 6e 67 75 61 67 65 20 70 61 72 73 65 72 2c  language parser,
13750 20 6e 6f 74 20 62 79 20 74 68 65 0a 74 79 70 65   not by the.type
13760 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 72 6f 75   conversions rou
13770 74 69 6e 65 73 2e 0a 5e 28 53 74 72 69 6e 67 20  tines..^(String 
13780 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 0a 63  variables that.c
13790 6f 6e 74 61 69 6e 20 74 65 78 74 20 66 6f 72 6d  ontain text form
137a0 61 74 74 65 64 20 6c 69 6b 65 20 68 65 78 61 64  atted like hexad
137b0 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20  ecimal integers 
137c0 61 72 65 20 6e 6f 74 0a 69 6e 74 65 72 70 72 65  are not.interpre
137d0 74 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d  ted as hexadecim
137e0 61 6c 20 69 6e 74 65 67 65 72 73 20 77 68 65 6e  al integers when
137f0 20 63 6f 65 72 63 69 6e 67 20 74 68 65 20 73 74   coercing the st
13800 72 69 6e 67 20 76 61 6c 75 65 0a 69 6e 74 6f 20  ring value.into 
13810 61 6e 20 69 6e 74 65 67 65 72 20 64 75 65 20 74  an integer due t
13820 6f 20 61 20 5b 43 41 53 54 20 65 78 70 72 65 73  o a [CAST expres
13830 73 69 6f 6e 5d 20 6f 72 20 66 6f 72 20 61 20 5b  sion] or for a [
13840 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d  column affinity]
13850 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20  .transformation 
13860 6f 72 20 70 72 69 6f 72 20 74 6f 20 70 65 72 66  or prior to perf
13870 6f 72 6d 69 6e 67 20 61 20 6e 75 6d 65 72 69 63  orming a numeric
13880 20 6f 70 65 72 61 74 69 6f 6e 20 6f 72 20 66 6f   operation or fo
13890 72 0a 61 6e 79 20 6f 74 68 65 72 20 72 75 6e 2d  r.any other run-
138a0 74 69 6d 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73  time conversions
138b0 2e 29 5e 20 20 5e 28 57 68 65 6e 20 63 6f 65 72  .)^  ^(When coer
138c0 63 69 6e 67 20 61 0a 73 74 72 69 6e 67 20 76 61  cing a.string va
138d0 6c 75 65 20 69 6e 20 74 68 65 20 66 6f 72 6d 61  lue in the forma
138e0 74 20 6f 66 20 61 20 68 65 78 61 64 65 63 69 6d  t of a hexadecim
138f0 61 6c 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20  al integer into 
13900 61 6e 20 69 6e 74 65 67 65 72 0a 76 61 6c 75 65  an integer.value
13910 2c 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  , the conversion
13920 20 70 72 6f 63 65 73 73 20 73 74 6f 70 73 20 77   process stops w
13930 68 65 6e 20 74 68 65 20 27 78 27 20 63 68 61 72  hen the 'x' char
13940 61 63 74 65 72 20 69 73 20 73 65 65 6e 0a 73 6f  acter is seen.so
13950 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 69   the resulting i
13960 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 73 20  nteger value is 
13970 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 5e  always zero.)^.^
13980 28 53 51 4c 69 74 65 20 6f 6e 6c 79 20 75 6e 64  (SQLite only und
13990 65 72 73 74 61 6e 64 73 20 74 68 65 20 68 65 78  erstands the hex
139a0 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
139b0 20 6e 6f 74 61 74 69 6f 6e 20 77 68 65 6e 20 69   notation when i
139c0 74 0a 61 70 70 65 61 72 73 20 69 6e 20 74 68 65  t.appears in the
139d0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74   SQL statement t
139e0 65 78 74 2c 20 6e 6f 74 20 77 68 65 6e 20 69 74  ext, not when it
139f0 20 61 70 70 65 61 72 73 20 61 73 0a 70 61 72 74   appears as.part
13a00 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
13a10 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
13a20 29 5e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72 69 6e  )^..<p> ^A strin
13a30 67 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f  g constant is fo
13a40 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e  rmed by enclosin
13a50 67 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e 20  g the.string in 
13a60 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28 27  single quotes ('
13a70 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 71 75  ).  ^A single qu
13a80 6f 74 65 20 77 69 74 68 69 6e 20 74 68 65 20 73  ote within the s
13a90 74 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63  tring can.be enc
13aa0 6f 64 65 64 20 62 79 20 70 75 74 74 69 6e 67 20  oded by putting 
13ab0 74 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74 65  two single quote
13ac0 73 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73 20  s in a row - as 
13ad0 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79  in Pascal..C-sty
13ae0 6c 65 20 65 73 63 61 70 65 73 20 75 73 69 6e 67  le escapes using
13af0 20 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20 63   the backslash c
13b00 68 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f 74  haracter are not
13b10 20 73 75 70 70 6f 72 74 65 64 20 62 65 63 61 75   supported becau
13b20 73 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74 20  se.they are not 
13b30 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 0a 3c  standard SQL...<
13b40 70 3e 20 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c  p> ^BLOB literal
13b50 73 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69 74  s are string lit
13b60 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67  erals containing
13b70 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61 74   hexadecimal dat
13b80 61 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20 62  a and.preceded b
13b90 79 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20 6f  y a single "x" o
13ba0 72 20 22 58 22 20 63 68 61 72 61 63 74 65 72 2e  r "X" character.
13bb0 20 20 5e 28 45 78 61 6d 70 6c 65 3a 20 58 27 35    ^(Example: X'5
13bc0 33 35 31 34 43 36 39 37 34 36 35 27 29 5e 0a 0a  3514C697465')^..
13bd0 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76  <p>.^A literal v
13be0 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20 62 65  alue can also be
13bf0 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c   the token "NULL
13c00 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  "..</p>..<tcl>hd
13c10 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 70 61 72  _fragment varpar
13c20 61 6d 20 70 61 72 61 6d 65 74 65 72 20 70 61 72  am parameter par
13c30 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e 64 20 70  ameters {bound p
13c40 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64  arameter} {bound
13c50 20 70 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63   parameters}</tc
13c60 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65 72  l>.<h3>Parameter
13c70 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61  s</h3>.<p>.A "va
13c80 72 69 61 62 6c 65 22 20 6f 72 20 22 70 61 72 61  riable" or "para
13c90 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65  meter" token.spe
13ca0 63 69 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f  cifies a placeho
13cb0 6c 64 65 72 20 69 6e 20 74 68 65 20 65 78 70 72  lder in the expr
13cc0 65 73 73 69 6f 6e 20 66 6f 72 20 61 20 0a 76 61  ession for a .va
13cd0 6c 75 65 20 74 68 61 74 20 69 73 20 66 69 6c 6c  lue that is fill
13ce0 65 64 20 69 6e 20 61 74 20 72 75 6e 74 69 6d 65  ed in at runtime
13cf0 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69   using the.[sqli
13d00 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20  te3_bind_blob() 
13d10 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29  | sqlite3_bind()
13d20 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43 2f 43 2b  ] family of C/C+
13d30 2b 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 50 61  + interfaces..Pa
13d40 72 61 6d 65 74 65 72 73 20 63 61 6e 20 74 61 6b  rameters can tak
13d50 65 20 73 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a  e several forms:
13d60 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
13d70 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e  te>.<table>.<tr>
13d80 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
13d90 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
13da0 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f  <b>?</b><i>NNN</
13db0 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
13dc0 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
13dd0 5e 28 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72  ^(A question mar
13de0 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  k followed by a 
13df0 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69  number <i>NNN</i
13e00 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  > holds a spot f
13e10 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61  or the.NNN-th pa
13e20 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75  rameter.  NNN mu
13e30 73 74 20 62 65 20 62 65 74 77 65 65 6e 20 31 20  st be between 1 
13e40 61 6e 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  and [SQLITE_MAX_
13e50 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
13e60 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  .)^.</td>.</tr>.
13e70 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
13e80 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
13e90 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64  op"><b>?</b></td
13ea0 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
13eb0 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 71 75 65  </td>.<td>^A que
13ec0 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74 20  stion mark that 
13ed0 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20  is not followed 
13ee0 62 79 20 61 20 6e 75 6d 62 65 72 20 63 72 65 61  by a number crea
13ef0 74 65 73 20 61 20 70 61 72 61 6d 65 74 65 72 0a  tes a parameter.
13f00 77 69 74 68 20 61 20 6e 75 6d 62 65 72 20 6f 6e  with a number on
13f10 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  e greater than t
13f20 68 65 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d  he largest param
13f30 65 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65  eter number alre
13f40 61 64 79 20 61 73 73 69 67 6e 65 64 2e 0a 5e 49  ady assigned..^I
13f50 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65  f this means the
13f60 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
13f70 72 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  r is greater tha
13f80 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  n.[SQLITE_MAX_VA
13f90 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20  RIABLE_NUMBER], 
13fa0 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a  it is an error..
13fb0 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 66  This parameter f
13fc0 6f 72 6d 61 74 20 69 73 20 70 72 6f 76 69 64 65  ormat is provide
13fd0 64 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c  d for compatibil
13fe0 69 74 79 20 77 69 74 68 20 6f 74 68 65 72 20 64  ity with other d
13ff0 61 74 61 62 61 73 65 0a 65 6e 67 69 6e 65 73 2e  atabase.engines.
14000 20 20 42 75 74 20 62 65 63 61 75 73 65 20 69 74    But because it
14010 20 69 73 20 65 61 73 79 20 74 6f 20 6d 69 73 63   is easy to misc
14020 6f 75 6e 74 20 74 68 65 20 71 75 65 73 74 69 6f  ount the questio
14030 6e 20 6d 61 72 6b 73 2c 20 74 68 65 0a 75 73 65  n marks, the.use
14040 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74   of this paramet
14050 65 72 20 66 6f 72 6d 61 74 20 69 73 20 64 69 73  er format is dis
14060 63 6f 75 72 61 67 65 64 2e 20 20 50 72 6f 67 72  couraged.  Progr
14070 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75  ammers are encou
14080 72 61 67 65 64 0a 74 6f 20 75 73 65 20 6f 6e 65  raged.to use one
14090 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 69 63   of the symbolic
140a0 20 66 6f 72 6d 61 74 73 20 62 65 6c 6f 77 20 6f   formats below o
140b0 72 20 74 68 65 20 3f 4e 4e 4e 20 66 6f 72 6d 61  r the ?NNN forma
140c0 74 20 61 62 6f 76 65 20 69 6e 73 74 65 61 64 2e  t above instead.
140d0 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
140e0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
140f0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
14100 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41  ><b>:</b><i>AAAA
14110 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </i></td><td wid
14120 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
14130 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f  d>^A colon follo
14140 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69  wed by an identi
14150 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20  fier name holds 
14160 61 20 73 70 6f 74 20 66 6f 72 20 61 20 0a 5b 73  a spot for a .[s
14170 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
14180 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65 64  meter_name|named
14190 20 70 61 72 61 6d 65 74 65 72 5d 20 77 69 74 68   parameter] with
141a0 20 74 68 65 20 6e 61 6d 65 20 3a 41 41 41 41 2e   the name :AAAA.
141b0 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61 72 61 6d    .^(Named param
141c0 65 74 65 72 73 20 61 72 65 20 61 6c 73 6f 20 6e  eters are also n
141d0 75 6d 62 65 72 65 64 2e 20 54 68 65 20 6e 75 6d  umbered. The num
141e0 62 65 72 20 61 73 73 69 67 6e 65 64 20 69 73 20  ber assigned is 
141f0 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68 61 6e  one greater than
14200 0a 74 68 65 20 6c 61 72 67 65 73 74 20 70 61 72  .the largest par
14210 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61 6c  ameter number al
14220 72 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e 29  ready assigned.)
14230 5e 20 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73  ^ ^If this means
14240 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 0a 77   the parameter.w
14250 6f 75 6c 64 20 62 65 20 61 73 73 69 67 6e 65 64  ould be assigned
14260 20 61 20 6e 75 6d 62 65 72 20 67 72 65 61 74 65   a number greate
14270 72 20 74 68 61 6e 20 5b 53 51 4c 49 54 45 5f 4d  r than [SQLITE_M
14280 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
14290 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e 20 65 72  ER], it is.an er
142a0 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64 20 63 6f  ror. To avoid co
142b0 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69 73 20 62  nfusion, it is b
142c0 65 73 74 20 74 6f 20 61 76 6f 69 64 20 6d 69 78  est to avoid mix
142d0 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75  ing named and nu
142e0 6d 62 65 72 65 64 0a 70 61 72 61 6d 65 74 65 72  mbered.parameter
142f0 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  s.</td>.</tr>.<t
14300 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
14310 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
14320 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41  "><b>@</b><i>AAA
14330 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  A</i></td><td wi
14340 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
14350 74 64 3e 5e 41 6e 20 22 61 74 22 20 73 69 67 6e  td>^An "at" sign
14360 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c   works exactly l
14370 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20 65 78 63  ike a colon, exc
14380 65 70 74 20 74 68 61 74 20 74 68 65 20 6e 61 6d  ept that the nam
14390 65 20 6f 66 0a 74 68 65 20 70 61 72 61 6d 65 74  e of.the paramet
143a0 65 72 20 63 72 65 61 74 65 64 20 69 73 20 40 41  er created is @A
143b0 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  AAA.</td>.</tr>.
143c0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
143d0 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
143e0 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41  op"><b>$</b><i>A
143f0 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
14400 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
14410 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d 73  .<td>^A dollar-s
14420 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ign followed by 
14430 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61  an identifier na
14440 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20  me also holds a 
14450 73 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64  spot for a named
14460 0a 70 61 72 61 6d 65 74 65 72 20 77 69 74 68 20  .parameter with 
14470 74 68 65 20 6e 61 6d 65 20 24 41 41 41 41 2e 20  the name $AAAA. 
14480 20 5e 28 54 68 65 20 69 64 65 6e 74 69 66 69 65   ^(The identifie
14490 72 20 6e 61 6d 65 20 69 6e 20 74 68 69 73 20 63  r name in this c
144a0 61 73 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a  ase can include.
144b0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75  one or more occu
144c0 72 72 65 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20  rrences of "::" 
144d0 61 6e 64 20 61 20 73 75 66 66 69 78 20 65 6e 63  and a suffix enc
144e0 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22  losed in "(...)"
144f0 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20   containing.any 
14500 74 65 78 74 20 61 74 20 61 6c 6c 2e 29 5e 20 20  text at all.)^  
14510 54 68 69 73 20 73 79 6e 74 61 78 20 69 73 20 74  This syntax is t
14520 68 65 20 66 6f 72 6d 20 6f 66 20 61 20 76 61 72  he form of a var
14530 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68  iable name in th
14540 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63  e.[http://www.tc
14550 6c 2e 74 6b 2f 20 7c 20 54 63 6c 20 70 72 6f 67  l.tk/ | Tcl prog
14560 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65  ramming language
14570 5d 2e 20 20 54 68 65 20 70 72 65 73 65 6e 63 65  ].  The presence
14580 0a 6f 66 20 74 68 69 73 20 73 79 6e 74 61 78 20  .of this syntax 
14590 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65  results from the
145a0 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69 74   fact that SQLit
145b0 65 20 69 73 20 72 65 61 6c 6c 79 20 61 20 0a 5b  e is really a .[
145c0 54 63 6c 20 65 78 74 65 6e 73 69 6f 6e 5d 20 74  Tcl extension] t
145d0 68 61 74 20 68 61 73 20 65 73 63 61 70 65 64 20  hat has escaped 
145e0 69 6e 74 6f 20 74 68 65 20 77 69 6c 64 2e 3c 2f  into the wild.</
145f0 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  td>.</tr>.</tabl
14600 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
14610 0a 0a 3c 70 3e 5e 50 61 72 61 6d 65 74 65 72 73  ..<p>^Parameters
14620 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61 73   that are not as
14630 73 69 67 6e 65 64 20 76 61 6c 75 65 73 20 75 73  signed values us
14640 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e  ing.[sqlite3_bin
14650 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74  d_blob() | sqlit
14660 65 33 5f 62 69 6e 64 28 29 5d 20 61 72 65 20 74  e3_bind()] are t
14670 72 65 61 74 65 64 0a 61 73 20 4e 55 4c 4c 2e 20  reated.as NULL. 
14680 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 62 69   The [sqlite3_bi
14690 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
146a0 65 78 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  ex()] interface 
146b0 63 61 6e 20 62 65 20 75 73 65 64 0a 74 6f 20 74  can be used.to t
146c0 72 61 6e 73 6c 61 74 65 20 61 20 73 79 6d 62 6f  ranslate a symbo
146d0 6c 69 63 20 70 61 72 61 6d 65 74 65 72 20 6e 61  lic parameter na
146e0 6d 65 20 69 6e 74 6f 20 69 74 73 20 65 71 75 69  me into its equi
146f0 76 61 6c 65 6e 74 20 6e 75 6d 65 72 69 63 20 69  valent numeric i
14700 6e 64 65 78 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ndex.</p>..<p>^T
14710 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d  he maximum param
14720 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73 20 73  eter number is s
14730 65 74 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  et at compile-ti
14740 6d 65 20 62 79 0a 74 68 65 20 5b 53 51 4c 49 54  me by.the [SQLIT
14750 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
14760 55 4d 42 45 52 5d 20 6d 61 63 72 6f 2e 20 20 5e  UMBER] macro.  ^
14770 28 41 6e 20 69 6e 64 69 76 69 64 75 61 6c 20 5b  (An individual [
14780 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
14790 69 6f 6e 5d 0a 44 20 63 61 6e 20 72 65 64 75 63  ion].D can reduc
147a0 65 20 69 74 73 20 6d 61 78 69 6d 75 6d 20 70 61  e its maximum pa
147b0 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 62  rameter number b
147c0 65 6c 6f 77 20 74 68 65 20 63 6f 6d 70 69 6c 65  elow the compile
147d0 2d 74 69 6d 65 20 6d 61 78 69 6d 75 6d 0a 75 73  -time maximum.us
147e0 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ing the [sqlite3
147f0 5f 6c 69 6d 69 74 5d 28 44 2c 20 5b 53 51 4c 49  _limit](D, [SQLI
14800 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c  TE_LIMIT_VARIABL
14810 45 5f 4e 55 4d 42 45 52 5d 2c 2e 2e 2e 29 20 69  E_NUMBER],...) i
14820 6e 74 65 72 66 61 63 65 2e 29 5e 0a 3c 2f 70 3e  nterface.)^.</p>
14830 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
14840 6e 74 20 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43  nt like LIKE ESC
14850 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  APE</tcl>.<h3>Th
14860 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20  e LIKE and GLOB 
14870 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c  operators</h3>.<
14880 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72  p>^The LIKE oper
14890 61 74 6f 72 20 64 6f 65 73 20 61 20 70 61 74 74  ator does a patt
148a0 65 72 6e 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d  ern matching com
148b0 70 61 72 69 73 6f 6e 2e 20 5e 54 68 65 20 6f 70  parison. ^The op
148c0 65 72 61 6e 64 0a 74 6f 20 74 68 65 20 72 69 67  erand.to the rig
148d0 68 74 20 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f  ht of the LIKE o
148e0 70 65 72 61 74 6f 72 20 63 6f 6e 74 61 69 6e 73  perator contains
148f0 20 74 68 65 20 70 61 74 74 65 72 6e 20 61 6e 64   the pattern and
14900 20 74 68 65 20 6c 65 66 74 20 68 61 6e 64 0a 6f   the left hand.o
14910 70 65 72 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20  perand contains 
14920 74 68 65 20 73 74 72 69 6e 67 20 74 6f 20 6d 61  the string to ma
14930 74 63 68 20 61 67 61 69 6e 73 74 20 74 68 65 20  tch against the 
14940 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68  pattern...<tcl>h
14950 64 5f 70 75 74 73 20 22 5e 41 20 70 65 72 63 65  d_puts "^A perce
14960 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22 25 5c 22  nt symbol (\"%\"
14970 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61  ) in the LIKE pa
14980 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e  ttern matches an
14990 79 0a 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65  y.sequence of ze
149a0 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61  ro or more chara
149b0 63 74 65 72 73 20 69 6e 20 74 68 65 20 73 74 72  cters in the str
149c0 69 6e 67 2e 20 20 5e 41 6e 20 75 6e 64 65 72 73  ing.  ^An unders
149d0 63 6f 72 65 0a 28 5c 22 5f 5c 22 29 20 69 6e 20  core.(\"_\") in 
149e0 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e  the LIKE pattern
149f0 20 6d 61 74 63 68 65 73 20 61 6e 79 20 73 69 6e   matches any sin
14a00 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 69 6e  gle character in
14a10 20 74 68 65 0a 73 74 72 69 6e 67 2e 20 20 5e 28   the.string.  ^(
14a20 41 6e 79 20 6f 74 68 65 72 20 63 68 61 72 61 63  Any other charac
14a30 74 65 72 20 6d 61 74 63 68 65 73 20 69 74 73 65  ter matches itse
14a40 6c 66 20 6f 72 20 69 74 73 20 6c 6f 77 65 72 2f  lf or its lower/
14a50 75 70 70 65 72 20 63 61 73 65 0a 65 71 75 69 76  upper case.equiv
14a60 61 6c 65 6e 74 20 28 69 2e 65 2e 20 63 61 73 65  alent (i.e. case
14a70 2d 69 6e 73 65 6e 73 69 74 69 76 65 20 6d 61 74  -insensitive mat
14a80 63 68 69 6e 67 29 2e 29 5e 20 20 28 41 20 62 75  ching).)^  (A bu
14a90 67 3a 20 5e 53 51 4c 69 74 65 20 6f 6e 6c 79 0a  g: ^SQLite only.
14aa0 75 6e 64 65 72 73 74 61 6e 64 73 20 75 70 70 65  understands uppe
14ab0 72 2f 6c 6f 77 65 72 20 63 61 73 65 20 66 6f 72  r/lower case for
14ac0 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
14ad0 73 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 5e  s by default.  ^
14ae0 54 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f  The.LIKE operato
14af0 72 20 69 73 20 63 61 73 65 20 73 65 6e 73 69 74  r is case sensit
14b00 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 20 66  ive by default f
14b10 6f 72 20 75 6e 69 63 6f 64 65 20 63 68 61 72 61  or unicode chara
14b20 63 74 65 72 73 20 74 68 61 74 20 61 72 65 0a 62  cters that are.b
14b30 65 79 6f 6e 64 20 74 68 65 20 41 53 43 49 49 20  eyond the ASCII 
14b40 72 61 6e 67 65 2e 20 20 46 6f 72 20 65 78 61 6d  range.  For exam
14b50 70 6c 65 2c 0a 5e 74 68 65 20 65 78 70 72 65 73  ple,.^the expres
14b60 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70  sion <b>'a'&nbsp
14b70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f  ;LIKE&nbsp;'A'</
14b80 62 3e 0a 69 73 20 54 52 55 45 20 62 75 74 20 3c  b>.is TRUE but <
14b90 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e 62 73 70  b>'&aelig;'&nbsp
14ba0 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c  ;LIKE&nbsp;'&AEl
14bb0 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53  ig;'</b> is FALS
14bc0 45 2e 29 3c 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c  E.)<p>"</tcl>..<
14bd0 70 3e 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e  p>^If the option
14be0 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65  al ESCAPE clause
14bf0 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65   is present, the
14c00 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
14c10 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45  .following the E
14c20 53 43 41 50 45 20 6b 65 79 77 6f 72 64 20 6d 75  SCAPE keyword mu
14c30 73 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61  st evaluate to a
14c40 20 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69   string consisti
14c50 6e 67 20 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63  ng of.a single c
14c60 68 61 72 61 63 74 65 72 2e 20 5e 54 68 69 73 20  haracter. ^This 
14c70 63 68 61 72 61 63 74 65 72 20 6d 61 79 20 62 65  character may be
14c80 20 75 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4b   used in the LIK
14c90 45 20 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63  E pattern.to inc
14ca0 6c 75 64 65 20 6c 69 74 65 72 61 6c 20 70 65 72  lude literal per
14cb0 63 65 6e 74 20 6f 72 20 75 6e 64 65 72 73 63 6f  cent or undersco
14cc0 72 65 20 63 68 61 72 61 63 74 65 72 73 2e 20 5e  re characters. ^
14cd0 54 68 65 20 65 73 63 61 70 65 0a 63 68 61 72 61  The escape.chara
14ce0 63 74 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79  cter followed by
14cf0 20 61 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f   a percent symbo
14d00 6c 20 28 25 29 2c 20 75 6e 64 65 72 73 63 6f 72  l (%), underscor
14d10 65 20 28 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f  e (_), or a seco
14d20 6e 64 0a 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  nd.instance of t
14d30 68 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63  he escape charac
14d40 74 65 72 20 69 74 73 65 6c 66 20 6d 61 74 63 68  ter itself match
14d50 65 73 20 61 0a 6c 69 74 65 72 61 6c 20 70 65 72  es a.literal per
14d60 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64  cent symbol, und
14d70 65 72 73 63 6f 72 65 2c 20 6f 72 20 61 20 73 69  erscore, or a si
14d80 6e 67 6c 65 20 65 73 63 61 70 65 20 63 68 61 72  ngle escape char
14d90 61 63 74 65 72 2c 0a 72 65 73 70 65 63 74 69 76  acter,.respectiv
14da0 65 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e  ely...<p>^The in
14db0 66 69 78 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  fix LIKE operato
14dc0 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  r is implemented
14dd0 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a   by calling the.
14de0 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
14df0 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ned SQL function
14e00 73 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e  s [like(<i>Y</i>
14e10 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b  ,<i>X</i>)] or.[
14e20 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  like(<i>Y</i>,<i
14e30 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29  >X</i>,<i>Z</i>)
14e40 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ]</a>.</p>..<p>^
14e50 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  The LIKE operato
14e60 72 20 63 61 6e 20 62 65 20 6d 61 64 65 20 63 61  r can be made ca
14e70 73 65 20 73 65 6e 73 69 74 69 76 65 20 75 73 69  se sensitive usi
14e80 6e 67 20 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e  ng the.[case_sen
14e90 73 69 74 69 76 65 5f 6c 69 6b 65 20 70 72 61 67  sitive_like prag
14ea0 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ma].</p>..<tcl>h
14eb0 64 5f 66 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20  d_fragment glob 
14ec0 47 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  GLOB</tcl>.<p>^T
14ed0 68 65 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72  he GLOB operator
14ee0 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c   is similar to L
14ef0 49 4b 45 20 62 75 74 20 75 73 65 73 20 74 68 65  IKE but uses the
14f00 20 55 6e 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62   Unix.file globb
14f10 69 6e 67 20 73 79 6e 74 61 78 20 66 6f 72 20 69  ing syntax for i
14f20 74 73 20 77 69 6c 64 63 61 72 64 73 2e 20 20 5e  ts wildcards.  ^
14f30 41 6c 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61  Also, GLOB is ca
14f40 73 65 0a 73 65 6e 73 69 74 69 76 65 2c 20 75 6e  se.sensitive, un
14f50 6c 69 6b 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74  like LIKE.  ^Bot
14f60 68 20 47 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20  h GLOB and LIKE 
14f70 6d 61 79 20 62 65 20 70 72 65 63 65 64 65 64 20  may be preceded 
14f80 62 79 0a 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f  by.the NOT keywo
14f90 72 64 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65  rd to invert the
14fa0 20 73 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65   sense of the te
14fb0 73 74 2e 20 20 5e 54 68 65 20 69 6e 66 69 78 20  st.  ^The infix 
14fc0 47 4c 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20 69  GLOB .operator i
14fd0 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
14fe0 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e   calling the fun
14ff0 63 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59  ction.[glob(<i>Y
15000 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20  </i>,<i>X</i>)] 
15010 61 6e 64 20 63 61 6e 20 62 65 20 6d 6f 64 69 66  and can be modif
15020 69 65 64 20 62 79 20 6f 76 65 72 72 69 64 69 6e  ied by overridin
15030 67 0a 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e  g.that function.
15040 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
15050 61 67 6d 65 6e 74 20 72 65 67 65 78 70 20 52 45  agment regexp RE
15060 47 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  GEXP</tcl>.<p>^T
15070 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
15080 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  or is a special 
15090 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 72  syntax for the r
150a0 65 67 65 78 70 28 29 0a 75 73 65 72 20 66 75 6e  egexp().user fun
150b0 63 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65  ction.  ^No rege
150c0 78 70 28 29 20 75 73 65 72 20 66 75 6e 63 74 69  xp() user functi
150d0 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
150e0 20 64 65 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20   default.and so 
150f0 75 73 65 20 6f 66 20 74 68 65 20 52 45 47 45 58  use of the REGEX
15100 50 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20  P operator will 
15110 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20  normally result 
15120 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73  in an.error mess
15130 61 67 65 2e 20 20 5e 49 66 20 61 6e 20 5b 61 70  age.  ^If an [ap
15140 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
15150 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20  d SQL function] 
15160 6e 61 6d 65 64 20 22 72 65 67 65 78 70 22 0a 69  named "regexp".i
15170 73 20 61 64 64 65 64 20 61 74 20 72 75 6e 2d 74  s added at run-t
15180 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 22 3c  ime, then the "<
15190 69 3e 58 3c 2f 69 3e 20 52 45 47 45 58 50 20 3c  i>X</i> REGEXP <
151a0 69 3e 59 3c 2f 69 3e 22 20 6f 70 65 72 61 74 6f  i>Y</i>" operato
151b0 72 20 77 69 6c 6c 0a 62 65 20 69 6d 70 6c 65 6d  r will.be implem
151c0 65 6e 74 65 64 20 61 73 20 61 20 63 61 6c 6c 20  ented as a call 
151d0 74 6f 20 22 72 65 67 65 78 70 28 3c 69 3e 59 3c  to "regexp(<i>Y<
151e0 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 22 2e 3c  /i>,<i>X</i>)".<
151f0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
15200 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41 54 43  gment match MATC
15210 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  H</tcl>.<p>^The 
15220 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69  MATCH operator i
15230 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74  s a special synt
15240 61 78 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68  ax for the match
15250 28 29 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  ().application-d
15260 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 2e  efined function.
15270 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 6d    ^The default m
15280 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  atch() function 
15290 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72  implementation.r
152a0 61 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69  aises an excepti
152b0 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20 72 65  on and is not re
152c0 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20  ally useful for 
152d0 61 6e 79 74 68 69 6e 67 2e 0a 5e 42 75 74 20 65  anything..^But e
152e0 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76  xtensions can ov
152f0 65 72 72 69 64 65 20 74 68 65 20 6d 61 74 63 68  erride the match
15300 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  () function with
15310 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f   more.helpful lo
15320 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  gic.</p>..<tcl>h
15330 64 5f 66 72 61 67 6d 65 6e 74 20 62 65 74 77 65  d_fragment betwe
15340 65 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63 6c 3e  en BETWEEN</tcl>
15350 0a 3c 68 33 3e 54 68 65 20 42 45 54 57 45 45 4e  .<h3>The BETWEEN
15360 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c   operator</h3>.<
15370 70 3e 5e 28 54 68 65 20 42 45 54 57 45 45 4e 20  p>^(The BETWEEN 
15380 6f 70 65 72 61 74 6f 72 20 69 73 20 6c 6f 67 69  operator is logi
15390 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74  cally equivalent
153a0 20 74 6f 20 61 20 70 61 69 72 20 6f 66 20 63 6f   to a pair of co
153b0 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c 69 3e 78  mparisons.."<i>x
153c0 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45 45 4e 3c  </i> <b>BETWEEN<
153d0 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e  /b> <i>y</i> <b>
153e0 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f 69 3e  AND</b> <i>z</i>
153f0 22 20 69 73 20 0a 65 71 75 69 76 61 6c 65 6e 74  " is .equivalent
15400 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69 3e 3c 62   to ."<i>x</i><b
15410 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f  >&gt;=</b><i>y</
15420 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69  i> <b>AND</b> <i
15430 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f  >x</i><b>&lt;=</
15440 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65 78 63 65  b><i>z</i>" exce
15450 70 74 0a 74 68 61 74 20 77 69 74 68 20 42 45 54  pt.that with BET
15460 57 45 45 4e 2c 20 74 68 65 20 3c 69 3e 78 3c 2f  WEEN, the <i>x</
15470 69 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  i> expression is
15480 20 6f 6e 6c 79 20 65 76 61 6c 75 61 74 65 64 20   only evaluated 
15490 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65 20 70 72 65  once.)^.^The pre
154a0 63 65 64 65 6e 63 65 20 6f 66 20 74 68 65 20 42  cedence of the B
154b0 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20  ETWEEN operator 
154c0 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  is the same as t
154d0 68 65 20 70 72 65 63 65 64 65 6e 63 65 0a 61 73  he precedence.as
154e0 20 6f 70 65 72 61 74 6f 72 73 20 3c 62 3e 3d 3d   operators <b>==
154f0 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f  </b> and <b>!=</
15500 62 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f  b> and <b>LIKE</
15510 62 3e 20 61 6e 64 20 67 72 6f 75 70 73 20 6c 65  b> and groups le
15520 66 74 20 74 6f 20 72 69 67 68 74 2e 0a 0a 3c 74  ft to right...<t
15530 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  cl>hd_fragment c
15540 61 73 65 20 7b 43 41 53 45 20 65 78 70 72 65 73  ase {CASE expres
15550 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  sion}</tcl>.<h3>
15560 54 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  The CASE express
15570 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20 43 41  ion</h3>.<p>A CA
15580 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 73 65  SE expression se
15590 72 76 65 73 20 61 20 72 6f 6c 65 20 73 69 6d 69  rves a role simi
155a0 6c 61 72 20 74 6f 20 49 46 2d 54 48 45 4e 2d 45  lar to IF-THEN-E
155b0 4c 53 45 20 69 6e 20 6f 74 68 65 72 0a 70 72 6f  LSE in other.pro
155c0 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67  gramming languag
155d0 65 73 2e 20 20 0a 0a 3c 70 3e 54 68 65 20 6f 70  es.  ..<p>The op
155e0 74 69 6f 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  tional expressio
155f0 6e 20 74 68 61 74 20 6f 63 63 75 72 73 20 69 6e  n that occurs in
15600 20 62 65 74 77 65 65 6e 20 74 68 65 20 43 41 53   between the CAS
15610 45 20 6b 65 79 77 6f 72 64 20 61 6e 64 20 74 68  E keyword and th
15620 65 0a 66 69 72 73 74 20 57 48 45 4e 20 6b 65 79  e.first WHEN key
15630 77 6f 72 64 20 69 73 20 63 61 6c 6c 65 64 20 74  word is called t
15640 68 65 20 22 62 61 73 65 22 20 65 78 70 72 65 73  he "base" expres
15650 73 69 6f 6e 2e 20 5e 54 68 65 72 65 20 61 72 65  sion. ^There are
15660 20 74 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73   two basic forms
15670 0a 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70  .of the CASE exp
15680 72 65 73 73 69 6f 6e 3a 20 74 68 6f 73 65 20 77  ression: those w
15690 69 74 68 20 61 20 62 61 73 65 20 65 78 70 72 65  ith a base expre
156a0 73 73 69 6f 6e 20 61 6e 64 20 74 68 6f 73 65 20  ssion and those 
156b0 77 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e 5e 49 6e  without...<p>^In
156c0 20 61 20 43 41 53 45 20 77 69 74 68 6f 75 74 20   a CASE without 
156d0 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
156e0 6e 2c 20 65 61 63 68 20 57 48 45 4e 20 65 78 70  n, each WHEN exp
156f0 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
15700 61 74 65 64 0a 61 6e 64 20 74 68 65 20 72 65 73  ated.and the res
15710 75 6c 74 20 74 72 65 61 74 65 64 20 61 73 20 61  ult treated as a
15720 20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61 72 74 69   boolean, starti
15730 6e 67 20 77 69 74 68 20 74 68 65 20 6c 65 66 74  ng with the left
15740 6d 6f 73 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  most and continu
15750 69 6e 67 0a 74 6f 20 74 68 65 20 72 69 67 68 74  ing.to the right
15760 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  . ^The result of
15770 20 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73   the CASE expres
15780 73 69 6f 6e 20 69 73 20 74 68 65 20 65 76 61 6c  sion is the eval
15790 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48  uation of the TH
157a0 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20 74 68  EN.expression th
157b0 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
157c0 6f 20 74 68 65 20 66 69 72 73 74 20 57 48 45 4e  o the first WHEN
157d0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
157e0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 0a 74 72   evaluates to.tr
157f0 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65  ue. ^Or, if none
15800 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70   of the WHEN exp
15810 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74  ressions evaluat
15820 65 20 74 6f 20 74 72 75 65 2c 20 74 68 65 20 72  e to true, the r
15830 65 73 75 6c 74 20 6f 66 0a 65 76 61 6c 75 61 74  esult of.evaluat
15840 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70  ing the ELSE exp
15850 72 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e  ression, if any.
15860 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f   ^If there is no
15870 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
15880 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65   and.none of the
15890 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
158a0 73 20 61 72 65 20 74 72 75 65 2c 20 74 68 65 6e  s are true, then
158b0 20 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73   the overall res
158c0 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70  ult is NULL...<p
158d0 3e 5e 41 20 4e 55 4c 4c 20 72 65 73 75 6c 74 20  >^A NULL result 
158e0 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 75 6e  is considered un
158f0 74 72 75 65 20 77 68 65 6e 20 65 76 61 6c 75 61  true when evalua
15900 74 69 6e 67 20 57 48 45 4e 20 74 65 72 6d 73 2e  ting WHEN terms.
15910 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45 20  ..<p>^In a CASE 
15920 77 69 74 68 20 61 20 62 61 73 65 20 65 78 70 72  with a base expr
15930 65 73 73 69 6f 6e 2c 20 74 68 65 20 62 61 73 65  ession, the base
15940 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
15950 76 61 6c 75 61 74 65 64 20 6a 75 73 74 0a 6f 6e  valuated just.on
15960 63 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c  ce and the resul
15970 74 20 69 73 20 63 6f 6d 70 61 72 65 64 20 61 67  t is compared ag
15980 61 69 6e 73 74 20 74 68 65 20 65 76 61 6c 75 61  ainst the evalua
15990 74 69 6f 6e 20 6f 66 20 65 61 63 68 20 57 48 45  tion of each WHE
159a0 4e 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 72  N .expression fr
159b0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
159c0 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  . ^The result of
159d0 20 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73   the CASE expres
159e0 73 69 6f 6e 20 69 73 20 74 68 65 20 0a 65 76 61  sion is the .eva
159f0 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54  luation of the T
15a00 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74  HEN expression t
15a10 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
15a20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57 48 45  to the first WHE
15a30 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72  N.expression for
15a40 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 61   which the compa
15a50 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 5e  rison is true. ^
15a60 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  Or, if none of t
15a70 68 65 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69  he WHEN.expressi
15a80 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20  ons evaluate to 
15a90 61 20 76 61 6c 75 65 20 65 71 75 61 6c 20 74 6f  a value equal to
15aa0 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73   the base expres
15ab0 73 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74  sion, the result
15ac0 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74  .of evaluating t
15ad0 68 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69  he ELSE expressi
15ae0 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20  on, if any. ^If 
15af0 74 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45  there is no ELSE
15b00 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a   expression and.
15b10 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
15b20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 70 72 6f   expressions pro
15b30 64 75 63 65 20 61 20 72 65 73 75 6c 74 20 65 71  duce a result eq
15b40 75 61 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20  ual to the base 
15b50 65 78 70 72 65 73 73 69 6f 6e 2c 0a 74 68 65 20  expression,.the 
15b60 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69  overall result i
15b70 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57 68 65  s NULL...<p>^Whe
15b80 6e 20 63 6f 6d 70 61 72 69 6e 67 20 61 20 62 61  n comparing a ba
15b90 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 67  se expression ag
15ba0 61 69 6e 73 74 20 61 20 57 48 45 4e 20 65 78 70  ainst a WHEN exp
15bb0 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 73 61 6d  ression, the sam
15bc0 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e.collating sequ
15bd0 65 6e 63 65 2c 20 61 66 66 69 6e 69 74 79 2c 20  ence, affinity, 
15be0 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64 6c 69 6e  and NULL-handlin
15bf0 67 20 72 75 6c 65 73 20 61 70 70 6c 79 20 61 73  g rules apply as
15c00 20 69 66 20 74 68 65 0a 62 61 73 65 20 65 78 70   if the.base exp
15c10 72 65 73 73 69 6f 6e 20 61 6e 64 20 57 48 45 4e  ression and WHEN
15c20 20 65 78 70 72 65 73 73 69 6f 6e 20 61 72 65 20   expression are 
15c30 72 65 73 70 65 63 74 69 76 65 6c 79 20 74 68 65  respectively the
15c40 20 6c 65 66 74 2d 20 61 6e 64 0a 72 69 67 68 74   left- and.right
15c50 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f  -hand operands o
15c60 66 20 61 6e 20 3c 62 69 67 3e 3c 62 3e 3d 3c 2f  f an <big><b>=</
15c70 62 3e 3c 2f 62 69 67 3e 20 6f 70 65 72 61 74 6f  b></big> operato
15c80 72 2e 3c 2f 70 3e 20 5e 49 66 20 74 68 65 20 62  r.</p> ^If the b
15c90 61 73 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 20  ase .expression 
15ca0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
15cb0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43   result of the C
15cc0 41 53 45 20 69 73 20 61 6c 77 61 79 73 20 74 68  ASE is always th
15cd0 65 20 72 65 73 75 6c 74 20 0a 6f 66 20 65 76 61  e result .of eva
15ce0 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45  luating the ELSE
15cf0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 66 20 69   expression if i
15d00 74 20 65 78 69 73 74 73 2c 20 6f 72 20 4e 55 4c  t exists, or NUL
15d10 4c 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74  L if it does not
15d20 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66 6f 72 6d  ...<p>^Both form
15d30 73 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  s of the CASE ex
15d40 70 72 65 73 73 69 6f 6e 20 75 73 65 20 6c 61 7a  pression use laz
15d50 79 2c 20 6f 72 20 73 68 6f 72 74 2d 63 69 72 63  y, or short-circ
15d60 75 69 74 2c 20 0a 65 76 61 6c 75 61 74 69 6f 6e  uit, .evaluation
15d70 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 6e 6c 79  ...<p>^(The only
15d80 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
15d90 65 65 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  een the followin
15da0 67 20 74 77 6f 20 43 41 53 45 20 65 78 70 72 65  g two CASE expre
15db0 73 73 69 6f 6e 73 20 69 73 20 74 68 61 74 20 0a  ssions is that .
15dc0 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70  the <i>x</i> exp
15dd0 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
15de0 61 74 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 63  ated exactly onc
15df0 65 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 65  e in the first e
15e00 78 61 6d 70 6c 65 20 62 75 74 20 0a 6d 69 67 68  xample but .migh
15e10 74 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 6d  t be evaluated m
15e20 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 69 6e  ultiple times in
15e30 20 74 68 65 20 73 65 63 6f 6e 64 3a 0a 0a 3c 75   the second:..<u
15e40 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43 41 53 45  l><pre>.<li>CASE
15e50 20 78 20 57 48 45 4e 20 77 31 20 54 48 45 4e 20   x WHEN w1 THEN 
15e60 72 31 20 57 48 45 4e 20 77 32 20 54 48 45 4e 20  r1 WHEN w2 THEN 
15e70 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c  r2 ELSE r3 END.<
15e80 6c 69 3e 43 41 53 45 20 57 48 45 4e 20 78 3d 77  li>CASE WHEN x=w
15e90 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e 20 78  1 THEN r1 WHEN x
15ea0 3d 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45  =w2 THEN r2 ELSE
15eb0 20 72 33 20 45 4e 44 0a 3c 2f 70 72 65 3e 3c 2f   r3 END.</pre></
15ec0 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f  ul>)^...<tcl>hd_
15ed0 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b  fragment in_op {
15ee0 49 4e 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f  IN operator} {NO
15ef0 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 7d 3c 2f  T IN operator}</
15f00 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 49 4e 20  tcl>.<h3>The IN 
15f10 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61  and NOT IN opera
15f20 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68  tors</h3>.<p>^Th
15f30 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20  e IN and NOT IN 
15f40 6f 70 65 72 61 74 6f 72 73 20 74 61 6b 65 20 61  operators take a
15f50 20 73 69 6e 67 6c 65 20 73 63 61 6c 61 72 20 6f   single scalar o
15f60 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 0a 6c 65  perand on the.le
15f70 66 74 20 61 6e 64 20 61 20 76 65 63 74 6f 72 20  ft and a vector 
15f80 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 72  operand on the r
15f90 69 67 68 74 0a 66 6f 72 6d 65 64 20 62 79 20 61  ight.formed by a
15fa0 6e 20 65 78 70 6c 69 63 69 74 20 6c 69 73 74 20  n explicit list 
15fb0 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  of zero or more 
15fc0 73 63 61 6c 61 72 73 20 6f 72 20 62 79 20 61 20  scalars or by a 
15fd0 0a 73 69 6e 67 6c 65 20 73 75 62 71 75 65 72 79  .single subquery
15fe0 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69 67 68  ..^When the righ
15ff0 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20  t operand of an 
16000 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65  IN or NOT IN ope
16010 72 61 74 6f 72 20 69 73 20 61 20 73 75 62 71 75  rator is a subqu
16020 65 72 79 2c 20 74 68 65 0a 73 75 62 71 75 65 72  ery, the.subquer
16030 79 20 6d 75 73 74 20 68 61 76 65 20 61 20 73 69  y must have a si
16040 6e 67 6c 65 20 72 65 73 75 6c 74 20 63 6f 6c 75  ngle result colu
16050 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69  mn..^When the ri
16060 67 68 74 20 6f 70 65 72 61 6e 64 20 69 73 20 61  ght operand is a
16070 6e 20 65 6d 70 74 79 20 73 65 74 2c 20 74 68 65  n empty set, the
16080 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 20 69 73   result of IN is
16090 20 66 61 6c 73 65 20 61 6e 64 20 74 68 65 0a 72   false and the.r
160a0 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20 49 4e 20  esult of NOT IN 
160b0 69 73 20 74 72 75 65 2c 20 72 65 67 61 72 64 6c  is true, regardl
160c0 65 73 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20  ess of the left 
160d0 6f 70 65 72 61 6e 64 20 61 6e 64 20 65 76 65 6e  operand and even
160e0 20 69 66 20 74 68 65 0a 6c 65 66 74 20 6f 70 65   if the.left ope
160f0 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 5e 28  rand is NULL..^(
16100 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e  The result of an
16110 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70   IN or NOT IN op
16120 65 72 61 74 6f 72 20 69 73 20 64 65 74 65 72 6d  erator is determ
16130 69 6e 65 64 20 62 79 20 74 68 65 20 66 6f 6c 6c  ined by the foll
16140 6f 77 69 6e 67 0a 6d 61 74 72 69 78 3a 0a 0a 3c  owing.matrix:..<
16150 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62  center>.<table b
16160 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 3c 74  order=1>.<tr>.<t
16170 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 3c  h>Left operand <
16180 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52  br>is NULL.<th>R
16190 69 67 68 74 20 6f 70 65 72 61 6e 64 20 3c 62 72  ight operand <br
161a0 3e 63 6f 6e 74 61 69 6e 73 20 4e 55 4c 4c 0a 3c  >contains NULL.<
161b0 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64  th>Right operand
161c0 20 3c 62 72 3e 69 73 20 61 6e 20 65 6d 70 74 79   <br>is an empty
161d0 20 73 65 74 0a 3c 74 68 3e 4c 65 66 74 20 6f 70   set.<th>Left op
161e0 65 72 61 6e 64 20 66 6f 75 6e 64 20 3c 62 72 3e  erand found <br>
161f0 77 69 74 68 69 6e 20 72 69 67 68 74 20 6f 70 65  within right ope
16200 72 61 6e 64 0a 3c 74 68 3e 52 65 73 75 6c 74 20  rand.<th>Result 
16210 6f 66 20 3c 62 72 3e 49 4e 20 6f 70 65 72 61 74  of <br>IN operat
16220 6f 72 0a 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66  or.<th>Result of
16230 20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f 70 65 72   <br>NOT IN oper
16240 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  ator.<tr>.<td al
16250 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
16260 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16270 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16280 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
16290 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
162a0 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
162b0 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61  ter">false.<td a
162c0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72  lign="center">tr
162d0 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  ue.<tr>.<td alig
162e0 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
162f0 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
16300 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
16310 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16320 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67  er">yes.<td alig
16330 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
16340 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16350 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e  >false.<td align
16360 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c  ="center">true.<
16370 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
16380 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
16390 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65  ign="center">doe
163a0 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64  s not matter.<td
163b0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
163c0 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
163d0 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c  nter">yes.<td al
163e0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75  ign="center">tru
163f0 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  e.<td align="cen
16400 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 72 3e 0a  ter">false.<tr>.
16410 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16420 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16430 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
16440 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16450 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16460 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
16470 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c  gn="center">NULL
16480 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16490 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e 0a 3c 74  er">NULL.<tr>.<t
164a0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
164b0 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  >yes.<td align="
164c0 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74  center">does not
164d0 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67   matter.<td alig
164e0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
164f0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16500 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
16510 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16520 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69  er">NULL.<td ali
16530 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c  gn="center">NULL
16540 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74  .</table>.</cent
16550 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  er>)^..<p>^Note 
16560 74 68 61 74 20 53 51 4c 69 74 65 20 61 6c 6c 6f  that SQLite allo
16570 77 73 20 74 68 65 20 70 61 72 65 6e 74 68 65 73  ws the parenthes
16580 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 73 63 61  ized list of sca
16590 6c 61 72 20 76 61 6c 75 65 73 20 6f 6e 0a 74 68  lar values on.th
165a0 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64  e right-hand sid
165b0 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f  e of an IN or NO
165c0 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 74 6f  T IN operator to
165d0 20 62 65 20 61 6e 20 65 6d 70 74 79 20 6c 69 73   be an empty lis
165e0 74 20 62 75 74 0a 6d 6f 73 74 20 6f 74 68 65 72  t but.most other
165f0 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 64 61   SQL database da
16600 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 61  tabase engines a
16610 6e 64 20 74 68 65 20 53 51 4c 39 32 20 73 74 61  nd the SQL92 sta
16620 6e 64 61 72 64 20 72 65 71 75 69 72 65 0a 74 68  ndard require.th
16630 65 20 6c 69 73 74 20 74 6f 20 63 6f 6e 74 61 69  e list to contai
16640 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 65  n at least one e
16650 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63  lement.</p>..<tc
16660 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e  l>hd_fragment in
16670 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f 70 65 72  _op {EXISTS oper
16680 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49 53 54  ator} {NOT EXIST
16690 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c  S operator}</tcl
166a0 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49 53 54 53  >.<h3>The EXISTS
166b0 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 0a   operator</h3>..
166c0 3c 70 3e 5e 54 68 65 20 45 58 49 53 54 53 20 6f  <p>^The EXISTS o
166d0 70 65 72 61 74 6f 72 20 61 6c 77 61 79 73 20 65  perator always e
166e0 76 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e 65 20  valuates to one 
166f0 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  of the integer v
16700 61 6c 75 65 73 20 30 20 0a 61 6e 64 20 31 2e 20  alues 0 .and 1. 
16710 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20 74 68  ^If executing th
16720 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
16730 6e 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20  nt specified as 
16740 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 0a  the right-hand .
16750 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65 20 45  operand of the E
16760 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 77  XISTS operator w
16770 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e 65 20  ould return one 
16780 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20 74 68  or more rows, th
16790 65 6e 20 74 68 65 0a 45 58 49 53 54 53 20 6f 70  en the.EXISTS op
167a0 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73  erator evaluates
167b0 20 74 6f 20 31 2e 20 5e 49 66 20 65 78 65 63 75   to 1. ^If execu
167c0 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20  ting the SELECT 
167d0 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e 6f 20  would return.no 
167e0 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74 68 65  rows at all, the
167f0 6e 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65  n the EXISTS ope
16800 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20  rator evaluates 
16810 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20  to 0. ..<p>^The 
16820 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
16830 73 20 69 6e 20 65 61 63 68 20 72 6f 77 20 72 65  s in each row re
16840 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
16850 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 28  LECT statement.(
16860 69 66 20 61 6e 79 29 20 61 6e 64 20 74 68 65 20  if any) and the 
16870 73 70 65 63 69 66 69 63 20 76 61 6c 75 65 73 20  specific values 
16880 72 65 74 75 72 6e 65 64 20 68 61 76 65 20 6e 6f  returned have no
16890 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72   effect on the r
168a0 65 73 75 6c 74 73 0a 6f 66 20 74 68 65 20 45 58  esults.of the EX
168b0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 20 5e  ISTS operator. ^
168c0 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 72  In particular, r
168d0 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 4e  ows containing N
168e0 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 0a 6e  ULL values are.n
168f0 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e 79 20 64  ot handled any d
16900 69 66 66 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20  ifferently from 
16910 72 6f 77 73 20 77 69 74 68 6f 75 74 20 4e 55 4c  rows without NUL
16920 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 68 33 3e 53  L values...<h3>S
16930 63 61 6c 61 72 20 53 75 62 71 75 65 72 69 65 73  calar Subqueries
16940 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45  </h3>..<p>^A [SE
16950 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20  LECT] statement 
16960 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65  enclosed in pare
16970 6e 74 68 65 73 65 73 20 6d 61 79 20 61 70 70 65  ntheses may appe
16980 61 72 20 61 73 20 61 20 73 63 61 6c 61 72 0a 71  ar as a scalar.q
16990 75 61 6e 74 69 74 79 2e 20 5e 41 20 5b 53 45 4c  uantity. ^A [SEL
169a0 45 43 54 5d 20 75 73 65 64 20 61 73 20 61 20 73  ECT] used as a s
169b0 63 61 6c 61 72 20 71 75 61 6e 74 69 74 79 20 6d  calar quantity m
169c0 75 73 74 20 72 65 74 75 72 6e 20 61 20 72 65 73  ust return a res
169d0 75 6c 74 20 73 65 74 0a 77 69 74 68 20 61 20 73  ult set.with a s
169e0 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 5e 54  ingle column. ^T
169f0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
16a00 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
16a10 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a  he value of the.
16a20 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  only column in t
16a30 68 65 20 66 69 72 73 74 20 72 6f 77 20 72 65 74  he first row ret
16a40 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
16a50 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
16a60 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 0a 79  If the SELECT .y
16a70 69 65 6c 64 73 20 6d 6f 72 65 20 74 68 61 6e 20  ields more than 
16a80 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f 77 2c 20  one result row, 
16a90 61 6c 6c 20 72 6f 77 73 20 61 66 74 65 72 20 74  all rows after t
16aa0 68 65 20 66 69 72 73 74 20 61 72 65 20 69 67 6e  he first are ign
16ab0 6f 72 65 64 2e 20 5e 49 66 0a 74 68 65 20 53 45  ored. ^If.the SE
16ac0 4c 45 43 54 20 79 69 65 6c 64 73 20 6e 6f 20 72  LECT yields no r
16ad0 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ows, then the va
16ae0 6c 75 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  lue of the expre
16af0 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 2e 0a 5e  ssion is NULL..^
16b00 28 54 68 65 20 4c 49 4d 49 54 20 6f 66 20 61 20  (The LIMIT of a 
16b10 73 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20  scalar subquery 
16b20 69 73 20 61 6c 77 61 79 73 20 31 2e 0a 41 6e 79  is always 1..Any
16b30 20 6f 74 68 65 72 20 4c 49 4d 49 54 20 76 61 6c   other LIMIT val
16b40 75 65 20 67 69 76 65 6e 20 69 6e 20 74 68 65 20  ue given in the 
16b50 53 51 4c 20 74 65 78 74 20 69 73 20 69 67 6e 6f  SQL text is igno
16b60 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 6c 6c 20  red.)^..<p>^All 
16b70 74 79 70 65 73 20 6f 66 20 5b 53 45 4c 45 43 54  types of [SELECT
16b80 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63  ] statement, inc
16b90 6c 75 64 69 6e 67 20 61 67 67 72 65 67 61 74 65  luding aggregate
16ba0 20 61 6e 64 20 5b 63 6f 6d 70 6f 75 6e 64 20 53   and [compound S
16bb0 45 4c 45 43 54 5d 0a 71 75 65 72 69 65 73 20 28  ELECT].queries (
16bc0 71 75 65 72 69 65 73 20 77 69 74 68 20 6b 65 79  queries with key
16bd0 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e  words like UNION
16be0 20 6f 72 20 45 58 43 45 50 54 29 20 61 72 65 20   or EXCEPT) are 
16bf0 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61 6c 61  allowed as scala
16c00 72 0a 73 75 62 71 75 65 72 69 65 73 2e 0a 0a 3c  r.subqueries...<
16c10 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 20  h3>Table Column 
16c20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  Names</h3>..<p>^
16c30 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61  A column name ca
16c40 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68 65 20  n be any of the 
16c50 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20 69 6e  names defined in
16c60 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42   the [CREATE TAB
16c70 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72  LE].statement or
16c80 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
16c90 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69 64  owing special id
16ca0 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e 52  entifiers: "<b>R
16cb0 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f  OWID</b>",."<b>O
16cc0 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e  ID</b>", or "<b>
16cd0 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e 54  _ROWID_</b>"..^T
16ce0 68 65 20 74 68 72 65 65 20 73 70 65 63 69 61 6c  he three special
16cf0 20 69 64 65 6e 74 69 66 69 65 72 73 20 64 65 73   identifiers des
16d00 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75 65  cribe the.unique
16d10 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74 68   integer key (th
16d20 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f 63  e [rowid]) assoc
16d30 69 61 74 65 64 20 77 69 74 68 20 65 76 65 72 79  iated with every
16d40 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74   .row of every t
16d50 61 62 6c 65 20 61 6e 64 20 73 6f 20 61 72 65 20  able and so are 
16d60 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
16d70 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
16d80 20 74 61 62 6c 65 73 2e 0a 5e 54 68 65 20 73 70   tables..^The sp
16d90 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72  ecial identifier
16da0 73 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20  s only refer to 
16db0 74 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74  the row key if t
16dc0 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he [CREATE TABLE
16dd0 5d 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  ].statement does
16de0 20 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65   not define a re
16df0 61 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74  al column with t
16e00 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54  he same name..^T
16e10 68 65 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20  he rowid can be 
16e20 75 73 65 64 20 61 6e 79 77 68 65 72 65 20 61 20  used anywhere a 
16e30 72 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63  regular.column c
16e40 61 6e 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a  an be used.</p>.
16e50 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20  .<p>^A [SELECT] 
16e60 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 61  statement used a
16e70 73 20 65 69 74 68 65 72 20 61 20 73 63 61 6c 61  s either a scala
16e80 72 20 73 75 62 71 75 65 72 79 20 6f 72 20 61 73  r subquery or as
16e90 20 74 68 65 20 0a 72 69 67 68 74 2d 68 61 6e 64   the .right-hand
16ea0 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49   operand of an I
16eb0 4e 2c 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49  N, NOT IN or EXI
16ec0 53 54 53 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  STS expression m
16ed0 61 79 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65  ay contain .refe
16ee0 72 65 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e  rences to column
16ef0 73 20 69 6e 20 74 68 65 20 6f 75 74 65 72 20 71  s in the outer q
16f00 75 65 72 79 2e 20 53 75 63 68 20 61 20 73 75 62  uery. Such a sub
16f10 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
16f20 73 0a 61 20 63 6f 72 72 65 6c 61 74 65 64 20 73  s.a correlated s
16f30 75 62 71 75 65 72 79 2e 20 5e 41 20 63 6f 72 72  ubquery. ^A corr
16f40 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
16f50 69 73 20 72 65 65 76 61 6c 75 61 74 65 64 20 65  is reevaluated e
16f60 61 63 68 20 74 69 6d 65 0a 69 74 73 20 72 65 73  ach time.its res
16f70 75 6c 74 20 69 73 20 72 65 71 75 69 72 65 64 2e  ult is required.
16f80 20 5e 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65   ^An uncorrelate
16f90 64 20 73 75 62 71 75 65 72 79 20 69 73 20 65 76  d subquery is ev
16fa0 61 6c 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63  aluated only onc
16fb0 65 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  e.and the result
16fc0 20 72 65 75 73 65 64 20 61 73 20 6e 65 63 65 73   reused as neces
16fd0 73 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  sary...<tcl>hd_f
16fe0 72 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72  ragment castexpr
16ff0 20 7b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f   {CAST expressio
17000 6e 7d 20 7b 43 41 53 54 7d 20 7b 63 61 73 74 7d  n} {CAST} {cast}
17010 20 7b 43 41 53 54 20 6f 70 65 72 61 74 6f 72 7d   {CAST operator}
17020 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20  </tcl>.<h3>CAST 
17030 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  expressions</h3>
17040 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70 72  ..<p>A CAST expr
17050 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
17060 72 6d 20 22 43 41 53 54 28 26 6c 74 3b 65 78 70  rm "CAST(&lt;exp
17070 72 26 67 74 3b 20 41 53 20 26 6c 74 3b 74 79 70  r&gt; AS &lt;typ
17080 65 2d 6e 61 6d 65 26 67 74 3b 29 22 0a 69 73 20  e-name&gt;)".is 
17090 75 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 20  used to convert 
170a0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74  the value of &lt
170b0 3b 65 78 70 72 26 67 74 3b 20 74 6f 20 0a 61 20  ;expr&gt; to .a 
170c0 64 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72 61  different [stora
170d0 67 65 20 63 6c 61 73 73 5d 20 73 70 65 63 69 66  ge class] specif
170e0 69 65 64 20 62 79 20 26 6c 74 3b 74 79 70 65 2d  ied by &lt;type-
170f0 6e 61 6d 65 26 67 74 3b 2e 0a 5e 41 20 43 41 53  name&gt;..^A CAS
17100 54 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  T conversion is 
17110 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 63  similar to the c
17120 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74  onversion that t
17130 61 6b 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20  akes.place when 
17140 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  a [column affini
17150 74 79 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74  ty] is applied t
17160 6f 20 61 20 76 61 6c 75 65 20 65 78 63 65 70 74  o a value except
17170 20 74 68 61 74 20 77 69 74 68 0a 74 68 65 20 43   that with.the C
17180 41 53 54 20 6f 70 65 72 61 74 6f 72 20 74 68 65  AST operator the
17190 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61   conversion alwa
171a0 79 73 20 74 61 6b 65 73 20 70 6c 61 63 65 20 65  ys takes place e
171b0 76 65 6e 20 69 66 20 74 68 65 20 63 6f 6e 76 65  ven if the conve
171c0 72 73 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20  rsion.lossy and 
171d0 69 72 72 65 76 65 72 73 69 62 6c 65 2c 20 77 68  irreversible, wh
171e0 65 72 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66  ereas column aff
171f0 69 6e 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67  inity only chang
17200 65 73 20 74 68 65 20 64 61 74 61 20 74 79 70 65  es the data type
17210 0a 6f 66 20 61 20 76 61 6c 75 65 20 69 66 20 74  .of a value if t
17220 68 65 20 63 68 61 6e 67 65 20 69 73 20 6c 6f 73  he change is los
17230 73 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72 73  sless and revers
17240 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ible...<p>^If th
17250 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65  e value of &lt;e
17260 78 70 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c  xpr&gt; is NULL,
17270 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
17280 20 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70   of the CAST.exp
17290 72 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20  ression is also 
172a0 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65  NULL. ^Otherwise
172b0 2c 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  , the storage cl
172c0 61 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ass of the resul
172d0 74 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  t.is determined 
172e0 62 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20  by applying the 
172f0 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65 72  [rules for deter
17300 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66  mining column af
17310 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20 26  finity] to.the &
17320 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b  lt;type-name&gt;
17330 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  ...<table border
17340 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20  =1>.<tr>.  <th> 
17350 41 66 66 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b  Affinity of &lt;
17360 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20  type-name&gt;.  
17370 3c 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20  <th> Conversion 
17380 50 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a  Processing.<tr>.
17390 20 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c    <td> NONE .  <
173a0 74 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76  td> ^Casting a v
173b0 61 6c 75 65 20 74 6f 20 61 20 26 6c 74 3b 74 79  alue to a &lt;ty
173c0 70 65 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74 68  pe-name&gt; with
173d0 20 6e 6f 20 61 66 66 69 6e 69 74 79 20 63 61 75   no affinity cau
173e0 73 65 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f  ses the value to
173f0 0a 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  .  be converted 
17400 69 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43  into a BLOB.  ^C
17410 61 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42  asting to a BLOB
17420 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72   consists of fir
17430 73 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65  st casting.  the
17440 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69   value to TEXT i
17450 6e 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d  n the [encoding]
17460 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
17470 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65   connection, the
17480 6e 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67  n.  interpreting
17490 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62   the resulting b
174a0 79 74 65 20 73 65 71 75 65 6e 63 65 20 61 73 20  yte sequence as 
174b0 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f  a BLOB instead o
174c0 66 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e  f as TEXT...<tr>
174d0 0a 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c  .  <td> TEXT.  <
174e0 74 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42  td> ^To cast a B
174f0 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58  LOB value to TEX
17500 54 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  T, the sequence 
17510 6f 66 20 62 79 74 65 73 20 74 68 61 74 20 6d 61  of bytes that ma
17520 6b 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42  ke up the.  BLOB
17530 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20   is interpreted 
17540 61 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20  as text encoded 
17550 75 73 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  using the databa
17560 73 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c  se encoding..  <
17570 70 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61  p>.   ^Casting a
17580 6e 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41  n INTEGER or REA
17590 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58  L value into TEX
175a0 54 20 72 65 6e 64 65 72 73 20 74 68 65 20 76 61  T renders the va
175b0 6c 75 65 20 61 73 20 69 66 20 76 69 61 20 0a 20  lue as if via . 
175c0 20 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72     [sqlite3_snpr
175d0 69 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20 74  intf()] except t
175e0 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e  hat the resultin
175f0 67 20 54 45 58 54 20 75 73 65 73 20 74 68 65 20  g TEXT uses the 
17600 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20  [encoding] of.  
17610 20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63    the database c
17620 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e  onnection...<tr>
17630 0a 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c  .  <td> REAL.  <
17640 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e  td> ^When castin
17650 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74  g a BLOB value t
17660 6f 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61  o a REAL, the va
17670 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e  lue is first con
17680 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20  verted to.      
17690 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c    TEXT..       <
176a0 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  p>^When casting 
176b0 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20  a TEXT value to 
176c0 52 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73  REAL, the longes
176d0 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69  t possible prefi
176e0 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65  x of.        the
176f0 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
17700 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
17710 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20  s a real number 
17720 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f  is extracted fro
17730 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45  m.        the TE
17740 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  XT value and the
17750 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72   remainder ignor
17760 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67  ed. ^Any leading
17770 20 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20   spaces in the. 
17780 20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75         TEXT valu
17790 65 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68  e are ignored wh
177a0 65 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72  en converging fr
177b0 6f 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e  om TEXT to REAL.
177c0 20 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a 20   ^(If there is. 
177d0 20 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78         no prefix
177e0 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
177f0 65 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65  erpreted as a re
17800 61 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72  al number, the r
17810 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20  esult of the.   
17820 20 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20       conversion 
17830 69 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a  is 0.0.)^..<tr>.
17840 20 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20    <td> INTEGER. 
17850 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74   <td> ^When cast
17860 69 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65  ing a BLOB value
17870 20 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65   to INTEGER, the
17880 20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20   value is first 
17890 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20  converted to.   
178a0 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20       TEXT..     
178b0 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69    <p>^When casti
178c0 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20  ng a TEXT value 
178d0 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20  to INTEGER, the 
178e0 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65  longest possible
178f0 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20   prefix of.     
17900 20 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61     the value tha
17910 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72  t can be interpr
17920 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
17930 65 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74  er number is ext
17940 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20  racted from.    
17950 20 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c      the TEXT val
17960 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ue and the remai
17970 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41  nder ignored. ^A
17980 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65  ny leading space
17990 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
179a0 20 54 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e   TEXT value when
179b0 20 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d   converting from
179c0 20 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52   TEXT to INTEGER
179d0 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49   are ignored. ^I
179e0 66 20 74 68 65 72 65 0a 20 20 20 20 20 20 20 20  f there.        
179f0 69 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61  is no prefix tha
17a00 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72  t can be interpr
17a10 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
17a20 65 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72  er number, the r
17a30 65 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66  esult.        of
17a40 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
17a50 69 73 20 30 2e 20 20 5e 28 54 68 65 20 43 41 53  is 0.  ^(The CAS
17a60 54 20 6f 70 65 72 61 74 6f 72 20 75 6e 64 65 72  T operator under
17a70 73 74 61 6e 64 73 20 64 65 63 69 6d 61 6c 20 69  stands decimal i
17a80 6e 74 65 67 65 72 73 0a 20 20 20 20 20 20 20 20  ntegers.        
17a90 6f 6e 6c 79 20 26 6d 64 61 73 68 3b 20 63 6f 6e  only &mdash; con
17aa0 76 65 72 73 69 6f 6e 20 6f 66 20 5b 68 65 78 61  version of [hexa
17ab0 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73  decimal integers
17ac0 5d 20 73 74 6f 70 73 20 61 74 20 74 68 65 20 22  ] stops at the "
17ad0 78 22 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20  x" in the.      
17ae0 20 20 22 30 78 22 20 70 72 65 66 69 78 20 6f 66    "0x" prefix of
17af0 20 74 68 65 20 68 65 78 61 64 65 63 69 6d 61 6c   the hexadecimal
17b00 20 69 6e 74 65 67 65 72 20 73 74 72 69 6e 67 20   integer string 
17b10 61 6e 64 20 74 68 75 73 20 72 65 73 75 6c 74 20  and thus result 
17b20 6f 66 20 74 68 65 20 0a 20 20 20 20 20 20 20 20  of the .        
17b30 43 41 53 54 20 69 73 20 61 6c 77 61 79 73 20 7a  CAST is always z
17b40 65 72 6f 2e 29 5e 0a 0a 20 20 20 20 20 20 3c 70  ero.)^..      <p
17b50 3e 5e 41 20 63 61 73 74 20 6f 66 20 61 20 52 45  >^A cast of a RE
17b60 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e  AL value into an
17b70 20 49 4e 54 45 47 45 52 20 72 65 73 75 6c 74 73   INTEGER results
17b80 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a   in the integer.
17b90 20 20 20 20 20 20 62 65 74 77 65 65 6e 20 74 68        between th
17ba0 65 20 52 45 41 4c 20 76 61 6c 75 65 20 61 6e 64  e REAL value and
17bb0 20 7a 65 72 6f 20 74 68 61 74 20 69 73 20 63 6c   zero that is cl
17bc0 6f 73 65 73 74 20 74 6f 20 74 68 65 20 52 45 41  osest to the REA
17bd0 4c 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 5e  L value..      ^
17be0 49 66 20 61 20 52 45 41 4c 20 69 73 20 67 72 65  If a REAL is gre
17bf0 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 67 72  ater than the gr
17c00 65 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65 20  eatest possible 
17c10 73 69 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74  signed.      int
17c20 65 67 65 72 20 28 2b 39 32 32 33 33 37 32 30 33  eger (+922337203
17c30 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
17c40 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
17c50 68 65 20 67 72 65 61 74 65 73 74 20 70 6f 73 73  he greatest poss
17c60 69 62 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65  ible.      signe
17c70 64 20 69 6e 74 65 67 65 72 20 61 6e 64 20 69 66  d integer and if
17c80 20 74 68 65 20 52 45 41 4c 20 69 73 20 6c 65 73   the REAL is les
17c90 73 20 74 68 61 6e 20 74 68 65 20 6c 65 61 73 74  s than the least
17ca0 20 70 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64   possible signed
17cb0 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72 20 28  .      integer (
17cc0 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
17cd0 35 38 30 38 29 20 74 68 65 6e 20 74 68 65 20 72  5808) then the r
17ce0 65 73 75 6c 74 20 69 73 20 74 68 65 20 6c 65 61  esult is the lea
17cf0 73 74 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20  st possible.    
17d00 20 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72    signed integer
17d10 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 50 72 69 6f  ...      <p>Prio
17d20 72 20 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73  r to SQLite vers
17d30 69 6f 6e 20 33 2e 38 2e 32 2c 20 63 61 73 74 69  ion 3.8.2, casti
17d40 6e 67 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20  ng a REAL value 
17d50 67 72 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20  greater than.   
17d60 20 20 20 2b 39 32 32 33 33 37 32 30 33 36 38 35     +922337203685
17d70 34 37 37 35 38 30 37 2e 30 20 69 6e 74 6f 20 61  4775807.0 into a
17d80 6e 20 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74  n integer result
17d90 65 64 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e  ed in the most n
17da0 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 69 6e  egative.      in
17db0 74 65 67 65 72 2c 20 2d 39 32 32 33 33 37 32 30  teger, -92233720
17dc0 33 36 38 35 34 37 37 35 38 30 38 2e 20 20 54 68  36854775808.  Th
17dd0 69 73 20 62 65 68 61 76 69 6f 72 20 77 61 73 20  is behavior was 
17de0 6d 65 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65  meant to emulate
17df0 20 74 68 65 0a 20 20 20 20 20 20 62 65 68 61 76   the.      behav
17e00 69 6f 72 20 6f 66 20 78 38 36 2f 78 36 34 20 68  ior of x86/x64 h
17e10 61 72 64 77 61 72 65 20 77 68 65 6e 20 64 6f 69  ardware when doi
17e20 6e 67 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  ng the equivalen
17e30 74 20 63 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20  t cast...<tr>.  
17e40 3c 74 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c  <td> NUMERIC.  <
17e50 74 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54  td> ^Casting a T
17e60 45 58 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75  EXT or BLOB valu
17e70 65 20 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66  e into NUMERIC f
17e80 69 72 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63  irst does a forc
17e90 65 64 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e  ed.   conversion
17ea0 20 69 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74   into REAL but t
17eb0 68 65 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76  hen further conv
17ec0 65 72 74 73 20 74 68 65 20 72 65 73 75 6c 74 20  erts the result 
17ed0 69 6e 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a  into INTEGER if.
17ee0 20 20 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74     and only if t
17ef0 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72  he conversion fr
17f00 6f 6d 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47  om REAL to INTEG
17f10 45 52 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61  ER is lossless a
17f20 6e 64 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20  nd reversible.. 
17f30 20 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e    This is the on
17f40 6c 79 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51  ly context in SQ
17f50 4c 69 74 65 20 77 68 65 72 65 20 74 68 65 20 4e  Lite where the N
17f60 55 4d 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47  UMERIC and INTEG
17f70 45 52 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a  ER [affinities].
17f80 20 20 20 62 65 68 61 76 65 20 64 69 66 66 65 72     behave differ
17f90 65 6e 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43  ently..   <p> ^C
17fa0 61 73 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72  asting a REAL or
17fb0 20 49 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74   INTEGER value t
17fc0 6f 20 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e  o NUMERIC is a n
17fd0 6f 2d 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20  o-op, even if a 
17fe0 72 65 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f  real.   value co
17ff0 75 6c 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  uld be losslessl
18000 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
18010 6e 20 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72  n integer...</tr
18020 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e  >..</table>..<p>
18030 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 72  ^Note that the r
18040 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69  esult from casti
18050 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20  ng any non-BLOB 
18060 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c  value into a .BL
18070 4f 42 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c  OB and the resul
18080 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61  t from casting a
18090 6e 79 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e  ny BLOB value in
180a0 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61  to a non-BLOB va
180b0 6c 75 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65  lue.may be diffe
180c0 72 65 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f  rent depending o
180d0 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 64 61  n whether the da
180e0 74 61 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67  tabase [encoding
180f0 5d 20 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d  ] is UTF-8,.UTF-
18100 31 36 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c  16be, or UTF-16l
18110 65 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  e....<tcl>hd_fra
18120 67 6d 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70  gment booleanexp
18130 72 20 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  r {boolean expre
18140 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ssion}</tcl>.<h3
18150 3e 42 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73  >Boolean Express
18160 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ions</h3>..<p>Th
18170 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66  e SQL language f
18180 65 61 74 75 72 65 73 20 73 65 76 65 72 61 6c 20  eatures several 
18190 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20 61  contexts where a
181a0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
181b0 0a 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74  .evaluated and t
181c0 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72  he result conver
181d0 74 65 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  ted to a boolean
181e0 20 28 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29   (true or false)
181f0 20 76 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f   value. These.co
18200 6e 74 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c  ntexts are:..  <
18210 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  ul>.    <li> the
18220 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
18230 20 61 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54   a SELECT, UPDAT
18240 45 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74  E or DELETE stat
18250 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20  ement,.    <li> 
18260 74 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20  the ON or USING 
18270 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
18280 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
18290 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
182a0 20 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   the HAVING clau
182b0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
182c0 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c  tatement,.    <l
182d0 69 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  i> the WHEN clau
182e0 73 65 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69  se of an SQL tri
182f0 67 67 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c  gger, and.    <l
18300 69 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  i> the WHEN clau
18310 73 65 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66  se or clauses of
18320 20 73 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65   some CASE expre
18330 73 73 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a  ssions..  </ul>.
18340 0a 3c 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74  .<p>^(To convert
18350 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
18360 61 6e 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f  an SQL expressio
18370 6e 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76  n to a boolean v
18380 61 6c 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72  alue, SQLite.fir
18390 73 74 20 63 61 73 74 73 20 74 68 65 20 72 65 73  st casts the res
183a0 75 6c 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43  ult to a NUMERIC
183b0 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61   value in the sa
183c0 6d 65 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41  me way as a .[CA
183d0 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  ST expression]. 
183e0 41 20 6e 75 6d 65 72 69 63 20 7a 65 72 6f 20 76  A numeric zero v
183f0 61 6c 75 65 20 28 69 6e 74 65 67 65 72 20 76 61  alue (integer va
18400 6c 75 65 20 30 20 6f 72 20 72 65 61 6c 20 0a 76  lue 0 or real .v
18410 61 6c 75 65 20 30 2e 30 29 20 69 73 20 63 6f 6e  alue 0.0) is con
18420 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 66 61  sidered to be fa
18430 6c 73 65 2e 20 20 41 20 4e 55 4c 4c 20 76 61 6c  lse.  A NULL val
18440 75 65 20 69 73 20 73 74 69 6c 6c 20 4e 55 4c 4c  ue is still NULL
18450 2e 0a 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  ..All other valu
18460 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
18470 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28  d true.)^..<p>^(
18480 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
18490 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e   values NULL, 0.
184a0 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20  0, 0, 'english' 
184b0 61 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20  and '0' are all 
184c0 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65  considered.to be
184d0 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75   false.)^ ^(Valu
184e0 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20  es 1, 1.0, 0.1, 
184f0 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69  -0.1 and '1engli
18500 73 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72  sh' are consider
18510 65 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29  ed to .be true.)
18520 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73  ^..<h3>Functions
18530 3c 2f 68 33 3e 0a 3c 70 3e 53 51 4c 69 74 65 20  </h3>.<p>SQLite 
18540 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 5b 63  supports many [c
18550 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20  orefunc|simple] 
18560 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67  and [aggfunc|agg
18570 72 65 67 61 74 65 5d 0a 53 51 4c 20 66 75 6e 63  regate].SQL func
18580 74 69 6f 6e 73 2e 20 20 46 6f 72 20 70 72 65 73  tions.  For pres
18590 65 6e 74 61 74 69 6f 6e 20 70 75 72 70 6f 73 65  entation purpose
185a0 73 2c 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69  s, simple functi
185b0 6f 6e 73 20 61 72 65 20 66 75 72 74 68 65 72 0a  ons are further.
185c0 73 75 62 64 69 76 69 64 65 64 20 69 6e 74 6f 20  subdivided into 
185d0 5b 63 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72 65  [corefunc | core
185e0 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 20   functions] and 
185f0 5b 64 61 74 65 66 75 6e 63 7c 64 61 74 65 2d 74  [datefunc|date-t
18600 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 0a  ime functions]..
18610 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e  Applications can
18620 20 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f   add new functio
18630 6e 73 2c 20 77 72 69 74 74 65 6e 20 69 6e 20 43  ns, written in C
18640 2f 43 2b 2b 2c 20 75 73 69 6e 67 20 74 68 65 0a  /C++, using the.
18650 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
18660 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65  function()] inte
18670 72 66 61 63 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  rface..</p>..<p>
18680 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20  ^It is possible 
18690 74 6f 20 68 61 76 65 20 61 6e 20 61 67 67 72 65  to have an aggre
186a0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
186b0 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
186c0 20 61 73 20 61 0a 73 69 6d 70 6c 65 20 66 75 6e   as a.simple fun
186d0 63 74 69 6f 6e 2c 20 61 73 20 6c 6f 6e 67 20 61  ction, as long a
186e0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
186f0 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68  arguments for th
18700 65 20 74 77 6f 20 66 6f 72 6d 73 20 6f 66 20 74  e two forms of t
18710 68 65 0a 66 75 6e 63 74 69 6f 6e 20 61 72 65 20  he.function are 
18720 64 69 66 66 65 72 65 6e 74 2e 20 20 5e 46 6f 72  different.  ^For
18730 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 5b 61   example, the [a
18740 67 67 5f 6d 61 78 7c 6d 61 78 28 29 5d 20 66 75  gg_max|max()] fu
18750 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 0a 73 69  nction with a.si
18760 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 69 73  ngle argument is
18770 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 61 6e   an aggregate an
18780 64 20 74 68 65 20 5b 6d 61 78 28 29 5d 20 66 75  d the [max()] fu
18790 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 77 6f 20  nction with two 
187a0 6f 72 20 6d 6f 72 65 0a 61 72 67 75 6d 65 6e 74  or more.argument
187b0 73 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75  s is a simple fu
187c0 6e 63 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 0a 23  nction...<tcl>.#
187d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18810 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
18820 63 74 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63  ction {Core Func
18830 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20  tions} corefunc 
18840 7b 2a 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63  {*corefunc}.proc
18850 20 66 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78   funcdef {syntax
18860 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20   keywords desc} 
18870 7b 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 72  {.  hd_puts {<tr
18880 3e 7d 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  >}.  regsub -all
18890 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74   {\s+} [string t
188a0 72 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62  rim $syntax] {<b
188b0 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  r />} syntax.  r
188c0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b  egsub -all {\(([
188d0 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61  ^*)]+)\)} $synta
188e0 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20  x {(<i>\1</i>)} 
188f0 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
18900 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78  -all {,} $syntax
18910 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74   {</i>,<i>} synt
18920 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
18930 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d   {<i>\.\.\.</i>}
18940 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73   $syntax {...} s
18950 79 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20  yntax.  hd_puts 
18960 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  "<td valign=\"to
18970 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68  p\" align=\"righ
18980 74 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c  t\" width=\"120\
18990 22 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67  ">".  if {[lleng
189a0 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30  th $keywords]==0
189b0 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b  } {.    regexp {
189c0 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78  [a-z_]+} $syntax
189d0 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61   name.    hd_fra
189e0 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61  gment $name *$na
189f0 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51  me "${name}() SQ
18a00 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20  L function".  } 
18a10 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66  else {.    set f
18a20 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20  ragname [lindex 
18a30 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20  $keywords 0].   
18a40 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e   regsub -all {[^
18a50 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20  a-z]} $fragname 
18a60 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20  {} fragname.    
18a70 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61  hd_fragment $fra
18a80 67 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68  gname.    eval h
18a90 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69  d_keywords [stri
18aa0 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20  ng map {\n { }} 
18ab0 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20  $keywords].  }. 
18ac0 20 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74 61   hd_puts "$synta
18ad0 78 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74  x</td>".  hd_put
18ae0 73 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  s {<td valign="t
18af0 6f 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c  op">}.  hd_resol
18b00 76 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70 75  ve $desc.  hd_pu
18b10 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a  ts {</td></tr>}.
18b20 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  }.</tcl>..<p>The
18b30 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20   core functions 
18b40 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20  shown below are 
18b50 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
18b60 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63  ault. .[datefunc
18b70 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69   | Date &amp; Ti
18b80 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e  me functions] an
18b90 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67  d.[aggfunc | agg
18ba0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
18bb0 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64  ] are documented
18bc0 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 6e   separately.  An
18bd0 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79  .application may
18be0 20 64 65 66 69 6e 65 20 61 64 64 69 74 69 6f 6e   define addition
18bf0 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72 69  al.functions wri
18c00 74 74 65 6e 20 69 6e 20 43 20 61 6e 64 20 61 64  tten in C and ad
18c10 64 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ded to the datab
18c20 61 73 65 20 65 6e 67 69 6e 65 20 75 73 69 6e 67  ase engine using
18c30 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72  .the [sqlite3_cr
18c40 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
18c50 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c   API.</p>..<tabl
18c60 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
18c70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e  adding=10>.<tcl>
18c80 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29  .funcdef {abs(X)
18c90 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62  } {} {.  ^The ab
18ca0 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  s(X) function re
18cb0 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75  turns the absolu
18cc0 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  te value of the 
18cd0 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65  numeric.  argume
18ce0 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72  nt X.  ^Abs(X) r
18cf0 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58  eturns NULL if X
18d00 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41   is NULL. .  ^(A
18d10 62 73 28 58 29 20 72 65 74 75 72 6e 73 20 30 2e  bs(X) returns 0.
18d20 30 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69  0 if X is a stri
18d30 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61  ng or blob.  tha
18d40 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  t cannot be conv
18d50 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72  erted to a numer
18d60 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66  ic value.)^  ^If
18d70 20 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74   X is the .  int
18d80 65 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36  eger -9223372036
18d90 38 35 34 37 37 35 38 30 38 20 74 68 65 6e 20 61  854775808 then a
18da0 62 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20  bs(X) throws an 
18db0 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
18dc0 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74  .  error since t
18dd0 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76  here is no equiv
18de0 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36  alent positive 6
18df0 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65  4-bit two comple
18e00 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66  ment value..}..f
18e10 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28  uncdef {changes(
18e20 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63  )} {} {.  ^The c
18e30 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
18e40 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
18e50 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65  mber of database
18e60 20 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20   rows that were 
18e70 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73  changed.  or ins
18e80 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  erted or deleted
18e90 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
18ea0 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20  ently completed 
18eb0 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a  INSERT, DELETE,.
18ec0 20 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74    or UPDATE stat
18ed0 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65  ement, exclusive
18ee0 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69   of statements i
18ef0 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72  n lower-level tr
18f00 69 67 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63  iggers..  ^The c
18f10 68 61 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e  hanges() SQL fun
18f20 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
18f30 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
18f40 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
18f50 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69  ].  C/C++ functi
18f60 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c  on and hence fol
18f70 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20 72 75  lows the same ru
18f80 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67  les for counting
18f90 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e   changes..}..fun
18fa0 63 64 65 66 20 7b 63 68 61 72 28 58 31 2c 58 32  cdef {char(X1,X2
18fb0 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20  ,...,XN)} {} {. 
18fc0 20 5e 28 54 68 65 20 63 68 61 72 28 58 31 2c 58   ^(The char(X1,X
18fd0 32 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63 74 69  2,...,XN) functi
18fe0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
18ff0 69 6e 67 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20  ing composed of 
19000 63 68 61 72 61 63 74 65 72 73 20 68 61 76 69 6e  characters havin
19010 67 20 74 68 65 0a 20 20 20 75 6e 69 63 6f 64 65  g the.   unicode
19020 20 63 6f 64 65 20 70 6f 69 6e 74 20 76 61 6c 75   code point valu
19030 65 73 20 6f 66 20 69 6e 74 65 67 65 72 73 20 58  es of integers X
19040 31 20 74 68 72 6f 75 67 68 20 58 4e 2c 20 72 65  1 through XN, re
19050 73 70 65 63 74 69 76 65 6c 79 2e 29 5e 0a 7d 0a  spectively.)^.}.
19060 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73  .funcdef {coales
19070 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20  ce(X,Y,...)} {} 
19080 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65 73 63  {.  ^The coalesc
19090 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  e() function ret
190a0 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69  urns a copy of i
190b0 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  ts first non-NUL
190c0 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20  L argument, or. 
190d0 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61 72 67   NULL if all arg
190e0 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e  uments are NULL.
190f0 20 20 5e 43 6f 61 6c 65 73 63 65 28 29 20 6d 75    ^Coalesce() mu
19100 73 74 20 68 61 76 65 20 61 74 20 6c 65 61 73 74  st have at least
19110 20 0a 20 20 32 20 61 72 67 75 6d 65 6e 74 73 2e   .  2 arguments.
19120 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f  .}..funcdef {glo
19130 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  b(X,Y)} {} {.  ^
19140 54 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75  The glob(X,Y) fu
19150 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61  nction is equiva
19160 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20 20 65 78  lent to the.  ex
19170 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47  pression "<b>Y G
19180 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f  LOB X</b>"..  No
19190 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e  te that the X an
191a0 64 20 59 20 61 72 67 75 6d 65 6e 74 73 20 61 72  d Y arguments ar
191b0 65 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68  e reversed in th
191c0 65 20 67 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f  e glob() functio
191d0 6e 0a 20 20 72 65 6c 61 74 69 76 65 20 74 6f 20  n.  relative to 
191e0 74 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d  the infix [GLOB]
191f0 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 49 66   operator..  ^If
19200 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72   the [sqlite3_cr
19210 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
19220 20 69 6e 74 65 72 66 61 63 65 20 69 73 20 75 73   interface is us
19230 65 64 20 74 6f 0a 20 20 6f 76 65 72 72 69 64 65  ed to.  override
19240 20 74 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66   the glob(X,Y) f
19250 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 6e 20  unction with an 
19260 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c  alternative impl
19270 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65 6e 0a  ementation then.
19280 20 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65    the [GLOB] ope
19290 72 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76 6f 6b  rator will invok
192a0 65 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76  e the alternativ
192b0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
192c0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66  ..}..funcdef {if
192d0 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  null(X,Y)} {} {.
192e0 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20    ^The ifnull() 
192f0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19300 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66   a copy of its f
19310 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  irst non-NULL ar
19320 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c  gument, or.  NUL
19330 4c 20 69 66 20 62 6f 74 68 20 61 72 67 75 6d 65  L if both argume
19340 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e  nts are NULL.  ^
19350 49 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20 68 61  Ifnull() must ha
19360 76 65 20 65 78 61 63 74 6c 79 20 32 20 61 72 67  ve exactly 2 arg
19370 75 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65 20 69  uments..  ^The i
19380 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e  fnull() function
19390 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74   is equivalent t
193a0 6f 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d 20 77  o [coalesce()] w
193b0 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74  ith two argument
193c0 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69  s..}..funcdef {i
193d0 6e 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  nstr(X,Y)} {} {.
193e0 20 20 5e 54 68 65 20 69 6e 73 74 72 28 58 2c 59    ^The instr(X,Y
193f0 29 20 66 75 6e 63 74 69 6f 6e 20 66 69 6e 64 73  ) function finds
19400 20 74 68 65 20 66 69 72 73 74 20 6f 63 63 75 72   the first occur
19410 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20  rence of string 
19420 59 20 77 69 74 68 69 6e 20 0a 20 20 73 74 72 69  Y within .  stri
19430 6e 67 20 58 20 61 6e 64 20 72 65 74 75 72 6e 73  ng X and returns
19440 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
19450 72 69 6f 72 20 63 68 61 72 61 63 74 65 72 73 20  rior characters 
19460 70 6c 75 73 20 31 2c 20 6f 72 20 30 20 69 66 0a  plus 1, or 0 if.
19470 20 20 59 20 69 73 20 6e 6f 77 68 65 72 65 20 66    Y is nowhere f
19480 6f 75 6e 64 20 77 69 74 68 69 6e 20 58 2e 0a 20  ound within X.. 
19490 20 5e 4f 72 2c 20 69 66 20 58 20 61 6e 64 20 59   ^Or, if X and Y
194a0 20 61 72 65 20 62 6f 74 68 20 42 4c 4f 42 73 2c   are both BLOBs,
194b0 20 74 68 65 6e 20 69 6e 73 74 72 28 58 2c 59 29   then instr(X,Y)
194c0 20 72 65 74 75 72 6e 73 20 6f 6e 65 0a 20 20 6d   returns one.  m
194d0 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6e 75 6d  ore than the num
194e0 62 65 72 20 62 79 74 65 73 20 70 72 69 6f 72 20  ber bytes prior 
194f0 74 6f 20 74 68 65 20 66 69 72 73 74 20 6f 63 63  to the first occ
19500 75 72 72 65 6e 63 65 20 6f 66 20 59 2c 20 6f 72  urrence of Y, or
19510 20 30 20 69 66 0a 20 20 59 20 64 6f 65 73 20 6e   0 if.  Y does n
19520 6f 74 20 6f 63 63 75 72 20 61 6e 79 77 68 65 72  ot occur anywher
19530 65 20 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 49  e within X..  ^I
19540 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73  f both arguments
19550 20 58 20 61 6e 64 20 59 20 74 6f 20 69 6e 73 74   X and Y to inst
19560 72 28 58 2c 59 29 20 61 72 65 20 6e 6f 6e 2d 4e  r(X,Y) are non-N
19570 55 4c 4c 20 61 6e 64 20 61 72 65 20 6e 6f 74 20  ULL and are not 
19580 42 4c 4f 42 73 0a 20 20 74 68 65 6e 20 62 6f 74  BLOBs.  then bot
19590 68 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65  h are interprete
195a0 64 20 61 73 20 73 74 72 69 6e 67 73 2e 0a 20 20  d as strings..  
195b0 5e 49 66 20 65 69 74 68 65 72 20 58 20 6f 72 20  ^If either X or 
195c0 59 20 61 72 65 20 4e 55 4c 4c 20 69 6e 20 69 6e  Y are NULL in in
195d0 73 74 72 28 58 2c 59 29 20 74 68 65 6e 20 74 68  str(X,Y) then th
195e0 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
195f0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65  ..}..funcdef {he
19600 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  x(X)} {} {.  ^Th
19610 65 20 68 65 78 28 29 20 66 75 6e 63 74 69 6f 6e  e hex() function
19620 20 69 6e 74 65 72 70 72 65 74 73 20 69 74 73 20   interprets its 
19630 61 72 67 75 6d 65 6e 74 20 61 73 20 61 20 42 4c  argument as a BL
19640 4f 42 20 61 6e 64 20 72 65 74 75 72 6e 73 0a 20  OB and returns. 
19650 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20   a string which 
19660 69 73 20 74 68 65 20 75 70 70 65 72 2d 63 61 73  is the upper-cas
19670 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 72 65  e hexadecimal re
19680 6e 64 65 72 69 6e 67 20 6f 66 20 74 68 65 20 63  ndering of the c
19690 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74 68 61 74  ontent of.  that
196a0 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65   blob..}..funcde
196b0 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  f {last_insert_r
196c0 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  owid()} {} {.  ^
196d0 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f  The last_insert_
196e0 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
196f0 20 72 65 74 75 72 6e 73 20 74 68 65 20 5b 52 4f   returns the [RO
19700 57 49 44 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61  WID].  of the la
19710 73 74 20 72 6f 77 20 69 6e 73 65 72 74 20 66 72  st row insert fr
19720 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
19730 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63 68  connection which
19740 20 69 6e 76 6f 6b 65 64 20 74 68 65 0a 20 20 66   invoked the.  f
19750 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20  unction..  ^The 
19760 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
19770 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  d() SQL function
19780 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
19790 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
197a0 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
197b0 72 6f 77 69 64 28 29 5d 20 43 2f 43 2b 2b 20 69  rowid()] C/C++ i
197c0 6e 74 65 72 66 61 63 65 20 66 75 6e 63 74 69 6f  nterface functio
197d0 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  n..}..funcdef {l
197e0 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20  ength(X)} {} {. 
197f0 20 5e 46 6f 72 20 61 20 73 74 72 69 6e 67 20 76   ^For a string v
19800 61 6c 75 65 20 58 2c 20 74 68 65 20 6c 65 6e 67  alue X, the leng
19810 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  th(X) function r
19820 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
19830 72 20 6f 66 20 0a 20 20 63 68 61 72 61 63 74 65  r of .  characte
19840 72 73 20 28 6e 6f 74 20 62 79 74 65 73 29 20 69  rs (not bytes) i
19850 6e 20 58 20 70 72 69 6f 72 20 74 6f 20 74 68 65  n X prior to the
19860 20 66 69 72 73 74 20 4e 55 4c 20 63 68 61 72 61   first NUL chara
19870 63 74 65 72 2e 0a 20 20 53 69 6e 63 65 20 53 51  cter..  Since SQ
19880 4c 69 74 65 20 73 74 72 69 6e 67 73 20 64 6f 20  Lite strings do 
19890 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e  not normally con
198a0 74 61 69 6e 20 4e 55 4c 20 63 68 61 72 61 63 74  tain NUL charact
198b0 65 72 73 2c 20 74 68 65 20 6c 65 6e 67 74 68 28  ers, the length(
198c0 58 29 0a 20 20 66 75 6e 63 74 69 6f 6e 20 77 69  X).  function wi
198d0 6c 6c 20 75 73 75 61 6c 6c 79 20 72 65 74 75 72  ll usually retur
198e0 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  n the total numb
198f0 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
19900 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 58   in the string X
19910 2e 0a 20 20 5e 46 6f 72 20 61 20 62 6c 6f 62 20  ..  ^For a blob 
19920 76 61 6c 75 65 20 58 2c 20 6c 65 6e 67 74 68 28  value X, length(
19930 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  X) returns the n
19940 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
19950 6e 20 74 68 65 20 62 6c 6f 62 2e 0a 20 20 5e 49  n the blob..  ^I
19960 66 20 58 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  f X is NULL then
19970 20 6c 65 6e 67 74 68 28 58 29 20 69 73 20 4e 55   length(X) is NU
19980 4c 4c 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 6e  LL..  ^If X is n
19990 75 6d 65 72 69 63 20 74 68 65 6e 20 6c 65 6e 67  umeric then leng
199a0 74 68 28 58 29 20 72 65 74 75 72 6e 73 20 74 68  th(X) returns th
199b0 65 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74  e length of a st
199c0 72 69 6e 67 0a 20 20 72 65 70 72 65 73 65 6e 74  ring.  represent
199d0 61 74 69 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66  ation of X..}..f
199e0 75 6e 63 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59  uncdef {like(X,Y
199f0 29 20 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b  ) like(X,Y,Z)} {
19a00 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28  } {.  ^The like(
19a10 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  ) function is us
19a20 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
19a30 74 68 65 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45  the.  "<b>Y LIKE
19a40 20 58 20 26 23 39 31 3b 45 53 43 41 50 45 20 5a   X &#91;ESCAPE Z
19a50 26 23 39 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65  &#93;</b>" expre
19a60 73 73 69 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68  ssion. .  ^If th
19a70 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50  e optional ESCAP
19a80 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
19a90 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ent, then the.  
19aa0 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
19ab0 69 73 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20  is invoked with 
19ac0 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e  three arguments.
19ad0 20 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74    ^Otherwise, it
19ae0 20 69 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69   is.  invoked wi
19af0 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  th two arguments
19b00 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74   only. Note that
19b10 20 74 68 65 20 58 20 61 6e 64 20 59 20 70 61 72   the X and Y par
19b20 61 6d 65 74 65 72 73 20 61 72 65 0a 20 20 72 65  ameters are.  re
19b30 76 65 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69  versed in the li
19b40 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ke() function re
19b50 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e  lative to the in
19b60 66 69 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  fix [LIKE] opera
19b70 74 6f 72 2e 0a 20 20 5e 54 68 65 20 5b 73 71 6c  tor..  ^The [sql
19b80 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
19b90 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63  tion()] interfac
19ba0 65 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  e can be used to
19bb0 20 6f 76 65 72 72 69 64 65 20 74 68 65 0a 20 20   override the.  
19bc0 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
19bd0 61 6e 64 20 74 68 65 72 65 62 79 20 63 68 61 6e  and thereby chan
19be0 67 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ge the operation
19bf0 20 6f 66 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d   of the.  [LIKE]
19c00 20 6f 70 65 72 61 74 6f 72 2e 20 20 57 68 65 6e   operator.  When
19c10 20 6f 76 65 72 72 69 64 69 6e 67 20 74 68 65 20   overriding the 
19c20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c  like() function,
19c30 20 69 74 20 6d 61 79 20 62 65 20 69 6d 70 6f 72   it may be impor
19c40 74 61 6e 74 0a 20 20 74 6f 20 6f 76 65 72 72 69  tant.  to overri
19c50 64 65 20 62 6f 74 68 20 74 68 65 20 74 77 6f 20  de both the two 
19c60 61 6e 64 20 74 68 72 65 65 20 61 72 67 75 6d 65  and three argume
19c70 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  nt versions of t
19c80 68 65 20 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e  he like() .  fun
19c90 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65  ction. Otherwise
19ca0 2c 20 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65  , different code
19cb0 20 6d 61 79 20 62 65 20 63 61 6c 6c 65 64 20 74   may be called t
19cc0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  o implement the.
19cd0 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f    [LIKE] operato
19ce0 72 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  r depending on w
19cf0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
19d00 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 77   ESCAPE clause w
19d10 61 73 20 0a 20 20 73 70 65 63 69 66 69 65 64 2e  as .  specified.
19d20 0a 7d 0a 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69  .}...funcdef {li
19d30 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 7d 20 7b  kelihood(X,Y)} {
19d40 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c  } {.  ^The likel
19d50 69 68 6f 6f 64 28 58 2c 59 29 20 66 75 6e 63 74  ihood(X,Y) funct
19d60 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 72 67 75  ion returns argu
19d70 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64  ment X unchanged
19d80 2e 0a 20 20 5e 28 54 68 65 20 76 61 6c 75 65 20  ..  ^(The value 
19d90 59 20 69 6e 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  Y in likelihood(
19da0 58 2c 59 29 20 6d 75 73 74 20 62 65 20 61 20 66  X,Y) must be a f
19db0 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 63 6f  loating point co
19dc0 6e 73 74 61 6e 74 0a 20 20 62 65 74 77 65 65 6e  nstant.  between
19dd0 20 30 2e 30 20 61 6e 64 20 31 2e 30 2c 20 69 6e   0.0 and 1.0, in
19de0 63 6c 75 73 69 76 65 2e 29 5e 0a 20 20 5e 54 68  clusive.)^.  ^Th
19df0 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 29 20  e likelihood(X) 
19e00 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  function is a no
19e10 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f 64  -op that the cod
19e20 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70  e generator.  op
19e30 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20  timizes away so 
19e40 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73  that it consumes
19e50 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20 64   no CPU cycles d
19e60 75 72 69 6e 67 20 72 75 6e 2d 74 69 6d 65 0a 20  uring run-time. 
19e70 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e   (that is, durin
19e80 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69  g calls to [sqli
19e90 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20  te3_step()])..  
19ea0 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20  ^The purpose of 
19eb0 74 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58  the likelihood(X
19ec0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ,Y) function is 
19ed0 74 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e  to provide a hin
19ee0 74 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79  t.  to the query
19ef0 20 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68   planner that th
19f00 65 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20  e argument X is 
19f10 61 20 62 6f 6f 6c 65 61 6e 20 74 68 61 74 20 69  a boolean that i
19f20 73 0a 20 20 74 72 75 65 20 77 69 74 68 20 61 20  s.  true with a 
19f30 70 72 6f 62 61 62 69 6c 69 74 79 20 6f 66 20 61  probability of a
19f40 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 59 2e 0a  pproximately Y..
19f50 20 20 5e 28 54 68 65 20 5b 75 6e 6c 69 6b 65 6c    ^(The [unlikel
19f60 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69  y(X)] function i
19f70 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72  s short-hand for
19f80 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e   likelihood(X,0.
19f90 30 36 32 35 29 2e 29 5e 0a 20 20 5e 28 54 68 65  0625).)^.  ^(The
19fa0 20 5b 6c 69 6b 65 6c 79 28 58 29 5d 20 66 75 6e   [likely(X)] fun
19fb0 63 74 69 6f 6e 20 69 73 20 73 68 6f 72 74 2d 68  ction is short-h
19fc0 61 6e 64 20 66 6f 72 20 6c 69 6b 65 6c 69 68 6f  and for likeliho
19fd0 6f 64 28 58 2c 30 2e 39 33 37 35 29 2e 29 5e 0a  od(X,0.9375).)^.
19fe0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65  }..funcdef {like
19ff0 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ly(X)} {} {.  ^T
1a000 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e  he likely(X) fun
1a010 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1a020 65 20 61 72 67 75 6d 65 6e 74 20 58 20 75 6e 63  e argument X unc
1a030 68 61 6e 67 65 64 2e 0a 20 20 5e 54 68 65 20 6c  hanged..  ^The l
1a040 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1a050 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61  n is a no-op tha
1a060 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  t the code gener
1a070 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73  ator.  optimizes
1a080 20 61 77 61 79 20 73 6f 20 74 68 61 74 20 69 74   away so that it
1a090 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55   consumes no CPU
1a0a0 20 63 79 63 6c 65 73 20 61 74 0a 20 20 72 75 6e   cycles at.  run
1a0b0 2d 74 69 6d 65 20 28 74 68 61 74 20 69 73 2c 20  -time (that is, 
1a0c0 64 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20  during calls to 
1a0d0 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d  [sqlite3_step()]
1a0e0 29 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73  )..  ^The purpos
1a0f0 65 20 6f 66 20 74 68 65 20 6c 69 6b 65 6c 79 28  e of the likely(
1a100 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74  X) function is t
1a110 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74  o provide a hint
1a120 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  .  to the query 
1a130 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65  planner that the
1a140 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61   argument X is a
1a150 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20   boolean value. 
1a160 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
1a170 20 74 72 75 65 2e 20 5e 28 54 68 65 20 6c 69 6b   true. ^(The lik
1a180 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1a190 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20  is equivalent.  
1a1a0 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28  to [likelihood](
1a1b0 58 2c 30 2e 39 33 37 35 29 2e 29 5e 20 53 65 65  X,0.9375).)^ See
1a1c0 20 61 6c 73 6f 3a 20 5b 75 6e 6c 69 6b 65 6c 79   also: [unlikely
1a1d0 28 58 29 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  (X)]..}..funcdef
1a1e0 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e   {load_extension
1a1f0 28 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  (X) load_extensi
1a200 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  on(X,Y)} {} {.  
1a210 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
1a220 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  ion(X,Y) functio
1a230 6e 20 6c 6f 61 64 73 20 5b 53 51 4c 69 74 65 20  n loads [SQLite 
1a240 65 78 74 65 6e 73 69 6f 6e 73 5d 20 6f 75 74 20  extensions] out 
1a250 6f 66 20 74 68 65 20 73 68 61 72 65 64 0a 20 20  of the shared.  
1a260 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d  library file nam
1a270 65 64 20 58 20 75 73 69 6e 67 20 74 68 65 20 65  ed X using the e
1a280 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e  ntry point Y.  ^
1a290 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f  The result of lo
1a2a0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20  ad_extension(). 
1a2b0 20 69 73 20 61 6c 77 61 79 73 20 61 20 4e 55 4c   is always a NUL
1a2c0 4c 2e 20 20 5e 49 66 20 59 20 69 73 20 6f 6d 69  L.  ^If Y is omi
1a2d0 74 74 65 64 20 74 68 65 6e 20 74 68 65 20 64 65  tted then the de
1a2e0 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e  fault entry poin
1a2f0 74 20 6e 61 6d 65 20 69 73 20 75 73 65 64 2e 0a  t name is used..
1a300 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
1a310 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  nsion() function
1a320 20 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70   raises an excep
1a330 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65  tion if the exte
1a340 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f 0a 20  nsion fails to. 
1a350 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c   load or initial
1a360 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a  ize correctly...
1a370 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65    <p>^The load_e
1a380 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74  xtension() funct
1a390 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ion will fail if
1a3a0 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61   the extension a
1a3b0 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f  ttempts to .  mo
1a3c0 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61  dify or delete a
1a3d0 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f  n SQL function o
1a3e0 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
1a3f0 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78  ence.  ^The.  ex
1a400 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20  tension can add 
1a410 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  new functions or
1a420 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
1a430 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74  nces, but cannot
1a440 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c  .  modify or del
1a450 65 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e  ete existing fun
1a460 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74  ctions or collat
1a470 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65  ing sequences be
1a480 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75  cause.  those fu
1a490 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63  nctions and/or c
1a4a0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1a4b0 65 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64  es might be used
1a4c0 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20   elsewhere.  in 
1a4d0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75  the currently ru
1a4e0 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d  nning SQL statem
1a4f0 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e  ent.  To load an
1a500 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a   extension that.
1a510 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c    changes or del
1a520 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f  etes functions o
1a530 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
1a540 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20  ences, use the. 
1a550 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65   [sqlite3_load_e
1a560 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61  xtension()] C-la
1a570 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a  nguage API.</p>.
1a580 0a 20 20 3c 70 3e 46 6f 72 20 73 65 63 75 72 69  .  <p>For securi
1a590 74 79 20 72 65 61 73 6f 6e 73 2c 20 65 78 74 65  ty reasons, exte
1a5a0 6e 73 69 6f 6e 20 6c 6f 61 64 65 64 20 69 73 20  nsion loaded is 
1a5b0 74 75 72 6e 65 64 20 6f 66 66 20 62 79 20 64 65  turned off by de
1a5c0 66 61 75 6c 74 20 61 6e 64 20 6d 75 73 74 0a 20  fault and must. 
1a5d0 20 62 65 20 65 6e 61 62 6c 65 64 20 62 79 20 61   be enabled by a
1a5e0 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 5b   prior call to [
1a5f0 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
1a600 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d  oad_extension()]
1a610 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66  .</p>.}..funcdef
1a620 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b   {lower(X)} {} {
1a630 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72 28 58 29  .  ^The lower(X)
1a640 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1a650 73 20 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69  s a copy of stri
1a660 6e 67 20 58 20 77 69 74 68 20 61 6c 6c 20 41 53  ng X with all AS
1a670 43 49 49 20 63 68 61 72 61 63 74 65 72 73 0a 20  CII characters. 
1a680 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f   converted to lo
1a690 77 65 72 20 63 61 73 65 2e 20 20 5e 54 68 65 20  wer case.  ^The 
1a6a0 64 65 66 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e  default built-in
1a6b0 20 6c 6f 77 65 72 28 29 20 66 75 6e 63 74 69 6f   lower() functio
1a6c0 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53  n works.  for AS
1a6d0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 6f  CII characters o
1a6e0 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61 73 65  nly.  To do case
1a6f0 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20   conversions on 
1a700 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68 61 72  non-ASCII.  char
1a710 61 63 74 65 72 73 2c 20 6c 6f 61 64 20 74 68 65  acters, load the
1a720 20 49 43 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a   ICU extension..
1a730 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72 69  }..funcdef {ltri
1a740 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d  m(X) ltrim(X,Y)}
1a750 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72   {} {.  ^The ltr
1a760 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
1a770 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
1a780 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
1a790 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
1a7a0 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
1a7b0 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
1a7c0 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64  rom the left sid
1a7d0 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  e of X..  ^If th
1a7e0 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
1a7f0 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69 6d 28 58  omitted, ltrim(X
1a800 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73  ) removes spaces
1a810 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73   from the left s
1a820 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66  ide.  of X..}..f
1a830 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c  uncdef {max(X,Y,
1a840 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46  ...)} {*maxCoreF
1a850 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20  unc *max {max() 
1a860 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  SQL function}} {
1a870 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
1a880 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e  gument max() fun
1a890 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1a8a0 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20  e argument with 
1a8b0 74 68 65 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76  the .  maximum v
1a8c0 61 6c 75 65 2c 20 6f 72 20 72 65 74 75 72 6e 20  alue, or return 
1a8d0 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61 72 67 75  NULL if any argu
1a8e0 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20  ment is NULL. . 
1a8f0 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
1a900 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74  ment max() funct
1a910 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73  ion searches its
1a920 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
1a930 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20  left to right.  
1a940 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
1a950 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63  that defines a c
1a960 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1a970 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
1a980 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63  collating.  func
1a990 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
1a9a0 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  ing comparisons.
1a9b0 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68    ^If none of th
1a9c0 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d  e arguments to m
1a9d0 61 78 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20  ax().  define a 
1a9e0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1a9f0 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e  on, then the BIN
1aa00 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ARY collating fu
1aa10 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  nction is used..
1aa20 20 20 5e 28 4e 6f 74 65 20 74 68 61 74 20 3c 62    ^(Note that <b
1aa30 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73 20 61 20  >max()</b> is a 
1aa40 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
1aa50 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20  when.  it has 2 
1aa60 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
1aa70 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61  s but operates a
1aa80 73 20 61 6e 0a 20 20 5b 6d 61 78 41 67 67 46 75  s an.  [maxAggFu
1aa90 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66  nc | aggregate f
1aaa0 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65  unction] if give
1aab0 6e 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20  n only a single 
1aac0 61 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66  argument.)^.}..f
1aad0 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 2c 59 2c  uncdef {min(X,Y,
1aae0 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46  ...)} {*minCoreF
1aaf0 75 6e 63 20 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20  unc *min {min() 
1ab00 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  SQL function}} {
1ab10 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
1ab20 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e  gument min() fun
1ab30 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1ab40 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20  e argument with 
1ab50 74 68 65 0a 20 20 6d 69 6e 69 6d 75 6d 20 76 61  the.  minimum va
1ab60 6c 75 65 2e 0a 20 20 5e 54 68 65 20 6d 75 6c 74  lue..  ^The mult
1ab70 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29  i-argument min()
1ab80 20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68   function search
1ab90 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73  es its arguments
1aba0 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
1abb0 67 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67  ght.  for an arg
1abc0 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e  ument that defin
1abd0 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  es a collating f
1abe0 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73  unction and uses
1abf0 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a   that collating.
1ac00 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61    function for a
1ac10 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72  ll string compar
1ac20 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65  isons.  ^If none
1ac30 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
1ac40 73 20 74 6f 20 6d 69 6e 28 29 0a 20 20 64 65 66  s to min().  def
1ac50 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ine a collating 
1ac60 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  function, then t
1ac70 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74  he BINARY collat
1ac80 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ing function is 
1ac90 75 73 65 64 2e 0a 20 20 5e 28 4e 6f 74 65 20 74  used..  ^(Note t
1aca0 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e  hat <b>min()</b>
1acb0 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e   is a simple fun
1acc0 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20  ction when.  it 
1acd0 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72  has 2 or more ar
1ace0 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72  guments but oper
1acf0 61 74 65 73 20 61 73 20 61 6e 20 0a 20 20 5b 6d  ates as an .  [m
1ad00 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72  inAggFunc | aggr
1ad10 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20  egate function] 
1ad20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20  if given.  only 
1ad30 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
1ad40 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  t.)^.}..funcdef 
1ad50 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20 7b 7d  {nullif(X,Y)} {}
1ad60 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66   {.  ^The nullif
1ad70 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
1ad80 65 74 75 72 6e 73 20 69 74 73 20 66 69 72 73 74  eturns its first
1ad90 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74 68 65   argument if the
1ada0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 0a 20   arguments are. 
1adb0 20 64 69 66 66 65 72 65 6e 74 20 61 6e 64 20 4e   different and N
1adc0 55 4c 4c 20 69 66 20 74 68 65 20 61 72 67 75 6d  ULL if the argum
1add0 65 6e 74 73 20 61 72 65 20 74 68 65 20 73 61 6d  ents are the sam
1ade0 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28  e.  ^The nullif(
1adf0 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  X,Y) function.  
1ae00 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67  searches its arg
1ae10 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74  uments from left
1ae20 20 74 6f 20 72 69 67 68 74 20 66 6f 72 20 61 6e   to right for an
1ae30 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64   argument that d
1ae40 65 66 69 6e 65 73 20 61 0a 20 20 63 6f 6c 6c 61  efines a.  colla
1ae50 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ting function an
1ae60 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c  d uses that coll
1ae70 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66  ating function f
1ae80 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 0a 20 20  or all string.  
1ae90 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
1aea0 66 20 6e 65 69 74 68 65 72 20 61 72 67 75 6d 65  f neither argume
1aeb0 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28 29 20 64  nt to nullif() d
1aec0 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69  efines a collati
1aed0 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20 20 74 68  ng function.  th
1aee0 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 69 73  en the BINARY is
1aef0 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65   used..}..funcde
1af00 66 20 7b 70 72 69 6e 74 66 28 46 4f 52 4d 41 54  f {printf(FORMAT
1af10 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28  ,...)} {} {.  ^(
1af20 54 68 65 20 70 72 69 6e 74 66 28 46 4f 52 4d 41  The printf(FORMA
1af30 54 2c 2e 2e 2e 29 20 53 51 4c 20 66 75 6e 63 74  T,...) SQL funct
1af40 69 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65 20 74  ion works like t
1af50 68 65 20 5b 73 71 6c 69 74 65 33 5f 6d 70 72 69  he [sqlite3_mpri
1af60 6e 74 66 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  ntf()] C-languag
1af70 65 0a 20 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  e.  function and
1af80 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
1af90 6e 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  nction from the 
1afa0 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61  standard C libra
1afb0 72 79 2e 29 5e 0a 20 20 54 68 65 20 66 69 72 73  ry.)^.  The firs
1afc0 74 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  t argument is a 
1afd0 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74 68  format string th
1afe0 61 74 20 73 70 65 63 69 66 69 65 73 20 68 6f 77  at specifies how
1aff0 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
1b000 65 20 6f 75 74 70 75 74 0a 20 20 73 74 72 69 6e  e output.  strin
1b010 67 20 75 73 69 6e 67 20 76 61 6c 75 65 73 20 74  g using values t
1b020 61 6b 65 6e 20 66 72 6f 6d 20 73 75 62 73 65 71  aken from subseq
1b030 75 65 6e 74 20 61 72 67 75 6d 65 6e 74 73 2e 20  uent arguments. 
1b040 20 5e 49 66 20 74 68 65 20 46 4f 52 4d 41 54 20   ^If the FORMAT 
1b050 61 72 67 75 6d 65 6e 74 20 69 73 0a 20 20 6d 69  argument is.  mi
1b060 73 73 69 6e 67 20 6f 72 20 4e 55 4c 4c 20 74 68  ssing or NULL th
1b070 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
1b080 20 4e 55 4c 4c 2e 20 20 5e 54 68 65 20 25 6e 20   NULL.  ^The %n 
1b090 66 6f 72 6d 61 74 20 69 73 20 73 69 6c 65 6e 74  format is silent
1b0a0 6c 79 20 69 67 6e 6f 72 65 64 20 61 6e 64 0a 20  ly ignored and. 
1b0b0 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 73 75 6d   does not consum
1b0c0 65 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 20  e an argument.  
1b0d0 5e 54 68 65 20 25 70 20 66 6f 72 6d 61 74 20 69  ^The %p format i
1b0e0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 25  s an alias for %
1b0f0 58 2e 20 20 5e 54 68 65 20 25 7a 20 66 6f 72 6d  X.  ^The %z form
1b100 61 74 0a 20 20 69 73 20 69 6e 74 65 72 63 68 61  at.  is intercha
1b110 6e 67 65 61 62 6c 65 20 77 69 74 68 20 25 73 2e  ngeable with %s.
1b120 20 20 5e 28 49 66 20 74 68 65 72 65 20 61 72 65    ^(If there are
1b130 20 74 6f 6f 20 66 65 77 20 61 72 67 75 6d 65 6e   too few argumen
1b140 74 73 20 69 6e 20 74 68 65 20 61 72 67 75 6d 65  ts in the argume
1b150 6e 74 20 6c 69 73 74 2c 0a 20 20 6d 69 73 73 69  nt list,.  missi
1b160 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ng arguments are
1b170 20 61 73 73 75 6d 65 64 20 74 6f 20 68 61 76 65   assumed to have
1b180 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 77   a NULL value, w
1b190 68 69 63 68 20 69 73 20 74 72 61 6e 73 6c 61 74  hich is translat
1b1a0 65 64 20 69 6e 74 6f 0a 20 20 30 20 6f 72 20 30  ed into.  0 or 0
1b1b0 2e 30 20 66 6f 72 20 6e 75 6d 65 72 69 63 20 66  .0 for numeric f
1b1c0 6f 72 6d 61 74 73 20 6f 72 20 61 6e 20 65 6d 70  ormats or an emp
1b1d0 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 25 73  ty string for %s
1b1e0 2e 29 5e 0a 7d 0a 20 20 0a 0a 66 75 6e 63 64 65  .)^.}.  ..funcde
1b1f0 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b 7d 20  f {quote(X)} {} 
1b200 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74 65 28 58  {.  ^The quote(X
1b210 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1b220 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ns the text of a
1b230 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 77 68  n SQL literal wh
1b240 69 63 68 0a 20 20 69 73 20 74 68 65 20 76 61 6c  ich.  is the val
1b250 75 65 20 6f 66 20 69 74 73 20 61 72 67 75 6d 65  ue of its argume
1b260 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20  nt suitable for 
1b270 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61  inclusion into a
1b280 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  n SQL statement.
1b290 0a 20 20 5e 53 74 72 69 6e 67 73 20 61 72 65 20  .  ^Strings are 
1b2a0 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20 73 69  surrounded by si
1b2b0 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69 74 68  ngle-quotes with
1b2c0 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e 74 65   escapes on inte
1b2d0 72 69 6f 72 20 71 75 6f 74 65 73 0a 20 20 61 73  rior quotes.  as
1b2e0 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c 4f 42 73   needed.  ^BLOBs
1b2f0 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20   are encoded as 
1b300 68 65 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65  hexadecimal lite
1b310 72 61 6c 73 2e 0a 20 20 5e 53 74 72 69 6e 67 73  rals..  ^Strings
1b320 20 77 69 74 68 20 65 6d 62 65 64 64 65 64 20 4e   with embedded N
1b330 55 4c 20 63 68 61 72 61 63 74 65 72 73 20 63 61  UL characters ca
1b340 6e 6e 6f 74 20 62 65 20 72 65 70 72 65 73 65 6e  nnot be represen
1b350 74 65 64 20 61 73 20 73 74 72 69 6e 67 0a 20 20  ted as string.  
1b360 6c 69 74 65 72 61 6c 73 20 69 6e 20 53 51 4c 20  literals in SQL 
1b370 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20 72 65  and hence the re
1b380 74 75 72 6e 65 64 20 73 74 72 69 6e 67 20 6c 69  turned string li
1b390 74 65 72 61 6c 20 69 73 20 74 72 75 6e 63 61 74  teral is truncat
1b3a0 65 64 20 70 72 69 6f 72 0a 20 20 74 6f 20 74 68  ed prior.  to th
1b3b0 65 20 66 69 72 73 74 20 4e 55 4c 2e 0a 7d 0a 0a  e first NUL..}..
1b3c0 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 28  funcdef {random(
1b3d0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72  )} {} {.  ^The r
1b3e0 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e  andom() function
1b3f0 20 72 65 74 75 72 6e 73 20 61 20 70 73 65 75 64   returns a pseud
1b400 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72  o-random integer
1b410 0a 20 20 62 65 74 77 65 65 6e 20 2d 39 32 32 33  .  between -9223
1b420 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20  372036854775808 
1b430 61 6e 64 20 2b 39 32 32 33 33 37 32 30 33 36 38  and +92233720368
1b440 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e  54775807..}..fun
1b450 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62  cdef {randomblob
1b460 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (N)} {} {.  ^The
1b470 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20 66   randomblob(N) f
1b480 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 20 61  unction return a
1b490 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f  n N-byte blob co
1b4a0 6e 74 61 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d  ntaining pseudo-
1b4b0 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65 73 2e 20  random.  bytes. 
1b4c0 5e 49 66 20 4e 20 69 73 20 6c 65 73 73 20 74 68  ^If N is less th
1b4d0 61 6e 20 31 20 74 68 65 6e 20 61 20 31 2d 62 79  an 1 then a 1-by
1b4e0 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f 62 20 69  te random blob i
1b4f0 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 20 20 3c  s returned...  <
1b500 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69 63 61  p>Hint:  applica
1b510 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72 61  tions can genera
1b520 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71  te globally uniq
1b530 75 65 20 69 64 65 6e 74 69 66 69 65 72 73 0a 20  ue identifiers. 
1b540 20 75 73 69 6e 67 20 74 68 69 73 20 66 75 6e 63   using this func
1b550 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20 77 69  tion together wi
1b560 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f  th [hex()] and/o
1b570 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69  r.  [lower()] li
1b580 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20  ke this:</p>..  
1b590 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68  <blockquote>.  h
1b5a0 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36  ex(randomblob(16
1b5b0 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f  ))<br></br>.  lo
1b5c0 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c  wer(hex(randombl
1b5d0 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f  ob(16))).  </blo
1b5e0 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63  ckquote>.}..func
1b5f0 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58 2c 59  def {replace(X,Y
1b600 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Z)} {} {.  ^The
1b610 20 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 20   replace(X,Y,Z) 
1b620 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1b630 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
1b640 20 62 79 20 73 75 62 73 74 69 74 75 74 69 6e 67   by substituting
1b650 0a 20 20 73 74 72 69 6e 67 20 5a 20 66 6f 72 20  .  string Z for 
1b660 65 76 65 72 79 20 6f 63 63 75 72 72 65 6e 63 65  every occurrence
1b670 20 6f 66 20 73 74 72 69 6e 67 20 59 20 69 6e 20   of string Y in 
1b680 73 74 72 69 6e 67 20 58 2e 20 20 5e 54 68 65 20  string X.  ^The 
1b690 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61  [BINARY].  colla
1b6a0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
1b6b0 20 75 73 65 64 20 66 6f 72 20 63 6f 6d 70 61 72   used for compar
1b6c0 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59 20 69 73  isons.  ^If Y is
1b6d0 20 61 6e 20 65 6d 70 74 79 0a 20 20 73 74 72 69   an empty.  stri
1b6e0 6e 67 20 74 68 65 6e 20 72 65 74 75 72 6e 20 58  ng then return X
1b6f0 20 75 6e 63 68 61 6e 67 65 64 2e 20 20 5e 49 66   unchanged.  ^If
1b700 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61   Z is not initia
1b710 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e 67 2c 20  lly.  a string, 
1b720 69 74 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  it is cast to a 
1b730 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 72 69  UTF-8 string pri
1b740 6f 72 20 74 6f 20 70 72 6f 63 65 73 73 69 6e 67  or to processing
1b750 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f  ..}..funcdef {ro
1b760 75 6e 64 28 58 29 20 72 6f 75 6e 64 28 58 2c 59  und(X) round(X,Y
1b770 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72  )} {} {.  ^The r
1b780 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e 63 74 69  ound(X,Y) functi
1b790 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f  on returns a flo
1b7a0 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20 20 76 61  ating-point.  va
1b7b0 6c 75 65 20 58 20 72 6f 75 6e 64 65 64 20 74 6f  lue X rounded to
1b7c0 20 59 20 64 69 67 69 74 73 20 74 6f 20 74 68 65   Y digits to the
1b7d0 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 64 65   right of the de
1b7e0 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a 20 20 5e  cimal point..  ^
1b7f0 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
1b800 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 69 74  t is omitted, it
1b810 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62   is assumed to b
1b820 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  e 0..}..funcdef 
1b830 7b 72 74 72 69 6d 28 58 29 20 72 74 72 69 6d 28  {rtrim(X) rtrim(
1b840 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1b850 65 20 72 74 72 69 6d 28 58 2c 59 29 20 66 75 6e  e rtrim(X,Y) fun
1b860 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1b870 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
1b880 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e   removing any an
1b890 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65  d all.  characte
1b8a0 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  rs that appear i
1b8b0 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 72 69 67  n Y from the rig
1b8c0 68 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20  ht side of X..  
1b8d0 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65  ^If the Y argume
1b8e0 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 72  nt is omitted, r
1b8f0 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
1b900 73 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20  spaces from the 
1b910 72 69 67 68 74 0a 20 20 73 69 64 65 20 6f 66 20  right.  side of 
1b920 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  X..}..funcdef {s
1b930 6f 75 6e 64 65 78 28 58 29 7d 20 7b 7d 20 7b 0a  oundex(X)} {} {.
1b940 20 20 5e 54 68 65 20 73 6f 75 6e 64 65 78 28 58    ^The soundex(X
1b950 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1b960 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  ns a string that
1b970 20 69 73 20 74 68 65 20 73 6f 75 6e 64 65 78 20   is the soundex 
1b980 65 6e 63 6f 64 69 6e 67 20 0a 20 20 6f 66 20 74  encoding .  of t
1b990 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e  he string X..  ^
1b9a0 54 68 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30  The string "?000
1b9b0 22 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66  " is returned if
1b9c0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   the argument is
1b9d0 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74 61 69 6e   NULL or contain
1b9e0 73 0a 20 20 6e 6f 20 41 53 43 49 49 20 61 6c 70  s.  no ASCII alp
1b9f0 68 61 62 65 74 69 63 20 63 68 61 72 61 63 74 65  habetic characte
1ba00 72 73 2e 0a 20 20 5e 28 54 68 69 73 20 66 75 6e  rs..  ^(This fun
1ba10 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64  ction is omitted
1ba20 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 62 79 20   from SQLite by 
1ba30 64 65 66 61 75 6c 74 2e 0a 20 20 49 74 20 69 73  default..  It is
1ba40 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20   only available 
1ba50 69 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 53  if the [SQLITE_S
1ba60 4f 55 4e 44 45 58 5d 20 63 6f 6d 70 69 6c 65 2d  OUNDEX] compile-
1ba70 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 69 73  time option.  is
1ba80 20 75 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74   used when SQLit
1ba90 65 20 69 73 20 62 75 69 6c 74 2e 29 5e 0a 7d 0a  e is built.)^.}.
1baa0 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65  .funcdef {sqlite
1bab0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
1bac0 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  et(N)} {} {.  ^T
1bad0 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  he sqlite_compil
1bae0 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29 20 53 51  eoption_get() SQ
1baf0 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
1bb00 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
1bb10 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f  he.  [sqlite3_co
1bb20 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
1bb30 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  )] C/C++ functio
1bb40 6e 2e 0a 20 20 5e 54 68 69 73 20 72 6f 75 74 69  n..  ^This routi
1bb50 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 4e  ne returns the N
1bb60 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  -th compile-time
1bb70 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20   option used to 
1bb80 62 75 69 6c 64 20 53 51 4c 69 74 65 0a 20 20 6f  build SQLite.  o
1bb90 72 20 4e 55 4c 4c 20 69 66 20 4e 20 69 73 20 6f  r NULL if N is o
1bba0 75 74 20 6f 66 20 72 61 6e 67 65 2e 20 20 53 65  ut of range.  Se
1bbb0 65 20 61 6c 73 6f 20 74 68 65 20 5b 63 6f 6d 70  e also the [comp
1bbc0 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72 61 67  ile_options prag
1bbd0 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ma]..}..funcdef 
1bbe0 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f  {sqlite_compileo
1bbf0 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 7d 20 7b  ption_used(X)} {
1bc00 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74  } {.  ^The sqlit
1bc10 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
1bc20 75 73 65 64 28 29 20 53 51 4c 20 66 75 6e 63 74  used() SQL funct
1bc30 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72  ion is a wrapper
1bc40 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73   around the.  [s
1bc50 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
1bc60 74 69 6f 6e 5f 75 73 65 64 28 29 5d 20 43 2f 43  tion_used()] C/C
1bc70 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e  ++ function..  ^
1bc80 57 68 65 6e 20 74 68 65 20 61 72 67 75 6d 65 6e  When the argumen
1bc90 74 20 58 20 74 6f 20 73 71 6c 69 74 65 5f 63 6f  t X to sqlite_co
1bca0 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
1bcb0 28 58 29 20 69 73 20 61 20 73 74 72 69 6e 67 20  (X) is a string 
1bcc0 77 68 69 63 68 0a 20 20 69 73 20 74 68 65 20 6e  which.  is the n
1bcd0 61 6d 65 20 6f 66 20 61 20 63 6f 6d 70 69 6c 65  ame of a compile
1bce0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68  -time option, th
1bcf0 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
1bd00 6e 73 20 74 72 75 65 20 28 31 29 20 6f 72 0a 20  ns true (1) or. 
1bd10 20 66 61 6c 73 65 20 28 30 29 20 64 65 70 65 6e   false (0) depen
1bd20 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20  ding on whether 
1bd30 6f 72 20 6e 6f 74 20 74 68 61 74 20 6f 70 74 69  or not that opti
1bd40 6f 6e 20 77 61 73 20 75 73 65 64 20 64 75 72 69  on was used duri
1bd50 6e 67 20 74 68 65 0a 20 20 62 75 69 6c 64 2e 0a  ng the.  build..
1bd60 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
1bd70 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 7d 20  te_source_id()} 
1bd80 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
1bd90 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 66  te_source_id() f
1bda0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1bdb0 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 64  a string that id
1bdc0 65 6e 74 69 66 69 65 73 20 74 68 65 0a 20 20 73  entifies the.  s
1bdd0 70 65 63 69 66 69 63 20 76 65 72 73 69 6f 6e 20  pecific version 
1bde0 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f  of the source co
1bdf0 64 65 20 74 68 61 74 20 77 61 73 20 75 73 65 64  de that was used
1be00 20 74 6f 20 62 75 69 6c 64 20 74 68 65 20 53 51   to build the SQ
1be10 4c 69 74 65 0a 20 20 6c 69 62 72 61 72 79 2e 20  Lite.  library. 
1be20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 72 65 74   ^The string ret
1be30 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 5f  urned by sqlite_
1be40 73 6f 75 72 63 65 5f 69 64 28 29 20 62 65 67 69  source_id() begi
1be50 6e 73 20 77 69 74 68 0a 20 20 74 68 65 20 64 61  ns with.  the da
1be60 74 65 20 61 6e 64 20 74 69 6d 65 20 74 68 61 74  te and time that
1be70 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65   the source code
1be80 20 77 61 73 20 63 68 65 63 6b 65 64 20 69 6e 20   was checked in 
1be90 61 6e 64 20 69 73 20 66 6f 6c 6c 6f 77 73 20 62  and is follows b
1bea0 79 0a 20 20 61 6e 20 53 48 41 31 20 68 61 73 68  y.  an SHA1 hash
1beb0 20 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69   that uniquely i
1bec0 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 73 6f  dentifies the so
1bed0 75 72 63 65 20 74 72 65 65 2e 20 20 5e 54 68 69  urce tree.  ^Thi
1bee0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a 20 20  s function is.  
1bef0 61 6e 20 53 51 4c 20 77 72 61 70 70 65 72 20 61  an SQL wrapper a
1bf00 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
1bf10 65 33 5f 73 6f 75 72 63 65 69 64 28 29 5d 20 43  e3_sourceid()] C
1bf20 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66   interface..}..f
1bf30 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 76  uncdef {sqlite_v
1bf40 65 72 73 69 6f 6e 28 29 7d 20 7b 7d 20 7b 0a 20  ersion()} {} {. 
1bf50 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 76 65 72   ^The sqlite_ver
1bf60 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  sion() function 
1bf70 72 65 74 75 72 6e 73 20 74 68 65 20 76 65 72 73  returns the vers
1bf80 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ion string for t
1bf90 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72  he SQLite.  libr
1bfa0 61 72 79 20 74 68 61 74 20 69 73 20 72 75 6e 6e  ary that is runn
1bfb0 69 6e 67 2e 20 20 5e 54 68 69 73 20 66 75 6e 63  ing.  ^This func
1bfc0 74 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 0a 20  tion is an SQL. 
1bfd0 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
1bfe0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 62  the [sqlite3_lib
1bff0 76 65 72 73 69 6f 6e 28 29 5d 20 43 2d 69 6e 74  version()] C-int
1c000 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64  erface..}..funcd
1c010 65 66 20 7b 73 75 62 73 74 72 28 58 2c 59 2c 5a  ef {substr(X,Y,Z
1c020 29 20 73 75 62 73 74 72 28 58 2c 59 29 7d 20 7b  ) substr(X,Y)} {
1c030 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 62 73 74  } {.  ^The subst
1c040 72 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f  r(X,Y,Z) functio
1c050 6e 20 72 65 74 75 72 6e 73 20 61 20 73 75 62 73  n returns a subs
1c060 74 72 69 6e 67 20 6f 66 20 69 6e 70 75 74 20 73  tring of input s
1c070 74 72 69 6e 67 20 58 20 74 68 61 74 20 62 65 67  tring X that beg
1c080 69 6e 73 0a 20 20 77 69 74 68 20 74 68 65 20 59  ins.  with the Y
1c090 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61 6e  -th character an
1c0a0 64 20 77 68 69 63 68 20 69 73 20 5a 20 63 68 61  d which is Z cha
1c0b0 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a 20 20  racters long..  
1c0c0 5e 49 66 20 5a 20 69 73 20 6f 6d 69 74 74 65 64  ^If Z is omitted
1c0d0 20 74 68 65 6e 20 73 75 62 73 74 72 28 58 2c 59   then substr(X,Y
1c0e0 29 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 63 68  ) returns all ch
1c0f0 61 72 61 63 74 65 72 73 20 74 68 72 6f 75 67 68  aracters through
1c100 20 74 68 65 20 65 6e 64 0a 20 20 6f 66 20 74 68   the end.  of th
1c110 65 20 73 74 72 69 6e 67 20 58 20 62 65 67 69 6e  e string X begin
1c120 6e 69 6e 67 20 77 69 74 68 20 74 68 65 20 59 2d  ning with the Y-
1c130 74 68 2e 0a 20 20 5e 54 68 65 20 6c 65 66 74 2d  th..  ^The left-
1c140 6d 6f 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  most character o
1c150 66 20 58 20 69 73 20 6e 75 6d 62 65 72 20 31 2e  f X is number 1.
1c160 20 20 5e 49 66 20 59 20 69 73 20 6e 65 67 61 74    ^If Y is negat
1c170 69 76 65 0a 20 20 74 68 65 6e 20 74 68 65 20 66  ive.  then the f
1c180 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
1c190 66 20 74 68 65 20 73 75 62 73 74 72 69 6e 67 20  f the substring 
1c1a0 69 73 20 66 6f 75 6e 64 20 62 79 20 63 6f 75 6e  is found by coun
1c1b0 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a 20 20  ting from the.  
1c1c0 72 69 67 68 74 20 72 61 74 68 65 72 20 74 68 61  right rather tha
1c1d0 6e 20 74 68 65 20 6c 65 66 74 2e 20 20 5e 49 66  n the left.  ^If
1c1e0 20 5a 20 69 73 20 6e 65 67 61 74 69 76 65 20 74   Z is negative t
1c1f0 68 65 6e 0a 20 20 74 68 65 20 61 62 73 28 5a 29  hen.  the abs(Z)
1c200 20 63 68 61 72 61 63 74 65 72 73 20 70 72 65 63   characters prec
1c210 65 64 69 6e 67 20 74 68 65 20 59 2d 74 68 20 63  eding the Y-th c
1c220 68 61 72 61 63 74 65 72 20 61 72 65 20 72 65 74  haracter are ret
1c230 75 72 6e 65 64 2e 0a 20 20 5e 49 66 20 58 20 69  urned..  ^If X i
1c240 73 20 61 20 73 74 72 69 6e 67 20 74 68 65 6e 20  s a string then 
1c250 63 68 61 72 61 63 74 65 72 73 20 69 6e 64 69 63  characters indic
1c260 65 73 20 72 65 66 65 72 20 74 6f 20 61 63 74 75  es refer to actu
1c270 61 6c 20 55 54 46 2d 38 20 0a 20 20 63 68 61 72  al UTF-8 .  char
1c280 61 63 74 65 72 73 2e 20 20 5e 49 66 20 58 20 69  acters.  ^If X i
1c290 73 20 61 20 42 4c 4f 42 20 74 68 65 6e 20 74 68  s a BLOB then th
1c2a0 65 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20  e indices refer 
1c2b0 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66 75 6e  to bytes..}..fun
1c2c0 63 64 65 66 20 7b 74 6f 74 61 6c 5f 63 68 61 6e  cdef {total_chan
1c2d0 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ges()} {} {.  ^T
1c2e0 68 65 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  he total_changes
1c2f0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1c300 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
1c310 66 20 72 6f 77 20 63 68 61 6e 67 65 73 0a 20 20  f row changes.  
1c320 63 61 75 73 65 64 20 62 79 20 49 4e 53 45 52 54  caused by INSERT
1c330 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
1c340 54 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 20  TE.  statements 
1c350 73 69 6e 63 65 20 74 68 65 20 63 75 72 72 65 6e  since the curren
1c360 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  t database conne
1c370 63 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64  ction was opened
1c380 2e 0a 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69  ..  ^This functi
1c390 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
1c3a0 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69  around the [sqli
1c3b0 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
1c3c0 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 69 6e 74  s()].  C/C++ int
1c3d0 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64  erface..}..funcd
1c3e0 65 66 20 7b 74 72 69 6d 28 58 29 20 74 72 69 6d  ef {trim(X) trim
1c3f0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
1c400 68 65 20 74 72 69 6d 28 58 2c 59 29 20 66 75 6e  he trim(X,Y) fun
1c410 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1c420 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
1c430 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e   removing any an
1c440 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65  d all.  characte
1c450 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  rs that appear i
1c460 6e 20 59 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e  n Y from both en
1c470 64 73 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74  ds of X..  ^If t
1c480 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73  he Y argument is
1c490 20 6f 6d 69 74 74 65 64 2c 20 74 72 69 6d 28 58   omitted, trim(X
1c4a0 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73  ) removes spaces
1c4b0 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20   from both ends 
1c4c0 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
1c4d0 20 7b 74 79 70 65 6f 66 28 58 29 7d 20 7b 7d 20   {typeof(X)} {} 
1c4e0 7b 0a 20 20 5e 54 68 65 20 74 79 70 65 6f 66 28  {.  ^The typeof(
1c4f0 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1c500 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61  rns a string tha
1c510 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  t indicates the 
1c520 5b 64 61 74 61 74 79 70 65 5d 20 6f 66 0a 20 20  [datatype] of.  
1c530 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 58  the expression X
1c540 3a 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67  : "null", "integ
1c550 65 72 22 2c 20 22 72 65 61 6c 22 2c 20 22 74 65  er", "real", "te
1c560 78 74 22 2c 20 6f 72 20 22 62 6c 6f 62 22 2e 0a  xt", or "blob"..
1c570 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 6c 69  }..funcdef {unli
1c580 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  kely(X)} {} {.  
1c590 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29  ^The unlikely(X)
1c5a0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1c5b0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58  s the argument X
1c5c0 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 54   unchanged..  ^T
1c5d0 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66  he unlikely(X) f
1c5e0 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  unction is a no-
1c5f0 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  op that the code
1c600 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74   generator.  opt
1c610 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74  imizes away so t
1c620 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20  hat it consumes 
1c630 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20 61 74  no CPU cycles at
1c640 0a 20 20 72 75 6e 2d 74 69 6d 65 20 28 74 68 61  .  run-time (tha
1c650 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c  t is, during cal
1c660 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73  ls to [sqlite3_s
1c670 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20  tep()])..  ^The 
1c680 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 75  purpose of the u
1c690 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74  nlikely(X) funct
1c6a0 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76 69 64  ion is to provid
1c6b0 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20 74 68  e a hint.  to th
1c6c0 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
1c6d0 74 68 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e  that the argumen
1c6e0 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e  t X is a boolean
1c6f0 20 76 61 6c 75 65 0a 20 20 74 68 61 74 20 69 73   value.  that is
1c700 20 75 73 75 61 6c 6c 79 20 6e 6f 74 20 74 72 75   usually not tru
1c710 65 2e 20 5e 28 54 68 65 20 75 6e 6c 69 6b 65 6c  e. ^(The unlikel
1c720 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
1c730 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f   equivalent.  to
1c740 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c   [likelihood](X,
1c750 20 30 2e 30 36 32 35 29 2e 29 5e 0a 7d 0a 0a 66   0.0625).)^.}..f
1c760 75 6e 63 64 65 66 20 7b 75 6e 69 63 6f 64 65 28  uncdef {unicode(
1c770 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1c780 75 6e 69 63 6f 64 65 28 58 29 20 66 75 6e 63 74  unicode(X) funct
1c790 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1c7a0 6e 75 6d 65 72 69 63 20 75 6e 69 63 6f 64 65 20  numeric unicode 
1c7b0 63 6f 64 65 20 70 6f 69 6e 74 20 63 6f 72 72 65  code point corre
1c7c0 73 70 6f 6e 64 69 6e 67 20 74 6f 0a 20 20 74 68  sponding to.  th
1c7d0 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65  e first characte
1c7e0 72 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  r of the string 
1c7f0 58 2e 20 20 49 66 20 74 68 65 20 61 72 67 75 6d  X.  If the argum
1c800 65 6e 74 20 74 6f 20 75 6e 69 63 6f 64 65 28 58  ent to unicode(X
1c810 29 20 69 73 20 6e 6f 74 20 61 20 73 74 72 69 6e  ) is not a strin
1c820 67 0a 20 20 74 68 65 6e 20 74 68 65 20 72 65 73  g.  then the res
1c830 75 6c 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ult is undefined
1c840 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 70  ..}..funcdef {up
1c850 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  per(X)} {} {.  ^
1c860 54 68 65 20 75 70 70 65 72 28 58 29 20 66 75 6e  The upper(X) fun
1c870 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1c880 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73 74  copy of input st
1c890 72 69 6e 67 20 58 20 69 6e 20 77 68 69 63 68 20  ring X in which 
1c8a0 61 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d 63 61 73  all .  lower-cas
1c8b0 65 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  e ASCII characte
1c8c0 72 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  rs are converted
1c8d0 20 74 6f 20 74 68 65 69 72 20 75 70 70 65 72 2d   to their upper-
1c8e0 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74 2e  case equivalent.
1c8f0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72  .}..funcdef {zer
1c900 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20  oblob(N)} {} {. 
1c910 20 5e 54 68 65 20 7a 65 72 6f 62 6c 6f 62 28 4e   ^The zeroblob(N
1c920 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1c930 6e 73 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73  ns a BLOB consis
1c940 74 69 6e 67 20 6f 66 20 4e 20 62 79 74 65 73 20  ting of N bytes 
1c950 6f 66 20 30 78 30 30 2e 0a 20 20 53 51 4c 69 74  of 0x00..  SQLit
1c960 65 20 6d 61 6e 61 67 65 73 20 74 68 65 73 65 20  e manages these 
1c970 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72 79 20 65  zeroblobs very e
1c980 66 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a 65 72  fficiently.  Zer
1c990 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65 20 75 73  oblobs can be us
1c9a0 65 64 20 74 6f 0a 20 20 72 65 73 65 72 76 65 20  ed to.  reserve 
1c9b0 73 70 61 63 65 20 66 6f 72 20 61 20 42 4c 4f 42  space for a BLOB
1c9c0 20 74 68 61 74 20 69 73 20 6c 61 74 65 72 20 77   that is later w
1c9d0 72 69 74 74 65 6e 20 75 73 69 6e 67 20 0a 20 20  ritten using .  
1c9e0 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f 70  [sqlite3_blob_op
1c9f0 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65 6e 74  en() | increment
1ca00 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20 20  al BLOB I/O]..  
1ca10 5e 54 68 69 73 20 53 51 4c 20 66 75 6e 63 74 69  ^This SQL functi
1ca20 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  on is implemente
1ca30 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  d using the [sql
1ca40 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f  ite3_result_zero
1ca50 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74 69 6e  blob()].  routin
1ca60 65 20 66 72 6f 6d 20 74 68 65 20 43 2f 43 2b 2b  e from the C/C++
1ca70 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 3c 2f   interface..}.</
1ca80 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  tcl>.</table>..<
1ca90 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
1caa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cae0 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74  ###.Section {Dat
1caf0 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e 63 74  e And Time Funct
1cb00 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 7b  ions} datefunc {
1cb10 2a 64 61 74 65 66 75 6e 63 20 7b 64 61 74 65 20  *datefunc {date 
1cb20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1cb30 6e 73 7d 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73  ns}}.hd_keywords
1cb40 20 7b 64 61 74 65 28 29 20 53 51 4c 20 66 75 6e   {date() SQL fun
1cb50 63 74 69 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53  ction} {time() S
1cb60 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f  QL function}.hd_
1cb70 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65 74 69  keywords {dateti
1cb80 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  me() SQL functio
1cb90 6e 7d 20 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20  n} {julianday() 
1cba0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64  SQL function}.hd
1cbb0 5f 6b 65 79 77 6f 72 64 73 20 7b 73 74 72 66 74  _keywords {strft
1cbc0 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ime() SQL functi
1cbd0 6f 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  on}.</tcl>..<p>.
1cbe0 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
1cbf0 66 69 76 65 20 64 61 74 65 20 61 6e 64 20 74 69  five date and ti
1cc00 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 20  me functions as 
1cc10 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c  follows:.</p>..<
1cc20 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c  p>.<ol>.<li> ^(<
1cc30 62 3e 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69  b>date(</b><i>ti
1cc40 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
1cc50 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
1cc60 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20  .</i><b>)</b>)^ 
1cc70 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  </li>.<li> ^(<b>
1cc80 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  time(</b><i>time
1cc90 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
1cca0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
1ccb0 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
1ccc0 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61  li>.<li> ^(<b>da
1ccd0 74 65 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69  tetime(</b><i>ti
1cce0 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
1ccf0 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
1cd00 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20  .</i><b>)</b>)^ 
1cd10 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  </li>.<li> ^(<b>
1cd20 6a 75 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69  julianday(</b><i
1cd30 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
1cd40 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
1cd50 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
1cd60 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
1cd70 3c 62 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e  <b>strftime(</b>
1cd80 3c 69 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73  <i>format, times
1cd90 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
1cda0 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
1cdb0 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
1cdc0 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41  i>.</ol>..<p>.^A
1cdd0 6c 6c 20 66 69 76 65 20 64 61 74 65 20 61 6e 64  ll five date and
1cde0 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
1cdf0 74 61 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69  take a time stri
1ce00 6e 67 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e  ng as an argumen
1ce10 74 2e 20 0a 5e 54 68 65 20 74 69 6d 65 20 73 74  t. .^The time st
1ce20 72 69 6e 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64  ring is followed
1ce30 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   by zero or more
1ce40 20 6d 6f 64 69 66 69 65 72 73 2e 20 0a 5e 54 68   modifiers. .^Th
1ce50 65 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e  e strftime() fun
1ce60 63 74 69 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73  ction also takes
1ce70 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67   a format string
1ce80 20 61 73 20 69 74 73 20 66 69 72 73 74 20 61 72   as its first ar
1ce90 67 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70  gument..</p>..<p
1cea0 3e 0a 54 68 65 20 64 61 74 65 20 61 6e 64 20 74  >.The date and t
1ceb0 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73  ime functions us
1cec0 65 20 61 20 73 75 62 73 65 74 20 6f 66 0a 5b 68  e a subset of.[h
1ced0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1cee0 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f  ia.org/wiki/ISO_
1cef0 38 36 30 31 20 7c 20 49 53 30 2d 38 36 30 31 5d  8601 | IS0-8601]
1cf00 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 0a 66   date and time.f
1cf10 6f 72 6d 61 74 73 2e 0a 5e 54 68 65 20 64 61 74  ormats..^The dat
1cf20 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  e() function ret
1cf30 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e  urns the date in
1cf40 20 74 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59   this format: YY
1cf50 59 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20  YY-MM-DD. .^The 
1cf60 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  time() function 
1cf70 72 65 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65  returns the time
1cf80 20 61 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e   as HH:MM:SS. .^
1cf90 54 68 65 20 64 61 74 65 74 69 6d 65 28 29 20 66  The datetime() f
1cfa0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1cfb0 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  "YYYY-MM-DD HH:M
1cfc0 4d 3a 53 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75  M:SS". .^(The ju
1cfd0 6c 69 61 6e 64 61 79 28 29 20 66 75 6e 63 74 69  lianday() functi
1cfe0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 0a  on returns the .
1cff0 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1d000 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75  edia.org/wiki/Ju
1d010 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61  lian_day | Julia
1d020 6e 20 64 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d  n day] - the.num
1d030 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63  ber of days sinc
1d040 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77  e noon in Greenw
1d050 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20  ich on November 
1d060 32 34 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a 28  24, 4714 B.C. .(
1d070 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1d080 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72  edia.org/wiki/Pr
1d090 6f 6c 65 70 74 69 63 5f 47 72 65 67 6f 72 69 61  oleptic_Gregoria
1d0a0 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f  n_calendar | Pro
1d0b0 6c 65 70 74 69 63 20 47 72 65 67 6f 72 69 61 6e  leptic Gregorian
1d0c0 20 63 61 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e   calendar]).)^.^
1d0d0 54 68 65 20 73 74 72 66 74 69 6d 65 28 29 20 72  The strftime() r
1d0e0 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74  outine returns t
1d0f0 68 65 20 64 61 74 65 20 66 6f 72 6d 61 74 74 65  he date formatte
1d100 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a  d according to .
1d110 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  the format strin
1d120 67 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  g specified as t
1d130 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
1d140 74 2e 0a 5e 54 68 65 20 66 6f 72 6d 61 74 20 73  t..^The format s
1d150 74 72 69 6e 67 20 73 75 70 70 6f 72 74 73 20 74  tring supports t
1d160 68 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73  he most common s
1d170 75 62 73 74 69 74 75 74 69 6f 6e 73 20 66 6f 75  ubstitutions fou
1d180 6e 64 20 69 6e 20 74 68 65 20 0a 5b 68 74 74 70  nd in the .[http
1d190 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67  ://opengroup.org
1d1a0 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37 39  /onlinepubs/0079
1d1b0 30 38 37 39 39 2f 78 73 68 2f 73 74 72 66 74 69  08799/xsh/strfti
1d1c0 6d 65 2e 68 74 6d 6c 20 7c 20 73 74 72 66 74 69  me.html | strfti
1d1d0 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66  me() function].f
1d1e0 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64  rom the standard
1d1f0 20 43 20 6c 69 62 72 61 72 79 20 70 6c 75 73 20   C library plus 
1d200 74 77 6f 20 6e 65 77 20 73 75 62 73 74 69 74 75  two new substitu
1d210 74 69 6f 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a  tions, %f and %J
1d220 2e 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ..^(The followin
1d230 67 20 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20  g is a complete 
1d240 6c 69 73 74 20 6f 66 20 76 61 6c 69 64 20 73 74  list of valid st
1d250 72 66 74 69 6d 65 28 29 20 73 75 62 73 74 69 74  rftime() substit
1d260 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62  utions:.</p>..<b
1d270 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
1d280 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c  e border="0" cel
1d290 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c  lpadding="0" cel
1d2a0 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74  lspacing="0">.<t
1d2b0 72 3e 3c 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  r><td><td width=
1d2c0 22 31 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a  "10"><td></tr>..
1d2d0 3c 74 72 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e  <tr><td> %d <td>
1d2e0 3c 74 64 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74  <td> day of mont
1d2f0 68 3a 20 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25  h: 00.<tr><td> %
1d300 66 20 3c 74 64 3e 3c 74 64 3e 20 66 72 61 63 74  f <td><td> fract
1d310 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53  ional seconds: S
1d320 53 2e 53 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25  S.SSS.<tr><td> %
1d330 48 20 3c 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a  H <td><td> hour:
1d340 20 30 30 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e   00-24 .<tr><td>
1d350 20 25 6a 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79   %j <td><td> day
1d360 20 6f 66 20 79 65 61 72 3a 20 30 30 31 2d 33 36   of year: 001-36
1d370 36 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74  6.<tr><td> %J <t
1d380 64 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61  d><td> Julian da
1d390 79 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64  y number.<tr><td
1d3a0 3e 20 25 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f  > %m <td><td> mo
1d3b0 6e 74 68 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c  nth: 01-12.<tr><
1d3c0 74 64 3e 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20  td> %M <td><td> 
1d3d0 6d 69 6e 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74  minute: 00-59.<t
1d3e0 72 3e 3c 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74  r><td> %s <td><t
1d3f0 64 3e 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65  d> seconds since
1d400 20 31 39 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e   1970-01-01.<tr>
1d410 3c 74 64 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e  <td> %S <td><td>
1d420 20 73 65 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a   seconds: 00-59.
1d430 3c 74 72 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e  <tr><td> %w <td>
1d440 3c 74 64 3e 20 64 61 79 20 6f 66 20 77 65 65 6b  <td> day of week
1d450 20 30 2d 36 20 77 69 74 68 20 53 75 6e 64 61 79   0-6 with Sunday
1d460 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20  ==0.<tr><td> %W 
1d470 3c 74 64 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66  <td><td> week of
1d480 20 79 65 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72   year: 00-53.<tr
1d490 3e 3c 74 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64  ><td> %Y <td><td
1d4a0 3e 20 79 65 61 72 3a 20 30 30 30 30 2d 39 39 39  > year: 0000-999
1d4b0 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74  9.<tr><td> %% <t
1d4c0 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65  d><td> %.</table
1d4d0 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  >.</blockquote>)
1d4e0 5e 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20  ^..<p>.^(Notice 
1d4f0 74 68 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64  that all other d
1d500 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
1d510 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78  ctions can be ex
1d520 70 72 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73  pressed.in terms
1d530 20 6f 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a   of strftime():.
1d540 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1d550 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  e>.<table border
1d560 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67  ="0" cellpadding
1d570 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67  ="0" cellspacing
1d580 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62  ="0">.<tr><td><b
1d590 3e 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64  >Function</b><td
1d5a0 20 77 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e   width="30"><td>
1d5b0 3c 62 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74  <b>Equivalent st
1d5c0 72 66 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72  rftime()</b>.<tr
1d5d0 3e 3c 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e  ><td>   date(...
1d5e0 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20  )      <td><td> 
1d5f0 20 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d   strftime('%Y-%m
1d600 2d 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c  -%d', ...).<tr><
1d610 74 64 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20  td>   time(...) 
1d620 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73       <td><td>  s
1d630 74 72 66 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25  trftime('%H:%M:%
1d640 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64  S', ...).<tr><td
1d650 3e 20 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e  >   datetime(...
1d660 29 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72  )  <td><td>  str
1d670 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20  ftime('%Y-%m-%d 
1d680 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a  %H:%M:%S', ...).
1d690 3c 74 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61  <tr><td>   julia
1d6a0 6e 64 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74  nday(...) <td><t
1d6b0 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 4a  d>  strftime('%J
1d6c0 27 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e  ', ...).</table>
1d6d0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1d6e0 0a 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72  ..<p>.The only r
1d6f0 65 61 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69  easons for provi
1d700 64 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f  ding functions o
1d710 74 68 65 72 20 74 68 61 6e 20 73 74 72 66 74 69  ther than strfti
1d720 6d 65 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76  me() is.for conv
1d730 65 6e 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20  enience and for 
1d740 65 66 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e  efficiency..</p>
1d750 0a 0a 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e  ..<h3>Time Strin
1d760 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  gs</h3>..<p>^(A 
1d770 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20  time string can 
1d780 62 65 20 69 6e 20 61 6e 79 20 6f 66 20 74 68 65  be in any of the
1d790 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61   following forma
1d7a0 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ts:</p>..<ol>.<l
1d7b0 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1d7c0 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
1d7d0 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69  Y-MM-DD HH:MM</i
1d7e0 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
1d7f0 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69  M-DD HH:MM:SS</i
1d800 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
1d810 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53  M-DD HH:MM:SS.SS
1d820 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  S</i>.<li> <i>YY
1d830 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54  YY-MM-DD</i><b>T
1d840 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e  </b><i>HH:MM</i>
1d850 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1d860 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c  -DD</i><b>T</b><
1d870 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c  i>HH:MM:SS</i>.<
1d880 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1d890 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e  D</i><b>T</b><i>
1d8a0 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e  HH:MM:SS.SSS</i>
1d8b0 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f  .<li> <i>HH:MM</
1d8c0 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d  i>.<li> <i>HH:MM
1d8d0 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :SS</i>.<li> <i>
1d8e0 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e  HH:MM:SS.SSS</i>
1d8f0 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e  .<li> <b>now</b>
1d900 0a 3c 6c 69 3e 20 3c 69 3e 44 44 44 44 44 44 44  .<li> <i>DDDDDDD
1d910 44 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a  DDD</i>.</ol>)^.
1d920 0a 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73  .<p>.^In formats
1d930 20 35 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68   5 through 7, th
1d940 65 20 22 54 22 20 69 73 20 61 20 6c 69 74 65 72  e "T" is a liter
1d950 61 6c 20 63 68 61 72 61 63 74 65 72 20 73 65 70  al character sep
1d960 61 72 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74  arating .the dat
1d970 65 20 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20  e and the time, 
1d980 61 73 20 72 65 71 75 69 72 65 64 20 62 79 20 0a  as required by .
1d990 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e  [http://www.w3c.
1d9a0 6f 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65  org/TR/NOTE-date
1d9b0 74 69 6d 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d  time | ISO-8601]
1d9c0 2e 20 0a 5e 46 6f 72 6d 61 74 73 20 38 20 74 68  . .^Formats 8 th
1d9d0 72 6f 75 67 68 20 31 30 20 74 68 61 74 20 73 70  rough 10 that sp
1d9e0 65 63 69 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d  ecify only a tim
1d9f0 65 20 61 73 73 75 6d 65 20 61 20 64 61 74 65 20  e assume a date 
1da00 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20  of .2000-01-01. 
1da10 46 6f 72 6d 61 74 20 31 31 2c 20 74 68 65 20 73  Format 11, the s
1da20 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20  tring 'now', is 
1da30 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 74  converted into t
1da40 68 65 20 0a 63 75 72 72 65 6e 74 20 64 61 74 65  he .current date
1da50 20 61 6e 64 20 74 69 6d 65 20 61 73 20 6f 62 74   and time as obt
1da60 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 78  ained from the x
1da70 43 75 72 72 65 6e 74 54 69 6d 65 20 6d 65 74 68  CurrentTime meth
1da80 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69 74  od.of the [sqlit
1da90 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 69  e3_vfs] object i
1daa0 6e 20 75 73 65 2e 0a 5e 54 68 65 20 27 6e 6f 77  n use..^The 'now
1dab0 27 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 64 61  ' argument to da
1dac0 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1dad0 74 69 6f 6e 73 20 61 6c 77 61 79 73 20 72 65 74  tions always ret
1dae0 75 72 6e 73 20 65 78 61 63 74 6c 79 20 74 68 65  urns exactly the
1daf0 0a 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20  .same value for 
1db00 6d 75 6c 74 69 70 6c 65 20 69 6e 76 6f 63 61 74  multiple invocat
1db10 69 6f 6e 73 20 77 69 74 68 69 6e 20 74 68 65 20  ions within the 
1db20 73 61 6d 65 20 5b 73 71 6c 69 74 65 33 5f 73 74  same [sqlite3_st
1db30 65 70 28 29 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74  ep()] call..^[ht
1db40 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1db50 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64  a.org/wiki/Coord
1db60 69 6e 61 74 65 64 5f 55 6e 69 76 65 72 73 61 6c  inated_Universal
1db70 5f 54 69 6d 65 20 7c 20 55 6e 69 76 65 72 73 61  _Time | Universa
1db80 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69  l Coordinated Ti
1db90 6d 65 20 28 55 54 43 29 5d 20 69 73 20 75 73 65  me (UTC)] is use
1dba0 64 2e 20 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69  d. .^Format 12 i
1dbb0 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65  s the .[http://e
1dbc0 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1dbd0 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20  wiki/Julian_day 
1dbe0 7c 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d  | Julian day num
1dbf0 62 65 72 5d 0a 65 78 70 72 65 73 73 65 64 20 61  ber].expressed a
1dc00 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
1dc10 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a  nt value..</p>..
1dc20 3c 70 3e 0a 46 6f 72 6d 61 74 73 20 32 20 74 68  <p>.Formats 2 th
1dc30 72 6f 75 67 68 20 31 30 20 6d 61 79 20 62 65 20  rough 10 may be 
1dc40 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
1dc50 77 65 64 20 62 79 20 61 20 74 69 6d 65 7a 6f 6e  wed by a timezon
1dc60 65 20 69 6e 64 69 63 61 74 6f 72 20 6f 66 20 74  e indicator of t
1dc70 68 65 20 66 6f 72 6d 0a 22 3c 69 3e 26 23 39 31  he form."<i>&#91
1dc80 3b 2b 2d 26 23 39 33 3b 48 48 3a 4d 4d 3c 2f 69  ;+-&#93;HH:MM</i
1dc90 3e 22 20 6f 72 20 6a 75 73 74 20 22 3c 69 3e 5a  >" or just "<i>Z
1dca0 3c 2f 69 3e 22 2e 20 20 54 68 65 20 64 61 74 65  </i>".  The date
1dcb0 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
1dcc0 6f 6e 73 20 75 73 65 20 55 54 43 20 6f 72 20 22  ons use UTC or "
1dcd0 7a 75 6c 75 22 0a 74 69 6d 65 20 69 6e 74 65 72  zulu".time inter
1dce0 6e 61 6c 6c 79 2c 20 61 6e 64 20 73 6f 20 74 68  nally, and so th
1dcf0 65 20 22 5a 22 20 73 75 66 66 69 78 20 69 73 20  e "Z" suffix is 
1dd00 61 20 6e 6f 2d 6f 70 2e 20 20 41 6e 79 20 6e 6f  a no-op.  Any no
1dd10 6e 2d 7a 65 72 6f 20 22 48 48 3a 4d 4d 22 20 73  n-zero "HH:MM" s
1dd20 75 66 66 69 78 20 69 73 0a 73 75 62 74 72 61 63  uffix is.subtrac
1dd30 74 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  ted from the ind
1dd40 69 63 61 74 65 64 20 64 61 74 65 20 61 6e 64 20  icated date and 
1dd50 74 69 6d 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  time in order to
1dd60 20 63 6f 6d 70 75 74 65 20 7a 75 6c 75 20 74 69   compute zulu ti
1dd70 6d 65 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c  me..For example,
1dd80 20 61 6c 6c 20 6f 66 20 74 68 65 20 66 6f 6c 6c   all of the foll
1dd90 6f 77 69 6e 67 20 74 69 6d 65 20 73 74 72 69 6e  owing time strin
1dda0 67 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e  gs are equivalen
1ddb0 74 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  t:.</p>..<blockq
1ddc0 75 6f 74 65 3e 0a 32 30 31 33 2d 31 30 2d 30 37  uote>.2013-10-07
1ddd0 20 30 38 3a 32 33 3a 31 39 2e 31 32 30 3c 62 72   08:23:19.120<br
1dde0 3e 0a 32 30 31 33 2d 31 30 2d 30 37 54 30 38 3a  >.2013-10-07T08:
1ddf0 32 33 3a 31 39 2e 31 32 30 5a 3c 62 72 3e 0a 32  23:19.120Z<br>.2
1de00 30 31 33 2d 31 30 2d 30 37 20 30 34 3a 32 33 3a  013-10-07 04:23:
1de10 31 39 2e 31 32 30 2d 30 34 3a 30 30 3c 62 72 3e  19.120-04:00<br>
1de20 0a 32 34 35 36 35 37 32 2e 38 34 39 35 32 36 38  .2456572.8495268
1de30 35 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  5.</blockquote>.
1de40 0a 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61 74  .<p>.^(In format
1de50 73 20 34 2c 20 37 2c 20 61 6e 64 20 31 30 2c 20  s 4, 7, and 10, 
1de60 74 68 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 73  the fractional s
1de70 65 63 6f 6e 64 73 20 76 61 6c 75 65 20 53 53 2e  econds value SS.
1de80 53 53 53 20 63 61 6e 20 68 61 76 65 0a 6f 6e 65  SSS can have.one
1de90 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74 73 20   or more digits 
1dea0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 65  following the de
1deb0 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 45 78  cimal point.  Ex
1dec0 61 63 74 6c 79 20 74 68 72 65 65 20 64 69 67 69  actly three digi
1ded0 74 73 20 61 72 65 0a 73 68 6f 77 6e 20 69 6e 20  ts are.shown in 
1dee0 74 68 65 20 65 78 61 6d 70 6c 65 73 20 62 65 63  the examples bec
1def0 61 75 73 65 20 6f 6e 6c 79 20 74 68 65 20 66 69  ause only the fi
1df00 72 73 74 20 74 68 72 65 65 20 64 69 67 69 74 73  rst three digits
1df10 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74   are significant
1df20 0a 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2c 20  .to the result, 
1df30 62 75 74 20 74 68 65 20 69 6e 70 75 74 20 73 74  but the input st
1df40 72 69 6e 67 20 63 61 6e 20 68 61 76 65 20 66 65  ring can have fe
1df50 77 65 72 20 6f 72 20 6d 6f 72 65 20 74 68 61 6e  wer or more than
1df60 20 74 68 72 65 65 20 64 69 67 69 74 73 0a 61 6e   three digits.an
1df70 64 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65 20  d the date/time 
1df80 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73  functions will s
1df90 74 69 6c 6c 20 6f 70 65 72 61 74 65 20 63 6f 72  till operate cor
1dfa0 72 65 63 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61  rectly.)^.Simila
1dfb0 72 6c 79 2c 20 66 6f 72 6d 61 74 20 31 32 20 69  rly, format 12 i
1dfc0 73 20 73 68 6f 77 6e 20 77 69 74 68 20 31 30 20  s shown with 10 
1dfd0 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69  significant digi
1dfe0 74 73 2c 20 62 75 74 20 74 68 65 20 64 61 74 65  ts, but the date
1dff0 2f 74 69 6d 65 0a 66 75 6e 63 74 69 6f 6e 73 20  /time.functions 
1e000 77 69 6c 6c 20 72 65 61 6c 6c 79 20 61 63 63 65  will really acce
1e010 70 74 20 61 73 20 6d 61 6e 79 20 6f 72 20 61 73  pt as many or as
1e020 20 66 65 77 20 64 69 67 69 74 73 20 61 73 20 61   few digits as a
1e030 72 65 20 6e 65 63 65 73 73 61 72 79 20 74 6f 0a  re necessary to.
1e040 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 4a 75  represent the Ju
1e050 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 2e  lian day number.
1e060 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66  .</p>..<h3>Modif
1e070 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  iers</h3>..<p>^T
1e080 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63  he time string c
1e090 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  an be followed b
1e0a0 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d  y zero or more m
1e0b0 6f 64 69 66 69 65 72 73 20 74 68 61 74 20 0a 61  odifiers that .a
1e0c0 6c 74 65 72 20 64 61 74 65 20 61 6e 64 2f 6f 72  lter date and/or
1e0d0 20 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64   time. ^Each mod
1e0e0 69 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73  ifier.is a trans
1e0f0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
1e100 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65  s applied to the
1e110 20 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69   time value to i
1e120 74 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69  ts left..^Modifi
1e130 65 72 73 20 61 72 65 20 61 70 70 6c 69 65 64 20  ers are applied 
1e140 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
1e150 68 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70  ht; order is imp
1e160 6f 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76  ortant..^(The av
1e170 61 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72  ailable modifier
1e180 73 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73  s are as follows
1e190 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  .</p>..<ol>.<li>
1e1a0 20 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e   NNN days.<li> N
1e1b0 4e 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e  NN hours.<li> NN
1e1c0 4e 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e  N minutes.<li> N
1e1d0 4e 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a  NN.NNNN seconds.
1e1e0 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a  <li> NNN months.
1e1f0 3c 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c  <li> NNN years.<
1e200 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e  li> start of mon
1e210 74 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66  th.<li> start of
1e220 20 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74   year.<li> start
1e230 20 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65   of day.<li> wee
1e240 6b 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78  kday N.<li> unix
1e250 65 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c  epoch.<li> local
1e260 74 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c  time.<li> utc .<
1e270 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20  /ol>)^..<p>^The 
1e280 66 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69  first six modifi
1e290 65 72 73 20 28 31 20 74 68 72 6f 75 67 68 20 36  ers (1 through 6
1e2a0 29 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68  ) .simply add th
1e2b0 65 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75  e specified amou
1e2c0 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68  nt of time to th
1e2d0 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1e2e0 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68  .specified by th
1e2f0 65 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65  e preceding time
1e300 73 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66  string and modif
1e310 69 65 72 73 2e 0a 5e 54 68 65 20 27 73 27 20 63  iers..^The 's' c
1e320 68 61 72 61 63 74 65 72 20 61 74 20 74 68 65 20  haracter at the 
1e330 65 6e 64 20 6f 66 20 74 68 65 20 6d 6f 64 69 66  end of the modif
1e340 69 65 72 20 6e 61 6d 65 73 20 69 73 20 6f 70 74  ier names is opt
1e350 69 6f 6e 61 6c 2e 0a 5e 4e 6f 74 65 20 74 68 61  ional..^Note tha
1e360 74 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d  t "&plusmn;NNN m
1e370 6f 6e 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20  onths" works by 
1e380 72 65 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72  rendering the or
1e390 69 67 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f  iginal date into
1e3a0 0a 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20  .the YYYY-MM-DD 
1e3b0 66 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74  format, adding t
1e3c0 68 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74  he &plusmn;NNN t
1e3d0 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76  o the MM month v
1e3e0 61 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61  alue, then.norma
1e3f0 6c 69 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c  lizing the resul
1e400 74 2e 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65  t.  ^Thus, for e
1e410 78 61 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61  xample, the data
1e420 20 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69   2001-03-31 modi
1e430 66 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74  fied.by '+1 mont
1e440 68 27 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65  h' initially yie
1e450 6c 64 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20  lds 2001-04-31, 
1e460 62 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68  but April only h
1e470 61 73 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68  as 30 days.so th
1e480 65 20 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c  e date is normal
1e490 69 7a 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d  ized to 2001-05-
1e4a0 30 31 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20  01.  ^A similar 
1e4b0 65 66 66 65 63 74 20 6f 63 63 75 72 73 20 77 68  effect occurs wh
1e4c0 65 6e 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  en.the original 
1e4d0 64 61 74 65 20 69 73 20 46 65 62 72 75 61 72 79  date is February
1e4e0 20 32 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61   29 of a leapyea
1e4f0 72 20 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69  r and the modifi
1e500 65 72 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20  er is.&plusmn;N 
1e510 79 65 61 72 73 20 77 68 65 72 65 20 4e 20 69 73  years where N is
1e520 20 6e 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20   not a multiple 
1e530 6f 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70  of four.</p>..<p
1e540 3e 5e 54 68 65 20 22 73 74 61 72 74 20 6f 66 22  >^The "start of"
1e550 20 6d 6f 64 69 66 69 65 72 73 20 28 37 20 74 68   modifiers (7 th
1e560 72 6f 75 67 68 20 39 29 20 73 68 69 66 74 20 74  rough 9) shift t
1e570 68 65 20 64 61 74 65 20 62 61 63 6b 77 61 72 64  he date backward
1e580 73 20 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e  s .to the beginn
1e590 69 6e 67 20 6f 66 20 74 68 65 20 63 75 72 72 65  ing of the curre
1e5a0 6e 74 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f  nt month, year o
1e5b0 72 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  r day.</p>..<p>^
1e5c0 54 68 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f  The "weekday" mo
1e5d0 64 69 66 69 65 72 20 61 64 76 61 6e 63 65 73 20  difier advances 
1e5e0 74 68 65 20 64 61 74 65 20 66 6f 72 77 61 72 64  the date forward
1e5f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74   to the next dat
1e600 65 20 0a 77 68 65 72 65 20 74 68 65 20 77 65 65  e .where the wee
1e610 6b 64 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e  kday number is N
1e620 2e 20 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d  . Sunday is 0, M
1e630 6f 6e 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20  onday is 1, and 
1e640 73 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c  so forth.</p>..<
1e650 70 3e 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63  p>^The "unixepoc
1e660 68 22 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29  h" modifier (11)
1e670 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69   only works if i
1e680 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  t immediately fo
1e690 6c 6c 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72  llows .a timestr
1e6a0 69 6e 67 20 69 6e 20 74 68 65 20 44 44 44 44 44  ing in the DDDDD
1e6b0 44 44 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e  DDDDD format. .^
1e6c0 54 68 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61  This modifier ca
1e6d0 75 73 65 73 20 74 68 65 20 44 44 44 44 44 44 44  uses the DDDDDDD
1e6e0 44 44 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70  DDD to be interp
1e6f0 72 65 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20  reted not .as a 
1e700 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
1e710 72 20 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79  r as it normally
1e720 20 77 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61   would be, but a
1e730 73 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  s.[http://en.wik
1e740 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
1e750 55 6e 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78  Unix_time | Unix
1e760 20 54 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75   Time] - the .nu
1e770 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20  mber of seconds 
1e780 73 69 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20  since 1970.  If 
1e790 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  the "unixepoch" 
1e7a0 6d 6f 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f  modifier does no
1e7b0 74 0a 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73  t.follow a times
1e7c0 74 72 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72  tring of the for
1e7d0 6d 20 44 44 44 44 44 44 44 44 44 44 20 77 68 69  m DDDDDDDDDD whi
1e7e0 63 68 20 65 78 70 72 65 73 73 65 73 20 74 68 65  ch expresses the
1e7f0 20 6e 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e   number.of secon
1e800 64 73 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72  ds since 1970 or
1e810 20 69 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69   if other modifi
1e820 65 72 73 0a 73 65 70 61 72 61 74 65 20 74 68 65  ers.separate the
1e830 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1e840 69 66 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72  ifier from prior
1e850 20 44 44 44 44 44 44 44 44 44 44 20 74 68 65 6e   DDDDDDDDDD then
1e860 20 74 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73   the.behavior is
1e870 20 75 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65 20   undefined..Due 
1e880 74 6f 20 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d  to precision lim
1e890 69 74 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64  itations imposed
1e8a0 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
1e8b0 74 61 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36  tations use.of 6
1e8c0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73 2c 20  4-bit integers, 
1e8d0 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  the "unixepoch" 
1e8e0 6d 6f 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f  modifier only wo
1e8f0 72 6b 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65  rks for.dates be
1e900 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31  tween 0000-01-01
1e910 20 30 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33   00:00:00 and 53
1e920 35 32 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34  52-11-01 10:52:4
1e930 37 20 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66  7 (unix times.of
1e940 20 2d 36 32 31 36 37 32 31 39 32 30 30 20 74 68   -62167219200 th
1e950 72 6f 75 67 68 20 31 30 36 37 35 31 39 39 31 36  rough 1067519916
1e960 37 29 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  7).</p>..<tcl>hd
1e970 5f 66 72 61 67 6d 65 6e 74 20 6c 6f 63 61 6c 74  _fragment localt
1e980 69 6d 65 20 7b 6c 6f 63 61 6c 74 69 6d 65 20 6d  ime {localtime m
1e990 6f 64 69 66 69 65 72 7d 3c 2f 74 63 6c 3e 0a 3c  odifier}</tcl>.<
1e9a0 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d  p>^The "localtim
1e9b0 65 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29  e" modifier (12)
1e9c0 20 61 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d   assumes the tim
1e9d0 65 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20  e string to its 
1e9e0 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65  left is in.Unive
1e9f0 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64  rsal Coordinated
1ea00 20 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20   Time (UTC) and 
1ea10 61 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65  adjusts the time
1ea20 0a 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20  .string so that 
1ea30 69 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61  it displays loca
1ea40 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61  ltime.  If "loca
1ea50 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61  ltime".follows a
1ea60 20 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f   time that is no
1ea70 74 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20  t UTC, then the 
1ea80 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
1ea90 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74  fined..^(The "ut
1eaa0 63 22 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69  c" is the opposi
1eab0 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65  te of "localtime
1eac0 22 2e 20 20 22 75 74 63 22 20 61 73 73 75 6d 65  ".  "utc" assume
1ead0 73 20 74 68 61 74 20 74 68 65 20 73 74 72 69 6e  s that the strin
1eae0 67 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73  g.to its left is
1eaf0 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69   in the local ti
1eb00 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73  mezone and adjus
1eb10 74 73 20 74 68 61 74 20 73 74 72 69 6e 67 20 74  ts that string t
1eb20 6f 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49  o be in UTC.)^.I
1eb30 66 20 74 68 65 20 70 72 69 6f 72 20 73 74 72 69  f the prior stri
1eb40 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63  ng is not in loc
1eb50 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65  altime, then the
1eb60 20 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22   result of "utc"
1eb70 20 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f   is.undefined.</
1eb80 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73  p>..<h3>Examples
1eb90 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  </h3>..^(<p>Comp
1eba0 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ute the current 
1ebb0 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b  date.<p>..<block
1ebc0 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74  quote>SELECT dat
1ebd0 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b  e('now');</block
1ebe0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1ebf0 6f 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74 20  ompute the last 
1ec00 64 61 79 20 6f 66 20 74 68 65 20 63 75 72 72 65  day of the curre
1ec10 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c  nt month.</p>..<
1ec20 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43  blockquote>SELEC
1ec30 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74  T date('now','st
1ec40 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b  art of month','+
1ec50 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79  1 month','-1 day
1ec60 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
1ec70 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
1ec80 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74  e the date and t
1ec90 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78  ime given a unix
1eca0 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39   timestamp 10929
1ecb0 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  41466.</p>..<blo
1ecc0 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c  ckquote>.    SEL
1ecd0 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39  ECT datetime(109
1ece0 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70  2941466, 'unixep
1ecf0 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  och');.</blockqu
1ed00 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1ed10 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e  pute the date an
1ed20 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75  d time given a u
1ed30 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30  nix timestamp 10
1ed40 39 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63  92941466, and .c
1ed50 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f  ompensate for yo
1ed60 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e  ur local timezon
1ed70 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e.</p>..<blockqu
1ed80 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61  ote>.  SELECT da
1ed90 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36  tetime(109294146
1eda0 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20  6, 'unixepoch', 
1edb0 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f  'localtime');.</
1edc0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1edd0 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1ede0 63 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d  current unix tim
1edf0 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c  estamp.</p>..<bl
1ee00 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1ee10 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27  CT strftime('%s'
1ee20 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  ,'now');.</block
1ee30 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1ee40 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65  ompute the numbe
1ee50 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20  r of days since 
1ee60 74 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74  the signing of t
1ee70 68 65 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f  he US Declaratio
1ee80 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 63  n.of Independenc
1ee90 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e.</p>..<blockqu
1eea0 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75  ote>.  SELECT ju
1eeb0 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d  lianday('now') -
1eec0 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36   julianday('1776
1eed0 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63  -07-04');.</bloc
1eee0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1eef0 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  Compute the numb
1ef00 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
1ef10 6e 63 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  nce a particular
1ef20 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a   moment in 2004:
1ef30 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1ef40 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66  e>.  SELECT strf
1ef50 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29  time('%s','now')
1ef60 20 2d 20 73 74 72 66 74 69 6d 65 28 27 25 73 27   - strftime('%s'
1ef70 2c 27 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a  ,'2004-01-01 02:
1ef80 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  34:56');.</block
1ef90 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a  quote>)^..^(<p>.
1efa0 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65  Compute the date
1efb0 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 54 75   of the first Tu
1efc0 65 73 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72  esday in October
1efd0 0a 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74  .for the current
1efe0 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c   year..</p>..<bl
1eff0 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1f000 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73  CT date('now','s
1f010 74 61 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b  tart of year','+
1f020 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64  9 months','weekd
1f030 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  ay 2');.</blockq
1f040 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1f050 6d 70 75 74 65 20 74 68 65 20 74 69 6d 65 20 73  mpute the time s
1f060 69 6e 63 65 20 74 68 65 20 75 6e 69 78 20 65 70  ince the unix ep
1f070 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a  och in seconds .
1f080 28 6c 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27  (like strftime('
1f090 25 73 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70  %s','now') excep
1f0a0 74 20 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74  t includes fract
1f0b0 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e  ional part):</p>
1f0c0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1f0d0 20 53 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64   SELECT (juliand
1f0e0 61 79 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30  ay('now') - 2440
1f0f0 35 38 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a  587.5)*86400.0;.
1f100 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1f110 0a 3c 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64  .<h3>Caveats And
1f120 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54   Bugs</h3>..<p>T
1f130 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f  he computation o
1f140 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70  f local time dep
1f150 65 6e 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20  ends heavily on 
1f160 74 68 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c  the whim .of pol
1f170 69 74 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20  iticians and is 
1f180 74 68 75 73 20 64 69 66 66 69 63 75 6c 74 20 74  thus difficult t
1f190 6f 20 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f  o get correct fo
1f1a0 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20  r .all locales. 
1f1b0 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65  ^In this impleme
1f1c0 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61  ntation, the sta
1f1d0 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 20  ndard C library 
1f1e0 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74  .function localt
1f1f0 69 6d 65 5f 72 28 29 20 69 73 20 75 73 65 64 20  ime_r() is used 
1f200 74 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68 65  to assist in the
1f210 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20   calculation of 
1f220 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28  .local time.  ^(
1f230 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72  The .localtime_r
1f240 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f  () C function no
1f250 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b  rmally only work
1f260 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77  s for years.betw
1f270 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33  een 1970 and 203
1f280 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74  7. For dates out
1f290 73 69 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c  side this range,
1f2a0 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74   SQLite .attempt
1f2b0 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61  s to map the yea
1f2c0 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61  r into an equiva
1f2d0 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e  lent year within
1f2e0 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f   .this range, do
1f2f0 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e   the calculation
1f300 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79  , then map the y
1f310 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a  ear back.)^</p>.
1f320 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e  ..<p>^(These fun
1f330 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  ctions only work
1f340 20 66 6f 72 20 64 61 74 65 73 20 62 65 74 77 65   for dates betwe
1f350 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30  en 0000-01-01 00
1f360 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d  :00:00.and 9999-
1f370 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28  12-31 23:59:59 (
1f380 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62  julidan day numb
1f390 65 72 73 20 31 37 32 31 30 35 39 2e 35 20 74 68  ers 1721059.5 th
1f3a0 72 6f 75 67 68 20 35 33 37 33 34 38 34 2e 35 29  rough 5373484.5)
1f3b0 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75  .)^.For dates ou
1f3c0 74 73 69 64 65 20 74 68 61 74 20 72 61 6e 67 65  tside that range
1f3d0 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  , the results of
1f3e0 20 74 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73   these.functions
1f3f0 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c   are undefined.<
1f400 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74  /p>..<p>Non-Vist
1f410 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f  a Windows platfo
1f420 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74  rms only support
1f430 20 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20   one set of DST 
1f440 72 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e  rules. .Vista on
1f450 6c 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e  ly supports two.
1f460 20 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74   Therefore, on t
1f470 68 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20  hese platforms, 
1f480 0a 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20  .historical DST 
1f490 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c  calculations wil
1f4a0 6c 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20  l be incorrect. 
1f4b0 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e  .For example, in
1f4c0 20 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37   the US, in 2007
1f4d0 20 74 68 65 20 44 53 54 20 72 75 6c 65 73 20 63   the DST rules c
1f4e0 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73  hanged. .Non-Vis
1f4f0 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66  ta Windows platf
1f500 6f 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e  orms apply the n
1f510 65 77 20 32 30 30 37 20 44 53 54 20 72 75 6c 65  ew 2007 DST rule
1f520 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f  s .to all previo
1f530 75 73 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c  us years as well
1f540 2e 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d  . Vista does som
1f550 65 77 68 61 74 20 62 65 74 74 65 72 0a 67 65 74  ewhat better.get
1f560 74 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72  ting results cor
1f570 72 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38  rect back to 198
1f580 36 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65  6, when the rule
1f590 73 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e  s were also chan
1f5a0 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c  ged.</p>..<p>All
1f5b0 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74   internal comput
1f5c0 61 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68  ations assume th
1f5d0 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  e .[http://en.wi
1f5e0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1f5f0 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e  /Gregorian_calen
1f600 64 61 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20  dar | Gregorian 
1f610 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d  calendar].system
1f620 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73  .  It is also as
1f630 73 75 6d 65 64 20 74 68 61 74 20 65 76 65 72 79  sumed that every
1f640 0a 64 61 79 20 69 73 20 65 78 61 63 74 6c 79 20  .day is exactly 
1f650 38 36 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e  86400 seconds in
1f660 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   duration.</p>..
1f670 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1f680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f6a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f6b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f6c0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67  ####.Section {Ag
1f6d0 67 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e  gregate Function
1f6e0 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67  s} aggfunc {*agg
1f6f0 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  func}.</tcl>..<p
1f700 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74 65 20  >.The aggregate 
1f710 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20  functions shown 
1f720 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61  below are availa
1f730 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ble by default. 
1f740 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72   Additional.aggr
1f750 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1f760 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79  written in C may
1f770 20 62 65 20 61 64 64 65 64 20 75 73 69 6e 67 20   be added using 
1f780 74 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72  the .[sqlite3_cr
1f790 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
1f7a0 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c  </a>.API.</p>..<
1f7b0 70 3e 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72 65  p>.^In any aggre
1f7c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68  gate function th
1f7d0 61 74 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c  at takes a singl
1f7e0 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74  e argument, that
1f7f0 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65   argument.can be
1f800 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65   preceded by the
1f810 20 6b 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43   keyword DISTINC
1f820 54 2e 20 20 5e 49 6e 20 73 75 63 68 20 63 61 73  T.  ^In such cas
1f830 65 73 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c  es, duplicate.el
1f840 65 6d 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65  ements are filte
1f850 72 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67  red before being
1f860 20 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65   passed into the
1f870 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1f880 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c  ion..^For exampl
1f890 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  e, the function 
1f8a0 22 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  "count(distinct 
1f8b0 58 29 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  X)" will return 
1f8c0 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69  the number.of di
1f8d0 73 74 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66  stinct values of
1f8e0 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61   column X instea
1f8f0 64 20 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e  d of the total n
1f900 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c  umber of non-nul
1f910 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75  l.values in colu
1f920 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62  mn X..</p>..<tab
1f930 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
1f940 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c  padding=10>.<tcl
1f950 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58  >.funcdef {avg(X
1f960 29 7d 20 7b 2a 61 76 67 20 7b 61 76 67 28 29 20  )} {*avg {avg() 
1f970 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1f980 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76  on}} {.  ^The av
1f990 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  g() function.  r
1f9a0 65 74 75 72 6e 73 20 74 68 65 20 61 76 65 72 61  eturns the avera
1f9b0 67 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20  ge value of all 
1f9c0 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69  non-NULL <i>X</i
1f9d0 3e 20 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f  > within a.  gro
1f9e0 75 70 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e 64  up.  ^String and
1f9f0 20 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61   BLOB values tha
1fa00 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69  t do not look li
1fa10 6b 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20  ke numbers are. 
1fa20 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
1fa30 30 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74  0..  ^The result
1fa40 20 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c 77   of avg() is alw
1fa50 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  ays a floating p
1fa60 6f 69 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f  oint value as lo
1fa70 6e 67 20 61 73 0a 20 20 61 74 20 74 68 65 72 65  ng as.  at there
1fa80 20 69 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65   is at least one
1fa90 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20   non-NULL input 
1faa0 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e  even if all.  in
1fab0 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72  puts are integer
1fac0 73 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20  s.  ^The result 
1fad0 6f 66 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c  of avg() is NULL
1fae0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a   if and only if.
1faf0 20 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e    there are no n
1fb00 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20  on-NULL inputs. 
1fb10 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f   .}..funcdef {co
1fb20 75 6e 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d  unt(X) count(*)}
1fb30 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28   {*count {count(
1fb40 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1fb50 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
1fb60 63 6f 75 6e 74 28 58 29 20 66 75 6e 63 74 69 6f  count(X) functio
1fb70 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20 63 6f  n returns.  a co
1fb80 75 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  unt of the numbe
1fb90 72 20 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61  r of times.  tha
1fba0 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f  t <i>X</i> is no
1fbb0 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75  t NULL in a grou
1fbc0 70 2e 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a  p.  ^The count(*
1fbd0 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69  ) function.  (wi
1fbe0 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29  th no arguments)
1fbf0 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74   returns the tot
1fc00 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  al number of row
1fc10 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
1fc20 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75  }..funcdef {grou
1fc30 70 5f 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75  p_concat(X) grou
1fc40 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b  p_concat(X,Y)} {
1fc50 0a 20 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74  .  *group_concat
1fc60 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29   {group_concat()
1fc70 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1fc80 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20  ion}.} {.  ^The 
1fc90 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 66  group_concat() f
1fca0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a  unction returns.
1fcb0 20 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68    a string which
1fcc0 20 69 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e   is the concaten
1fcd0 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e  ation of.  all n
1fce0 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f  on-NULL values o
1fcf0 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66  f <i>X</i>.  ^If
1fd00 20 70 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c   parameter <i>Y<
1fd10 2f 69 3e 20 69 73 20 70 72 65 73 65 6e 74 20 74  /i> is present t
1fd20 68 65 6e 0a 20 20 69 74 20 69 73 20 75 73 65 64  hen.  it is used
1fd30 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f   as the separato
1fd40 72 0a 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74  r.  between inst
1fd50 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69  ances of <i>X</i
1fd60 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c  >.  ^A comma (",
1fd70 22 29 20 69 73 20 75 73 65 64 20 61 73 20 74 68  ") is used as th
1fd80 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 69 66  e separator.  if
1fd90 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69   <i>Y</i> is omi
1fda0 74 74 65 64 2e 20 20 54 68 65 20 6f 72 64 65 72  tted.  The order
1fdb0 20 6f 66 20 74 68 65 20 63 6f 6e 63 61 74 65 6e   of the concaten
1fdc0 61 74 65 64 20 65 6c 65 6d 65 6e 74 73 20 69 73  ated elements is
1fdd0 0a 20 20 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a  .  arbitrary..}.
1fde0 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29  .funcdef {max(X)
1fdf0 7d 20 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a  } {*maxAggFunc *
1fe00 61 67 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61  agg_max {max() a
1fe10 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1fe20 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78  n}} {.  ^The max
1fe30 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1fe40 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20  ction.  returns 
1fe50 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  the maximum valu
1fe60 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20  e of all values 
1fe70 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
1fe80 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c  ^The maximum val
1fe90 75 65 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ue is the value 
1fea0 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65  that would be re
1feb0 74 75 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61  turned last in a
1fec0 6e 0a 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20  n.  ORDER BY on 
1fed0 74 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e  the same column.
1fee0 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 61 78    ^Aggregate max
1fef0 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20  () returns NULL 
1ff00 0a 20 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  .  if and only i
1ff10 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e  f there are no n
1ff20 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  on-NULL values i
1ff30 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a  n the group..}..
1ff40 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d  funcdef {min(X)}
1ff50 20 7b 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61   {*minAggFunc *a
1ff60 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67  gg_min {min() ag
1ff70 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1ff80 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28  }} {.  ^The min(
1ff90 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1ffa0 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74  tion.  returns t
1ffb0 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e  he minimum non-N
1ffc0 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  ULL value of all
1ffd0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
1ffe0 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e  roup..  ^The min
1fff0 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68  imum value is th
20000 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c  e first non-NULL
20010 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c   value that woul
20020 64 20 61 70 70 65 61 72 0a 20 20 69 6e 20 61 6e  d appear.  in an
20030 20 4f 52 44 45 52 20 42 59 20 6f 66 20 74 68 65   ORDER BY of the
20040 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72   column..  ^Aggr
20050 65 67 61 74 65 20 6d 69 6e 28 29 20 72 65 74 75  egate min() retu
20060 72 6e 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20  rns NULL if and 
20070 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72  only if there ar
20080 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20  e no non-NULL.  
20090 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
200a0 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  oup..}..funcdef 
200b0 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29  {sum(X) total(X)
200c0 7d 20 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a  } {.  *sumFunc *
200d0 73 75 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75  sum *total.  {su
200e0 6d 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  m() aggregate fu
200f0 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c  nction}.  {total
20100 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
20110 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68  ction}.} {.  ^Th
20120 65 20 73 75 6d 28 29 20 61 6e 64 20 74 6f 74 61  e sum() and tota
20130 6c 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  l() aggregate fu
20140 6e 63 74 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e  nctions.  return
20150 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d   sum of all non-
20160 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74  NULL values in t
20170 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20  he group..  ^If 
20180 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
20190 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73  -NULL input rows
201a0 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75   then sum() retu
201b0 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74  rns.  NULL but t
201c0 6f 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30  otal() returns 0
201d0 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f  .0..  NULL is no
201e0 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c  t normally a hel
201f0 70 66 75 6c 20 72 65 73 75 6c 74 20 66 6f 72 20  pful result for 
20200 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f  the sum of no ro
20210 77 73 0a 20 20 62 75 74 20 74 68 65 20 53 51 4c  ws.  but the SQL
20220 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72   standard requir
20230 65 73 20 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f  es it and most o
20240 74 68 65 72 0a 20 20 53 51 4c 20 64 61 74 61 62  ther.  SQL datab
20250 61 73 65 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c  ase engines impl
20260 65 6d 65 6e 74 20 73 75 6d 28 29 20 74 68 61 74  ement sum() that
20270 20 77 61 79 20 73 6f 20 53 51 4c 69 74 65 20 64   way so SQLite d
20280 6f 65 73 20 69 74 20 69 6e 20 74 68 65 0a 20 20  oes it in the.  
20290 73 61 6d 65 20 77 61 79 20 69 6e 20 6f 72 64 65  same way in orde
202a0 72 20 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62  r to be compatib
202b0 6c 65 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74  le.   The non-st
202c0 61 6e 64 61 72 64 20 74 6f 74 61 6c 28 29 20 66  andard total() f
202d0 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f  unction.  is pro
202e0 76 69 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65  vided as a conve
202f0 6e 69 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72  nient way to wor
20300 6b 20 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65  k around this de
20310 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69  sign problem.  i
20320 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61  n the SQL langua
20330 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54  ge.</p>..  <p>^T
20340 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74  he result of tot
20350 61 6c 28 29 20 69 73 20 61 6c 77 61 79 73 20 61  al() is always a
20360 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
20370 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72 65  value..  ^The re
20380 73 75 6c 74 20 6f 66 20 73 75 6d 28 29 20 69 73  sult of sum() is
20390 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
203a0 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  e if all non-NUL
203b0 4c 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74  L inputs are int
203c0 65 67 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79  egers..  ^If any
203d0 20 69 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20   input to sum() 
203e0 69 73 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e  is neither an in
203f0 74 65 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a  teger or a NULL.
20400 20 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74    then sum() ret
20410 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  urns a floating 
20420 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20 77 68  point value.  wh
20430 69 63 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20  ich might be an 
20440 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f  approximation to
20450 20 74 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f   the true sum.</
20460 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20  p>..  <p>^Sum() 
20470 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69  will throw an "i
20480 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22  nteger overflow"
20490 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c   exception if al
204a0 6c 20 69 6e 70 75 74 73 0a 20 20 61 72 65 20 69  l inputs.  are i
204b0 6e 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a  ntegers or NULL.
204c0 20 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72    and an integer
204d0 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73   overflow occurs
204e0 20 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75   at any point du
204f0 72 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61  ring the computa
20500 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29  tion..  ^Total()
20510 20 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e   never throws an
20520 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f   integer overflo
20530 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61  w..}.</tcl>.</ta
20540 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  ble>..<tcl>.####
20550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20590 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
205a0 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74  on INSERT insert
205b0 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54   {INSERT *INSERT
205c0 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  s}..RecursiveBub
205d0 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72  bleDiagram inser
205e0 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  t-stmt.</tcl>..<
205f0 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74 61  p>The INSERT sta
20600 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20  tement comes in 
20610 74 68 72 65 65 20 62 61 73 69 63 20 66 6f 72 6d  three basic form
20620 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  s.  .<ul>.<li><p
20630 3e 5e 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  >^The first form
20640 20 28 77 69 74 68 20 74 68 65 20 22 56 41 4c 55   (with the "VALU
20650 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65  ES" keyword) cre
20660 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ates one or more
20670 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a 61 6e 20  .new rows in.an 
20680 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 20  existing table. 
20690 5e 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69  ^If no column-li
206a0 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64 20  st is specified 
206b0 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a  then the number.
206c0 6f 66 20 76 61 6c 75 65 73 20 69 6e 73 65 72 74  of values insert
206d0 65 64 20 69 6e 74 6f 20 65 61 63 68 20 72 6f 77  ed into each row
206e0 0a 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d  .must be the sam
206f0 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e as the number 
20700 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
20710 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20 74 68 69  e table. ^In thi
20720 73 20 63 61 73 65 0a 74 68 65 20 72 65 73 75 6c  s case.the resul
20730 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  t of evaluating 
20740 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  the left-most ex
20750 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 65 61  pression from ea
20760 63 68 20 74 65 72 6d 20 6f 66 0a 74 68 65 20 56  ch term of.the V
20770 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20 69 6e  ALUES list is in
20780 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
20790 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
207a0 20 6f 66 20 65 61 63 68 20 6e 65 77 20 72 6f 77   of each new row
207b0 2c 0a 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 66  ,.and so forth f
207c0 6f 72 20 65 61 63 68 20 73 75 62 73 65 71 75 65  or each subseque
207d0 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e  nt expression. ^
207e0 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d 6c 69 73 74  If a.column-list
207f0 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74   is specified, t
20800 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
20810 66 20 76 61 6c 75 65 73 20 69 6e 20 65 61 63 68  f values in each
20820 20 74 65 72 6d 20 6f 66 20 74 68 65 0a 56 41 4c   term of the.VAL
20830 55 45 20 6c 69 73 74 20 6d 75 73 74 20 6d 61 74  UE list must mat
20840 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ch the number of
20850 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d  .specified colum
20860 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20 74 68 65  ns. ^Each of the
20870 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f   named columns o
20880 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73  f the new row is
20890 20 70 6f 70 75 6c 61 74 65 64 0a 77 69 74 68 20   populated.with 
208a0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 65  the results of e
208b0 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f  valuating the co
208c0 72 72 65 73 70 6f 6e 64 69 6e 67 20 56 41 4c 55  rresponding VALU
208d0 45 53 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e  ES expression. ^
208e0 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73 20 74 68  Table.columns th
208f0 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72  at do not appear
20900 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c   in the column l
20910 69 73 74 20 61 72 65 20 70 6f 70 75 6c 61 74 65  ist are populate
20920 64 20 77 69 74 68 20 74 68 65 20 64 65 66 61 75  d with the defau
20930 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20  lt.column value 
20940 28 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61  (specified as pa
20950 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54 45  rt of the CREATE
20960 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
20970 29 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c 4c 20  ), or with NULL 
20980 69 66 0a 6e 6f 20 64 65 66 61 75 6c 74 20 76 61  if.no default va
20990 6c 75 65 20 69 73 20 73 70 65 63 69 66 69 65 64  lue is specified
209a0 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 65  ...<li><p>The se
209b0 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65  cond form of the
209c0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
209d0 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 53 45 4c  t contains a SEL
209e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69 6e  ECT statement.in
209f0 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c 55 45  stead of a VALUE
20a00 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e 65 77  S clause. ^A new
20a10 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65 72 74   entry is insert
20a20 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ed into the tabl
20a30 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77 20 6f  e for each.row o
20a40 66 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20  f data returned 
20a50 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  by executing the
20a60 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
20a70 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d 6e 2d  t. ^If a column-
20a80 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69 65  list is.specifie
20a90 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  d, the number of
20aa0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
20ab0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45  result of the SE
20ac0 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68 65  LECT must be the
20ad0 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d   same.as the num
20ae0 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69 6e 20  ber of items in 
20af0 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 2e  the column-list.
20b00 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20   ^Otherwise, if 
20b10 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69  no column-list i
20b20 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s.specified, the
20b30 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
20b40 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
20b50 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 6d   of the SELECT m
20b60 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 0a  ust be the same.
20b70 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
20b80 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
20b90 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45 4c 45  table. ^Any SELE
20ba0 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e  CT statement, in
20bb0 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d 70 6f 75 6e  cluding.[compoun
20bc0 64 20 53 45 4c 45 43 54 73 5d 20 61 6e 64 20 53  d SELECTs] and S
20bd0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
20be0 20 77 69 74 68 20 5b 4f 52 44 45 52 20 42 59 5d   with [ORDER BY]
20bf0 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d 49 54 5d 20   and/or [LIMIT] 
20c00 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20 62 65  clauses, .may be
20c10 20 75 73 65 64 20 69 6e 20 61 6e 20 49 4e 53 45   used in an INSE
20c20 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20  RT statement of 
20c30 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e  this form...<li>
20c40 3c 70 3e 54 68 65 20 74 68 69 72 64 20 66 6f 72  <p>The third for
20c50 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 73  m of an INSERT s
20c60 74 61 74 65 6d 65 6e 74 20 69 73 20 77 69 74 68  tatement is with
20c70 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 2e   DEFAULT VALUES.
20c80 0a 5e 28 54 68 65 20 49 4e 53 45 52 54 20 2e 2e  .^(The INSERT ..
20c90 2e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  . DEFAULT VALUES
20ca0 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 73 65 72   statement inser
20cb0 74 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20  ts a single new 
20cc0 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61 6d  row into the.nam
20cd0 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61 63  ed table.)^ ^Eac
20ce0 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
20cf0 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c  new row is popul
20d00 61 74 65 64 20 77 69 74 68 20 69 74 73 20 64 65  ated with its de
20d10 66 61 75 6c 74 20 76 61 6c 75 65 2c 0a 6f 72 20  fault value,.or 
20d20 77 69 74 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e  with a NULL if n
20d30 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  o default value 
20d40 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  is specified as 
20d50 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  part of the colu
20d60 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 20 69 6e  mn.definition in
20d70 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c   the CREATE TABL
20d80 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 2f  E statement...</
20d90 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 52 45  ul>..<p>^The "RE
20da0 50 4c 41 43 45 22 20 61 6e 64 20 22 49 4e 53 45  PLACE" and "INSE
20db0 52 54 20 4f 52 20 3c 69 3e 61 63 74 69 6f 6e 3c  RT OR <i>action<
20dc0 2f 69 3e 22 20 66 6f 72 6d 73 20 73 70 65 63 69  /i>" forms speci
20dd0 66 79 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  fy an alternativ
20de0 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  e.constraint con
20df0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
20e00 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
20e10 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e  e during this on
20e20 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64  e INSERT command
20e30 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f  ..See the sectio
20e40 6e 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e  n titled [ON CON
20e50 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
20e60 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
20e70 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  n..For compatibi
20e80 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c  lity with MySQL,
20e90 20 5e 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c   ^the parser all
20ea0 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66 20 74  ows the use of t
20eb0 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72  he.single keywor
20ec0 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f  d <a href="lang_
20ed0 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45  replace.html">RE
20ee0 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20  PLACE</a> as an 
20ef0 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45  .alias for "INSE
20f00 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a  RT OR REPLACE"..
20f10 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e  .<p>^(The option
20f20 61 6c 20 22 3c 69 3e 64 61 74 61 62 61 73 65 2d  al "<i>database-
20f30 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  name</i><b>.</b>
20f40 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  " prefix on the 
20f50 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  <i>table-name</i
20f60 3e 0a 69 73 20 73 75 70 70 6f 72 74 20 66 6f 72  >.is support for
20f70 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52   top-level INSER
20f80 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c  T statements onl
20f90 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  y.)^  ^The table
20fa0 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e   name must be.un
20fb0 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e  qualified for IN
20fc0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
20fd0 74 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69  that occur withi
20fe0 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  n [CREATE TRIGGE
20ff0 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e  R] statements..^
21000 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22  Similarly, the "
21010 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20  DEFAULT VALUES" 
21020 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45  form of the INSE
21030 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  RT statement is 
21040 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f  supported for.to
21050 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
21060 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61  tatements only a
21070 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52  nd not for INSER
21080 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  T statements wit
21090 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70  hin.triggers..<p
210a0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
210b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210f0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
21100 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61  {ON CONFLICT cla
21110 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b  use} conflict {{
21120 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d  conflict clause}
21130 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a   {ON CONFLICT}}.
21140 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
21150 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74  Diagram conflict
21160 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a  -clause.</tcl>..
21170 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
21180 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  CT clause is not
21190 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c 20   a separate SQL 
211a0 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73 20  command.  It is 
211b0 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63  a.non-standard c
211c0 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20 61  lause that can a
211d0 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74  ppear in many ot
211e0 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73  her SQL commands
211f0 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69 74  ..It is given it
21200 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e  s own section in
21210 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 62   this document b
21220 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74  ecause it is not
21230 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72  .part of standar
21240 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65 66  d SQL and theref
21250 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ore might not be
21260 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a   familiar.</p>..
21270 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78 20 66  <p>^The syntax f
21280 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  or the ON CONFLI
21290 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73 20  CT clause is as 
212a0 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a  shown above for.
212b0 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
212c0 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20   command.  ^For 
212d0 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55  the INSERT and.U
212e0 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20  PDATE commands, 
212f0 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e  the keywords "ON
21300 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72   CONFLICT" are r
21310 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22 20  eplaced by "OR" 
21320 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79 6e 74  so that.the synt
21330 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20 6e 61  ax reads more na
21340 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78  turally.  For ex
21350 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f  ample, instead o
21360 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e  f."INSERT ON CON
21370 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77 65  FLICT IGNORE" we
21380 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f 52   have "INSERT OR
21390 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65   IGNORE"..The ke
213a0 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62 75  ywords change bu
213b0 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66  t the meaning of
213c0 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20 74   the clause is t
213d0 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20 77  he same.either w
213e0 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ay.</p>..<p>The 
213f0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
21400 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 5b 55  se applies to [U
21410 4e 49 51 55 45 5d 2c 20 5b 4e 4f 54 20 4e 55 4c  NIQUE], [NOT NUL
21420 4c 5d 2c 0a 5b 43 48 45 43 4b 5d 2c 20 61 6e 64  L],.[CHECK], and
21430 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63   [PRIMARY KEY] c
21440 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 54 68 65 20  onstraints..The 
21450 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
21460 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74 0a 61  rithm does not.a
21470 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49 47 4e  pply to [FOREIGN
21480 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
21490 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66 69 76  ]..There are fiv
214a0 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  e conflict resol
214b0 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
214c0 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42 41 43  choices:.ROLLBAC
214d0 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c 2c 20  K, ABORT, FAIL, 
214e0 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c  IGNORE, and REPL
214f0 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c  ACE..^The defaul
21500 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
21510 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
21520 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73 0a  is ABORT.  This.
21530 69 73 20 77 68 61 74 20 74 68 65 79 20 6d 65 61  is what they mea
21540 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74  n:</p>..<dl>.<dt
21550 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e  ><b>ROLLBACK</b>
21560 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
21570 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c  hen an applicabl
21580 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
21590 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
215a0 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65 73 6f  he ROLLBACK.reso
215b0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
215c0 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72 72   aborts the curr
215d0 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
215e0 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49 54 45  t with.an SQLITE
215f0 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f  _CONSTRAINT erro
21600 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61 63 6b  r and rolls back
21610 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
21620 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e 6f  nsaction..^If no
21630 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
21640 61 63 74 69 76 65 20 28 6f 74 68 65 72 20 74 68  active (other th
21650 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 74  an the implied t
21660 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20  ransaction that 
21670 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65 76  is created on ev
21680 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65  ery.command) the
21690 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 72  n the ROLLBACK r
216a0 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
216b0 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73 61  thm works the sa
216c0 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52 54 20  me as the.ABORT 
216d0 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c 2f  algorithm.</p></
216e0 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52  dd>..<dt><b>ABOR
216f0 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  T</b></dt>.<dd><
21700 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
21710 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
21720 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
21730 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a 72 65  rs, the ABORT.re
21740 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
21750 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
21760 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
21770 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51 4c 49  ent.with an SQLI
21780 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
21790 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f 75  ror and backs ou
217a0 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d 61  t any changes.ma
217b0 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65 6e  de by the curren
217c0 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 3b  t SQL statement;
217d0 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61 75   but changes cau
217e0 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51 4c  sed.by prior SQL
217f0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
21800 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61 6e  in the same tran
21810 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65 73  saction are pres
21820 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74 72  erved and the.tr
21830 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e  ansaction remain
21840 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20 69  s active..This i
21850 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 65  s the default be
21860 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20 62  havior and the b
21870 65 68 61 76 69 6f 72 20 73 70 65 63 69 66 69 65  ehavior specifie
21880 64 20 62 79 20 74 68 65 20 53 51 4c 0a 73 74 61  d by the SQL.sta
21890 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a  ndard.</p></dd>.
218a0 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e  .<dt><b>FAIL</b>
218b0 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
218c0 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c  hen an applicabl
218d0 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
218e0 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
218f0 68 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69  he FAIL.resoluti
21900 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f  on algorithm abo
21910 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
21920 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69  SQL statement wi
21930 74 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e  th an.SQLITE_CON
21940 53 54 52 41 49 4e 54 20 65 72 72 6f 72 2e 20 20  STRAINT error.  
21950 5e 42 75 74 20 74 68 65 20 46 41 49 4c 20 72 65  ^But the FAIL re
21960 73 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  solution does no
21970 74 0a 62 61 63 6b 20 6f 75 74 20 70 72 69 6f 72  t.back out prior
21980 20 63 68 61 6e 67 65 73 20 6f 66 20 74 68 65 20   changes of the 
21990 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68  SQL statement th
219a0 61 74 20 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f  at failed nor do
219b0 65 73 0a 69 74 20 65 6e 64 20 74 68 65 20 74 72  es.it end the tr
219c0 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20  ansaction..^For 
219d0 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55  example, if an U
219e0 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20  PDATE.statement 
219f0 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f  encountered a co
21a00 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
21a10 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20  on on the 100th 
21a20 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74 65  row that.it atte
21a30 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20  mpts to update, 
21a40 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 39  then the first 9
21a50 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72  9 row changes ar
21a60 65 20 70 72 65 73 65 72 76 65 64 0a 62 75 74 20  e preserved.but 
21a70 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20  changes to rows 
21a80 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e  100 and beyond n
21a90 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c  ever occur.</p><
21aa0 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e  /dd>..<dt><b>IGN
21ab0 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORE</b></dt>.<dd
21ac0 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
21ad0 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
21ae0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
21af0 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52  curs, .the IGNOR
21b00 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  E resolution alg
21b10 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74 68 65  orithm skips the
21b20 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f   one row that co
21b30 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74  ntains.the const
21b40 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
21b50 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 70 72  and continues pr
21b60 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65 71 75  ocessing subsequ
21b70 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68 65 20  ent rows.of the 
21b80 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 73  SQL statement as
21b90 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74   if nothing went
21ba0 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f   wrong..Other ro
21bb0 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  ws before and af
21bc0 74 65 72 20 74 68 65 20 72 6f 77 20 74 68 61 74  ter the row that
21bd0 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63  .contained the c
21be0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
21bf0 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74 65 64  ion are inserted
21c00 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d   or updated.norm
21c10 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20  ally. ^No error 
21c20 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  is returned when
21c30 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66   the IGNORE conf
21c40 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
21c50 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
21c60 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  d.</p></dd>..<dt
21c70 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c  ><b>REPLACE</b><
21c80 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
21c90 65 6e 20 61 20 5b 55 4e 49 51 55 45 5d 20 6f 72  en a [UNIQUE] or
21ca0 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63   [PRIMARY KEY] c
21cb0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
21cc0 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65  ion occurs, .the
21cd0 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72 69 74   REPLACE algorit
21ce0 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65 2d 65  hm.deletes pre-e
21cf0 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74 68 61  xisting rows tha
21d00 74 20 61 72 65 20 63 61 75 73 69 6e 67 20 74 68  t are causing th
21d10 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
21d20 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74 6f 20  lation.prior to 
21d30 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75 70 64  inserting or upd
21d40 61 74 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  ating the curren
21d50 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20 63 6f  t row and the co
21d60 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20  mmand continues 
21d70 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61  .executing norma
21d80 6c 6c 79 2e 0a 5e 49 66 20 61 20 5b 4e 4f 54 20  lly..^If a [NOT 
21d90 4e 55 4c 4c 5d 20 63 6f 6e 73 74 72 61 69 6e 74  NULL] constraint
21da0 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
21db0 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 63  s, the REPLACE c
21dc0 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69  onflict.resoluti
21dd0 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65 20  on replaces the 
21de0 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74 68 0a  NULL value with.
21df0 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
21e00 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  e for that colum
21e10 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63 6f 6c  n, or if the col
21e20 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61 75  umn has no defau
21e30 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  lt.value, then t
21e40 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74  he ABORT algorit
21e50 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49 66 20  hm is used..^If 
21e60 61 20 5b 43 48 45 43 4b 5d 20 63 6f 6e 73 74 72  a [CHECK] constr
21e70 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
21e80 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41  ccurs, the REPLA
21e90 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CE conflict reso
21ea0 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d  lution.algorithm
21eb0 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c 69   always works li
21ec0 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c  ke ABORT.</p>..<
21ed0 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45 50 4c  p>^When the REPL
21ee0 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACE conflict res
21ef0 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79  olution strategy
21f00 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e   deletes rows in
21f10 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66   order to.satisf
21f20 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  y a constraint, 
21f30 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  [CREATE TRIGGER 
21f40 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67 65 72  | delete trigger
21f50 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64 20 6f  s] fire if and o
21f60 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73 69 76  nly if.[recursiv
21f70 65 5f 74 72 69 67 67 65 72 73 20 70 72 61 67 6d  e_triggers pragm
21f80 61 20 7c 20 72 65 63 75 72 73 69 76 65 20 74 72  a | recursive tr
21f90 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e 61 62  iggers] are enab
21fa0 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  led.</p>..<p>^Th
21fb0 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61 74  e [sqlite3_updat
21fc0 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20  e_hook | update 
21fd0 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76  hook] is not inv
21fe0 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20 74 68  oked for rows th
21ff0 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64 20 62  at.are deleted b
22000 79 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f  y the REPLACE co
22010 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
22020 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f  n strategy.  ^No
22030 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45 20 69  r does.REPLACE i
22040 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b 73 71  ncrement the [sq
22050 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20  lite3_changes | 
22060 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e  change counter].
22070 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e 61 6c  .The exceptional
22080 20 62 65 68 61 76 69 6f 72 73 20 64 65 66 69 6e   behaviors defin
22090 65 64 20 69 6e 20 74 68 69 73 20 70 61 72 61 67  ed in this parag
220a0 72 61 70 68 20 6d 69 67 68 74 20 63 68 61 6e 67  raph might chang
220b0 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65 20 72  e .in a future r
220c0 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c  elease.</p>.</dl
220d0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72  >..<p>^The algor
220e0 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69  ithm specified i
220f0 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20  n the OR clause 
22100 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20  of an INSERT or 
22110 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73  UPDATE.overrides
22120 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73   any algorithm s
22130 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 43 52  pecified in a CR
22140 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20  EATE TABLE..^If 
22150 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  no algorithm is 
22160 73 70 65 63 69 66 69 65 64 20 61 6e 79 77 68 65  specified anywhe
22170 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c  re, the ABORT al
22180 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e  gorithm is used.
22190 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
221a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221e0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
221f0 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64  on REINDEX reind
22200 65 78 20 52 45 49 4e 44 45 58 0a 0a 52 65 63 75  ex REINDEX..Recu
22210 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
22220 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d 74 0a  am reindex-stmt.
22230 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
22240 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20  REINDEX command 
22250 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74  is used to delet
22260 65 20 61 6e 64 20 72 65 63 72 65 61 74 65 20 69  e and recreate i
22270 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61  ndices from scra
22280 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65  tch..This is use
22290 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66  ful when the def
222a0 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c  inition of a col
222b0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
222c0 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70  has changed..</p
222d0 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45  >..<p>^If the RE
222e0 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73  INDEX keyword is
222f0 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79   not followed by
22300 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71   a collation-seq
22310 75 65 6e 63 65 20 6f 72 20 64 61 74 61 62 61 73  uence or databas
22320 65 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74 69  e .object identi
22330 66 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69  fier, then all i
22340 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74  ndices in all at
22350 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
22360 20 61 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c   are rebuilt...<
22370 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45  p>^If the REINDE
22380 58 20 6b 65 79 77 6f 72 64 20 69 73 20 66 6f 6c  X keyword is fol
22390 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61  lowed by a colla
223a0 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61  tion-sequence na
223b0 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64  me, then.all ind
223c0 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61  ices in all atta
223d0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 74  ched databases t
223e0 68 61 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65  hat use the name
223f0 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
22400 65 6e 63 65 73 0a 61 72 65 20 72 65 63 72 65 61  ences.are recrea
22410 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69  ted. ..<p>^Or, i
22420 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 61  f the argument a
22430 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 52  ttached to the R
22440 45 49 4e 44 45 58 20 69 64 65 6e 74 69 66 69 65  EINDEX identifie
22450 73 20 61 20 73 70 65 63 69 66 69 63 20 0a 64 61  s a specific .da
22460 74 61 62 61 73 65 20 74 61 62 6c 65 2c 20 74 68  tabase table, th
22470 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 61  en all indices a
22480 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 64  ttached to the d
22490 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 61 72  atabase table ar
224a0 65 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20  e rebuilt. .^If 
224b0 69 74 20 69 64 65 6e 74 69 66 69 65 73 20 61 20  it identifies a 
224c0 73 70 65 63 69 66 69 63 20 64 61 74 61 62 61 73  specific databas
224d0 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75  e index, then ju
224e0 73 74 20 74 68 61 74 20 69 6e 64 65 78 20 69 73  st that index is
224f0 20 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e   recreated...<p>
22500 5e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61  ^If no <i>databa
22510 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73  se-name</i> is s
22520 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68 65  pecified and the
22530 72 65 20 65 78 69 73 74 73 20 62 6f 74 68 20 61  re exists both a
22540 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20   table or.index 
22550 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  and a collation 
22560 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
22570 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65 2c 20  specified name, 
22580 53 51 4c 69 74 65 20 69 6e 74 65 72 70 72 65 74  SQLite interpret
22590 73 0a 74 68 69 73 20 61 73 20 61 20 72 65 71 75  s.this as a requ
225a0 65 73 74 20 74 6f 20 72 65 62 75 69 6c 64 20 74  est to rebuild t
225b0 68 65 20 69 6e 64 69 63 65 73 20 74 68 61 74 20  he indices that 
225c0 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f  use the named co
225d0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
225e0 2e 0a 54 68 69 73 20 61 6d 62 69 67 75 69 74 79  ..This ambiguity
225f0 20 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6d   in the syntax m
22600 61 79 20 62 65 20 61 76 6f 69 64 65 64 20 62 79  ay be avoided by
22610 20 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69   always specifyi
22620 6e 67 20 61 0a 3c 69 3e 64 61 74 61 62 61 73 65  ng a.<i>database
22630 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72  -name</i> when r
22640 65 69 6e 64 65 78 69 6e 67 20 61 20 73 70 65 63  eindexing a spec
22650 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e  ific table or in
22660 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  dex...<tcl>.####
22670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
226a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
226b0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
226c0 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c  ion REPLACE repl
226d0 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74  ace REPLACE..</t
226e0 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50  cl>..<p>^The REP
226f0 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20  LACE command is 
22700 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
22710 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c   "[ON CONFLICT |
22720 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41   INSERT OR REPLA
22730 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20  CE]".variant of 
22740 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d  the [INSERT] com
22750 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69  mand.  .This ali
22760 61 73 20 69 73 20 70 72 6f 76 69 64 65 64 20 66  as is provided f
22770 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
22780 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62   other SQL datab
22790 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65  ase engines.  Se
227a0 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20  e the .[INSERT] 
227b0 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74  command document
227c0 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69  ation for additi
227d0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
227e0 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23  .</p>  ..<tcl>.#
227f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
22840 65 63 74 69 6f 6e 20 7b 57 49 54 48 20 63 6c 61  ection {WITH cla
22850 75 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f 6d 6d  use} with {{comm
22860 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22870 69 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52 65 63  ions} WITH}..Rec
22880 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
22890 72 61 6d 20 77 69 74 68 2d 63 6c 61 75 73 65 0a  ram with-clause.
228a0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f  </tcl>..<p>Commo
228b0 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73 73 69  n Table Expressi
228c0 6f 6e 73 20 6f 72 20 43 54 45 73 20 61 63 74 20  ons or CTEs act 
228d0 6c 69 6b 65 20 74 65 6d 70 6f 72 61 72 79 20 5b  like temporary [
228e0 76 69 65 77 73 5d 20 74 68 61 74 20 65 78 69 73  views] that exis
228f0 74 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20 64  t.only for the d
22900 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e  uration of a sin
22910 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
22920 74 2e 20 20 54 68 65 72 65 20 61 72 65 20 74 77  t.  There are tw
22930 6f 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d 6d 6f  o kinds of.commo
22940 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
22950 6f 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79 22 20  ons: "ordinary" 
22960 61 6e 64 20 22 72 65 63 75 72 73 69 76 65 22 2e  and "recursive".
22970 20 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d 6d 6f   Ordinary .commo
22980 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
22990 6f 6e 73 20 61 72 65 20 68 65 6c 70 66 75 6c 20  ons are helpful 
229a0 66 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65 72 69  for making.queri
229b0 65 73 20 65 61 73 69 65 72 20 74 6f 20 75 6e 64  es easier to und
229c0 65 72 73 74 61 6e 64 20 62 79 20 66 61 63 74 6f  erstand by facto
229d0 72 69 6e 67 0a 73 75 62 71 75 65 72 69 65 73 20  ring.subqueries 
229e0 6f 75 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 20  out of the main 
229f0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 52  SQL statement..R
22a00 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20  ecursive common 
22a10 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
22a20 73 0a 70 72 6f 76 69 64 65 20 74 68 65 20 61 62  s.provide the ab
22a30 69 6c 69 74 79 20 74 6f 20 64 6f 20 68 69 65 72  ility to do hier
22a40 61 72 63 68 69 63 61 6c 20 6f 72 0a 72 65 63 75  archical or.recu
22a50 72 73 69 76 65 20 71 75 65 72 69 65 73 20 6f 66  rsive queries of
22a60 20 74 72 65 65 73 20 61 6e 64 20 67 72 61 70 68   trees and graph
22a70 73 2c 20 61 20 63 61 70 61 62 69 6c 69 74 79 0a  s, a capability.
22a80 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 74 68 65  that is not othe
22a90 72 77 69 73 65 20 61 76 61 69 6c 61 62 6c 65 20  rwise available 
22aa0 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75  in the SQL langu
22ab0 61 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63 6f 6d  age...<p>All com
22ac0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
22ad0 73 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72 79 20  sions (ordinary 
22ae0 61 6e 64 20 72 65 63 75 72 73 69 76 65 29 20 61  and recursive) a
22af0 72 65 20 0a 63 72 65 61 74 65 64 20 62 79 20 70  re .created by p
22b00 72 65 70 65 6e 64 69 6e 67 20 61 20 57 49 54 48  repending a WITH
22b10 20 63 6c 61 75 73 65 20 69 6e 20 66 72 6f 6e 74   clause in front
22b20 20 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d 2c 20   of a [SELECT], 
22b30 5b 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c 45 54  [INSERT], [DELET
22b40 45 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20  E],.or [UPDATE] 
22b50 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 20 73 69  statement.  A si
22b60 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
22b70 20 63 61 6e 20 73 70 65 63 69 66 79 20 6f 6e 65   can specify one
22b80 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e 20   or more.common 
22b90 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
22ba0 73 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68  s, some of which
22bb0 20 61 72 65 20 6f 72 64 69 6e 61 72 79 20 61 6e   are ordinary an
22bc0 64 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 0a  d some of which.
22bd0 61 72 65 20 72 65 63 75 72 73 69 76 65 2e 0a 0a  are recursive...
22be0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
22bf0 20 6f 72 64 69 6e 61 72 79 63 74 65 20 7b 6f 72   ordinarycte {or
22c00 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
22c10 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d  ble expressions}
22c20 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64 69 6e  </tcl>.<h3>Ordin
22c30 61 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65  ary Common Table
22c40 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   Expressions</h3
22c50 3e 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e 61 72  >..<p>An ordinar
22c60 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  y common table e
22c70 78 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b 73 20  xpression works 
22c80 61 73 20 69 66 20 69 74 20 77 65 72 65 20 61 20  as if it were a 
22c90 5b 76 69 65 77 5d 20 74 68 61 74 0a 65 78 69 73  [view] that.exis
22ca0 74 73 20 66 6f 72 20 74 68 65 20 64 75 72 61 74  ts for the durat
22cb0 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20  ion of a single 
22cc0 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72 64 69  statement.  Ordi
22cd0 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  nary common tabl
22ce0 65 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  e.expressions ar
22cf0 65 20 75 73 65 66 75 6c 20 66 6f 72 20 66 61 63  e useful for fac
22d00 74 6f 72 69 6e 67 20 6f 75 74 20 73 75 62 71 75  toring out subqu
22d10 65 72 69 65 73 20 61 6e 64 20 6d 61 6b 69 6e 67  eries and making
22d20 20 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53 51 4c   the overall.SQL
22d30 20 73 74 61 74 65 6d 65 6e 74 20 65 61 73 69 65   statement easie
22d40 72 20 74 6f 20 72 65 61 64 20 61 6e 64 20 75 6e  r to read and un
22d50 64 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e 41 20  derstand...<p>A 
22d60 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 20  WITH clause can 
22d70 63 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61 72 79  contain ordinary
22d80 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
22d90 70 72 65 73 73 69 6f 6e 73 20 65 76 65 6e 20 69  pressions even i
22da0 66 0a 69 74 20 69 6e 63 6c 75 64 65 73 20 74 68  f.it includes th
22db0 65 20 52 45 43 55 52 53 49 56 45 20 6b 65 79 77  e RECURSIVE keyw
22dc0 6f 72 64 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ord.  The use of
22dd0 20 52 45 43 55 52 53 49 56 45 20 64 6f 65 73 20   RECURSIVE does 
22de0 6e 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d 6f 6e  not force.common
22df0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
22e00 6e 73 20 74 6f 20 62 65 20 72 65 63 75 72 73 69  ns to be recursi
22e10 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72  ve...<tcl>.hd_fr
22e20 61 67 6d 65 6e 74 20 72 65 63 75 72 73 69 76 65  agment recursive
22e30 63 74 65 20 7b 72 65 63 75 72 73 69 76 65 20 63  cte {recursive c
22e40 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
22e50 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65 63 75  essions} \.{recu
22e60 72 73 69 76 65 20 71 75 65 72 79 7d 0a 3c 2f 74  rsive query}.</t
22e70 63 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73 69 76  cl>.<h3>Recursiv
22e80 65 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45  e Common Table E
22e90 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a  xpressions</h3>.
22ea0 0a 3c 70 3e 41 20 72 65 63 75 72 73 69 76 65 20  .<p>A recursive 
22eb0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
22ec0 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75  ression can be u
22ed0 73 65 64 20 74 6f 20 77 72 69 74 65 20 61 20 71  sed to write a q
22ee0 75 65 72 79 20 74 68 61 74 0a 77 61 6c 6b 73 20  uery that.walks 
22ef0 61 20 74 72 65 65 20 6f 72 20 67 72 61 70 68 2e  a tree or graph.
22f00 20 20 41 20 72 65 63 75 72 73 69 76 65 20 63 6f    A recursive co
22f10 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
22f20 73 73 69 6f 6e 20 68 61 73 20 74 68 65 20 73 61  ssion has the sa
22f30 6d 65 0a 62 61 73 69 63 20 73 79 6e 74 61 78 20  me.basic syntax 
22f40 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 63  as an ordinary c
22f50 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
22f60 65 73 73 69 6f 6e 2c 20 62 75 74 20 77 69 74 68  ession, but with
22f70 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 61   the following.a
22f80 64 64 69 74 69 6f 6e 61 6c 20 66 65 61 74 75 72  dditional featur
22f90 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54  es:..<ol>.<li> T
22fa0 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74  he "[select-stmt
22fb0 5d 22 0a 20 20 20 20 20 6d 75 73 74 20 62 65 20  ]".     must be 
22fc0 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  a [compound sele
22fd0 63 74 5d 20 77 68 65 72 65 20 74 68 65 20 72 69  ct] where the ri
22fe0 67 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70 6f 75  ght-most [compou
22ff0 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 20 69 73 0a  nd-operator] is.
23000 20 20 20 20 20 65 69 74 68 65 72 20 55 4e 49 4f       either UNIO
23010 4e 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e 0a  N or UNION ALL..
23020 3c 6c 69 3e 20 54 68 65 20 74 61 62 6c 65 20 6e  <li> The table n
23030 61 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65 66 74  amed on the left
23040 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68  -hand side of th
23050 65 20 41 53 20 6b 65 79 77 6f 72 64 20 6d 75 73  e AS keyword mus
23060 74 20 61 70 70 65 61 72 0a 20 20 20 20 20 65 78  t appear.     ex
23070 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68  actly once in th
23080 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
23090 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20   the right-most 
230a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
230b0 0a 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6d  .     of the com
230c0 70 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20 61 6e  pound select, an
230d0 64 20 6e 6f 77 68 65 72 65 20 65 6c 73 65 2e 0a  d nowhere else..
230e0 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70 75 74  </ol>..<p>To put
230f0 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61 79 2c   it another way,
23100 20 61 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d   a recursive com
23110 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
23120 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b 20 6c  sion must.look l
23130 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ike the followin
23140 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72 73 69  g:..<tcl>Recursi
23150 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
23160 72 65 63 75 72 73 69 76 65 2d 63 74 65 3c 2f 74  recursive-cte</t
23170 63 6c 3e 0a 0a 3c 70 3e 57 65 20 72 65 66 65 72  cl>..<p>We refer
23180 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6e 61   to the table na
23190 6d 65 64 20 62 79 20 74 68 65 20 63 74 65 2d 74  med by the cte-t
231a0 61 62 6c 65 2d 6e 61 6d 65 20 69 6e 20 61 20 72  able-name in a r
231b0 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d 6f 6e 20  ecursive.common 
231c0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
231d0 20 61 73 20 74 68 65 20 22 72 65 63 75 72 73 69   as the "recursi
231e0 76 65 20 74 61 62 6c 65 22 2e 0a 49 6e 20 74 68  ve table"..In th
231f0 65 20 72 65 63 75 72 73 69 76 65 2d 63 74 65 20  e recursive-cte 
23200 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d 20 61  bubble diagram a
23210 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75 72 73  bove, the recurs
23220 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74 20 61  ive.table must a
23230 70 70 65 61 72 20 65 78 61 63 74 6c 79 20 6f 6e  ppear exactly on
23240 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ce in the FROM c
23250 6c 61 75 73 65 20 6f 66 20 74 68 65 20 72 65 63  lause of the rec
23260 75 72 73 69 76 65 2d 73 65 6c 65 63 74 0a 61 6e  ursive-select.an
23270 64 20 6d 75 73 74 20 6e 6f 74 20 61 70 70 65 61  d must not appea
23280 72 20 61 6e 79 77 68 65 72 65 20 65 6c 73 65 20  r anywhere else 
23290 69 6e 20 65 69 74 68 65 72 20 74 68 65 20 69 6e  in either the in
232a0 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 6f 72 20  itial-select or 
232b0 74 68 65 0a 72 65 63 75 72 73 69 76 65 2d 73 65  the.recursive-se
232c0 6c 65 63 74 2c 20 69 6e 63 6c 75 64 69 6e 67 20  lect, including 
232d0 73 75 62 71 75 65 72 69 65 73 2e 20 20 54 68 65  subqueries.  The
232e0 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20   initial-select 
232f0 6d 61 79 20 62 65 0a 61 20 5b 63 6f 6d 70 6f 75  may be.a [compou
23300 6e 64 20 73 65 6c 65 63 74 5d 2c 20 62 75 74 20  nd select], but 
23310 69 74 20 6d 61 79 20 6e 6f 74 20 69 6e 63 6c 75  it may not inclu
23320 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20  de an ORDER BY, 
23330 4c 49 4d 49 54 2c 20 6f 72 20 4f 46 46 53 45 54  LIMIT, or OFFSET
23340 2e 0a 54 68 65 20 72 65 63 75 72 73 69 76 65 2d  ..The recursive-
23350 73 65 6c 65 63 74 20 6d 75 73 74 20 62 65 20 61  select must be a
23360 20 73 69 6d 70 6c 65 20 73 65 6c 65 63 74 2c 20   simple select, 
23370 6e 6f 74 20 61 20 63 6f 6d 70 6f 75 6e 64 2e 20  not a compound. 
23380 20 54 68 65 0a 72 65 63 75 72 73 69 76 65 2d 73   The.recursive-s
23390 65 6c 65 63 74 20 69 73 20 61 6c 6c 6f 77 65 64  elect is allowed
233a0 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f   to include an O
233b0 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20  RDER BY, LIMIT, 
233c0 61 6e 64 2f 6f 72 20 4f 46 46 53 45 54 2e 0a 0a  and/or OFFSET...
233d0 3c 70 3e 54 68 65 20 62 61 73 69 63 20 61 6c 67  <p>The basic alg
233e0 6f 72 69 74 68 6d 20 66 6f 72 20 63 6f 6d 70 75  orithm for compu
233f0 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
23400 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76   of the recursiv
23410 65 20 74 61 62 6c 65 0a 69 73 20 61 73 20 66 6f  e table.is as fo
23420 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  llows:..<ol>.<li
23430 3e 20 52 75 6e 20 74 68 65 20 69 6e 69 74 69 61  > Run the initia
23440 6c 2d 73 65 6c 65 63 74 20 61 6e 64 20 61 64 64  l-select and add
23450 20 74 68 65 20 72 65 73 75 6c 74 73 20 74 6f 20   the results to 
23460 61 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 57 68  a queue..<li> Wh
23470 69 6c 65 20 74 68 65 20 71 75 65 75 65 20 69 73  ile the queue is
23480 20 6e 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f 6c 20   not empty:.<ol 
23490 74 79 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e 20 45  type="a">.<li> E
234a0 78 74 72 61 63 74 20 61 20 73 69 6e 67 6c 65 20  xtract a single 
234b0 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 71 75 65  row from the que
234c0 75 65 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72 74 20  ue..<li> Insert 
234d0 74 68 61 74 20 73 69 6e 67 6c 65 20 72 6f 77 20  that single row 
234e0 69 6e 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  into the recursi
234f0 76 65 20 74 61 62 6c 65 0a 3c 6c 69 3e 20 50 72  ve table.<li> Pr
23500 65 74 65 6e 64 20 74 68 61 74 20 74 68 65 20 73  etend that the s
23510 69 6e 67 6c 65 20 72 6f 77 20 6a 75 73 74 20 65  ingle row just e
23520 78 74 72 61 63 74 65 64 20 69 73 20 74 68 65 20  xtracted is the 
23530 6f 6e 6c 79 0a 20 20 20 20 20 72 6f 77 20 69 6e  only.     row in
23540 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
23550 61 62 6c 65 20 61 6e 64 20 72 75 6e 20 74 68 65  able and run the
23560 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
23570 74 2c 0a 20 20 20 20 20 61 64 64 69 6e 67 20 61  t,.     adding a
23580 6c 6c 20 72 65 73 75 6c 74 73 20 74 6f 20 74 68  ll results to th
23590 65 20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a 3c  e queue..</ol>.<
235a0 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62 61 73  /ol>..<p>The bas
235b0 69 63 20 70 72 6f 63 65 64 75 72 65 20 61 62 6f  ic procedure abo
235c0 76 65 20 6d 61 79 20 6d 6f 64 69 66 69 65 64 20  ve may modified 
235d0 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  by the following
235e0 20 61 64 64 69 74 69 6f 6e 61 6c 20 72 75 6c 65   additional rule
235f0 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  s:..<ul>.<li><p>
23600 0a 20 20 49 66 20 61 20 55 4e 49 4f 4e 20 6f 70  .  If a UNION op
23610 65 72 61 74 6f 72 20 63 6f 6e 6e 65 63 74 73 20  erator connects 
23620 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  the initial-sele
23630 63 74 20 77 69 74 68 20 74 68 65 0a 20 20 72 65  ct with the.  re
23640 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20  cursive-select, 
23650 74 68 65 6e 20 6f 6e 6c 79 20 61 64 64 20 72 6f  then only add ro
23660 77 73 20 74 6f 20 74 68 65 20 71 75 65 75 65 20  ws to the queue 
23670 69 66 20 6e 6f 20 69 64 65 6e 74 69 63 61 6c 20  if no identical 
23680 72 6f 77 20 68 61 73 0a 20 20 62 65 65 6e 20 70  row has.  been p
23690 72 65 76 69 6f 75 73 6c 79 20 61 64 64 65 64 20  reviously added 
236a0 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 52  to the queue.  R
236b0 65 70 65 61 74 65 64 20 72 6f 77 73 20 61 72 65  epeated rows are
236c0 20 64 69 73 63 61 72 64 65 64 20 62 65 66 6f 72   discarded befor
236d0 65 20 62 65 69 6e 67 0a 20 20 61 64 64 65 64 20  e being.  added 
236e0 74 6f 20 74 68 65 20 71 75 65 75 65 20 65 76 65  to the queue eve
236f0 6e 20 69 66 20 74 68 65 20 72 65 70 65 61 74 65  n if the repeate
23700 64 20 72 6f 77 73 20 68 61 76 65 20 61 6c 72 65  d rows have alre
23710 61 64 79 20 62 65 65 6e 20 65 78 74 72 61 63 74  ady been extract
23720 65 64 0a 20 20 66 72 6f 6d 20 74 68 65 20 71 75  ed.  from the qu
23730 65 75 65 20 62 79 20 74 68 65 20 72 65 63 75 72  eue by the recur
23740 73 69 6f 6e 20 73 74 65 70 2e 20 20 49 66 20 74  sion step.  If t
23750 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 20 55  he operator is U
23760 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74 68 65 6e  NION ALL,.  then
23770 20 61 6c 6c 20 72 6f 77 73 20 67 65 6e 65 72 61   all rows genera
23780 74 65 64 20 62 79 20 62 6f 74 68 20 74 68 65 20  ted by both the 
23790 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 61  initial-select a
237a0 6e 64 20 74 68 65 0a 20 20 72 65 63 75 72 73 69  nd the.  recursi
237b0 76 65 2d 73 65 6c 65 63 74 20 61 72 65 20 61 6c  ve-select are al
237c0 77 61 79 73 20 61 64 64 65 64 20 74 6f 20 74 68  ways added to th
237d0 65 20 71 75 65 75 65 20 65 76 65 6e 20 69 66 20  e queue even if 
237e0 74 68 65 79 20 61 72 65 20 72 65 70 65 61 74 73  they are repeats
237f0 2e 0a 20 20 57 68 65 6e 20 64 65 74 65 72 6d 69  ..  When determi
23800 6e 69 6e 67 20 69 66 20 61 20 72 6f 77 20 69 73  ning if a row is
23810 20 72 65 70 65 61 74 65 64 2c 20 4e 55 4c 4c 20   repeated, NULL 
23820 76 61 6c 75 65 73 20 63 6f 6d 70 61 72 65 0a 20  values compare. 
23830 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e   equal to one an
23840 6f 74 68 65 72 20 61 6e 64 20 6e 6f 74 20 65 71  other and not eq
23850 75 61 6c 20 74 6f 20 61 6e 79 20 6f 74 68 65 72  ual to any other
23860 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a   value..<li><p>.
23870 20 20 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75    The LIMIT clau
23880 73 65 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20  se, if present, 
23890 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6d  determines the m
238a0 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
238b0 20 72 6f 77 73 20 74 68 61 74 0a 20 20 77 69 6c   rows that.  wil
238c0 6c 20 65 76 65 72 20 62 65 20 61 64 64 65 64 20  l ever be added 
238d0 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65  to the recursive
238e0 20 74 61 62 6c 65 20 69 6e 20 73 74 65 70 20 32   table in step 2
238f0 62 2e 0a 20 20 4f 6e 63 65 20 74 68 65 20 6c 69  b..  Once the li
23900 6d 69 74 20 69 73 20 72 65 61 63 68 65 64 2c 20  mit is reached, 
23910 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74  the recursion st
23920 6f 70 73 2e 0a 20 20 41 20 6c 69 6d 69 74 20 6f  ops..  A limit o
23930 66 20 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 61  f zero means tha
23940 74 20 6e 6f 20 72 6f 77 73 20 61 72 65 20 65 76  t no rows are ev
23950 65 72 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a  er added to the.
23960 20 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c    recursive tabl
23970 65 2c 20 61 6e 64 20 61 20 6e 65 67 61 74 69 76  e, and a negativ
23980 65 20 6c 69 6d 69 74 20 6d 65 61 6e 73 20 61 6e  e limit means an
23990 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75 6d 62 65   unlimited numbe
239a0 72 20 6f 66 20 72 6f 77 73 0a 20 20 6d 61 79 20  r of rows.  may 
239b0 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  be added to the 
239c0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e  recursive table.
239d0 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4f  .<li><p>.  The O
239e0 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 69 66  FFSET clause, if
239f0 20 69 74 20 69 73 20 70 72 65 73 65 6e 74 20 61   it is present a
23a00 6e 64 20 68 61 73 20 61 20 70 6f 73 69 74 69 76  nd has a positiv
23a10 65 20 76 61 6c 75 65 20 4e 2c 20 70 72 65 76 65  e value N, preve
23a20 6e 74 73 20 74 68 65 0a 20 20 66 69 72 73 74 20  nts the.  first 
23a30 4e 20 72 6f 77 73 20 66 72 6f 6d 20 62 65 69 6e  N rows from bein
23a40 67 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72  g added to the r
23a50 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a  ecursive table..
23a60 20 20 54 68 65 20 66 69 72 73 74 20 4e 20 72 6f    The first N ro
23a70 77 73 20 61 72 65 20 73 74 69 6c 6c 20 70 72 6f  ws are still pro
23a80 63 65 73 73 65 64 20 62 79 20 74 68 65 20 72 65  cessed by the re
23a90 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3b 20  cursive-select; 
23aa0 74 68 65 79 0a 20 20 6a 75 73 74 20 61 72 65 20  they.  just are 
23ab0 6e 6f 74 20 61 64 64 65 64 20 74 6f 20 74 68 65  not added to the
23ac0 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
23ad0 2e 20 20 52 6f 77 73 20 61 72 65 20 6e 6f 74 20  .  Rows are not 
23ae0 63 6f 75 6e 74 65 64 20 74 6f 77 61 72 64 0a 20  counted toward. 
23af0 20 66 75 6c 66 69 6c 6c 69 6e 67 20 74 68 65 20   fulfilling the 
23b00 4c 49 4d 49 54 20 75 6e 74 69 6c 20 61 6c 6c 20  LIMIT until all 
23b10 4f 46 46 53 45 54 20 72 6f 77 73 20 68 61 76 65  OFFSET rows have
23b20 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e 0a 3c   been skipped..<
23b30 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 6e 20 4f  li><p>.  If an O
23b40 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
23b50 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20 64 65  s present, it de
23b60 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6f 72 64  termines the ord
23b70 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
23b80 0a 20 20 61 72 65 20 65 78 74 72 61 63 74 65 64  .  are extracted
23b90 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20   from the queue 
23ba0 69 6e 20 73 74 65 70 20 32 61 2e 20 20 49 66 20  in step 2a.  If 
23bb0 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 52 44 45  there is no ORDE
23bc0 52 20 42 59 20 63 6c 61 75 73 65 2c 0a 20 20 74  R BY clause,.  t
23bd0 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 69 6e  hen the order in
23be0 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
23bf0 65 78 74 72 61 63 74 65 64 20 69 73 20 75 6e 64  extracted is und
23c00 65 66 69 6e 65 64 2e 20 20 28 49 6e 20 74 68 65  efined.  (In the
23c10 20 63 75 72 72 65 6e 74 0a 20 20 69 6d 70 6c 65   current.  imple
23c20 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 71  mentation, the q
23c30 75 65 75 65 20 62 65 63 6f 6d 65 73 20 61 20 46  ueue becomes a F
23c40 49 46 4f 20 69 66 20 74 68 65 20 4f 52 44 45 52  IFO if the ORDER
23c50 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f 6d   BY clause is om
23c60 69 74 74 65 64 2c 0a 20 20 62 75 74 20 61 70 70  itted,.  but app
23c70 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64  lications should
23c80 20 6e 6f 74 20 64 65 70 65 6e 64 20 6f 6e 20 74   not depend on t
23c90 68 61 74 20 66 61 63 74 20 73 69 6e 63 65 20 69  hat fact since i
23ca0 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65 2e 29  t might change.)
23cb0 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ul>..<tcl>hd_
23cc0 66 72 61 67 6d 65 6e 74 20 72 63 65 78 31 3c 2f  fragment rcex1</
23cd0 74 63 6c 3e 0a 3c 68 34 3e 52 65 63 75 72 73 69  tcl>.<h4>Recursi
23ce0 76 65 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65  ve Query Example
23cf0 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66  s</h4>..<p>The f
23d00 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20 72  ollowing query r
23d10 65 74 75 72 6e 73 20 61 6c 6c 20 69 6e 74 65 67  eturns all integ
23d20 65 72 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e  ers between 1 an
23d30 64 20 31 30 30 30 30 30 30 3a 0a 0a 3c 62 6c 6f  d 1000000:..<blo
23d40 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
23d50 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 63  TH RECURSIVE.  c
23d60 6e 74 28 78 29 20 41 53 20 28 56 41 4c 55 45 53  nt(x) AS (VALUES
23d70 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  (1) UNION ALL SE
23d80 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e  LECT x+1 FROM cn
23d90 74 20 57 48 45 52 45 20 78 3c 31 30 30 30 30 30  t WHERE x<100000
23da0 30 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  0).SELECT x FROM
23db0 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c   cnt;.</pre></bl
23dc0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f  ockquote>..<p>Co
23dd0 6e 73 69 64 65 72 20 68 6f 77 20 74 68 69 73 20  nsider how this 
23de0 71 75 65 72 79 20 77 6f 72 6b 73 2e 20 20 54 68  query works.  Th
23df0 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  e initial-select
23e00 0a 72 75 6e 73 20 66 69 72 73 74 20 61 6e 64 20  .runs first and 
23e10 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65  returns a single
23e20 20 72 6f 77 0a 77 69 74 68 20 61 20 73 69 6e 67   row.with a sing
23e30 6c 65 20 63 6f 6c 75 6d 6e 20 22 31 22 2e 20 20  le column "1".  
23e40 54 68 69 73 20 6f 6e 65 20 72 6f 77 20 69 73 20  This one row is 
23e50 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65  added to the que
23e60 75 65 2e 20 20 49 6e 0a 73 74 65 70 20 32 61 2c  ue.  In.step 2a,
23e70 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73   that one row is
23e80 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
23e90 74 68 65 20 71 75 65 75 65 20 61 6e 64 20 61 64  the queue and ad
23ea0 64 65 64 20 74 6f 20 22 63 6e 74 22 2e 0a 54 68  ded to "cnt"..Th
23eb0 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  en the recursive
23ec0 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e 20 69  -select is run i
23ed0 6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77 69 74  n accordance wit
23ee0 68 20 73 74 65 70 20 32 63 20 67 65 6e 65 72 61  h step 2c genera
23ef0 74 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20 6e 65  ting.a single ne
23f00 77 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65  w row with value
23f10 20 22 32 22 20 74 6f 20 61 64 64 20 74 6f 20 74   "2" to add to t
23f20 68 65 20 71 75 65 75 65 2e 20 20 54 68 65 20 71  he queue.  The q
23f30 75 65 75 65 20 73 74 69 6c 6c 0a 68 61 73 20 6f  ueue still.has o
23f40 6e 65 20 72 6f 77 2c 20 73 6f 20 73 74 65 70 20  ne row, so step 
23f50 32 20 72 65 70 65 61 74 73 2e 20 20 54 68 65 20  2 repeats.  The 
23f60 22 32 22 20 72 6f 77 20 69 73 20 65 78 74 72 61  "2" row is extra
23f70 63 74 65 64 20 61 6e 64 20 61 64 64 65 64 20 74  cted and added t
23f80 6f 20 74 68 65 0a 72 65 63 75 72 73 69 76 65 20  o the.recursive 
23f90 74 61 62 6c 65 20 62 79 20 73 74 65 70 73 20 32  table by steps 2
23fa0 61 20 61 6e 64 20 32 62 2e 20 20 54 68 65 6e 20  a and 2b.  Then 
23fb0 74 68 65 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69  the row containi
23fc0 6e 67 20 32 20 69 73 20 75 73 65 64 20 0a 61 73  ng 2 is used .as
23fd0 20 69 66 20 69 74 20 77 65 72 65 20 74 68 65 20   if it were the 
23fe0 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65 6e 74  complete content
23ff0 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76   of the recursiv
24000 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
24010 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  .recursive-selec
24020 74 20 69 73 20 72 75 6e 20 61 67 61 69 6e 2c 20  t is run again, 
24030 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 72  resulting in a r
24040 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20 22 33  ow with value "3
24050 22 20 62 65 69 6e 67 20 61 64 64 65 64 0a 74 6f  " being added.to
24060 20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 69   the queue.  Thi
24070 73 20 72 65 70 65 61 74 73 20 39 39 39 39 39 39  s repeats 999999
24080 20 74 69 6d 65 73 20 75 6e 74 69 6c 20 66 69 6e   times until fin
24090 61 6c 6c 79 20 61 74 20 73 74 65 70 20 32 61 20  ally at step 2a 
240a0 74 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65 20 6f  the.only value o
240b0 6e 20 74 68 65 20 71 75 65 75 65 20 69 73 20 61  n the queue is a
240c0 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20   row containing 
240d0 31 30 30 30 30 30 30 2e 20 20 54 68 61 74 20 72  1000000.  That r
240e0 6f 77 20 69 73 0a 65 78 74 72 61 63 74 65 64 20  ow is.extracted 
240f0 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65  and added to the
24100 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
24110 2e 20 20 42 75 74 20 74 68 69 73 20 74 69 6d 65  .  But this time
24120 2c 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  , the.WHERE clau
24130 73 65 20 63 61 75 73 65 73 20 74 68 65 20 72 65  se causes the re
24140 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74  cursive-select t
24150 6f 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f 77 73  o return no rows
24160 2c 20 73 6f 20 74 68 65 0a 71 75 65 75 65 20 72  , so the.queue r
24170 65 6d 61 69 6e 73 20 65 6d 70 74 79 20 61 6e 64  emains empty and
24180 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73   the recursion s
24190 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70 74  tops...<p><b>Opt
241a0 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65 3a 3c  imization note:<
241b0 2f 62 3e 0a 49 6e 20 74 68 65 20 64 69 73 63 75  /b>.In the discu
241c0 73 73 69 6f 6e 20 61 62 6f 76 65 2c 20 73 74 61  ssion above, sta
241d0 74 65 6d 65 6e 74 73 20 6c 69 6b 65 20 22 69 6e  tements like "in
241e0 73 65 72 74 20 74 68 65 20 72 6f 77 20 69 6e 74  sert the row int
241f0 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o.the recursive 
24200 74 61 62 6c 65 22 20 73 68 6f 75 6c 64 20 62 65  table" should be
24210 20 75 6e 64 65 72 73 74 6f 6f 64 20 63 6f 6e 63   understood conc
24220 65 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20 6c 69  eptually, not li
24230 74 65 72 61 6c 6c 79 2e 0a 49 74 20 73 6f 75 6e  terally..It soun
24240 64 73 20 61 73 20 69 66 20 53 51 4c 69 74 65 20  ds as if SQLite 
24250 69 73 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20  is accumulating 
24260 61 20 68 75 67 65 20 74 61 62 6c 65 0a 63 6f 6e  a huge table.con
24270 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c 6c  taining one mill
24280 69 6f 6e 20 72 6f 77 73 2c 20 74 68 65 6e 20 67  ion rows, then g
24290 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64 20 73 63  oing back and sc
242a0 61 6e 6e 69 6e 67 20 74 68 61 74 20 74 61 62 6c  anning that tabl
242b0 65 0a 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f  e.from top to bo
242c0 74 74 6f 6d 20 74 6f 20 67 65 6e 65 72 61 74 65  ttom to generate
242d0 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 57 68   the result.  Wh
242e0 61 74 20 72 65 61 6c 6c 79 20 68 61 70 70 65 6e  at really happen
242f0 73 0a 69 73 20 74 68 61 74 20 74 68 65 20 71 75  s.is that the qu
24300 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 73 65  ery optimizer se
24310 65 73 20 74 68 61 74 20 76 61 6c 75 65 73 20 69  es that values i
24320 6e 20 74 68 65 0a 22 63 6e 74 22 20 72 65 63 75  n the."cnt" recu
24330 72 73 69 76 65 20 74 61 62 6c 65 20 61 72 65 20  rsive table are 
24340 6f 6e 6c 79 20 75 73 65 64 20 6f 6e 63 65 2e 20  only used once. 
24350 20 53 6f 20 61 73 20 65 61 63 68 20 72 6f 77 20   So as each row 
24360 69 73 20 61 64 64 65 64 20 74 6f 0a 74 68 65 20  is added to.the 
24370 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2c  recursive table,
24380 20 74 68 61 74 20 72 6f 77 20 69 73 20 69 6d 6d   that row is imm
24390 65 64 69 61 74 65 6c 79 20 72 65 74 75 72 6e 65  ediately returne
243a0 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
243b0 20 74 68 65 20 6d 61 69 6e 0a 53 45 4c 45 43 54   the main.SELECT
243c0 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74   statement and t
243d0 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e 20 20  hen discarded.  
243e0 53 51 4c 69 74 65 20 64 6f 65 73 20 3c 65 6d 3e  SQLite does <em>
243f0 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d 75 6c  not</em> accumul
24400 61 74 65 0a 61 20 74 65 6d 70 6f 72 61 72 79 20  ate.a temporary 
24410 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  table containing
24420 20 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2e   a million rows.
24430 20 20 56 65 72 79 20 6c 69 74 74 6c 65 20 6d 65    Very little me
24440 6d 6f 72 79 20 69 73 0a 6e 65 65 64 65 64 20 74  mory is.needed t
24450 6f 20 72 75 6e 20 74 68 65 20 61 62 6f 76 65 20  o run the above 
24460 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76 65  example.  Howeve
24470 72 2c 20 69 66 20 74 68 65 20 65 78 61 6d 70 6c  r, if the exampl
24480 65 20 68 61 64 20 75 73 65 64 0a 55 4e 49 4f 4e  e had used.UNION
24490 20 69 6e 73 74 65 61 64 20 6f 66 20 55 4e 49 4f   instead of UNIO
244a0 4e 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51 4c 69  N ALL, then SQLi
244b0 74 65 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61  te would have ha
244c0 64 20 74 6f 20 6b 65 65 70 20 61 72 6f 75 6e 64  d to keep around
244d0 0a 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c 79 20  .all previously 
244e0 67 65 6e 65 72 61 74 65 64 20 63 6f 6e 74 65 6e  generated conten
244f0 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 68  t in order to ch
24500 65 63 6b 20 66 6f 72 20 64 75 70 6c 69 63 61 74  eck for duplicat
24510 65 73 2e 0a 46 6f 72 20 74 68 69 73 20 72 65 61  es..For this rea
24520 73 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73  son, programmers
24530 20 73 68 6f 75 6c 64 20 73 74 72 69 76 65 20 74   should strive t
24540 6f 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c 4c 20  o use UNION ALL 
24550 69 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49 4f 4e  instead.of UNION
24560 20 77 68 65 6e 20 66 65 61 73 69 62 6c 65 2e 0a   when feasible..
24570 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20 76 61  .<p>Here is a va
24580 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 70  riation on the p
24590 72 65 76 69 6f 75 73 20 65 78 61 6d 70 6c 65 3a  revious example:
245a0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
245b0 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
245c0 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28  VE.  cnt(x) AS (
245d0 0a 20 20 20 20 20 53 45 4c 45 43 54 20 31 0a 20  .     SELECT 1. 
245e0 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
245f0 20 20 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52     SELECT x+1 FR
24600 4f 4d 20 63 6e 74 0a 20 20 20 20 20 20 4c 49 4d  OM cnt.      LIM
24610 49 54 20 31 30 30 30 30 30 30 0a 20 20 29 0a 53  IT 1000000.  ).S
24620 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 6e 74  ELECT x FROM cnt
24630 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
24640 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  uote>..<p>There 
24650 61 72 65 20 74 77 6f 20 64 69 66 66 65 72 65 6e  are two differen
24660 63 65 73 20 69 6e 20 74 68 69 73 20 76 61 72 69  ces in this vari
24670 61 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e 69 74  ation.  The init
24680 69 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a 22 53  ial-select is."S
24690 45 4c 45 43 54 20 31 22 20 69 6e 73 74 65 61 64  ELECT 1" instead
246a0 20 6f 66 20 22 56 41 4c 55 45 53 28 31 29 22 2e   of "VALUES(1)".
246b0 20 20 42 75 74 20 74 68 6f 73 65 20 61 72 65 20    But those are 
246c0 6a 75 73 74 20 64 69 66 66 65 72 65 6e 74 0a 73  just different.s
246d0 79 6e 74 61 78 65 73 20 66 6f 72 20 73 61 79 69  yntaxes for sayi
246e0 6e 67 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  ng exactly the s
246f0 61 6d 65 20 74 68 69 6e 67 2e 20 20 54 68 65 20  ame thing.  The 
24700 6f 74 68 65 72 20 63 68 61 6e 67 65 20 69 73 20  other change is 
24710 74 68 61 74 20 74 68 65 0a 72 65 63 75 72 73 69  that the.recursi
24720 6f 6e 20 69 73 20 73 74 6f 70 70 65 64 20 62 79  on is stopped by
24730 20 61 20 4c 49 4d 49 54 20 72 61 74 68 65 72 20   a LIMIT rather 
24740 74 68 61 6e 20 61 20 57 48 45 52 45 20 63 6c 61  than a WHERE cla
24750 75 73 65 2e 20 20 54 68 65 20 75 73 65 20 6f 66  use.  The use of
24760 0a 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74 68 61  .LIMIT means tha
24770 74 20 77 68 65 6e 20 74 68 65 20 6f 6e 65 2d 6d  t when the one-m
24780 69 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69 73 20  illionth row is 
24790 61 64 64 65 64 20 74 6f 20 74 68 65 20 22 63 6e  added to the "cn
247a0 74 22 20 74 61 62 6c 65 0a 28 61 6e 64 20 72 65  t" table.(and re
247b0 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 6d 61  turned by the ma
247c0 69 6e 20 53 45 4c 45 43 54 2c 20 74 68 61 6e 6b  in SELECT, thank
247d0 73 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 6f  s to the query o
247e0 70 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e 20 74  ptimizer).then t
247f0 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f  he recursion sto
24800 70 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72  ps immediately r
24810 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f 77  egardless of how
24820 20 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67 68 74   many rows might
24830 20 62 65 0a 6c 65 66 74 20 69 6e 20 74 68 65 20   be.left in the 
24840 71 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72 65 20  queue.  On more 
24850 63 6f 6d 70 6c 65 78 20 71 75 65 72 69 65 73 2c  complex queries,
24860 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65   it can sometime
24870 73 20 62 65 0a 64 69 66 66 69 63 75 6c 74 20 74  s be.difficult t
24880 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
24890 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 77  e WHERE clause w
248a0 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20 63  ill eventually c
248b0 61 75 73 65 20 74 68 65 0a 71 75 65 75 65 20 74  ause the.queue t
248c0 6f 20 64 72 61 69 6e 20 61 6e 64 20 74 68 65 20  o drain and the 
248d0 72 65 63 75 72 73 69 6f 6e 20 74 6f 20 74 65 72  recursion to ter
248e0 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 74 68 65  minate.  But the
248f0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69   LIMIT clause wi
24900 6c 6c 0a 61 6c 77 61 79 73 20 73 74 6f 70 20 74  ll.always stop t
24910 68 65 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 53  he recursion.  S
24920 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 70 72 61  o it is good pra
24930 63 74 69 63 65 20 74 6f 20 61 6c 77 61 79 73 20  ctice to always 
24940 69 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49 54 20  include a.LIMIT 
24950 63 6c 61 75 73 65 20 61 73 20 61 20 73 61 66 65  clause as a safe
24960 74 79 20 69 66 20 61 6e 20 75 70 70 65 72 20 62  ty if an upper b
24970 6f 75 6e 64 20 6f 6e 20 74 68 65 20 73 69 7a 65  ound on the size
24980 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 6f   of the recursio
24990 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 3c 74  n .is known...<t
249a0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
249b0 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 48  cex2</tcl>.<h4>H
249c0 69 65 72 61 72 63 68 69 63 61 6c 20 51 75 65 72  ierarchical Quer
249d0 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a  y Examples</h4>.
249e0 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 61 20 74  .<p>Consider a t
249f0 61 62 6c 65 20 74 68 61 74 20 64 65 73 63 72 69  able that descri
24a00 62 65 73 20 74 68 65 20 6d 65 6d 62 65 72 73 20  bes the members 
24a10 6f 66 20 61 6e 20 6f 72 67 61 6e 69 7a 61 74 69  of an organizati
24a20 6f 6e 20 61 73 0a 77 65 6c 6c 20 61 73 20 74 68  on as.well as th
24a30 65 20 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d 6d 61  e chain-of-comma
24a40 6e 64 20 77 69 74 68 69 6e 20 74 68 61 74 20 6f  nd within that o
24a50 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a 3c 62  rganization:..<b
24a60 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
24a70 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 67  CREATE TABLE org
24a80 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52  (.  name TEXT PR
24a90 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73  IMARY KEY,.  bos
24aa0 73 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45  s TEXT REFERENCE
24ab0 53 20 6f 72 67 2c 0a 20 20 68 65 69 67 68 74 20  S org,.  height 
24ac0 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74 68 65 72 20  INT,.  -- other 
24ad0 63 6f 6e 74 65 6e 74 20 6f 6d 69 74 74 65 64 0a  content omitted.
24ae0 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
24af0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65 72 79  quote>..<p>Every
24b00 20 6d 65 6d 62 65 72 20 69 6e 20 74 68 65 20 6f   member in the o
24b10 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20  rganization has 
24b20 61 20 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f 73 74  a name, and most
24b30 20 6d 65 6d 62 65 72 73 20 68 61 76 65 0a 61 20   members have.a 
24b40 73 69 6e 67 6c 65 20 62 6f 73 73 2e 20 20 28 54  single boss.  (T
24b50 68 65 20 68 65 61 64 20 6f 66 20 74 68 65 20 77  he head of the w
24b60 68 6f 6c 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f  hole organizatio
24b70 6e 20 68 61 73 20 61 20 4e 55 4c 4c 0a 22 62 6f  n has a NULL."bo
24b80 73 73 22 20 66 69 65 6c 64 2e 29 20 54 68 65 20  ss" field.) The 
24b90 72 6f 77 73 20 6f 66 20 74 68 65 20 22 6f 72 67  rows of the "org
24ba0 22 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 74  " table form a t
24bb0 72 65 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73  ree...<p>Here is
24bc0 20 61 20 71 75 65 72 79 20 74 68 61 74 20 63 6f   a query that co
24bd0 6d 70 75 74 65 73 20 74 68 65 20 61 76 65 72 61  mputes the avera
24be0 67 65 20 68 65 69 67 68 74 20 6f 76 65 72 20 65  ge height over e
24bf0 76 65 72 79 6f 6e 65 0a 69 6e 20 41 6c 69 63 65  veryone.in Alice
24c00 27 73 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 2c  's organization,
24c10 20 69 6e 63 6c 75 64 69 6e 67 20 41 6c 69 63 65   including Alice
24c20 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
24c30 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
24c40 49 56 45 0a 20 20 77 6f 72 6b 73 5f 66 6f 72 5f  IVE.  works_for_
24c50 61 6c 69 63 65 28 6e 29 20 41 53 20 28 0a 20 20  alice(n) AS (.  
24c60 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27    VALUES('Alice'
24c70 29 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20  ).    UNION.    
24c80 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
24c90 20 6f 72 67 2c 20 77 6f 72 6b 73 5f 66 6f 72 5f   org, works_for_
24ca0 61 6c 69 63 65 0a 20 20 20 20 20 57 48 45 52 45  alice.     WHERE
24cb0 20 6f 72 67 2e 62 6f 73 73 3d 77 6f 72 6b 73 5f   org.boss=works_
24cc0 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a 20 20 29 0a  for_alice.n.  ).
24cd0 53 45 4c 45 43 54 20 61 76 67 28 68 65 69 67 68  SELECT avg(heigh
24ce0 74 29 20 46 52 4f 4d 20 6f 72 67 0a 20 57 48 45  t) FROM org. WHE
24cf0 52 45 20 6f 72 67 2e 6e 61 6d 65 20 49 4e 20 77  RE org.name IN w
24d00 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 3b 0a  orks_for_alice;.
24d10 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
24d20 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65 78 74  te>..<p>The next
24d30 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20 74 77   example uses tw
24d40 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  o .common table 
24d50 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
24d60 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
24d70 75 73 65 2e 20 20 0a 54 68 65 20 66 6f 6c 6c 6f  use.  .The follo
24d80 77 69 6e 67 20 74 61 62 6c 65 20 72 65 63 6f 72  wing table recor
24d90 64 73 20 61 20 66 61 6d 69 6c 79 20 74 72 65 65  ds a family tree
24da0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
24db0 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
24dc0 45 20 66 61 6d 69 6c 79 28 0a 20 20 6e 61 6d 65  E family(.  name
24dd0 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45   TEXT PRIMARY KE
24de0 59 2c 0a 20 20 6d 6f 6d 20 54 45 58 54 20 52 45  Y,.  mom TEXT RE
24df0 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c  FERENCES family,
24e00 0a 20 20 64 61 64 20 54 45 58 54 20 52 45 46 45  .  dad TEXT REFE
24e10 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20  RENCES family,. 
24e20 20 62 6f 72 6e 20 44 41 54 45 54 49 4d 45 2c 0a   born DATETIME,.
24e30 20 20 64 69 65 64 20 44 41 54 45 54 49 4d 45 2c    died DATETIME,
24e40 20 2d 2d 20 4e 55 4c 4c 20 69 66 20 73 74 69 6c   -- NULL if stil
24e50 6c 20 61 6c 69 76 65 0a 20 20 2d 2d 20 6f 74 68  l alive.  -- oth
24e60 65 72 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a 3c 2f  er content.);.</
24e70 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
24e80 3e 0a 0a 3c 70 3e 54 68 65 20 22 66 61 6d 69 6c  >..<p>The "famil
24e90 79 22 20 74 61 62 6c 65 20 69 73 20 73 69 6d 69  y" table is simi
24ea0 6c 61 72 20 74 6f 20 74 68 65 20 65 61 72 6c 69  lar to the earli
24eb0 65 72 20 22 6f 72 67 22 20 74 61 62 6c 65 20 65  er "org" table e
24ec0 78 63 65 70 74 20 74 68 61 74 20 0a 6e 6f 77 20  xcept that .now 
24ed0 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 70 61  there are two pa
24ee0 72 65 6e 74 73 20 74 6f 20 65 61 63 68 20 6d 65  rents to each me
24ef0 6d 62 65 72 2e 0a 57 65 20 77 61 6e 74 20 74 6f  mber..We want to
24f00 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69 76 69 6e 67   know all living
24f10 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20 41 6c   ancestors of Al
24f20 69 63 65 2c 20 66 72 6f 6d 20 6f 6c 64 65 73 74  ice, from oldest
24f30 20 74 6f 20 79 6f 75 6e 67 65 73 74 2e 0a 41 6e   to youngest..An
24f40 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e   ordinary common
24f50 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
24f60 6e 2c 20 22 70 61 72 65 6e 74 5f 6f 66 22 2c 20  n, "parent_of", 
24f70 69 73 20 64 65 66 69 6e 65 64 20 66 69 72 73 74  is defined first
24f80 2e 20 20 54 68 61 74 0a 6f 72 64 69 6e 61 72 79  .  That.ordinary
24f90 20 43 54 45 20 69 73 20 61 20 76 69 65 77 20 74   CTE is a view t
24fa0 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  hat can be used 
24fb0 74 6f 20 66 69 6e 64 20 61 6c 6c 20 70 61 72 65  to find all pare
24fc0 6e 74 73 20 6f 66 20 61 6e 79 0a 69 6e 64 69 76  nts of any.indiv
24fd0 69 64 75 61 6c 2e 20 20 54 68 61 74 20 6f 72 64  idual.  That ord
24fe0 69 6e 61 72 79 20 43 54 45 20 69 73 20 74 68 65  inary CTE is the
24ff0 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20 22 61  n used in the "a
25000 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
25010 22 0a 72 65 63 75 72 73 69 76 65 20 43 54 45 2e  ".recursive CTE.
25020 20 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20    The recursive 
25030 43 54 45 20 69 73 20 74 68 65 6e 20 75 73 65 64  CTE is then used
25040 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20 71 75   in the final qu
25050 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ery:..<blockquot
25060 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
25070 55 52 53 49 56 45 0a 20 20 70 61 72 65 6e 74 5f  URSIVE.  parent_
25080 6f 66 28 6e 61 6d 65 2c 20 70 61 72 65 6e 74 29  of(name, parent)
25090 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43 54 20   AS.    (SELECT 
250a0 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20 66  name, mom FROM f
250b0 61 6d 69 6c 79 20 55 4e 49 4f 4e 20 53 45 4c 45  amily UNION SELE
250c0 43 54 20 6e 61 6d 65 2c 20 64 61 64 20 46 52 4f  CT name, dad FRO
250d0 4d 20 66 61 6d 69 6c 79 29 2c 0a 20 20 61 6e 63  M family),.  anc
250e0 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 28 6e  estor_of_alice(n
250f0 61 6d 65 29 20 41 53 0a 20 20 20 20 28 53 45 4c  ame) AS.    (SEL
25100 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f 4d 20  ECT parent FROM 
25110 70 61 72 65 6e 74 5f 6f 66 20 57 48 45 52 45 20  parent_of WHERE 
25120 6e 61 6d 65 3d 27 41 6c 69 63 65 27 0a 20 20 20  name='Alice'.   
25130 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20    UNION ALL.    
25140 20 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46   SELECT parent F
25150 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 4a 4f  ROM parent_of JO
25160 49 4e 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61  IN ancestor_of_a
25170 6c 69 63 65 20 55 53 49 4e 47 28 6e 61 6d 65 29  lice USING(name)
25180 29 0a 53 45 4c 45 43 54 20 66 61 6d 69 6c 79 2e  ).SELECT family.
25190 6e 61 6d 65 20 46 52 4f 4d 20 61 6e 63 65 73 74  name FROM ancest
251a0 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c 20 66 61 6d  or_of_alice, fam
251b0 69 6c 79 0a 20 57 48 45 52 45 20 61 6e 63 65 73  ily. WHERE ances
251c0 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61 6d  tor_of_alice.nam
251d0 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20 20  e=family.name.  
251e0 20 41 4e 44 20 64 69 65 64 20 49 53 20 4e 55 4c   AND died IS NUL
251f0 4c 0a 20 4f 52 44 45 52 20 42 59 20 62 6f 72 6e  L. ORDER BY born
25200 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
25210 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  uote>..<tcl>hd_f
25220 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74  ragment rcex2</t
25230 63 6c 3e 0a 3c 68 34 3e 51 75 65 72 69 65 73 20  cl>.<h4>Queries 
25240 41 67 61 69 6e 73 74 20 41 20 47 72 61 70 68 3c  Against A Graph<
25250 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76 65 72 73 69  /h4>..<p>A versi
25260 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65  on control syste
25270 6d 20 28 56 43 53 29 20 77 69 6c 6c 20 74 79 70  m (VCS) will typ
25280 69 63 61 6c 6c 79 20 73 74 6f 72 65 20 74 68 65  ically store the
25290 20 65 76 6f 6c 76 69 6e 67 0a 76 65 72 73 69 6f   evolving.versio
252a0 6e 73 20 6f 66 20 61 20 70 72 6f 6a 65 63 74 20  ns of a project 
252b0 61 73 20 61 20 64 69 72 65 63 74 65 64 20 61 63  as a directed ac
252c0 79 63 6c 69 63 20 67 72 61 70 68 20 28 44 41 47  yclic graph (DAG
252d0 29 2e 20 20 43 61 6c 6c 20 65 61 63 68 0a 76 65  ).  Call each.ve
252e0 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f  rsion of the pro
252f0 6a 65 63 74 20 61 20 22 63 68 65 63 6b 69 6e 22  ject a "checkin"
25300 2e 20 20 41 20 73 69 6e 67 6c 65 0a 63 68 65 63  .  A single.chec
25310 6b 69 6e 20 63 61 6e 20 68 61 76 65 20 7a 65 72  kin can have zer
25320 6f 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e 74  o or more parent
25330 73 2e 20 20 4d 6f 73 74 20 63 68 65 63 6b 69 6e  s.  Most checkin
25340 73 20 28 65 78 63 65 70 74 20 74 68 65 0a 66 69  s (except the.fi
25350 72 73 74 29 20 68 61 76 65 20 61 20 73 69 6e 67  rst) have a sing
25360 6c 65 20 70 61 72 65 6e 74 2c 20 62 75 74 20 69  le parent, but i
25370 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n the case of a 
25380 6d 65 72 67 65 2c 20 61 20 63 68 65 63 6b 69 6e  merge, a checkin
25390 0a 6d 69 67 68 74 20 68 61 76 65 20 74 77 6f 20  .might have two 
253a0 6f 72 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65  or three or more
253b0 20 70 61 72 65 6e 74 73 2e 20 20 41 20 73 63 68   parents.  A sch
253c0 65 6d 61 20 74 6f 20 6b 65 65 70 20 74 72 61 63  ema to keep trac
253d0 6b 20 6f 66 0a 63 68 65 63 6b 69 6e 73 20 61 6e  k of.checkins an
253e0 64 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77  d the order in w
253f0 68 69 63 68 20 74 68 65 79 20 6f 63 63 75 72 20  hich they occur 
25400 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65 74  might look somet
25410 68 69 6e 67 20 6c 69 6b 65 0a 74 68 69 73 3a 0a  hing like.this:.
25420 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
25430 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
25440 63 68 65 63 6b 69 6e 28 0a 20 20 69 64 20 49 4e  checkin(.  id IN
25450 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
25460 59 2c 0a 20 20 6d 74 69 6d 65 20 49 4e 54 45 47  Y,.  mtime INTEG
25470 45 52 20 2d 2d 20 74 69 6d 65 73 74 61 6d 70 20  ER -- timestamp 
25480 77 68 65 6e 20 74 68 69 73 20 63 68 65 63 6b 69  when this checki
25490 6e 20 6f 63 63 75 72 72 65 64 0a 29 3b 0a 43 52  n occurred.);.CR
254a0 45 41 54 45 20 54 41 42 4c 45 20 64 65 72 69 76  EATE TABLE deriv
254b0 65 64 66 72 6f 6d 28 0a 20 20 78 66 72 6f 6d 20  edfrom(.  xfrom 
254c0 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c  INTEGER NOT NULL
254d0 20 52 45 46 45 52 45 4e 43 45 53 20 63 68 65 63   REFERENCES chec
254e0 6b 69 6e 2c 20 2d 2d 20 70 61 72 65 6e 74 20 63  kin, -- parent c
254f0 68 65 63 6b 69 6e 0a 20 20 78 74 6f 20 49 4e 54  heckin.  xto INT
25500 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45  EGER NOT NULL RE
25510 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69 6e  FERENCES checkin
25520 2c 20 20 20 2d 2d 20 64 65 72 69 76 65 64 20 63  ,   -- derived c
25530 68 65 63 6b 69 6e 0a 20 20 50 52 49 4d 41 52 59  heckin.  PRIMARY
25540 20 4b 45 59 28 78 66 72 6f 6d 2c 78 74 6f 29 0a   KEY(xfrom,xto).
25550 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20  );.CREATE INDEX 
25560 64 65 72 69 76 65 64 66 72 6f 6d 5f 62 61 63 6b  derivedfrom_back
25570 20 4f 4e 20 64 65 72 69 76 65 64 66 72 6f 6d 28   ON derivedfrom(
25580 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70 72  xto,xfrom);.</pr
25590 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
255a0 0a 3c 70 3e 54 68 69 73 20 67 72 61 70 68 20 69  .<p>This graph i
255b0 73 20 61 63 79 63 6c 69 63 2e 20 20 41 6e 64 20  s acyclic.  And 
255c0 77 65 20 61 73 73 75 6d 65 20 74 68 61 74 20 74  we assume that t
255d0 68 65 20 6d 74 69 6d 65 20 6f 66 20 65 76 65 72  he mtime of ever
255e0 79 0a 63 68 69 6c 64 20 63 68 65 63 6b 69 6e 20  y.child checkin 
255f0 69 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20  is no less than 
25600 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 61 6c 6c  the mtime of all
25610 20 69 74 73 20 70 61 72 65 6e 74 73 2e 20 20 42   its parents.  B
25620 75 74 0a 75 6e 6c 69 6b 65 20 74 68 65 20 65 61  ut.unlike the ea
25630 72 6c 69 65 72 20 65 78 61 6d 70 6c 65 73 2c 20  rlier examples, 
25640 74 68 69 73 20 67 72 61 70 68 20 6d 69 67 68 74  this graph might
25650 20 68 61 76 65 20 6d 75 6c 74 69 70 6c 65 20 70   have multiple p
25660 61 74 68 73 20 6f 66 0a 64 69 66 66 65 72 69 6e  aths of.differin
25670 67 20 6c 65 6e 67 74 68 73 20 62 65 74 77 65 65  g lengths betwee
25680 6e 20 61 6e 79 20 74 77 6f 20 63 68 65 63 6b 69  n any two checki
25690 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e 74 20  ns...<p>We want 
256a0 74 6f 20 6b 6e 6f 77 20 74 68 65 20 74 77 65 6e  to know the twen
256b0 74 79 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61  ty most recent a
256c0 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 69 6d 65  ncestors in time
256d0 20 28 6f 75 74 20 6f 66 0a 74 68 65 20 74 68 6f   (out of.the tho
256e0 75 73 61 6e 64 73 20 61 6e 64 20 74 68 6f 75 73  usands and thous
256f0 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f 72  ands of ancestor
25700 73 20 69 6e 20 74 68 65 20 77 68 6f 6c 65 20 44  s in the whole D
25710 41 47 29 20 66 6f 72 0a 63 68 65 63 6b 69 6e 20  AG) for.checkin 
25720 22 40 42 41 53 45 4c 49 4e 45 22 2e 20 20 28 41  "@BASELINE".  (A
25730 20 71 75 65 72 79 20 73 69 6d 69 6c 61 72 20 74   query similar t
25740 6f 20 74 68 69 73 20 69 73 20 75 73 65 64 0a 62  o this is used.b
25750 79 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 68  y the <a href="h
25760 74 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73 69 6c  ttp://www.fossil
25770 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73 73 69  -scm.org/">Fossi
25780 6c 3c 2f 61 3e 20 56 43 53 20 74 6f 0a 73 68 6f  l</a> VCS to.sho
25790 77 20 74 68 65 20 4e 20 6d 6f 73 74 20 72 65 63  w the N most rec
257a0 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 6f 66  ent ancestors of
257b0 20 61 20 63 68 65 63 6b 2e 20 20 46 6f 72 20 65   a check.  For e
257c0 78 61 6d 70 6c 65 3a 0a 3c 61 20 68 72 65 66 3d  xample:.<a href=
257d0 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69  "http://www.sqli
257e0 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c  te.org/src/timel
257f0 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30  ine?p=trunk&n=30
25800 22 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c  ">http://www.sql
25810 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65  ite.org/src/time
25820 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33  line?p=trunk&n=3
25830 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63 6b 71  0</a>.)..<blockq
25840 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
25850 52 45 43 55 52 53 49 56 45 0a 20 20 61 6e 63 65  RECURSIVE.  ance
25860 73 74 6f 72 28 69 64 2c 6d 74 69 6d 65 29 20 41  stor(id,mtime) A
25870 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 69  S (.    SELECT i
25880 64 2c 20 6d 74 69 6d 65 20 46 52 4f 4d 20 63 68  d, mtime FROM ch
25890 65 63 6b 69 6e 20 57 48 45 52 45 20 69 64 3d 40  eckin WHERE id=@
258a0 42 41 53 45 4c 49 4e 45 0a 20 20 20 20 55 4e 49  BASELINE.    UNI
258b0 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 65  ON.    SELECT de
258c0 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 2c  rivedfrom.xfrom,
258d0 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 0a 20   checkin.mtime. 
258e0 20 20 20 20 20 46 52 4f 4d 20 61 6e 63 65 73 74       FROM ancest
258f0 6f 72 2c 20 64 65 72 69 76 65 64 66 72 6f 6d 2c  or, derivedfrom,
25900 20 63 68 65 63 6b 69 6e 0a 20 20 20 20 20 57 48   checkin.     WH
25910 45 52 45 20 61 6e 63 65 73 74 6f 72 2e 69 64 3d  ERE ancestor.id=
25920 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 74 6f 0a  derivedfrom.xto.
25930 20 20 20 20 20 20 20 41 4e 44 20 63 68 65 63 6b         AND check
25940 69 6e 2e 69 64 3d 64 65 72 69 76 65 64 66 72 6f  in.id=derivedfro
25950 6d 2e 78 66 72 6f 6d 0a 20 20 20 20 20 4f 52 44  m.xfrom.     ORD
25960 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74  ER BY checkin.mt
25970 69 6d 65 20 44 45 53 43 0a 20 20 20 20 20 4c 49  ime DESC.     LI
25980 4d 49 54 20 32 30 0a 20 20 29 0a 53 45 4c 45 43  MIT 20.  ).SELEC
25990 54 20 2a 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e  T * FROM checkin
259a0 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 20 55   JOIN ancestor U
259b0 53 49 4e 47 28 69 64 29 3b 0a 3c 2f 70 72 65 3e  SING(id);.</pre>
259c0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
259d0 70 3e 0a 54 68 65 20 22 4f 52 44 45 52 20 42 59  p>.The "ORDER BY
259e0 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44   checkin.mtime D
259f0 45 53 43 22 20 74 65 72 6d 20 69 6e 20 74 68 65  ESC" term in the
25a00 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
25a10 74 20 6d 61 6b 65 73 0a 74 68 65 20 71 75 65 72  t makes.the quer
25a20 79 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74 65  y run much faste
25a30 72 20 62 79 20 70 72 65 76 65 6e 74 69 6e 67 20  r by preventing 
25a40 69 74 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77 69 6e  it from followin
25a50 67 0a 62 72 61 6e 63 68 65 73 20 74 68 61 74 20  g.branches that 
25a60 6d 65 72 67 65 20 63 68 65 63 6b 69 6e 73 0a 66  merge checkins.f
25a70 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20 20 54  rom long ago.  T
25a80 68 65 20 4f 52 44 45 52 20 42 59 20 66 6f 72 63  he ORDER BY forc
25a90 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76 65  es the recursive
25aa0 2d 73 65 6c 65 63 74 20 74 6f 20 66 6f 63 75 73  -select to focus
25ab0 0a 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63  .on the most rec
25ac0 65 6e 74 20 63 68 65 63 6b 69 6e 73 2c 20 74 68  ent checkins, th
25ad0 65 20 6f 6e 65 73 20 77 65 20 77 61 6e 74 2e 20  e ones we want. 
25ae0 20 57 69 74 68 6f 75 74 20 74 68 65 20 4f 52 44   Without the ORD
25af0 45 52 20 42 59 0a 6f 6e 20 74 68 65 20 72 65 63  ER BY.on the rec
25b00 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 6f  ursive-select, o
25b10 6e 65 20 77 6f 75 6c 64 20 62 65 20 66 6f 72 63  ne would be forc
25b20 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 20 74 68  ed to compute th
25b30 65 20 63 6f 6d 70 6c 65 74 65 20 73 65 74 20 6f  e complete set o
25b40 66 0a 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 61  f.thousands of a
25b50 6e 63 65 73 74 6f 72 73 2c 20 73 6f 72 74 20 74  ncestors, sort t
25b60 68 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69 6d 65  hem all by mtime
25b70 2c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  , then take the 
25b80 74 6f 70 20 74 77 65 6e 74 79 2e 0a 54 68 65 20  top twenty..The 
25b90 4f 52 44 45 52 20 42 59 20 65 73 73 65 6e 74 69  ORDER BY essenti
25ba0 61 6c 6c 79 20 73 65 74 73 20 75 70 20 61 20 70  ally sets up a p
25bb0 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 74 68  riority queue th
25bc0 61 74 0a 66 6f 72 63 65 73 20 74 68 65 20 72 65  at.forces the re
25bd0 63 75 72 73 69 76 65 20 71 75 65 72 79 20 74 6f  cursive query to
25be0 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d 6f 73   look at the mos
25bf0 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f  t recent ancesto
25c00 72 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f 77 69  rs first,.allowi
25c10 6e 67 20 74 68 65 20 75 73 65 20 6f 66 20 61 20  ng the use of a 
25c20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74 6f 20  LIMIT clause to 
25c30 72 65 73 74 72 69 63 74 20 74 68 65 20 73 63 6f  restrict the sco
25c40 70 65 20 6f 66 20 74 68 65 0a 71 75 65 72 79 20  pe of the.query 
25c50 74 6f 20 6a 75 73 74 20 74 68 65 20 63 68 65 63  to just the chec
25c60 6b 69 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74  kins of interest
25c70 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
25c80 65 6e 74 20 77 69 74 68 6f 72 64 65 72 62 79 3c  ent withorderby<
25c90 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74 72 6f  /tcl>.<h4>Contro
25ca0 6c 6c 69 6e 67 20 44 65 70 74 68 2d 46 69 72 73  lling Depth-Firs
25cb0 74 20 56 65 72 73 75 73 20 42 72 65 61 64 74 68  t Versus Breadth
25cc0 2d 46 69 72 73 74 20 53 65 61 72 63 68 20 4f 66  -First Search Of
25cd0 20 61 20 54 72 65 65 0a 55 73 69 6e 67 20 4f 52   a Tree.Using OR
25ce0 44 45 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c 70 3e  DER BY</h4>..<p>
25cf0 41 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  An ORDER BY clau
25d00 73 65 20 6f 6e 20 74 68 65 20 72 65 63 75 72 73  se on the recurs
25d10 69 76 65 2d 73 65 6c 65 63 74 20 63 61 6e 20 62  ive-select can b
25d20 65 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  e used to contro
25d30 6c 0a 77 68 65 74 68 65 72 20 74 68 65 20 73 65  l.whether the se
25d40 61 72 63 68 20 6f 66 20 61 20 74 72 65 65 20 69  arch of a tree i
25d50 73 20 64 65 70 74 68 2d 66 69 72 73 74 20 6f 72  s depth-first or
25d60 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 2e 20   breadth-first. 
25d70 20 54 6f 0a 69 6c 6c 75 73 74 72 61 74 65 2c 20   To.illustrate, 
25d80 77 65 20 77 69 6c 6c 20 75 73 65 20 61 20 76 61  we will use a va
25d90 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 22  riation on the "
25da0 6f 72 67 22 20 74 61 62 6c 65 20 66 72 6f 6d 20  org" table from 
25db0 61 6e 20 65 78 61 6d 70 6c 65 0a 61 62 6f 76 65  an example.above
25dc0 2c 20 77 69 74 68 6f 75 74 20 74 68 65 20 22 68  , without the "h
25dd0 65 69 67 68 74 22 20 63 6f 6c 75 6d 6e 2c 20 61  eight" column, a
25de0 6e 64 20 77 69 74 68 20 73 6f 6d 65 20 72 65 61  nd with some rea
25df0 6c 20 64 61 74 61 20 69 6e 73 65 72 74 65 64 3a  l data inserted:
25e00 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
25e10 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
25e20 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58   org(.  name TEX
25e30 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20  T PRIMARY KEY,. 
25e40 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45 52   boss TEXT REFER
25e50 45 4e 43 45 53 20 6f 72 67 0a 29 20 57 49 54 48  ENCES org.) WITH
25e60 4f 55 54 20 52 4f 57 49 44 3b 0a 49 4e 53 45 52  OUT ROWID;.INSER
25e70 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
25e80 53 28 27 41 6c 69 63 65 27 2c 4e 55 4c 4c 29 3b  S('Alice',NULL);
25e90 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
25ea0 20 56 41 4c 55 45 53 28 27 42 6f 62 27 2c 27 41   VALUES('Bob','A
25eb0 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54 20 49  lice');.INSERT I
25ec0 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27  NTO org VALUES('
25ed0 43 69 6e 64 79 27 2c 27 41 6c 69 63 65 27 29 3b  Cindy','Alice');
25ee0 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
25ef0 20 56 41 4c 55 45 53 28 27 44 61 76 65 27 2c 27   VALUES('Dave','
25f00 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  Bob');.INSERT IN
25f10 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 45  TO org VALUES('E
25f20 6d 6d 61 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53  mma','Bob');.INS
25f30 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
25f40 55 45 53 28 27 46 72 65 64 27 2c 27 43 69 6e 64  UES('Fred','Cind
25f50 79 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  y');.INSERT INTO
25f60 20 6f 72 67 20 56 41 4c 55 45 53 28 27 47 61 69   org VALUES('Gai
25f70 6c 27 2c 27 43 69 6e 64 79 27 29 3b 0a 3c 2f 70  l','Cindy');.</p
25f80 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
25f90 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20 71  ..<p>Here is a q
25fa0 75 65 72 79 20 74 6f 20 73 68 6f 77 20 74 68 65  uery to show the
25fb0 20 74 72 65 65 20 73 74 72 75 63 74 75 72 65 20   tree structure 
25fc0 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72  in a breadth-fir
25fd0 73 74 20 70 61 74 74 65 72 6e 3a 0a 0a 3c 62 6c  st pattern:..<bl
25fe0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
25ff0 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
26000 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65  under_alice(name
26010 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20 20 20  ,level) AS (.   
26020 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c   VALUES('Alice',
26030 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  0).    UNION ALL
26040 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72 67 2e  .    SELECT org.
26050 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63  name, under_alic
26060 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20 20 20  e.level+1.      
26070 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e  FROM org JOIN un
26080 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67  der_alice ON org
26090 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63  .boss=under_alic
260a0 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52 44 45  e.name.     ORDE
260b0 52 20 42 59 20 32 0a 20 20 29 0a 53 45 4c 45 43  R BY 2.  ).SELEC
260c0 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e  T substr('......
260d0 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29  ....',1,level*3)
260e0 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e   || name FROM un
260f0 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65  der_alice;.</pre
26100 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
26110 3c 70 3e 54 68 65 20 22 4f 52 44 45 52 20 42 59  <p>The "ORDER BY
26120 20 32 22 20 28 77 68 69 63 68 20 6d 65 61 6e 73   2" (which means
26130 20 74 68 65 20 73 61 6d 65 20 61 73 20 22 4f 52   the same as "OR
26140 44 45 52 20 42 59 20 75 6e 64 65 72 5f 61 6c 69  DER BY under_ali
26150 63 65 2e 6c 65 76 65 6c 2b 31 22 29 0a 63 61 75  ce.level+1").cau
26160 73 65 73 20 68 69 67 68 65 72 20 6c 65 76 65 6c  ses higher level
26170 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a  s in the organiz
26180 61 74 69 6f 6e 20 63 68 61 72 74 20 28 77 69 74  ation chart (wit
26190 68 20 73 6d 61 6c 6c 65 72 20 22 6c 65 76 65 6c  h smaller "level
261a0 22 20 76 61 6c 75 65 73 29 0a 74 6f 20 62 65 20  " values).to be 
261b0 70 72 6f 63 65 73 73 65 64 20 66 69 72 73 74 2c  processed first,
261c0 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20   resulting in a 
261d0 62 72 65 61 64 74 68 2d 66 69 72 73 74 20 73 65  breadth-first se
261e0 61 72 63 68 2e 20 20 54 68 65 20 6f 75 74 70 75  arch.  The outpu
261f0 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  t is:..<blockquo
26200 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e  te><pre>.Alice..
26210 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79 0a 2e  ..Bob....Cindy..
26220 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e  .....Dave.......
26230 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a  Emma.......Fred.
26240 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65  ......Gail.</pre
26250 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
26260 3c 70 3e 42 75 74 20 69 66 20 77 65 20 63 68 61  <p>But if we cha
26270 6e 67 65 20 74 68 65 20 4f 52 44 45 52 20 42 59  nge the ORDER BY
26280 20 63 6c 61 75 73 65 20 74 6f 20 61 64 64 20 74   clause to add t
26290 68 65 20 22 44 45 53 43 22 20 6d 6f 64 69 66 69  he "DESC" modifi
262a0 65 72 2c 20 74 68 61 74 20 77 69 6c 6c 0a 63 61  er, that will.ca
262b0 75 73 65 20 6c 6f 77 65 72 20 6c 65 76 65 6c 73  use lower levels
262c0 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61   in the organiza
262d0 74 69 6f 6e 20 28 77 69 74 68 20 6c 61 72 67 65  tion (with large
262e0 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75 65 73  r "level" values
262f0 29 20 74 6f 20 62 65 0a 70 72 6f 63 65 73 73 65  ) to be.processe
26300 64 20 66 69 72 73 74 20 62 79 20 74 68 65 20 72  d first by the r
26310 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
26320 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20   resulting in a 
26330 64 65 70 74 68 2d 66 69 72 73 74 20 73 65 61 72  depth-first sear
26340 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ch:..<blockquote
26350 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
26360 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c  RSIVE.  under_al
26370 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20  ice(name,level) 
26380 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28  AS (.    VALUES(
26390 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20 20 55  'Alice',0).    U
263a0 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c  NION ALL.    SEL
263b0 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e  ECT org.name, un
263c0 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b  der_alice.level+
263d0 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f 72 67  1.      FROM org
263e0 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63   JOIN under_alic
263f0 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e  e ON org.boss=un
26400 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20  der_alice.name. 
26410 20 20 20 20 4f 52 44 45 52 20 42 59 20 32 20 3c      ORDER BY 2 <
26420 62 3e 44 45 53 43 3c 2f 62 3e 0a 20 20 29 0a 53  b>DESC</b>.  ).S
26430 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e  ELECT substr('..
26440 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65  ........',1,leve
26450 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f  l*3) || name FRO
26460 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c  M under_alice;.<
26470 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
26480 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75  e>..<p>The outpu
26490 74 20 6f 66 20 74 68 69 73 20 72 65 76 69 73 65  t of this revise
264a0 64 20 71 75 65 72 79 20 69 73 3a 0a 0a 3c 62 6c  d query is:..<bl
264b0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41  ockquote><pre>.A
264c0 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 2e  lice....Bob.....
264d0 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d  ..Dave.......Emm
264e0 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e  a....Cindy......
264f0 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c  .Fred.......Gail
26500 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
26510 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68  ote>..<p>When th
26520 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
26530 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  e is omitted fro
26540 6d 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  m the recursive-
26550 73 65 6c 65 63 74 2c 20 74 68 65 0a 71 75 65 75  select, the.queu
26560 65 20 62 65 68 61 76 65 73 20 61 73 20 61 20 46  e behaves as a F
26570 49 46 4f 2c 20 77 68 69 63 68 20 72 65 73 75 6c  IFO, which resul
26580 74 73 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d  ts in a breadth-
26590 66 69 72 73 74 20 73 65 61 72 63 68 2e 0a 0a 0a  first search....
265a0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
265b0 20 6d 61 6e 64 65 6c 62 72 6f 74 20 7b 63 6f 6d   mandelbrot {com
265c0 70 75 74 65 20 74 68 65 20 4d 61 6e 64 65 6c 62  pute the Mandelb
265d0 72 6f 74 20 73 65 74 7d 3c 2f 74 63 6c 3e 0a 3c  rot set}</tcl>.<
265e0 68 34 3e 4f 75 74 6c 61 6e 64 69 73 68 20 52 65  h4>Outlandish Re
265f0 63 75 72 73 69 76 65 20 51 75 65 72 79 20 45 78  cursive Query Ex
26600 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e  amples</h4>..<p>
26610 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75  The following qu
26620 65 72 79 20 63 6f 6d 70 75 74 65 73 20 61 6e 20  ery computes an 
26630 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 6f 66  approximation of
26640 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20   the Mandelbrot 
26650 53 65 74 0a 61 6e 64 20 6f 75 74 70 75 74 73 20  Set.and outputs 
26660 74 68 65 20 72 65 73 75 6c 74 20 61 73 20 41 53  the result as AS
26670 43 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f 63 6b  CII-art:..<block
26680 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
26690 20 52 45 43 55 52 53 49 56 45 0a 20 20 78 61 78   RECURSIVE.  xax
266a0 69 73 28 78 29 20 41 53 20 28 56 41 4c 55 45 53  is(x) AS (VALUES
266b0 28 2d 32 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c  (-2.0) UNION ALL
266c0 20 53 45 4c 45 43 54 20 78 2b 30 2e 30 35 20 46   SELECT x+0.05 F
266d0 52 4f 4d 20 78 61 78 69 73 20 57 48 45 52 45 20  ROM xaxis WHERE 
266e0 78 3c 31 2e 32 29 2c 0a 20 20 79 61 78 69 73 28  x<1.2),.  yaxis(
266f0 79 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d 31  y) AS (VALUES(-1
26700 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  .0) UNION ALL SE
26710 4c 45 43 54 20 79 2b 30 2e 31 20 46 52 4f 4d 20  LECT y+0.1 FROM 
26720 79 61 78 69 73 20 57 48 45 52 45 20 79 3c 31 2e  yaxis WHERE y<1.
26730 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c 20 63 78  0),.  m(iter, cx
26740 2c 20 63 79 2c 20 78 2c 20 79 29 20 41 53 20 28  , cy, x, y) AS (
26750 0a 20 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78  .    SELECT 0, x
26760 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52  , y, 0.0, 0.0 FR
26770 4f 4d 20 78 61 78 69 73 2c 20 79 61 78 69 73 0a  OM xaxis, yaxis.
26780 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
26790 20 20 53 45 4c 45 43 54 20 69 74 65 72 2b 31 2c    SELECT iter+1,
267a0 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79   cx, cy, x*x-y*y
267b0 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b   + cx, 2.0*x*y +
267c0 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20 20 20 20   cy FROM m .    
267d0 20 57 48 45 52 45 20 28 78 2a 78 20 2b 20 79 2a   WHERE (x*x + y*
267e0 79 29 20 3c 20 34 2e 30 20 41 4e 44 20 69 74 65  y) < 4.0 AND ite
267f0 72 3c 32 38 0a 20 20 29 2c 0a 20 20 6d 32 28 69  r<28.  ),.  m2(i
26800 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41 53 20  ter, cx, cy) AS 
26810 28 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78  (.    SELECT max
26820 28 69 74 65 72 29 2c 20 63 78 2c 20 63 79 20 46  (iter), cx, cy F
26830 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42 59 20 63  ROM m GROUP BY c
26840 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20 61 28 74  x, cy.  ),.  a(t
26850 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43  ) AS (.    SELEC
26860 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 20  T group_concat( 
26870 73 75 62 73 74 72 28 27 20 2e 2b 2a 23 27 2c 20  substr(' .+*#', 
26880 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34 29 2c  1+min(iter/7,4),
26890 20 31 29 2c 20 27 27 29 20 0a 20 20 20 20 46 52   1), '') .    FR
268a0 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59 20 63  OM m2 GROUP BY c
268b0 79 0a 20 20 29 0a 53 45 4c 45 43 54 20 67 72 6f  y.  ).SELECT gro
268c0 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69 6d 28  up_concat(rtrim(
268d0 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d 20 61  t),x'0a') FROM a
268e0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
268f0 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69  uote>..<p>In thi
26900 73 20 71 75 65 72 79 2c 20 74 68 65 20 22 78 61  s query, the "xa
26910 78 69 73 22 20 61 6e 64 20 22 79 61 78 69 73 22  xis" and "yaxis"
26920 20 43 54 45 73 20 64 65 66 69 6e 65 20 74 68 65   CTEs define the
26930 20 67 72 69 64 20 6f 66 20 70 6f 69 6e 74 73 20   grid of points 
26940 66 6f 72 0a 77 68 69 63 68 20 74 68 65 20 4d 61  for.which the Ma
26950 6e 64 65 6c 62 72 6f 74 20 53 65 74 20 77 69 6c  ndelbrot Set wil
26960 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61 74 65  l be approximate
26970 64 2e 20 20 45 61 63 68 20 72 6f 77 20 69 6e 20  d.  Each row in 
26980 74 68 65 0a 22 6d 28 69 74 65 72 2c 63 78 2c 63  the."m(iter,cx,c
26990 79 2c 78 2c 79 29 22 20 43 54 45 20 6d 65 61 6e  y,x,y)" CTE mean
269a0 73 20 74 68 61 74 20 61 66 74 65 72 20 22 69 74  s that after "it
269b0 65 72 22 20 69 74 65 72 61 74 69 6f 6e 73 2c 20  er" iterations, 
269c0 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 0a 69  the Mandelbrot.i
269d0 74 65 72 61 74 69 6f 6e 20 73 74 61 72 74 69 6e  teration startin
269e0 67 20 61 74 20 63 78 2c 63 79 20 68 61 73 20 72  g at cx,cy has r
269f0 65 61 63 68 65 64 20 70 6f 69 6e 74 20 78 2c 79  eached point x,y
26a00 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
26a10 20 69 74 65 72 61 74 69 6f 6e 73 0a 69 6e 20 74   iterations.in t
26a20 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 6c  his example is l
26a30 69 6d 69 74 65 64 20 74 6f 20 32 38 20 28 77 68  imited to 28 (wh
26a40 69 63 68 20 73 65 76 65 72 65 6c 79 20 6c 69 6d  ich severely lim
26a50 69 74 73 20 74 68 65 20 72 65 73 6f 6c 75 74 69  its the resoluti
26a60 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d 70 75 74  on of.the comput
26a70 61 74 69 6f 6e 2c 20 62 75 74 20 69 73 20 73 75  ation, but is su
26a80 66 66 69 63 69 65 6e 74 20 66 6f 72 20 6c 6f 77  fficient for low
26a90 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 41 53 43 49  -resolution ASCI
26aa0 49 2d 61 72 74 20 6f 75 74 70 75 74 29 2e 0a 54  I-art output)..T
26ab0 68 65 20 22 6d 32 28 69 74 65 72 2c 63 78 2c 63  he "m2(iter,cx,c
26ac0 79 29 22 20 43 54 45 20 68 6f 6c 64 73 20 74 68  y)" CTE holds th
26ad0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
26ae0 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 72   of iterations r
26af0 65 61 63 68 65 64 20 77 68 65 6e 0a 73 74 61 72  eached when.star
26b00 74 69 6e 67 20 61 74 20 70 6f 69 6e 74 20 63 78  ting at point cx
26b10 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65 61  ,cy..Finally, ea
26b20 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 22 61  ch row in the "a
26b30 28 74 29 22 20 43 54 45 20 68 6f 6c 64 73 20 61  (t)" CTE holds a
26b40 20 73 74 72 69 6e 67 20 0a 77 68 69 63 68 20 69   string .which i
26b50 73 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20  s a single line 
26b60 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 41 53  of the output AS
26b70 43 49 49 2d 61 72 74 2e 0a 54 68 65 20 53 45 4c  CII-art..The SEL
26b80 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74  ECT statement at
26b90 20 74 68 65 20 65 6e 64 20 6a 75 73 74 20 71 75   the end just qu
26ba0 65 72 69 65 73 20 74 68 65 20 22 61 22 20 43 54  eries the "a" CT
26bb0 45 20 74 6f 0a 72 65 74 72 69 65 76 65 20 61 6c  E to.retrieve al
26bc0 6c 20 6c 69 6e 65 73 20 6f 66 20 41 53 43 49 49  l lines of ASCII
26bd0 2d 61 72 74 2c 20 6f 6e 65 20 62 79 20 6f 6e 65  -art, one by one
26be0 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20 74 68  ...<p>Running th
26bf0 65 20 71 75 65 72 79 20 61 62 6f 76 65 20 69 6e  e query above in
26c00 20 61 6e 20 53 51 4c 69 74 65 20 5b 63 6f 6d 6d   an SQLite [comm
26c10 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20  and-line shell] 
26c20 72 65 73 75 6c 74 73 0a 69 6e 20 74 68 65 20 66  results.in the f
26c30 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74 70 75 74 3a  ollowing output:
26c40 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
26c50 72 65 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20  re>.            
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c70 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20 20          ....#.  
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ca0 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20   ..#*...        
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cc0 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23           ..+####
26cd0 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
26ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
26cf0 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20  ......+####.... 
26d00 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20    +.            
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
26d20 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b  .##+*##########+
26d30 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20  .++++.          
26d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d50 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23 23  .+.#############
26d60 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20  #####+..        
26d70 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e        ..........
26d80 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23 23 23  ...+############
26d90 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20  #######+.+.     
26da0 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23           ..++..#
26db0 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23  .....*##########
26dc0 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
26dd0 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23             ...+#
26de0 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23  ######++########
26df0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e  ###############.
26e00 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b  .          ....+
26e10 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  *###############
26e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e30 23 2e 0a 20 23 23 23 23 23 23 23 23 23 23 23 23  #.. ############
26e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e60 23 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 2e  #....          .
26e70 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23 23  ...+*###########
26e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e90 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20  #####..         
26ea0 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b      ...+#######+
26eb0 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +###############
26ec0 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20  ########..      
26ed0 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e          ..++..#.
26ee0 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23 23  ....*###########
26ef0 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20  ##########+..   
26f00 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e             .....
26f10 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23  ........+#######
26f20 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a  ############+.+.
26f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f40 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23 23 23            .+.###
26f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b  ###############+
26f60 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26f70 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23               ..#
26f80 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #+*##########+.+
26f90 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +++.            
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fb0 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e  .......+####....
26fc0 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20     +.           
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fe0 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a        ..+####+..
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20     ..#*...      
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
27040 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20 20  ..#.            
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 20 20 20 20 20 20 2b 2e 0a 3c 2f 70 72 65          +..</pre
27070 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
27080 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
27090 20 73 75 64 6f 6b 75 20 7b 73 6f 6c 76 65 20 53   sudoku {solve S
270a0 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d 20 3c  udoku puzzles} <
270b0 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e 65  /tcl>.<p>This ne
270c0 78 74 20 71 75 65 72 79 20 73 6f 6c 76 65 73 20  xt query solves 
270d0 61 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 2e  a Sudoku puzzle.
270e0 20 20 54 68 65 20 73 74 61 74 65 20 6f 66 20 74    The state of t
270f0 68 65 20 70 75 7a 7a 6c 65 20 69 73 0a 64 65 66  he puzzle is.def
27100 69 6e 65 64 20 62 79 20 61 6e 20 38 31 2d 63 68  ined by an 81-ch
27110 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20 66  aracter string f
27120 6f 72 6d 65 64 20 62 79 20 72 65 61 64 69 6e 67  ormed by reading
27130 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
27140 65 0a 70 75 7a 7a 6c 65 20 62 6f 78 20 72 6f 77  e.puzzle box row
27150 20 62 79 20 72 6f 77 20 66 72 6f 6d 20 6c 65 66   by row from lef
27160 74 20 74 6f 20 72 69 67 68 74 20 61 6e 64 20 74  t to right and t
27170 68 65 6e 20 66 72 6f 6d 20 74 6f 70 20 74 6f 20  hen from top to 
27180 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73 71  bottom..Blank sq
27190 75 61 72 65 73 20 69 6e 20 74 68 65 20 70 75 7a  uares in the puz
271a0 7a 6c 65 20 61 72 65 20 64 65 6e 6f 74 65 64 20  zle are denoted 
271b0 62 79 20 61 20 22 2e 22 20 63 68 61 72 61 63 74  by a "." charact
271c0 65 72 2e 20 20 0a 54 68 75 73 20 74 68 65 20 69  er.  .Thus the i
271d0 6e 70 75 74 20 73 74 72 69 6e 67 3a 0a 0a 3c 62  nput string:..<b
271e0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e 37  lockquote>.53..7
271f0 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38  ....6..195....98
27200 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34  ....6.8...6...34
27210 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e  ..8.3..17...2...
27220 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39  6.6....28....419
27230 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f 62  ..5....8..79.</b
27240 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43  lockquote>..<p>C
27250 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20  orresponds to a 
27260 70 75 7a 7a 6c 65 20 6c 69 6b 65 20 74 68 69 73  puzzle like this
27270 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  :..<blockquote>.
27280 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 31  <table border="1
27290 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
272a0 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74 64 3e  ">.<tr><td>5<td>
272b0 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37  3<td> <td> <td>7
272c0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
272d0 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74 64  td>.<tr><td>6<td
272e0 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 3c 74 64 3e  > <td> <td>1<td>
272f0 39 3c 74 64 3e 35 3c 74 64 3e 20 3c 74 64 3e 20  9<td>5<td> <td> 
27300 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74  <td>.<tr><td> <t
27310 64 3e 39 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64  d>9<td>8<td> <td
27320 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
27330 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38 3c  6<td>.<tr><td>8<
27340 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
27350 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>6<td> <td> <td
27360 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74 64 3e  > <td>3.<tr><td>
27370 34 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38  4<td> <td> <td>8
27380 3c 74 64 3e 20 3c 74 64 3e 33 3c 74 64 3e 20 3c  <td> <td>3<td> <
27390 74 64 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c 74  td> <td>1.<tr><t
273a0 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>7<td> <td> <td
273b0 3e 20 3c 74 64 3e 32 3c 74 64 3e 20 3c 74 64 3e  > <td>2<td> <td>
273c0 20 3c 74 64 3e 20 3c 74 64 3e 36 0a 3c 74 72 3e   <td> <td>6.<tr>
273d0 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c  <td> <td>6<td> <
273e0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
273f0 64 3e 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74 72  d>2<td>8<td>.<tr
27400 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  ><td> <td> <td> 
27410 3c 74 64 3e 34 3c 74 64 3e 31 3c 74 64 3e 39 3c  <td>4<td>1<td>9<
27420 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 35 0a 3c  td> <td> <td>5.<
27430 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  tr><td> <td> <td
27440 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e  > <td> <td>8<td>
27450 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 39   <td> <td>7<td>9
27460 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
27470 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73  kquote>..<p>This
27480 20 69 73 20 74 68 65 20 71 75 65 72 79 20 74 68   is the query th
27490 61 74 20 73 6f 6c 76 65 73 20 74 68 65 20 70 75  at solves the pu
274a0 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  zzle:..<blockquo
274b0 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
274c0 43 55 52 53 49 56 45 0a 20 20 69 6e 70 75 74 28  CURSIVE.  input(
274d0 73 75 64 29 20 41 53 20 28 0a 20 20 20 20 56 41  sud) AS (.    VA
274e0 4c 55 45 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e 36  LUES('53..7....6
274f0 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36  ..195....98....6
27500 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33  .8...6...34..8.3
27510 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e  ..17...2...6.6..
27520 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e  ..28....419..5..
27530 2e 2e 38 2e 2e 37 39 27 29 0a 20 20 29 2c 0a 20  ..8..79').  ),. 
27540 20 64 69 67 69 74 73 28 7a 2c 20 6c 70 29 20 41   digits(z, lp) A
27550 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27  S (.    VALUES('
27560 31 27 2c 20 31 29 0a 20 20 20 20 55 4e 49 4f 4e  1', 1).    UNION
27570 20 41 4c 4c 20 53 45 4c 45 43 54 0a 20 20 20 20   ALL SELECT.    
27580 43 41 53 54 28 6c 70 2b 31 20 41 53 20 54 45 58  CAST(lp+1 AS TEX
27590 54 29 2c 20 6c 70 2b 31 20 46 52 4f 4d 20 64 69  T), lp+1 FROM di
275a0 67 69 74 73 20 57 48 45 52 45 20 6c 70 3c 39 0a  gits WHERE lp<9.
275b0 20 20 29 2c 0a 20 20 78 28 73 2c 20 69 6e 64 29    ),.  x(s, ind)
275c0 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
275d0 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75 64 2c   sud, instr(sud,
275e0 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70 75 74   '.') FROM input
275f0 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  .    UNION ALL. 
27600 20 20 20 53 45 4c 45 43 54 0a 20 20 20 20 20 20     SELECT.      
27610 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64  substr(s, 1, ind
27620 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73  -1) || z || subs
27630 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 0a 20 20  tr(s, ind+1),.  
27640 20 20 20 20 69 6e 73 74 72 28 20 73 75 62 73 74      instr( subst
27650 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c  r(s, 1, ind-1) |
27660 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c  | z || substr(s,
27670 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29 0a 20   ind+1), '.' ). 
27680 20 20 20 20 46 52 4f 4d 20 78 2c 20 64 69 67 69      FROM x, digi
27690 74 73 20 41 53 20 7a 0a 20 20 20 20 57 48 45 52  ts AS z.    WHER
276a0 45 20 69 6e 64 3e 30 0a 20 20 20 20 20 20 41 4e  E ind>0.      AN
276b0 44 20 4e 4f 54 20 45 58 49 53 54 53 20 28 0a 20  D NOT EXISTS (. 
276c0 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43             SELEC
276d0 54 20 31 0a 20 20 20 20 20 20 20 20 20 20 20 20  T 1.            
276e0 20 20 46 52 4f 4d 20 64 69 67 69 74 73 20 41 53    FROM digits AS
276f0 20 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20 20   lp.            
27700 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73 75 62   WHERE z.z = sub
27710 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 2f  str(s, ((ind-1)/
27720 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 0a 20 20  9)*9 + lp, 1).  
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52                OR
27740 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c   z.z = substr(s,
27750 20 28 28 69 6e 64 2d 31 29 25 39 29 20 2b 20 28   ((ind-1)%9) + (
27760 6c 70 2d 31 29 2a 39 20 2b 20 31 2c 20 31 29 0a  lp-1)*9 + 1, 1).
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27780 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28  OR z.z = substr(
27790 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f 33 29 20  s, (((ind-1)/3) 
277a0 25 20 33 29 20 2a 20 33 0a 20 20 20 20 20 20 20  % 3) * 3.       
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277c0 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32 37 29 20   + ((ind-1)/27) 
277d0 2a 20 32 37 20 2b 20 6c 70 0a 20 20 20 20 20 20  * 27 + lp.      
277e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277f0 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f 20 33 29    + ((lp-1) / 3)
27800 20 2a 20 36 2c 20 31 29 0a 20 20 20 20 20 20 20   * 6, 1).       
27810 20 20 29 0a 20 20 29 0a 53 45 4c 45 43 54 20 73    ).  ).SELECT s
27820 20 46 52 4f 4d 20 78 20 57 48 45 52 45 20 69 6e   FROM x WHERE in
27830 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d=0;.</pre></blo
27840 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
27850 20 22 69 6e 70 75 74 22 20 43 54 45 20 64 65 66   "input" CTE def
27860 69 6e 65 73 20 74 68 65 20 69 6e 70 75 74 20 70  ines the input p
27870 75 7a 7a 6c 65 2e 0a 54 68 65 20 22 64 69 67 69  uzzle..The "digi
27880 74 73 22 20 43 54 45 20 64 65 66 69 6e 65 73 20  ts" CTE defines 
27890 61 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  a table that hol
278a0 64 73 20 61 6c 6c 20 64 69 67 69 74 73 20 62 65  ds all digits be
278b0 74 77 65 65 6e 20 31 20 61 6e 64 20 39 2e 0a 54  tween 1 and 9..T
278c0 68 65 20 77 6f 72 6b 20 6f 66 20 73 6f 6c 76 69  he work of solvi
278d0 6e 67 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73  ng the puzzle is
278e0 20 75 6e 64 65 72 74 61 6b 65 6e 20 62 79 20 74   undertaken by t
278f0 68 65 20 22 78 22 20 43 54 45 2e 0a 41 6e 20 65  he "x" CTE..An e
27900 6e 74 72 79 20 69 6e 20 78 28 73 2c 69 6e 64 29  ntry in x(s,ind)
27910 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
27920 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74 72  81-character str
27930 69 6e 67 20 22 73 22 20 69 73 20 61 20 76 61 6c  ing "s" is a val
27940 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65  id.sudoku puzzle
27950 20 28 69 74 20 68 61 73 20 6e 6f 20 63 6f 6e 66   (it has no conf
27960 6c 69 63 74 73 29 20 61 6e 64 20 74 68 61 74 20  licts) and that 
27970 74 68 65 20 66 69 72 73 74 20 75 6e 6b 6e 6f 77  the first unknow
27980 6e 20 63 68 61 72 61 63 74 65 72 0a 69 73 20 61  n character.is a
27990 74 20 70 6f 73 69 74 69 6f 6e 20 22 69 6e 64 22  t position "ind"
279a0 2c 20 6f 72 20 69 6e 64 3d 3d 30 20 69 66 20 61  , or ind==0 if a
279b0 6c 6c 20 63 68 61 72 61 63 74 65 72 20 70 6f 73  ll character pos
279c0 69 74 69 6f 6e 73 20 61 72 65 20 66 69 6c 6c 65  itions are fille
279d0 64 20 69 6e 2e 0a 54 68 65 20 67 6f 61 6c 2c 20  d in..The goal, 
279e0 74 68 65 6e 2c 20 69 73 20 74 6f 20 63 6f 6d 70  then, is to comp
279f0 75 74 65 20 65 6e 74 72 69 65 73 20 66 6f 72 20  ute entries for 
27a00 22 78 22 20 77 69 74 68 20 61 6e 20 22 69 6e 64  "x" with an "ind
27a10 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68 65 20  " of 0...<p>The 
27a20 73 6f 6c 76 65 72 20 77 6f 72 6b 73 20 62 79 20  solver works by 
27a30 61 64 64 69 6e 67 20 6e 65 77 20 65 6e 74 72 69  adding new entri
27a40 65 73 20 74 6f 20 74 68 65 20 22 78 22 20 72 65  es to the "x" re
27a50 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 47  cursive table..G
27a60 69 76 65 6e 20 70 72 69 6f 72 20 65 6e 74 72 69  iven prior entri
27a70 65 73 2c 20 74 68 65 20 72 65 63 75 72 73 69 76  es, the recursiv
27a80 65 2d 73 65 6c 65 63 74 20 74 72 69 65 73 20 74  e-select tries t
27a90 6f 20 66 69 6c 6c 20 69 6e 20 61 20 73 69 6e 67  o fill in a sing
27aa0 6c 65 20 6e 65 77 0a 70 6f 73 69 74 69 6f 6e 20  le new.position 
27ab0 77 69 74 68 20 61 6c 6c 20 76 61 6c 75 65 73 20  with all values 
27ac0 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20  between 1 and 9 
27ad0 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20 77 6f  that actually wo
27ae0 72 6b 20 69 6e 20 74 68 61 74 0a 70 6f 73 69 74  rk in that.posit
27af0 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 70 6c 69  ion.  The compli
27b00 63 61 74 65 64 20 22 4e 4f 54 20 45 58 49 53 54  cated "NOT EXIST
27b10 53 22 20 73 75 62 71 75 65 72 79 20 69 73 20 74  S" subquery is t
27b20 68 65 20 6d 61 67 69 63 20 74 68 61 74 0a 66 69  he magic that.fi
27b30 67 75 72 65 73 20 6f 75 74 20 77 68 65 74 68 65  gures out whethe
27b40 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 63 61  r or not each ca
27b50 6e 64 69 64 61 74 65 20 22 73 22 20 73 74 72 69  ndidate "s" stri
27b60 6e 67 20 69 73 20 61 20 76 61 6c 69 64 0a 73 75  ng is a valid.su
27b70 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f 72 20 6e  doku puzzle or n
27b80 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 69 6e 61  ot...<p>The fina
27b90 6c 20 61 6e 73 77 65 72 20 69 73 20 66 6f 75 6e  l answer is foun
27ba0 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  d by looking for
27bb0 20 61 20 73 74 72 69 6e 67 20 77 69 74 68 20 69   a string with i
27bc0 6e 64 3d 3d 30 2e 0a 49 66 20 74 68 65 20 6f 72  nd==0..If the or
27bd0 69 67 69 6e 61 6c 20 73 75 64 6f 6b 75 20 70 72  iginal sudoku pr
27be0 6f 62 6c 65 6d 20 64 69 64 20 6e 6f 74 20 68 61  oblem did not ha
27bf0 76 65 20 61 20 75 6e 69 71 75 65 20 73 6f 6c 75  ve a unique solu
27c00 74 69 6f 6e 2c 20 74 68 65 6e 0a 74 68 65 20 71  tion, then.the q
27c10 75 65 72 79 20 77 69 6c 6c 20 72 65 74 75 72 6e  uery will return
27c20 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 73 6f   all possible so
27c30 6c 75 74 69 6f 6e 73 2e 20 20 49 66 20 74 68 65  lutions.  If the
27c40 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f 62 6c 65   original proble
27c50 6d 0a 77 61 73 20 75 6e 73 6f 6c 76 61 62 6c 65  m.was unsolvable
27c60 2c 20 74 68 65 6e 20 6e 6f 20 72 6f 77 73 20 77  , then no rows w
27c70 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e  ill be returned.
27c80 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
27c90 74 68 65 20 75 6e 69 71 75 65 0a 61 6e 73 77 65  the unique.answe
27ca0 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  r is:..<blockquo
27cb0 74 65 3e 0a 35 33 34 36 37 38 39 31 32 36 37 32  te>.534678912672
27cc0 31 39 35 33 34 38 31 39 38 33 34 32 35 36 37 38  1953481983425678
27cd0 35 39 37 36 31 34 32 33 34 32 36 38 35 33 37 39  5976142342685379
27ce0 31 37 31 33 39 32 34 38 35 36 39 36 31 35 33 37  1713924856961537
27cf0 32 38 34 32 38 37 34 31 39 36 33 35 33 34 35 32  2842874196353452
27d00 38 36 31 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  86179.</blockquo
27d10 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 75  te>..<p>The solu
27d20 74 69 6f 6e 20 77 61 73 20 63 6f 6d 70 75 74 65  tion was compute
27d30 64 20 69 6e 20 6c 65 73 73 20 74 68 61 6e 20 33  d in less than 3
27d40 30 30 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  00 milliseconds 
27d50 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a 77 6f 72 6b  on a modern.work
27d60 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c 69  station...<h3>Li
27d70 6d 69 74 61 74 69 6f 6e 73 20 41 6e 64 20 43 61  mitations And Ca
27d80 76 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75 6c 3e  veats</h3>..<ul>
27d90 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54  .<li><p>.The WIT
27da0 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20  H clause cannot 
27db0 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  be used within a
27dc0 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
27dd0 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57  ]..<li><p>.The W
27de0 49 54 48 20 63 6c 61 75 73 65 20 6d 75 73 74 20  ITH clause must 
27df0 61 70 70 65 61 72 20 61 74 20 74 68 65 20 62 65  appear at the be
27e00 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 74 6f 70  ginning of a top
27e10 2d 6c 65 76 65 6c 20 5b 53 45 4c 45 43 54 5d 20  -level [SELECT] 
27e20 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 61 74 20  statement.or at 
27e30 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
27e40 20 61 20 73 75 62 71 75 65 72 79 2e 20 20 54 68   a subquery.  Th
27e50 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61  e WITH clause ca
27e60 6e 6e 6f 74 20 62 65 20 70 72 65 70 65 6e 64 65  nnot be prepende
27e70 64 20 74 6f 0a 74 68 65 20 73 65 63 6f 6e 64 20  d to.the second 
27e80 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 53 45  or subsequent SE
27e90 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
27ea0 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65  f a [compound se
27eb0 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54  lect]..<li><p>.T
27ec0 68 65 20 53 51 4c 3a 31 39 39 39 20 73 70 65 63  he SQL:1999 spec
27ed0 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 74   requires that t
27ee0 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65 79  he RECURSIVE key
27ef0 77 6f 72 64 20 66 6f 6c 6c 6f 77 20 57 49 54 48  word follow WITH
27f00 20 69 6e 20 61 6e 79 0a 57 49 54 48 20 63 6c 61   in any.WITH cla
27f10 75 73 65 20 74 68 61 74 20 69 6e 63 6c 75 64 65  use that include
27f20 73 20 61 20 72 65 63 75 72 73 69 76 65 20 63 6f  s a recursive co
27f30 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
27f40 73 73 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c  ssion.  However,
27f50 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69   for.compatibili
27f60 74 79 20 77 69 74 68 20 53 71 6c 53 65 72 76 65  ty with SqlServe
27f70 72 20 61 6e 64 20 4f 72 61 63 6c 65 2c 20 53 51  r and Oracle, SQ
27f80 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 65 6e  Lite does not en
27f90 66 6f 72 63 65 20 74 68 69 73 20 72 75 6c 65 2e  force this rule.
27fa0 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  .</ul>..<tcl>.##
27fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
28000 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c  ction SELECT sel
28010 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72  ect {SELECT quer
28020 79 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  y}..RecursiveBub
28030 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63  bleDiagram selec
28040 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a  t-stmt.</tcl>...
28050 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
28060 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
28070 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74  to query the dat
28080 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75  abase.  The.resu
28090 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69  lt of a SELECT i
280a0 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72  s zero or more r
280b0 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65 72  ows of data wher
280c0 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61  e each row.has a
280d0 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66   fixed number of
280e0 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20 53 45 4c   columns.  A SEL
280f0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ECT statement do
28100 65 73 20 6e 6f 74 20 6d 61 6b 65 0a 61 6e 79 20  es not make.any 
28110 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
28120 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 54 68 65  atabase...<p>The
28130 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22   "[select-stmt]"
28140 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20   syntax diagram 
28150 61 62 6f 76 65 20 61 74 74 65 6d 70 74 73 20 74  above attempts t
28160 6f 20 73 68 6f 77 20 61 73 20 6d 75 63 68 20 6f  o show as much o
28170 66 20 74 68 65 0a 53 45 4c 45 43 54 20 73 74 61  f the.SELECT sta
28180 74 65 6d 65 6e 74 20 73 79 6e 74 61 78 20 61 73  tement syntax as
28190 20 70 6f 73 73 69 62 6c 65 20 69 6e 20 61 20 73   possible in a s
281a0 69 6e 67 6c 65 20 64 69 61 67 72 61 6d 2c 20 62  ingle diagram, b
281b0 65 63 61 75 73 65 20 73 6f 6d 65 20 72 65 61 64  ecause some read
281c0 65 72 73 0a 66 69 6e 64 20 74 68 61 74 20 68 65  ers.find that he
281d0 6c 70 66 75 6c 2e 20 20 54 68 65 20 66 6f 6c 6c  lpful.  The foll
281e0 6f 77 69 6e 67 20 22 5b 66 61 63 74 6f 72 65 64  owing "[factored
281f0 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 69  -select-stmt]" i
28200 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  s an alternative
28210 0a 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73  .syntax diagrams
28220 20 74 68 61 74 20 65 78 70 72 65 73 73 65 73 20   that expresses 
28230 74 68 65 20 73 61 6d 65 20 73 79 6e 74 61 78 20  the same syntax 
28240 62 75 74 20 74 72 69 65 73 20 74 6f 20 62 72 65  but tries to bre
28250 61 6b 20 74 68 65 20 73 79 6e 74 61 78 20 0a 64  ak the syntax .d
28260 6f 77 6e 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72  own into smaller
28270 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e 0a   chunks...<tcl>.
28280 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
28290 69 61 67 72 61 6d 20 2d 2d 69 6e 69 74 69 61 6c  iagram --initial
282a0 6c 79 2d 68 69 64 64 65 6e 20 66 61 63 74 6f 72  ly-hidden factor
282b0 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20 73  ed-select-stmt s
282c0 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c  elect-core.</tcl
282d0 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20  >..<p>Note that 
282e0 74 68 65 72 65 20 61 72 65 20 70 61 74 68 73 20  there are paths 
282f0 74 68 72 6f 75 67 68 20 74 68 65 20 73 79 6e 74  through the synt
28300 61 78 20 64 69 61 67 72 61 6d 73 20 74 68 61 74  ax diagrams that
28310 0a 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  .are not allowed
28320 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20 53   in practice.  S
28330 6f 6d 65 20 65 78 61 6d 70 6c 65 73 3a 0a 3c 75  ome examples:.<u
28340 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41 4c 55 45 53  l>.<li>A [VALUES
28350 5d 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  ] clause can be 
28360 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
28370 74 20 69 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  t in a [compound
28380 20 53 45 4c 45 43 54 5d 0a 20 20 20 20 74 68 61   SELECT].    tha
28390 74 20 75 73 65 73 20 61 20 5b 57 49 54 48 5d 20  t uses a [WITH] 
283a0 63 6c 61 75 73 65 2c 20 62 75 74 20 61 20 5b 73  clause, but a [s
283b0 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 74 68  imple SELECT] th
283c0 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 20  at consists of. 
283d0 20 20 20 6a 75 73 74 20 61 20 5b 56 41 4c 55 45     just a [VALUE
283e0 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  S] clause cannot
283f0 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20   be preceded by 
28400 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2e  a [WITH] clause.
28410 0a 3c 6c 69 3e 54 68 65 20 5b 57 49 54 48 5d 20  .<li>The [WITH] 
28420 63 6c 61 75 73 65 20 6d 75 73 74 20 6f 63 63 75  clause must occu
28430 72 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 53  r on the first S
28440 45 4c 45 43 54 20 6f 66 20 61 20 5b 63 6f 6d 70  ELECT of a [comp
28450 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2e 0a 20 20  ound SELECT]..  
28460 20 20 49 74 20 63 61 6e 6e 6f 74 20 66 6f 6c 6c    It cannot foll
28470 6f 77 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f  ow a [compound-o
28480 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e 0a  perator]..</ul>.
28490 54 68 65 73 65 20 61 6e 64 20 6f 74 68 65 72 20  These and other 
284a0 73 69 6d 69 6c 61 72 20 73 79 6e 74 61 78 20 72  similar syntax r
284b0 65 73 74 72 69 63 74 69 6f 6e 73 20 61 72 65 20  estrictions are 
284c0 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65  described in the
284d0 20 74 65 78 74 2e 0a 0a 3c 70 3e 54 68 65 20 53   text...<p>The S
284e0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
284f0 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 70  is the most comp
28500 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e 64 20  licated command 
28510 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75  in the SQL langu
28520 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74 68 65  age..To make the
28530 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65 61 73   description eas
28540 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73  ier to follow, s
28550 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73 73 61  ome of the passa
28560 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63 72 69  ges below descri
28570 62 65 0a 74 68 65 20 77 61 79 20 74 68 65 20 64  be.the way the d
28580 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20  ata returned by 
28590 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
285a0 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  nt is determined
285b0 20 61 73 20 61 20 73 65 72 69 65 73 20 6f 66 0a   as a series of.
285c0 73 74 65 70 73 2e 20 49 74 20 69 73 20 69 6d 70  steps. It is imp
285d0 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70 20 69  ortant to keep i
285e0 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68 69 73  n mind that this
285f0 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c 75 73   is purely illus
28600 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70 72 61  trative -.in pra
28610 63 74 69 63 65 20 6e 65 69 74 68 65 72 20 53 51  ctice neither SQ
28620 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f 74 68  Lite nor any oth
28630 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20 69 73  er SQL engine is
28640 20 72 65 71 75 69 72 65 64 20 74 6f 20 66 6f 6c   required to fol
28650 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61 6e 79  low .this or any
28660 20 6f 74 68 65 72 20 73 70 65 63 69 66 69 63 20   other specific 
28670 70 72 6f 63 65 73 73 2e 0a 0a 3c 74 63 6c 3e 68  process...<tcl>h
28680 64 5f 66 72 61 67 6d 65 6e 74 20 73 69 6d 70 6c  d_fragment simpl
28690 65 73 65 6c 65 63 74 20 7b 73 69 6d 70 6c 65 20  eselect {simple 
286a0 53 45 4c 45 43 54 7d 3c 2f 74 63 6c 3e 0a 3c 68  SELECT}</tcl>.<h
286b0 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20  3>Simple Select 
286c0 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a  Processing</h3>.
286d0 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 6f 66 20  .<p>The core of 
286e0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
286f0 6e 74 20 69 73 20 61 20 22 73 69 6d 70 6c 65 20  nt is a "simple 
28700 53 45 4c 45 43 54 22 20 73 68 6f 77 6e 20 62 79  SELECT" shown by
28710 20 74 68 65 0a 5b 73 65 6c 65 63 74 2d 63 6f 72   the.[select-cor
28720 65 5d 20 61 6e 64 20 5b 73 69 6d 70 6c 65 2d 73  e] and [simple-s
28730 65 6c 65 63 74 2d 73 74 6d 74 5d 20 73 79 6e 74  elect-stmt] synt
28740 61 78 20 64 69 61 67 72 61 6d 73 20 62 65 6c 6f  ax diagrams belo
28750 77 2e 20 20 0a 49 6e 20 70 72 61 63 74 69 63 65  w.  .In practice
28760 2c 20 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74  , most SELECT st
28770 61 74 65 6d 65 6e 74 73 20 61 72 65 20 73 69 6d  atements are sim
28780 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
28790 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65  ments...<tcl>.Re
287a0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
287b0 67 72 61 6d 20 73 69 6d 70 6c 65 2d 73 65 6c 65  gram simple-sele
287c0 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63  ct-stmt select-c
287d0 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 47  ore.</tcl>..<p>G
287e0 65 6e 65 72 61 74 69 6e 67 20 74 68 65 20 72 65  enerating the re
287f0 73 75 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c  sults of a simpl
28800 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65  e SELECT.stateme
28810 6e 74 20 69 73 20 70 72 65 73 65 6e 74 65 64 20  nt is presented 
28820 61 73 20 61 20 66 6f 75 72 20 73 74 65 70 20 70  as a four step p
28830 72 6f 63 65 73 73 20 69 6e 20 74 68 65 20 64 65  rocess in the de
28840 73 63 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a  scription below:
28850 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ol>.  <li> <p
28860 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70  >[FROM clause] p
28870 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
28880 6e 70 75 74 20 64 61 74 61 20 66 6f 72 20 74 68  nput data for th
28890 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
288a0 69 73 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d  is.       determ
288b0 69 6e 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20  ined. The input 
288c0 64 61 74 61 20 69 73 20 65 69 74 68 65 72 20 69  data is either i
288d0 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67  mplicitly a sing
288e0 6c 65 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20  le row with 0.  
288f0 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66       columns (if
28900 20 74 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f   there is no FRO
28910 4d 20 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20  M clause) or is 
28920 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
28930 65 20 46 52 4f 4d 0a 20 20 20 20 20 20 20 63 6c  e FROM.       cl
28940 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ause..  <li> <p>
28950 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70  [WHERE clause] p
28960 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
28970 6e 70 75 74 20 64 61 74 61 20 69 73 20 66 69 6c  nput data is fil
28980 74 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20  tered using the 
28990 57 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61  WHERE.       cla
289a0 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  use expression. 
289b0 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f   .  <li> <p>[GRO
289c0 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20  UP BY|GROUP BY, 
289d0 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c  HAVING and resul
289e0 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  t-column express
289f0 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  ion] processing:
28a00 20 0a 20 20 20 20 20 20 20 54 68 65 20 73 65 74   .       The set
28a10 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
28a20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61  is computed by a
28a30 67 67 72 65 67 61 74 69 6e 67 20 74 68 65 20 64  ggregating the d
28a40 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ata according to
28a50 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55  .       any GROU
28a60 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20  P BY clause and 
28a70 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20  calculating the 
28a80 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
28a90 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20  ssions for the. 
28aa0 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68        rows of th
28ab0 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
28ac0 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c   dataset.  .  <l
28ad0 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c  i> <p>[DISTINCT|
28ae0 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79  DISTINCT/ALL key
28af0 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67  word] processing
28b00 3a 20 49 66 20 74 68 65 20 71 75 65 72 79 20 69  : If the query i
28b10 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20  s a "SELECT.    
28b20 20 20 20 44 49 53 54 49 4e 43 54 22 20 71 75 65     DISTINCT" que
28b30 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ry, duplicate ro
28b40 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
28b50 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
28b60 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c  esult rows..</ol
28b70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
28b80 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d  two types of sim
28b90 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
28ba0 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65  ment - aggregate
28bb0 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67   and .non-aggreg
28bc0 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20  ate queries. ^A 
28bd0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
28be0 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67  atement is an ag
28bf0 67 72 65 67 61 74 65 20 71 75 65 72 79 20 69 66  gregate query if
28c00 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74  .it contains eit
28c10 68 65 72 20 61 20 47 52 4f 55 50 20 42 59 20 63  her a GROUP BY c
28c20 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20  lause or one or 
28c30 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
28c40 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20  unctions.in the 
28c50 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68  result-set. ^Oth
28c60 65 72 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d  erwise, if a sim
28c70 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61  ple SELECT conta
28c80 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65  ins no aggregate
28c90 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20  .functions or a 
28ca0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c  GROUP BY clause,
28cb0 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67   it is a non-agg
28cc0 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c  regate query...<
28cd0 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e  p><b>1. Determin
28ce0 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64  ation of input d
28cf0 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65  ata (FROM clause
28d00 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62   processing).</b
28d10 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
28d20 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74  nt fromclause</t
28d30 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
28d40 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73  ords {FROM claus
28d50 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e}</tcl>..<p>The
28d60 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
28d70 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   by a simple SEL
28d80 45 43 54 20 71 75 65 72 79 20 69 73 20 61 20 73  ECT query is a s
28d90 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72  et of <i>N</i> r
28da0 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f  ows .each <i>M</
28db0 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e  i> columns wide.
28dc0 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52  ..<p>^(If the FR
28dd0 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  OM clause is omi
28de0 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70  tted from a simp
28df0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
28e00 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69  ent, then the .i
28e10 6e 70 75 74 20 64 61 74 61 20 69 73 20 69 6d 70  nput data is imp
28e20 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
28e30 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e   row zero column
28e40 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c  s wide)^ (i.e. <
28e50 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69  i>N</i>=1 and.<i
28e60 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49  >M</i>=0)...<p>I
28e70 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  f a FROM clause 
28e80 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
28e90 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20  e data on which 
28ea0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
28eb0 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63  query.operates c
28ec0 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e  omes from the on
28ed0 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
28ee0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 28   or subqueries (
28ef0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
28f00 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73  s.in parenthesis
28f10 29 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c  ) specified foll
28f20 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b  owing the FROM k
28f30 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 71 75  eyword. ^A subqu
28f40 65 72 79 20 73 70 65 63 69 66 69 65 64 0a 69 6e  ery specified.in
28f50 20 74 68 65 20 74 61 62 6c 65 2d 6f 72 2d 73 75   the table-or-su
28f60 62 71 75 65 72 79 20 66 6f 6c 6c 6f 77 69 6e 67  bquery following
28f70 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
28f80 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45   in a .simple SE
28f90 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
28fa0 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69 66 20  s.handled as if 
28fb0 69 74 20 77 61 73 20 61 20 74 61 62 6c 65 20 63  it was a table c
28fc0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 61  ontaining the da
28fd0 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ta returned by e
28fe0 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73 75 62  xecuting the.sub
28ff0 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e  query statement.
29000 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66   ^Each column of
29010 20 74 68 65 20 73 75 62 71 75 65 72 79 20 68 61   the subquery ha
29020 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e  s the.[collation
29030 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65  |collation seque
29040 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69  nce] and [affini
29050 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ty] of the corre
29060 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73  sponding express
29070 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62 71 75  ion.in the subqu
29080 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ery statement...
29090 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
290a0 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61  only a single ta
290b0 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
290c0 69 6e 20 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75  in the FROM.clau
290d0 73 65 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 70  se, then the inp
290e0 75 74 20 64 61 74 61 20 75 73 65 64 20 62 79 20  ut data used by 
290f0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
29100 6d 65 6e 74 20 69 73 20 74 68 65 20 63 6f 6e 74  ment is the cont
29110 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65  ents of the.name
29120 64 20 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65  d table. ^If the
29130 72 65 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20  re is more than 
29140 6f 6e 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62  one table or sub
29150 71 75 65 72 79 20 69 6e 20 46 52 4f 4d 20 63 6c  query in FROM cl
29160 61 75 73 65 0a 74 68 65 6e 20 74 68 65 20 63 6f  ause.then the co
29170 6e 74 65 6e 74 73 20 6f 66 20 61 6c 6c 20 74 61  ntents of all ta
29180 62 6c 65 73 20 61 6e 64 2f 6f 72 20 73 75 62 71  bles and/or subq
29190 75 65 72 69 65 73 0a 61 72 65 20 6a 6f 69 6e 65  ueries.are joine
291a0 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20  d into a single 
291b0 64 61 74 61 73 65 74 20 66 6f 72 20 74 68 65 20  dataset for the 
291c0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
291d0 61 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61  atement to opera
291e0 74 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68  te on..Exactly h
291f0 6f 77 20 74 68 65 20 64 61 74 61 20 69 73 20 63  ow the data is c
29200 6f 6d 62 69 6e 65 64 20 64 65 70 65 6e 64 73 20  ombined depends 
29210 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 63 20  on the specific 
29220 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 5d 20  [join-operator] 
29230 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72  and.[join-constr
29240 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f  aint] used to co
29250 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73  nnect the tables
29260 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74   or subqueries t
29270 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c  ogether...<p>All
29280 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65   joins in SQLite
29290 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68   are based on th
292a0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
292b0 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20  uct of the left 
292c0 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64  and.right-hand d
292d0 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f  atasets. ^The co
292e0 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72  lumns of the car
292f0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
29300 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a  ataset are, in .
29310 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63  order, all the c
29320 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
29330 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ft-hand dataset 
29340 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20  followed by all 
29350 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
29360 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
29370 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73  taset. ^There is
29380 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61   a row in the ca
29390 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
293a0 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62  dataset.formed b
293b0 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68  y combining each
293c0 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
293d0 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f  ion of a row fro
293e0 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  m the left-hand 
293f0 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20  .and right-hand 
29400 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f  datasets. ^(In o
29410 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
29420 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74  he left-hand dat
29430 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  aset consists of
29440 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>N<sub><small
29450 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
29460 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20  ub></i> rows of 
29470 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>M<sub><small
29480 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
29490 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  ub></i> columns,
294a0 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68   and the right-h
294b0 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c  and dataset of.<
294c0 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72  i>N<sub><small>r
294d0 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  ight</small></su
294e0 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 0a 3c  b></i> rows of.<
294f0 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72  i>M<sub><small>r
29500 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  ight</small></su
29510 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20  b></i> columns, 
29520 74 68 65 6e 20 74 68 65 20 63 61 72 74 65 73 69  then the cartesi
29530 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61 0a  an product is a.
29540 64 61 74 61 73 65 74 20 6f 66 20 0a 3c 69 3e 4e  dataset of .<i>N
29550 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74  <sub><small>left
29560 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 26 74  </small></sub>&t
29570 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c 73 6d 61 6c  imes;N<sub><smal
29580 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c  l>right</small><
29590 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f 77 73 2c 20  /sub></i>.rows, 
295a0 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20  each containing 
295b0 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>M<sub><small
295c0 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
295d0 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  ub>+M<sub><small
295e0 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
295f0 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  sub></i> columns
29600 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  .)^..<p>^If the 
29610 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73  join-operator is
29620 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22   "CROSS JOIN", "
29630 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f  INNER JOIN", "JO
29640 49 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28  IN" or a comma.(
29650 22 2c 22 29 20 61 6e 64 20 74 68 65 72 65 20 69  ",") and there i
29660 73 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47  s no ON or USING
29670 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
29680 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
29690 6a 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74  join is.simply t
296a0 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
296b0 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74  duct of the left
296c0 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20   and right-hand 
296d0 64 61 74 61 73 65 74 73 2e 20 0a 49 66 20 6a 6f  datasets. .If jo
296e0 69 6e 2d 6f 70 65 72 61 74 6f 72 20 64 6f 65 73  in-operator does
296f0 20 68 61 76 65 20 4f 4e 20 6f 72 20 55 53 49 4e   have ON or USIN
29700 47 20 63 6c 61 75 73 65 73 2c 20 74 68 6f 73 65  G clauses, those
29710 20 61 72 65 20 68 61 6e 64 6c 65 64 20 61 63 63   are handled acc
29720 6f 72 64 69 6e 67 20 74 6f 0a 74 68 65 20 66 6f  ording to.the fo
29730 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70  llowing bullet p
29740 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c  oints:..<ul>.  <
29750 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 72  li> <p>^(If ther
29760 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75 73  e is an ON claus
29770 65 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 65 78  e then the ON ex
29780 70 72 65 73 73 69 6f 6e 20 69 73 0a 20 20 20 20  pression is.    
29790 20 20 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72     evaluated for
297a0 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
297b0 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
297c0 63 74 20 61 73 20 61 20 0a 20 20 20 20 20 20 20  ct as a .       
297d0 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
297e0 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20  ion]. Only rows 
297f0 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 65 78  for which the ex
29800 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
29810 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20 74 72  es to .       tr
29820 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ue are included 
29830 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
29840 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  .)^..  <li> <p>^
29850 49 66 20 74 68 65 72 65 20 69 73 20 61 20 55 53  If there is a US
29860 49 4e 47 20 63 6c 61 75 73 65 0a 20 20 20 20 20  ING clause.     
29870 20 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74    then each of t
29880 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  he column names 
29890 73 70 65 63 69 66 69 65 64 20 6d 75 73 74 20 65  specified must e
298a0 78 69 73 74 20 69 6e 20 74 68 65 20 64 61 74 61  xist in the data
298b0 73 65 74 73 20 74 6f 20 0a 20 20 20 20 20 20 20  sets to .       
298c0 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e  both the left an
298d0 64 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 6a  d right of the j
298e0 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 2e 20 5e 28  oin-operator. ^(
298f0 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
29900 20 6e 61 6d 65 64 0a 20 20 20 20 20 20 20 63 6f   named.       co
29910 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78 70 72 65  lumns, the expre
29920 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72  ssion "lhs.X = r
29930 68 73 2e 58 22 20 69 73 20 65 76 61 6c 75 61 74  hs.X" is evaluat
29940 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ed for each row 
29950 6f 66 0a 20 20 20 20 20 20 20 74 68 65 20 63 61  of.       the ca
29960 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
29970 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
29980 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20  pression]. Only 
29990 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20  rows for which. 
299a0 20 20 20 20 20 20 61 6c 6c 20 73 75 63 68 20 65        all such e
299b0 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
299c0 61 74 65 73 20 74 6f 20 74 72 75 65 20 61 72 65  ates to true are
299d0 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   included from t
299e0 68 65 0a 20 20 20 20 20 20 20 72 65 73 75 6c 74  he.       result
299f0 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f   set.)^ ^When co
29a00 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73 20 61  mparing values a
29a10 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61 20  s a result of a 
29a20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
29a30 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20  e.       normal 
29a40 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c 69  rules for handli
29a50 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c 20 63  ng affinities, c
29a60 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
29a70 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20  es and NULL.    
29a80 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d     values in com
29a90 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20  parisons apply. 
29aa0 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  ^The column from
29ab0 20 74 68 65 20 64 61 74 61 73 65 74 20 6f 6e 20   the dataset on 
29ac0 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66 74 2d  the.       left-
29ad0 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
29ae0 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69   join-operator i
29af0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  s considered to 
29b00 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68  be on the left-h
29b10 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64 65 20  and.       side 
29b20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
29b30 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29 20 66  n operator (=) f
29b40 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
29b50 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20  of collation .  
29b60 20 20 20 20 20 73 65 71 75 65 6e 63 65 20 61 6e       sequence an
29b70 64 20 61 66 66 69 6e 69 74 79 20 70 72 65 63 65  d affinity prece
29b80 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c  dence...       <
29b90 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61 69 72  p>^For each pair
29ba0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e   of columns iden
29bb0 74 69 66 69 65 64 20 62 79 20 61 20 55 53 49 4e  tified by a USIN
29bc0 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20 63 6f  G clause, the co
29bd0 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d  lumn.       from
29be0 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
29bf0 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69 74 74  dataset is omitt
29c00 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e  ed from the join
29c10 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 69  ed dataset. ^Thi
29c20 73 20 0a 20 20 20 20 20 20 20 69 73 20 74 68 65  s .       is the
29c30 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65   only difference
29c40 20 62 65 74 77 65 65 6e 20 61 20 55 53 49 4e 47   between a USING
29c50 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74 73 20   clause and its 
29c60 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20  equivalent ON.  
29c70 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e       constraint.
29c80 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  ..  <li> <p>^(If
29c90 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79   the NATURAL key
29ca0 77 6f 72 64 20 69 73 20 69 6e 20 74 68 65 20 6a  word is in the j
29cb0 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74 68 65  oin-operator the
29cc0 6e 20 61 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c  n an.       impl
29cd0 69 63 69 74 20 55 53 49 4e 47 20 63 6c 61 75 73  icit USING claus
29ce0 65 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68  e is added to th
29cf0 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e  e join-constrain
29d00 74 73 2e 20 54 68 65 20 69 6d 70 6c 69 63 69 74  ts. The implicit
29d10 0a 20 20 20 20 20 20 20 55 53 49 4e 47 20 63 6c  .       USING cl
29d20 61 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 65 61  ause contains ea
29d30 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ch of the column
29d40 20 6e 61 6d 65 73 20 74 68 61 74 20 61 70 70 65   names that appe
29d50 61 72 20 69 6e 20 62 6f 74 68 0a 20 20 20 20 20  ar in both.     
29d60 20 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72    the left and r
29d70 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 20  ight-hand input 
29d80 64 61 74 61 73 65 74 73 2e 29 5e 20 5e 49 66 20  datasets.)^ ^If 
29d90 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
29da0 68 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 69  ht-hand.       i
29db0 6e 70 75 74 20 64 61 74 61 73 65 74 73 20 66 65  nput datasets fe
29dc0 61 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20  ature no common 
29dd0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68  column names, th
29de0 65 6e 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  en the NATURAL k
29df0 65 79 77 6f 72 64 0a 20 20 20 20 20 20 20 68 61  eyword.       ha
29e00 73 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74  s no effect on t
29e10 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
29e20 65 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47  e join. ^A USING
29e30 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61   or ON clause ma
29e40 79 0a 20 20 20 20 20 20 20 6e 6f 74 20 62 65 20  y.       not be 
29e50 61 64 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20  added to a join 
29e60 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
29e70 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f  he NATURAL keywo
29e80 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  rd...  <li> <p>^
29e90 28 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65  (If the join-ope
29ea0 72 61 74 6f 72 20 69 73 20 61 20 22 4c 45 46 54  rator is a "LEFT
29eb0 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20   JOIN" or "LEFT 
29ec0 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65  OUTER JOIN", the
29ed0 6e 0a 20 20 20 20 20 20 20 61 66 74 65 72 0a 20  n.       after. 
29ee0 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72 20        the ON or 
29ef0 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67 20  USING filtering 
29f00 63 6c 61 75 73 65 73 20 68 61 76 65 20 62 65 65  clauses have bee
29f10 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65 78  n applied, an ex
29f20 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20 20  tra row is .    
29f30 20 20 20 61 64 64 65 64 20 74 6f 20 74 68 65 20     added to the 
29f40 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63 68 20  output for each 
29f50 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67 69  row in the origi
29f60 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e  nal left-hand in
29f70 70 75 74 20 0a 20 20 20 20 20 20 20 64 61 74 61  put .       data
29f80 73 65 74 20 74 68 61 74 20 63 6f 72 72 65 73 70  set that corresp
29f90 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20  onds to no rows 
29fa0 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f  at all in the co
29fb0 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20 64  mposite.       d
29fc0 61 74 61 73 65 74 20 28 69 66 20 61 6e 79 29 2e  ataset (if any).
29fd0 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72 6f  )^ ^The added ro
29fe0 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20  ws contain NULL 
29ff0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f  values in the co
2a000 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68 61  lumns.       tha
2a010 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79  t would normally
2a020 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20   contain values 
2a030 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20  copied from the 
2a040 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74  right-hand input
2a050 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 2e  .       dataset.
2a060 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57    .</ul>..<p>^(W
2a070 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74 77  hen more than tw
2a080 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f 69  o tables are joi
2a090 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61 73 20  ned together as 
2a0a0 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20 63  part of a FROM c
2a0b0 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20  lause,.the join 
2a0c0 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70  operations are p
2a0d0 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64 65  rocessed in orde
2a0e0 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  r from left to r
2a0f0 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a  ight. In other .
2a100 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d 20  words, the FROM 
2a110 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f  clause (A join-o
2a120 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20  p-1 B join-op-2 
2a130 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  C) is computed a
2a140 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31  s .((A join-op-1
2a150 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29   B) join-op-2 C)
2a160 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
2a170 67 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69 6e 20  gment crossjoin 
2a180 7b 74 72 65 61 74 73 20 74 68 65 20 43 52 4f 53  {treats the CROS
2a190 53 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f 72 20  S JOIN operator 
2a1a0 73 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e  specially}</tcl>
2a1b0 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65  .<p><b>Side note
2a1c0 3a 20 53 70 65 63 69 61 6c 20 68 61 6e 64 6c 69  : Special handli
2a1d0 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e  ng of CROSS JOIN
2a1e0 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69 73 20  .</b>.^There is 
2a1f0 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  no difference be
2a200 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e 45 52  tween the "INNER
2a210 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61   JOIN", "JOIN" a
2a220 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72  nd "," join.oper
2a230 61 74 6f 72 73 2e 20 54 68 65 79 20 61 72 65 20  ators. They are 
2a240 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74 65 72  completely inter
2a250 63 68 61 6e 67 65 61 62 6c 65 20 69 6e 20 53 51  changeable in SQ
2a260 4c 69 74 65 2e 0a 5e 28 54 68 65 20 22 43 52 4f  Lite..^(The "CRO
2a270 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70  SS JOIN" join op
2a280 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65 73 20  erator produces 
2a290 74 68 65 20 73 61 6d 65 20 72 65 73 75 6c 74 20  the same result 
2a2a0 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a  as the ."INNER J
2a2b0 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64  OIN", "JOIN" and
2a2c0 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29 5e   "," operators)^
2a2d0 2c 20 62 75 74 20 69 73 20 0a 5b 43 52 4f 53 53  , but is .[CROSS
2a2e0 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65 64 20 64 69   JOIN|handled di
2a2f0 66 66 65 72 65 6e 74 6c 79 20 62 79 20 74 68 65  fferently by the
2a300 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
2a310 5d 0a 69 6e 20 74 68 61 74 20 69 74 20 70 72 65  ].in that it pre
2a320 76 65 6e 74 73 20 74 68 65 20 71 75 65 72 79 20  vents the query 
2a330 6f 70 74 69 6d 69 7a 65 72 20 66 72 6f 6d 20 72  optimizer from r
2a340 65 6f 72 64 65 72 69 6e 67 0a 74 68 65 20 74 61  eordering.the ta
2a350 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e  bles in the join
2a360 2e 20 20 41 6e 20 61 70 70 6c 69 63 61 74 69 6f  .  An applicatio
2a370 6e 20 70 72 6f 67 72 61 6d 6d 65 72 20 63 61 6e  n programmer can
2a380 20 75 73 65 20 74 68 65 20 43 52 4f 53 53 20 4a   use the CROSS J
2a390 4f 49 4e 20 0a 6f 70 65 72 61 74 6f 72 20 74 6f  OIN .operator to
2a3a0 20 64 69 72 65 63 74 6c 79 20 69 6e 66 6c 75 65   directly influe
2a3b0 6e 63 65 20 74 68 65 20 61 6c 67 6f 72 69 74 68  nce the algorith
2a3c0 6d 20 74 68 61 74 20 69 73 20 63 68 6f 73 65 6e  m that is chosen
2a3d0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a 74 68   to implement.th
2a3e0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2a3f0 6e 74 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67  nt.  Avoid using
2a400 20 43 52 4f 53 53 20 4a 4f 49 4e 20 65 78 63 65   CROSS JOIN exce
2a410 70 74 20 69 6e 20 73 70 65 63 69 66 69 63 20 73  pt in specific s
2a420 69 74 75 61 74 69 6f 6e 73 20 0a 77 68 65 72 65  ituations .where
2a430 20 6d 61 6e 75 61 6c 20 63 6f 6e 74 72 6f 6c 20   manual control 
2a440 6f 66 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  of the query opt
2a450 69 6d 69 7a 65 72 20 69 73 20 64 65 73 69 72 65  imizer is desire
2a460 64 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67 0a  d.  Avoid using.
2a470 43 52 4f 53 53 20 4a 4f 49 4e 20 65 61 72 6c 79  CROSS JOIN early
2a480 20 69 6e 20 74 68 65 20 64 65 76 65 6c 6f 70 6d   in the developm
2a490 65 6e 74 20 6f 66 20 61 6e 20 61 70 70 6c 69 63  ent of an applic
2a4a0 61 74 69 6f 6e 20 61 73 20 64 6f 69 6e 67 20 73  ation as doing s
2a4b0 6f 20 69 73 0a 61 20 3c 61 20 68 72 65 66 3d 22  o is.a <a href="
2a4c0 68 74 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f 63 67  http://c2.com/cg
2a4d0 69 2f 77 69 6b 69 3f 50 72 65 6d 61 74 75 72 65  i/wiki?Premature
2a4e0 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 22 3e 70 72  Optimization">pr
2a4f0 65 6d 61 74 75 72 65 0a 6f 70 74 69 6d 69 7a 61  emature.optimiza
2a500 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65 20 73  tion</a>.  The s
2a510 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
2a520 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 20 69 73  of CROSS JOIN is
2a530 20 61 6e 20 53 51 4c 69 74 65 2d 73 70 65 63 69   an SQLite-speci
2a540 66 69 63 0a 66 65 61 74 75 72 65 20 61 6e 64 20  fic.feature and 
2a550 69 73 20 6e 6f 74 20 61 20 70 61 72 74 20 6f 66  is not a part of
2a560 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 20   standard SQL.. 
2a570 20 20 20 20 20 20 0a 0a 3c 74 63 6c 3e 68 64 5f        ..<tcl>hd_
2a580 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65 63 6c  fragment wherecl
2a590 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  ause</tcl>.<tcl>
2a5a0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57 48 45  hd_keywords {WHE
2a5b0 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e  RE clause}</tcl>
2a5c0 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20  .<p><b>2. WHERE 
2a5d0 63 6c 61 75 73 65 20 66 69 6c 74 65 72 69 6e 67  clause filtering
2a5e0 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61  .</b>..<p>^(If a
2a5f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
2a600 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20   specified, the 
2a610 57 48 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e  WHERE expression
2a620 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f   is evaluated fo
2a630 72 20 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74  r .each row in t
2a640 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 73  he input data as
2a650 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72   a [boolean expr
2a660 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f  ession]. Only ro
2a670 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
2a680 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78  .WHERE clause ex
2a690 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2a6a0 65 73 20 74 6f 20 74 72 75 65 20 61 72 65 20 69  es to true are i
2a6b0 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  ncluded from the
2a6c0 20 64 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a   dataset before.
2a6d0 63 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 20 20 52  continuing.)^  R
2a6e0 6f 77 73 20 61 72 65 20 65 78 63 6c 75 64 65 64  ows are excluded
2a6f0 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74   from the result
2a700 20 69 66 20 74 68 65 20 57 48 45 52 45 20 63 6c   if the WHERE cl
2a710 61 75 73 65 0a 65 76 61 6c 75 61 74 65 73 20 74  ause.evaluates t
2a720 6f 20 65 69 74 68 65 72 20 66 61 6c 73 65 20 6f  o either false o
2a730 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f 72 20  r NULL...<p>For 
2a740 61 20 4a 4f 49 4e 20 6f 72 20 49 4e 4e 45 52 20  a JOIN or INNER 
2a750 4a 4f 49 4e 20 6f 72 20 43 52 4f 53 53 20 4a 4f  JOIN or CROSS JO
2a760 49 4e 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  IN, there is no 
2a770 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
2a780 65 6e 20 0a 61 20 63 6f 6e 73 74 72 61 69 6e 74  en .a constraint
2a790 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2a7a0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
2a7b0 61 6e 64 20 6f 6e 65 20 69 6e 20 74 68 65 20 4f  and one in the O
2a7c0 4e 20 63 6c 61 75 73 65 2e 20 20 48 6f 77 65 76  N clause.  Howev
2a7d0 65 72 2c 0a 66 6f 72 20 61 20 4c 45 46 54 20 4a  er,.for a LEFT J
2a7e0 4f 49 4e 20 6f 72 20 4c 45 46 54 20 4f 55 54 45  OIN or LEFT OUTE
2a7f0 52 20 4a 4f 49 4e 2c 20 74 68 65 20 64 69 66 66  R JOIN, the diff
2a800 65 72 65 6e 63 65 20 69 73 20 76 65 72 79 20 69  erence is very i
2a810 6d 70 6f 72 74 61 6e 74 2e 20 20 0a 49 6e 20 61  mportant.  .In a
2a820 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a 74 68 65 20   LEFT JOIN,.the 
2a830 65 78 74 72 61 20 4e 55 4c 4c 20 72 6f 77 20 66  extra NULL row f
2a840 6f 72 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  or the right-han
2a850 64 20 74 61 62 6c 65 20 69 73 20 61 64 64 65 64  d table is added
2a860 20 61 66 74 65 72 20 4f 4e 20 63 6c 61 75 73 65   after ON clause
2a870 20 70 72 6f 63 65 73 73 69 6e 67 0a 62 75 74 20   processing.but 
2a880 62 65 66 6f 72 65 20 57 48 45 52 45 20 63 6c 61  before WHERE cla
2a890 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  use processing. 
2a8a0 20 41 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66   A constraint of
2a8b0 20 74 68 65 20 66 6f 72 6d 20 22 6c 65 66 74 2e   the form "left.
2a8c0 78 3d 72 69 67 68 74 2e 79 22 0a 69 6e 20 61 6e  x=right.y".in an
2a8d0 20 4f 4e 20 63 6c 61 75 73 65 20 77 69 6c 6c 20   ON clause will 
2a8e0 74 68 65 72 65 66 6f 72 65 20 61 6c 6c 6f 77 20  therefore allow 
2a8f0 74 68 72 6f 75 67 68 20 74 68 65 20 61 64 64 65  through the adde
2a900 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72 6f 77 73 20  d all-NULL rows 
2a910 6f 66 20 74 68 65 0a 72 69 67 68 74 20 74 61 62  of the.right tab
2a920 6c 65 2e 20 20 42 75 74 20 69 66 20 74 68 61 74  le.  But if that
2a930 20 73 61 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74   same constraint
2a940 20 69 73 20 69 6e 20 74 68 65 20 57 48 45 52 45   is in the WHERE
2a950 20 63 6c 61 75 73 65 20 61 20 4e 55 4c 4c 20 69   clause a NULL i
2a960 6e 0a 22 72 69 67 68 74 2e 79 22 20 77 69 6c 6c  n."right.y" will
2a970 20 70 72 65 76 65 6e 74 20 74 68 65 20 65 78 70   prevent the exp
2a980 72 65 73 73 69 6f 6e 20 22 6c 65 66 74 2e 78 3d  ression "left.x=
2a990 72 69 67 68 74 2e 79 22 20 66 72 6f 6d 20 62 65  right.y" from be
2a9a0 69 6e 67 20 74 72 75 65 2c 20 61 6e 64 0a 74 68  ing true, and.th
2a9b0 75 73 20 65 78 63 6c 75 64 65 20 74 68 61 74 20  us exclude that 
2a9c0 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6f 75 74  row from the out
2a9d0 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47  put...<p><b>3. G
2a9e0 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
2a9f0 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2aa00 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ows.</b>.<tcl>hd
2aa10 5f 66 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74  _fragment result
2aa20 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68  set</tcl>.<tcl>h
2aa30 64 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75  d_keywords {resu
2aa40 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f  lt-set expressio
2aa50 6e 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f  ns} {GROUP BY}</
2aa60 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68  tcl>..<p>Once th
2aa70 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f  e input data fro
2aa80 6d 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  m the FROM claus
2aa90 65 20 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65  e has been filte
2aaa0 72 65 64 20 62 79 20 74 68 65 0a 57 48 45 52 45  red by the.WHERE
2aab0 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
2aac0 6f 6e 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65  on (if any), the
2aad0 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2aae0 6f 77 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70  ows for the simp
2aaf0 6c 65 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63  le .SELECT are c
2ab00 61 6c 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74  alculated. Exact
2ab10 6c 79 20 68 6f 77 20 74 68 69 73 20 69 73 20 64  ly how this is d
2ab20 6f 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77  one depends on w
2ab30 68 65 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c  hether the simpl
2ab40 65 20 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20  e .SELECT is an 
2ab50 61 67 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e  aggregate or non
2ab60 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
2ab70 2c 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  , and whether or
2ab80 20 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20   not a GROUP.BY 
2ab90 63 6c 61 75 73 65 20 77 61 73 20 73 70 65 63 69  clause was speci
2aba0 66 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c  fied...<p> The l
2abb0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
2abc0 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 53  ns between the S
2abd0 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b  ELECT and FROM k
2abe0 65 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e  eywords is known
2abf0 20 61 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65   as.the result e
2ac00 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20  xpression list. 
2ac10 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65 78   ^If a result ex
2ac20 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
2ac30 73 70 65 63 69 61 6c 20 65 78 70 72 65 73 73 69  special expressi
2ac40 6f 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20  on."*" then all 
2ac50 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
2ac60 6e 70 75 74 20 64 61 74 61 20 61 72 65 20 73 75  nput data are su
2ac70 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68  bstituted for th
2ac80 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f  at one expressio
2ac90 6e 2e 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72  n..^(If the expr
2aca0 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c  ession is the al
2acb0 69 61 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f  ias of a table o
2acc0 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
2acd0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f  e FROM clause.fo
2ace0 6c 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74  llowed by ".*" t
2acf0 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  hen all columns 
2ad00 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74  from the named t
2ad10 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
2ad20 20 61 72 65 0a 73 75 62 73 74 69 74 75 74 65 64   are.substituted
2ad30 20 66 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20   for the single 
2ad40 65 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28  expression.)^ ^(
2ad50 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
2ad60 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22  o use a "*" or."
2ad70 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73  alias.*" express
2ad80 69 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65  ion in any conte
2ad90 78 74 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  xt other than a 
2ada0 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2adb0 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69  n list.)^.^(It i
2adc0 73 20 61 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20  s also an error 
2add0 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 20  to use a "*" or 
2ade0 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73  "alias.*" expres
2adf0 73 69 6f 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65  sion in a simple
2ae00 20 53 45 4c 45 43 54 0a 71 75 65 72 79 20 74 68   SELECT.query th
2ae10 61 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  at does not have
2ae20 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29   a FROM clause.)
2ae30 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d  ^..<p> ^(The num
2ae40 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
2ae50 6e 20 74 68 65 20 72 6f 77 73 20 72 65 74 75 72  n the rows retur
2ae60 6e 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20  ned by a simple 
2ae70 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2ae80 0a 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65  .is equal to the
2ae90 20 6e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   number of expre
2aea0 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65  ssions in the re
2aeb0 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
2aec0 6c 69 73 74 20 61 66 74 65 72 0a 73 75 62 73 74  list after.subst
2aed0 69 74 75 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64  itution of * and
2aee0 20 61 6c 69 61 73 2e 2a 20 65 78 70 72 65 73 73   alias.* express
2aef0 69 6f 6e 73 2e 29 5e 20 45 61 63 68 20 72 65 73  ions.)^ Each res
2af00 75 6c 74 20 72 6f 77 20 69 73 20 63 61 6c 63 75  ult row is calcu
2af10 6c 61 74 65 64 20 62 79 0a 65 76 61 6c 75 61 74  lated by.evaluat
2af20 69 6e 67 20 74 68 65 20 65 78 70 72 65 73 73 69  ing the expressi
2af30 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ons in the resul
2af40 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  t expression lis
2af50 74 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74  t with respect t
2af60 6f 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f  o a.single row o
2af70 66 20 69 6e 70 75 74 20 64 61 74 61 20 6f 72 2c  f input data or,
2af80 20 66 6f 72 20 61 67 67 72 65 67 61 74 65 20 71   for aggregate q
2af90 75 65 72 69 65 73 2c 20 77 69 74 68 20 72 65 73  ueries, with res
2afa0 70 65 63 74 20 74 6f 20 61 20 67 72 6f 75 70 0a  pect to a group.
2afb0 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20  of rows...<ul>. 
2afc0 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
2afd0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2afe0 20 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67   is <b>a non-agg
2aff0 72 65 67 61 74 65 20 71 75 65 72 79 3c 2f 62 3e  regate query</b>
2b000 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68  , then .    each
2b010 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2b020 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73  he result expres
2b030 73 69 6f 6e 20 6c 69 73 74 20 69 73 20 65 76 61  sion list is eva
2b040 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
2b050 72 6f 77 20 69 6e 0a 20 20 20 20 74 68 65 20 64  row in.    the d
2b060 61 74 61 73 65 74 20 66 69 6c 74 65 72 65 64 20  ataset filtered 
2b070 62 79 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  by the WHERE cla
2b080 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  use...  <li><p>^
2b090 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  If the SELECT st
2b0a0 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e  atement is <b>an
2b0b0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
2b0c0 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50   without a GROUP
2b0d0 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75  .    BY</b> clau
2b0e0 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 61 67  se, then each ag
2b0f0 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2b100 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
2b110 2d 73 65 74 20 69 73 20 0a 20 20 20 20 65 76 61  -set is .    eva
2b120 6c 75 61 74 65 64 20 6f 6e 63 65 20 61 63 72 6f  luated once acro
2b130 73 73 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ss the entire da
2b140 74 61 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e  taset. ^Each non
2b150 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2b160 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65  ssion.    in the
2b170 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65   result-set is e
2b180 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
2b190 72 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79  r an arbitrarily
2b1a0 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 6f 66   selected row of
2b1b0 0a 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74  .    the dataset
2b1c0 2e 20 5e 54 68 65 20 73 61 6d 65 20 61 72 62 69  . ^The same arbi
2b1d0 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64  trarily selected
2b1e0 20 72 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72   row is used for
2b1f0 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67   each.    non-ag
2b200 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2b210 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20  on. ^Or, if the 
2b220 64 61 74 61 73 65 74 20 63 6f 6e 74 61 69 6e 73  dataset contains
2b230 20 7a 65 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e   zero rows, then
2b240 20 0a 20 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61   .    each non-a
2b250 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
2b260 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
2b270 20 61 67 61 69 6e 73 74 20 61 20 72 6f 77 20 63   against a row c
2b280 6f 6e 73 69 73 74 69 6e 67 0a 20 20 20 20 65 6e  onsisting.    en
2b290 74 69 72 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76  tirely of NULL v
2b2a0 61 6c 75 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54  alues...   <p>^T
2b2b0 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66  he single row of
2b2c0 20 72 65 73 75 6c 74 2d 73 65 74 20 64 61 74 61   result-set data
2b2d0 20 63 72 65 61 74 65 64 20 62 79 20 65 76 61 6c   created by eval
2b2e0 75 61 74 69 6e 67 20 74 68 65 20 61 67 67 72 65  uating the aggre
2b2f0 67 61 74 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e  gate.    and non
2b300 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2b310 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65  ssions in the re
2b320 73 75 6c 74 2d 73 65 74 20 66 6f 72 6d 73 20 74  sult-set forms t
2b330 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a  he result of an.
2b340 20 20 20 20 61 67 67 72 65 67 61 74 65 20 71 75      aggregate qu
2b350 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52  ery without a GR
2b360 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 5e  OUP BY clause. ^
2b370 41 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  An aggregate que
2b380 72 79 20 77 69 74 68 6f 75 74 20 61 0a 20 20 20  ry without a.   
2b390 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2b3a0 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20   always returns 
2b3b0 65 78 61 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20  exactly one row 
2b3c0 6f 66 20 64 61 74 61 2c 20 65 76 65 6e 20 69 66  of data, even if
2b3d0 20 74 68 65 72 65 20 61 72 65 0a 20 20 20 20 7a   there are.    z
2b3e0 65 72 6f 20 72 6f 77 73 20 6f 66 20 69 6e 70 75  ero rows of inpu
2b3f0 74 20 64 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c  t data...  <li><
2b400 70 3e 5e 28 49 66 20 74 68 65 20 53 45 4c 45 43  p>^(If the SELEC
2b410 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
2b420 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
2b430 75 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55  uery with a GROU
2b440 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61  P.    BY</b> cla
2b450 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 6f  use, then each o
2b460 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
2b470 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
2b480 61 72 74 20 6f 66 20 74 68 65 0a 20 20 20 20 47  art of the.    G
2b490 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 69  ROUP BY clause i
2b4a0 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
2b4b0 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
2b4c0 64 61 74 61 73 65 74 2e 20 45 61 63 68 20 72 6f  dataset. Each ro
2b4d0 77 0a 20 20 20 20 69 73 20 74 68 65 6e 20 61 73  w.    is then as
2b4e0 73 69 67 6e 65 64 20 74 6f 20 61 20 22 67 72 6f  signed to a "gro
2b4f0 75 70 22 20 62 61 73 65 64 20 6f 6e 20 74 68 65  up" based on the
2b500 20 72 65 73 75 6c 74 73 3b 20 72 6f 77 73 20 66   results; rows f
2b510 6f 72 20 77 68 69 63 68 0a 20 20 20 20 74 68 65  or which.    the
2b520 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c   results of eval
2b530 75 61 74 69 6e 67 20 74 68 65 20 47 52 4f 55 50  uating the GROUP
2b540 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20   BY expressions 
2b550 61 72 65 20 74 68 65 20 73 61 6d 65 20 67 65 74  are the same get
2b560 0a 20 20 20 20 61 73 73 69 67 6e 65 64 20 74 6f  .    assigned to
2b570 20 74 68 65 20 73 61 6d 65 20 67 72 6f 75 70 2e   the same group.
2b580 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70  )^ ^For the purp
2b590 6f 73 65 73 20 6f 66 20 67 72 6f 75 70 69 6e 67  oses of grouping
2b5a0 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20   rows, NULL .   
2b5b0 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
2b5c0 69 64 65 72 65 64 20 65 71 75 61 6c 2e 20 5e 54  idered equal. ^T
2b5d0 68 65 20 75 73 75 61 6c 20 72 75 6c 65 73 20 66  he usual rules f
2b5e0 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65  or [collation|se
2b5f0 6c 65 63 74 69 6e 67 20 61 0a 20 20 20 20 63 6f  lecting a.    co
2b600 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2b610 5d 20 77 69 74 68 20 77 68 69 63 68 20 74 6f 20  ] with which to 
2b620 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c  compare text val
2b630 75 65 73 20 61 70 70 6c 79 20 77 68 65 6e 20 65  ues apply when e
2b640 76 61 6c 75 61 74 69 6e 67 0a 20 20 20 20 65 78  valuating.    ex
2b650 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47  pressions in a G
2b660 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20  ROUP BY clause. 
2b670 20 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e   ^The expression
2b680 73 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42  s in the GROUP B
2b690 59 20 63 6c 61 75 73 65 0a 20 20 20 20 64 6f 20  Y clause.    do 
2b6a0 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76  <em>not</em> hav
2b6b0 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 69  e to be expressi
2b6c0 6f 6e 73 20 74 68 61 74 20 61 70 70 65 61 72 20  ons that appear 
2b6d0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 5e  in the result. ^
2b6e0 54 68 65 0a 20 20 20 20 65 78 70 72 65 73 73 69  The.    expressi
2b6f0 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42  ons in a GROUP B
2b700 59 20 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74  Y clause may not
2b710 20 62 65 20 61 67 67 72 65 67 61 74 65 20 65 78   be aggregate ex
2b720 70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20  pressions...    
2b730 3c 70 3e 5e 28 49 66 20 61 20 48 41 56 49 4e 47  <p>^(If a HAVING
2b740 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
2b750 66 69 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c  fied, it is eval
2b760 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65  uated once for e
2b770 61 63 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f  ach group .    o
2b780 66 20 72 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f  f rows as a [boo
2b790 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
2b7a0 2e 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20  . If the result 
2b7b0 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
2b7c0 65 0a 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61  e.    HAVING cla
2b7d0 75 73 65 20 69 73 20 66 61 6c 73 65 2c 20 74 68  use is false, th
2b7e0 65 20 67 72 6f 75 70 20 69 73 20 64 69 73 63 61  e group is disca
2b7f0 72 64 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20  rded.)^ ^If the 
2b800 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73  HAVING clause is
2b810 0a 20 20 20 20 61 6e 20 61 67 67 72 65 67 61 74  .    an aggregat
2b820 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74  e expression, it
2b830 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 63   is evaluated ac
2b840 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e  ross all rows in
2b850 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a   the group. ^If.
2b860 20 20 20 20 61 20 48 41 56 49 4e 47 20 63 6c 61      a HAVING cla
2b870 75 73 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67  use is a non-agg
2b880 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2b890 6e 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  n, it is evaluat
2b8a0 65 64 20 77 69 74 68 20 72 65 73 70 65 63 74 0a  ed with respect.
2b8b0 20 20 20 20 74 6f 20 61 6e 20 61 72 62 69 74 72      to an arbitr
2b8c0 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72  arily selected r
2b8d0 6f 77 20 66 72 6f 6d 20 74 68 65 20 67 72 6f 75  ow from the grou
2b8e0 70 2e 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20  p.  ^The HAVING 
2b8f0 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20  expression may. 
2b900 20 20 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75     refer to valu
2b910 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61  es, even aggrega
2b920 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68  te functions, th
2b930 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68  at are not in th
2b940 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20  e result.</p>.. 
2b950 20 20 20 3c 70 3e 5e 45 61 63 68 20 65 78 70 72     <p>^Each expr
2b960 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
2b970 73 75 6c 74 2d 73 65 74 20 69 73 20 74 68 65 6e  sult-set is then
2b980 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
2b990 66 6f 72 20 65 61 63 68 0a 20 20 20 20 67 72 6f  for each.    gro
2b9a0 75 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20  up of rows. ^If 
2b9b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
2b9c0 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65  s an aggregate e
2b9d0 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73  xpression, it is
2b9e0 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20   .    evaluated 
2b9f0 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20  across all rows 
2ba00 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f  in the group. ^O
2ba10 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 20  therwise, it is 
2ba20 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73  evaluated agains
2ba30 74 0a 20 20 20 20 61 20 73 69 6e 67 6c 65 20 61  t.    a single a
2ba40 72 62 69 74 72 61 72 69 6c 79 20 63 68 6f 73 65  rbitrarily chose
2ba50 6e 20 72 6f 77 20 66 72 6f 6d 20 77 69 74 68 69  n row from withi
2ba60 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66  n the group. ^If
2ba70 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 0a 20   there is more. 
2ba80 20 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d     than one non-
2ba90 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2baa0 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
2bab0 6c 74 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  lt-set, then all
2bac0 20 73 75 63 68 0a 20 20 20 20 65 78 70 72 65 73   such.    expres
2bad0 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61  sions are evalua
2bae0 74 65 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ted for the same
2baf0 20 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45   row...    <p>^E
2bb00 61 63 68 20 67 72 6f 75 70 20 6f 66 20 69 6e 70  ach group of inp
2bb10 75 74 20 64 61 74 61 73 65 74 20 72 6f 77 73 20  ut dataset rows 
2bb20 63 6f 6e 74 72 69 62 75 74 65 73 20 61 20 73 69  contributes a si
2bb30 6e 67 6c 65 20 72 6f 77 20 74 6f 20 74 68 65 20  ngle row to the 
2bb40 0a 20 20 20 20 73 65 74 20 6f 66 20 72 65 73 75  .    set of resu
2bb50 6c 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63  lt rows. ^Subjec
2bb60 74 20 74 6f 20 66 69 6c 74 65 72 69 6e 67 20 61  t to filtering a
2bb70 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
2bb80 68 65 20 44 49 53 54 49 4e 43 54 0a 20 20 20 20  he DISTINCT.    
2bb90 6b 65 79 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d  keyword, the num
2bba0 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75  ber of rows retu
2bbb0 72 6e 65 64 20 62 79 20 61 6e 20 61 67 67 72 65  rned by an aggre
2bbc0 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20  gate query with 
2bbd0 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59 20 63  a GROUP.    BY c
2bbe0 6c 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d  lause is the sam
2bbf0 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e as the number 
2bc00 6f 66 20 67 72 6f 75 70 73 20 6f 66 20 72 6f 77  of groups of row
2bc10 73 20 70 72 6f 64 75 63 65 64 20 62 79 20 61 70  s produced by ap
2bc20 70 6c 79 69 6e 67 0a 20 20 20 20 74 68 65 20 47  plying.    the G
2bc30 52 4f 55 50 20 42 59 20 61 6e 64 20 48 41 56 49  ROUP BY and HAVI
2bc40 4e 47 20 63 6c 61 75 73 65 73 20 74 6f 20 74 68  NG clauses to th
2bc50 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
2bc60 20 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a   dataset..</ul>.
2bc70 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61  .<p><b>4. Remova
2bc80 6c 20 6f 66 20 64 75 70 6c 69 63 61 74 65 20 72  l of duplicate r
2bc90 6f 77 73 20 28 44 49 53 54 49 4e 43 54 20 70 72  ows (DISTINCT pr
2bca0 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c  ocessing).</b>.<
2bcb0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2bcc0 64 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c  distinct</tcl>.<
2bcd0 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
2bce0 7b 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e  {DISTINCT}</tcl>
2bcf0 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65  ..<p>^One of the
2bd00 20 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54   ALL or DISTINCT
2bd10 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f   keywords may fo
2bd20 6c 6c 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20  llow the SELECT 
2bd30 6b 65 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69  keyword in a .si
2bd40 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
2bd50 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 73  ement. ^If the s
2bd60 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20  imple SELECT is 
2bd70 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68  a SELECT ALL, th
2bd80 65 6e 20 74 68 65 0a 65 6e 74 69 72 65 20 73 65  en the.entire se
2bd90 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
2bda0 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79   are returned by
2bdb0 20 74 68 65 20 53 45 4c 45 43 54 2e 20 5e 49 66   the SELECT. ^If
2bdc0 20 6e 65 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a   neither ALL or.
2bdd0 44 49 53 54 49 4e 43 54 20 61 72 65 20 70 72 65  DISTINCT are pre
2bde0 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62  sent, then the b
2bdf0 65 68 61 76 69 6f 72 20 69 73 20 61 73 20 69 66  ehavior is as if
2be00 20 41 4c 4c 20 77 65 72 65 20 73 70 65 63 69 66   ALL were specif
2be10 69 65 64 2e 20 0a 5e 49 66 20 74 68 65 20 73 69  ied. .^If the si
2be20 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61  mple SELECT is a
2be30 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54   SELECT DISTINCT
2be40 2c 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65  , then duplicate
2be50 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65   rows are remove
2be60 64 0a 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f  d.from the set o
2be70 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 62 65  f result rows be
2be80 66 6f 72 65 20 69 74 20 69 73 20 72 65 74 75 72  fore it is retur
2be90 6e 65 64 2e 20 5e 46 6f 72 20 74 68 65 20 70 75  ned. ^For the pu
2bea0 72 70 6f 73 65 73 20 6f 66 0a 64 65 74 65 63 74  rposes of.detect
2beb0 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
2bec0 77 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c  ws, two NULL val
2bed0 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
2bee0 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 20  ed to be equal. 
2bef0 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65  ^The.normal rule
2bf00 73 20 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20  s for selecting 
2bf10 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
2bf20 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20  ence to compare 
2bf30 74 65 78 74 20 76 61 6c 75 65 73 20 77 69 74 68  text values with
2bf40 0a 61 70 70 6c 79 2e 0a 0a 3c 74 63 6c 3e 0a 68  .apply...<tcl>.h
2bf50 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f  d_fragment compo
2bf60 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65  und {compound se
2bf70 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20  lect} {compound 
2bf80 71 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64  query} {compound
2bf90 20 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f 75   SELECT} {compou
2bfa0 6e 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f 74 63  nd SELECTs}.</tc
2bfb0 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20  l>.<h3>Compound 
2bfc0 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74  Select Statement
2bfd0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f  s</h3>..<p>Two o
2bfe0 72 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65 20 53  r more [simple S
2bff0 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2c000 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74  s may be connect
2c010 65 64 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66  ed together to f
2c020 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53  orm.a compound S
2c030 45 4c 45 43 54 20 75 73 69 6e 67 20 74 68 65 20  ELECT using the 
2c040 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c  UNION, UNION ALL
2c050 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45  , INTERSECT or E
2c060 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 2c 0a  XCEPT operator,.
2c070 61 73 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20  as shown by the 
2c080 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61  following diagra
2c090 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73  m:..<tcl>.Recurs
2c0a0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
2c0b0 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74   compound-select
2c0c0 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
2c0d0 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  >^In a compound 
2c0e0 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20  SELECT, all the 
2c0f0 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45  constituent SELE
2c100 43 54 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20  CTs must return 
2c110 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72  the same .number
2c120 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d   of result colum
2c130 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d 70  ns. ^As the comp
2c140 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70  onents of a comp
2c150 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75 73 74  ound SELECT must
2c160 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  .be simple SELEC
2c170 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68  T statements, th
2c180 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61  ey may not conta
2c190 69 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72  in [ORDER BY] or
2c1a0 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73   [LIMIT] clauses
2c1b0 2e 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e  ..^[ORDER BY] an
2c1c0 64 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65  d [LIMIT] clause
2c1d0 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72  s may only occur
2c1e0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
2c1f0 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75  he entire compou
2c200 6e 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64 20 74  nd.SELECT, and t
2c210 68 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  hen only if the 
2c220 66 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66  final element of
2c230 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 69 73   the compound is
2c240 20 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53 5d 20   not a [VALUES] 
2c250 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63  clause...<p>^A c
2c260 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63  ompound SELECT c
2c270 72 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49  reated using UNI
2c280 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20  ON ALL operator 
2c290 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20  returns all the 
2c2a0 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45  rows.from the SE
2c2b0 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74  LECT to the left
2c2c0 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c   of the UNION AL
2c2d0 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20  L operator, and 
2c2e0 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f  all the rows.fro
2c2f0 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20  m the SELECT to 
2c300 74 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e  the right of it.
2c310 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72   ^The UNION oper
2c320 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73  ator works the s
2c330 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e  ame way as.UNION
2c340 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61   ALL, except tha
2c350 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  t duplicate rows
2c360 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
2c370 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75  m the final resu
2c380 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54  lt set..^The INT
2c390 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20  ERSECT operator 
2c3a0 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65  returns the inte
2c3b0 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  rsection of the 
2c3c0 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c  results of the l
2c3d0 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45  eft and.right SE
2c3e0 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43  LECTs.  ^The EXC
2c3f0 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74  EPT operator ret
2c400 75 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20  urns the subset 
2c410 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  of rows returned
2c420 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c   by the.left SEL
2c430 45 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ECT that are not
2c440 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62   also returned b
2c450 79 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  y the right-hand
2c460 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63   SELECT. ^Duplic
2c470 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d  ate.rows are rem
2c480 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  oved from the re
2c490 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45  sults of INTERSE
2c4a0 43 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70  CT and EXCEPT op
2c4b0 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74  erators before t
2c4c0 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73  he.result set is
2c4d0 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e   returned...<p>^
2c4e0 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
2c4f0 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20   of determining 
2c500 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66  duplicate rows f
2c510 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  or the results o
2c520 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43  f compound.SELEC
2c530 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c  T operators, NUL
2c540 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
2c550 73 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f  sidered equal to
2c560 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
2c570 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20  es and.distinct 
2c580 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  from all non-NUL
2c590 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63  L values. ^The c
2c5a0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2c5b0 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  e used to compar
2c5c0 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75  e .two text valu
2c5d0 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  es is determined
2c5e0 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d   as if the colum
2c5f0 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ns of the left a
2c600 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45  nd right-hand.SE
2c610 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
2c620 77 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e  were the left an
2c630 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65  d right-hand ope
2c640 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75  rands of the equ
2c650 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72  als (=).operator
2c660 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72  , except that gr
2c670 65 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65  eater precedence
2c680 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64   is not assigned
2c690 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20   to a collation 
2c6a0 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66  .sequence specif
2c6b0 69 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73  ied with the pos
2c6c0 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65  tfix COLLATE ope
2c6d0 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e  rator. ^No affin
2c6e0 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69  ity.transformati
2c6f0 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20  ons are applied 
2c700 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68  to any values wh
2c710 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77  en comparing row
2c720 73 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63  s as part of a.c
2c730 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20  ompound SELECT. 
2c740 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65  ..<p>^(When thre
2c750 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65  e or more simple
2c760 20 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e   SELECTs are con
2c770 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f  nected into a co
2c780 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74  mpound SELECT,.t
2c790 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c  hey group from l
2c7a0 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e  eft to right. In
2c7b0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
2c7c0 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43   "A", "B" and "C
2c7d0 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65  " are all.simple
2c7e0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2c7f0 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43  ts, (A op B op C
2c800 29 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61  ) is processed a
2c810 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43  s ((A op B) op C
2c820 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ).)^..</p>..<tcl
2c830 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64  >hd_fragment ord
2c840 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 20  erby {order by} 
2c850 7b 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63 6c 3e  {ORDER BY}</tcl>
2c860 0a 3c 68 33 3e 54 68 65 20 4f 52 44 45 52 20 42  .<h3>The ORDER B
2c870 59 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c  Y clause</h3>..<
2c880 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20 73 74  p>If a SELECT st
2c890 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72 65 74  atement that ret
2c8a0 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f  urns more than o
2c8b0 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ne row does not 
2c8c0 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20 42 59  have an.ORDER BY
2c8d0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f 72 64   clause, the ord
2c8e0 65 72 20 69 6e 20 77 68 69 63 68 20 74 68 65 20  er in which the 
2c8f0 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
2c900 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  d is undefined..
2c910 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43 54 20  Or, if a SELECT 
2c920 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 68  statement does h
2c930 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20  ave an ORDER BY 
2c940 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
2c950 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65 73 73   list of.express
2c960 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20 74 6f  ions attached to
2c970 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 64 65   the ORDER BY de
2c980 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72 64 65  termine the orde
2c990 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a  r in which rows.
2c9a0 61 72 65 20 72 65 74 75 72 6e 65 64 20 74 6f 20  are returned to 
2c9b0 74 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a 5e  the user...<p>.^
2c9c0 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  In a [compound S
2c9d0 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2c9e0 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 20  , only the last 
2c9f0 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73  or right-most [s
2ca00 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61  imple SELECT].ma
2ca10 79 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20  y have an ORDER 
2ca20 42 59 20 63 6c 61 75 73 65 2e 20 5e 54 68 61 74  BY clause. ^That
2ca30 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2ca40 20 77 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f   will apply acro
2ca50 73 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20  ss all elements 
2ca60 6f 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  of.the compound.
2ca70 20 5e 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d   ^If the right-m
2ca80 6f 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  ost element of a
2ca90 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43   [compound SELEC
2caa0 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d  T] is a [VALUES]
2cab0 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f   clause,.then no
2cac0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2cad0 20 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74   is allowed on t
2cae0 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  hat statement...
2caf0 0a 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69  .<p>^Rows are fi
2cb00 72 73 74 20 73 6f 72 74 65 64 20 62 61 73 65 64  rst sorted based
2cb10 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
2cb20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of.evaluating th
2cb30 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72  e left-most expr
2cb40 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52  ession in the OR
2cb50 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65  DER BY list, the
2cb60 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65  n ties are broke
2cb70 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  n.by evaluating 
2cb80 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d  the second left-
2cb90 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
2cba0 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f  and so on. The o
2cbb0 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77  rder in which.tw
2cbc0 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  o rows for which
2cbd0 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
2cbe0 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61  pressions evalua
2cbf0 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75  te to equal valu
2cc00 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20  es are.returned 
2cc10 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45  is undefined. ^E
2cc20 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70  ach ORDER BY exp
2cc30 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f  ression may be o
2cc40 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
2cc50 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ed.by one of the
2cc60 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28 73   keywords ASC (s
2cc70 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72  maller values ar
2cc80 65 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74  e returned first
2cc90 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65  ) or DESC (large
2cca0 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65 74  r.values are ret
2ccb0 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49  urned first). ^I
2ccc0 66 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72  f neither ASC or
2ccd0 20 44 45 53 43 20 61 72 65 20 73 70 65 63 69 66   DESC are specif
2cce0 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f  ied, rows.are so
2ccf0 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e  rted in ascendin
2cd00 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65  g (smaller value
2cd10 73 20 66 69 72 73 74 29 20 6f 72 64 65 72 20 62  s first) order b
2cd20 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45  y default...<p>E
2cd30 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70  ach ORDER BY exp
2cd40 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65  ression is proce
2cd50 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ssed as follows:
2cd60 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ol>.<li><
2cd70 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20  p>^If the ORDER 
2cd80 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2cd90 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65   a constant inte
2cda0 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65  ger K then the.e
2cdb0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e  xpression is con
2cdc0 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73  sidered an alias
2cdd0 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f   for the K-th co
2cde0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
2cdf0 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20  lt set.(columns 
2ce00 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f  are numbered fro
2ce10 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20  m left to right 
2ce20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 29  starting with 1)
2ce30 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  ...<li><p>^If th
2ce40 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
2ce50 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e  ssion is an iden
2ce60 74 69 66 69 65 72 20 74 68 61 74 20 63 6f 72 72  tifier that corr
2ce70 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61  esponds to.the a
2ce80 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74  lias of one of t
2ce90 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  he output column
2cea0 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72  s, then the expr
2ceb0 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64  ession is consid
2cec0 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f  ered.an alias fo
2ced0 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a  r that column...
2cee0 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
2cef0 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
2cf00 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2cf10 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65   any other expre
2cf20 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76  ssion, it .is ev
2cf30 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20  aluated and the 
2cf40 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75  returned value u
2cf50 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65  sed to order the
2cf60 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49   output rows. ^I
2cf70 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f.the SELECT sta
2cf80 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70  tement is a simp
2cf90 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  le SELECT, then 
2cfa0 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20  an ORDER BY may 
2cfb0 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69  contain any.arbi
2cfc0 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e  trary expression
2cfd0 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20  s. ^However, if 
2cfe0 74 68 65 20 53 45 4c 45 43 54 20 69 73 20 61 20  the SELECT is a 
2cff0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
2d000 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65   then.ORDER BY e
2d010 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
2d020 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20  are not aliases 
2d030 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  to output column
2d040 73 20 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c  s must be exactl
2d050 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e  y.the same as an
2d060 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64   expression used
2d070 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f   as an output co
2d080 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  lumn..</ol>..<p>
2d090 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
2d0a0 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77  s of sorting row
2d0b0 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  s, values are co
2d0c0 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20 73 61  mpared in the sa
2d0d0 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63  me way.as for [c
2d0e0 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73  omparison expres
2d0f0 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c  sions]. The coll
2d100 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75  ation sequence u
2d110 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74  sed to compare.t
2d120 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20 69  wo text values i
2d130 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20  s determined as 
2d140 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20  follows:..<ol>. 
2d150 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
2d160 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
2d170 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20  ion is assigned 
2d180 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
2d190 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68 65  ence using.  the
2d1a0 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54   postfix [COLLAT
2d1b0 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65  E operator], the
2d1c0 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
2d1d0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
2d1e0 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20  ce is.  used..  
2d1f0 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
2d200 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
2d210 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2d220 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20   an alias to an 
2d230 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61  expression.  tha
2d240 74 20 68 61 73 20 62 65 65 6e 20 61 73 73 69 67  t has been assig
2d250 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ned a collation 
2d260 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74  sequence using t
2d270 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43  he postfix .  [C
2d280 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d  OLLATE operator]
2d290 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61  , then the colla
2d2a0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73  tion sequence as
2d2b0 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c  signed to the al
2d2c0 69 61 73 65 64 0a 20 20 65 78 70 72 65 73 73 69  iased.  expressi
2d2d0 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c  on is used..  <l
2d2e0 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
2d2f0 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
2d300 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
2d310 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c   column or an al
2d320 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72  ias of.  an expr
2d330 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61  ession that is a
2d340 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68   column, then th
2d350 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
2d360 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ion sequence for
2d370 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  .  the column is
2d380 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70   used. .  <li><p
2d390 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  >^Otherwise, the
2d3a0 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74   [BINARY] collat
2d3b0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20  ion sequence is 
2d3c0 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  used..</ol>..<p>
2d3d0 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  In a [compound S
2d3e0 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2d3f0 2c 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65  , all ORDER BY e
2d400 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68  xpressions are h
2d410 61 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65  andled.as aliase
2d420 73 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65  s for one of the
2d430 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
2d440 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  of the compound.
2d450 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42  .^(If an ORDER B
2d460 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2d470 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
2d480 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74  lias, then SQLit
2d490 65 20 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c  e searches.the l
2d4a0 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20  eft-most SELECT 
2d4b0 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  in the compound 
2d4c0 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c  for a result col
2d4d0 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73  umn that matches
2d4e0 20 65 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f   either.the seco
2d4f0 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65  nd or third rule
2d500 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61  s above. If a ma
2d510 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
2d520 65 20 73 65 61 72 63 68 20 73 74 6f 70 73 20 61  e search stops a
2d530 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd.the expressio
2d540 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20  n is handled as 
2d550 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
2d560 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74   result column t
2d570 68 61 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a  hat it has been.
2d580 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e  matched against.
2d590 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   Otherwise, the 
2d5a0 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74  next SELECT to t
2d5b0 68 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65  he right is trie
2d5c0 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a  d, and so on.)^.
2d5d0 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20  ^If no matching 
2d5e0 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62  expression can b
2d5f0 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72  e found in the r
2d600 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66  esult columns of
2d610 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74   any.constituent
2d620 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61   SELECT, it is a
2d630 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74  n error. ^Each t
2d640 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52  erm of the ORDER
2d650 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72   BY clause is.pr
2d660 6f 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65  ocessed separate
2d670 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61  ly and may be ma
2d680 74 63 68 65 64 20 61 67 61 69 6e 73 74 20 72 65  tched against re
2d690 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f  sult columns fro
2d6a0 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45  m different.SELE
2d6b0 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  CT statements in
2d6c0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f   the compound.</
2d6d0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
2d6e0 6d 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65 74  ment limitoffset
2d6f0 20 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54   {LIMIT} {OFFSET
2d700 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
2d710 4c 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68 33  LIMIT clause</h3
2d720 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54  >..<p>^The LIMIT
2d730 20 63 6c 61 75 73 65 20 69 73 20 75 73 65 64 20   clause is used 
2d740 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65  to place an uppe
2d750 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e  r bound on the n
2d760 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65  umber of rows.re
2d770 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e  turned by the en
2d780 74 69 72 65 20 53 45 4c 45 43 54 20 73 74 61 74  tire SELECT stat
2d790 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61  ement...<p>^In a
2d7a0 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43   [compound SELEC
2d7b0 54 5d 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73  T], only the.las
2d7c0 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20  t or right-most 
2d7d0 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
2d7e0 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49  may contain a LI
2d7f0 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 0a 5e 49  MIT clause.  .^I
2d800 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
2d810 4c 45 43 54 5d 2c 20 0a 74 68 65 20 4c 49 4d 49  LECT], .the LIMI
2d820 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73  T clause applies
2d830 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 63   to the entire c
2d840 6f 6d 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a 75 73  ompound, not jus
2d850 74 20 74 68 65 20 66 69 6e 61 6c 20 53 45 4c 45  t the final SELE
2d860 43 54 2e 0a 5e 49 66 20 74 68 65 20 72 69 67 68  CT..^If the righ
2d870 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53  t-most [simple S
2d880 45 4c 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c  ELECT] is a [VAL
2d890 55 45 53 20 63 6c 61 75 73 65 5d 20 74 68 65 6e  UES clause] then
2d8a0 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65   no LIMIT clause
2d8b0 0a 69 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70  .is allowed...<p
2d8c0 3e 5e 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70  >^Any scalar exp
2d8d0 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75  ression may be u
2d8e0 73 65 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49  sed in the .LIMI
2d8f0 54 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e  T clause, so lon
2d900 67 20 61 73 20 69 74 20 65 76 61 6c 75 61 74 65  g as it evaluate
2d910 73 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  s to an integer 
2d920 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  or a value that 
2d930 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c  can be.losslessl
2d940 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
2d950 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74  n integer. ^If t
2d960 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  he expression ev
2d970 61 6c 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c  aluates to a NUL
2d980 4c 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20  L .value or any 
2d990 6f 74 68 65 72 20 76 61 6c 75 65 20 74 68 61 74  other value that
2d9a0 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
2d9b0 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
2d9c0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  to an integer, a
2d9d0 6e 0a 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n.error is retur
2d9e0 6e 65 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d  ned. ^If the LIM
2d9f0 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  IT expression ev
2da00 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67  aluates to a neg
2da10 61 74 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65  ative value,.the
2da20 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70  n there is no up
2da30 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
2da40 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2da50 72 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72  returned. ^Other
2da60 77 69 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54  wise, the.SELECT
2da70 20 72 65 74 75 72 6e 73 20 74 68 65 20 66 69 72   returns the fir
2da80 73 74 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73  st N rows of its
2da90 20 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79   result set only
2daa0 2c 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65  , where N is the
2dab0 20 76 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20   value.that the 
2dac0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
2dad0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e   evaluates to. ^
2dae0 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43  Or, if the SELEC
2daf0 54 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  T statement woul
2db00 64 0a 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68  d.return less th
2db10 61 6e 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75  an N rows withou
2db20 74 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  t a LIMIT clause
2db30 2c 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72  , then the entir
2db40 65 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a  e result set is.
2db50 72 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e  returned. ..<p>^
2db60 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  The expression a
2db70 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f  ttached to the o
2db80 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63  ptional OFFSET c
2db90 6c 61 75 73 65 20 74 68 61 74 20 6d 61 79 20 66  lause that may f
2dba0 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c  ollow a.LIMIT cl
2dbb0 61 75 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65  ause must also e
2dbc0 76 61 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e  valuate to an in
2dbd0 74 65 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75  teger, or a valu
2dbe0 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f  e that can be.lo
2dbf0 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
2dc00 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
2dc10 2e 20 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73  . ^If an express
2dc20 69 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45  ion has an OFFSE
2dc30 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74  T clause,.then t
2dc40 68 65 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20  he first M rows 
2dc50 61 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  are omitted from
2dc60 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
2dc70 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
2dc80 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74  SELECT.statement
2dc90 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20   and the next N 
2dca0 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
2dcb0 64 2c 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e  d, where M and N
2dcc0 20 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20   are the values 
2dcd0 74 68 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20  that.the OFFSET 
2dce0 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
2dcf0 73 20 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72  s evaluate to, r
2dd00 65 73 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72  espectively. ^Or
2dd10 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a  , if the SELECT.
2dd20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73  would return les
2dd30 73 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20  s than M+N rows 
2dd40 69 66 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61  if it did not ha
2dd50 76 65 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  ve a LIMIT claus
2dd60 65 2c 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73  e, then the.firs
2dd70 74 20 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69  t M rows are ski
2dd80 70 70 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d  pped and the rem
2dd90 61 69 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20  aining rows (if 
2dda0 61 6e 79 29 20 61 72 65 20 72 65 74 75 72 6e 65  any) are returne
2ddb0 64 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45  d. ^If the.OFFSE
2ddc0 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74  T clause evaluat
2ddd0 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65  es to a negative
2dde0 20 76 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75   value, the resu
2ddf0 6c 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  lts are the same
2de00 20 61 73 20 69 66 20 69 74 0a 68 61 64 20 65 76   as if it.had ev
2de10 61 6c 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e  aluated to zero.
2de20 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66  ..<p>^Instead of
2de30 20 61 20 73 65 70 61 72 61 74 65 20 4f 46 46 53   a separate OFFS
2de40 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c  ET clause, the L
2de50 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20  IMIT clause may 
2de60 73 70 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c  specify two.scal
2de70 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73  ar expressions s
2de80 65 70 61 72 61 74 65 64 20 62 79 20 61 20 63 6f  eparated by a co
2de90 6d 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61  mma. ^In this ca
2dea0 73 65 2c 20 74 68 65 20 66 69 72 73 74 20 65 78  se, the first ex
2deb0 70 72 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64  pression.is used
2dec0 20 61 73 20 74 68 65 20 4f 46 46 53 45 54 20 65   as the OFFSET e
2ded0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
2dee0 65 20 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20  e second as the 
2def0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
2df00 2e 0a 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65  ..This is counte
2df10 72 2d 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20  r-intuitive, as 
2df20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f  when using the O
2df30 46 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 65  FFSET clause the
2df40 20 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74   second of.the t
2df50 77 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  wo expressions i
2df60 73 20 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64  s the OFFSET and
2df70 20 74 68 65 20 66 69 72 73 74 20 74 68 65 20 4c   the first the L
2df80 49 4d 49 54 2e 20 0a 54 68 69 73 20 72 65 76 65  IMIT. .This reve
2df90 72 73 61 6c 20 6f 66 20 74 68 65 20 6f 66 66 73  rsal of the offs
2dfa0 65 74 20 61 6e 64 20 6c 69 6d 69 74 20 69 73 20  et and limit is 
2dfb0 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74  intentional.- it
2dfc0 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61   maximizes compa
2dfd0 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74  tibility with ot
2dfe0 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
2dff0 20 73 79 73 74 65 6d 73 2e 0a 48 6f 77 65 76 65   systems..Howeve
2e000 72 2c 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  r, to avoid conf
2e010 75 73 69 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65  usion, programme
2e020 72 73 20 61 72 65 20 73 74 72 6f 6e 67 6c 79 20  rs are strongly 
2e030 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 20 75 73  encouraged to us
2e040 65 0a 74 68 65 20 66 6f 72 6d 20 6f 66 20 74 68  e.the form of th
2e050 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74  e LIMIT clause t
2e060 68 61 74 20 75 73 65 73 20 74 68 65 20 22 4f 46  hat uses the "OF
2e070 46 53 45 54 22 20 6b 65 79 77 6f 72 64 20 61 6e  FSET" keyword an
2e080 64 20 61 76 6f 69 64 0a 75 73 69 6e 67 20 61 20  d avoid.using a 
2e090 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69 74  LIMIT clause wit
2e0a0 68 20 61 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61  h a comma-separa
2e0b0 74 65 64 20 6f 66 66 73 65 74 2e 0a 0a 3c 74 63  ted offset...<tc
2e0c0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61  l>hd_fragment va
2e0d0 6c 75 65 73 20 7b 56 41 4c 55 45 53 20 63 6c 61  lues {VALUES cla
2e0e0 75 73 65 7d 20 56 41 4c 55 45 53 3c 2f 74 63 6c  use} VALUES</tcl
2e0f0 3e 0a 3c 68 33 3e 54 68 65 20 56 41 4c 55 45 53  >.<h3>The VALUES
2e100 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70   clause</h3>..<p
2e110 3e 5e 28 54 68 65 20 70 68 72 61 73 65 20 22 56  >^(The phrase "V
2e120 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69  ALUES(<i>expr-li
2e130 73 74 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74  st</i>)" means t
2e140 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 61 73  he same thing.as
2e150 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72   "SELECT <i>expr
2e160 2d 6c 69 73 74 3c 2f 69 3e 22 2e 29 5e 20 20 5e  -list</i>".)^  ^
2e170 28 54 68 65 20 70 68 72 61 73 65 0a 22 56 41 4c  (The phrase."VAL
2e180 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74  UES(<i>expr-list
2e190 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c 69 3e  -1</i>),...,(<i>
2e1a0 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 29  expr-list-N</i>)
2e1b0 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  " means the same
2e1c0 0a 74 68 69 6e 67 20 61 73 20 22 53 45 4c 45 43  .thing as "SELEC
2e1d0 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31  T <i>expr-list-1
2e1e0 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c 20 2e  </i> UNION ALL .
2e1f0 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53 45 4c  .. UNION ALL.SEL
2e200 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74  ECT <i>expr-list
2e210 2d 4e 3c 2f 69 3e 22 2e 29 5e 20 20 42 6f 74 68  -N</i>".)^  Both
2e220 20 66 6f 72 6d 73 20 61 72 65 20 74 68 65 20 73   forms are the s
2e230 61 6d 65 2c 20 65 78 63 65 70 74 20 74 68 61 74  ame, except that
2e240 0a 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 53  .the number of S
2e250 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
2e260 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 69   in a compound i
2e270 73 20 6c 69 6d 69 74 65 64 20 62 79 0a 5b 53 51  s limited by.[SQ
2e280 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f  LITE_LIMIT_COMPO
2e290 55 4e 44 5f 53 45 4c 45 43 54 5d 20 77 68 65 72  UND_SELECT] wher
2e2a0 65 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  eas the number o
2e2b0 66 20 72 6f 77 73 20 69 6e 20 61 0a 56 41 4c 55  f rows in a.VALU
2e2c0 45 53 20 63 6c 61 75 73 65 20 68 61 73 20 6e 6f  ES clause has no
2e2d0 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74   arbitrary limit
2e2e0 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  ...<p>There are 
2e2f0 73 6f 6d 65 20 72 65 73 74 72 69 63 74 69 6f 6e  some restriction
2e300 73 20 6f 6e 20 74 68 65 20 75 73 65 20 6f 66 20  s on the use of 
2e310 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  a VALUES clause 
2e320 74 68 61 74 20 61 72 65 0a 6e 6f 74 20 73 68 6f  that are.not sho
2e330 77 6e 20 6f 6e 20 74 68 65 20 73 79 6e 74 61 78  wn on the syntax
2e340 20 64 69 61 67 72 61 6d 73 3a 0a 0a 3c 75 6c 3e   diagrams:..<ul>
2e350 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55  .<li><p>.^A VALU
2e360 45 53 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  ES clause cannot
2e370 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
2e380 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72 20 5b 4c  [ORDER BY] or [L
2e390 49 4d 49 54 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  IMIT]...<li><p>.
2e3a0 5e 41 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  ^A VALUES clause
2e3b0 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20   cannot be used 
2e3c0 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 61 20  together with a 
2e3d0 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 20 69 6e  [WITH] clause in
2e3e0 20 61 0a 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43   a.[simple SELEC
2e3f0 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c 68 33 3e  T]..</ul>...<h3>
2e400 54 68 65 20 57 49 54 48 20 43 6c 61 75 73 65 3c  The WITH Clause<
2e410 2f 68 33 3e 0a 0a 3c 70 3e 5e 53 45 4c 45 43 54  /h3>..<p>^SELECT
2e420 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20   statements may 
2e430 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 70 72  be optionally pr
2e440 65 63 65 64 65 64 20 62 79 20 61 20 73 69 6e 67  eceded by a sing
2e450 6c 65 0a 5b 57 49 54 48 20 63 6c 61 75 73 65 5d  le.[WITH clause]
2e460 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 6f 6e   that defines on
2e470 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6d 6d 6f  e or more [commo
2e480 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
2e490 6f 6e 73 5d 0a 66 6f 72 20 75 73 65 20 77 69 74  ons].for use wit
2e4a0 68 69 6e 20 74 68 65 20 53 45 4c 45 43 54 20 73  hin the SELECT s
2e4b0 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a 3c 74 63 6c  tatement....<tcl
2e4c0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
2e4d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e4e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e4f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e510 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20  .Section UPDATE 
2e520 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a  update {UPDATE *
2e530 55 50 44 41 54 45 73 7d 0a 0a 52 65 63 75 72 73  UPDATEs}..Recurs
2e540 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
2e550 20 75 70 64 61 74 65 2d 73 74 6d 74 0a 3c 2f 74   update-stmt.</t
2e560 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44 41  cl>..<p>^An UPDA
2e570 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
2e580 75 73 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 61  used to modify a
2e590 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 76   subset of the v
2e5a0 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 20  alues stored in 
2e5b0 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f  .zero or more ro
2e5c0 77 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ws of the databa
2e5d0 73 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66  se table identif
2e5e0 69 65 64 20 62 79 20 74 68 65 20 0a 3c 69 3e 71  ied by the .<i>q
2e5f0 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
2e600 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69 65  ame</i> specifie
2e610 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
2e620 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2e630 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55  t...<p>^If the U
2e640 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
2e650 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20  does not have a 
2e660 57 48 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c  WHERE clause, al
2e670 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 0a 74 61  l rows in the.ta
2e680 62 6c 65 20 61 72 65 20 6d 6f 64 69 66 69 65 64  ble are modified
2e690 20 62 79 20 74 68 65 20 55 50 44 41 54 45 2e 20   by the UPDATE. 
2e6a0 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
2e6b0 55 50 44 41 54 45 20 61 66 66 65 63 74 73 20 6f  UPDATE affects o
2e6c0 6e 6c 79 20 74 68 6f 73 65 0a 72 6f 77 73 20 66  nly those.rows f
2e6d0 6f 72 20 77 68 69 63 68 20 74 68 65 20 72 65 73  or which the res
2e6e0 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
2e6f0 67 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  g the WHERE clau
2e700 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  se expression as
2e710 20 61 20 0a 5b 62 6f 6f 6c 65 61 6e 20 65 78 70   a .[boolean exp
2e720 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61 6e 20  ression|boolean 
2e730 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 72  expression is tr
2e740 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e 6f 74 20  ue]. ^It is not 
2e750 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 0a  an error if the.
2e760 57 48 45 52 45 20 63 6c 61 75 73 65 20 64 6f 65  WHERE clause doe
2e770 73 20 6e 6f 74 20 65 76 61 6c 75 61 74 65 20 74  s not evaluate t
2e780 6f 20 74 72 75 65 20 66 6f 72 20 61 6e 79 20 72  o true for any r
2e790 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ow in the table 
2e7a0 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d 65 61 6e  - this just.mean
2e7b0 73 20 74 68 61 74 20 74 68 65 20 55 50 44 41 54  s that the UPDAT
2e7c0 45 20 73 74 61 74 65 6d 65 6e 74 20 61 66 66 65  E statement affe
2e7d0 63 74 73 20 7a 65 72 6f 20 72 6f 77 73 2e 0a 0a  cts zero rows...
2e7e0 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69 63 61 74  <p>The modificat
2e7f0 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20 65 61 63  ions made to eac
2e800 68 20 72 6f 77 20 61 66 66 65 63 74 65 64 20 62  h row affected b
2e810 79 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  y an UPDATE stat
2e820 65 6d 65 6e 74 20 61 72 65 0a 64 65 74 65 72 6d  ement are.determ
2e830 69 6e 65 64 20 62 79 20 74 68 65 20 6c 69 73 74  ined by the list
2e840 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73 20   of assignments 
2e850 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 53 45  following the SE
2e860 54 20 6b 65 79 77 6f 72 64 2e 20 45 61 63 68 0a  T keyword. Each.
2e870 61 73 73 69 67 6e 6d 65 6e 74 20 73 70 65 63 69  assignment speci
2e880 66 69 65 73 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  fies a column na
2e890 6d 65 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f  me to the left o
2e8a0 66 20 74 68 65 20 65 71 75 61 6c 73 20 73 69 67  f the equals sig
2e8b0 6e 20 61 6e 64 20 61 0a 73 63 61 6c 61 72 20 65  n and a.scalar e
2e8c0 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 74 68 65  xpression to the
2e8d0 20 72 69 67 68 74 2e 20 5e 46 6f 72 20 65 61 63   right. ^For eac
2e8e0 68 20 61 66 66 65 63 74 65 64 20 72 6f 77 2c 20  h affected row, 
2e8f0 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e  the named column
2e900 73 0a 61 72 65 20 73 65 74 20 74 6f 20 74 68 65  s.are set to the
2e910 20 76 61 6c 75 65 73 20 66 6f 75 6e 64 20 62 79   values found by
2e920 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
2e930 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 63  corresponding sc
2e940 61 6c 61 72 20 0a 65 78 70 72 65 73 73 69 6f 6e  alar .expression
2e950 73 2e 20 5e 49 66 20 61 20 73 69 6e 67 6c 65 20  s. ^If a single 
2e960 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 61 70 70 65  column-name appe
2e970 61 72 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ars more than on
2e980 63 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  ce in the list o
2e990 66 0a 61 73 73 69 67 6e 6d 65 6e 74 20 65 78 70  f.assignment exp
2e9a0 72 65 73 73 69 6f 6e 73 2c 20 61 6c 6c 20 62 75  ressions, all bu
2e9b0 74 20 74 68 65 20 72 69 67 68 74 6d 6f 73 74 20  t the rightmost 
2e9c0 6f 63 63 75 72 72 65 6e 63 65 20 69 73 20 69 67  occurrence is ig
2e9d0 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75 6d 6e 73 0a  nored. ^Columns.
2e9e0 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65  that do not appe
2e9f0 61 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  ar in the list o
2ea00 66 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72  f assignments ar
2ea10 65 20 6c 65 66 74 20 75 6e 6d 6f 64 69 66 69 65  e left unmodifie
2ea20 64 2e 20 5e 54 68 65 20 73 63 61 6c 61 72 0a 65  d. ^The scalar.e
2ea30 78 70 72 65 73 73 69 6f 6e 73 20 6d 61 79 20 72  xpressions may r
2ea40 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  efer to columns 
2ea50 6f 66 20 74 68 65 20 72 6f 77 20 62 65 69 6e 67  of the row being
2ea60 20 75 70 64 61 74 65 64 2e 20 5e 49 6e 20 74 68   updated. ^In th
2ea70 69 73 20 63 61 73 65 20 61 6c 6c 0a 73 63 61 6c  is case all.scal
2ea80 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  ar expressions a
2ea90 72 65 20 65 76 61 6c 75 61 74 65 64 20 62 65 66  re evaluated bef
2eaa0 6f 72 65 20 61 6e 79 20 61 73 73 69 67 6e 6d 65  ore any assignme
2eab0 6e 74 73 20 61 72 65 20 6d 61 64 65 2e 0a 0a 3c  nts are made...<
2eac0 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p>^The optional 
2ead0 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20  conflict-clause 
2eae0 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20  allows the user 
2eaf0 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61 20 73 70  to nominate a sp
2eb00 65 63 69 66 69 63 0a 63 6f 6e 73 74 72 61 69 6e  ecific.constrain
2eb10 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
2eb20 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
2eb30 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
2eb40 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20 63 6f  is one UPDATE co
2eb50 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20 74 6f 20  mmand..Refer to 
2eb60 74 68 65 20 73 65 63 74 69 6f 6e 20 65 6e 74 69  the section enti
2eb70 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  tled [ON CONFLIC
2eb80 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  T] for additiona
2eb90 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a  l information...
2eba0 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73  <h3>Restrictions
2ebb0 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61 74 65   on UPDATE State
2ebc0 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45  ments Within CRE
2ebd0 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e  ATE TRIGGER</h3>
2ebe0 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
2ebf0 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 73 79  ng additional sy
2ec00 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e  ntax restriction
2ec10 73 20 61 70 70 6c 79 20 74 6f 20 55 50 44 41 54  s apply to UPDAT
2ec20 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  E statements tha
2ec30 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74  t.occur within t
2ec40 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52  he body of a [CR
2ec50 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
2ec60 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75 6c 3e  atement.  ..<ul>
2ec70 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c  .  <li><p>^The <
2ec80 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e  i>table-name</i>
2ec90 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
2eca0 72 74 20 6f 66 20 61 6e 20 55 50 44 41 54 45 20  rt of an UPDATE 
2ecb0 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69 6e  statement within
2ecc0 0a 20 20 20 20 20 20 61 20 74 72 69 67 67 65 72  .      a trigger
2ecd0 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e   body must be un
2ece0 71 75 61 6c 69 66 69 65 64 2e 20 5e 28 49 6e 20  qualified. ^(In 
2ecf0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
2ed00 0a 20 20 20 20 20 20 3c 69 3e 64 61 74 61 62 61  .      <i>databa
2ed10 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c  se-name</i><b>.<
2ed20 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68  /b> prefix on th
2ed30 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20  e table name of 
2ed40 74 68 65 20 55 50 44 41 54 45 20 69 73 0a 20 20  the UPDATE is.  
2ed50 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20      not allowed 
2ed60 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
2ed70 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 74  )^ ^Unless the t
2ed80 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  able to which th
2ed90 65 20 74 72 69 67 67 65 72 0a 20 20 20 20 20 20  e trigger.      
2eda0 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69  is attached is i
2edb0 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  n the TEMP datab
2edc0 61 73 65 2c 20 74 68 65 20 74 61 62 6c 65 20 62  ase, the table b
2edd0 65 69 6e 67 20 75 70 64 61 74 65 64 20 62 79 20  eing updated by 
2ede0 74 68 65 0a 20 20 20 20 20 20 74 72 69 67 67 65  the.      trigge
2edf0 72 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 72  r program must r
2ee00 65 73 69 64 65 20 69 6e 20 74 68 65 20 73 61 6d  eside in the sam
2ee10 65 20 64 61 74 61 62 61 73 65 20 61 73 20 69 74  e database as it
2ee20 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a  . ^If the table.
2ee30 20 20 20 20 20 20 74 6f 20 77 68 69 63 68 20 74        to which t
2ee40 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
2ee50 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65  tached is in the
2ee60 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20   TEMP database, 
2ee70 74 68 65 6e 20 74 68 65 0a 20 20 20 20 20 20 75  then the.      u
2ee80 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20  nqualified name 
2ee90 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
2eea0 6e 67 20 75 70 64 61 74 65 64 20 69 73 20 72 65  ng updated is re
2eeb0 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61  solved in the sa
2eec0 6d 65 20 77 61 79 0a 20 20 20 20 20 20 61 73 20  me way.      as 
2eed0 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d  it is for a top-
2eee0 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20  level statement 
2eef0 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69  (by searching fi
2ef00 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74  rst the TEMP dat
2ef10 61 62 61 73 65 2c 0a 20 20 20 20 20 20 74 68 65  abase,.      the
2ef20 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
2ef30 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74  ase, then any ot
2ef40 68 65 72 20 64 61 74 61 62 61 73 65 73 20 69 6e  her databases in
2ef50 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20   the order they 
2ef60 77 65 72 65 0a 20 20 20 20 20 20 61 74 74 61 63  were.      attac
2ef70 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  hed)...  <li><p>
2ef80 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
2ef90 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
2efa0 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
2efb0 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54  allowed on UPDAT
2efc0 45 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e  E.      statemen
2efd0 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
2efe0 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c  rs.</p>..  <li><
2eff0 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64  p>^The LIMIT and
2f000 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2f010 73 20 66 6f 72 20 55 50 44 41 54 45 20 61 72 65  s for UPDATE are
2f020 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74   unsupported wit
2f030 68 69 6e 0a 20 20 20 20 20 20 74 72 69 67 67 65  hin.      trigge
2f040 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
2f050 66 20 74 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f  f the compilatio
2f060 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 74  n options used t
2f070 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 2e 0a  o build SQLite..
2f080 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f  </ul>..<h3>Optio
2f090 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52  nal LIMIT and OR
2f0a0 44 45 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f  DER BY Clauses</
2f0b0 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c  h3>..<p>^(If SQL
2f0c0 69 74 65 20 69 73 20 62 75 69 6c 74 20 77 69 74  ite is built wit
2f0d0 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  h the [SQLITE_EN
2f0e0 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
2f0f0 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c  TE_LIMIT].compil
2f100 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68  e-time option th
2f110 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66  en the syntax of
2f120 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
2f130 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65  ement is extende
2f140 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20  d.with optional 
2f150 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
2f160 49 54 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20  IT clauses)^ as 
2f170 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74  follows:</p>..<t
2f180 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
2f190 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d   update-stmt-lim
2f1a0 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ited</tcl>..<p>^
2f1b0 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  If an UPDATE sta
2f1c0 74 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49 4d  tement has a LIM
2f1d0 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6d  IT clause, the m
2f1e0 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
2f1f0 20 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c 20   rows that.will 
2f200 62 65 20 75 70 64 61 74 65 64 20 69 73 20 66 6f  be updated is fo
2f210 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e  und by evaluatin
2f220 67 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69  g the accompanyi
2f230 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  ng expression an
2f240 64 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f 20  d casting.it to 
2f250 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
2f260 2e 20 5e 41 20 6e 65 67 61 74 69 76 65 20 76 61  . ^A negative va
2f270 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74  lue is interpret
2f280 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22  ed as "no limit"
2f290 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 4c 49  ...<p>^If the LI
2f2a0 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65  MIT expression e
2f2b0 76 61 6c 75 61 74 65 73 20 74 6f 20 6e 6f 6e 2d  valuates to non-
2f2c0 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c  negative value <
2f2d0 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74 68 65 0a  i>N</i> and the.
2f2e0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
2f2f0 20 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59   has an ORDER BY
2f300 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c   clause, then al
2f310 6c 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c  l rows that woul
2f320 64 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 0a  d be updated in.
2f330 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74  the absence of t
2f340 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
2f350 61 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72  are sorted accor
2f360 64 69 6e 67 20 74 6f 20 74 68 65 20 4f 52 44 45  ding to the ORDE
2f370 52 20 42 59 20 61 6e 64 20 74 68 65 0a 66 69 72  R BY and the.fir
2f380 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70 64 61  st <i>N</i> upda
2f390 74 65 64 2e 20 5e 28 49 66 20 74 68 65 20 55 50  ted. ^(If the UP
2f3a0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
2f3b0 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45  lso has an OFFSE
2f3c0 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 69  T clause,.then i
2f3d0 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65  t is similarly e
2f3e0 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73  valuated and cas
2f3f0 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
2f400 76 61 6c 75 65 2e 20 49 66 20 74 68 65 20 4f 46  value. If the OF
2f410 46 53 45 54 0a 65 78 70 72 65 73 73 69 6f 6e 20  FSET.expression 
2f420 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e  evaluates to a n
2f430 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
2f440 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e  e <i>M</i>, then
2f450 20 74 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c   the first <i>M<
2f460 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20 73 6b 69  /i>.rows are ski
2f470 70 70 65 64 20 61 6e 64 20 74 68 65 20 66 6f 6c  pped and the fol
2f480 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20  lowing <i>N</i> 
2f490 72 6f 77 73 20 75 70 64 61 74 65 64 20 69 6e 73  rows updated ins
2f4a0 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  tead.)^..<p>^If 
2f4b0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
2f4c0 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45  ment has no ORDE
2f4d0 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
2f4e0 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a  n all rows that.
2f4f0 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64  would be updated
2f500 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20   in the absence 
2f510 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  of the LIMIT cla
2f520 75 73 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65  use are assemble
2f530 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72  d in an.arbitrar
2f540 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61  y order before a
2f550 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49  pplying the LIMI
2f560 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61  T and OFFSET cla
2f570 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  uses to determin
2f580 65 20 0a 77 68 69 63 68 20 61 72 65 20 61 63 74  e .which are act
2f590 75 61 6c 6c 79 20 75 70 64 61 74 65 64 2e 0a 0a  ually updated...
2f5a0 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42  <p>^(The ORDER B
2f5b0 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55  Y clause on an U
2f5c0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
2f5d0 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
2f5e0 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a  determine which.
2f5f0 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e  rows fall within
2f600 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20   the LIMIT. The 
2f610 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
2f620 6f 77 73 20 61 72 65 20 6d 6f 64 69 66 69 65 64  ows are modified
2f630 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e   is arbitrary.an
2f640 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e  d is not influen
2f650 63 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52  ced by the ORDER
2f660 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c   BY clause.)^..<
2f670 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
2f680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f6a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f6b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f6c0 23 23 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55  ###.Section VACU
2f6d0 55 4d 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d  UM vacuum VACUUM
2f6e0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
2f6f0 65 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d  eDiagram vacuum-
2f700 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
2f710 0a 20 20 54 68 65 20 56 41 43 55 55 4d 20 63 6f  .  The VACUUM co
2f720 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20 74  mmand rebuilds t
2f730 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
2f740 73 65 2e 20 54 68 65 72 65 20 61 72 65 20 73 65  se. There are se
2f750 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f 6e 73  veral .  reasons
2f760 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   an application 
2f770 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a 0a 0a  might do this:..
2f780 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20  <ul>.  <li> <p> 
2f790 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69  ^Unless SQLite i
2f7a0 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 61 75  s running in "au
2f7b0 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c 22 20  to_vacuum=FULL" 
2f7c0 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c 61 72  mode, when a lar
2f7d0 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74 20 6f  ge.     amount o
2f7e0 66 20 64 61 74 61 20 69 73 20 64 65 6c 65 74 65  f data is delete
2f7f0 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
2f800 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65 61 76  ase file it leav
2f810 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79 0a  es behind empty.
2f820 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72 20 22       space, or "
2f830 66 72 65 65 22 20 64 61 74 61 62 61 73 65 20 70  free" database p
2f840 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61 6e 73  ages. This means
2f850 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f860 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20 62 65  le might.     be
2f870 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74 72   larger than str
2f880 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79 2e  ictly necessary.
2f890 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d   ^Running VACUUM
2f8a0 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20   to rebuild the 
2f8b0 0a 20 20 20 20 20 64 61 74 61 62 61 73 65 20 72  .     database r
2f8c0 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73 70 61  eclaims this spa
2f8d0 63 65 20 61 6e 64 20 72 65 64 75 63 65 73 20 74  ce and reduces t
2f8e0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
2f8f0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a 20  atabase file... 
2f900 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65 71 75   <li> <p> ^Frequ
2f910 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75 70 64  ent inserts, upd
2f920 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65 74 65  ates, and delete
2f930 73 20 63 61 6e 20 63 61 75 73 65 20 74 68 65 20  s can cause the 
2f940 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20  database file.  
2f950 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66 72 61     to become fra
2f960 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72 65 20  gmented - where 
2f970 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67 6c  data for a singl
2f980 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2f990 20 69 73 20 73 63 61 74 74 65 72 65 64 20 0a 20   is scattered . 
2f9a0 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65 20 64      around the d
2f9b0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 52  atabase file. ^R
2f9c0 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 65 6e  unning VACUUM en
2f9d0 73 75 72 65 73 20 74 68 61 74 20 65 61 63 68 20  sures that each 
2f9e0 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20 20 69  table and.     i
2f9f0 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c 79 20  ndex is largely 
2fa00 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75 6f 75  stored contiguou
2fa10 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65 20 64  sly within the d
2fa20 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 49  atabase file. ^I
2fa30 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61 73 65  n some.     case
2fa40 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20 61 6c  s, VACUUM may al
2fa50 73 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  so reduce the nu
2fa60 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61 6c 6c  mber of partiall
2fa70 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 69  y filled pages i
2fa80 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74 61 62  n.     the datab
2fa90 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20 74 68  ase, reducing th
2faa0 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  e size of the da
2fab0 74 61 62 61 73 65 20 66 69 6c 65 20 66 75 72 74  tabase file furt
2fac0 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  her...  <li> <p>
2fad0 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 20   ^Normally, the 
2fae0 64 61 74 61 62 61 73 65 20 5b 70 61 67 65 5f 73  database [page_s
2faf0 69 7a 65 5d 20 61 6e 64 20 77 68 65 74 68 65 72  ize] and whether
2fb00 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74 61   or not the data
2fb10 62 61 73 65 0a 20 20 20 20 20 73 75 70 70 6f 72  base.     suppor
2fb20 74 73 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  ts [auto_vacuum]
2fb30 20 6d 75 73 74 20 62 65 20 63 6f 6e 66 69 67 75   must be configu
2fb40 72 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 64  red before the d
2fb50 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a  atabase file is.
2fb60 20 20 20 20 20 61 63 74 75 61 6c 6c 79 20 63 72       actually cr
2fb70 65 61 74 65 64 2e 20 5e 48 6f 77 65 76 65 72 2c  eated. ^However,
2fb80 20 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 77 72   when not in [wr
2fb90 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d  ite-ahead log] m
2fba0 6f 64 65 2c 20 74 68 65 20 0a 20 20 20 20 20 5b  ode, the .     [
2fbb0 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f  page_size] and/o
2fbc0 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  r [auto_vacuum] 
2fbd0 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20 61 6e  properties of an
2fbe0 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
2fbf0 73 65 20 6d 61 79 20 62 65 0a 20 20 20 20 20 63  se may be.     c
2fc00 68 61 6e 67 65 64 20 62 79 20 75 73 69 6e 67 20  hanged by using 
2fc10 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 20 70  the [page_size p
2fc20 72 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a 65 5d  ragma|page_size]
2fc30 20 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20 20 5b    and/or .     [
2fc40 61 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72 61 67  auto_vacuum|prag
2fc50 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  ma auto_vacuum] 
2fc60 70 72 61 67 6d 61 73 20 61 6e 64 20 74 68 65 6e  pragmas and then
2fc70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43   immediately VAC
2fc80 55 55 4d 69 6e 67 0a 20 20 20 20 20 74 68 65 20  UUMing.     the 
2fc90 64 61 74 61 62 61 73 65 2e 20 5e 57 68 65 6e 20  database. ^When 
2fca0 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20  in [write-ahead 
2fcb0 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c 79 20  log] mode, only 
2fcc0 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  the [auto_vacuum
2fcd0 5d 0a 20 20 20 20 20 73 75 70 70 6f 72 74 20 70  ].     support p
2fce0 72 6f 70 65 72 74 79 20 63 61 6e 20 62 65 20 63  roperty can be c
2fcf0 68 61 6e 67 65 64 20 75 73 69 6e 67 20 56 41 43  hanged using VAC
2fd00 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  UUM..</ul>..<p>^
2fd10 28 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72  (VACUUM only wor
2fd20 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64  ks on the main d
2fd30 61 74 61 62 61 73 65 2e 20 49 74 20 69 73 20 6e  atabase. It is n
2fd40 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 56  ot possible to V
2fd50 41 43 55 55 4d 20 61 6e 0a 61 74 74 61 63 68 65  ACUUM an.attache
2fd60 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  d database file.
2fd70 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55  )^..<p>^The VACU
2fd80 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73  UM command works
2fd90 20 62 79 20 63 6f 70 79 69 6e 67 20 74 68 65 20   by copying the 
2fda0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
2fdb0 64 61 74 61 62 61 73 65 20 69 6e 74 6f 0a 61 20  database into.a 
2fdc0 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
2fdd0 73 65 20 66 69 6c 65 20 61 6e 64 20 74 68 65 6e  se file and then
2fde0 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68 65   overwriting the
2fdf0 20 6f 72 69 67 69 6e 61 6c 20 77 69 74 68 20 74   original with t
2fe00 68 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66 20  he .contents of 
2fe10 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69  the temporary fi
2fe20 6c 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77 72  le. ^When overwr
2fe30 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e  iting the origin
2fe40 61 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a  al, a rollback.j
2fe50 6f 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74 65  ournal or [write
2fe60 2d 61 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c 20  -ahead log] WAL 
2fe70 66 69 6c 65 20 69 73 20 75 73 65 64 20 6a 75 73  file is used jus
2fe80 74 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  t as it would be
2fe90 20 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20 64   for any.other d
2fea0 61 74 61 62 61 73 65 20 74 72 61 6e 73 61 63 74  atabase transact
2feb0 69 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e 73  ion. ^This means
2fec0 20 74 68 61 74 20 77 68 65 6e 20 56 41 43 55 55   that when VACUU
2fed0 4d 69 6e 67 20 61 20 64 61 74 61 62 61 73 65 2c  Ming a database,
2fee0 20 0a 61 73 20 6d 75 63 68 20 61 73 20 74 77 69   .as much as twi
2fef0 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ce the size of t
2ff00 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61  he original data
2ff10 62 61 73 65 20 66 69 6c 65 20 69 73 20 72 65 71  base file is req
2ff20 75 69 72 65 64 20 69 6e 20 66 72 65 65 0a 64 69  uired in free.di
2ff30 73 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54  sk space...<p>^T
2ff40 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
2ff50 64 20 6d 61 79 20 63 68 61 6e 67 65 20 74 68 65  d may change the
2ff60 20 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49 44 73   [ROWID | ROWIDs
2ff70 5d 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  ] of entries in 
2ff80 61 6e 79 0a 74 61 62 6c 65 73 20 74 68 61 74 20  any.tables that 
2ff90 64 6f 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 65  do not have an e
2ffa0 78 70 6c 69 63 69 74 20 5b 49 4e 54 45 47 45 52  xplicit [INTEGER
2ffb0 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c   PRIMARY KEY]..<
2ffc0 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43 55 55  /p>..<p>^A VACUU
2ffd0 4d 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74  M will fail if t
2ffe0 68 65 72 65 20 69 73 20 61 6e 20 6f 70 65 6e 20  here is an open 
2fff0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 6f 72 20  transaction, or 
30000 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 6e 65  if there are one
30010 20 6f 72 0a 6d 6f 72 65 20 61 63 74 69 76 65 20   or.more active 
30020 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77  SQL statements w
30030 68 65 6e 20 69 74 20 69 73 20 72 75 6e 2e 0a 0a  hen it is run...
30040 3c 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c 69 74  <p>^(As of SQLit
30050 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61  e version 3.1, a
30060 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f  n alternative to
30070 20 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55   using the VACUU
30080 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65 63  M command to.rec
30090 6c 61 69 6d 20 73 70 61 63 65 20 61 66 74 65 72  laim space after
300a0 20 64 61 74 61 20 68 61 73 20 62 65 65 6e 20 64   data has been d
300b0 65 6c 65 74 65 64 20 69 73 20 61 75 74 6f 2d 76  eleted is auto-v
300c0 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62  acuum mode, enab
300d0 6c 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 61  led using.the [a
300e0 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67  uto_vacuum] prag
300f0 6d 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61 75 74  ma.)^ ^When [aut
30100 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e 61  o_vacuum] is ena
30110 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61 62  bled for a datab
30120 61 73 65 0a 66 72 65 65 20 70 61 67 65 73 20 6d  ase.free pages m
30130 61 79 20 62 65 20 72 65 63 6c 61 69 6d 65 64 20  ay be reclaimed 
30140 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20 64  after deleting d
30150 61 74 61 2c 20 63 61 75 73 69 6e 67 20 74 68 65  ata, causing the
30160 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2c   file to shrink,
30170 0a 77 69 74 68 6f 75 74 20 72 65 62 75 69 6c 64  .without rebuild
30180 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 64  ing the entire d
30190 61 74 61 62 61 73 65 20 75 73 69 6e 67 20 56 41  atabase using VA
301a0 43 55 55 4d 2e 20 20 48 6f 77 65 76 65 72 2c 20  CUUM.  However, 
301b0 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75  using.[auto_vacu
301c0 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f 20  um] can lead to 
301d0 65 78 74 72 61 20 64 61 74 61 62 61 73 65 20 66  extra database f
301e0 69 6c 65 20 66 72 61 67 6d 65 6e 74 61 74 69 6f  ile fragmentatio
301f0 6e 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f 76 61  n.  And [auto_va
30200 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63  cuum].does not c
30210 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c 79  ompact partially
30220 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f 66   filled pages of
30230 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 73   the database as
30240 20 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c   VACUUM does...<
30250 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /p>...<tcl>.####
30260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
302a0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
302b0 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 20  on {INDEXED BY} 
302c0 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44 45  indexedby {{INDE
302d0 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44  XED BY} {NOT IND
302e0 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c  EXED}}..</tcl>.<
302f0 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  p>^The INDEXED B
30300 59 20 70 68 72 61 73 65 20 66 6f 72 63 65 73 20  Y phrase forces 
30310 74 68 65 20 5b 53 51 4c 69 74 65 20 71 75 65 72  the [SQLite quer
30320 79 20 70 6c 61 6e 6e 65 72 5d 20 74 6f 20 75 73  y planner] to us
30330 65 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20 6e  e a.particular n
30340 61 6d 65 64 20 69 6e 64 65 78 20 6f 6e 20 61 20  amed index on a 
30350 5b 44 45 4c 45 54 45 5d 2c 20 5b 53 45 4c 45 43  [DELETE], [SELEC
30360 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
30370 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 49  statement..The I
30380 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65  NDEXED BY phrase
30390 20 69 73 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e   is an extension
303a0 20 74 68 61 74 20 69 73 20 70 61 72 74 69 63 75   that is particu
303b0 6c 61 72 20 74 6f 20 53 51 4c 69 74 65 20 61 6e  lar to SQLite an
303c0 64 0a 69 73 20 6e 6f 74 20 70 6f 72 74 61 62 6c  d.is not portabl
303d0 65 20 74 6f 20 6f 74 68 65 72 20 53 51 4c 20 64  e to other SQL d
303e0 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e  atabase engines.
303f0 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  .The INDEXED BY 
30400 70 68 72 61 73 65 20 63 61 6e 20 62 65 20 73 65  phrase can be se
30410 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  en in the follow
30420 69 6e 67 20 73 79 6e 74 61 78 0a 64 69 61 67 72  ing syntax.diagr
30430 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ams:</p>..<tcl>.
30440 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
30450 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64  iagram qualified
30460 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63  -table-name.</tc
30470 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44  l>..<p>^The "IND
30480 45 58 45 44 20 42 59 20 69 6e 64 65 78 2d 6e 61  EXED BY index-na
30490 6d 65 22 20 70 68 72 61 73 65 20 73 70 65 63 69  me" phrase speci
304a0 66 69 65 73 20 74 68 61 74 20 74 68 65 20 6e 61  fies that the na
304b0 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62  med index.must b
304c0 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20  e used in order 
304d0 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65  to look up value
304e0 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65 64 69  s on the precedi
304f0 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20 69 6e  ng table..^If in
30500 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f  dex-name does no
30510 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f  t exist or canno
30520 74 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  t be used for th
30530 65 20 71 75 65 72 79 2c 20 74 68 65 6e 0a 74 68  e query, then.th
30540 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66  e preparation of
30550 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
30560 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20  nt fails..^(The 
30570 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c  "NOT INDEXED" cl
30580 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
30590 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61  hat no index sha
305a0 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a  ll be used when.
305b0 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 70 72  accessing the pr
305c0 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69  eceding table, i
305d0 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64  ncluding implied
305e0 20 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 20   indices create 
305f0 62 79 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52  by.UNIQUE and PR
30600 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72  IMARY KEY constr
30610 61 69 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c  aints.  However,
30620 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49   the INTEGER PRI
30630 4d 41 52 59 20 4b 45 59 0a 63 61 6e 20 73 74 69  MARY KEY.can sti
30640 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f  ll be used to lo
30650 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65 76  ok up entries ev
30660 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44  en when "NOT IND
30670 45 58 45 44 22 20 69 73 20 73 70 65 63 69 66 69  EXED" is specifi
30680 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f  ed.)^</p>..<p>So
30690 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  me SQL database 
306a0 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20  engines provide 
306b0 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69  non-standard "hi
306c0 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77  nt" mechanisms w
306d0 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64  hich.can be used
306e0 20 74 6f 20 67 69 76 65 20 74 68 65 20 71 75 65   to give the que
306f0 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75  ry optimizer clu
30700 65 73 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e  es about what in
30710 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a  dices it should.
30720 75 73 65 20 66 6f 72 20 61 20 70 61 72 74 69 63  use for a partic
30730 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20  ular statement. 
30740 20 54 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c   The INDEX BY cl
30750 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69  ause of SQLite i
30760 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  s .<em>not</em> 
30770 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e  a hinting mechan
30780 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c  ism and it shoul
30790 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73  d not be used as
307a0 20 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45   such..^The INDE
307b0 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f  XED BY clause do
307c0 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20  es not give the 
307d0 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20  optimizer hints 
307e0 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65  about which inde
307f0 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76  x.to use; it giv
30800 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  es the optimizer
30810 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f   a requirement o
30820 66 20 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f  f which index to
30830 20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75   use..^If the qu
30840 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  ery optimizer is
30850 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74   unable to use t
30860 68 65 20 69 6e 64 65 78 20 73 70 65 63 69 66 69  he index specifi
30870 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20  ed by the.INDEX 
30880 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
30890 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66  the query will f
308a0 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
308b0 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49  r.</p>..<p>The I
308c0 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
308d0 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   is <em>not</em>
308e0 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
308f0 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20  e in tuning.the 
30900 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61  performance of a
30910 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74   query.  The int
30920 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58  ent of the INDEX
30930 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a  ED BY clause is.
30940 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74  to raise a run-t
30950 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20 73  ime error if a s
30960 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75  chema change, su
30970 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f  ch as dropping o
30980 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e  r.creating an in
30990 64 65 78 2c 20 63 61 75 73 65 73 20 74 68 65 20  dex, causes the 
309a0 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61  query plan for a
309b0 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20   time-sensitive 
309c0 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e  query.to change.
309d0 20 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59    The INDEXED BY
309e0 20 63 6c 61 75 73 65 20 69 73 20 64 65 73 69 67   clause is desig
309f0 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65  ned to help dete
30a00 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71  ct.undesirable q
30a10 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65  uery plan change
30a20 73 20 64 75 72 69 6e 67 20 72 65 67 72 65 73 73  s during regress
30a30 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65 76  ion testing..Dev
30a40 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f  elopers are admo
30a50 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61  nished to omit a
30a60 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45  ll use of INDEXE
30a70 44 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c  D BY during.appl
30a80 69 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20  ication design, 
30a90 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
30aa0 74 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e  testing, and tun
30ab0 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44  ing.  If.INDEXED
30ac0 20 42 59 20 69 73 20 74 6f 20 62 65 20 75 73 65   BY is to be use
30ad0 64 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f  d at all, it sho
30ae0 75 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64 20  uld be inserted 
30af0 61 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20  at the very.end 
30b00 6f 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65  of the developme
30b10 6e 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20  nt process when 
30b20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61  "locking down" a
30b30 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68   design.</p>..<h
30b40 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e  3>See Also:</h3>
30b50 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68  ..<ol>.<li><p>Th
30b60 65 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  e [query planner
30b70 20 63 68 65 63 6b 6c 69 73 74 5d 20 64 65 73 63   checklist] desc
30b80 72 69 62 65 73 20 73 74 65 70 73 20 74 68 61 74  ribes steps that
30b90 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64 65 76   application.dev
30ba0 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 66  elopers should f
30bb0 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 68 65 6c 70  ollowing to help
30bc0 20 72 65 73 6f 6c 76 65 20 71 75 65 72 79 20 70   resolve query p
30bd0 6c 61 6e 6e 65 72 20 70 72 6f 62 6c 65 6d 73 2e  lanner problems.
30be0 0a 4e 6f 74 69 63 65 20 74 68 65 20 74 68 61 74  .Notice the that
30bf0 20 74 68 65 20 75 73 65 20 6f 66 20 49 4e 44 45   the use of INDE
30c00 58 45 44 20 42 59 20 69 73 20 61 20 6c 61 73 74  XED BY is a last
30c10 20 72 65 73 6f 72 74 2c 20 74 6f 20 62 65 20 75   resort, to be u
30c20 73 65 64 20 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c  sed only.when al
30c30 6c 20 6f 74 68 65 72 20 6d 65 61 73 75 72 65 73  l other measures
30c40 20 66 61 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e   fail.</p>..<li>
30c50 3c 70 3e 5b 75 70 6c 75 73 63 6f 6e 74 72 6f 6c  <p>[upluscontrol
30c60 7c 54 68 65 20 75 6e 61 72 79 20 22 2b 22 20 6f  |The unary "+" o
30c70 70 65 72 61 74 6f 72 5d 0a 63 61 6e 20 62 65 20  perator].can be 
30c80 75 73 65 64 20 74 6f 20 64 69 73 71 75 61 6c 69  used to disquali
30c90 66 79 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20  fy terms in the 
30ca0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 72 6f  WHERE clause fro
30cb0 6d 20 75 73 65 20 62 79 20 69 6e 64 69 63 65 73  m use by indices
30cc0 2e 0a 43 61 72 65 66 75 6c 20 75 73 65 20 6f 66  ..Careful use of
30cd0 20 75 6e 61 72 79 20 2b 20 63 61 6e 20 73 6f 6d   unary + can som
30ce0 65 74 69 6d 65 73 20 68 65 6c 70 20 70 72 65 76  etimes help prev
30cf0 65 6e 74 20 74 68 65 20 71 75 65 72 79 20 70 6c  ent the query pl
30d00 61 6e 6e 65 72 20 66 72 6f 6d 0a 63 68 6f 6f 73  anner from.choos
30d10 69 6e 67 20 61 20 70 6f 6f 72 20 69 6e 64 65 78  ing a poor index
30d20 20 77 69 74 68 6f 75 74 20 72 65 73 74 72 69 63   without restric
30d30 74 69 6e 67 20 69 74 20 74 6f 20 75 73 69 6e 67  ting it to using
30d40 20 6f 6e 65 20 73 70 65 63 69 66 69 63 20 69 6e   one specific in
30d50 64 65 78 2e 0a 43 61 72 65 66 75 6c 20 70 6c 61  dex..Careful pla
30d60 63 65 6d 65 6e 74 20 6f 66 20 75 6e 61 72 79 20  cement of unary 
30d70 2b 20 6f 70 65 72 61 74 6f 72 73 20 69 73 20 61  + operators is a
30d80 20 62 65 74 74 65 72 20 6d 65 74 68 6f 64 20 66   better method f
30d90 6f 72 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a  or controlling .
30da0 77 68 69 63 68 20 69 6e 64 69 63 65 73 20 61 72  which indices ar
30db0 65 20 75 73 65 64 20 62 79 20 61 20 71 75 65 72  e used by a quer
30dc0 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54  y.</p>..<li><p>T
30dd0 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74  he [sqlite3_stmt
30de0 5f 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b  _status()] C/C++
30df0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65 74   interface toget
30e00 68 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53 51  her with the.[SQ
30e10 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
30e20 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61  FULLSCAN_STEP] a
30e30 6e 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  nd [SQLITE_STMTS
30e40 54 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72 62  TATUS_SORT] verb
30e50 73 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s.can be used to
30e60 20 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d 74   detect at run-t
30e70 69 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c 20  ime when an SQL 
30e80 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74  statement is not
30e90 0a 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69 76  .making effectiv
30ea0 65 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65 73  e use of indices
30eb0 2e 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61 74  .  Many applicat
30ec0 69 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72 20  ions may prefer 
30ed0 74 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c 69  to.use the [sqli
30ee0 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
30ef0 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  )] interface to 
30f00 64 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69 73  detect index mis
30f10 75 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e 20  use.rather than 
30f20 74 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  the INDEXED BY p
30f30 68 72 61 73 65 20 64 65 73 63 72 69 62 65 64 20  hrase described 
30f40 68 65 72 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a  here.</p>.</ol>.
30f50 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
30f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30fa0 23 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f 66  ####.# A list of
30fb0 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73   keywords.  A as
30fc0 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66  terisk occurs af
30fd0 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20  ter the keyword 
30fe0 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68  if it is on.# th
30ff0 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e  e fallback list.
31000 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c  .#.set keyword_l
31010 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20  ist [lsort {.   
31020 41 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a  ABORT.   ACTION.
31030 20 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a     ADD.   AFTER.
31040 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a     ALL.   ALTER.
31050 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e     ANALYZE.   AN
31060 44 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20  D.   AS.   ASC. 
31070 20 20 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f    ATTACH.   AUTO
31080 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46  INCREMENT.   BEF
31090 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20  ORE.   BEGIN.   
310a0 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20  BETWEEN.   BY.  
310b0 20 43 41 53 43 41 44 45 0a 20 20 20 43 41 53 45   CASCADE.   CASE
310c0 0a 20 20 20 43 41 53 54 0a 20 20 20 43 48 45 43  .   CAST.   CHEC
310d0 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20  K.   COLLATE.   
310e0 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54  COLUMN.   COMMIT
310f0 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20  .   CONFLICT.   
31100 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52  CONSTRAINT.   CR
31110 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20  EATE.   CROSS.  
31120 20 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20   CURRENT_DATE.  
31130 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20   CURRENT_TIME.  
31140 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
31150 4d 50 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20  MP.   DATABASE. 
31160 20 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46    DEFAULT.   DEF
31170 45 52 52 45 44 0a 20 20 20 44 45 46 45 52 52 41  ERRED.   DEFERRA
31180 42 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20  BLE.   DELETE.  
31190 20 44 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a   DESC.   DETACH.
311a0 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44     DISTINCT.   D
311b0 52 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41  ROP.   END.   EA
311c0 43 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53  CH.   ELSE.   ES
311d0 43 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20  CAPE.   EXCEPT. 
311e0 20 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45    EXCLUSIVE.   E
311f0 58 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e  XISTS.   EXPLAIN
31200 0a 20 20 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a  .   FAIL.   FOR.
31210 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52     FOREIGN.   FR
31220 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c  OM.   FULL.   GL
31230 4f 42 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48  OB.   GROUP.   H
31240 41 56 49 4e 47 0a 20 20 20 49 46 0a 20 20 20 49  AVING.   IF.   I
31250 47 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49 41  GNORE.   IMMEDIA
31260 54 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45  TE.   IN.   INDE
31270 58 0a 20 20 20 49 4e 44 45 58 45 44 0a 20 20 20  X.   INDEXED.   
31280 49 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e  INITIALLY.   INN
31290 45 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20  ER.   INSERT.   
312a0 49 4e 53 54 45 41 44 0a 20 20 20 49 4e 54 45 52  INSTEAD.   INTER
312b0 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20  SECT.   INTO.   
312c0 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20  IS.   ISNULL.   
312d0 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c  JOIN.   KEY.   L
312e0 45 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c  EFT.   LIKE.   L
312f0 49 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a 20 20  IMIT.   MATCH.  
31300 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20   NATURAL.   NO. 
31310 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c    NOT.   NOTNULL
31320 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20  .   NULL.   OF. 
31330 20 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20    OFFSET.   ON. 
31340 20 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20    OR.   ORDER.  
31350 20 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20   OUTER.   PLAN. 
31360 20 20 50 52 41 47 4d 41 0a 20 20 20 50 52 49 4d    PRAGMA.   PRIM
31370 41 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20  ARY.   QUERY.   
31380 52 41 49 53 45 0a 20 20 20 52 45 43 55 52 53 49  RAISE.   RECURSI
31390 56 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45 53  VE.   REFERENCES
313a0 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20 52 45  .   REGEXP.   RE
313b0 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53 45  INDEX.   RELEASE
313c0 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52 45  .   RENAME.   RE
313d0 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49 43  PLACE.   RESTRIC
313e0 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52 4f  T.   RIGHT.   RO
313f0 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20  LLBACK.   ROW.  
31400 20 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53 45   SAVEPOINT.   SE
31410 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54  LECT.   SET.   T
31420 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20 20  ABLE.   TEMP.   
31430 54 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48 45  TEMPORARY.   THE
31440 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e 53  N.   TO.   TRANS
31450 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47 45  ACTION.   TRIGGE
31460 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e  R.   UNION.   UN
31470 49 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20  IQUE.   UPDATE. 
31480 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55    USING.   VACUU
31490 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56  M.   VALUES.   V
314a0 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a 20  IEW.   VIRTUAL. 
314b0 20 20 57 49 54 48 0a 20 20 20 57 49 54 48 4f 55    WITH.   WITHOU
314c0 54 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45  T.   WHEN.   WHE
314d0 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b  RE.}]..hd_puts {
314e0 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f  <DIV class="pdf_
314f0 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69  section">}.Secti
31500 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f  on {SQLite Keywo
31510 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b  rds} keywords {{
31520 2a 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53  *SQL keyword} {S
31530 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64  QL keywords}}.hd
31540 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c  _puts {</DIV>}.<
31550 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  /tcl>..<p>The SQ
31560 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69  L standard speci
31570 66 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62  fies a huge numb
31580 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77  er of keywords w
31590 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20  hich may not.be 
315a0 75 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65  used as the name
315b0 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64  s of tables, ind
315c0 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64  ices, columns, d
315d0 61 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64  atabases, user-d
315e0 65 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73  efined.functions
315f0 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69  , collations, vi
31600 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
31610 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65  les, or any othe
31620 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a  r named object..
31630 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77  The list of keyw
31640 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20  ords is so long 
31650 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20  that few people 
31660 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65  can remember the
31670 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20  m all..For most 
31680 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73  SQL code, your s
31690 61 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20  afest bet is to 
316a0 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e  never use any En
316b0 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77  glish language.w
316c0 6f 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20  ord as the name 
316d0 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  of a user-define
316e0 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c  d object.</p>..<
316f0 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f  p>If you want to
31700 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61   use a keyword a
31710 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65  s a name, you ne
31720 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20  ed to quote it. 
31730 20 54 68 65 72 65 0a 61 72 65 20 66 6f 75 72 20   There.are four 
31740 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20  ways of quoting 
31750 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69  keywords in SQLi
31760 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c  te:</p>..<p>.<bl
31770 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
31780 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
31790 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77  n="top"><b>'keyw
317a0 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord'</b></td><td
317b0 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
317c0 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
317d0 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74  d in single quot
317e0 65 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c  es is a string l
317f0 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72  iteral.</td></tr
31800 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
31810 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79  gn="top"><b>"key
31820 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word"</b></td><t
31830 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
31840 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c  keyword in doubl
31850 65 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69  e-quotes is an i
31860 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c  dentifier.</td><
31870 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76  /tr>..<tr>.<td v
31880 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26  align="top"><b>&
31890 23 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b  #91;keyword&#93;
318a0 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
318b0 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
318c0 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73  rd enclosed in s
318d0 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 69  quare brackets i
318e0 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  s .        an id
318f0 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
31900 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
31910 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
31920 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
31930 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
31940 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51  MS Access and SQ
31950 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20  L Server and is 
31960 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69  included in SQLi
31970 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63  te for.        c
31980 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74  ompatibility.</t
31990 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74  d></tr>..<tr>.<t
319a0 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
319b0 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23  b>&#96;keyword&#
319c0 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  96;</b></td><td>
319d0 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
319e0 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69  yword enclosed i
319f0 6e 20 67 72 61 76 65 20 61 63 63 65 6e 74 73 20  n grave accents 
31a00 28 41 53 43 49 49 20 63 6f 64 65 20 39 36 29 20  (ASCII code 96) 
31a10 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69  is .        an i
31a20 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73  dentifier.  This
31a30 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64   is not standard
31a40 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74   SQL.  This quot
31a50 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20  ing mechanism.  
31a60 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79        is used by
31a70 20 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e   MySQL and is in
31a80 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65  cluded in SQLite
31a90 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d   for.        com
31aa0 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e  patibility.</td>
31ab0 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
31ac0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70  /blockquote>.</p
31ad0 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69  >..<p>For resili
31ae0 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f  ence when confro
31af0 6e 74 65 64 20 77 69 74 68 20 68 69 73 74 6f 72  nted with histor
31b00 69 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65  ical SQL stateme
31b10 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c  nts, SQLite.will
31b20 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20   sometimes bend 
31b30 74 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65  the quoting rule
31b40 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75  s above:</p>..<u
31b50 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20  l>.<li><p>^If a 
31b60 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c  keyword in singl
31b70 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62  e.quotes (ex: <b
31b80 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62  >'key'</b> or <b
31b90 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20  >'glob'</b>) is 
31ba0 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78  used in a contex
31bb0 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74  t where.an ident
31bc0 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64  ifier is allowed
31bd0 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72   but where a str
31be0 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e  ing literal is n
31bf0 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e  ot allowed, then
31c00 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e  .the token is un
31c10 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61  derstood to be a
31c20 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73  n identifier ins
31c30 74 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67  tead of a string
31c40 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f   literal..</p></
31c50 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  li>..<li><p>^If 
31c60 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75  a keyword in dou
31c70 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20  ble.quotes (ex: 
31c80 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20  <b>"key"</b> or 
31c90 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69  <b>"glob"</b>) i
31ca0 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74  s used in a cont
31cb0 65 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e  ext where.it can
31cc0 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20  not be resolved 
31cd0 74 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  to an identifier
31ce0 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72   but where a str
31cf0 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61  ing literal.is a
31d00 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65  llowed, then the
31d10 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73   token is unders
31d20 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72  tood to be a str
31d30 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74  ing literal inst
31d40 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69  ead.of an identi
31d50 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  fier.</p></li>.<
31d60 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d  /ul>..<p>Program
31d70 6d 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e  mers are caution
31d80 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68  ed not to use th
31d90 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73  e two exceptions
31da0 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68   described in.th
31db0 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65  e previous bulle
31dc0 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a  ts.  We emphasiz
31dd0 65 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73  e that they exis
31de0 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f  t only so that o
31df0 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65  ld.and ill-forme
31e00 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  d SQL statements
31e10 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63   will run correc
31e20 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72  tly.  Future ver
31e30 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
31e40 6d 69 67 68 74 20 72 61 69 73 65 20 65 72 72 6f  might raise erro
31e50 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63  rs instead of ac
31e60 63 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c 66  cepting the malf
31e70 6f 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74 73  ormed.statements
31e80 20 63 6f 76 65 72 65 64 20 62 79 20 74 68 65 20   covered by the 
31e90 65 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76 65  exceptions above
31ea0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74  .</p>..<p>.SQLit
31eb0 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f  e adds new keywo
31ec0 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f  rds from time to
31ed0 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61   time when it ta
31ee0 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75  kes on new featu
31ef0 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65  res..So to preve
31f00 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f  nt your code fro
31f10 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62  m being broken b
31f20 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65  y future enhance
31f30 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c  ments, you shoul
31f40 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65  d.normally quote
31f50 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20   any identifier 
31f60 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69  that is an Engli
31f70 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64  sh language word
31f80 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f  , even if.you do
31f90 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f   not have to..</
31fa0 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74  p>..<p>.The list
31fb0 20 62 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c   below shows all
31fc0 20 70 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f 72   possible keywor
31fd0 64 73 20 75 73 65 64 20 62 79 20 61 6e 79 20 62  ds used by any b
31fe0 75 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20 72  uild of.SQLite r
31ff0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f  egardless of [co
32000 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
32010 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73  ns].  .Most reas
32020 6f 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75 72 61  onable configura
32030 74 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f  tions use most o
32040 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b  r all of these k
32050 65 79 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d  eywords,.but som
32060 65 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 62  e keywords may b
32070 65 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 53  e omitted when S
32080 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74  QL language feat
32090 75 72 65 73 20 61 72 65 0a 64 69 73 61 62 6c 65  ures are.disable
320a0 64 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73 73 20  d..^(Regardless 
320b0 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  of the compile-t
320c0 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ime configuratio
320d0 6e 2c 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65  n, any identifie
320e0 72 20 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e  r that is not on
320f0 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c  .the following <
32100 74 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65  tcl>hd_puts [lle
32110 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69  ngth $keyword_li
32120 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e  st]</tcl> elemen
32130 74 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20 61 20  t.list is not a 
32140 6b 65 79 77 6f 72 64 20 74 6f 20 74 68 65 20 53  keyword to the S
32150 51 4c 20 70 61 72 73 65 72 20 69 6e 20 53 51 4c  QL parser in SQL
32160 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ite:.</p>..<bloc
32170 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77  kquote>.<table w
32180 69 64 74 68 3d 22 31 30 30 25 22 3e 3c 74 72 3e  idth="100%"><tr>
32190 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74  .<td align="left
321a0 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77  " valign="top" w
321b0 69 64 74 68 3d 22 32 30 25 22 3e 0a 3c 74 63 6c  idth="20%">.<tcl
321c0 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68  >.set n [llength
321d0 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a   $keyword_list].
321e0 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e  set nCol 5.set n
321f0 52 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24  Row [expr {($n+$
32200 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a  nCol-1)/$nCol}].
32210 73 65 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20  set i 0.foreach 
32220 77 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69  word $keyword_li
32230 73 74 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 24  st {.  if {$i==$
32240 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70  nRow} {.    hd_p
32250 75 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61  uts "</td><td va
32260 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69  lign=\"top\" ali
32270 67 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74  gn=\"left\" widt
32280 68 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20  h=\"20%\">".    
32290 73 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65  set i 1.  } else
322a0 20 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20   {.    incr i.  
322b0 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 24 77 6f  }.  hd_puts "$wo
322c0 72 64 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63  rd<br>\n".}.</tc
322d0 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74  l>.</td></tr></t
322e0 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  able></blockquot
322f0 65 3e 29 5e 0a                                   e>)^.