Documentation Source Text

Hex Artifact Content
Login

Artifact fe0adf7159a7ddce928ac3517588b5c4c42f64f9:


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 63 68  AME TO syntax ch
0f60: 61 6e 67 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  anges the name o
0f70: 66 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d  f <yyterm>table-
0f80: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 74 6f  name</yyterm>.to
0f90: 20 3c 79 79 74 65 72 6d 3e 6e 65 77 2d 74 61 62   <yyterm>new-tab
0fa0: 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
0fb0: 2e 29 5e 0a 54 68 69 73 20 63 6f 6d 6d 61 6e 64  .)^.This command
0fc0: 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64   .cannot be used
0fd0: 20 74 6f 20 6d 6f 76 65 20 61 20 74 61 62 6c 65   to move a table
0fe0: 20 62 65 74 77 65 65 6e 20 61 74 74 61 63 68 65   between attache
0ff0: 64 20 64 61 74 61 62 61 73 65 73 2c 20 6f 6e 6c  d databases, onl
1000: 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a 61 20 74  y to rename .a t
1010: 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20  able within the 
1020: 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e 3c 2f  same database.</
1030: 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 74 68 65 20  p>..<p> ^If the 
1040: 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61  table being rena
1050: 6d 65 64 20 68 61 73 20 74 72 69 67 67 65 72 73  med has triggers
1060: 20 6f 72 20 69 6e 64 69 63 65 73 2c 20 74 68 65   or indices, the
1070: 6e 20 74 68 65 73 65 20 72 65 6d 61 69 6e 0a 61  n these remain.a
1080: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 74  ttached to the t
1090: 61 62 6c 65 20 61 66 74 65 72 20 69 74 20 68 61  able after it ha
10a0: 73 20 62 65 65 6e 20 72 65 6e 61 6d 65 64 2e 20  s been renamed. 
10b0: 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68   ^However, if th
10c0: 65 72 65 20 61 72 65 0a 61 6e 79 20 76 69 65 77  ere are.any view
10d0: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2c 20 6f 72   definitions, or
10e0: 20 73 74 61 74 65 6d 65 6e 74 73 20 65 78 65 63   statements exec
10f0: 75 74 65 64 20 62 79 20 74 72 69 67 67 65 72 73  uted by triggers
1100: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 0a 74   that refer to.t
1110: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1120: 65 6e 61 6d 65 64 2c 20 74 68 65 73 65 20 61 72  enamed, these ar
1130: 65 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61  e not automatica
1140: 6c 6c 79 20 6d 6f 64 69 66 69 65 64 20 74 6f 20  lly modified to 
1150: 75 73 65 20 74 68 65 20 6e 65 77 0a 74 61 62 6c  use the new.tabl
1160: 65 20 6e 61 6d 65 2e 20 49 66 20 74 68 69 73 20  e name. If this 
1170: 69 73 20 72 65 71 75 69 72 65 64 2c 20 74 68 65  is required, the
1180: 20 74 72 69 67 67 65 72 73 20 6f 72 20 76 69 65   triggers or vie
1190: 77 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 6d 75  w definitions mu
11a0: 73 74 20 62 65 0a 64 72 6f 70 70 65 64 20 61 6e  st be.dropped an
11b0: 64 20 72 65 63 72 65 61 74 65 64 20 74 6f 20 75  d recreated to u
11c0: 73 65 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  se the new table
11d0: 20 6e 61 6d 65 20 62 79 20 68 61 6e 64 2e 0a 3c   name by hand..<
11e0: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
11f0: 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  ><table border="
1200: 31 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  1" cellpadding="
1210: 31 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 0a 3c 65  10">.<tr><td>.<e
1220: 6d 3e 49 6d 70 6f 72 74 61 6e 74 20 4e 6f 74 65  m>Important Note
1230: 3a 3c 2f 65 6d 3e 0a 54 68 65 20 27 41 4c 54 45  :</em>.The 'ALTE
1240: 52 20 54 41 42 4c 45 20 2e 2e 2e 20 52 45 4e 41  R TABLE ... RENA
1250: 4d 45 20 54 4f 20 2e 2e 2e 27 20 63 6f 6d 6d 61  ME TO ...' comma
1260: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 75 70 64 61  nd does not upda
1270: 74 65 20 61 63 74 69 6f 6e 0a 73 74 61 74 65 6d  te action.statem
1280: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
1290: 67 65 72 73 20 6f 72 20 53 45 4c 45 43 54 20 73  gers or SELECT s
12a0: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
12b0: 20 76 69 65 77 73 2e 0a 49 66 20 74 68 65 20 74   views..If the t
12c0: 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d  able being renam
12d0: 65 64 20 69 73 20 72 65 66 65 72 65 6e 63 65 64  ed is referenced
12e0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74 72 69   from within tri
12f0: 67 67 65 72 73 20 6f 72 20 76 69 65 77 73 2c 0a  ggers or views,.
1300: 74 68 65 6e 20 74 68 6f 73 65 20 74 72 69 67 67  then those trigg
1310: 65 72 73 20 61 6e 64 20 76 69 65 77 73 20 6d 75  ers and views mu
1320: 73 74 20 62 65 20 64 72 6f 70 70 65 64 20 61 6e  st be dropped an
1330: 64 20 72 65 63 72 65 61 74 65 64 20 73 65 70 61  d recreated sepa
1340: 72 61 74 65 6c 79 0a 62 79 20 74 68 65 20 61 70  rately.by the ap
1350: 70 6c 69 63 61 74 69 6f 6e 2e 0a 3c 2f 74 64 3e  plication..</td>
1360: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  </tr></table>.</
1370: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
1380: 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
1390: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
13a0: 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  e .[foreign_keys
13b0: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
13c0: 64 5d 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20  d] when a table 
13d0: 69 73 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e  is renamed, then
13e0: 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65   any.[foreign-ke
13f0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
1400: 45 4e 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69  ENCES clauses] i
1410: 6e 20 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74  n any table (eit
1420: 68 65 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65  her the.table be
1430: 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73  ing renamed or s
1440: 6f 6d 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29  ome other table)
1450: 0a 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74  .that refer to t
1460: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1470: 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66  enamed are modif
1480: 69 65 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f  ied to refer .to
1490: 20 74 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62   the renamed tab
14a0: 6c 65 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61  le by its new na
14b0: 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44  me...<p> ^The AD
14c0: 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a  D COLUMN syntax.
14d0: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 61  is used to add a
14e0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   new column to a
14f0: 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
1500: 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  ..^The new colum
1510: 6e 20 69 73 20 61 6c 77 61 79 73 20 61 70 70 65  n is always appe
1520: 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  nded to the end 
1530: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  of the list of e
1540: 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  xisting columns.
1550: 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66  .The [column-def
1560: 5d 20 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74  ] rule defines t
1570: 68 65 20 63 68 61 72 61 63 74 65 72 69 73 74 69  he characteristi
1580: 63 73 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f  cs of the new co
1590: 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20  lumn..^(The new 
15a0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20  column may take 
15b0: 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73  any of the forms
15c0: 20 70 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20   permissible in 
15d0: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
15e0: 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68  .statement, with
15f0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
1600: 65 73 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c  estrictions:)^.<
1610: 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  ul>.<li>^The col
1620: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
1630: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f   a PRIMARY KEY o
1640: 72 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  r UNIQUE constra
1650: 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54  int.</li>.<li>^T
1660: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1670: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
1680: 20 76 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e   value of CURREN
1690: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
16a0: 44 41 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45  DATE, .    CURRE
16b0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72  NT_TIMESTAMP, or
16c0: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
16d0: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f  n parentheses.</
16e0: 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f  li>.<li>^If a NO
16f0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
1700: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
1710: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
1720: 6d 75 73 74 20 68 61 76 65 20 61 0a 20 20 20 20  must have a.    
1730: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74  default value ot
1740: 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c  her than NULL..<
1750: 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  li>^If [foreign 
1760: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1770: 20 61 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65   are [foreign_ke
1780: 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62  ys pragma | enab
1790: 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63  led] and.    a c
17a0: 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f  olumn with a [fo
17b0: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
17c0: 20 7c 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c   | REFERENCES cl
17d0: 61 75 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64  ause].    is add
17e0: 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  ed, the column m
17f0: 75 73 74 20 68 61 76 65 20 61 20 64 65 66 61 75  ust have a defau
1800: 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c  lt value of NULL
1810: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74  ..</ul>..<p>^Not
1820: 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e  e also that when
1830: 20 61 64 64 69 6e 67 20 61 20 5b 43 48 45 43 4b   adding a [CHECK
1840: 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68   constraint], th
1850: 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  e CHECK constrai
1860: 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64  nt.is not tested
1870: 20 61 67 61 69 6e 73 74 20 70 72 65 65 78 69 73   against preexis
1880: 74 69 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65  ting rows of the
1890: 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61   table..^This ca
18a0: 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61  n result in a ta
18b0: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
18c0: 73 20 64 61 74 61 20 74 68 61 74 0a 69 73 20 69  s data that.is i
18d0: 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74  n violation of t
18e0: 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  he CHECK constra
18f0: 69 6e 74 2e 20 20 46 75 74 75 72 65 20 76 65 72  int.  Future ver
1900: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1910: 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20  might.change to 
1920: 76 61 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63  validate CHECK c
1930: 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20 74 68  onstraints as th
1940: 65 79 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70  ey are added.</p
1950: 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 65 63 75  >..<p> The execu
1960: 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65  tion time of the
1970: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1980: 6d 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64  mand is independ
1990: 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e  ent of.the amoun
19a0: 74 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65  t of data in the
19b0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54   table.  The ALT
19c0: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
19d0: 20 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79   runs as quickly
19e0: 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68  .on a table with
19f0: 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73   10 million rows
1a00: 20 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61   as it does on a
1a10: 20 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f   table with 1 ro
1a20: 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65  w..</p>..<p>Afte
1a30: 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73  r ADD COLUMN has
1a40: 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64   been run on a d
1a50: 61 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61  atabase, that da
1a60: 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a  tabase will not.
1a70: 62 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53  be readable by S
1a80: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1a90: 31 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e  1.3 and earlier.
1aa0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
1ab0: 61 67 6d 65 6e 74 20 6f 74 68 65 72 61 6c 74 65  agment otheralte
1ac0: 72 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4d 61 6b 69  r</tcl>.<h3>Maki
1ad0: 6e 67 20 4f 74 68 65 72 20 4b 69 6e 64 73 20 4f  ng Other Kinds O
1ae0: 66 20 54 61 62 6c 65 20 53 63 68 65 6d 61 20 43  f Table Schema C
1af0: 68 61 6e 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  hanges</h3>..<p>
1b00: 20 54 68 65 20 6f 6e 6c 79 20 73 63 68 65 6d 61   The only schema
1b10: 20 61 6c 74 65 72 69 6e 67 20 63 6f 6d 6d 61 6e   altering comman
1b20: 64 73 20 64 69 72 65 63 74 6c 79 20 73 75 70 70  ds directly supp
1b30: 6f 72 74 65 64 20 62 79 20 53 51 4c 69 74 65 20  orted by SQLite 
1b40: 61 72 65 20 74 68 65 0a 22 72 65 6e 61 6d 65 20  are the."rename 
1b50: 74 61 62 6c 65 22 20 61 6e 64 20 22 61 64 64 20  table" and "add 
1b60: 63 6f 6c 75 6d 6e 22 20 63 6f 6d 6d 61 6e 64 73  column" commands
1b70: 20 73 68 6f 77 6e 20 61 62 6f 76 65 2e 20 20 48   shown above.  H
1b80: 6f 77 65 76 65 72 2c 20 61 70 70 6c 69 63 61 74  owever, applicat
1b90: 69 6f 6e 73 0a 63 61 6e 20 6d 61 6b 65 20 6f 74  ions.can make ot
1ba0: 68 65 72 20 61 72 62 69 74 72 61 72 79 20 63 68  her arbitrary ch
1bb0: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 66 6f 72  anges to the for
1bc0: 6d 61 74 20 6f 66 20 61 20 74 61 62 6c 65 20 75  mat of a table u
1bd0: 73 69 6e 67 20 61 20 73 69 6d 70 6c 65 0a 73 65  sing a simple.se
1be0: 71 75 65 6e 63 65 20 6f 66 20 6f 70 65 72 61 74  quence of operat
1bf0: 69 6f 6e 73 2e 0a 54 68 65 20 73 74 65 70 73 20  ions..The steps 
1c00: 74 6f 20 6d 61 6b 65 20 61 72 62 69 74 72 61 72  to make arbitrar
1c10: 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  y changes to the
1c20: 20 73 63 68 65 6d 61 20 64 65 73 69 67 6e 20 6f   schema design o
1c30: 66 20 73 6f 6d 65 20 74 61 62 6c 65 20 58 0a 61  f some table X.a
1c40: 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  re as follows:..
1c50: 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20  <ol>.<li><p>.If 
1c60: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
1c70: 74 72 61 69 6e 74 73 20 61 72 65 20 65 6e 61 62  traints are enab
1c80: 6c 65 64 2c 0a 64 69 73 61 62 6c 65 20 74 68 65  led,.disable the
1c90: 6d 20 75 73 69 6e 67 20 5b 50 52 41 47 4d 41 20  m using [PRAGMA 
1ca0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 7c 20 50  foreign_keys | P
1cb0: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
1cc0: 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70  ys=OFF]...<li><p
1cd0: 3e 0a 53 74 61 72 74 20 61 20 74 72 61 6e 73 61  >.Start a transa
1ce0: 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ction...<li><p>.
1cf0: 52 65 6d 65 6d 62 65 72 20 74 68 65 20 66 6f 72  Remember the for
1d00: 6d 61 74 20 6f 66 20 61 6c 6c 20 69 6e 64 65 78  mat of all index
1d10: 65 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 20  es and triggers 
1d20: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1d30: 74 61 62 6c 65 20 58 2e 0a 54 68 69 73 20 69 6e  table X..This in
1d40: 66 6f 72 6d 61 74 69 6f 6e 20 77 69 6c 6c 20 62  formation will b
1d50: 65 20 6e 65 65 64 65 64 20 69 6e 20 73 74 65 70  e needed in step
1d60: 20 38 20 62 65 6c 6f 77 2e 20 20 4f 6e 65 20 77   8 below.  One w
1d70: 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73  ay to do this is
1d80: 0a 74 6f 20 72 75 6e 20 61 20 71 75 65 72 79 20  .to run a query 
1d90: 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  like the followi
1da0: 6e 67 3a 0a 53 45 4c 45 43 54 20 74 79 70 65 2c  ng:.SELECT type,
1db0: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
1dc0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 62  _master WHERE tb
1dd0: 6c 5f 6e 61 6d 65 3d 27 58 27 2e 0a 0a 3c 6c 69  l_name='X'...<li
1de0: 3e 3c 70 3e 0a 55 73 65 20 5b 43 52 45 41 54 45  ><p>.Use [CREATE
1df0: 20 54 41 42 4c 45 5d 20 74 6f 20 63 6f 6e 73 74   TABLE] to const
1e00: 72 75 63 74 20 61 20 6e 65 77 20 74 61 62 6c 65  ruct a new table
1e10: 20 22 6e 65 77 5f 58 22 20 74 68 61 74 20 69 73   "new_X" that is
1e20: 20 69 6e 20 74 68 65 20 64 65 73 69 72 65 64 0a   in the desired.
1e30: 72 65 76 69 73 65 64 20 66 6f 72 6d 61 74 20 6f  revised format o
1e40: 66 20 74 61 62 6c 65 20 58 2e 20 20 4d 61 6b 65  f table X.  Make
1e50: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 6e   sure that the n
1e60: 61 6d 65 20 22 6e 65 77 5f 58 22 20 64 6f 65 73  ame "new_X" does
1e70: 20 6e 6f 74 20 63 6f 6c 6c 69 64 65 0a 77 69 74   not collide.wit
1e80: 68 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20 74  h any existing t
1e90: 61 62 6c 65 20 6e 61 6d 65 2c 20 6f 66 20 63 6f  able name, of co
1ea0: 75 72 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 54  urse...<li><p>.T
1eb0: 72 61 6e 73 66 65 72 20 63 6f 6e 74 65 6e 74 20  ransfer content 
1ec0: 66 72 6f 6d 20 58 20 69 6e 74 6f 20 6e 65 77 5f  from X into new_
1ed0: 58 20 75 73 69 6e 67 20 61 20 73 74 61 74 65 6d  X using a statem
1ee0: 65 6e 74 0a 6c 69 6b 65 3a 20 49 4e 53 45 52 54  ent.like: INSERT
1ef0: 20 49 4e 54 4f 20 6e 65 77 5f 58 20 53 45 4c 45   INTO new_X SELE
1f00: 43 54 20 2e 2e 2e 20 46 52 4f 4d 20 58 2e 0a 0a  CT ... FROM X...
1f10: 3c 6c 69 3e 3c 70 3e 0a 44 72 6f 70 20 74 68 65  <li><p>.Drop the
1f20: 20 6f 6c 64 20 74 61 62 6c 65 20 58 3a 20 20 5b   old table X:  [
1f30: 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 44 52 4f  DROP TABLE | DRO
1f40: 50 20 54 41 42 4c 45 20 58 5d 2e 0a 0a 3c 6c 69  P TABLE X]...<li
1f50: 3e 3c 70 3e 0a 43 68 61 6e 67 65 20 74 68 65 20  ><p>.Change the 
1f60: 6e 61 6d 65 20 6f 66 20 6e 65 77 5f 58 20 74 6f  name of new_X to
1f70: 20 58 20 75 73 69 6e 67 3a 20 41 4c 54 45 52 20   X using: ALTER 
1f80: 54 41 42 4c 45 20 6e 65 77 5f 58 20 52 45 4e 41  TABLE new_X RENA
1f90: 4d 45 20 54 4f 20 58 2e 0a 0a 3c 6c 69 3e 3c 70  ME TO X...<li><p
1fa0: 3e 0a 55 73 65 20 5b 43 52 45 41 54 45 20 49 4e  >.Use [CREATE IN
1fb0: 44 45 58 5d 20 61 6e 64 20 5b 43 52 45 41 54 45  DEX] and [CREATE
1fc0: 20 54 52 49 47 47 45 52 5d 20 74 6f 20 72 65 63   TRIGGER] to rec
1fd0: 6f 6e 73 74 72 75 63 74 20 69 6e 64 65 78 65 73  onstruct indexes
1fe0: 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73   and triggers.as
1ff0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 61  sociated with ta
2000: 62 6c 65 20 58 2e 20 20 50 65 72 68 61 70 73 20  ble X.  Perhaps 
2010: 75 73 65 20 74 68 65 20 6f 6c 64 20 66 6f 72 6d  use the old form
2020: 61 74 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  at of the trigge
2030: 72 73 20 61 6e 64 0a 69 6e 64 65 78 65 73 20 73  rs and.indexes s
2040: 61 76 65 64 20 66 72 6f 6d 20 73 74 65 70 20 33  aved from step 3
2050: 20 61 62 6f 76 65 20 61 73 20 61 20 67 75 69 64   above as a guid
2060: 65 2c 20 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65  e, making change
2070: 73 20 61 73 20 61 70 70 72 6f 70 72 69 61 74 65  s as appropriate
2080: 0a 66 6f 72 20 74 68 65 20 61 6c 74 65 72 61 74  .for the alterat
2090: 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 49 66 20  ion...<li><p>If 
20a0: 61 6e 79 20 76 69 65 77 73 20 72 65 66 65 72 20  any views refer 
20b0: 74 6f 20 74 61 62 6c 65 20 58 20 69 6e 20 61 20  to table X in a 
20c0: 77 61 79 20 74 68 61 74 20 69 73 20 61 66 66 65  way that is affe
20d0: 63 74 65 64 20 62 79 20 74 68 65 0a 73 63 68 65  cted by the.sche
20e0: 6d 61 20 63 68 61 6e 67 65 2c 20 74 68 65 6e 20  ma change, then 
20f0: 64 72 6f 70 20 74 68 6f 73 65 20 76 69 65 77 73  drop those views
2100: 20 75 73 69 6e 67 20 5b 44 52 4f 50 20 56 49 45   using [DROP VIE
2110: 57 5d 20 61 6e 64 20 72 65 63 72 65 61 74 65 20  W] and recreate 
2120: 74 68 65 6d 0a 77 69 74 68 20 77 68 61 74 65 76  them.with whatev
2130: 65 72 20 63 68 61 6e 67 65 73 20 61 72 65 20 6e  er changes are n
2140: 65 63 65 73 73 61 72 79 20 74 6f 20 61 63 63 6f  ecessary to acco
2150: 6d 6d 6f 64 61 74 65 20 74 68 65 20 73 63 68 65  mmodate the sche
2160: 6d 61 20 63 68 61 6e 67 65 0a 75 73 69 6e 67 20  ma change.using 
2170: 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2e 0a 0a  [CREATE VIEW]...
2180: 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69  <li><p>.If forei
2190: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
21a0: 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e 61 6c  ts were original
21b0: 6c 79 20 65 6e 61 62 6c 65 64 0a 74 68 65 6e 20  ly enabled.then 
21c0: 72 75 6e 20 5b 50 52 41 47 4d 41 20 66 6f 72 65  run [PRAGMA fore
21d0: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 5d 20 74  ign_key_check] t
21e0: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
21f0: 65 20 73 63 68 65 6d 61 0a 63 68 61 6e 67 65 20  e schema.change 
2200: 64 69 64 20 6e 6f 74 20 62 72 65 61 6b 20 61 6e  did not break an
2210: 79 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  y foreign key co
2220: 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 0a 3c 6c 69  nstraints....<li
2230: 3e 3c 70 3e 0a 43 6f 6d 6d 69 74 20 74 68 65 20  ><p>.Commit the 
2240: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 72  transaction star
2250: 74 65 64 20 69 6e 20 73 74 65 70 20 32 2e 0a 0a  ted in step 2...
2260: 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69  <li><p>.If forei
2270: 67 6e 20 6b 65 79 73 20 63 6f 6e 73 74 72 61 69  gn keys constrai
2280: 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e 61  nts were origina
2290: 6c 6c 79 20 65 6e 61 62 6c 65 64 2c 20 72 65 65  lly enabled, ree
22a0: 6e 61 62 6c 65 20 74 68 65 6d 20 6e 6f 77 2e 0a  nable them now..
22b0: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 70 72  </ol>..<p>The pr
22c0: 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20 69 73  ocedure above is
22d0: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 67 65 6e 65   completely gene
22e0: 72 61 6c 20 61 6e 64 20 77 69 6c 6c 20 77 6f 72  ral and will wor
22f0: 6b 20 65 76 65 6e 20 69 66 20 74 68 65 0a 73 63  k even if the.sc
2300: 68 65 6d 61 20 63 68 61 6e 67 65 20 63 61 75 73  hema change caus
2310: 65 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  es the informati
2320: 6f 6e 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  on stored in the
2330: 20 74 61 62 6c 65 20 74 6f 20 63 68 61 6e 67 65   table to change
2340: 2e 0a 53 6f 20 74 68 65 20 66 75 6c 6c 20 70 72  ..So the full pr
2350: 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20 69 73  ocedure above is
2360: 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
2370: 20 64 72 6f 70 70 69 6e 67 20 61 20 63 6f 6c 75   dropping a colu
2380: 6d 6e 2c 0a 63 68 61 6e 67 69 6e 67 20 74 68 65  mn,.changing the
2390: 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e   order of column
23a0: 73 2c 20 61 64 64 69 6e 67 20 6f 72 20 72 65 6d  s, adding or rem
23b0: 6f 76 69 6e 67 20 61 20 55 4e 49 51 55 45 20 63  oving a UNIQUE c
23c0: 6f 6e 73 74 72 61 69 6e 74 0a 6f 72 20 50 52 49  onstraint.or PRI
23d0: 4d 41 52 59 20 4b 45 59 2c 20 61 64 64 69 6e 67  MARY KEY, adding
23e0: 20 43 48 45 43 4b 20 6f 72 20 46 4f 52 45 49 47   CHECK or FOREIG
23f0: 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20 4e 55 4c  N KEY or NOT NUL
2400: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 6f  L constraints,.o
2410: 72 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 64  r changing the d
2420: 61 74 61 74 79 70 65 20 66 6f 72 20 61 20 63 6f  atatype for a co
2430: 6c 75 6d 6e 2c 20 66 6f 72 20 65 78 61 6d 70 6c  lumn, for exampl
2440: 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 61 20 73  e.  However, a s
2450: 69 6d 70 6c 65 72 0a 61 6e 64 20 66 61 73 74 65  impler.and faste
2460: 72 20 70 72 6f 63 65 64 75 72 65 20 63 61 6e 20  r procedure can 
2470: 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 75 73  optionally be us
2480: 65 64 20 66 6f 72 0a 73 6f 6d 65 20 63 68 61 6e  ed for.some chan
2490: 67 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 20 61  ges that do no a
24a0: 66 66 65 63 74 20 74 68 65 20 6f 6e 2d 64 69 73  ffect the on-dis
24b0: 6b 20 63 6f 6e 74 65 6e 74 20 69 6e 20 61 6e 79  k content in any
24c0: 20 77 61 79 2e 0a 54 68 65 20 66 6f 6c 6c 6f 77   way..The follow
24d0: 69 6e 67 20 73 69 6d 70 6c 65 72 20 70 72 6f 63  ing simpler proc
24e0: 65 64 75 72 65 20 69 73 20 61 70 70 72 6f 70 72  edure is appropr
24f0: 69 61 74 65 20 66 6f 72 20 72 65 6d 6f 76 69 6e  iate for removin
2500: 67 0a 43 48 45 43 4b 20 6f 72 20 46 4f 52 45 49  g.CHECK or FOREI
2510: 47 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20 4e 55  GN KEY or NOT NU
2520: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a  LL constraints,.
2530: 72 65 6e 61 6d 69 6e 67 20 63 6f 6c 75 6d 6e 73  renaming columns
2540: 2c 20 6f 72 20 61 64 64 69 6e 67 20 6f 72 20 72  , or adding or r
2550: 65 6d 6f 76 69 6e 67 20 6f 72 20 63 68 61 6e 67  emoving or chang
2560: 69 6e 67 20 64 65 66 61 75 6c 74 20 76 61 6c 75  ing default valu
2570: 65 73 20 6f 6e 0a 61 20 63 6f 6c 75 6d 6e 2e 0a  es on.a column..
2580: 0a 3c 6f 6c 3e 0a 3c 6c 49 3e 3c 70 3e 20 53 74  .<ol>.<lI><p> St
2590: 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
25a0: 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20  n...<li><p> Run 
25b0: 5b 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76  [PRAGMA schema_v
25c0: 65 72 73 69 6f 6e 5d 20 74 6f 20 64 65 74 65 72  ersion] to deter
25d0: 6d 69 6e 65 20 74 68 65 20 63 75 72 72 65 6e 74  mine the current
25e0: 20 73 63 68 65 6d 61 0a 76 65 72 73 69 6f 6e 20   schema.version 
25f0: 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6e 75  number.  This nu
2600: 6d 62 65 72 20 77 69 6c 6c 20 62 65 20 6e 65 65  mber will be nee
2610: 64 65 64 20 66 6f 72 20 73 74 65 70 20 36 20 62  ded for step 6 b
2620: 65 6c 6f 77 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 41  elow...<li><p> A
2630: 63 74 69 76 61 74 65 20 73 63 68 65 6d 61 20 65  ctivate schema e
2640: 64 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50  diting using .[P
2650: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
2660: 63 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77  chema | PRAGMA w
2670: 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
2680: 4e 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e  N]...<li><p> Run
2690: 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 73 74 61   an [UPDATE] sta
26a0: 74 65 6d 65 6e 74 20 74 6f 20 63 68 61 6e 67 65  tement to change
26b0: 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   the definition 
26c0: 6f 66 20 74 61 62 6c 65 20 58 0a 69 6e 20 74 68  of table X.in th
26d0: 65 20 5b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  e [sqlite_master
26e0: 20 74 61 62 6c 65 5d 3a 20 0a 55 50 44 41 54 45   table]: .UPDATE
26f0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 53   sqlite_master S
2700: 45 54 20 73 71 6c 3d 2e 2e 2e 20 57 48 45 52 45  ET sql=... WHERE
2710: 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41 4e   type='table' AN
2720: 44 20 6e 61 6d 65 3d 27 58 27 3b 0a 3c 70 3e 3c  D name='X';.<p><
2730: 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e  em>Caution:</em>
2740: 20 20 4d 61 6b 69 6e 67 20 61 20 63 68 61 6e 67    Making a chang
2750: 65 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f  e to the sqlite_
2760: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6c 69 6b  master table lik
2770: 65 20 74 68 69 73 20 77 69 6c 6c 0a 72 65 6e 64  e this will.rend
2780: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
2790: 63 6f 72 72 75 70 74 20 61 6e 64 20 75 6e 72 65  corrupt and unre
27a0: 61 64 61 62 6c 65 20 69 66 20 74 68 65 20 63 68  adable if the ch
27b0: 61 6e 67 65 20 63 6f 6e 74 61 69 6e 73 0a 61 20  ange contains.a 
27c0: 73 79 6e 74 61 78 20 65 72 72 6f 72 2e 20 20 49  syntax error.  I
27d0: 74 20 69 73 20 73 75 67 67 65 73 74 65 64 20 74  t is suggested t
27e0: 68 61 74 20 63 61 72 65 66 75 6c 20 74 65 73 74  hat careful test
27f0: 69 6e 67 20 6f 66 20 74 68 65 20 55 50 44 41 54  ing of the UPDAT
2800: 45 0a 73 74 61 74 65 6d 65 6e 74 20 62 65 20 64  E.statement be d
2810: 6f 6e 65 20 6f 6e 20 61 20 73 65 70 61 72 61 74  one on a separat
2820: 65 20 62 6c 61 6e 6b 20 64 61 74 61 62 61 73 65  e blank database
2830: 20 70 72 69 6f 72 20 74 6f 20 75 73 69 6e 67 20   prior to using 
2840: 69 74 20 6f 6e 0a 61 20 64 61 74 61 62 61 73 65  it on.a database
2850: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6d 70 6f   containing impo
2860: 72 74 61 6e 74 20 64 61 74 61 2e 0a 0a 3c 6c 69  rtant data...<li
2870: 3e 3c 70 3e 20 49 66 20 74 68 65 20 63 68 61 6e  ><p> If the chan
2880: 67 65 20 74 6f 20 74 61 62 6c 65 20 58 20 61 6c  ge to table X al
2890: 73 6f 20 61 66 66 65 63 74 73 20 6f 74 68 65 72  so affects other
28a0: 20 74 61 62 6c 65 73 20 6f 72 20 69 6e 64 65 78   tables or index
28b0: 65 73 20 6f 72 0a 74 72 69 67 67 65 72 73 20 61  es or.triggers a
28c0: 72 65 20 76 69 65 77 73 20 77 69 74 68 69 6e 20  re views within 
28d0: 73 63 68 65 6d 61 2c 20 74 68 65 6e 20 72 75 6e  schema, then run
28e0: 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
28f0: 65 6e 74 73 20 74 6f 20 6d 6f 64 69 66 79 0a 74  ents to modify.t
2900: 68 6f 73 65 20 6f 74 68 65 72 20 74 61 62 6c 65  hose other table
2910: 73 20 69 6e 64 65 78 65 73 20 61 6e 64 20 76 69  s indexes and vi
2920: 65 77 73 20 74 6f 6f 2e 20 20 46 6f 72 20 65 78  ews too.  For ex
2930: 61 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 6e 61  ample, if the na
2940: 6d 65 20 6f 66 0a 61 20 63 6f 6c 75 6d 6e 20 63  me of.a column c
2950: 68 61 6e 67 65 73 2c 20 61 6c 6c 20 46 4f 52 45  hanges, all FORE
2960: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
2970: 6e 74 73 2c 20 74 72 69 67 67 65 72 73 2c 20 69  nts, triggers, i
2980: 6e 64 65 78 65 73 2c 20 61 6e 64 0a 76 69 65 77  ndexes, and.view
2990: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
29a0: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 6d 75 73 74  that column must
29b0: 20 62 65 20 6d 6f 64 69 66 69 65 64 2e 0a 3c 70   be modified..<p
29c0: 3e 3c 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65  ><em>Caution:</e
29d0: 6d 3e 20 20 4f 6e 63 65 20 61 67 61 69 6e 2c 20  m>  Once again, 
29e0: 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 74  making changes t
29f0: 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  o the sqlite_mas
2a00: 74 65 72 20 0a 74 61 62 6c 65 20 6c 69 6b 65 20  ter .table like 
2a10: 74 68 69 73 20 77 69 6c 6c 20 72 65 6e 64 65 72  this will render
2a20: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2a30: 72 72 75 70 74 20 61 6e 64 20 75 6e 72 65 61 64  rrupt and unread
2a40: 61 62 6c 65 20 69 66 20 74 68 65 20 0a 63 68 61  able if the .cha
2a50: 6e 67 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  nge contains an 
2a60: 65 72 72 6f 72 2e 20 20 43 61 72 65 66 75 6c 6c  error.  Carefull
2a70: 79 20 74 65 73 74 20 6f 66 20 74 68 69 73 20 65  y test of this e
2a80: 6e 74 69 72 65 20 70 72 6f 63 65 64 75 72 65 0a  ntire procedure.
2a90: 6f 6e 20 61 20 73 65 70 61 72 61 74 65 20 74 65  on a separate te
2aa0: 73 74 20 64 61 74 61 62 61 73 65 20 70 72 69 6f  st database prio
2ab0: 72 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e  r to using it on
2ac0: 0a 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  .a database cont
2ad0: 61 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74  aining important
2ae0: 20 64 61 74 61 20 61 6e 64 2f 6f 72 20 6d 61 6b   data and/or mak
2af0: 65 20 62 61 63 6b 75 70 20 63 6f 70 69 65 73 20  e backup copies 
2b00: 6f 66 0a 69 6d 70 6f 72 74 61 6e 74 20 64 61 74  of.important dat
2b10: 61 62 61 73 65 73 20 70 72 69 6f 72 20 74 6f 20  abases prior to 
2b20: 72 75 6e 6e 69 6e 67 20 74 68 69 73 20 70 72 6f  running this pro
2b30: 63 65 64 75 72 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e  cedure...<li><p>
2b40: 20 49 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 73   Increment the s
2b50: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
2b60: 6d 62 65 72 20 75 73 69 6e 67 0a 5b 50 52 41 47  mber using.[PRAG
2b70: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
2b80: 6e 20 7c 20 50 52 41 47 4d 41 20 73 63 68 65 6d  n | PRAGMA schem
2b90: 61 5f 76 65 72 73 69 6f 6e 3d 58 5d 20 77 68 65  a_version=X] whe
2ba0: 72 65 20 58 20 69 73 20 6f 6e 65 0a 6d 6f 72 65  re X is one.more
2bb0: 20 74 68 61 6e 20 74 68 65 20 6f 6c 64 20 73 63   than the old sc
2bc0: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
2bd0: 62 65 72 20 66 6f 75 6e 64 20 69 6e 20 73 74 65  ber found in ste
2be0: 70 20 32 20 61 62 6f 76 65 2e 0a 0a 3c 6c 69 3e  p 2 above...<li>
2bf0: 3c 70 3e 20 44 69 73 61 62 6c 65 20 73 63 68 65  <p> Disable sche
2c00: 6d 61 20 65 64 69 74 69 6e 67 20 75 73 69 6e 67  ma editing using
2c10: 20 0a 5b 50 52 41 47 4d 41 20 77 72 69 74 61 62   .[PRAGMA writab
2c20: 6c 65 5f 73 63 68 65 6d 61 20 7c 20 50 52 41 47  le_schema | PRAG
2c30: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
2c40: 6d 61 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70  ma=OFF]...<li><p
2c50: 3e 20 28 4f 70 74 69 6f 6e 61 6c 29 20 52 75 6e  > (Optional) Run
2c60: 20 5b 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   [PRAGMA integri
2c70: 74 79 5f 63 68 65 63 6b 5d 20 74 6f 20 76 65 72  ty_check] to ver
2c80: 69 66 79 20 74 68 61 74 20 74 68 65 0a 73 63 68  ify that the.sch
2c90: 65 6d 61 20 63 68 61 6e 67 65 73 20 64 69 64 20  ema changes did 
2ca0: 6e 6f 74 20 64 61 6d 61 67 65 20 74 68 65 20 64  not damage the d
2cb0: 61 74 61 62 61 73 65 2e 0a 0a 3c 6c 69 3e 3c 70  atabase...<li><p
2cc0: 3e 20 43 6f 6d 6d 69 74 20 74 68 65 20 74 72 61  > Commit the tra
2cd0: 6e 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64  nsaction started
2ce0: 20 6f 6e 20 73 74 65 70 20 31 20 61 62 6f 76 65   on step 1 above
2cf0: 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 66 20 73  ..</ol>..<p>If s
2d00: 6f 6d 65 20 66 75 74 75 72 65 20 76 65 72 73 69  ome future versi
2d10: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 61 64 64  on of SQLite add
2d20: 73 20 6e 65 77 20 41 4c 54 45 52 20 54 41 42 4c  s new ALTER TABL
2d30: 45 20 63 61 70 61 62 69 6c 69 74 69 65 73 2c 20  E capabilities, 
2d40: 0a 74 68 6f 73 65 20 63 61 70 61 62 69 6c 69 74  .those capabilit
2d50: 69 65 73 20 77 69 6c 6c 20 76 65 72 79 20 6c 69  ies will very li
2d60: 6b 65 6c 79 20 75 73 65 20 6f 6e 65 20 6f 66 20  kely use one of 
2d70: 74 68 65 20 74 77 6f 20 70 72 6f 63 65 64 75 72  the two procedur
2d80: 65 73 0a 6f 75 74 6c 69 6e 65 64 20 61 62 6f 76  es.outlined abov
2d90: 65 2e 0a 0a 3c 74 63 6c 3e 0a 23 20 20 4f 6e 65  e...<tcl>.#  One
2da0: 20 6f 66 20 74 68 65 20 72 65 61 73 6f 6e 73 20   of the reasons 
2db0: 74 68 61 74 0a 23 20 53 51 4c 69 74 65 20 64 6f  that.# SQLite do
2dc0: 65 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  es not currently
2dd0: 20 73 75 70 70 6f 72 74 20 6d 6f 72 65 20 41 4c   support more AL
2de0: 54 45 52 20 54 41 42 4c 45 20 63 61 70 61 62 69  TER TABLE capabi
2df0: 6c 69 74 69 65 73 20 69 73 20 74 68 61 74 0a 23  lities is that.#
2e00: 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 73   the procedure s
2e10: 68 6f 77 6e 20 61 62 6f 76 65 20 69 73 20 64 69  hown above is di
2e20: 66 66 69 63 75 6c 74 20 74 6f 20 61 75 74 6f 6d  fficult to autom
2e30: 61 74 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74  ate for an arbit
2e40: 72 61 72 79 20 73 63 68 65 6d 61 2e 0a 23 20 50  rary schema..# P
2e50: 61 72 74 69 63 75 6c 61 72 6c 79 20 74 72 6f 75  articularly trou
2e60: 62 6c 65 73 6f 6d 65 20 61 72 65 61 73 20 61 72  blesome areas ar
2e70: 65 20 69 64 65 6e 74 69 66 79 69 6e 67 20 61 6c  e identifying al
2e80: 6c 20 76 69 65 77 73 20 61 73 73 6f 63 69 61 74  l views associat
2e90: 65 64 20 77 69 74 68 0a 23 20 74 61 62 6c 65 20  ed with.# table 
2ea0: 58 20 69 6e 20 73 74 65 70 20 31 20 61 6e 64 20  X in step 1 and 
2eb0: 63 72 65 61 74 69 6e 67 20 6e 65 77 20 76 69 65  creating new vie
2ec0: 77 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 20  ws and triggers 
2ed0: 74 68 61 74 20 61 72 65 20 63 6f 6d 70 61 74 69  that are compati
2ee0: 62 6c 65 0a 23 20 77 69 74 68 20 74 68 65 20 61  ble.# with the a
2ef0: 6c 74 65 72 65 64 20 73 63 68 65 6d 61 20 66 6f  ltered schema fo
2f00: 72 20 74 61 62 6c 65 20 58 20 69 6e 20 73 74 65  r table X in ste
2f10: 70 20 36 2e 20 20 49 74 20 69 73 20 61 20 74 72  p 6.  It is a tr
2f20: 69 63 6b 79 20 62 75 74 20 73 6f 6c 76 61 62 6c  icky but solvabl
2f30: 65 0a 23 20 70 72 6f 62 6c 65 6d 20 74 6f 20 63  e.# problem to c
2f40: 72 65 61 74 65 20 63 6f 64 65 20 74 68 61 74 20  reate code that 
2f50: 77 69 6c 6c 20 70 65 72 66 6f 72 6d 20 74 68 65  will perform the
2f60: 20 73 74 65 70 73 20 61 62 6f 76 65 20 0a 23 20   steps above .# 
2f70: 66 6f 72 20 22 72 65 61 73 6f 6e 61 62 6c 65 22  for "reasonable"
2f80: 20 73 63 68 65 6d 61 73 20 63 6f 6d 6d 6f 6e 6c   schemas commonl
2f90: 79 20 66 6f 75 6e 64 20 69 6e 20 70 72 61 63 74  y found in pract
2fa0: 69 63 65 2e 20 20 0a 23 20 42 75 74 20 74 68 65  ice.  .# But the
2fb0: 72 65 20 65 78 69 73 74 20 6d 61 6c 65 76 6f 6c  re exist malevol
2fc0: 65 6e 74 20 73 63 68 65 6d 61 73 20 66 6f 72 20  ent schemas for 
2fd0: 77 68 69 63 68 0a 23 20 74 68 65 73 65 20 73 74  which.# these st
2fe0: 65 70 73 20 61 72 65 20 6d 61 64 64 65 6e 69 6e  eps are maddenin
2ff0: 67 6c 79 20 64 69 66 66 69 63 75 6c 74 20 74 6f  gly difficult to
3000: 20 64 6f 20 63 6f 72 72 65 63 74 6c 79 2e 20 20   do correctly.  
3010: 52 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61  Rather than crea
3020: 74 65 0a 23 20 41 4c 54 45 52 20 54 41 42 4c 45  te.# ALTER TABLE
3030: 20 66 65 61 74 75 72 65 73 20 74 68 61 74 20 77   features that w
3040: 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 39 39  ork correctly 99
3050: 2e 39 25 20 6f 66 20 74 68 65 20 74 69 6d 65 20  .9% of the time 
3060: 62 75 74 20 70 6f 73 73 69 62 6c 79 0a 23 20 63  but possibly.# c
3070: 6f 72 72 75 70 74 20 74 68 65 20 73 63 68 65 6d  orrupt the schem
3080: 61 20 6f 6e 20 74 68 65 20 6f 74 68 65 72 20 30  a on the other 0
3090: 2e 31 25 2c 20 74 68 65 20 53 51 4c 69 74 65 20  .1%, the SQLite 
30a0: 64 65 76 65 6c 6f 70 65 72 73 20 68 61 76 65 20  developers have 
30b0: 64 65 63 69 64 65 64 0a 23 20 74 6f 20 70 75 73  decided.# to pus
30c0: 68 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 69 6e  h the problem in
30d0: 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  to the applicati
30e0: 6f 6e 20 64 6f 6d 61 69 6e 2c 20 77 68 65 72 65  on domain, where
30f0: 20 69 74 20 69 73 20 6d 75 63 68 20 65 61 73 69   it is much easi
3100: 65 72 0a 23 20 74 6f 20 73 6f 6c 76 65 2e 0a 3c  er.# to solve..<
3110: 2f 74 63 6c 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  /tcl>...<tcl>.##
3120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63  ############.Sec
3170: 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61  tion {ANALYZE} a
3180: 6e 61 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a  nalyze ANALYZE..
3190: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
31a0: 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d 73  iagram analyze-s
31b0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
31c0: 5e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d  ^The ANALYZE com
31d0: 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73 74 61  mand gathers sta
31e0: 74 69 73 74 69 63 73 20 61 62 6f 75 74 20 74 61  tistics about ta
31f0: 62 6c 65 73 20 61 6e 64 0a 69 6e 64 69 63 65 73  bles and.indices
3200: 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 65 20   and stores the 
3210: 63 6f 6c 6c 65 63 74 65 64 20 69 6e 66 6f 72 6d  collected inform
3220: 61 74 69 6f 6e 0a 69 6e 20 5b 69 6e 74 65 72 6e  ation.in [intern
3230: 61 6c 20 74 61 62 6c 65 73 5d 20 6f 66 20 74 68  al tables] of th
3240: 65 20 64 61 74 61 62 61 73 65 20 77 68 65 72 65  e database where
3250: 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
3260: 69 7a 65 72 20 63 61 6e 0a 61 63 63 65 73 73 20  izer can.access 
3270: 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  the information 
3280: 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 68 65  and use it to he
3290: 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72 20 71  lp make better q
32a0: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 63 68  uery planning ch
32b0: 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20 61 72  oices..^If no ar
32c0: 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69 76 65  guments are give
32d0: 6e 2c 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  n, all attached 
32e0: 64 61 74 61 62 61 73 65 73 20 61 72 65 0a 61 6e  databases are.an
32f0: 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61 20 73  alyzed.  ^If a s
3300: 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 67 69  chema name is gi
3310: 76 65 6e 20 61 73 20 74 68 65 20 61 72 67 75 6d  ven as the argum
3320: 65 6e 74 2c 20 74 68 65 6e 20 61 6c 6c 20 74 61  ent, then all ta
3330: 62 6c 65 73 0a 61 6e 64 20 69 6e 64 69 63 65 73  bles.and indices
3340: 20 69 6e 20 74 68 61 74 20 6f 6e 65 20 64 61 74   in that one dat
3350: 61 62 61 73 65 20 61 72 65 20 61 6e 61 6c 79 7a  abase are analyz
3360: 65 64 2e 20 20 0a 5e 49 66 20 74 68 65 20 61 72  ed.  .^If the ar
3370: 67 75 6d 65 6e 74 20 69 73 20 61 20 74 61 62 6c  gument is a tabl
3380: 65 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c  e name, then onl
3390: 79 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64  y that table and
33a0: 20 74 68 65 0a 69 6e 64 69 63 65 73 20 61 73 73   the.indices ass
33b0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
33c0: 74 20 74 61 62 6c 65 20 61 72 65 20 61 6e 61 6c  t table are anal
33d0: 79 7a 65 64 2e 20 20 5e 49 66 20 74 68 65 20 61  yzed.  ^If the a
33e0: 72 67 75 6d 65 6e 74 0a 69 73 20 61 6e 20 69 6e  rgument.is an in
33f0: 64 65 78 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f  dex name, then o
3400: 6e 6c 79 20 74 68 61 74 20 6f 6e 65 20 69 6e 64  nly that one ind
3410: 65 78 20 69 73 20 61 6e 61 6c 79 7a 65 64 2e 3c  ex is analyzed.<
3420: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65  /p>..<p> ^The de
3430: 66 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61  fault implementa
3440: 74 69 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20  tion stores all 
3450: 73 74 61 74 69 73 74 69 63 73 20 69 6e 20 61 20  statistics in a 
3460: 73 69 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d  single.table nam
3470: 65 64 20 22 5b 73 71 6c 69 74 65 5f 73 74 61 74  ed "[sqlite_stat
3480: 31 5d 22 2e 20 20 5e 49 66 20 53 51 4c 69 74 65  1]".  ^If SQLite
3490: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
34a0: 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e  h the.[SQLITE_EN
34b0: 41 42 4c 45 5f 53 54 41 54 33 5d 20 6f 70 74 69  ABLE_STAT3] opti
34c0: 6f 6e 20 61 6e 64 20 77 69 74 68 6f 75 74 20 74  on and without t
34d0: 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
34e0: 45 5f 53 54 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c  E_STAT4].option,
34f0: 20 74 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c   then additional
3500: 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20   histogram data 
3510: 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64  is.collected and
3520: 20 73 74 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69   stored in [sqli
3530: 74 65 5f 73 74 61 74 33 5d 2e 0a 20 5e 49 66 20  te_stat3].. ^If 
3540: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
3550: 65 64 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c  ed with the.[SQL
3560: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
3570: 5d 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61  ] option, then a
3580: 64 64 69 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67  dditional histog
3590: 72 61 6d 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c  ram data is.coll
35a0: 65 63 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64  ected and stored
35b0: 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73 74 61 74   in [sqlite_stat
35c0: 34 5d 2e 0a 4f 6c 64 65 72 20 76 65 72 73 69 6f  4]..Older versio
35d0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 6f 75  ns of SQLite wou
35e0: 6c 64 20 6d 61 6b 65 20 75 73 65 20 6f 66 20 74  ld make use of t
35f0: 68 65 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 32  he [sqlite_stat2
3600: 5d 20 74 61 62 6c 65 0a 77 68 65 6e 20 63 6f 6d  ] table.when com
3610: 70 69 6c 65 64 20 77 69 74 68 20 5b 53 51 4c 49  piled with [SQLI
3620: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 5d  TE_ENABLE_STAT2]
3630: 20 62 75 74 20 61 6c 6c 20 72 65 63 65 6e 74 20   but all recent 
3640: 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69  versions of.SQLi
3650: 74 65 20 69 67 6e 6f 72 65 20 74 68 65 20 73 71  te ignore the sq
3660: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
3670: 2e 0a 46 75 74 75 72 65 20 65 6e 68 61 6e 63 65  ..Future enhance
3680: 6d 65 6e 74 73 20 6d 61 79 20 63 72 65 61 74 65  ments may create
3690: 0a 61 64 64 69 74 69 6f 6e 61 6c 20 5b 69 6e 74  .additional [int
36a0: 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d 20 77 69  ernal tables] wi
36b0: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
36c0: 20 70 61 74 74 65 72 6e 20 65 78 63 65 70 74 20   pattern except 
36d0: 77 69 74 68 0a 66 69 6e 61 6c 20 64 69 67 69 74  with.final digit
36e0: 20 6c 61 72 67 65 72 20 74 68 61 6e 20 22 34 22   larger than "4"
36f0: 2e 0a 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 74  ..All of these t
3700: 61 62 6c 65 73 20 61 72 65 20 63 6f 6c 6c 65 63  ables are collec
3710: 74 69 76 65 6c 79 20 72 65 66 65 72 72 65 64 20  tively referred 
3720: 74 6f 20 61 73 20 22 73 74 61 74 69 73 74 69 63  to as "statistic
3730: 73 20 74 61 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a  s tables"..</p>.
3740: 0a 3c 70 3e 20 5e 54 68 65 20 63 6f 6e 74 65 6e  .<p> ^The conten
3750: 74 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74  t of the statist
3760: 69 63 73 20 74 61 62 6c 65 73 20 63 61 6e 20 62  ics tables can b
3770: 65 20 71 75 65 72 69 65 64 20 75 73 69 6e 67 20  e queried using 
3780: 5b 53 45 4c 45 43 54 5d 0a 61 6e 64 20 63 61 6e  [SELECT].and can
3790: 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
37a0: 67 20 74 68 65 20 5b 44 45 4c 45 54 45 5d 2c 20  g the [DELETE], 
37b0: 5b 49 4e 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55  [INSERT], and [U
37c0: 50 44 41 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e  PDATE] commands.
37d0: 0a 5e 28 54 68 65 20 5b 44 52 4f 50 20 54 41 42  .^(The [DROP TAB
37e0: 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b  LE] command work
37f0: 73 20 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20  s on statistics 
3800: 74 61 62 6c 65 73 0a 61 73 20 6f 66 20 53 51 4c  tables.as of SQL
3810: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
3820: 39 2e 29 5e 0a 5e 54 68 65 20 5b 41 4c 54 45 52  9.)^.^The [ALTER
3830: 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20   TABLE] command 
3840: 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e  does not work on
3850: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
3860: 65 73 2e 0a 41 70 70 72 6f 70 72 69 61 74 65 20  es..Appropriate 
3870: 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20 75  care should be u
3880: 73 65 64 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  sed when changin
3890: 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
38a0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 0a   the statistics.
38b0: 74 61 62 6c 65 73 20 61 73 20 69 6e 76 61 6c 69  tables as invali
38c0: 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61  d content can ca
38d0: 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 73 65  use SQLite to se
38e0: 6c 65 63 74 20 69 6e 65 66 66 69 63 69 65 6e 74  lect inefficient
38f0: 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e 20 20 47  .query plans.  G
3900: 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e  enerally speakin
3910: 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f  g, one should no
3920: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 6e  t modify the con
3930: 74 65 6e 74 20 6f 66 0a 74 68 65 20 73 74 61 74  tent of.the stat
3940: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79  istics tables by
3950: 20 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f   any mechanism o
3960: 74 68 65 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69  ther than invoki
3970: 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63  ng the.ANALYZE c
3980: 6f 6d 6d 61 6e 64 2e 20 20 0a 53 65 65 20 22 5b  ommand.  .See "[
3990: 4d 61 6e 75 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f  Manual Control O
39a0: 66 20 51 75 65 72 79 20 50 6c 61 6e 73 20 55 73  f Query Plans Us
39b0: 69 6e 67 20 53 51 4c 49 54 45 5f 53 54 41 54 20  ing SQLITE_STAT 
39c0: 54 61 62 6c 65 73 5d 22 20 66 6f 72 0a 66 75 72  Tables]" for.fur
39d0: 74 68 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ther information
39e0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74  .</p>..<p> ^Stat
39f0: 69 73 74 69 63 73 20 67 61 74 68 65 72 65 64 20  istics gathered 
3a00: 62 79 20 41 4e 41 4c 59 5a 45 20 61 72 65 20 6e  by ANALYZE are n
3a10: 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ot automatically
3a20: 20 75 70 64 61 74 65 64 20 61 73 0a 74 68 65 20   updated as.the 
3a30: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64  content of the d
3a40: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 2e  atabase changes.
3a50: 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74    If the content
3a60: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
3a70: 0a 63 68 61 6e 67 65 73 20 73 69 67 6e 69 66 69  .changes signifi
3a80: 63 61 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74 68  cantly, or if th
3a90: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
3aa0: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 6e 20  a changes, then 
3ab0: 6f 6e 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69  one should.consi
3ac0: 64 65 72 20 72 65 72 75 6e 6e 69 6e 67 20 74 68  der rerunning th
3ad0: 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e  e ANALYZE comman
3ae0: 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70  d in order to up
3af0: 64 61 74 65 20 74 68 65 20 73 74 61 74 69 73 74  date the statist
3b00: 69 63 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68  ics.</p>..<p> Th
3b10: 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
3b20: 6c 6f 61 64 73 20 74 68 65 20 63 6f 6e 74 65 6e  loads the conten
3b30: 74 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74  t of the statist
3b40: 69 63 73 20 74 61 62 6c 65 73 0a 69 6e 74 6f 20  ics tables.into 
3b50: 6d 65 6d 6f 72 79 20 77 68 65 6e 20 74 68 65 20  memory when the 
3b60: 73 63 68 65 6d 61 20 69 73 20 72 65 61 64 2e 20  schema is read. 
3b70: 20 5e 48 65 6e 63 65 2c 20 77 68 65 6e 20 61 6e   ^Hence, when an
3b80: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 68 61   application.cha
3b90: 6e 67 65 73 20 74 68 65 20 73 74 61 74 69 73 74  nges the statist
3ba0: 69 63 73 20 74 61 62 6c 65 73 20 64 69 72 65 63  ics tables direc
3bb0: 74 6c 79 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c  tly, SQLite will
3bc0: 20 6e 6f 74 20 69 6d 6d 65 64 69 61 74 65 6c 79   not immediately
3bd0: 0a 6e 6f 74 69 63 65 20 74 68 65 20 63 68 61 6e  .notice the chan
3be0: 67 65 73 2e 20 5e 41 6e 20 61 70 70 6c 69 63 61  ges. ^An applica
3bf0: 74 69 6f 6e 0a 63 61 6e 20 66 6f 72 63 65 20 74  tion.can force t
3c00: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
3c10: 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
3c20: 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73  tatistics tables
3c30: 20 62 79 20 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41   by running.<b>A
3c40: 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61  NALYZE sqlite_ma
3c50: 73 74 65 72 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a  ster</b>. </p>..
3c60: 3c 70 3e 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  <p> ..<tcl>.####
3c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69  ##########.Secti
3cc0: 6f 6e 20 7b 41 54 54 41 43 48 20 44 41 54 41 42  on {ATTACH DATAB
3cd0: 41 53 45 7d 20 61 74 74 61 63 68 20 7b 61 74 74  ASE} attach {att
3ce0: 61 63 68 65 64 20 2a 41 54 54 41 43 48 7d 0a 0a  ached *ATTACH}..
3cf0: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
3d00: 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74  iagram attach-st
3d10: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e  mt.</tcl>..<p> ^
3d20: 54 68 65 20 41 54 54 41 43 48 20 44 41 54 41 42  The ATTACH DATAB
3d30: 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61 64  ASE statement ad
3d40: 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62  ds another datab
3d50: 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68 65  ase .file to the
3d60: 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61 62 61   current [databa
3d70: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e 20  se connection]. 
3d80: 0a 44 61 74 61 62 61 73 65 20 66 69 6c 65 73 20  .Database files 
3d90: 74 68 61 74 20 77 65 72 65 20 70 72 65 76 69 6f  that were previo
3da0: 75 73 6c 79 20 61 74 74 61 63 68 65 64 20 63 61  usly attached ca
3db0: 6e 20 62 65 20 72 65 6d 6f 76 65 64 20 75 73 69  n be removed usi
3dc0: 6e 67 0a 74 68 65 20 5b 44 45 54 41 43 48 20 44  ng.the [DETACH D
3dd0: 41 54 41 42 41 53 45 5d 20 63 6f 6d 6d 61 6e 64  ATABASE] command
3de0: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 6e  ...<p>^The filen
3df0: 61 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 61  ame for the data
3e00: 62 61 73 65 20 74 6f 20 62 65 20 61 74 74 61 63  base to be attac
3e10: 68 65 64 20 69 73 20 74 68 65 20 76 61 6c 75 65  hed is the value
3e20: 20 6f 66 0a 74 68 65 20 65 78 70 72 65 73 73 69   of.the expressi
3e30: 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73 20 62  on that occurs b
3e40: 65 66 6f 72 65 20 74 68 65 20 41 53 20 6b 65 79  efore the AS key
3e50: 77 6f 72 64 2e 0a 5e 54 68 65 20 66 69 6c 65 6e  word..^The filen
3e60: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
3e70: 61 73 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  ase follows the 
3e80: 73 61 6d 65 20 73 65 6d 61 6e 74 69 63 73 20 61  same semantics a
3e90: 73 20 74 68 65 0a 66 69 6c 65 6e 61 6d 65 20 61  s the.filename a
3ea0: 72 67 75 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69  rgument to [sqli
3eb0: 74 65 33 5f 6f 70 65 6e 28 29 5d 20 61 6e 64 20  te3_open()] and 
3ec0: 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32  [sqlite3_open_v2
3ed0: 28 29 5d 3b 20 74 68 65 0a 73 70 65 63 69 61 6c  ()]; the.special
3ee0: 20 6e 61 6d 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a   name "[:memory:
3ef0: 5d 22 20 72 65 73 75 6c 74 73 20 69 6e 20 61 6e  ]" results in an
3f00: 20 5b 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61   [in-memory data
3f10: 62 61 73 65 5d 20 61 6e 64 20 61 6e 0a 65 6d 70  base] and an.emp
3f20: 74 79 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74  ty string result
3f30: 73 20 69 6e 20 61 20 6e 65 77 20 74 65 6d 70 6f  s in a new tempo
3f40: 72 61 72 79 20 64 61 74 61 62 61 73 65 2e 0a 5e  rary database..^
3f50: 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 61 72 67  The filename arg
3f60: 75 6d 65 6e 74 20 63 61 6e 20 62 65 20 61 20 5b  ument can be a [
3f70: 55 52 49 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66  URI filename] if
3f80: 20 55 52 49 20 66 69 6c 65 6e 61 6d 65 20 70 72   URI filename pr
3f90: 6f 63 65 73 73 69 6e 67 0a 69 73 20 65 6e 61 62  ocessing.is enab
3fa0: 6c 65 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  le on the databa
3fb0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
3fc0: 54 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61  The default beha
3fd0: 76 69 6f 72 20 69 73 20 66 6f 72 0a 55 52 49 20  vior is for.URI 
3fe0: 66 69 6c 65 6e 61 6d 65 73 20 74 6f 20 62 65 20  filenames to be 
3ff0: 64 69 73 61 62 6c 65 64 2c 20 68 6f 77 65 76 65  disabled, howeve
4000: 72 20 74 68 61 74 20 6d 69 67 68 74 20 63 68 61  r that might cha
4010: 6e 67 65 20 69 6e 20 61 20 66 75 74 75 72 65 20  nge in a future 
4020: 72 65 6c 65 61 73 65 0a 6f 66 20 53 51 4c 69 74  release.of SQLit
4030: 65 2c 20 73 6f 20 61 70 70 6c 69 63 61 74 69 6f  e, so applicatio
4040: 6e 20 64 65 76 65 6c 6f 70 65 72 73 20 61 72 65  n developers are
4050: 20 61 64 76 69 73 65 64 20 74 6f 20 70 6c 61 6e   advised to plan
4060: 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c   accordingly...<
4070: 70 3e 54 68 65 20 6e 61 6d 65 20 74 68 61 74 20  p>The name that 
4080: 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65  occurs after the
4090: 20 41 53 20 6b 65 79 77 6f 72 64 20 69 73 20 74   AS keyword is t
40a0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
40b0: 61 74 61 62 61 73 65 0a 75 73 65 64 20 69 6e 74  atabase.used int
40c0: 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74  ernally by SQLit
40d0: 65 2e 0a 5e 54 68 65 20 73 63 68 65 6d 61 2d 6e  e..^The schema-n
40e0: 61 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20  ames 'main' and 
40f0: 0a 27 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f  .'temp' refer to
4100: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
4110: 73 65 20 61 6e 64 20 74 68 65 20 64 61 74 61 62  se and the datab
4120: 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65  ase used for .te
4130: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
4140: 20 5e 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74   ^The main and t
4150: 65 6d 70 20 64 61 74 61 62 61 73 65 73 20 63 61  emp databases ca
4160: 6e 6e 6f 74 20 62 65 20 61 74 74 61 63 68 65 64  nnot be attached
4170: 20 6f 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70   or.detached.</p
4180: 3e 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20  >..<p> ^(Tables 
4190: 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
41a0: 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72  atabase can be r
41b0: 65 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67  eferred to using
41c0: 20 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e   the syntax .<i>
41d0: 73 63 68 65 6d 61 2d 6e 61 6d 65 2e 74 61 62 6c  schema-name.tabl
41e0: 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e  e-name</i>.)^  ^
41f0: 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  If the name of t
4200: 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71  he table is uniq
4210: 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74  ue.across all at
4220: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
4230: 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e   and the main an
4240: 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 73  d temp databases
4250: 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 73 63  , then the.<i>sc
4260: 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72  hema-name</i> pr
4270: 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65 71 75  efix is not requ
4280: 69 72 65 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f  ired.  ^If two o
4290: 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 69 6e  r more tables in
42a0: 0a 64 69 66 66 65 72 65 6e 74 20 64 61 74 61 62  .different datab
42b0: 61 73 65 73 20 68 61 76 65 20 74 68 65 20 73 61  ases have the sa
42c0: 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20  me name and the 
42d0: 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  .<i>schema-name<
42e0: 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f  /i> prefix is no
42f0: 74 20 75 73 65 64 20 6f 6e 20 61 20 74 61 62 6c  t used on a tabl
4300: 65 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65  e reference, the
4310: 6e 20 74 68 65 0a 74 61 62 6c 65 20 63 68 6f 73  n the.table chos
4320: 65 6e 20 69 73 20 74 68 65 20 6f 6e 65 20 69 6e  en is the one in
4330: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68   the database th
4340: 61 74 20 77 61 73 20 6c 65 61 73 74 20 72 65 63  at was least rec
4350: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 2e 3c  ently attached.<
4360: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61  /p>..<p>.^Transa
4370: 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67  ctions involving
4380: 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68   multiple attach
4390: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
43a0: 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e   atomic,.assumin
43b0: 67 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20  g that the main 
43c0: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
43d0: 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61 6e 64  "[:memory:]" and
43e0: 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d   the .[journal_m
43f0: 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57 41 4c  ode] is not [WAL
4400: 5d 2e 20 20 5e 28 49 66 20 74 68 65 20 6d 61 69  ].  ^(If the mai
4410: 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20 22 3a  n.database is ":
4420: 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66 20 74  memory:" or if t
4430: 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  he journal_mode 
4440: 69 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a 74 72  is WAL, then .tr
4450: 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74 69  ansactions conti
4460: 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69 63  nue to be atomic
4470: 20 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e 64   within each ind
4480: 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73 65  ividual.database
4490: 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74 68   file. But if th
44a0: 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20  e host computer 
44b0: 63 72 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d  crashes in the m
44c0: 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f 4d 4d  iddle.of a [COMM
44d0: 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20 6f 72  IT] where two or
44e0: 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65 20 66   more database f
44f0: 69 6c 65 73 20 61 72 65 20 75 70 64 61 74 65 64  iles are updated
4500: 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73 65 20  ,.some of those 
4510: 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65 74 20  files might get 
4520: 74 68 65 20 63 68 61 6e 67 65 73 20 77 68 65 72  the changes wher
4530: 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74 20 6e  e others.might n
4540: 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20  ot.)^.</p>..<p> 
4550: 5e 54 68 65 72 65 20 69 73 20 61 20 6c 69 6d 69  ^There is a limi
4560: 74 2c 20 73 65 74 20 75 73 69 6e 67 20 5b 73 71  t, set using [sq
4570: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 61  lite3_limit()] a
4580: 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  nd .[SQLITE_LIMI
4590: 54 5f 41 54 54 41 43 48 45 44 5d 2c 20 74 6f 20  T_ATTACHED], to 
45a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61  the number of da
45b0: 74 61 62 61 73 65 73 20 74 68 61 74 20 63 61 6e  tabases that can
45c0: 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65 6f 75 73   be.simultaneous
45d0: 6c 79 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  ly attached to a
45e0: 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
45f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e   connection.</p>
4600: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
4610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4650: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
4660: 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49  {BEGIN TRANSACTI
4670: 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ON} transaction 
4680: 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20 52  {*BEGIN COMMIT R
4690: 4f 4c 4c 42 41 43 4b 7d 0a 0a 52 65 63 75 72 73  OLLBACK}..Recurs
46a0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
46b0: 20 62 65 67 69 6e 2d 73 74 6d 74 0a 52 65 63 75   begin-stmt.Recu
46c0: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
46d0: 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 52  am commit-stmt.R
46e0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
46f0: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
4700: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  tmt.</tcl>..<p>.
4710: 5e 4e 6f 20 63 68 61 6e 67 65 73 20 63 61 6e 20  ^No changes can 
4720: 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 64  be made to the d
4730: 61 74 61 62 61 73 65 20 65 78 63 65 70 74 20 77  atabase except w
4740: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
4750: 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f 6d 6d 61 6e  ion..^Any comman
4760: 64 20 74 68 61 74 20 63 68 61 6e 67 65 73 20 74  d that changes t
4770: 68 65 20 64 61 74 61 62 61 73 65 20 28 62 61 73  he database (bas
4780: 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53 51 4c 20  ically, any SQL 
4790: 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72 20 74 68  command.other th
47a0: 61 6e 20 5b 53 45 4c 45 43 54 5d 29 20 77 69 6c  an [SELECT]) wil
47b0: 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
47c0: 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
47d0: 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f  ion if.one is no
47e0: 74 20 61 6c 72 65 61 64 79 20 69 6e 20 65 66 66  t already in eff
47f0: 65 63 74 2e 20 20 5e 41 75 74 6f 6d 61 74 69 63  ect.  ^Automatic
4800: 61 6c 6c 79 20 73 74 61 72 74 65 64 20 74 72 61  ally started tra
4810: 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f  nsactions.are co
4820: 6d 6d 69 74 74 65 64 20 77 68 65 6e 20 74 68 65  mmitted when the
4830: 20 6c 61 73 74 20 71 75 65 72 79 20 66 69 6e 69   last query fini
4840: 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  shes..</p>..<p>.
4850: 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61  ^Transactions ca
4860: 6e 20 62 65 20 73 74 61 72 74 65 64 20 6d 61 6e  n be started man
4870: 75 61 6c 6c 79 20 75 73 69 6e 67 20 74 68 65 20  ually using the 
4880: 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20  BEGIN.command.  
4890: 5e 28 53 75 63 68 20 74 72 61 6e 73 61 63 74 69  ^(Such transacti
48a0: 6f 6e 73 20 75 73 75 61 6c 6c 79 20 70 65 72 73  ons usually pers
48b0: 69 73 74 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ist until the ne
48c0: 78 74 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c  xt.COMMIT or ROL
48d0: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20  LBACK command.  
48e0: 42 75 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  But a transactio
48f0: 6e 20 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c  n will also .ROL
4900: 4c 42 41 43 4b 20 69 66 20 74 68 65 20 64 61 74  LBACK if the dat
4910: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20  abase is closed 
4920: 6f 72 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  or if an error o
4930: 63 63 75 72 73 0a 61 6e 64 20 74 68 65 20 52 4f  ccurs.and the RO
4940: 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20  LLBACK conflict 
4950: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
4960: 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65  ithm is specifie
4970: 64 2e 29 5e 0a 53 65 65 20 74 68 65 20 64 6f 63  d.)^.See the doc
4980: 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68  umentation on th
4990: 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a  e [ON CONFLICT].
49a0: 63 6c 61 75 73 65 20 66 6f 72 20 61 64 64 69 74  clause for addit
49b0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
49c0: 6e 20 61 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c  n about the ROLL
49d0: 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65  BACK.conflict re
49e0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
49f0: 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 45  hm..</p>..<p>.^E
4a00: 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 20 69  ND TRANSACTION i
4a10: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 43  s an alias for C
4a20: 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  OMMIT..</p>..<p>
4a30: 20 5e 28 54 72 61 6e 73 61 63 74 69 6f 6e 73 20   ^(Transactions 
4a40: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 42 45  created using BE
4a50: 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 20 64 6f 20  GIN...COMMIT do 
4a60: 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a 5e 46 6f 72  not nest.)^.^For
4a70: 20 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63 74   nested transact
4a80: 69 6f 6e 73 2c 20 75 73 65 20 74 68 65 20 5b 53  ions, use the [S
4a90: 41 56 45 50 4f 49 4e 54 5d 20 61 6e 64 20 5b 52  AVEPOINT] and [R
4aa0: 45 4c 45 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 73  ELEASE] commands
4ab0: 2e 0a 54 68 65 20 22 54 4f 20 53 41 56 45 50 4f  ..The "TO SAVEPO
4ac0: 49 4e 54 20 3c 79 79 74 65 72 6d 3e 6e 61 6d 65  INT <yyterm>name
4ad0: 3c 2f 79 79 74 65 72 6d 3e 22 20 63 6c 61 75 73  </yyterm>" claus
4ae0: 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  e of the ROLLBAC
4af0: 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a  K command shown.
4b00: 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64 69  in the syntax di
4b10: 61 67 72 61 6d 20 61 62 6f 76 65 20 69 73 20 6f  agram above is o
4b20: 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c 65 20 74  nly applicable t
4b30: 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72  o [SAVEPOINT].tr
4b40: 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e  ansactions.  ^An
4b50: 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f   attempt to invo
4b60: 6b 65 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d  ke the BEGIN com
4b70: 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61 20 74 72  mand within.a tr
4b80: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66  ansaction will f
4b90: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
4ba0: 72 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  r, regardless of
4bb0: 20 77 68 65 74 68 65 72 0a 74 68 65 20 74 72 61   whether.the tra
4bc0: 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 73 74 61  nsaction was sta
4bd0: 72 74 65 64 20 62 79 20 5b 53 41 56 45 50 4f 49  rted by [SAVEPOI
4be0: 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f 72 20 42  NT] or a prior B
4bf0: 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49  EGIN..^The COMMI
4c00: 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68  T command and th
4c10: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
4c20: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 54  nd without the T
4c30: 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68  O clause.work th
4c40: 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50  e same on [SAVEP
4c50: 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63 74 69 6f  OINT] transactio
4c60: 6e 73 20 61 73 20 74 68 65 79 20 64 6f 20 77 69  ns as they do wi
4c70: 74 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a  th transactions.
4c80: 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e  started by BEGIN
4c90: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
4ca0: 72 61 67 6d 65 6e 74 20 69 6d 6d 65 64 69 61 74  ragment immediat
4cb0: 65 20 7b 42 45 47 49 4e 20 49 4d 4d 45 44 49 41  e {BEGIN IMMEDIA
4cc0: 54 45 7d 20 7b 42 45 47 49 4e 20 45 58 43 4c 55  TE} {BEGIN EXCLU
4cd0: 53 49 56 45 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 0a  SIVE}</tcl>.<p>.
4ce0: 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61  ^Transactions ca
4cf0: 6e 20 62 65 20 64 65 66 65 72 72 65 64 2c 20 69  n be deferred, i
4d00: 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20 65 78 63  mmediate, or exc
4d10: 6c 75 73 69 76 65 2e 20 20 0a 5e 54 68 65 20 64  lusive.  .^The d
4d20: 65 66 61 75 6c 74 20 74 72 61 6e 73 61 63 74 69  efault transacti
4d30: 6f 6e 20 62 65 68 61 76 69 6f 72 20 69 73 20 64  on behavior is d
4d40: 65 66 65 72 72 65 64 2e 0a 5e 44 65 66 65 72 72  eferred..^Deferr
4d50: 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f  ed means that no
4d60: 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71 75 69   locks are acqui
4d70: 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74 61 62  red.on the datab
4d80: 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20 64 61  ase until the da
4d90: 74 61 62 61 73 65 20 69 73 20 66 69 72 73 74 20  tabase is first 
4da0: 61 63 63 65 73 73 65 64 2e 20 20 5e 54 68 75 73  accessed.  ^Thus
4db0: 20 77 69 74 68 20 61 0a 64 65 66 65 72 72 65 64   with a.deferred
4dc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
4dd0: 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65 6e  e BEGIN statemen
4de0: 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20 6e 6f  t itself does no
4df0: 74 68 69 6e 67 20 74 6f 20 74 68 65 0a 66 69 6c  thing to the.fil
4e00: 65 73 79 73 74 65 6d 2e 20 20 5e 4c 6f 63 6b 73  esystem.  ^Locks
4e10: 0a 61 72 65 20 6e 6f 74 20 61 63 71 75 69 72 65  .are not acquire
4e20: 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73  d until the firs
4e30: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
4e40: 6f 70 65 72 61 74 69 6f 6e 2e 20 20 5e 54 68 65  operation.  ^The
4e50: 20 66 69 72 73 74 20 72 65 61 64 0a 6f 70 65 72   first read.oper
4e60: 61 74 69 6f 6e 20 61 67 61 69 6e 73 74 20 61 20  ation against a 
4e70: 64 61 74 61 62 61 73 65 20 63 72 65 61 74 65 73  database creates
4e80: 20 61 20 5b 53 48 41 52 45 44 5d 20 6c 6f 63 6b   a [SHARED] lock
4e90: 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 0a 77   and the first.w
4ea0: 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 63  rite operation c
4eb0: 72 65 61 74 65 73 20 61 20 5b 52 45 53 45 52 56  reates a [RESERV
4ec0: 45 44 5d 20 6c 6f 63 6b 2e 20 20 20 5e 42 65 63  ED] lock.   ^Bec
4ed0: 61 75 73 65 20 74 68 65 20 61 63 71 75 69 73 69  ause the acquisi
4ee0: 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73 20 69 73  tion of.locks is
4ef0: 20 64 65 66 65 72 72 65 64 20 75 6e 74 69 6c 20   deferred until 
4f00: 74 68 65 79 20 61 72 65 20 6e 65 65 64 65 64 2c  they are needed,
4f10: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
4f20: 74 68 61 74 20 61 6e 6f 74 68 65 72 0a 74 68 72  that another.thr
4f30: 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 63  ead or process c
4f40: 6f 75 6c 64 20 63 72 65 61 74 65 20 61 20 73 65  ould create a se
4f50: 70 61 72 61 74 65 20 74 72 61 6e 73 61 63 74 69  parate transacti
4f60: 6f 6e 20 61 6e 64 20 77 72 69 74 65 20 74 6f 0a  on and write to.
4f70: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 66 74  the database aft
4f80: 65 72 20 74 68 65 20 42 45 47 49 4e 20 6f 6e 20  er the BEGIN on 
4f90: 74 68 65 20 63 75 72 72 65 6e 74 20 74 68 72 65  the current thre
4fa0: 61 64 20 68 61 73 20 65 78 65 63 75 74 65 64 2e  ad has executed.
4fb0: 0a 5e 49 66 20 74 68 65 20 74 72 61 6e 73 61 63  .^If the transac
4fc0: 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64 69 61 74  tion is immediat
4fd0: 65 2c 20 74 68 65 6e 20 5b 52 45 53 45 52 56 45  e, then [RESERVE
4fe0: 44 5d 20 6c 6f 63 6b 73 0a 61 72 65 20 61 63 71  D] locks.are acq
4ff0: 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74  uired on all dat
5000: 61 62 61 73 65 73 20 61 73 20 73 6f 6f 6e 20 61  abases as soon a
5010: 73 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d  s the BEGIN comm
5020: 61 6e 64 20 69 73 0a 65 78 65 63 75 74 65 64 2c  and is.executed,
5030: 20 77 69 74 68 6f 75 74 20 77 61 69 74 69 6e 67   without waiting
5040: 20 66 6f 72 20 74 68 65 0a 64 61 74 61 62 61 73   for the.databas
5050: 65 20 74 6f 20 62 65 20 75 73 65 64 2e 20 20 5e  e to be used.  ^
5060: 41 66 74 65 72 20 61 20 42 45 47 49 4e 20 49 4d  After a BEGIN IM
5070: 4d 45 44 49 41 54 45 2c 20 0a 6e 6f 20 6f 74 68  MEDIATE, .no oth
5080: 65 72 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  er [database con
5090: 6e 65 63 74 69 6f 6e 5d 20 77 69 6c 6c 20 62 65  nection] will be
50a0: 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74   able to write t
50b0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6f  o the database o
50c0: 72 0a 64 6f 20 61 20 42 45 47 49 4e 20 49 4d 4d  r.do a BEGIN IMM
50d0: 45 44 49 41 54 45 20 6f 72 20 42 45 47 49 4e 20  EDIATE or BEGIN 
50e0: 45 58 43 4c 55 53 49 56 45 2e 20 20 5e 4f 74 68  EXCLUSIVE.  ^Oth
50f0: 65 72 20 70 72 6f 63 65 73 73 65 73 20 63 61 6e  er processes can
5100: 20 63 6f 6e 74 69 6e 75 65 0a 74 6f 20 72 65 61   continue.to rea
5110: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
5120: 61 73 65 2c 20 68 6f 77 65 76 65 72 2e 20 20 5e  ase, however.  ^
5130: 41 6e 20 65 78 63 6c 75 73 69 76 65 20 74 72 61  An exclusive tra
5140: 6e 73 61 63 74 69 6f 6e 20 63 61 75 73 65 73 0a  nsaction causes.
5150: 5b 45 58 43 4c 55 53 49 56 45 5d 20 6c 6f 63 6b  [EXCLUSIVE] lock
5160: 73 20 74 6f 20 62 65 20 61 63 71 75 69 72 65 64  s to be acquired
5170: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
5180: 73 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45 47  s.  ^After a BEG
5190: 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c 20 6e 6f  IN.EXCLUSIVE, no
51a0: 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65   other [database
51b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 65 78 63   connection] exc
51c0: 65 70 74 20 66 6f 72 20 5b 72 65 61 64 5f 75 6e  ept for [read_un
51d0: 63 6f 6d 6d 69 74 74 65 64 5d 0a 63 6f 6e 6e 65  committed].conne
51e0: 63 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 61  ctions will be a
51f0: 62 6c 65 20 74 6f 20 72 65 61 64 20 74 68 65 20  ble to read the 
5200: 64 61 74 61 62 61 73 65 20 61 6e 64 20 6e 6f 20  database and no 
5210: 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  other connection
5220: 20 77 69 74 68 6f 75 74 0a 65 78 63 65 70 74 69   without.excepti
5230: 6f 6e 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20  on will be able 
5240: 74 6f 20 77 72 69 74 65 20 74 68 65 20 64 61 74  to write the dat
5250: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
5260: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 63  transaction is.c
5270: 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c  omplete..</p>..<
5280: 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c 69 63 69 74  p>.^(An implicit
5290: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 28 61 20   transaction (a 
52a0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
52b0: 20 69 73 20 73 74 61 72 74 65 64 20 61 75 74 6f   is started auto
52c0: 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e 6f 74 20 61  matically,.not a
52d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
52e0: 72 74 65 64 20 62 79 20 42 45 47 49 4e 29 20 69  rted by BEGIN) i
52f0: 73 20 63 6f 6d 6d 69 74 74 65 64 20 61 75 74 6f  s committed auto
5300: 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 0a 74  matically when.t
5310: 68 65 20 6c 61 73 74 20 61 63 74 69 76 65 20 73  he last active s
5320: 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65  tatement finishe
5330: 73 2e 20 20 41 20 73 74 61 74 65 6d 65 6e 74 20  s.  A statement 
5340: 66 69 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74  finishes when it
5350: 73 0a 70 72 65 70 61 72 65 64 20 73 74 61 74 65  s.prepared state
5360: 6d 65 6e 74 20 69 73 20 5b 73 71 6c 69 74 65 33  ment is [sqlite3
5370: 5f 72 65 73 65 74 28 29 20 7c 20 72 65 73 65 74  _reset() | reset
5380: 5d 20 6f 72 0a 5b 73 71 6c 69 74 65 33 5f 66 69  ] or.[sqlite3_fi
5390: 6e 61 6c 69 7a 65 28 29 20 7c 20 66 69 6e 61 6c  nalize() | final
53a0: 69 7a 65 64 5d 2e 20 20 41 6e 20 6f 70 65 6e 20  ized].  An open 
53b0: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 20 75  [sqlite3_blob] u
53c0: 73 65 64 20 66 6f 72 0a 69 6e 63 72 65 6d 65 6e  sed for.incremen
53d0: 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 20 63 6f 75  tal BLOB I/O cou
53e0: 6e 74 73 20 61 73 20 61 6e 20 75 6e 66 69 6e 69  nts as an unfini
53f0: 73 68 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20  shed statement. 
5400: 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 62 6c   The [sqlite3_bl
5410: 6f 62 5d 0a 66 69 6e 69 73 68 65 73 20 77 68 65  ob].finishes whe
5420: 6e 20 69 74 20 69 73 20 5b 73 71 6c 69 74 65 33  n it is [sqlite3
5430: 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 29 20 7c 20  _blob_close() | 
5440: 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c 2f 70 3e 0a  closed].)^.</p>.
5450: 0a 3c 70 3e 0a 5e 54 68 65 20 65 78 70 6c 69 63  .<p>.^The explic
5460: 69 74 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  it COMMIT comman
5470: 64 20 72 75 6e 73 20 69 6d 6d 65 64 69 61 74 65  d runs immediate
5480: 6c 79 2c 20 65 76 65 6e 20 69 66 20 74 68 65 72  ly, even if ther
5490: 65 20 61 72 65 0a 70 65 6e 64 69 6e 67 20 5b 53  e are.pending [S
54a0: 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
54b0: 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  s.  ^However, if
54c0: 20 74 68 65 72 65 20 61 72 65 20 70 65 6e 64 69   there are pendi
54d0: 6e 67 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69  ng.write operati
54e0: 6f 6e 73 2c 20 74 68 65 20 43 4f 4d 4d 49 54 20  ons, the COMMIT 
54f0: 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c 20 66 61 69  command.will fai
5500: 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20  l with an error 
5510: 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f 42 55 53  code [SQLITE_BUS
5520: 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 41  Y]..</p>..<p>.^A
5530: 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 65 78 65  n attempt to exe
5540: 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d 69 67 68  cute COMMIT migh
5550: 74 20 61 6c 73 6f 20 72 65 73 75 6c 74 20 69 6e  t also result in
5560: 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59   an [SQLITE_BUSY
5570: 5d 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 69 66  ] return code.if
5580: 20 61 6e 20 61 6e 6f 74 68 65 72 20 74 68 72 65   an another thre
5590: 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 68 61  ad or process ha
55a0: 73 20 61 20 5b 73 68 61 72 65 64 20 6c 6f 63 6b  s a [shared lock
55b0: 5d 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  ] on the databas
55c0: 65 0a 74 68 61 74 20 70 72 65 76 65 6e 74 65 64  e.that prevented
55d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 72   the database fr
55e0: 6f 6d 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  om being updated
55f0: 2e 20 20 5e 57 68 65 6e 20 43 4f 4d 4d 49 54 20  .  ^When COMMIT 
5600: 66 61 69 6c 73 20 69 6e 20 74 68 69 73 0a 77 61  fails in this.wa
5610: 79 2c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  y, the transacti
5620: 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76  on remains activ
5630: 65 20 61 6e 64 20 74 68 65 20 43 4f 4d 4d 49 54  e and the COMMIT
5640: 20 63 61 6e 20 62 65 20 72 65 74 72 69 65 64 20   can be retried 
5650: 6c 61 74 65 72 0a 61 66 74 65 72 20 74 68 65 20  later.after the 
5660: 72 65 61 64 65 72 20 68 61 73 20 68 61 64 20 61  reader has had a
5670: 20 63 68 61 6e 63 65 20 74 6f 20 63 6c 65 61 72   chance to clear
5680: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 6e 20 76  ..</p>..<p>.In v
5690: 65 72 79 20 6f 6c 64 20 76 65 72 73 69 6f 6e 73  ery old versions
56a0: 20 6f 66 20 53 51 4c 69 74 65 20 28 62 65 66 6f   of SQLite (befo
56b0: 72 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 31  re version 3.7.1
56c0: 31 20 63 69 72 63 61 20 32 30 31 32 2d 30 33 2d  1 circa 2012-03-
56d0: 32 30 29 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b  20).the ROLLBACK
56e0: 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
56f0: 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 0a 5b  an error code .[
5700: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 69 66 20  SQLITE_BUSY] if 
5710: 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 70 65  there are any pe
5720: 6e 64 69 6e 67 20 71 75 65 72 69 65 73 2e 20 20  nding queries.  
5730: 5e 49 6e 20 6d 6f 72 65 20 72 65 63 65 6e 74 0a  ^In more recent.
5740: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
5750: 74 65 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  te, the ROLLBACK
5760: 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 61 6e   will proceed an
5770: 64 20 70 65 6e 64 69 6e 67 20 73 74 61 74 65 6d  d pending statem
5780: 65 6e 74 73 0a 77 69 6c 6c 20 6f 66 74 65 6e 20  ents.will often 
5790: 62 65 20 61 62 6f 72 74 65 64 2c 20 63 61 75 73  be aborted, caus
57a0: 69 6e 67 20 74 68 65 6d 20 74 6f 20 72 65 74 75  ing them to retu
57b0: 72 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 41 42  rn an [SQLITE_AB
57c0: 4f 52 54 5d 20 6f 72 0a 5b 53 51 4c 49 54 45 5f  ORT] or.[SQLITE_
57d0: 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 5d 20  ABORT_ROLLBACK] 
57e0: 65 72 72 6f 72 2e 0a 5e 49 6e 20 53 51 4c 69 74  error..^In SQLit
57f0: 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 38 20  e version 3.8.8 
5800: 61 6e 64 20 6c 61 74 65 72 2c 20 61 20 70 65 6e  and later, a pen
5810: 64 69 6e 67 20 72 65 61 64 20 77 69 6c 6c 20 63  ding read will c
5820: 6f 6e 74 69 6e 75 65 20 66 75 6e 63 74 69 6f 6e  ontinue function
5830: 69 6e 67 0a 61 66 74 65 72 20 74 68 65 20 52 4f  ing.after the RO
5840: 4c 4c 42 41 43 4b 20 61 73 20 6c 6f 6e 67 20 61  LLBACK as long a
5850: 73 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 64  s the ROLLBACK d
5860: 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74  oes not modify t
5870: 68 65 20 64 61 74 61 62 61 73 65 0a 73 63 68 65  he database.sche
5880: 6d 61 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66  ma..</p>..<p>.If
5890: 20 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   [PRAGMA journal
58a0: 5f 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74 6f  _mode] is set to
58b0: 20 4f 46 46 20 28 74 68 75 73 20 64 69 73 61 62   OFF (thus disab
58c0: 6c 69 6e 67 20 74 68 65 20 72 6f 6c 6c 62 61 63  ling the rollbac
58d0: 6b 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20  k journal.file) 
58e0: 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
58f0: 72 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  r of the ROLLBAC
5900: 4b 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64  K command is und
5910: 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68  efined..</p>..<h
5920: 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20 45 72  3>Response To Er
5930: 72 6f 72 73 20 57 69 74 68 69 6e 20 41 20 54 72  rors Within A Tr
5940: 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a  ansaction</h3>..
5950: 3c 70 3e 20 5e 28 49 66 20 63 65 72 74 61 69 6e  <p> ^(If certain
5960: 20 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73   kinds of errors
5970: 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61 20   occur within a 
5980: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
5990: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79  .transaction may
59a0: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 72   or may not be r
59b0: 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d  olled back autom
59c0: 61 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65  atically.  The.e
59d0: 72 72 6f 72 73 20 74 68 61 74 20 63 61 6e 20 63  rrors that can c
59e0: 61 75 73 65 20 61 6e 20 61 75 74 6f 6d 61 74 69  ause an automati
59f0: 63 20 72 6f 6c 6c 62 61 63 6b 20 69 6e 63 6c 75  c rollback inclu
5a00: 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  de:</p>..<ul>.<l
5a10: 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d  i> [SQLITE_FULL]
5a20: 3a 20 64 61 74 61 62 61 73 65 20 6f 72 20 64 69  : database or di
5a30: 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51  sk full.<li> [SQ
5a40: 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20 64 69 73  LITE_IOERR]: dis
5a50: 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e  k I/O error.<li>
5a60: 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 3a 20   [SQLITE_BUSY]: 
5a70: 64 61 74 61 62 61 73 65 20 69 6e 20 75 73 65 20  database in use 
5a80: 62 79 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  by another proce
5a90: 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ss.<li> [SQLITE_
5aa0: 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d  NOMEM]: out or m
5ab0: 65 6d 6f 72 79 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  emory.</ul>)^..<
5ac0: 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20 6f 66 20 74  p>.^For all of t
5ad0: 68 65 73 65 20 65 72 72 6f 72 73 2c 20 53 51 4c  hese errors, SQL
5ae0: 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
5af0: 75 6e 64 6f 20 6a 75 73 74 20 74 68 65 20 6f 6e  undo just the on
5b00: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 74 20 77  e statement.it w
5b10: 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e  as working on an
5b20: 64 20 6c 65 61 76 65 20 63 68 61 6e 67 65 73 20  d leave changes 
5b30: 66 72 6f 6d 20 70 72 69 6f 72 20 73 74 61 74 65  from prior state
5b40: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  ments within the
5b50: 0a 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f  .same transactio
5b60: 6e 20 69 6e 74 61 63 74 20 61 6e 64 20 63 6f 6e  n intact and con
5b70: 74 69 6e 75 65 20 77 69 74 68 20 74 68 65 20 74  tinue with the t
5b80: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 48 6f  ransaction.  ^Ho
5b90: 77 65 76 65 72 2c 20 0a 64 65 70 65 6e 64 69 6e  wever, .dependin
5ba0: 67 20 6f 6e 20 74 68 65 20 73 74 61 74 65 6d 65  g on the stateme
5bb0: 6e 74 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74  nt being evaluat
5bc0: 65 64 20 61 6e 64 20 74 68 65 20 70 6f 69 6e 74  ed and the point
5bd0: 20 61 74 20 77 68 69 63 68 20 74 68 65 0a 65 72   at which the.er
5be0: 72 6f 72 20 6f 63 63 75 72 73 2c 20 69 74 20 6d  ror occurs, it m
5bf0: 69 67 68 74 20 62 65 20 6e 65 63 65 73 73 61 72  ight be necessar
5c00: 79 20 66 6f 72 20 53 51 4c 69 74 65 20 74 6f 20  y for SQLite to 
5c10: 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a 63 61 6e  rollback and.can
5c20: 63 65 6c 20 74 68 65 20 65 6e 74 69 72 65 20 74  cel the entire t
5c30: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 41 6e  ransaction.  ^An
5c40: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e   application can
5c50: 20 74 65 6c 6c 20 77 68 69 63 68 0a 63 6f 75 72   tell which.cour
5c60: 73 65 20 6f 66 20 61 63 74 69 6f 6e 20 53 51 4c  se of action SQL
5c70: 69 74 65 20 74 6f 6f 6b 20 62 79 20 75 73 69 6e  ite took by usin
5c80: 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 67  g the.[sqlite3_g
5c90: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 29 5d  et_autocommit()]
5ca0: 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74 65   C-language inte
5cb0: 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  rface.</p>..<p>I
5cc0: 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64  t is recommended
5cd0: 20 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f   that applicatio
5ce0: 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  ns respond to th
5cf0: 65 20 65 72 72 6f 72 73 0a 6c 69 73 74 65 64 20  e errors.listed 
5d00: 61 62 6f 76 65 20 62 79 20 65 78 70 6c 69 63 69  above by explici
5d10: 74 6c 79 20 69 73 73 75 69 6e 67 20 61 20 52 4f  tly issuing a RO
5d20: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20  LLBACK command. 
5d30: 20 5e 49 66 20 74 68 65 20 0a 74 72 61 6e 73 61   ^If the .transa
5d40: 63 74 69 6f 6e 20 68 61 73 20 61 6c 72 65 61 64  ction has alread
5d50: 79 20 62 65 65 6e 20 72 6f 6c 6c 65 64 20 62 61  y been rolled ba
5d60: 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ck automatically
5d70: 0a 62 79 20 74 68 65 20 65 72 72 6f 72 20 72 65  .by the error re
5d80: 73 70 6f 6e 73 65 2c 20 74 68 65 6e 20 74 68 65  sponse, then the
5d90: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
5da0: 64 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d will fail with
5db0: 20 61 6e 0a 65 72 72 6f 72 2c 20 62 75 74 20 6e   an.error, but n
5dc0: 6f 20 68 61 72 6d 20 69 73 20 63 61 75 73 65 64  o harm is caused
5dd0: 20 62 79 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c   by this.</p>..<
5de0: 70 3e 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e  p>Future version
5df0: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61 79 20  s of SQLite may 
5e00: 65 78 74 65 6e 64 20 74 68 65 20 6c 69 73 74 20  extend the list 
5e10: 6f 66 20 65 72 72 6f 72 73 20 77 68 69 63 68 0a  of errors which.
5e20: 6d 69 67 68 74 20 63 61 75 73 65 20 61 75 74 6f  might cause auto
5e30: 6d 61 74 69 63 20 74 72 61 6e 73 61 63 74 69 6f  matic transactio
5e40: 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 46 75 74  n rollback.  Fut
5e50: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ure versions of.
5e60: 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61  SQLite might cha
5e70: 6e 67 65 20 74 68 65 20 65 72 72 6f 72 20 72 65  nge the error re
5e80: 73 70 6f 6e 73 65 2e 20 20 49 6e 20 70 61 72 74  sponse.  In part
5e90: 69 63 75 6c 61 72 2c 20 77 65 20 6d 61 79 0a 63  icular, we may.c
5ea0: 68 6f 6f 73 65 20 74 6f 20 73 69 6d 70 6c 69 66  hoose to simplif
5eb0: 79 20 74 68 65 20 69 6e 74 65 72 66 61 63 65 20  y the interface 
5ec0: 69 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f  in future versio
5ed0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62 79 0a  ns of SQLite by.
5ee0: 63 61 75 73 69 6e 67 20 74 68 65 20 65 72 72 6f  causing the erro
5ef0: 72 73 20 61 62 6f 76 65 20 74 6f 20 66 6f 72 63  rs above to forc
5f00: 65 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  e an uncondition
5f10: 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e  al rollback.</p>
5f20: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
5f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f70: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
5f80: 7b 53 41 56 45 50 4f 49 4e 54 7d 20 73 61 76 65  {SAVEPOINT} save
5f90: 70 6f 69 6e 74 20 7b 53 41 56 45 50 4f 49 4e 54  point {SAVEPOINT
5fa0: 20 52 45 4c 45 41 53 45 7d 0a 0a 52 65 63 75 72   RELEASE}..Recur
5fb0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
5fc0: 6d 20 73 61 76 65 70 6f 69 6e 74 2d 73 74 6d 74  m savepoint-stmt
5fd0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
5fe0: 44 69 61 67 72 61 6d 20 72 65 6c 65 61 73 65 2d  Diagram release-
5ff0: 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75  stmt.RecursiveBu
6000: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c  bbleDiagram roll
6010: 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  back-stmt.</tcl>
6020: 0a 0a 3c 70 3e 20 5e 53 41 56 45 50 4f 49 4e 54  ..<p> ^SAVEPOINT
6030: 73 20 61 72 65 20 61 20 6d 65 74 68 6f 64 20 6f  s are a method o
6040: 66 20 63 72 65 61 74 69 6e 67 20 74 72 61 6e 73  f creating trans
6050: 61 63 74 69 6f 6e 73 2c 20 73 69 6d 69 6c 61 72  actions, similar
6060: 20 74 6f 0a 5b 42 45 47 49 4e 5d 20 61 6e 64 20   to.[BEGIN] and 
6070: 5b 43 4f 4d 4d 49 54 5d 2c 20 65 78 63 65 70 74  [COMMIT], except
6080: 20 74 68 61 74 20 74 68 65 20 53 41 56 45 50 4f   that the SAVEPO
6090: 49 4e 54 20 61 6e 64 20 52 45 4c 45 41 53 45 20  INT and RELEASE 
60a0: 63 6f 6d 6d 61 6e 64 73 0a 61 72 65 20 6e 61 6d  commands.are nam
60b0: 65 64 20 61 6e 64 20 6d 61 79 20 62 65 20 6e 65  ed and may be ne
60c0: 73 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  sted.</p>..<p> ^
60d0: 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f  The SAVEPOINT co
60e0: 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 61 20 6e  mmand starts a n
60f0: 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  ew transaction w
6100: 69 74 68 20 61 20 6e 61 6d 65 2e 0a 5e 54 68 65  ith a name..^The
6110: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 61 6d   transaction nam
6120: 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 75  es need not be u
6130: 6e 69 71 75 65 2e 0a 5e 28 41 20 53 41 56 45 50  nique..^(A SAVEP
6140: 4f 49 4e 54 20 63 61 6e 20 62 65 20 73 74 61 72  OINT can be star
6150: 74 65 64 20 65 69 74 68 65 72 20 77 69 74 68 69  ted either withi
6160: 6e 20 6f 72 20 6f 75 74 73 69 64 65 20 6f 66 0a  n or outside of.
6170: 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d  a [BEGIN]...[COM
6180: 4d 49 54 5d 2e 29 5e 20 20 5e 28 57 68 65 6e 20  MIT].)^  ^(When 
6190: 61 20 53 41 56 45 50 4f 49 4e 54 20 69 73 20 74  a SAVEPOINT is t
61a0: 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 20 73 61  he outer-most sa
61b0: 76 65 70 6f 69 6e 74 0a 61 6e 64 20 69 74 20 69  vepoint.and it i
61c0: 73 20 6e 6f 74 20 77 69 74 68 69 6e 20 61 20 5b  s not within a [
61d0: 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54  BEGIN]...[COMMIT
61e0: 5d 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  ] then the behav
61f0: 69 6f 72 20 69 73 20 74 68 65 0a 73 61 6d 65 20  ior is the.same 
6200: 61 73 20 42 45 47 49 4e 20 44 45 46 45 52 52 45  as BEGIN DEFERRE
6210: 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 2e 29 5e  D TRANSACTION.)^
6220: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f  </p>..<p>^The RO
6230: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
6240: 64 20 72 65 76 65 72 74 73 20 74 68 65 20 73 74  d reverts the st
6250: 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ate of the datab
6260: 61 73 65 20 62 61 63 6b 20 74 6f 20 77 68 61 74  ase back to what
6270: 0a 69 74 20 77 61 73 20 6a 75 73 74 20 61 66 74  .it was just aft
6280: 65 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  er the correspon
6290: 64 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 2e 20  ding SAVEPOINT. 
62a0: 20 5e 4e 6f 74 65 20 74 68 61 74 20 75 6e 6c 69   ^Note that unli
62b0: 6b 65 20 74 68 61 74 0a 70 6c 61 69 6e 20 5b 52  ke that.plain [R
62c0: 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64  OLLBACK] command
62d0: 20 28 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f   (without the TO
62e0: 20 6b 65 79 77 6f 72 64 29 20 74 68 65 20 52 4f   keyword) the RO
62f0: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
6300: 64 0a 64 6f 65 73 20 6e 6f 74 20 63 61 6e 63 65  d.does not cance
6310: 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  l the transactio
6320: 6e 2e 20 20 5e 49 6e 73 74 65 61 64 20 6f 66 20  n.  ^Instead of 
6330: 63 61 6e 63 65 6c 6c 69 6e 67 20 74 68 65 20 74  cancelling the t
6340: 72 61 6e 73 61 63 74 69 6f 6e 2c 0a 74 68 65 20  ransaction,.the 
6350: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d  ROLLBACK TO comm
6360: 61 6e 64 20 72 65 73 74 61 72 74 73 20 74 68 65  and restarts the
6370: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 67 61   transaction aga
6380: 69 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  in at the beginn
6390: 69 6e 67 2e 0a 5e 41 6c 6c 20 69 6e 74 65 72 76  ing..^All interv
63a0: 65 6e 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 73  ening SAVEPOINTs
63b0: 20 61 72 65 20 63 61 6e 63 65 6c 65 64 2c 20 68   are canceled, h
63c0: 6f 77 65 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  owever.</p>..<p>
63d0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
63e0: 6d 61 6e 64 20 69 73 20 6c 69 6b 65 20 61 20 5b  mand is like a [
63f0: 43 4f 4d 4d 49 54 5d 20 66 6f 72 20 61 20 53 41  COMMIT] for a SA
6400: 56 45 50 4f 49 4e 54 2e 0a 5e 54 68 65 20 52 45  VEPOINT..^The RE
6410: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61  LEASE command ca
6420: 75 73 65 73 20 61 6c 6c 20 73 61 76 65 70 6f 69  uses all savepoi
6430: 6e 74 73 20 62 61 63 6b 20 74 6f 20 61 6e 64 20  nts back to and 
6440: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 0a 6d  including the .m
6450: 6f 73 74 20 72 65 63 65 6e 74 20 73 61 76 65 70  ost recent savep
6460: 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61 74 63  oint with a matc
6470: 68 69 6e 67 20 6e 61 6d 65 20 74 6f 20 62 65 20  hing name to be 
6480: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
6490: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74   .transaction st
64a0: 61 63 6b 2e 20 20 5e 54 68 65 20 52 45 4c 45 41  ack.  ^The RELEA
64b0: 53 45 20 6f 66 20 61 6e 20 69 6e 6e 65 72 20 74  SE of an inner t
64c0: 72 61 6e 73 61 63 74 69 6f 6e 0a 64 6f 65 73 20  ransaction.does 
64d0: 6e 6f 74 20 63 61 75 73 65 20 61 6e 79 20 63 68  not cause any ch
64e0: 61 6e 67 65 73 20 74 6f 20 62 65 20 77 72 69 74  anges to be writ
64f0: 74 65 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62  ten to the datab
6500: 61 73 65 20 66 69 6c 65 3b 20 69 74 20 6d 65 72  ase file; it mer
6510: 65 6c 79 0a 72 65 6d 6f 76 65 73 20 73 61 76 65  ely.removes save
6520: 70 6f 69 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  points from the 
6530: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
6540: 6b 20 73 75 63 68 20 74 68 61 74 20 69 74 20 69  k such that it i
6550: 73 0a 6e 6f 20 6c 6f 6e 67 65 72 20 70 6f 73 73  s.no longer poss
6560: 69 62 6c 65 20 74 6f 20 52 4f 4c 4c 42 41 43 4b  ible to ROLLBACK
6570: 20 54 4f 20 74 68 6f 73 65 20 73 61 76 65 70 6f   TO those savepo
6580: 69 6e 74 73 2e 0a 5e 49 66 20 61 20 52 45 4c 45  ints..^If a RELE
6590: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65  ASE command rele
65a0: 61 73 65 73 20 74 68 65 20 6f 75 74 65 72 6d 6f  ases the outermo
65b0: 73 74 20 73 61 76 65 70 6f 69 6e 74 2c 20 73 6f  st savepoint, so
65c0: 0a 74 68 61 74 20 74 68 65 20 74 72 61 6e 73 61  .that the transa
65d0: 63 74 69 6f 6e 20 73 74 61 63 6b 20 62 65 63 6f  ction stack beco
65e0: 6d 65 73 20 65 6d 70 74 79 2c 20 74 68 65 6e 20  mes empty, then 
65f0: 52 45 4c 45 41 53 45 20 69 73 20 74 68 65 20 73  RELEASE is the s
6600: 61 6d 65 0a 61 73 20 5b 43 4f 4d 4d 49 54 5d 2e  ame.as [COMMIT].
6610: 0a 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63  .^The [COMMIT] c
6620: 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20 75 73  ommand may be us
6630: 65 64 20 74 6f 20 72 65 6c 65 61 73 65 20 61 6c  ed to release al
6640: 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 61 6e 64  l savepoints and
6650: 0a 63 6f 6d 6d 69 74 20 74 68 65 20 74 72 61 6e  .commit the tran
6660: 73 61 63 74 69 6f 6e 20 65 76 65 6e 20 69 66 20  saction even if 
6670: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6680: 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73  was originally s
6690: 74 61 72 74 65 64 0a 62 79 20 61 20 53 41 56 45  tarted.by a SAVE
66a0: 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 69 6e  POINT command in
66b0: 73 74 65 61 64 20 6f 66 20 61 20 5b 42 45 47 49  stead of a [BEGI
66c0: 4e 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  N] command.</p>.
66d0: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 73 61 76 65  .<p>^If the save
66e0: 70 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20  point-name in a 
66f0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
6700: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61  does not match a
6710: 6e 79 0a 73 61 76 65 70 6f 69 6e 74 20 63 75 72  ny.savepoint cur
6720: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 74 72  rently in the tr
6730: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c  ansaction stack,
6740: 20 74 68 65 6e 20 6e 6f 20 73 61 76 65 70 6f 69   then no savepoi
6750: 6e 74 73 20 61 72 65 0a 72 65 6c 65 61 73 65 64  nts are.released
6760: 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  , the database i
6770: 73 20 75 6e 63 68 61 6e 67 65 64 2c 20 61 6e 64  s unchanged, and
6780: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
6790: 6d 61 6e 64 20 72 65 74 75 72 6e 73 0a 61 6e 20  mand returns.an 
67a0: 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  error.</p>..<p>^
67b0: 4e 6f 74 65 20 74 68 61 74 20 61 6e 20 69 6e 6e  Note that an inn
67c0: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  er transaction m
67d0: 69 67 68 74 20 63 6f 6d 6d 69 74 20 28 75 73 69  ight commit (usi
67e0: 6e 67 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ng the RELEASE c
67f0: 6f 6d 6d 61 6e 64 29 0a 62 75 74 20 74 68 65 6e  ommand).but then
6800: 20 6c 61 74 65 72 20 68 61 76 65 20 69 74 73 20   later have its 
6810: 77 6f 72 6b 20 75 6e 64 6f 6e 65 20 62 79 20 61  work undone by a
6820: 20 52 4f 4c 4c 42 41 43 4b 20 69 6e 20 61 6e 20   ROLLBACK in an 
6830: 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f  outer transactio
6840: 6e 2e 0a 5e 41 20 70 6f 77 65 72 20 66 61 69 6c  n..^A power fail
6850: 75 72 65 20 6f 72 20 70 72 6f 67 72 61 6d 20 63  ure or program c
6860: 72 61 73 68 20 6f 72 20 4f 53 20 63 72 61 73 68  rash or OS crash
6870: 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20   will cause the 
6880: 6f 75 74 65 72 2d 6d 6f 73 74 0a 74 72 61 6e 73  outer-most.trans
6890: 61 63 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61  action to rollba
68a0: 63 6b 2c 20 75 6e 64 6f 69 6e 67 20 61 6c 6c 20  ck, undoing all 
68b0: 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76  changes that hav
68c0: 65 20 6f 63 63 75 72 72 65 64 20 77 69 74 68 69  e occurred withi
68d0: 6e 0a 74 68 61 74 20 6f 75 74 65 72 20 74 72 61  n.that outer tra
68e0: 6e 73 61 63 74 69 6f 6e 2c 20 65 76 65 6e 20 63  nsaction, even c
68f0: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
6900: 20 73 75 70 70 6f 73 65 64 6c 79 20 62 65 65 6e   supposedly been
6910: 20 22 63 6f 6d 6d 69 74 74 65 64 22 0a 62 79 20   "committed".by 
6920: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
6930: 61 6e 64 2e 20 20 5e 43 6f 6e 74 65 6e 74 20 69  and.  ^Content i
6940: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 63  s not actually c
6950: 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20  ommitted on the 
6960: 64 69 73 6b 20 0a 75 6e 74 69 6c 20 74 68 65 20  disk .until the 
6970: 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73 61  outermost transa
6980: 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f  ction commits.</
6990: 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  p>..<p>There are
69a0: 20 73 65 76 65 72 61 6c 20 77 61 79 73 20 6f 66   several ways of
69b0: 20 74 68 69 6e 6b 69 6e 67 20 61 62 6f 75 74 20   thinking about 
69c0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
69d0: 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  and:</p>..<ul>.<
69e0: 6c 69 3e 3c 70 3e 0a 53 6f 6d 65 20 70 65 6f 70  li><p>.Some peop
69f0: 6c 65 20 76 69 65 77 20 52 45 4c 45 41 53 45 20  le view RELEASE 
6a00: 61 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  as the equivalen
6a10: 74 20 6f 66 20 43 4f 4d 4d 49 54 20 66 6f 72 20  t of COMMIT for 
6a20: 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 54 68 69  a SAVEPOINT..Thi
6a30: 73 20 69 73 20 61 6e 20 61 63 63 65 70 74 61 62  s is an acceptab
6a40: 6c 65 20 70 6f 69 6e 74 20 6f 66 20 76 69 65 77  le point of view
6a50: 20 61 73 20 6c 6f 6e 67 20 61 73 20 6f 6e 65 20   as long as one 
6a60: 72 65 6d 65 6d 62 65 72 73 20 74 68 61 74 20 74  remembers that t
6a70: 68 65 0a 63 68 61 6e 67 65 73 20 63 6f 6d 6d 69  he.changes commi
6a80: 74 74 65 64 20 62 79 20 61 6e 20 69 6e 6e 65 72  tted by an inner
6a90: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67   transaction mig
6aa0: 68 74 20 6c 61 74 65 72 20 62 65 20 75 6e 64 6f  ht later be undo
6ab0: 6e 65 20 62 79 20 61 0a 72 6f 6c 6c 62 61 63 6b  ne by a.rollback
6ac0: 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61   in an outer tra
6ad0: 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c  nsaction.</p></l
6ae0: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41 6e 6f 74  i>..<li><p>.Anot
6af0: 68 65 72 20 76 69 65 77 20 6f 66 20 52 45 4c 45  her view of RELE
6b00: 41 53 45 20 69 73 20 74 68 61 74 20 69 74 20 6d  ASE is that it m
6b10: 65 72 67 65 73 20 61 20 6e 61 6d 65 64 20 74 72  erges a named tr
6b20: 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 6f 20 69  ansaction into i
6b30: 74 73 0a 70 61 72 65 6e 74 20 74 72 61 6e 73 61  ts.parent transa
6b40: 63 74 69 6f 6e 2c 20 73 6f 20 74 68 61 74 20 74  ction, so that t
6b50: 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63  he named transac
6b60: 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72  tion and its par
6b70: 65 6e 74 20 62 65 63 6f 6d 65 0a 74 68 65 20 73  ent become.the s
6b80: 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ame transaction.
6b90: 20 20 41 66 74 65 72 20 52 45 4c 45 41 53 45 2c    After RELEASE,
6ba0: 20 74 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73   the named trans
6bb0: 61 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70  action and its p
6bc0: 61 72 65 6e 74 0a 77 69 6c 6c 20 63 6f 6d 6d 69  arent.will commi
6bd0: 74 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 6f  t or rollback to
6be0: 67 65 74 68 65 72 2c 20 77 68 61 74 65 76 65 72  gether, whatever
6bf0: 20 74 68 65 69 72 20 66 61 74 65 20 6d 61 79 20   their fate may 
6c00: 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  be..</p></li>..<
6c10: 6c 69 3e 3c 70 3e 0a 4f 6e 65 20 63 61 6e 20 61  li><p>.One can a
6c20: 6c 73 6f 20 74 68 69 6e 6b 20 6f 66 20 73 61 76  lso think of sav
6c30: 65 70 6f 69 6e 74 73 20 61 73 0a 22 6d 61 72 6b  epoints as."mark
6c40: 73 22 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61  s" in the transa
6c50: 63 74 69 6f 6e 20 74 69 6d 65 6c 69 6e 65 2e 20  ction timeline. 
6c60: 20 49 6e 20 74 68 69 73 20 76 69 65 77 2c 20 74   In this view, t
6c70: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d  he SAVEPOINT com
6c80: 6d 61 6e 64 0a 63 72 65 61 74 65 73 20 61 20 6e  mand.creates a n
6c90: 65 77 20 6d 61 72 6b 2c 20 74 68 65 20 52 4f 4c  ew mark, the ROL
6ca0: 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64  LBACK TO command
6cb0: 20 72 65 77 69 6e 64 73 20 74 68 65 20 74 69 6d   rewinds the tim
6cc0: 65 6c 69 6e 65 20 62 61 63 6b 0a 74 6f 20 61 20  eline back.to a 
6cd0: 70 6f 69 6e 74 20 6a 75 73 74 20 61 66 74 65 72  point just after
6ce0: 20 74 68 65 20 6e 61 6d 65 64 20 6d 61 72 6b 2c   the named mark,
6cf0: 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45   and the RELEASE
6d00: 20 63 6f 6d 6d 61 6e 64 0a 65 72 61 73 65 73 20   command.erases 
6d10: 6d 61 72 6b 73 20 66 72 6f 6d 20 74 68 65 20 74  marks from the t
6d20: 69 6d 65 6c 69 6e 65 20 77 69 74 68 6f 75 74 20  imeline without 
6d30: 61 63 74 75 61 6c 6c 79 20 6d 61 6b 69 6e 67 20  actually making 
6d40: 61 6e 79 0a 63 68 61 6e 67 65 73 20 74 6f 20 74  any.changes to t
6d50: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 3c 2f 70  he database..</p
6d60: 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a  ></li>.</ul>....
6d70: 3c 68 33 3e 54 72 61 6e 73 61 63 74 69 6f 6e 20  <h3>Transaction 
6d80: 4e 65 73 74 69 6e 67 20 52 75 6c 65 73 3c 2f 68  Nesting Rules</h
6d90: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 61 73 74  3>..<p>^The last
6da0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
6db0: 72 74 65 64 20 77 69 6c 6c 20 62 65 20 74 68 65  rted will be the
6dc0: 20 66 69 72 73 74 0a 74 72 61 6e 73 61 63 74 69   first.transacti
6dd0: 6f 6e 20 63 6f 6d 6d 69 74 74 65 64 20 6f 72 20  on committed or 
6de0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 3c 2f 70 3e  rolled back.</p>
6df0: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 42 45 47 49 4e  ..<p>^The [BEGIN
6e00: 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 77  ] command only w
6e10: 6f 72 6b 73 20 69 66 20 74 68 65 20 74 72 61 6e  orks if the tran
6e20: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 69 73  saction stack is
6e30: 20 65 6d 70 74 79 2c 20 6f 72 0a 69 6e 20 6f 74   empty, or.in ot
6e40: 68 65 72 20 77 6f 72 64 73 20 69 66 20 74 68 65  her words if the
6e50: 72 65 20 61 72 65 20 6e 6f 20 70 65 6e 64 69 6e  re are no pendin
6e60: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  g transactions. 
6e70: 20 5e 49 66 20 74 68 65 20 74 72 61 6e 73 61 63   ^If the transac
6e80: 74 69 6f 6e 0a 73 74 61 63 6b 20 69 73 20 6e 6f  tion.stack is no
6e90: 74 20 65 6d 70 74 79 20 77 68 65 6e 20 74 68 65  t empty when the
6ea0: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
6eb0: 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 65   is invoked, the
6ec0: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 66 61  n the command.fa
6ed0: 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ils with an erro
6ee0: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
6ef0: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
6f00: 20 63 6f 6d 6d 69 74 73 20 61 6c 6c 20 6f 75 74   commits all out
6f10: 73 74 61 6e 64 69 6e 67 20 74 72 61 6e 73 61 63  standing transac
6f20: 74 69 6f 6e 73 20 61 6e 64 20 6c 65 61 76 65 73  tions and leaves
6f30: 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  .the transaction
6f40: 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70   stack empty.</p
6f50: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41  >..<p>^The RELEA
6f60: 53 45 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74  SE command start
6f70: 73 20 77 69 74 68 20 74 68 65 20 6d 6f 73 74 20  s with the most 
6f80: 72 65 63 65 6e 74 20 61 64 64 69 74 69 6f 6e 20  recent addition 
6f90: 74 6f 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69  to the.transacti
6fa0: 6f 6e 20 73 74 61 63 6b 20 61 6e 64 20 72 65 6c  on stack and rel
6fb0: 65 61 73 65 73 20 73 61 76 65 70 6f 69 6e 74 73  eases savepoints
6fc0: 20 62 61 63 6b 77 61 72 64 73 20 0a 69 6e 20 74   backwards .in t
6fd0: 69 6d 65 20 75 6e 74 69 6c 20 69 74 20 72 65 6c  ime until it rel
6fe0: 65 61 73 65 73 20 61 20 73 61 76 65 70 6f 69 6e  eases a savepoin
6ff0: 74 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  t with a matchin
7000: 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  g savepoint-name
7010: 2e 0a 5e 50 72 69 6f 72 20 73 61 76 65 70 6f 69  ..^Prior savepoi
7020: 6e 74 73 2c 20 65 76 65 6e 20 73 61 76 65 70 6f  nts, even savepo
7030: 69 6e 74 73 20 77 69 74 68 20 6d 61 74 63 68 69  ints with matchi
7040: 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  ng savepoint-nam
7050: 65 73 2c 20 61 72 65 0a 75 6e 63 68 61 6e 67 65  es, are.unchange
7060: 64 2e 0a 5e 49 66 20 74 68 65 20 52 45 4c 45 41  d..^If the RELEA
7070: 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65  SE command cause
7080: 73 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f  s the.transactio
7090: 6e 20 73 74 61 63 6b 20 74 6f 20 62 65 63 6f 6d  n stack to becom
70a0: 65 20 65 6d 70 74 79 20 28 69 66 20 74 68 65 20  e empty (if the 
70b0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
70c0: 72 65 6c 65 61 73 65 73 20 74 68 65 0a 6f 75 74  releases the.out
70d0: 65 72 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69  ermost transacti
70e0: 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61 63  on from the stac
70f0: 6b 29 20 74 68 65 6e 20 74 68 65 20 74 72 61 6e  k) then the tran
7100: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e  saction commits.
7110: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 52  </p>..<p>^The [R
7120: 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64  OLLBACK] command
7130: 20 77 69 74 68 6f 75 74 20 61 20 54 4f 20 63 6c   without a TO cl
7140: 61 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 73  ause rolls backs
7150: 20 61 6c 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e   all transaction
7160: 73 0a 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65  s.and leaves the
7170: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
7180: 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c  ck empty.</p>..<
7190: 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20  p>^The ROLLBACK 
71a0: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61 20 54  command with a T
71b0: 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62  O clause rolls b
71c0: 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ack transactions
71d0: 20 67 6f 69 6e 67 0a 62 61 63 6b 77 61 72 64 73   going.backwards
71e0: 20 69 6e 20 74 69 6d 65 20 62 61 63 6b 20 74 6f   in time back to
71f0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
7200: 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20   SAVEPOINT with 
7210: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
7220: 0a 5e 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20  .^The SAVEPOINT 
7230: 77 69 74 68 20 74 68 65 20 6d 61 74 63 68 69 6e  with the matchin
7240: 67 20 6e 61 6d 65 20 72 65 6d 61 69 6e 73 20 6f  g name remains o
7250: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
7260: 6e 20 73 74 61 63 6b 2c 0a 62 75 74 20 61 6c 6c  n stack,.but all
7270: 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65   database change
7280: 73 20 74 68 61 74 20 6f 63 63 75 72 72 65 64 20  s that occurred 
7290: 61 66 74 65 72 20 74 68 61 74 20 53 41 56 45 50  after that SAVEP
72a0: 4f 49 4e 54 20 77 61 73 20 63 72 65 61 74 65 64  OINT was created
72b0: 0a 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  .are rolled back
72c0: 2e 20 20 5e 49 66 20 74 68 65 20 73 61 76 65 70  .  ^If the savep
72d0: 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52  oint-name in a R
72e0: 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61  OLLBACK TO comma
72f0: 6e 64 20 64 6f 65 73 20 6e 6f 74 0a 6d 61 74 63  nd does not.matc
7300: 68 20 61 6e 79 20 53 41 56 45 50 4f 49 4e 54 20  h any SAVEPOINT 
7310: 6f 6e 20 74 68 65 20 73 74 61 63 6b 2c 20 74 68  on the stack, th
7320: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
7330: 63 6f 6d 6d 61 6e 64 20 66 61 69 6c 73 20 77 69  command fails wi
7340: 74 68 20 61 6e 0a 65 72 72 6f 72 20 61 6e 64 20  th an.error and 
7350: 6c 65 61 76 65 73 20 74 68 65 20 73 74 61 74 65  leaves the state
7360: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
7370: 20 75 6e 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a   unchanged.</p>.
7380: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
7390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73d0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 63  ######.Section c
73e0: 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b  omment comment {
73f0: 63 6f 6d 6d 65 6e 74 20 2a 63 6f 6d 6d 65 6e 74  comment *comment
7400: 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  s}..RecursiveBub
7410: 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65  bleDiagram comme
7420: 6e 74 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e  nt-syntax.</tcl>
7430: 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61  ..<p>^Comments a
7440: 72 65 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61  re not SQL comma
7450: 6e 64 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63  nds, but can occ
7460: 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 74 65  ur within the te
7470: 78 74 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65  xt of.SQL querie
7480: 73 20 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c  s passed to [sql
7490: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
74a0: 29 5d 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69  )] and related i
74b0: 6e 74 65 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d  nterfaces..^Comm
74c0: 65 6e 74 73 20 61 72 65 20 74 72 65 61 74 65 64  ents are treated
74d0: 20 61 73 20 77 68 69 74 65 73 70 61 63 65 20 62   as whitespace b
74e0: 79 20 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43  y the parser..^C
74f0: 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69  omments can begi
7500: 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65  n anywhere white
7510: 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f  space .can be fo
7520: 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69  und, including i
7530: 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e  nside expression
7540: 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74  s that span mult
7550: 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e  iple lines..</p>
7560: 0a 0a 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e  ..<p>^SQL commen
7570: 74 73 20 62 65 67 69 6e 20 77 69 74 68 20 74 77  ts begin with tw
7580: 6f 20 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d  o consecutive "-
7590: 22 20 63 68 61 72 61 63 74 65 72 73 20 28 41 53  " characters (AS
75a0: 43 49 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78  CII 0x2d).and ex
75b0: 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69  tend up to and i
75c0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78  ncluding the nex
75d0: 74 20 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63  t newline charac
75e0: 74 65 72 20 28 41 53 43 49 49 20 30 78 30 61 29  ter (ASCII 0x0a)
75f0: 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e  .or until the en
7600: 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63  d of input, whic
7610: 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73  hever comes firs
7620: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74  t.</p>..<p>^C-st
7630: 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  yle comments beg
7640: 69 6e 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64  in.with "/*" and
7650: 20 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e   extend up to an
7660: 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  d including the 
7670: 6e 65 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63  next "*/" charac
7680: 74 65 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69  ter pair.or unti
7690: 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  l the end of inp
76a0: 75 74 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f  ut, whichever co
76b0: 6d 65 73 20 66 69 72 73 74 2e 20 20 5e 43 2d 73  mes first.  ^C-s
76c0: 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61  tyle comments.ca
76d0: 6e 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20  n span multiple 
76e0: 6c 69 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e  lines. </p>..<p>
76f0: 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70  ^Comments can ap
7700: 70 65 61 72 20 61 6e 79 77 68 65 72 65 20 77 68  pear anywhere wh
7710: 69 74 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63  itespace can occ
7720: 75 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e  ur,.including in
7730: 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73  side expressions
7740: 20 61 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64   and in the midd
7750: 6c 65 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20  le of other SQL 
7760: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d  statements..^Com
7770: 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73  ments do not nes
7780: 74 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a  t..</p>...<tcl>.
7790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
77e0: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49  ection {CREATE I
77f0: 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65  NDEX} createinde
7800: 78 20 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58  x {{CREATE INDEX
7810: 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
7820: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
7830: 65 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74  e-index-stmt.</t
7840: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
7850: 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  ATE INDEX comman
7860: 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  d consists of th
7870: 65 20 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41  e keywords "CREA
7880: 54 45 20 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77  TE INDEX" follow
7890: 65 64 0a 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  ed.by the name o
78a0: 66 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 2c  f the new index,
78b0: 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e   the keyword "ON
78c0: 22 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ", the name of a
78d0: 20 70 72 65 76 69 6f 75 73 6c 79 0a 63 72 65 61   previously.crea
78e0: 74 65 64 20 74 61 62 6c 65 20 74 68 61 74 20 69  ted table that i
78f0: 73 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 2c  s to be indexed,
7900: 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73   and a parenthes
7910: 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 74 61 62  ized list of tab
7920: 6c 65 20 63 6f 6c 75 6d 6e 0a 6e 61 6d 65 73 20  le column.names 
7930: 61 6e 64 2f 6f 72 20 65 78 70 72 65 73 73 69 6f  and/or expressio
7940: 6e 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ns that are used
7950: 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78 20 6b   for the index k
7960: 65 79 2e 0a 49 66 20 74 68 65 20 6f 70 74 69 6f  ey..If the optio
7970: 6e 61 6c 20 57 48 45 52 45 20 63 6c 61 75 73 65  nal WHERE clause
7980: 20 69 73 20 69 6e 63 6c 75 64 65 64 2c 20 74 68   is included, th
7990: 65 6e 20 74 68 65 20 69 6e 64 65 78 20 69 73 20  en the index is 
79a0: 61 20 22 5b 70 61 72 74 69 61 6c 20 69 6e 64 65  a "[partial inde
79b0: 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  x]"..</p>..<tcl>
79c0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 64 65 73  hd_fragment {des
79d0: 63 69 64 78 7d 20 7b 64 65 73 63 65 6e 64 69 6e  cidx} {descendin
79e0: 67 20 69 6e 64 69 63 65 73 7d 20 7b 64 65 73 63  g indices} {desc
79f0: 65 6e 64 69 6e 67 20 69 6e 64 65 78 7d 20 7b 64  ending index} {d
7a00: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 65  escending indexe
7a10: 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63  s}</tcl>.<p>^Eac
7a20: 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6f 72  h column name or
7a30: 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20   expression can 
7a40: 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f  be followed by o
7a50: 6e 65 0a 6f 66 20 74 68 65 20 22 41 53 43 22 20  ne.of the "ASC" 
7a60: 6f 72 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72  or "DESC" keywor
7a70: 64 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73  ds to indicate s
7a80: 6f 72 74 20 6f 72 64 65 72 2e 0a 5e 54 68 65 20  ort order..^The 
7a90: 73 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20 6f  sort order may o
7aa0: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67 6e  r may not be ign
7ab0: 6f 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f  ored depending.o
7ac0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
7ad0: 69 6c 65 20 66 6f 72 6d 61 74 2c 20 61 6e 64 20  ile format, and 
7ae0: 69 6e 20 70 61 72 74 69 63 75 6c 61 72 20 74 68  in particular th
7af0: 65 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  e [schema format
7b00: 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68 65 20 22   number]..^The "
7b10: 6c 65 67 61 63 79 22 20 73 63 68 65 6d 61 20 66  legacy" schema f
7b20: 6f 72 6d 61 74 20 28 31 29 20 69 67 6e 6f 72 65  ormat (1) ignore
7b30: 73 20 69 6e 64 65 78 0a 73 6f 72 74 20 6f 72 64  s index.sort ord
7b40: 65 72 2e 20 20 5e 54 68 65 20 64 65 73 63 65 6e  er.  ^The descen
7b50: 64 69 6e 67 20 69 6e 64 65 78 20 73 63 68 65 6d  ding index schem
7b60: 61 20 66 6f 72 6d 61 74 20 28 34 29 20 74 61 6b  a format (4) tak
7b70: 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20 6f 72  es index sort or
7b80: 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74  der.into account
7b90: 2e 20 20 4f 6e 6c 79 20 76 65 72 73 69 6f 6e 73  .  Only versions
7ba0: 20 6f 66 20 53 51 4c 69 74 65 20 33 2e 33 2e 30   of SQLite 3.3.0
7bb0: 20 61 6e 64 20 6c 61 74 65 72 20 61 72 65 20 61   and later are a
7bc0: 62 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61 6e  ble to understan
7bd0: 64 0a 74 68 65 20 64 65 73 63 65 6e 64 69 6e 67  d.the descending
7be0: 20 69 6e 64 65 78 20 66 6f 72 6d 61 74 2e 20 46   index format. F
7bf0: 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
7c00: 2c 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  , version of SQL
7c10: 69 74 65 20 62 65 74 77 65 65 6e 20 33 2e 33 2e  ite between 3.3.
7c20: 30 0a 61 6e 64 20 33 2e 37 2e 39 20 75 73 65 20  0.and 3.7.9 use 
7c30: 74 68 65 20 6c 65 67 61 63 79 20 73 63 68 65 6d  the legacy schem
7c40: 61 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61  a format by defa
7c50: 75 6c 74 2e 20 20 54 68 65 20 6e 65 77 65 72 20  ult.  The newer 
7c60: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73  schema format is
7c70: 0a 75 73 65 64 20 62 79 20 64 65 66 61 75 6c 74  .used by default
7c80: 20 69 6e 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e   in version 3.7.
7c90: 31 30 20 61 6e 64 20 6c 61 74 65 72 2e 0a 5e 54  10 and later..^T
7ca0: 68 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f  he [legacy_file_
7cb0: 66 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63  format pragma] c
7cc0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 68  an be used to ch
7cd0: 61 6e 67 65 20 73 65 74 20 74 68 65 20 73 70 65  ange set the spe
7ce0: 63 69 66 69 63 0a 62 65 68 61 76 69 6f 72 20 66  cific.behavior f
7cf0: 6f 72 20 61 6e 79 20 76 65 72 73 69 6f 6e 20 6f  or any version o
7d00: 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c  f SQLite.</p>..<
7d10: 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63  p>^The COLLATE c
7d20: 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  lause optionally
7d30: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20   following each 
7d40: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 6f 72 20 65  column name.or e
7d50: 78 70 72 65 73 73 69 6f 6e 20 64 65 66 69 6e 65  xpression define
7d60: 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65  s a.collating se
7d70: 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20  quence used for 
7d80: 74 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e 20  text entries in 
7d90: 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68  that column..^Th
7da0: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
7db0: 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20  ing.sequence is 
7dc0: 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
7dd0: 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66  quence defined f
7de0: 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69  or that column i
7df0: 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41  n the.[CREATE TA
7e00: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
7e10: 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61   ^Or if no colla
7e20: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
7e30: 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69 6e   otherwise defin
7e40: 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e  ed,.the built-in
7e50: 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e   BINARY collatin
7e60: 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  g sequence is us
7e70: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ed.</p>..<tcl>hd
7e80: 5f 66 72 61 67 6d 65 6e 74 20 69 6e 64 65 78 65  _fragment indexe
7e90: 78 70 72 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 78  xpr</tcl>.<p>^Ex
7ea0: 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e 20  pressions in an 
7eb0: 69 6e 64 65 78 20 6d 61 79 20 6e 6f 74 20 72 65  index may not re
7ec0: 66 65 72 65 6e 63 65 20 6f 74 68 65 72 20 74 61  ference other ta
7ed0: 62 6c 65 73 0a 61 6e 64 20 6d 61 79 20 6e 6f 74  bles.and may not
7ee0: 20 75 73 65 20 73 75 62 71 75 65 72 69 65 73 20   use subqueries 
7ef0: 6e 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 77 68  nor functions wh
7f00: 6f 73 65 20 72 65 73 75 6c 74 20 6d 69 67 68 74  ose result might
7f10: 0a 63 68 61 6e 67 65 20 28 65 78 3a 20 5b 72 61  .change (ex: [ra
7f20: 6e 64 6f 6d 28 29 5d 20 6f 72 20 5b 73 71 6c 69  ndom()] or [sqli
7f30: 74 65 5f 76 65 72 73 69 6f 6e 28 29 5d 29 2e 0a  te_version()])..
7f40: 5e 45 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20  ^Expressions in 
7f50: 61 6e 20 69 6e 64 65 78 20 6d 61 79 20 6f 6e 6c  an index may onl
7f60: 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d  y refer to colum
7f70: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 0a  ns in the table.
7f80: 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 69 6e  that is being in
7f90: 64 65 78 65 64 2e 0a 49 6e 64 65 78 65 73 20 6f  dexed..Indexes o
7fa0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 77 69 6c  n expression wil
7fb0: 6c 20 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68 20  l not work with 
7fc0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
7fd0: 74 65 20 70 72 69 6f 72 0a 74 6f 20 5b 76 65 72  te prior.to [ver
7fe0: 73 69 6f 6e 20 33 2e 39 2e 30 5d 2e 0a 53 65 65  sion 3.9.0]..See
7ff0: 20 74 68 65 20 5b 49 6e 64 65 78 65 73 20 4f 6e   the [Indexes On
8000: 20 45 78 70 72 65 73 73 69 6f 6e 73 5d 20 64 6f   Expressions] do
8010: 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69 74  cument for addit
8020: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
8030: 6e 0a 61 62 6f 75 74 20 75 73 69 6e 67 20 67 65  n.about using ge
8040: 6e 65 72 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  neral expression
8050: 73 20 69 6e 20 43 52 45 41 54 45 20 49 4e 44 45  s in CREATE INDE
8060: 58 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c  X statements...<
8070: 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61  p>There are no a
8080: 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73 20  rbitrary limits 
8090: 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  on the number of
80a0: 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63 61   indices that ca
80b0: 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74 6f  n be.attached to
80c0: 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 2e   a single table.
80d0: 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f    ^(The number o
80e0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20  f columns in an 
80f0: 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74 65  index is .limite
8100: 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73  d to the value s
8110: 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f 6c  et by.[sqlite3_l
8120: 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c 49  imit]([SQLITE_LI
8130: 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29  MIT_COLUMN],...)
8140: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  .)^</p>..<tcl>hd
8150: 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65  _fragment unique
8160: 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64 65  idx {unique inde
8170: 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66 20  x}</tcl>.<p>^If 
8180: 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f  the UNIQUE keywo
8190: 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77 65  rd appears betwe
81a0: 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e  en CREATE and IN
81b0: 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61  DEX then duplica
81c0: 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73  te.index entries
81d0: 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64   are not allowed
81e0: 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74 20  .  ^Any attempt 
81f0: 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c  to insert a dupl
8200: 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c  icate entry.will
8210: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72   result in an er
8220: 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20 70  ror.  ^For the p
8230: 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71 75  urposes of uniqu
8240: 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20 4e  e indices, all N
8250: 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20 63  ULL values.are c
8260: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69 66  onsidered to dif
8270: 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20  ferent from all 
8280: 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65  other NULL value
8290: 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20 75  s and are thus u
82a0: 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20 6f  nique..This is o
82b0: 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70 6f  ne of the two po
82c0: 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65 74  ssible interpret
82d0: 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 51  ations of the SQ
82e0: 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28 74  L-92 standard.(t
82f0: 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20 74  he language in t
8300: 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20 61  he standard is a
8310: 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69 73  mbiguous) and is
8320: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   the interpretat
8330: 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ion.followed by 
8340: 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53 51  PostgreSQL, MySQ
8350: 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e 64  L, Firebird, and
8360: 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d   Oracle.  Inform
8370: 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74  ix and.Microsoft
8380: 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c   SQL Server foll
8390: 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e 74  ow the other int
83a0: 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
83b0: 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e  he standard.</p>
83c0: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
83d0: 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49  ional IF NOT EXI
83e0: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72  STS clause is pr
83f0: 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65  esent and anothe
8400: 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68 65  r index.with the
8410: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61   same name alrea
8420: 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20  dy exists, then 
8430: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63  this command bec
8440: 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70  omes a no-op.</p
8450: 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20 61  >..<p>^Indexes a
8460: 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68 20  re removed with 
8470: 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d  the [DROP INDEX]
8480: 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a   command.</p>...
8490: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
84a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84e0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
84f0: 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72 65  EATE TABLE} {cre
8500: 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45 41  atetable} {{CREA
8510: 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75  TE TABLE}}..Recu
8520: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
8530: 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d  am create-table-
8540: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
8550: 54 68 65 20 22 43 52 45 41 54 45 20 54 41 42 4c  The "CREATE TABL
8560: 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  E" command is us
8570: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  ed to create a n
8580: 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20 53  ew table in an S
8590: 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65 2e  QLite .database.
85a0: 20 41 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   A CREATE TABLE 
85b0: 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69 65  command specifie
85c0: 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  s the following 
85d0: 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74 68  attributes of th
85e0: 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c 75  e.new table:..<u
85f0: 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65 20  l>.  <li><p>The 
8600: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20  name of the new 
8610: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
8620: 3e 20 54 68 65 20 64 61 74 61 62 61 73 65 20 69  > The database i
8630: 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65 77 20  n which the new 
8640: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
8650: 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65 20  . Tables may be 
8660: 0a 20 20 20 20 20 20 63 72 65 61 74 65 64 20 69  .      created i
8670: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
8680: 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61  ase, the temp da
8690: 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61 6e  tabase, or in an
86a0: 79 20 61 74 74 61 63 68 65 64 0a 20 20 20 20 20  y attached.     
86b0: 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c 6c   database...  <l
86c0: 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20 6f  i><p> The name o
86d0: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  f each column in
86e0: 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   the table...  <
86f0: 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c 61  li><p> The decla
8700: 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68  red type of each
8710: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74   column in the t
8720: 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  able...  <li><p>
8730: 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   A default value
8740: 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 66   or expression f
8750: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
8760: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20  n the table...  
8770: 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c  <li><p> A defaul
8780: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
8790: 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74 68  ence to use with
87a0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20   each column... 
87b0: 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61   <li><p> Optiona
87c0: 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20 4b  lly, a PRIMARY K
87d0: 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
87e0: 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63 6f  . Both single co
87f0: 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20 20  lumn and.       
8800: 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74 69  composite (multi
8810: 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69 6d  ple column) prim
8820: 61 72 79 20 6b 65 79 73 20 61 72 65 20 73 75 70  ary keys are sup
8830: 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c  ported...  <li><
8840: 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c 20  p> A set of SQL 
8850: 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20  constraints for 
8860: 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c 69  each table. SQLi
8870: 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49 51  te supports UNIQ
8880: 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20 4e  UE, NOT.       N
8890: 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20 46  ULL, CHECK and F
88a0: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
88b0: 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e 3c  raints...  <li><
88c0: 70 3e 20 57 68 65 74 68 65 72 20 74 68 65 20 74  p> Whether the t
88d0: 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f  able is a [WITHO
88e0: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e  UT ROWID] table.
88f0: 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79  .</ul>..<p>Every
8900: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
8910: 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70 65  atement must spe
8920: 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72 20  cify a name for 
8930: 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a 20  the new table.. 
8940: 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20 74   ^(Table names t
8950: 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22  hat begin with "
8960: 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65 73  sqlite_" are res
8970: 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e  erved for intern
8980: 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73 20  al use. It.  is 
8990: 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65  an error to atte
89a0: 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20  mpt to create a 
89b0: 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61 6d  table with a nam
89c0: 65 20 74 68 61 74 20 73 74 61 72 74 73 20 77 69  e that starts wi
89d0: 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e 29  th.  "sqlite_".)
89e0: 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 3c 79 79  ^..<p> ^If a <yy
89f0: 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
8a00: 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 73 70 65  </yyterm> is spe
8a10: 63 69 66 69 65 64 2c 20 69 74 20 6d 75 73 74 20  cified, it must 
8a20: 62 65 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22  be either "main"
8a30: 2c 20 0a 20 20 22 74 65 6d 70 22 2c 20 6f 72 20  , .  "temp", or 
8a40: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 5b  the name of an [
8a50: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7c  ATTACH DATABASE|
8a60: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
8a70: 65 5d 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  e]. ^In this cas
8a80: 65 0a 20 20 74 68 65 20 6e 65 77 20 74 61 62 6c  e.  the new tabl
8a90: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
8aa0: 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61  the named databa
8ab0: 73 65 2e 20 5e 49 66 20 74 68 65 20 22 54 45 4d  se. ^If the "TEM
8ac0: 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59  P" or "TEMPORARY
8ad0: 22 0a 20 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  ".  keyword occu
8ae0: 72 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 22  rs between the "
8af0: 43 52 45 41 54 45 22 20 61 6e 64 20 22 54 41 42  CREATE" and "TAB
8b00: 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e 65 77  LE" then the new
8b10: 20 74 61 62 6c 65 20 69 73 0a 20 20 63 72 65 61   table is.  crea
8b20: 74 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 20  ted in the temp 
8b30: 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20 69 73  database. ^It is
8b40: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65   an error to spe
8b50: 63 69 66 79 20 62 6f 74 68 20 61 20 0a 20 20 3c  cify both a .  <
8b60: 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61  yyterm>schema-na
8b70: 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20  me</yyterm> and 
8b80: 74 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50  the TEMP or TEMP
8b90: 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 2c 20 75  ORARY keyword, u
8ba0: 6e 6c 65 73 73 20 74 68 65 0a 20 20 3c 79 79 74  nless the.  <yyt
8bb0: 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
8bc0: 2f 79 79 74 65 72 6d 3e 20 69 73 20 22 74 65 6d  /yyterm> is "tem
8bd0: 70 22 2e 20 0a 20 20 5e 49 66 20 6e 6f 20 73 63  p". .  ^If no sc
8be0: 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65  hema name is spe
8bf0: 63 69 66 69 65 64 20 61 6e 64 20 74 68 65 0a 20  cified and the. 
8c00: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73   TEMP keyword is
8c10: 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 74 68 65   not present the
8c20: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  n the table is c
8c30: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61  reated in the ma
8c40: 69 6e 0a 20 20 64 61 74 61 62 61 73 65 2e 0a 0a  in.  database...
8c50: 3c 70 3e 0a 20 20 5e 49 74 20 69 73 20 75 73 75  <p>.  ^It is usu
8c60: 61 6c 6c 79 20 61 6e 20 65 72 72 6f 72 20 74 6f  ally an error to
8c70: 20 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61   attempt to crea
8c80: 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
8c90: 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61  n a database tha
8ca0: 74 0a 20 20 61 6c 72 65 61 64 79 20 63 6f 6e 74  t.  already cont
8cb0: 61 69 6e 73 20 61 20 74 61 62 6c 65 2c 20 69 6e  ains a table, in
8cc0: 64 65 78 20 6f 72 20 76 69 65 77 20 6f 66 20 74  dex or view of t
8cd0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 20 5e 48  he same name. ^H
8ce0: 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 0a 20  owever, if the. 
8cf0: 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22   "IF NOT EXISTS"
8d00: 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
8d10: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
8d20: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
8d30: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 0a 20   statement and. 
8d40: 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77   a table or view
8d50: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
8d60: 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  e already exists
8d70: 2c 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  , the CREATE TAB
8d80: 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20 20 73 69 6d  LE command.  sim
8d90: 70 6c 79 20 68 61 73 20 6e 6f 20 65 66 66 65 63  ply has no effec
8da0: 74 20 28 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  t (and no error 
8db0: 6d 65 73 73 61 67 65 20 69 73 20 72 65 74 75 72  message is retur
8dc0: 6e 65 64 29 2e 20 5e 41 6e 20 65 72 72 6f 72 20  ned). ^An error 
8dd0: 69 73 20 73 74 69 6c 6c 0a 20 20 72 65 74 75 72  is still.  retur
8de0: 6e 65 64 20 69 66 20 74 68 65 20 74 61 62 6c 65  ned if the table
8df0: 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74   cannot be creat
8e00: 65 64 20 62 65 63 61 75 73 65 20 6f 66 20 61 6e  ed because of an
8e10: 20 65 78 69 73 74 69 6e 67 20 69 6e 64 65 78 2c   existing index,
8e20: 20 65 76 65 6e 20 0a 20 20 69 66 20 74 68 65 20   even .  if the 
8e30: 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22 20  "IF NOT EXISTS" 
8e40: 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
8e50: 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20 69 73 20  ied...<p>^It is 
8e60: 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  not an error to 
8e70: 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 74  create a table t
8e80: 68 61 74 20 68 61 73 20 74 68 65 20 73 61 6d 65  hat has the same
8e90: 20 6e 61 6d 65 20 61 73 20 61 6e 20 0a 20 20 65   name as an .  e
8ea0: 78 69 73 74 69 6e 67 20 5b 43 52 45 41 54 45 20  xisting [CREATE 
8eb0: 54 52 49 47 47 45 52 7c 74 72 69 67 67 65 72 5d  TRIGGER|trigger]
8ec0: 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 61 72  ...<p>^Tables ar
8ed0: 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20  e removed using 
8ee0: 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  the [DROP TABLE]
8ef0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70   statement.  </p
8f00: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
8f10: 65 6e 74 20 63 72 65 61 74 65 74 61 62 61 73 20  ent createtabas 
8f20: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53  {CREATE TABLE AS
8f30: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 52 45 41  }</tcl>.<h3>CREA
8f40: 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20  TE TABLE ... AS 
8f50: 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e 74  SELECT Statement
8f60: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22  s</h3>..<p>^(A "
8f70: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
8f80: 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61 74   AS SELECT" stat
8f90: 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61 6e  ement creates an
8fa0: 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64 61  d populates a da
8fb0: 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61 73  tabase.table bas
8fc0: 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
8fd0: 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  s of a SELECT st
8fe0: 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65  atement.)^ ^(The
8ff0: 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20 73   table has the s
9000: 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f  ame.number of co
9010: 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f 77  lumns as the row
9020: 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s returned by th
9030: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
9040: 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 0a  nt. The name of.
9050: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74  each column is t
9060: 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e  he same as the n
9070: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ame of the corre
9080: 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20  sponding column 
9090: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73 65  in the result.se
90a0: 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  t of the SELECT 
90b0: 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54  statement.)^ ^(T
90c0: 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  he declared type
90d0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
90e0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79  is determined.by
90f0: 20 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f 6e   the [expression
9100: 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68   affinity] of th
9110: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
9120: 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
9130: 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66 20  e result set.of 
9140: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
9150: 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73  ment, as follows
9160: 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  :.</p>..<center>
9170: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e  <table border=1>
9180: 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72 65  .  <tr><th>Expre
9190: 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20 20  ssion Affinity  
91a0: 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c   <th>Column Decl
91b0: 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72 3e  ared Type.  <tr>
91c0: 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20 20 20  <td>TEXT        
91d0: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 54            <td>"T
91e0: 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e  EXT".  <tr><td>N
91f0: 55 4d 45 52 49 43 20 20 20 20 20 20 20 20 20 20  UMERIC          
9200: 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a 20       <td>"NUM". 
9210: 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45 52   <tr><td>INTEGER
9220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
9230: 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e 3c  td>"INT".  <tr><
9240: 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20 20  td>REAL         
9250: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52 45           <td>"RE
9260: 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 4f  AL".  <tr><td>NO
9270: 4e 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  NE              
9280: 20 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70 74      <td>"" (empt
9290: 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62 6c  y string).</tabl
92a0: 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c  e></center>)^..<
92b0: 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65 61  p>^(A table crea
92c0: 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
92d0: 20 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e 6f   TABLE AS has no
92e0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
92f0: 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20   no.constraints 
9300: 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68 65  of any kind. The
9310: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9320: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  f each column is
9330: 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61 75   NULL. The defau
9340: 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt.collation seq
9350: 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63  uence for each c
9360: 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77  olumn of the new
9370: 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59   table is BINARY
9380: 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20  .)^..<p>^Tables 
9390: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  created using CR
93a0: 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 61 72  EATE TABLE AS ar
93b0: 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70 75  e initially popu
93c0: 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 0a 72  lated with the.r
93d0: 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65 74 75  ows of data retu
93e0: 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
93f0: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 52  CT statement. ^R
9400: 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e 65 64  ows are assigned
9410: 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61 73   contiguously.as
9420: 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d 20  cending [rowid] 
9430: 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e 67  values, starting
9440: 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65 20   with 1, in the 
9450: 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72 5d  [order by|order]
9460: 20 74 68 61 74 20 74 68 65 79 0a 61 72 65 20 72   that they.are r
9470: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
9480: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
9490: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
94a0: 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66 7d  nt {tablecoldef}
94b0: 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   {column definit
94c0: 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66  ion} {column def
94d0: 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a  initions}</tcl>.
94e0: 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69 6e  <h3>Column Defin
94f0: 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  itions</h3>..<p>
9500: 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20 43  Unless it is a C
9510: 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20  REATE TABLE ... 
9520: 41 53 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  AS SELECT statem
9530: 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54 41  ent, a CREATE TA
9540: 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e 65  BLE includes.one
9550: 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e   or more [column
9560: 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66 69  -def|column defi
9570: 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e  nitions], option
9580: 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ally followed by
9590: 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62 6c   a list of.[tabl
95a0: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61 62  e-constraint|tab
95b0: 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e  le constraints].
95c0: 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65    Each column de
95d0: 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73 74  finition consist
95e0: 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f 66  s of the.name of
95f0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74   the column, opt
9600: 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64  ionally followed
9610: 20 62 79 20 74 68 65 20 64 65 63 6c 61 72 65 64   by the declared
9620: 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c   type of the col
9630: 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f 72  umn,.then one or
9640: 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 5b   more optional [
9650: 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e  column-constrain
9660: 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61  t|column constra
9670: 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64 20  ints]. Included 
9680: 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69 6f  in.the definitio
9690: 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e  n of "column con
96a0: 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74 68  straints" for th
96b0: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68  e purposes of th
96c0: 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74 65  e previous.state
96d0: 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f 4c  ment are the COL
96e0: 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c 54  LATE and DEFAULT
96f0: 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20 74   clauses, even t
9700: 68 6f 75 67 68 20 74 68 65 73 65 20 61 72 65 20  hough these are 
9710: 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73 74  not really.const
9720: 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73 65  raints in the se
9730: 6e 73 65 20 74 68 61 74 20 74 68 65 79 20 64 6f  nse that they do
9740: 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74 68   not restrict th
9750: 65 20 64 61 74 61 20 74 68 61 74 20 74 68 65 20  e data that the 
9760: 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61 69  table may.contai
9770: 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f 6e  n. The other con
9780: 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20 4e  straints - NOT N
9790: 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49 51  ULL, CHECK, UNIQ
97a0: 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20  UE, PRIMARY KEY 
97b0: 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59 20  and.FOREIGN KEY 
97c0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69 6d  constraints - im
97d0: 70 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f 6e  pose restriction
97e0: 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73 20  s on the tables 
97f0: 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61 72  data, and are ar
9800: 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64 65  e.described unde
9810: 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c 53  r [constraints|S
9820: 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69  QL Data Constrai
9830: 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e  nts] below...<p>
9840: 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c  ^Unlike most SQL
9850: 20 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69   databases, SQLi
9860: 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74  te does not rest
9870: 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f 66  rict the type of
9880: 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20 62   data that.may b
9890: 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  e inserted into 
98a0: 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f  a column based o
98b0: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65  n the columns de
98c0: 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e 73  clared type. Ins
98d0: 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73 65  tead,.SQLite use
98e0: 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e  s [dynamic typin
98f0: 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72 65  g]. ^The declare
9900: 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75  d type of a colu
9910: 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64 65  mn is used to.de
9920: 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66 66  termine the [aff
9930: 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f  inity] of the co
9940: 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 74 63 6c  lumn only...<tcl
9950: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 66 6c  >hd_fragment dfl
9960: 74 76 61 6c 20 7b 64 65 66 61 75 6c 74 20 63 6f  tval {default co
9970: 6c 75 6d 6e 20 76 61 6c 75 65 7d 20 7b 64 65 66  lumn value} {def
9980: 61 75 6c 74 20 76 61 6c 75 65 7d 3c 2f 74 63 6c  ault value}</tcl
9990: 3e 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54  >.<p>The DEFAULT
99a0: 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
99b0: 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  s a default valu
99c0: 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65  e to use for the
99d0: 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61   column if no.va
99e0: 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c  lue is explicitl
99f0: 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  y provided by th
9a00: 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e  e user when doin
9a10: 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e  g an [INSERT]. ^
9a20: 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65  If there.is no e
9a30: 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20  xplicit DEFAULT 
9a40: 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
9a50: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
9a60: 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nition, then the
9a70: 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20   .default value 
9a80: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  of the column is
9a90: 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c   NULL. ^(An expl
9aa0: 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61  icit DEFAULT cla
9ab0: 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a  use may specify.
9ac0: 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  that the default
9ad0: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
9ae0: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  a string constan
9af0: 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61  t, a blob consta
9b00: 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d  nt, a.signed-num
9b10: 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73  ber, or any cons
9b20: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
9b30: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65  enclosed in pare
9b40: 6e 74 68 65 73 65 73 2e 20 41 0a 64 65 66 61 75  ntheses. A.defau
9b50: 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73  lt value may als
9b60: 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  o be one of the 
9b70: 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64  special case-ind
9b80: 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f 72 64  ependent keyword
9b90: 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  s.CURRENT_TIME, 
9ba0: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20  CURRENT_DATE or 
9bb0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
9bc0: 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75  P.)^ ^For the pu
9bd0: 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a 44 45  rposes of the.DE
9be0: 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61 6e  FAULT clause, an
9bf0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63   expression is c
9c00: 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73 74 61  onsidered consta
9c10: 6e 74 20 69 66 20 69 74 20 64 6f 65 73 0a 63 6f  nt if it does.co
9c20: 6e 74 61 69 6e 73 20 6e 6f 20 73 75 62 2d 71 75  ntains no sub-qu
9c30: 65 72 69 65 73 2c 20 63 6f 6c 75 6d 6e 20 6f 72  eries, column or
9c40: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
9c50: 73 2c 20 5b 62 6f 75 6e 64 20 70 61 72 61 6d 65  s, [bound parame
9c60: 74 65 72 73 5d 2c 0a 6f 72 20 73 74 72 69 6e 67  ters],.or string
9c70: 20 6c 69 74 65 72 61 6c 73 20 65 6e 63 6c 6f 73   literals enclos
9c80: 65 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f  ed in double-quo
9c90: 74 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20 73  tes instead of s
9ca0: 69 6e 67 6c 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c  ingle-quotes...<
9cb0: 70 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20  p>^(Each time a 
9cc0: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
9cd0: 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  into the table b
9ce0: 79 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  y an INSERT stat
9cf0: 65 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73  ement that .does
9d00: 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70   not provide exp
9d10: 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72  licit values for
9d20: 20 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d   all table colum
9d30: 6e 73 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  ns the values st
9d40: 6f 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20  ored in.the new 
9d50: 72 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e  row are determin
9d60: 65 64 20 62 79 20 74 68 65 69 72 20 64 65 66 61  ed by their defa
9d70: 75 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73  ult values)^, as
9d80: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a   follows:..<ul>.
9d90: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9da0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9db0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  f the column is 
9dc0: 61 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c  a constant NULL,
9dd0: 20 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20   text, blob or. 
9de0: 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72     signed-number
9df0: 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61   value, then tha
9e00: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
9e10: 64 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20  directly in the 
9e20: 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e  new row...  <li>
9e30: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
9e40: 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f  lt value of a co
9e50: 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
9e60: 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68  ssion in parenth
9e70: 65 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74  eses, then.    t
9e80: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
9e90: 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
9ea0: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
9eb0: 65 72 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  erted and the re
9ec0: 73 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69  sults.    used i
9ed0: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a  n the new row...
9ee0: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9ef0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9f00: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55  f a column is CU
9f10: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
9f20: 45 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20  ENT_DATE or.    
9f30: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
9f40: 50 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  P, then the valu
9f50: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65  e used in the ne
9f60: 77 20 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a  w row is a text.
9f70: 20 20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69      representati
9f80: 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  on of the curren
9f90: 74 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f  t UTC date and/o
9fa0: 72 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52  r time. ^For CUR
9fb0: 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20  RENT_TIME, the. 
9fc0: 20 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65     format of the
9fd0: 20 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d   value is "HH:MM
9fe0: 3a 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45  :SS". ^For CURRE
9ff0: 4e 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d  NT_DATE, "YYYY-M
a000: 4d 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20  M-DD". ^The.    
a010: 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45  format for CURRE
a020: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20  NT_TIMESTAMP is 
a030: 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  "YYYY-MM-DD HH:M
a040: 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  M:SS"..</ul>..<p
a050: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
a060: 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
a070: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f  he name of a [co
a080: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
a090: 5d 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20  ] to use as.the 
a0a0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
a0b0: 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74  n sequence for t
a0c0: 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e  he column. ^If n
a0d0: 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  o COLLATE clause
a0e0: 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
a0f0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
a100: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
a110: 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e   [BINARY]...<p>^
a120: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
a130: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
a140: 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74   is limited by t
a150: 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43  he [SQLITE_MAX_C
a160: 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74  OLUMN].compile-t
a170: 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e  ime parameter. ^
a180: 41 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  A single row of 
a190: 61 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73  a table cannot s
a1a0: 74 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b  tore more than.[
a1b0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
a1c0: 48 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  H] bytes of data
a1d0: 2e 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65  . ^Both of these
a1e0: 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c   limits can be l
a1f0: 6f 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d  owered at.runtim
a200: 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  e using the [sql
a210: 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f  ite3_limit()] C/
a220: 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  C++ interface.</
a230: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
a240: 6d 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74  ment {constraint
a250: 73 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d  s} {constraints}
a260: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44  </tcl>.<h3>SQL D
a270: 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c  ata Constraints<
a280: 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /h3>..<tcl>hd_fr
a290: 61 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f  agment primkeyco
a2a0: 6e 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59  nst {PRIMARY KEY
a2b0: 7d 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63  } {PRIMARY KEY c
a2c0: 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e  onstraint}</tcl>
a2d0: 0a 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20  .<p>^Each table 
a2e0: 69 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61  in SQLite may ha
a2f0: 76 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c  ve at most one <
a300: 62 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62  b>PRIMARY KEY</b
a310: 3e 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79  >. ^If the.  key
a320: 77 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45  words PRIMARY KE
a330: 59 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  Y are added to a
a340: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
a350: 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69  on, then the pri
a360: 6d 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74  mary key.  for t
a370: 68 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74  he table consist
a380: 73 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65  s of that single
a390: 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66   column. ^Or, if
a3a0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
a3b0: 6c 61 75 73 65 20 0a 20 20 69 73 20 73 70 65 63  lause .  is spec
a3c0: 69 66 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c  ified as a [tabl
a3d0: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74  e-constraint], t
a3e0: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
a3f0: 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
a400: 0a 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  .  consists of t
a410: 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  he list of colum
a420: 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ns specified as 
a430: 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d  part of the PRIM
a440: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a  ARY KEY clause..
a450: 20 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b    ^The PRIMARY K
a460: 45 59 20 63 6c 61 75 73 65 20 6d 75 73 74 20 63  EY clause must c
a470: 6f 6e 74 61 69 6e 20 6f 6e 6c 79 20 63 6f 6c 75  ontain only colu
a480: 6d 6e 20 6e 61 6d 65 73 20 26 6d 64 61 73 68 3b  mn names &mdash;
a490: 20 74 68 65 20 75 73 65 20 6f 66 20 0a 20 20 65   the use of .  e
a4a0: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e  xpressions in an
a4b0: 20 5b 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e   [indexed-column
a4c0: 5d 20 6f 66 20 61 20 50 52 49 4d 41 52 59 20 4b  ] of a PRIMARY K
a4d0: 45 59 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72  EY is not suppor
a4e0: 74 65 64 2e 0a 20 20 5e 41 6e 20 65 72 72 6f 72  ted..  ^An error
a4f0: 20 69 73 20 72 61 69 73 65 64 20 69 66 20 6d 6f   is raised if mo
a500: 72 65 20 74 68 61 6e 20 6f 6e 65 20 50 52 49 4d  re than one PRIM
a510: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61  ARY KEY clause a
a520: 70 70 65 61 72 73 20 69 6e 20 61 0a 20 20 43 52  ppears in a.  CR
a530: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
a540: 6d 65 6e 74 2e 20 20 5e 54 68 65 20 50 52 49 4d  ment.  ^The PRIM
a550: 41 52 59 20 4b 45 59 20 69 73 20 6f 70 74 69 6f  ARY KEY is optio
a560: 6e 61 6c 20 66 6f 72 20 6f 72 64 69 6e 61 72 79  nal for ordinary
a570: 20 74 61 62 6c 65 73 0a 20 20 62 75 74 20 69 73   tables.  but is
a580: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 5b 57   required for [W
a590: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
a5a0: 62 6c 65 73 2e 0a 0a 3c 70 3e 49 66 20 61 20 74  bles...<p>If a t
a5b0: 61 62 6c 65 20 68 61 73 20 61 20 73 69 6e 67 6c  able has a singl
a5c0: 65 20 63 6f 6c 75 6d 6e 20 70 72 69 6d 61 72 79  e column primary
a5d0: 20 6b 65 79 20 61 6e 64 20 74 68 65 20 64 65 63   key and the dec
a5e0: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68  lared type of th
a5f0: 61 74 0a 20 20 63 6f 6c 75 6d 6e 20 69 73 20 22  at.  column is "
a600: 49 4e 54 45 47 45 52 22 20 61 6e 64 20 74 68 65  INTEGER" and the
a610: 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 61 20   table is not a 
a620: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
a630: 74 61 62 6c 65 2c 0a 20 20 74 68 65 6e 20 74 68  table,.  then th
a640: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77  e column is know
a650: 6e 20 61 73 20 61 6e 20 5b 49 4e 54 45 47 45 52  n as an [INTEGER
a660: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20   PRIMARY KEY].. 
a670: 20 53 65 65 20 5b 72 6f 77 69 64 7c 62 65 6c 6f   See [rowid|belo
a680: 77 5d 20 66 6f 72 20 61 20 64 65 73 63 72 69 70  w] for a descrip
a690: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 70 65 63  tion of the spec
a6a0: 69 61 6c 20 70 72 6f 70 65 72 74 69 65 73 20 61  ial properties a
a6b0: 6e 64 20 62 65 68 61 76 69 6f 72 73 0a 20 20 61  nd behaviors.  a
a6c0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a6d0: 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n [INTEGER PRIMA
a6e0: 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e 45 61  RY KEY]...<p>^Ea
a6f0: 63 68 20 72 6f 77 20 69 6e 20 61 20 74 61 62 6c  ch row in a tabl
a700: 65 20 77 69 74 68 20 61 20 70 72 69 6d 61 72 79  e with a primary
a710: 20 6b 65 79 20 6d 75 73 74 20 68 61 76 65 20 61   key must have a
a720: 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
a730: 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73 20  ion.  of values 
a740: 69 6e 20 69 74 73 20 70 72 69 6d 61 72 79 20 6b  in its primary k
a750: 65 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e 46 6f 72  ey columns. ^For
a760: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
a770: 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a 20 20 74   determining.  t
a780: 68 65 20 75 6e 69 71 75 65 6e 65 73 73 20 6f 66  he uniqueness of
a790: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c   primary key val
a7a0: 75 65 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ues, NULL values
a7b0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
a7c0: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 0a 20 20  distinct from.  
a7d0: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
a7e0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65  , including othe
a7f0: 72 20 4e 55 4c 4c 73 2e 20 5e 49 66 20 61 6e 20  r NULLs. ^If an 
a800: 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44  [INSERT] or [UPD
a810: 41 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ATE].  statement
a820: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64   attempts to mod
a830: 69 66 79 20 74 68 65 20 74 61 62 6c 65 20 63 6f  ify the table co
a840: 6e 74 65 6e 74 20 73 6f 20 74 68 61 74 20 74 77  ntent so that tw
a850: 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 0a 20  o or more rows. 
a860: 20 68 61 76 65 20 69 64 65 6e 74 69 63 61 6c 20   have identical 
a870: 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75  primary key valu
a880: 65 73 2c 20 74 68 61 74 20 69 73 20 61 20 63 6f  es, that is a co
a890: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
a8a0: 6f 6e 2e 0a 0a 3c 70 3e 20 41 63 63 6f 72 64 69  on...<p> Accordi
a8b0: 6e 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74  ng to the SQL st
a8c0: 61 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20  andard, PRIMARY 
a8d0: 4b 45 59 20 73 68 6f 75 6c 64 20 61 6c 77 61 79  KEY should alway
a8e0: 73 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c  s imply NOT NULL
a8f0: 2e 0a 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c  ..  Unfortunatel
a900: 79 2c 20 64 75 65 20 74 6f 20 61 20 62 75 67 20  y, due to a bug 
a910: 69 6e 20 73 6f 6d 65 20 65 61 72 6c 79 20 76 65  in some early ve
a920: 72 73 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20  rsions, this is 
a930: 6e 6f 74 20 74 68 65 0a 20 20 63 61 73 65 20 69  not the.  case i
a940: 6e 20 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73  n SQLite. ^Unles
a950: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  s the column is 
a960: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
a970: 41 52 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74 68  ARY KEY] or.  th
a980: 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49  e table is a [WI
a990: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
a9a0: 6c 65 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  le or the column
a9b0: 20 69 73 20 64 65 63 6c 61 72 65 64 20 4e 4f 54   is declared NOT
a9c0: 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65 20   NULL,.  SQLite 
a9d0: 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75  allows NULL valu
a9e0: 65 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20  es in a PRIMARY 
a9f0: 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c  KEY column.  SQL
aa00: 69 74 65 20 63 6f 75 6c 64 20 62 65 20 66 69 78  ite could be fix
aa10: 65 64 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20  ed to.  conform 
aa20: 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 2c  to the standard,
aa30: 20 62 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d 69   but doing so mi
aa40: 67 68 74 20 62 72 65 61 6b 20 6c 65 67 61 63 79  ght break legacy
aa50: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20   applications.. 
aa60: 20 48 65 6e 63 65 2c 20 69 74 20 68 61 73 20 62   Hence, it has b
aa70: 65 65 6e 20 64 65 63 69 64 65 64 20 74 6f 20 6d  een decided to m
aa80: 65 72 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20 74  erely document t
aa90: 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c  he fact that SQL
aaa0: 69 74 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20 4e  ite.  allowing N
aab0: 55 4c 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52 49  ULLs in most PRI
aac0: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
aad0: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
aae0: 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e 73 74 20  ent uniqueconst 
aaf0: 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75 65  {UNIQUE} {unique
ab00: 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 55 4e   constraint} {UN
ab10: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 7d  IQUE constraint}
ab20: 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e  </tcl>.<p>^A <b>
ab30: 55 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74  UNIQUE</b> const
ab40: 72 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72  raint is similar
ab50: 20 74 6f 20 61 20 50 52 49 4d 41 52 59 20 4b 45   to a PRIMARY KE
ab60: 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78  Y constraint, ex
ab70: 63 65 70 74 0a 20 20 74 68 61 74 20 61 20 73 69  cept.  that a si
ab80: 6e 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68  ngle table may h
ab90: 61 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f  ave any number o
aba0: 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  f UNIQUE constra
abb0: 69 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a  ints. ^For each.
abc0: 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61    UNIQUE constra
abd0: 69 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c 65  int on the table
abe0: 2c 20 65 61 63 68 20 72 6f 77 20 6d 75 73 74 20  , each row must 
abf0: 63 6f 6e 74 61 69 6e 20 61 20 75 6e 69 71 75 65  contain a unique
ac00: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f   combination.  o
ac10: 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  f values in the 
ac20: 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69  columns identifi
ac30: 65 64 20 62 79 20 74 68 65 20 55 4e 49 51 55 45  ed by the UNIQUE
ac40: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 20 20   constraint. .  
ac50: 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
ac60: 73 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73  s of UNIQUE cons
ac70: 74 72 61 69 6e 74 73 2c 20 4e 55 4c 4c 20 76 61  traints, NULL va
ac80: 6c 75 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69  lues.  are consi
ac90: 64 65 72 65 64 20 64 69 73 74 69 6e 63 74 20 66  dered distinct f
aca0: 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61  rom all other va
acb0: 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20  lues, including 
acc0: 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 0a 20 20 5e  other NULLs..  ^
acd0: 41 73 20 77 69 74 68 20 50 52 49 4d 41 52 59 20  As with PRIMARY 
ace0: 4b 45 59 73 2c 20 61 20 55 4e 49 51 55 45 20 5b  KEYs, a UNIQUE [
acf0: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
ad00: 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20 63 6f  ] clause must co
ad10: 6e 74 61 69 6e 0a 20 20 6f 6e 6c 79 20 63 6f 6c  ntain.  only col
ad20: 75 6d 6e 20 6e 61 6d 65 73 20 26 6d 64 61 73 68  umn names &mdash
ad30: 3b 20 74 68 65 20 75 73 65 20 6f 66 20 0a 20 20  ; the use of .  
ad40: 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
ad50: 6e 20 5b 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d  n [indexed-colum
ad60: 6e 5d 20 6f 66 20 61 20 55 4e 49 51 55 45 20 5b  n] of a UNIQUE [
ad70: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
ad80: 5d 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  ].  is not suppo
ad90: 72 74 65 64 2e 0a 20 20 0a 0a 3c 70 3e 5e 49 6e  rted..  ..<p>^In
ada0: 20 6d 6f 73 74 20 63 61 73 65 73 2c 20 55 4e 49   most cases, UNI
adb0: 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20  QUE and PRIMARY 
adc0: 4b 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74  KEY.  constraint
add0: 73 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65  s are implemente
ade0: 64 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 20  d by creating a 
adf0: 75 6e 69 71 75 65 20 69 6e 64 65 78 20 69 6e 20  unique index in 
ae00: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
ae10: 28 54 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20  (The exceptions 
ae20: 61 72 65 20 5b 49 4e 54 45 47 45 52 20 50 52 49  are [INTEGER PRI
ae30: 4d 41 52 59 20 4b 45 59 5d 20 61 6e 64 20 50 52  MARY KEY] and PR
ae40: 49 4d 41 52 59 20 4b 45 59 73 20 6f 6e 20 0a 20  IMARY KEYs on . 
ae50: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
ae60: 20 74 61 62 6c 65 73 2e 29 0a 20 20 48 65 6e 63   tables.).  Henc
ae70: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e, the following
ae80: 20 73 63 68 65 6d 61 73 20 61 72 65 20 6c 6f 67   schemas are log
ae90: 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e  ically equivalen
aea0: 74 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69  t:..  <ol>.  <li
aeb0: 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45  ><p>CREATE TABLE
aec0: 20 74 31 28 61 2c 20 62 20 55 4e 49 51 55 45 29   t1(a, b UNIQUE)
aed0: 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54  ;.  <li><p>CREAT
aee0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20  E TABLE t1(a, b 
aef0: 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20  PRIMARY KEY);.  
af00: 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41  <li><p>CREATE TA
af10: 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 3c 62 72  BLE t1(a, b);<br
af20: 3e 0a 20 20 20 20 20 20 20 20 20 43 52 45 41 54  >.         CREAT
af30: 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74  E UNIQUE INDEX t
af40: 31 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 3c  1b ON t1(b);.  <
af50: 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /ol>..<tcl>hd_fr
af60: 61 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d  agment {ckconst}
af70: 20 7b 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20   {CHECK} {CHECK 
af80: 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45  constraint} {CHE
af90: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c  CK constraints}<
afa0: 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e  /tcl>.<p>^(A <b>
afb0: 43 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72  CHECK</b> constr
afc0: 61 69 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61  aint may be atta
afd0: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
afe0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20   definition or. 
aff0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20   specified as a 
b000: 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  table constraint
b010: 2e 20 49 6e 20 70 72 61 63 74 69 63 65 20 69 74  . In practice it
b020: 20 6d 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72   makes no differ
b030: 65 6e 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20  ence.)^ ^(Each. 
b040: 20 74 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20   time a new row 
b050: 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
b060: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e   the table or an
b070: 20 65 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73   existing row is
b080: 20 75 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20   updated,.  the 
b090: 65 78 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63  expression assoc
b0a0: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
b0b0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
b0c0: 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e   is evaluated an
b0d0: 64 0a 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55  d.  cast to a NU
b0e0: 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74  MERIC value in t
b0f0: 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61  he same way as a
b100: 20 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f   [CAST expressio
b110: 6e 5d 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65  n]. If the .  re
b120: 73 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e  sult is zero (in
b130: 74 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72  teger value 0 or
b140: 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29   real value 0.0)
b150: 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  , then a constra
b160: 69 6e 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20  int.  violation 
b170: 68 61 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20  has occurred.)^ 
b180: 5e 49 66 20 74 68 65 20 43 48 45 43 4b 20 65 78  ^If the CHECK ex
b190: 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
b1a0: 65 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20  es to NULL, or. 
b1b0: 20 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a   any other non-z
b1c0: 65 72 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73  ero value, it is
b1d0: 20 6e 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e   not a constrain
b1e0: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e  t violation..  ^
b1f0: 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  The expression o
b200: 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  f a CHECK constr
b210: 61 69 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  aint may not con
b220: 74 61 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e  tain a subquery.
b230: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
b240: 6e 74 20 7b 6e 6f 74 6e 75 6c 6c 63 6f 6e 73 74  nt {notnullconst
b250: 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 7d 20 7b 4e 4f  } {NOT NULL} {NO
b260: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
b270: 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c  t}</tcl>.<p>^A <
b280: 62 3e 4e 4f 54 20 4e 55 4c 4c 3c 2f 62 3e 20 63  b>NOT NULL</b> c
b290: 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 6f 6e  onstraint may on
b2a0: 6c 79 20 62 65 20 61 74 74 61 63 68 65 64 20 74  ly be attached t
b2b0: 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  o a column defin
b2c0: 69 74 69 6f 6e 2c 0a 20 20 6e 6f 74 20 73 70 65  ition,.  not spe
b2d0: 63 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c  cified as a tabl
b2e0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 20 4e  e constraint.  N
b2f0: 6f 74 20 73 75 72 70 72 69 73 69 6e 67 6c 79 2c  ot surprisingly,
b300: 20 5e 28 61 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20   ^(a NOT NULL.  
b310: 63 6f 6e 73 74 72 61 69 6e 74 20 64 69 63 74 61  constraint dicta
b320: 74 65 73 20 74 68 61 74 20 74 68 65 20 61 73 73  tes that the ass
b330: 6f 63 69 61 74 65 64 20 63 6f 6c 75 6d 6e 20 6d  ociated column m
b340: 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ay not contain a
b350: 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 0a 20 20 41   NULL value..  A
b360: 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 65 74  ttempting to set
b370: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
b380: 65 20 74 6f 20 4e 55 4c 4c 20 77 68 65 6e 20 69  e to NULL when i
b390: 6e 73 65 72 74 69 6e 67 20 61 20 6e 65 77 20 72  nserting a new r
b3a0: 6f 77 20 6f 72 0a 20 20 75 70 64 61 74 69 6e 67  ow or.  updating
b3b0: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6f 6e 65   an existing one
b3c0: 20 63 61 75 73 65 73 20 61 20 63 6f 6e 73 74 72   causes a constr
b3d0: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 29  aint violation.)
b3e0: 5e 0a 0a 3c 70 3e 45 78 61 63 74 6c 79 20 68 6f  ^..<p>Exactly ho
b3f0: 77 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  w a constraint v
b400: 69 6f 6c 61 74 69 6f 6e 20 69 73 20 64 65 61 6c  iolation is deal
b410: 74 20 77 69 74 68 20 69 73 20 64 65 74 65 72 6d  t with is determ
b420: 69 6e 65 64 20 62 79 20 74 68 65 0a 20 20 5b 63  ined by the.  [c
b430: 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7c 63  onflict clause|c
b440: 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
b450: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
b460: 67 6f 72 69 74 68 6d 5d 2e 20 45 61 63 68 20 0a  gorithm]. Each .
b470: 20 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55    PRIMARY KEY, U
b480: 4e 49 51 55 45 2c 20 4e 4f 54 20 4e 55 4c 4c 20  NIQUE, NOT NULL 
b490: 61 6e 64 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  and CHECK constr
b4a0: 61 69 6e 74 20 68 61 73 20 61 20 64 65 66 61 75  aint has a defau
b4b0: 6c 74 20 63 6f 6e 66 6c 69 63 74 0a 20 20 72 65  lt conflict.  re
b4c0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
b4d0: 68 6d 2e 20 5e 50 52 49 4d 41 52 59 20 4b 45 59  hm. ^PRIMARY KEY
b4e0: 2c 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  , UNIQUE and NOT
b4f0: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
b500: 73 20 6d 61 79 20 62 65 0a 20 20 65 78 70 6c 69  s may be.  expli
b510: 63 69 74 6c 79 20 61 73 73 69 67 6e 65 64 20 61  citly assigned a
b520: 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
b530: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
b540: 6f 72 69 74 68 6d 20 62 79 20 69 6e 63 6c 75 64  orithm by includ
b550: 69 6e 67 0a 20 20 61 20 5b 63 6f 6e 66 6c 69 63  ing.  a [conflic
b560: 74 2d 63 6c 61 75 73 65 5d 20 69 6e 20 74 68 65  t-clause] in the
b570: 69 72 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20  ir definitions. 
b580: 5e 4f 72 2c 20 69 66 20 61 20 63 6f 6e 73 74 72  ^Or, if a constr
b590: 61 69 6e 74 20 64 65 66 69 6e 69 74 69 6f 6e 0a  aint definition.
b5a0: 20 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75    does not inclu
b5b0: 64 65 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63  de a [conflict-c
b5c0: 6c 61 75 73 65 5d 20 6f 72 20 69 74 20 69 73 20  lause] or it is 
b5d0: 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
b5e0: 6e 74 2c 20 74 68 65 20 64 65 66 61 75 6c 74 0a  nt, the default.
b5f0: 20 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c    conflict resol
b600: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
b610: 69 73 20 41 42 4f 52 54 2e 20 5e 44 69 66 66 65  is ABORT. ^Diffe
b620: 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  rent constraints
b630: 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20 73 61   within the.  sa
b640: 6d 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76  me table may hav
b650: 65 20 64 69 66 66 65 72 65 6e 74 20 64 65 66 61  e different defa
b660: 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
b670: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
b680: 6d 73 2e 20 53 65 65 0a 20 20 74 68 65 20 73 65  ms. See.  the se
b690: 63 74 69 6f 6e 20 74 69 74 6c 65 64 20 5b 4f 4e  ction titled [ON
b6a0: 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61   CONFLICT] for a
b6b0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
b6c0: 61 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ation...<tcl>hd_
b6d0: 66 72 61 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b  fragment rowid {
b6e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
b6f0: 4b 45 59 7d 20 52 4f 57 49 44 20 72 6f 77 69 64  KEY} ROWID rowid
b700: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44  </tcl>.<h3>ROWID
b710: 73 20 61 6e 64 20 74 68 65 20 49 4e 54 45 47 45  s and the INTEGE
b720: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68  R PRIMARY KEY</h
b730: 33 3e 0a 0a 3c 70 3e 5e 45 78 63 65 70 74 20 66  3>..<p>^Except f
b740: 6f 72 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49  or [WITHOUT ROWI
b750: 44 5d 20 74 61 62 6c 65 73 2c 20 61 6c 6c 20 72  D] tables, all r
b760: 6f 77 73 20 77 69 74 68 69 6e 20 53 51 4c 69 74  ows within SQLit
b770: 65 20 74 61 62 6c 65 73 0a 68 61 76 65 20 61 20  e tables.have a 
b780: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
b790: 74 65 67 65 72 20 6b 65 79 20 74 68 61 74 20 75  teger key that u
b7a0: 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69  niquely identifi
b7b0: 65 73 20 74 68 65 20 72 6f 77 20 77 69 74 68 69  es the row withi
b7c0: 6e 20 69 74 73 20 74 61 62 6c 65 2e 0a 54 68 69  n its table..Thi
b7d0: 73 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 75  s integer is usu
b7e0: 61 6c 6c 79 0a 63 61 6c 6c 65 64 20 74 68 65 20  ally.called the 
b7f0: 22 72 6f 77 69 64 22 2e 20 5e 54 68 65 20 72 6f  "rowid". ^The ro
b800: 77 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62 65  wid value can be
b810: 20 61 63 63 65 73 73 65 64 20 75 73 69 6e 67 20   accessed using 
b820: 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  one of the speci
b830: 61 6c 0a 63 61 73 65 2d 69 6e 64 65 70 65 6e 64  al.case-independ
b840: 65 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77 69 64  ent names "rowid
b850: 22 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f 72  ", "oid", or "_r
b860: 6f 77 69 64 5f 22 20 69 6e 20 70 6c 61 63 65 20  owid_" in place 
b870: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
b880: 2e 0a 5e 49 66 20 61 20 74 61 62 6c 65 20 63 6f  ..^If a table co
b890: 6e 74 61 69 6e 73 20 61 20 75 73 65 72 20 64 65  ntains a user de
b8a0: 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  fined column nam
b8b0: 65 64 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64  ed "rowid", "oid
b8c0: 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 2c 0a  " or "_rowid_",.
b8d0: 74 68 65 6e 20 74 68 61 74 20 6e 61 6d 65 20 61  then that name a
b8e0: 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 68 65  lways refers the
b8f0: 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c   explicitly decl
b900: 61 72 65 64 20 63 6f 6c 75 6d 6e 20 61 6e 64 20  ared column and 
b910: 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 0a 74  cannot be used.t
b920: 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20 69  o retrieve the i
b930: 6e 74 65 67 65 72 20 72 6f 77 69 64 20 76 61 6c  nteger rowid val
b940: 75 65 2e 0a 0a 3c 70 3e 54 68 65 20 72 6f 77 69  ue...<p>The rowi
b950: 64 20 28 61 6e 64 20 22 6f 69 64 22 20 61 6e 64  d (and "oid" and
b960: 20 22 5f 72 6f 77 69 64 5f 22 29 20 69 73 20 6f   "_rowid_") is o
b970: 6d 69 74 74 65 64 20 69 6e 20 5b 57 49 54 48 4f  mitted in [WITHO
b980: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
b990: 2e 0a 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  ..WITHOUT ROWID 
b9a0: 74 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  tables are only 
b9b0: 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 53 51 4c  available in SQL
b9c0: 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 38  ite [version 3.8
b9d0: 2e 32 5d 20 61 6e 64 20 6c 61 74 65 72 2e 0a 41  .2] and later..A
b9e0: 20 74 61 62 6c 65 20 74 68 61 74 20 6c 61 63 6b   table that lack
b9f0: 73 20 74 68 65 20 57 49 54 48 4f 55 54 20 52 4f  s the WITHOUT RO
ba00: 57 49 44 20 63 6c 61 75 73 65 20 69 73 20 63 61  WID clause is ca
ba10: 6c 6c 65 64 20 61 20 22 72 6f 77 69 64 20 74 61  lled a "rowid ta
ba20: 62 6c 65 22 2e 0a 0a 3c 70 3e 54 68 65 20 64 61  ble"...<p>The da
ba30: 74 61 20 66 6f 72 20 72 6f 77 69 64 20 74 61 62  ta for rowid tab
ba40: 6c 65 73 20 69 73 20 73 74 6f 72 65 64 20 61 73  les is stored as
ba50: 20 61 20 42 2d 54 72 65 65 20 73 74 72 75 63 74   a B-Tree struct
ba60: 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 6f  ure containing.o
ba70: 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
ba80: 68 20 74 61 62 6c 65 20 72 6f 77 2c 20 75 73 69  h table row, usi
ba90: 6e 67 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c  ng the rowid val
baa0: 75 65 20 61 73 20 74 68 65 20 6b 65 79 2e 20 54  ue as the key. T
bab0: 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 0a 72  his means that.r
bac0: 65 74 72 69 65 76 69 6e 67 20 6f 72 20 73 6f 72  etrieving or sor
bad0: 74 69 6e 67 20 72 65 63 6f 72 64 73 20 62 79 20  ting records by 
bae0: 72 6f 77 69 64 20 69 73 20 66 61 73 74 2e 20 53  rowid is fast. S
baf0: 65 61 72 63 68 69 6e 67 20 66 6f 72 20 61 20 72  earching for a r
bb00: 65 63 6f 72 64 20 77 69 74 68 20 61 0a 73 70 65  ecord with a.spe
bb10: 63 69 66 69 63 20 72 6f 77 69 64 2c 20 6f 72 20  cific rowid, or 
bb20: 66 6f 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20  for all records 
bb30: 77 69 74 68 20 72 6f 77 69 64 73 20 77 69 74 68  with rowids with
bb40: 69 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 72  in a specified r
bb50: 61 6e 67 65 20 69 73 0a 61 72 6f 75 6e 64 20 74  ange is.around t
bb60: 77 69 63 65 20 61 73 20 66 61 73 74 20 61 73 20  wice as fast as 
bb70: 61 20 73 69 6d 69 6c 61 72 20 73 65 61 72 63 68  a similar search
bb80: 20 6d 61 64 65 20 62 79 20 73 70 65 63 69 66 79   made by specify
bb90: 69 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 50 52  ing any other PR
bba0: 49 4d 41 52 59 0a 4b 45 59 20 6f 72 20 69 6e 64  IMARY.KEY or ind
bbb0: 65 78 65 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e  exed value...<p>
bbc0: 20 5e 57 69 74 68 20 6f 6e 65 20 65 78 63 65 70   ^With one excep
bbd0: 74 69 6f 6e 20 6e 6f 74 65 64 20 62 65 6c 6f 77  tion noted below
bbe0: 2c 20 69 66 20 61 20 72 6f 77 69 64 20 74 61 62  , if a rowid tab
bbf0: 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
bc00: 20 6b 65 79 20 74 68 61 74 20 63 6f 6e 73 69 73   key that consis
bc10: 74 73 0a 6f 66 20 61 20 73 69 6e 67 6c 65 20 63  ts.of a single c
bc20: 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20 64 65  olumn and the de
bc30: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
bc40: 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49  hat column is "I
bc50: 4e 54 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d  NTEGER" in any m
bc60: 69 78 74 75 72 65 20 6f 66 0a 75 70 70 65 72 20  ixture of.upper 
bc70: 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 2c 20  and lower case, 
bc80: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
bc90: 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
bca0: 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20   for the rowid. 
bcb0: 53 75 63 68 20 61 0a 63 6f 6c 75 6d 6e 20 69 73  Such a.column is
bcc0: 20 75 73 75 61 6c 6c 79 20 72 65 66 65 72 72 65   usually referre
bcd0: 64 20 74 6f 20 61 73 20 61 6e 20 22 69 6e 74 65  d to as an "inte
bce0: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 22  ger primary key"
bcf0: 2e 20 41 20 50 52 49 4d 41 52 59 20 4b 45 59 20  . A PRIMARY KEY 
bd00: 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f  column.only beco
bd10: 6d 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70  mes an integer p
bd20: 72 69 6d 61 72 79 20 6b 65 79 20 69 66 20 74 68  rimary key if th
bd30: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
bd40: 6e 61 6d 65 20 69 73 20 65 78 61 63 74 6c 79 0a  name is exactly.
bd50: 22 49 4e 54 45 47 45 52 22 2e 20 20 5e 4f 74 68  "INTEGER".  ^Oth
bd60: 65 72 20 69 6e 74 65 67 65 72 20 74 79 70 65 20  er integer type 
bd70: 6e 61 6d 65 73 20 6c 69 6b 65 20 22 49 4e 54 22  names like "INT"
bd80: 20 6f 72 20 22 42 49 47 49 4e 54 22 20 6f 72 20   or "BIGINT" or 
bd90: 22 53 48 4f 52 54 20 49 4e 54 45 47 45 52 22 0a  "SHORT INTEGER".
bda0: 6f 72 20 22 55 4e 53 49 47 4e 45 44 20 49 4e 54  or "UNSIGNED INT
bdb0: 45 47 45 52 22 20 63 61 75 73 65 73 20 74 68 65  EGER" causes the
bdc0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
bdd0: 75 6d 6e 20 74 6f 20 62 65 68 61 76 65 20 61 73  umn to behave as
bde0: 20 61 6e 20 6f 72 64 69 6e 61 72 79 0a 74 61 62   an ordinary.tab
bdf0: 6c 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69  le column with i
be00: 6e 74 65 67 65 72 20 5b 61 66 66 69 6e 69 74 79  nteger [affinity
be10: 5d 20 61 6e 64 20 61 20 75 6e 69 71 75 65 20 69  ] and a unique i
be20: 6e 64 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20  ndex, not as an 
be30: 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f  alias for.the ro
be40: 77 69 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 65 78  wid...<p> The ex
be50: 63 65 70 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65  ception mentione
be60: 64 20 61 62 6f 76 65 20 69 73 20 74 68 61 74 20  d above is that 
be70: 5e 69 66 20 74 68 65 20 64 65 63 6c 61 72 61 74  ^if the declarat
be80: 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ion of a column 
be90: 77 69 74 68 0a 64 65 63 6c 61 72 65 64 20 74 79  with.declared ty
bea0: 70 65 20 22 49 4e 54 45 47 45 52 22 20 69 6e 63  pe "INTEGER" inc
beb0: 6c 75 64 65 73 20 61 6e 20 22 50 52 49 4d 41 52  ludes an "PRIMAR
bec0: 59 20 4b 45 59 20 44 45 53 43 22 20 63 6c 61 75  Y KEY DESC" clau
bed0: 73 65 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a  se, it does not.
bee0: 62 65 63 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20  become an alias 
bef0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 6e  for the rowid an
bf00: 64 20 69 73 20 6e 6f 74 20 63 6c 61 73 73 69 66  d is not classif
bf10: 69 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ied as an intege
bf20: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 54  r primary key..T
bf30: 68 69 73 20 71 75 69 72 6b 20 69 73 20 6e 6f 74  his quirk is not
bf40: 20 62 79 20 64 65 73 69 67 6e 2e 20 49 74 20 69   by design. It i
bf50: 73 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69  s due to a bug i
bf60: 6e 20 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73  n early versions
bf70: 20 6f 66 20 53 51 4c 69 74 65 2e 0a 42 75 74 20   of SQLite..But 
bf80: 66 69 78 69 6e 67 20 74 68 65 20 62 75 67 20 63  fixing the bug c
bf90: 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 20 62  ould result in b
bfa0: 61 63 6b 77 61 72 64 73 20 69 6e 63 6f 6d 70 61  ackwards incompa
bfb0: 74 69 62 69 6c 69 74 69 65 73 2e 0a 48 65 6e 63  tibilities..Henc
bfc0: 65 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  e, the original 
bfd0: 62 65 68 61 76 69 6f 72 20 68 61 73 20 62 65 65  behavior has bee
bfe0: 6e 20 72 65 74 61 69 6e 65 64 20 28 61 6e 64 20  n retained (and 
bff0: 64 6f 63 75 6d 65 6e 74 65 64 29 20 62 65 63 61  documented) beca
c000: 75 73 65 20 6f 64 64 0a 62 65 68 61 76 69 6f 72  use odd.behavior
c010: 20 69 6e 20 61 20 63 6f 72 6e 65 72 20 63 61 73   in a corner cas
c020: 65 20 69 73 20 66 61 72 20 62 65 74 74 65 72 20  e is far better 
c030: 74 68 61 6e 20 61 20 63 6f 6d 70 61 74 69 62 69  than a compatibi
c040: 6c 69 74 79 20 62 72 65 61 6b 2e 20 20 54 68 69  lity break.  Thi
c050: 73 20 6d 65 61 6e 73 0a 74 68 61 74 20 5e 28 74  s means.that ^(t
c060: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
c070: 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61 72 61  ee table declara
c080: 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73 65 20  tions all cause 
c090: 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22 20 74  the column "x" t
c0a0: 6f 20 62 65 20 61 6e 0a 61 6c 69 61 73 20 66 6f  o be an.alias fo
c0b0: 72 20 74 68 65 20 72 6f 77 69 64 20 28 61 6e 20  r the rowid (an 
c0c0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
c0d0: 6b 65 79 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  key):..<ul>.<li>
c0e0: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
c0f0: 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49   t(x INTEGER PRI
c100: 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20 79 2c  MARY KEY ASC, y,
c110: 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74   z);</tt>.<li><t
c120: 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  t>CREATE TABLE t
c130: 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a  (x INTEGER, y, z
c140: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20  , PRIMARY KEY(x 
c150: 41 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e  ASC));</tt>.<li>
c160: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
c170: 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c   t(x INTEGER, y,
c180: 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   z, PRIMARY KEY(
c190: 78 20 44 45 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c  x DESC));</tt>.<
c1a0: 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 42 75 74 20 5e  /ul>)^..<p>But ^
c1b0: 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64  (the following d
c1c0: 65 63 6c 61 72 61 74 69 6f 6e 20 64 6f 65 73 20  eclaration does 
c1d0: 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 22 78  not result in "x
c1e0: 22 20 62 65 69 6e 67 20 61 6e 20 61 6c 69 61 73  " being an alias
c1f0: 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64 3a 0a   for.the rowid:.
c200: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  <ul>.<li><tt>CRE
c210: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
c220: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c230: 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f  Y DESC, y, z);</
c240: 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  tt>.</ul>)^..<p>
c250: 5e 52 6f 77 69 64 20 76 61 6c 75 65 73 20 6d 61  ^Rowid values ma
c260: 79 20 62 65 20 6d 6f 64 69 66 69 65 64 20 75 73  y be modified us
c270: 69 6e 67 20 61 6e 20 55 50 44 41 54 45 20 73 74  ing an UPDATE st
c280: 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 73  atement in the s
c290: 61 6d 65 0a 77 61 79 20 61 73 20 61 6e 79 20 6f  ame.way as any o
c2a0: 74 68 65 72 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  ther column valu
c2b0: 65 20 63 61 6e 2c 20 65 69 74 68 65 72 20 75 73  e can, either us
c2c0: 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 62  ing one of the b
c2d0: 75 69 6c 74 2d 69 6e 20 61 6c 69 61 73 65 73 0a  uilt-in aliases.
c2e0: 28 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20  ("rowid", "oid" 
c2f0: 6f 72 20 22 5f 72 6f 77 69 64 5f 22 29 20 6f 72  or "_rowid_") or
c300: 20 62 79 20 75 73 69 6e 67 20 61 6e 20 61 6c 69   by using an ali
c310: 61 73 20 63 72 65 61 74 65 64 20 62 79 20 61 6e  as created by an
c320: 20 69 6e 74 65 67 65 72 0a 70 72 69 6d 61 72 79   integer.primary
c330: 20 6b 65 79 2e 20 5e 53 69 6d 69 6c 61 72 6c 79   key. ^Similarly
c340: 2c 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  , an INSERT stat
c350: 65 6d 65 6e 74 20 6d 61 79 20 70 72 6f 76 69 64  ement may provid
c360: 65 20 61 20 76 61 6c 75 65 20 74 6f 20 75 73 65  e a value to use
c370: 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20 66 6f   as the.rowid fo
c380: 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73 65 72  r each row inser
c390: 74 65 64 2e 20 5e 28 55 6e 6c 69 6b 65 20 6e 6f  ted. ^(Unlike no
c3a0: 72 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75  rmal SQLite colu
c3b0: 6d 6e 73 2c 20 61 6e 20 69 6e 74 65 67 65 72 20  mns, an integer 
c3c0: 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 72 20 72  primary.key or r
c3d0: 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74  owid column must
c3e0: 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67 65 72   contain integer
c3f0: 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67 65 72   values. Integer
c400: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20   primary key or 
c410: 72 6f 77 69 64 0a 63 6f 6c 75 6d 6e 73 20 61 72  rowid.columns ar
c420: 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f  e not able to ho
c430: 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ld floating poin
c440: 74 20 76 61 6c 75 65 73 2c 20 73 74 72 69 6e 67  t values, string
c450: 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c  s, BLOBs, or NUL
c460: 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  Ls.)^..<p>^If an
c470: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
c480: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 73 65  t attempts to se
c490: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  t an integer pri
c4a0: 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69  mary key or rowi
c4b0: 64 20 63 6f 6c 75 6d 6e 0a 74 6f 20 61 20 4e 55  d column.to a NU
c4c0: 4c 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65  LL or blob value
c4d0: 2c 20 6f 72 20 74 6f 20 61 20 73 74 72 69 6e 67  , or to a string
c4e0: 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74   or real value t
c4f0: 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f  hat cannot be lo
c500: 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74  sslessly.convert
c510: 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
c520: 2c 20 61 20 22 64 61 74 61 74 79 70 65 20 6d 69  , a "datatype mi
c530: 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20 6f 63  smatch" error oc
c540: 63 75 72 73 20 61 6e 64 20 74 68 65 20 73 74 61  curs and the sta
c550: 74 65 6d 65 6e 74 0a 69 73 20 61 62 6f 72 74 65  tement.is aborte
c560: 64 2e 20 5e 49 66 20 61 6e 20 49 4e 53 45 52 54  d. ^If an INSERT
c570: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
c580: 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20  pts to insert a 
c590: 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20 61  blob value, or a
c5a0: 20 73 74 72 69 6e 67 0a 6f 72 20 72 65 61 6c 20   string.or real 
c5b0: 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
c5c0: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
c5d0: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
c5e0: 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61 6e 0a  integer into an.
c5f0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
c600: 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c  key or rowid col
c610: 75 6d 6e 2c 20 61 20 22 64 61 74 61 74 79 70 65  umn, a "datatype
c620: 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72   mismatch" error
c630: 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 0a   occurs and the.
c640: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 62 6f  statement is abo
c650: 72 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  rted...<p>^If an
c660: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
c670: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  t attempts to in
c680: 73 65 72 74 20 61 20 4e 55 4c 4c 20 76 61 6c 75  sert a NULL valu
c690: 65 20 69 6e 74 6f 20 61 20 72 6f 77 69 64 20 6f  e into a rowid o
c6a0: 72 0a 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  r.integer primar
c6b0: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 2c 20 74 68  y key column, th
c6c0: 65 20 73 79 73 74 65 6d 20 63 68 6f 6f 73 65 73  e system chooses
c6d0: 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
c6e0: 65 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a  e to use as the.
c6f0: 72 6f 77 69 64 20 61 75 74 6f 6d 61 74 69 63 61  rowid automatica
c700: 6c 6c 79 2e 20 41 20 64 65 74 61 69 6c 65 64 20  lly. A detailed 
c710: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 68  description of h
c720: 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20  ow this is done 
c730: 69 73 20 70 72 6f 76 69 64 65 64 0a 3c 61 20 68  is provided.<a h
c740: 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d  ref="autoinc.htm
c750: 6c 22 3e 73 65 70 61 72 61 74 65 6c 79 3c 2f 61  l">separately</a
c760: 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  >.</p>..<p>^(The
c770: 20 5b 70 61 72 65 6e 74 20 6b 65 79 5d 20 6f 66   [parent key] of
c780: 20 61 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20   a [foreign key 
c790: 63 6f 6e 73 74 72 61 69 6e 74 5d 20 69 73 20 6e  constraint] is n
c7a0: 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 75 73  ot allowed to.us
c7b0: 65 20 74 68 65 20 72 6f 77 69 64 2e 20 20 54 68  e the rowid.  Th
c7c0: 65 20 70 61 72 65 6e 74 20 6b 65 79 20 6d 75 73  e parent key mus
c7d0: 74 20 75 73 65 64 20 6e 61 6d 65 64 20 63 6f 6c  t used named col
c7e0: 75 6d 6e 73 20 6f 6e 6c 79 2e 29 5e 3c 2f 70 3e  umns only.)^</p>
c7f0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
c800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c840: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
c850: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 7d 20  CREATE TRIGGER} 
c860: 63 72 65 61 74 65 74 72 69 67 67 65 72 20 7b 7b  createtrigger {{
c870: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 7d 7d  CREATE TRIGGER}}
c880: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
c890: 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d  eDiagram create-
c8a0: 74 72 69 67 67 65 72 2d 73 74 6d 74 0a 3c 2f 74  trigger-stmt.</t
c8b0: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
c8c0: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
c8d0: 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
c8e0: 20 61 64 64 20 74 72 69 67 67 65 72 73 20 74 6f   add triggers to
c8f0: 20 74 68 65 20 0a 64 61 74 61 62 61 73 65 20 73   the .database s
c900: 63 68 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73  chema. ^Triggers
c910: 20 61 72 65 20 64 61 74 61 62 61 73 65 20 6f 70   are database op
c920: 65 72 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61  erations .that a
c930: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
c940: 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20   performed when 
c950: 61 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  a specified data
c960: 62 61 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72  base event.occur
c970: 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  s.  </p>..<p>^A 
c980: 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73  trigger may be s
c990: 70 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65  pecified to fire
c9a0: 20 77 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c   whenever a [DEL
c9b0: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a  ETE], [INSERT],.
c9c0: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61  or [UPDATE] of a
c9d0: 0a 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61  .particular data
c9e0: 62 61 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72  base table occur
c9f0: 73 2c 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61  s, or whenever a
ca00: 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72  n [UPDATE] occur
ca10: 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d  s on.on one or m
ca20: 6f 72 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  ore specified co
ca30: 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65  lumns of a table
ca40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68  .</p>..<p>^At th
ca50: 69 73 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73  is time SQLite s
ca60: 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52  upports only FOR
ca70: 20 45 41 43 48 20 52 4f 57 20 74 72 69 67 67 65   EACH ROW trigge
ca80: 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48  rs, not FOR EACH
ca90: 0a 53 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67  .STATEMENT trigg
caa0: 65 72 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c  ers. ^Hence expl
cab0: 69 63 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e  icitly specifyin
cac0: 67 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69  g FOR EACH ROW i
cad0: 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52  s optional..^FOR
cae0: 20 45 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65   EACH ROW implie
caf0: 73 20 74 68 61 74 20 74 68 65 20 53 51 4c 20 73  s that the SQL s
cb00: 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
cb10: 69 65 64 20 69 6e 20 74 68 65 20 74 72 69 67 67  ied in the trigg
cb20: 65 72 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74  er.may be execut
cb30: 65 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ed (depending on
cb40: 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
cb50: 29 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  ) for each datab
cb60: 61 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e  ase row being.in
cb70: 73 65 72 74 65 64 2c 20 75 70 64 61 74 65 64 20  serted, updated 
cb80: 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  or deleted by th
cb90: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
cba0: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
cbb0: 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70  to fire.</p>..<p
cbc0: 3e 5e 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e  >^(Both the WHEN
cbd0: 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20   clause and the 
cbe0: 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20  trigger actions 
cbf0: 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65  may access eleme
cc00: 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20  nts of .the row 
cc10: 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20  being inserted, 
cc20: 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74  deleted or updat
cc30: 65 64 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e  ed using referen
cc40: 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ces of the form 
cc50: 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d  ."NEW.<i>column-
cc60: 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f  name</i>" and "O
cc70: 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  LD.<i>column-nam
cc80: 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69  e</i>", where.<i
cc90: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e  >column-name</i>
cca0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
ccb0: 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68  a column from th
ccc0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
ccd0: 20 74 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f   trigger.is asso
cce0: 63 69 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e  ciated with.)^ ^
ccf0: 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66  (OLD and NEW ref
cd00: 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79  erences may only
cd10: 20 62 65 20 75 73 65 64 20 69 6e 20 74 72 69 67   be used in trig
cd20: 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66  gers on.events f
cd30: 6f 72 20 77 68 69 63 68 20 74 68 65 79 20 61 72  or which they ar
cd40: 65 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66  e relevant, as f
cd50: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61  ollows:</p>..<ta
cd60: 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
cd70: 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72  lpadding=10>.<tr
cd80: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
cd90: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
cda0: 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e   width=120><i>IN
cdb0: 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74  SERT</i></td>.<t
cdc0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e  d valign="top">N
cdd0: 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  EW references ar
cde0: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
cdf0: 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  r>.<tr>.<td vali
ce00: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
ce10: 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30  right" width=120
ce20: 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f  ><i>UPDATE</i></
ce30: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
ce40: 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44  top">NEW and OLD
ce50: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20   references are 
ce60: 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  valid</td>.</tr>
ce70: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
ce80: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
ce90: 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c  ght" width=120><
cea0: 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64  i>DELETE</i></td
ceb0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
cec0: 70 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65  p">OLD reference
ced0: 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e  s are valid</td>
cee0: 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
cef0: 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61  </p>)^..<p>^If a
cf00: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
cf10: 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51  supplied, the SQ
cf20: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
cf30: 63 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20  cified.are only 
cf40: 65 78 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77  executed for row
cf50: 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
cf60: 57 48 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74  WHEN.clause is t
cf70: 72 75 65 2e 20 5e 49 66 20 6e 6f 20 57 48 45 4e  rue. ^If no WHEN
cf80: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
cf90: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
cfa0: 74 65 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63  tements.are exec
cfb0: 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77  uted for all row
cfc0: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s.</p>..<p>^The 
cfd0: 42 45 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20  BEFORE or AFTER 
cfe0: 6b 65 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e  keyword determin
cff0: 65 73 20 77 68 65 6e 20 74 68 65 20 74 72 69 67  es when the trig
d000: 67 65 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c  ger actions.will
d010: 20 62 65 20 65 78 65 63 75 74 65 64 20 72 65 6c   be executed rel
d020: 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73  ative to the ins
d030: 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61  ertion, modifica
d040: 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20  tion or removal 
d050: 6f 66 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65  of the.associate
d060: 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  d row.</p>..<p>^
d070: 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  An [ON CONFLICT]
d080: 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20 73   clause may be s
d090: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
d0a0: 20 6f 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20   of an [UPDATE] 
d0b0: 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69  or [INSERT].acti
d0c0: 6f 6e 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  on within the bo
d0d0: 64 79 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  dy of the trigge
d0e0: 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61  r..^However if a
d0f0: 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  n [ON CONFLICT] 
d100: 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
d110: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a  ied as part of .
d120: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61  the statement ca
d130: 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  using the trigge
d140: 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20  r to fire, then 
d150: 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e  conflict handlin
d160: 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20  g.policy of the 
d170: 6f 75 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20  outer statement 
d180: 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e  is used instead.
d190: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65  </p>..<p>^Trigge
d1a0: 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  rs are automatic
d1b0: 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47  ally [DROP TRIGG
d1c0: 45 52 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68  ER | dropped].wh
d1d0: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  en the table tha
d1e0: 74 20 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f  t they are .asso
d1f0: 63 69 61 74 65 64 20 77 69 74 68 20 28 74 68 65  ciated with (the
d200: 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
d210: 69 3e 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44  i> table) is .[D
d220: 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70  ROP TABLE | drop
d230: 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20  ped].  ^However 
d240: 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 61  if the trigger a
d250: 63 74 69 6f 6e 73 20 72 65 66 65 72 65 6e 63 65  ctions reference
d260: 0a 6f 74 68 65 72 20 74 61 62 6c 65 73 2c 20 74  .other tables, t
d270: 68 65 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f  he trigger is no
d280: 74 20 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64  t dropped or mod
d290: 69 66 69 65 64 20 69 66 20 74 68 6f 73 65 20 6f  ified if those o
d2a0: 74 68 65 72 0a 74 61 62 6c 65 73 20 61 72 65 20  ther.tables are 
d2b0: 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72  [DROP TABLE | dr
d2c0: 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52  opped] or [ALTER
d2d0: 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65   TABLE | modifie
d2e0: 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69  d].</p>..<p>^Tri
d2f0: 67 67 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65  ggers are remove
d300: 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f  d using the [DRO
d310: 50 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  P TRIGGER] state
d320: 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53  ment.</p>..<h3>S
d330: 79 6e 74 61 78 20 52 65 73 74 72 69 63 74 69 6f  yntax Restrictio
d340: 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c 20 44 45  ns On UPDATE, DE
d350: 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53 45 52 54  LETE, and INSERT
d360: 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
d370: 69 6e 0a 20 20 20 20 54 72 69 67 67 65 72 73 3c  in.    Triggers<
d380: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55  /h3>..<p>^The [U
d390: 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d  PDATE], [DELETE]
d3a0: 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73  , and [INSERT].s
d3b0: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
d3c0: 20 74 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   triggers do not
d3d0: 20 73 75 70 70 6f 72 74 0a 74 68 65 20 66 75 6c   support.the ful
d3e0: 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 5b 55 50  l syntax for [UP
d3f0: 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c  DATE], [DELETE],
d400: 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73 74   and [INSERT] st
d410: 61 74 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 66  atements.  The f
d420: 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69 63  ollowing.restric
d430: 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e  tions apply:</p>
d440: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20  ..<ul>.<li><p>. 
d450: 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74   ^(The name of t
d460: 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d  he table to be m
d470: 6f 64 69 66 69 65 64 20 69 6e 20 61 6e 20 5b 55  odified in an [U
d480: 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d  PDATE], [DELETE]
d490: 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20  , or [INSERT].  
d4a0: 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62  statement must b
d4b0: 65 20 61 6e 20 75 6e 71 75 61 6c 69 66 69 65 64  e an unqualified
d4c0: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e   table name.  In
d4d0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e   other words, on
d4e0: 65 20 6d 75 73 74 0a 20 20 75 73 65 20 6a 75 73  e must.  use jus
d4f0: 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c  t "<i>tablename<
d500: 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74  /i>" not "<i>dat
d510: 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  abase</i><b>.</b
d520: 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69  ><i>tablename</i
d530: 3e 22 0a 20 20 77 68 65 6e 20 73 70 65 63 69 66  >".  when specif
d540: 79 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 29  ying the table.)
d550: 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 74 6f  ^  ^The table to
d560: 20 62 65 20 6d 6f 64 69 66 69 65 64 20 6d 75 73   be modified mus
d570: 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 0a 20  t exist in the. 
d580: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
d590: 73 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  s the table or v
d5a0: 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
d5b0: 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
d5c0: 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  ched..  </p></li
d5d0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
d5e0: 65 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c  e "INSERT INTO <
d5f0: 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41  i>table</i> DEFA
d600: 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d  ULT VALUES" form
d610: 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d   of the [INSERT]
d620: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20   statement.  is 
d630: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20  not supported.. 
d640: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
d650: 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e 44 45 58  <p>.  ^The INDEX
d660: 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
d670: 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
d680: 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  e not supported 
d690: 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 6e 64  for [UPDATE] and
d6a0: 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  .  [DELETE] stat
d6b0: 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f  ements..  </p></
d6c0: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  li>..<li><p>.  ^
d6d0: 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e  (The ORDER BY an
d6e0: 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20  d LIMIT clauses 
d6f0: 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20  on [UPDATE] and 
d700: 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65  [DELETE] stateme
d710: 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20 20 73 75  nts are not.  su
d720: 70 70 6f 72 74 65 64 2e 20 20 4f 52 44 45 52 20  pported.  ORDER 
d730: 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 61 72 65  BY and LIMIT are
d740: 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75   not normally su
d750: 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44  pported for [UPD
d760: 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54  ATE] or.  [DELET
d770: 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78  E] in any contex
d780: 74 20 62 75 74 20 63 61 6e 20 62 65 20 65 6e 61  t but can be ena
d790: 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76  bled for top-lev
d7a0: 65 6c 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20  el statements.  
d7b0: 75 73 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54  using the [SQLIT
d7c0: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
d7d0: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f  DELETE_LIMIT] co
d7e0: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
d7f0: 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a 20 20 74  n.  However,.  t
d800: 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  hat compile-time
d810: 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70   option only app
d820: 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65  lies to top-leve
d830: 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b  l [UPDATE] and [
d840: 44 45 4c 45 54 45 5d 0a 20 20 73 74 61 74 65 6d  DELETE].  statem
d850: 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54  ents, not [UPDAT
d860: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
d870: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
d880: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 0a 20 20  n triggers.)^.  
d890: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
d8a0: 70 3e 0a 20 20 5e 5b 63 6f 6d 6d 6f 6e 2d 74 61  p>.  ^[common-ta
d8b0: 62 6c 65 2d 65 78 70 72 65 73 73 69 6f 6e 7c 43  ble-expression|C
d8c0: 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
d8d0: 65 73 73 69 6f 6e 5d 20 61 72 65 20 6e 6f 74 20  ession] are not 
d8e0: 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 20 20  supported for.  
d8f0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 73 69 64  statements insid
d900: 65 20 6f 66 20 74 72 69 67 67 65 72 73 2e 0a 20  e of triggers.. 
d910: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e   </p></li>.</ul>
d920: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
d930: 6e 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72  nt instead_of_tr
d940: 69 67 67 65 72 20 7b 49 4e 53 54 45 41 44 20 4f  igger {INSTEAD O
d950: 46 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46 20 74  F} {INSTEAD OF t
d960: 72 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  rigger}</tcl>.<h
d970: 33 3e 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  3>INSTEAD OF tri
d980: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ggers</h3>..<p>^
d990: 54 72 69 67 67 65 72 73 20 6d 61 79 20 62 65 20  Triggers may be 
d9a0: 63 72 65 61 74 65 64 20 6f 6e 20 5b 76 69 65 77  created on [view
d9b0: 73 5d 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 6f  s], as well as o
d9c0: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c 20  rdinary tables, 
d9d0: 62 79 0a 73 70 65 63 69 66 79 69 6e 67 20 49 4e  by.specifying IN
d9e0: 53 54 45 41 44 20 4f 46 20 69 6e 20 74 68 65 20  STEAD OF in the 
d9f0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
da00: 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f  tatement. .^If o
da10: 6e 65 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e  ne or more ON IN
da20: 53 45 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a  SERT, ON DELETE.
da30: 6f 72 20 4f 4e 20 55 50 44 41 54 45 20 74 72 69  or ON UPDATE tri
da40: 67 67 65 72 73 20 61 72 65 20 64 65 66 69 6e 65  ggers are define
da50: 64 20 6f 6e 20 61 20 76 69 65 77 2c 20 74 68 65  d on a view, the
da60: 6e 20 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65  n it is not an.e
da70: 72 72 6f 72 20 74 6f 20 65 78 65 63 75 74 65 20  rror to execute 
da80: 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
da90: 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  E or UPDATE stat
daa0: 65 6d 65 6e 74 20 6f 6e 20 74 68 65 20 76 69 65  ement on the vie
dab0: 77 2c 20 0a 72 65 73 70 65 63 74 69 76 65 6c 79  w, .respectively
dac0: 2e 20 20 5e 49 6e 73 74 65 61 64 2c 0a 65 78 65  .  ^Instead,.exe
dad0: 63 75 74 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  cuting an INSERT
dae0: 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  , DELETE or UPDA
daf0: 54 45 20 6f 6e 20 74 68 65 20 76 69 65 77 20 63  TE on the view c
db00: 61 75 73 65 73 20 74 68 65 20 61 73 73 6f 63 69  auses the associ
db10: 61 74 65 64 0a 74 72 69 67 67 65 72 73 20 74 6f  ated.triggers to
db20: 20 66 69 72 65 2e 20 5e 54 68 65 20 72 65 61 6c   fire. ^The real
db30: 20 74 61 62 6c 65 73 20 75 6e 64 65 72 6c 79 69   tables underlyi
db40: 6e 67 20 74 68 65 20 76 69 65 77 20 61 72 65 20  ng the view are 
db50: 6e 6f 74 20 6d 6f 64 69 66 69 65 64 0a 28 65 78  not modified.(ex
db60: 63 65 70 74 20 70 6f 73 73 69 62 6c 79 20 65 78  cept possibly ex
db70: 70 6c 69 63 69 74 6c 79 2c 20 62 79 20 61 20 74  plicitly, by a t
db80: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 29 2e  rigger program).
db90: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  </p>..<p>^Note t
dba0: 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33  hat the [sqlite3
dbb0: 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 20  _changes()] and 
dbc0: 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63  [sqlite3_total_c
dbd0: 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66  hanges()] interf
dbe0: 61 63 65 73 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e  aces.do not coun
dbf0: 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  t INSTEAD OF tri
dc00: 67 67 65 72 20 66 69 72 69 6e 67 73 2c 20 62 75  gger firings, bu
dc10: 74 20 74 68 65 0a 5b 63 6f 75 6e 74 5f 63 68 61  t the.[count_cha
dc20: 6e 67 65 73 20 70 72 61 67 6d 61 5d 20 64 6f 65  nges pragma] doe
dc30: 73 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20  s count INSTEAD 
dc40: 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e  OF trigger firin
dc50: 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 6f 6d 65  g.</p>..<h3>Some
dc60: 20 45 78 61 6d 70 6c 65 20 54 72 69 67 67 65 72   Example Trigger
dc70: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73  s</h3>..<p>^(Ass
dc80: 75 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f  uming that custo
dc90: 6d 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20  mer records are 
dca0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63  stored in the "c
dcb0: 75 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c  ustomers" table,
dcc0: 20 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20   and.that order 
dcd0: 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72  records are stor
dce0: 65 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72  ed in the "order
dcf0: 73 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f  s" table, the fo
dd00: 6c 6c 6f 77 69 6e 67 0a 55 50 44 41 54 45 20 74  llowing.UPDATE t
dd10: 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73 20 74  rigger.ensures t
dd20: 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69 61 74  hat all associat
dd30: 65 64 20 6f 72 64 65 72 73 20 61 72 65 20 72 65  ed orders are re
dd40: 64 69 72 65 63 74 65 64 20 77 68 65 6e 20 61 20  directed when a 
dd50: 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67 65 73  customer changes
dd60: 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64 64 72  .his or her addr
dd70: 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ess:</p>..<tcl>E
dd80: 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45 20  xample {.CREATE 
dd90: 54 52 49 47 47 45 52 20 75 70 64 61 74 65 5f 63  TRIGGER update_c
dda0: 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20  ustomer_address 
ddb0: 55 50 44 41 54 45 20 4f 46 20 61 64 64 72 65 73  UPDATE OF addres
ddc0: 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a  s ON customers .
ddd0: 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50 44 41    BEGIN.    UPDA
dde0: 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64  TE orders SET ad
ddf0: 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64 64 72  dress = new.addr
de00: 65 73 73 20 57 48 45 52 45 20 63 75 73 74 6f 6d  ess WHERE custom
de10: 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61  er_name = old.na
de20: 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63  me;.  END;.}</tc
de30: 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 69 73  l>..<p>With this
de40: 20 74 72 69 67 67 65 72 20 69 6e 73 74 61 6c 6c   trigger install
de50: 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20 74 68  ed, executing th
de60: 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e  e statement:</p>
de70: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
de80: 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72  .UPDATE customer
de90: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
dea0: 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45  '1 Main St.' WHE
deb0: 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  RE name = 'Jack 
dec0: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a  Jones';.}</tcl>.
ded0: 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20 66  .<p>causes the f
dee0: 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20 61  ollowing to be a
def0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 65  utomatically exe
df00: 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  cuted:</p>..<tcl
df10: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
df20: 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64 64  E orders SET add
df30: 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53  ress = '1 Main S
df40: 74 2e 27 20 57 48 45 52 45 20 63 75 73 74 6f 6d  t.' WHERE custom
df50: 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  er_name = 'Jack 
df60: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29  Jones';.}</tcl>)
df70: 5e 0a 0a 3c 70 3e 46 6f 72 20 61 6e 20 65 78 61  ^..<p>For an exa
df80: 6d 70 6c 65 20 6f 66 20 61 6e 20 49 4e 53 54 45  mple of an INSTE
df90: 41 44 20 4f 46 20 74 72 69 67 67 65 72 2c 20 63  AD OF trigger, c
dfa0: 6f 6e 73 69 64 65 72 20 74 68 65 20 66 6f 6c 6c  onsider the foll
dfb0: 6f 77 69 6e 67 20 73 63 68 65 6d 61 3a 0a 0a 3c  owing schema:..<
dfc0: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52  tcl>Example {.CR
dfd0: 45 41 54 45 20 54 41 42 4c 45 20 63 75 73 74 6f  EATE TABLE custo
dfe0: 6d 65 72 28 0a 20 20 63 75 73 74 5f 69 64 20 49  mer(.  cust_id I
dff0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
e000: 45 59 2c 0a 20 20 63 75 73 74 5f 6e 61 6d 65 20  EY,.  cust_name 
e010: 54 45 58 54 2c 0a 20 20 63 75 73 74 5f 61 64 64  TEXT,.  cust_add
e020: 72 20 54 45 58 54 0a 29 3b 0a 43 52 45 41 54 45  r TEXT.);.CREATE
e030: 20 56 49 45 57 20 63 75 73 74 6f 6d 65 72 5f 61   VIEW customer_a
e040: 64 64 72 65 73 73 20 41 53 0a 20 20 20 53 45 4c  ddress AS.   SEL
e050: 45 43 54 20 63 75 73 74 5f 69 64 2c 20 63 75 73  ECT cust_id, cus
e060: 74 5f 61 64 64 72 20 46 52 4f 4d 20 63 75 73 74  t_addr FROM cust
e070: 6f 6d 65 72 3b 0a 43 52 45 41 54 45 20 54 52 49  omer;.CREATE TRI
e080: 47 47 45 52 20 63 75 73 74 5f 61 64 64 72 5f 63  GGER cust_addr_c
e090: 68 6e 67 0a 49 4e 53 54 45 41 44 20 4f 46 20 55  hng.INSTEAD OF U
e0a0: 50 44 41 54 45 20 4f 46 20 63 75 73 74 5f 61 64  PDATE OF cust_ad
e0b0: 64 72 20 4f 4e 20 63 75 73 74 6f 6d 65 72 5f 61  dr ON customer_a
e0c0: 64 64 72 65 73 73 0a 42 45 47 49 4e 0a 20 20 55  ddress.BEGIN.  U
e0d0: 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72 20 53  PDATE customer S
e0e0: 45 54 20 63 75 73 74 5f 61 64 64 72 3d 4e 45 57  ET cust_addr=NEW
e0f0: 2e 63 75 73 74 5f 61 64 64 72 0a 20 20 20 57 48  .cust_addr.   WH
e100: 45 52 45 20 63 75 73 74 5f 69 64 3d 4e 45 57 2e  ERE cust_id=NEW.
e110: 63 75 73 74 5f 69 64 3b 0a 45 4e 44 3b 0a 7d 3c  cust_id;.END;.}<
e120: 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74  /tcl>..<p>With t
e130: 68 65 20 73 63 68 65 6d 61 20 61 62 6f 76 65 2c  he schema above,
e140: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20   a statement of 
e150: 74 68 65 20 66 6f 72 6d 3a 3c 2f 70 3e 0a 0a 3c  the form:</p>..<
e160: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50  tcl>Example {.UP
e170: 44 41 54 45 20 63 75 73 74 6f 6d 65 72 5f 61 64  DATE customer_ad
e180: 64 72 65 73 73 20 53 45 54 20 63 75 73 74 5f 61  dress SET cust_a
e190: 64 64 72 3d 24 6e 65 77 5f 61 64 64 72 65 73 73  ddr=$new_address
e1a0: 20 57 48 45 52 45 20 63 75 73 74 5f 69 64 3d 24   WHERE cust_id=$
e1b0: 63 75 73 74 5f 69 64 3b 0a 7d 3c 2f 74 63 6c 3e  cust_id;.}</tcl>
e1c0: 0a 0a 3c 70 3e 43 61 75 73 65 73 20 74 68 65 20  ..<p>Causes the 
e1d0: 63 75 73 74 6f 6d 65 72 2e 63 75 73 74 5f 61 64  customer.cust_ad
e1e0: 64 72 20 66 69 65 6c 64 20 74 6f 20 62 65 20 75  dr field to be u
e1f0: 70 64 61 74 65 64 20 66 6f 72 20 61 20 73 70 65  pdated for a spe
e200: 63 69 66 69 63 0a 63 75 73 74 6f 6d 65 72 20 65  cific.customer e
e210: 6e 74 72 79 20 74 68 61 74 20 68 61 73 20 63 75  ntry that has cu
e220: 73 74 6f 6d 65 72 2e 63 75 73 74 5f 69 64 20 65  stomer.cust_id e
e230: 71 75 61 6c 20 74 6f 20 74 68 65 20 24 63 75 73  qual to the $cus
e240: 74 5f 69 64 20 70 61 72 61 6d 65 74 65 72 2e 0a  t_id parameter..
e250: 4e 6f 74 65 20 68 6f 77 20 74 68 65 20 76 61 6c  Note how the val
e260: 75 65 73 20 61 73 73 69 67 6e 65 64 20 74 6f 20  ues assigned to 
e270: 74 68 65 20 76 69 65 77 20 61 72 65 20 6d 61 64  the view are mad
e280: 65 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 66  e available as f
e290: 69 65 6c 64 0a 69 6e 20 74 68 65 20 73 70 65 63  ield.in the spec
e2a0: 69 61 6c 20 22 4e 45 57 22 20 74 61 62 6c 65 20  ial "NEW" table 
e2b0: 77 69 74 68 69 6e 20 74 68 65 20 74 72 69 67 67  within the trigg
e2c0: 65 72 20 62 6f 64 79 2e 3c 2f 70 3e 0a 0a 3c 74  er body.</p>..<t
e2d0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75  cl>hd_fragment u
e2e0: 6e 64 65 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64  ndef_before {und
e2f0: 65 66 69 6e 65 64 20 42 45 46 4f 52 45 20 74 72  efined BEFORE tr
e300: 69 67 67 65 72 20 62 65 68 61 76 69 6f 72 7d 3c  igger behavior}<
e310: 2f 74 63 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f  /tcl>.<h3>Cautio
e320: 6e 73 20 4f 6e 20 54 68 65 20 55 73 65 20 4f 66  ns On The Use Of
e330: 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 73   BEFORE triggers
e340: 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42  </h3>..<p>If a B
e350: 45 46 4f 52 45 20 55 50 44 41 54 45 20 6f 72 20  EFORE UPDATE or 
e360: 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20 74 72  BEFORE DELETE tr
e370: 69 67 67 65 72 20 6d 6f 64 69 66 69 65 73 20 6f  igger modifies o
e380: 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77 0a  r deletes a row.
e390: 74 68 61 74 20 77 61 73 20 74 6f 20 68 61 76 65  that was to have
e3a0: 20 62 65 65 6e 20 75 70 64 61 74 65 64 20 6f 72   been updated or
e3b0: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 6e 20 74   deleted, then t
e3c0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
e3d0: 20 73 75 62 73 65 71 75 65 6e 74 0a 75 70 64 61   subsequent.upda
e3e0: 74 65 20 6f 72 20 64 65 6c 65 74 65 20 6f 70 65  te or delete ope
e3f0: 72 61 74 69 6f 6e 20 69 73 20 75 6e 64 65 66 69  ration is undefi
e400: 6e 65 64 2e 20 20 46 75 72 74 68 65 72 6d 6f 72  ned.  Furthermor
e410: 65 2c 20 69 66 20 61 20 42 45 46 4f 52 45 20 74  e, if a BEFORE t
e420: 72 69 67 67 65 72 0a 6d 6f 64 69 66 69 65 73 20  rigger.modifies 
e430: 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77  or deletes a row
e440: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 75 6e 64  , then it is und
e450: 65 66 69 6e 65 64 20 77 68 65 74 68 65 72 20 6f  efined whether o
e460: 72 20 6e 6f 74 20 41 46 54 45 52 20 74 72 69 67  r not AFTER trig
e470: 67 65 72 73 0a 74 68 61 74 20 77 6f 75 6c 64 20  gers.that would 
e480: 68 61 76 65 20 6f 74 68 65 72 77 69 73 65 20 72  have otherwise r
e490: 75 6e 20 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73  un on those rows
e4a0: 20 77 69 6c 6c 20 69 6e 20 66 61 63 74 20 72 75   will in fact ru
e4b0: 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  n..</p>..<p>The 
e4c0: 76 61 6c 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77  value of NEW.row
e4d0: 69 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20  id is undefined 
e4e0: 69 6e 20 61 20 42 45 46 4f 52 45 20 49 4e 53 45  in a BEFORE INSE
e4f0: 52 54 20 74 72 69 67 67 65 72 20 69 6e 20 77 68  RT trigger in wh
e500: 69 63 68 0a 74 68 65 20 72 6f 77 69 64 20 69 73  ich.the rowid is
e510: 20 6e 6f 74 20 65 78 70 6c 69 63 69 74 6c 79 20   not explicitly 
e520: 73 65 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  set to an intege
e530: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75  r.</p>..<p>Becau
e540: 73 65 20 6f 66 20 74 68 65 20 62 65 68 61 76 69  se of the behavi
e550: 6f 72 73 20 64 65 73 63 72 69 62 65 64 20 61 62  ors described ab
e560: 6f 76 65 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73  ove, programmers
e570: 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65 64 20   are encouraged 
e580: 74 6f 0a 70 72 65 66 65 72 20 41 46 54 45 52 20  to.prefer AFTER 
e590: 74 72 69 67 67 65 72 73 20 6f 76 65 72 20 42 45  triggers over BE
e5a0: 46 4f 52 45 20 74 72 69 67 67 65 72 73 2e 3c 2f  FORE triggers.</
e5b0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
e5c0: 6d 65 6e 74 20 72 61 69 73 65 20 7b 52 41 49 53  ment raise {RAIS
e5d0: 45 20 66 75 6e 63 74 69 6f 6e 7d 3c 2f 74 63 6c  E function}</tcl
e5e0: 3e 0a 3c 68 33 3e 54 68 65 20 52 41 49 53 45 28  >.<h3>The RAISE(
e5f0: 29 20 66 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a  ) function</h3>.
e600: 0a 3c 70 3e 5e 28 41 20 73 70 65 63 69 61 6c 20  .<p>^(A special 
e610: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41 49  SQL function RAI
e620: 53 45 28 29 20 6d 61 79 20 62 65 20 75 73 65 64  SE() may be used
e630: 20 77 69 74 68 69 6e 20 61 20 74 72 69 67 67 65   within a trigge
e640: 72 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74  r-program,)^.wit
e650: 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  h the following 
e660: 73 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63  syntax</p> ..<tc
e670: 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
e680: 72 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f  raise-function</
e690: 74 63 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  tcl>..<p>^(When 
e6a0: 6f 6e 65 20 6f 66 20 52 41 49 53 45 28 52 4f 4c  one of RAISE(ROL
e6b0: 4c 42 41 43 4b 2c 2e 2e 2e 29 2c 20 52 41 49 53  LBACK,...), RAIS
e6c0: 45 28 41 42 4f 52 54 2c 2e 2e 2e 29 20 6f 72 20  E(ABORT,...) or 
e6d0: 52 41 49 53 45 28 46 41 49 4c 2c 2e 2e 2e 29 0a  RAISE(FAIL,...).
e6e0: 69 73 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67  is called during
e6f0: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
e700: 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20  .execution, the 
e710: 73 70 65 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f  specified [ON CO
e720: 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65 73 73 69  NFLICT] processi
e730: 6e 67 20 69 73 20 70 65 72 66 6f 72 6d 65 64 0a  ng is performed.
e740: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
e750: 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 29 5e 0a  y terminates.)^.
e760: 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  An error code of
e770: 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41   [SQLITE_CONSTRA
e780: 49 4e 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64  INT] is returned
e790: 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74   to the applicat
e7a0: 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20  ion,.along with 
e7b0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 72  the specified er
e7c0: 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e  ror message.</p>
e7d0: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41 49 53 45  ..<p>^When RAISE
e7e0: 28 49 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c  (IGNORE) is call
e7f0: 65 64 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ed, the remainde
e800: 72 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  r of the current
e810: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
e820: 2c 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ,.the statement 
e830: 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
e840: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
e850: 74 6f 20 65 78 65 63 75 74 65 20 61 6e 64 20 61  to execute and a
e860: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72  ny subsequent.tr
e870: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
e880: 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62  hat would have b
e890: 65 65 6e 20 65 78 65 63 75 74 65 64 20 61 72 65  een executed are
e8a0: 20 61 62 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20   abandoned. ^No 
e8b0: 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73  database.changes
e8c0: 20 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b   are rolled back
e8d0: 2e 20 20 5e 49 66 20 74 68 65 20 73 74 61 74 65  .  ^If the state
e8e0: 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65 64  ment that caused
e8f0: 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
e900: 67 72 61 6d 0a 74 6f 20 65 78 65 63 75 74 65 20  gram.to execute 
e910: 69 73 20 69 74 73 65 6c 66 20 70 61 72 74 20 6f  is itself part o
e920: 66 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67  f a trigger prog
e930: 72 61 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 74  ram, then that t
e940: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 72  rigger program.r
e950: 65 73 75 6d 65 73 20 65 78 65 63 75 74 69 6f 6e  esumes execution
e960: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
e970: 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74  g of the next st
e980: 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ep..</p>..<tcl>h
e990: 64 5f 66 72 61 67 6d 65 6e 74 20 74 65 6d 70 74  d_fragment tempt
e9a0: 72 69 67 20 7b 54 45 4d 50 20 74 72 69 67 67 65  rig {TEMP trigge
e9b0: 72 73 20 6f 6e 20 6e 6f 6e 2d 54 45 4d 50 20 74  rs on non-TEMP t
e9c0: 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ables}</tcl>.<h3
e9d0: 3e 54 45 4d 50 20 54 72 69 67 67 65 72 73 20 6f  >TEMP Triggers o
e9e0: 6e 20 4e 6f 6e 2d 54 45 4d 50 20 54 61 62 6c 65  n Non-TEMP Table
e9f0: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74  s</h3>..<p>^(A t
ea00: 72 69 67 67 65 72 20 6e 6f 72 6d 61 6c 6c 79 20  rigger normally 
ea10: 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 73 61  exists in the sa
ea20: 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20 74  me database as t
ea30: 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 0a 61  he table named.a
ea40: 66 74 65 72 20 74 68 65 20 22 4f 4e 22 20 6b 65  fter the "ON" ke
ea50: 79 77 6f 72 64 20 69 6e 20 74 68 65 20 43 52 45  yword in the CRE
ea60: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
ea70: 65 6d 65 6e 74 2e 20 20 45 78 63 65 70 74 2c 20  ement.  Except, 
ea80: 69 74 20 69 73 0a 70 6f 73 73 69 62 6c 65 20 74  it is.possible t
ea90: 6f 20 63 72 65 61 74 65 20 61 20 54 45 4d 50 20  o create a TEMP 
eaa0: 54 52 49 47 47 45 52 20 6f 6e 20 61 20 74 61 62  TRIGGER on a tab
eab0: 6c 65 20 69 6e 20 61 6e 6f 74 68 65 72 20 64 61  le in another da
eac0: 74 61 62 61 73 65 2e 29 5e 20 20 0a 53 75 63 68  tabase.)^  .Such
ead0: 20 61 20 74 72 69 67 67 65 72 20 77 69 6c 6c 20   a trigger will 
eae0: 6f 6e 6c 79 20 66 69 72 65 20 77 68 65 6e 20 63  only fire when c
eaf0: 68 61 6e 67 65 73 0a 61 72 65 20 6d 61 64 65 20  hanges.are made 
eb00: 74 6f 20 74 68 65 20 74 61 72 67 65 74 20 74 61  to the target ta
eb10: 62 6c 65 20 62 79 20 74 68 65 20 61 70 70 6c 69  ble by the appli
eb20: 63 61 74 69 6f 6e 20 74 68 61 74 20 64 65 66 69  cation that defi
eb30: 6e 65 64 20 74 68 65 20 74 72 69 67 67 65 72 2e  ned the trigger.
eb40: 0a 4f 74 68 65 72 20 61 70 70 6c 69 63 61 74 69  .Other applicati
eb50: 6f 6e 73 20 74 68 61 74 20 6d 6f 64 69 66 79 20  ons that modify 
eb60: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69 6c  the database wil
eb70: 6c 20 6e 6f 74 20 62 65 20 61 62 6c 65 20 74 6f  l not be able to
eb80: 20 73 65 65 20 74 68 65 0a 54 45 4d 50 20 74 72   see the.TEMP tr
eb90: 69 67 67 65 72 20 61 6e 64 20 68 65 6e 63 65 20  igger and hence 
eba0: 63 61 6e 6e 6f 74 20 72 75 6e 20 74 68 65 20 74  cannot run the t
ebb0: 72 69 67 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  rigger.</p>..<p>
ebc0: 57 68 65 6e 20 64 65 66 69 6e 69 6e 67 20 61 20  When defining a 
ebd0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 6f 6e 20  TEMP trigger on 
ebe0: 61 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65  a non-TEMP table
ebf0: 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e  , it is importan
ec00: 74 20 74 6f 0a 73 70 65 63 69 66 79 20 74 68 65  t to.specify the
ec10: 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
ec20: 67 20 74 68 65 20 6e 6f 6e 2d 54 45 4d 50 20 74  g the non-TEMP t
ec30: 61 62 6c 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  able.  For examp
ec40: 6c 65 2c 0a 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  le,.in the follo
ec50: 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 2c 20  wing statement, 
ec60: 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  it is important 
ec70: 74 6f 20 73 61 79 20 22 6d 61 69 6e 2e 74 61 62  to say "main.tab
ec80: 31 22 20 69 6e 73 74 65 61 64 0a 6f 66 20 6a 75  1" instead.of ju
ec90: 73 74 20 22 74 61 62 31 22 3a 3c 2f 70 3e 0a 0a  st "tab1":</p>..
eca0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
ecb0: 3e 0a 43 52 45 41 54 45 20 54 45 4d 50 20 54 52  >.CREATE TEMP TR
ecc0: 49 47 47 45 52 20 65 78 31 20 41 46 54 45 52 20  IGGER ex1 AFTER 
ecd0: 49 4e 53 45 52 54 20 4f 4e 20 3c 62 3e 6d 61 69  INSERT ON <b>mai
ece0: 6e 2e 3c 2f 62 3e 74 61 62 31 20 42 45 47 49 4e  n.</b>tab1 BEGIN
ecf0: 20 2e 2e 2e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f   ....</pre></blo
ed00: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 46 61 69  ckquote>..<p>Fai
ed10: 6c 75 72 65 20 74 6f 20 73 70 65 63 69 66 79 20  lure to specify 
ed20: 74 68 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20  the schema name 
ed30: 6f 6e 20 74 68 65 20 74 61 72 67 65 74 20 74 61  on the target ta
ed40: 62 6c 65 20 63 6f 75 6c 64 20 72 65 73 75 6c 74  ble could result
ed50: 0a 69 6e 20 74 68 65 20 54 45 4d 50 20 74 72 69  .in the TEMP tri
ed60: 67 67 65 72 20 62 65 69 6e 67 20 72 65 61 74 74  gger being reatt
ed70: 61 63 68 65 64 20 74 6f 20 61 20 74 61 62 6c 65  ached to a table
ed80: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
ed90: 61 6d 65 20 69 6e 0a 61 6e 6f 74 68 65 72 20 64  ame in.another d
eda0: 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
edb0: 20 61 6e 79 20 73 63 68 65 6d 61 20 63 68 61 6e   any schema chan
edc0: 67 65 20 6f 63 63 75 72 73 2e 3c 2f 70 3e 0a 0a  ge occurs.</p>..
edd0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
ede0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee20: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
ee30: 52 45 41 54 45 20 56 49 45 57 7d 20 7b 63 72 65  REATE VIEW} {cre
ee40: 61 74 65 76 69 65 77 7d 20 7b 7b 43 52 45 41 54  ateview} {{CREAT
ee50: 45 20 56 49 45 57 7d 20 76 69 65 77 20 56 49 45  E VIEW} view VIE
ee60: 57 20 2a 76 69 65 77 73 7d 0a 0a 52 65 63 75 72  W *views}..Recur
ee70: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
ee80: 6d 20 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74  m create-view-st
ee90: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
eea0: 68 65 20 43 52 45 41 54 45 20 56 49 45 57 20 63  he CREATE VIEW c
eeb0: 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e 73 20 61  ommand assigns a
eec0: 20 6e 61 6d 65 20 74 6f 20 61 20 70 72 65 2d 70   name to a pre-p
eed0: 61 63 6b 61 67 65 64 20 0a 5b 53 45 4c 45 43 54  ackaged .[SELECT
eee0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f  ] statement. .^O
eef0: 6e 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20  nce the view is 
ef00: 63 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20  created, it can 
ef10: 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46  be used in the F
ef20: 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e  ROM clause.of an
ef30: 6f 74 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69  other [SELECT] i
ef40: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
ef50: 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le name..</p>..<
ef60: 70 3e 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22  p>^If the "TEMP"
ef70: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
ef80: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69  keyword occurs i
ef90: 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54  n between "CREAT
efa0: 45 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68  E".and "VIEW" th
efb0: 65 6e 20 74 68 65 20 76 69 65 77 20 74 68 61 74  en the view that
efc0: 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f   is created is o
efd0: 6e 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74  nly visible to t
efe0: 68 65 0a 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  he.[database con
eff0: 6e 65 63 74 69 6f 6e 5d 20 74 68 61 74 20 63 72  nection] that cr
f000: 65 61 74 65 64 20 69 74 20 61 6e 64 20 69 73 20  eated it and is 
f010: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
f020: 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64  leted when.the d
f030: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
f040: 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70  on is closed.</p
f050: 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 3c 79 79  >..<p> ^If a <yy
f060: 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
f070: 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 73 70 65  </yyterm> is spe
f080: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
f090: 20 76 69 65 77 20 0a 69 73 20 63 72 65 61 74 65   view .is create
f0a0: 64 20 69 6e 20 74 68 65 20 73 70 65 63 69 66 69  d in the specifi
f0b0: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 5e 49 74  ed database..^It
f0c0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
f0d0: 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 3c  specify both a <
f0e0: 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61  yyterm>schema-na
f0f0: 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 61 6e 64 20  me</yyterm>.and 
f100: 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  the TEMP keyword
f110: 20 6f 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c 65   on a VIEW, unle
f120: 73 73 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 73  ss the <yyterm>s
f130: 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65  chema-name</yyte
f140: 72 6d 3e 20 0a 69 73 20 22 74 65 6d 70 22 2e 0a  rm> .is "temp"..
f150: 5e 49 66 20 6e 6f 20 73 63 68 65 6d 61 20 6e 61  ^If no schema na
f160: 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  me is specified,
f170: 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65   and the TEMP ke
f180: 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65  yword is not pre
f190: 73 65 6e 74 2c 0a 74 68 65 20 56 49 45 57 20 69  sent,.the VIEW i
f1a0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
f1b0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 3c   main database.<
f1c0: 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e  /p>..<p>^You can
f1d0: 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49  not [DELETE], [I
f1e0: 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41  NSERT], or [UPDA
f1f0: 54 45 5d 20 61 20 76 69 65 77 2e 20 20 5e 56 69  TE] a view.  ^Vi
f200: 65 77 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c  ews are read-onl
f210: 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20 5e  y .in SQLite.  ^
f220: 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79  However, in many
f230: 20 63 61 73 65 73 20 79 6f 75 20 63 61 6e 20 75   cases you can u
f240: 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f  se an.[INSTEAD O
f250: 46 20 74 72 69 67 67 65 72 5d 20 6f 6e 20 74 68  F trigger] on th
f260: 65 20 76 69 65 77 20 74 6f 20 61 63 63 6f 6d 70  e view to accomp
f270: 6c 69 73 68 20 0a 74 68 65 20 73 61 6d 65 20 74  lish .the same t
f280: 68 69 6e 67 2e 20 20 5e 56 69 65 77 73 20 61 72  hing.  ^Views ar
f290: 65 20 72 65 6d 6f 76 65 64 20 0a 77 69 74 68 20  e removed .with 
f2a0: 74 68 65 20 5b 44 52 4f 50 20 56 49 45 57 5d 20  the [DROP VIEW] 
f2b0: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  command.</p>..<p
f2c0: 3e 5e 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 63  >^If a <yyterm>c
f2d0: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65  olumn-name</yyte
f2e0: 72 6d 3e 20 6c 69 73 74 20 66 6f 6c 6c 6f 77 73  rm> list follows
f2f0: 20 0a 74 68 65 20 3c 79 79 74 65 72 6d 3e 76 69   .the <yyterm>vi
f300: 65 77 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ew-name</yyterm>
f310: 2c 20 74 68 65 6e 20 74 68 61 74 20 6c 69 73 74  , then that list
f320: 20 64 65 74 65 72 6d 69 6e 65 73 0a 74 68 65 20   determines.the 
f330: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 63 6f 6c  names of the col
f340: 75 6d 6e 73 20 66 6f 72 20 74 68 65 20 76 69 65  umns for the vie
f350: 77 2e 20 20 5e 49 66 20 74 68 65 20 3c 79 79 74  w.  ^If the <yyt
f360: 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  erm>column-name<
f370: 2f 79 79 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73  /yyterm>.list is
f380: 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 6e 20 74   omitted, then t
f390: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
f3a0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 76  columns in the v
f3b0: 69 65 77 20 61 72 65 20 64 65 72 69 76 65 64 0a  iew are derived.
f3c0: 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 73 20 6f  from the names o
f3d0: 66 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  f the result-set
f3e0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
f3f0: 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 2e 0a 4e  [select-stmt]..N
f400: 6f 74 65 20 74 68 61 74 20 74 68 65 20 3c 79 79  ote that the <yy
f410: 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  term>column-name
f420: 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20 73  </yyterm> list s
f430: 79 6e 74 61 78 20 69 73 20 6f 6e 6c 79 0a 73 75  yntax is only.su
f440: 70 70 6f 72 74 65 64 20 69 6e 20 53 51 4c 69 74  pported in SQLit
f450: 65 20 76 65 72 73 69 6f 6e 73 20 33 2e 39 2e 30  e versions 3.9.0
f460: 20 61 6e 64 20 6c 61 74 65 72 2e 0a 0a 3c 74 63   and later...<tc
f470: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
f480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
f4d0: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d  E VIRTUAL TABLE}
f4e0: 20 7b 63 72 65 61 74 65 76 74 61 62 7d 20 7b 7b   {createvtab} {{
f4f0: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
f500: 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76  ABLE}}..Recursiv
f510: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
f520: 72 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61  reate-virtual-ta
f530: 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ble-stmt.</tcl>.
f540: 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74  .<p>A [virtual t
f550: 61 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65  able] is an inte
f560: 72 66 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65  rface to an exte
f570: 72 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20  rnal storage or 
f580: 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69  computation.engi
f590: 6e 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20  ne that appears 
f5a0: 74 6f 20 62 65 20 61 20 74 61 62 6c 65 20 62 75  to be a table bu
f5b0: 74 20 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61  t does not actua
f5c0: 6c 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d  lly store inform
f5d0: 61 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74  ation.in the dat
f5e0: 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  abase file.</p>.
f5f0: 0a 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20  .<p>In general, 
f600: 79 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68  you can do anyth
f610: 69 6e 67 20 77 69 74 68 20 61 20 5b 76 69 72 74  ing with a [virt
f620: 75 61 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20  ual table] that 
f630: 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68  can be done.with
f640: 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
f650: 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  le, except that 
f660: 5e 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61  ^you cannot crea
f670: 74 65 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72  te indices or tr
f680: 69 67 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74  iggers on a.virt
f690: 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d  ual table.  ^Som
f6a0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
f6b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
f6c0: 6d 69 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64  might impose add
f6d0: 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74  itional.restrict
f6e0: 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70  ions.  For examp
f6f0: 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c  le, many virtual
f700: 20 74 61 62 6c 65 73 20 61 72 65 20 72 65 61 64   tables are read
f710: 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  -only.</p>..<p>T
f720: 68 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c  he <yyterm>modul
f730: 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  e-name</yyterm> 
f740: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
f750: 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 6d  n object that im
f760: 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69 72  plements.the vir
f770: 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54 68  tual table.  ^Th
f780: 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c 65  e <yyterm>module
f790: 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6d  -name</yyterm> m
f7a0: 75 73 74 20 62 65 20 72 65 67 69 73 74 65 72 65  ust be registere
f7b0: 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69 74  d with.the SQLit
f7c0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
f7d0: 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c  ction using.[sql
f7e0: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
f7f0: 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65  le()] or [sqlite
f800: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
f810: 76 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69  v2()].prior to i
f820: 73 73 75 69 6e 67 20 74 68 65 20 43 52 45 41 54  ssuing the CREAT
f830: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
f840: 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
f850: 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a 65 72  module takes zer
f860: 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d  o or more comma-
f870: 73 65 70 61 72 61 74 65 64 20 61 72 67 75 6d 65  separated argume
f880: 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65  nts..^The argume
f890: 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74 20  nts can be just 
f8a0: 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20 61  about any text a
f8b0: 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61 73  s long as it has
f8c0: 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74   balanced.parent
f8d0: 68 65 73 65 73 2e 20 20 54 68 65 20 61 72 67 75  heses.  The argu
f8e0: 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20 73  ment syntax is s
f8f0: 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e 65  ufficiently gene
f900: 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72 67  ral that the.arg
f910: 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d 61  uments can be ma
f920: 64 65 20 74 6f 20 61 70 70 65 61 72 20 61 73 20  de to appear as 
f930: 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69  [column definiti
f940: 6f 6e 73 5d 20 69 6e 20 61 20 74 72 61 64 69 74  ons] in a tradit
f950: 69 6f 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54 41  ional.[CREATE TA
f960: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
f970: 20 0a 5e 53 51 4c 69 74 65 20 70 61 73 73 65 73   .^SQLite passes
f980: 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 72 67 75   the module argu
f990: 6d 65 6e 74 73 20 64 69 72 65 63 74 6c 79 0a 74  ments directly.t
f9a0: 6f 20 74 68 65 20 5b 78 43 72 65 61 74 65 5d 20  o the [xCreate] 
f9b0: 61 6e 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d  and [xConnect] m
f9c0: 65 74 68 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f  ethods of the mo
f9d0: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
f9e0: 69 6f 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79 20  ion.without any 
f9f0: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20  interpretation. 
fa00: 20 49 74 20 69 73 20 74 68 65 20 72 65 73 70 6f   It is the respo
fa10: 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65  nsibility.of the
fa20: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
fa30: 74 61 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20  tation to parse 
fa40: 61 6e 64 20 69 6e 74 65 72 70 72 65 74 20 69 74  and interpret it
fa50: 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e  s own arguments.
fa60: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74  </p>..<p>^A virt
fa70: 75 61 6c 20 74 61 62 6c 65 20 69 73 20 64 65 73  ual table is des
fa80: 74 72 6f 79 65 64 20 75 73 69 6e 67 20 74 68 65  troyed using the
fa90: 20 6f 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20   ordinary.[DROP 
faa0: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
fab0: 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f 0a 44  .  There is no.D
fac0: 52 4f 50 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ROP VIRTUAL TABL
fad0: 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  E statement.</p>
fae0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
faf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb30: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 44  ######.Section D
fb40: 45 4c 45 54 45 20 64 65 6c 65 74 65 20 7b 44 45  ELETE delete {DE
fb50: 4c 45 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a  LETE *DELETEs}..
fb60: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
fb70: 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74  iagram delete-st
fb80: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  mt.</tcl>..<p>Th
fb90: 65 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64  e DELETE command
fba0: 20 72 65 6d 6f 76 65 73 20 72 65 63 6f 72 64 73   removes records
fbb0: 20 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20   from the table 
fbc0: 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68  identified by th
fbd0: 65 0a 20 20 20 5b 71 75 61 6c 69 66 69 65 64 2d  e.   [qualified-
fbe0: 74 61 62 6c 65 2d 6e 61 6d 65 5d 2e 0a 0a 3c 70  table-name]...<p
fbf0: 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45 20 63  >^If the WHERE c
fc00: 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70 72 65  lause is not pre
fc10: 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64  sent, all record
fc20: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 61  s in the table a
fc30: 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e  re deleted..   ^
fc40: 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
fc50: 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74  e is supplied, t
fc60: 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72  hen only those r
fc70: 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
fc80: 65 0a 20 20 20 57 48 45 52 45 20 63 6c 61 75 73  e.   WHERE claus
fc90: 65 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  e [boolean expre
fca0: 73 73 69 6f 6e 5d 20 69 73 20 74 72 75 65 20 61  ssion] is true a
fcb0: 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e  re deleted..   ^
fcc0: 52 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  Rows for which t
fcd0: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
fce0: 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 20 61   false or NULL a
fcf0: 72 65 20 72 65 74 61 69 6e 65 64 2e 0a 0a 3c 68  re retained...<h
fd00: 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f  3>Restrictions o
fd10: 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65  n DELETE Stateme
fd20: 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41 54  nts Within CREAT
fd30: 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a  E TRIGGER</h3>..
fd40: 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  <p>The following
fd50: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70   restrictions ap
fd60: 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73 74  ply to DELETE st
fd70: 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63  atements that oc
fd80: 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a 20  cur within the. 
fd90: 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45    body of a [CRE
fda0: 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
fdb0: 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20 20  tement:..<ul>.  
fdc0: 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 79 79 74  <li><p>^The <yyt
fdd0: 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  erm>table-name</
fde0: 79 79 74 65 72 6d 3e 20 73 70 65 63 69 66 69 65  yyterm> specifie
fdf0: 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 0a  d as part of a .
fe00: 20 20 20 20 44 45 4c 45 54 45 20 73 74 61 74 65      DELETE state
fe10: 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20  ment within.    
fe20: 61 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d  a trigger body m
fe30: 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69  ust be unqualifi
fe40: 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65 72 20  ed.  ^(In other 
fe50: 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20 3c  words, the.    <
fe60: 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69  i>schema-name</i
fe70: 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78  ><b>.</b> prefix
fe80: 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61   on the table na
fe90: 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  me is not allowe
fea0: 64 20 0a 20 20 20 20 77 69 74 68 69 6e 20 74 72  d .    within tr
feb0: 69 67 67 65 72 73 2e 29 5e 20 5e 49 66 20 74 68  iggers.)^ ^If th
fec0: 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68  e table to which
fed0: 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
fee0: 61 74 74 61 63 68 65 64 20 69 73 0a 20 20 20 20  attached is.    
fef0: 6e 6f 74 20 69 6e 20 74 68 65 20 74 65 6d 70 20  not in the temp 
ff00: 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 44  database, then D
ff10: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
ff20: 20 77 69 74 68 69 6e 20 74 68 65 20 74 72 69 67   within the trig
ff30: 67 65 72 0a 20 20 20 20 62 6f 64 79 20 6d 75 73  ger.    body mus
ff40: 74 20 6f 70 65 72 61 74 65 20 6f 6e 20 74 61 62  t operate on tab
ff50: 6c 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  les within the s
ff60: 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20  ame database as 
ff70: 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c  it. ^If the tabl
ff80: 65 0a 20 20 20 20 74 6f 20 77 68 69 63 68 20 74  e.    to which t
ff90: 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
ffa0: 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65  tached is in the
ffb0: 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20   TEMP database, 
ffc0: 74 68 65 6e 20 74 68 65 0a 20 20 20 20 75 6e 71  then the.    unq
ffd0: 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66  ualified name of
ffe0: 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
fff0: 20 64 65 6c 65 74 65 64 20 69 73 20 72 65 73 6f   deleted is reso
10000 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  lved in the same
10010 20 77 61 79 20 61 73 0a 20 20 20 20 69 74 20 69   way as.    it i
10020 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65  s for a top-leve
10030 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20  l statement (by 
10040 73 65 61 72 63 68 69 6e 67 20 66 69 72 73 74 20  searching first 
10050 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
10060 65 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20  e, then.    the 
10070 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
10080 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61  hen any other da
10090 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f  tabases in the o
100a0 72 64 65 72 20 74 68 65 79 20 77 65 72 65 0a 20  rder they were. 
100b0 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 20 20     attached)..  
100c0 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65    .  <li><p>^The
100d0 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
100e0 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
100f0 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  ses are not allo
10100 77 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a 20 20  wed on DELETE.  
10110 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
10120 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70  hin triggers.</p
10130 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  >..  <li><p>^The
10140 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52   LIMIT and ORDER
10150 20 42 59 20 63 6c 61 75 73 65 73 20 28 64 65 73   BY clauses (des
10160 63 72 69 62 65 64 20 62 65 6c 6f 77 29 20 61 72  cribed below) ar
10170 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20 66 6f  e unsupported fo
10180 72 0a 20 20 20 20 44 45 4c 45 54 45 20 73 74 61  r.    DELETE sta
10190 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
101a0 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c 2f 75  riggers.</p>.</u
101b0 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c  l>..<h3>Optional
101c0 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52   LIMIT and ORDER
101d0 20 42 59 20 63 6c 61 75 73 65 73 3c 2f 68 33 3e   BY clauses</h3>
101e0 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65  ..<p>^(If SQLite
101f0 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
10200 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  h the [SQLITE_EN
10210 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
10220 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c  TE_LIMIT].compil
10230 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74  e-time option, t
10240 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f  hen the syntax o
10250 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
10260 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e 64  tement is.extend
10270 65 64 20 62 79 20 74 68 65 20 61 64 64 69 74 69  ed by the additi
10280 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f  on of optional O
10290 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
102a0 54 20 63 6c 61 75 73 65 73 3a 29 5e 3c 2f 70 3e  T clauses:)^</p>
102b0 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
102c0 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74  gram delete-stmt
102d0 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a  -limited</tcl>..
102e0 3c 70 3e 5e 49 66 20 61 20 44 45 4c 45 54 45 20  <p>^If a DELETE 
102f0 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20  statement has a 
10300 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
10310 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
10320 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69   of rows that.wi
10330 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 69 73  ll be deleted is
10340 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
10350 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61  ting the accompa
10360 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nying expression
10370 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20   and casting.it 
10380 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
10390 6c 75 65 2e 20 5e 49 66 20 74 68 65 20 72 65 73  lue. ^If the res
103a0 75 6c 74 20 6f 66 20 74 68 65 20 65 76 61 6c 75  ult of the evalu
103b0 61 74 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  ating the LIMIT 
103c0 63 6c 61 75 73 65 0a 63 61 6e 6e 6f 74 20 62 65  clause.cannot be
103d0 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76   losslessly conv
103e0 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
103f0 67 65 72 20 76 61 6c 75 65 2c 20 69 74 20 69 73  ger value, it is
10400 20 61 6e 20 65 72 72 6f 72 2e 20 5e 41 20 0a 6e   an error. ^A .n
10410 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20 76 61  egative LIMIT va
10420 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74  lue is interpret
10430 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22  ed as "no limit"
10440 2e 20 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54  . ^(If the DELET
10450 45 20 73 74 61 74 65 6d 65 6e 74 20 0a 61 6c 73  E statement .als
10460 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20  o has an OFFSET 
10470 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20  clause, then it 
10480 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61  is similarly eva
10490 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74 20  luated and cast 
104a0 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 76 61  to an.integer va
104b0 6c 75 65 2e 20 41 67 61 69 6e 2c 20 69 74 20 69  lue. Again, it i
104c0 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
104d0 65 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  e value cannot b
104e0 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e  e losslessly.con
104f0 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
10500 65 67 65 72 2e 29 5e 20 5e 49 66 20 74 68 65 72  eger.)^ ^If ther
10510 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 20 63  e is no OFFSET c
10520 6c 61 75 73 65 2c 20 6f 72 20 74 68 65 20 63 61  lause, or the ca
10530 6c 63 75 6c 61 74 65 64 0a 69 6e 74 65 67 65 72  lculated.integer
10540 20 76 61 6c 75 65 20 69 73 20 6e 65 67 61 74 69   value is negati
10550 76 65 2c 20 74 68 65 20 65 66 66 65 63 74 69 76  ve, the effectiv
10560 65 20 4f 46 46 53 45 54 20 76 61 6c 75 65 20 69  e OFFSET value i
10570 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28 49 66  s zero...<p>^(If
10580 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
10590 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44  ement has an ORD
105a0 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
105b0 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
105c0 20 77 6f 75 6c 64 20 0a 62 65 20 64 65 6c 65 74   would .be delet
105d0 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63  ed in the absenc
105e0 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
105f0 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64  lause are sorted
10600 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
10610 65 20 0a 4f 52 44 45 52 20 42 59 2e 20 54 68 65  e .ORDER BY. The
10620 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 20   first <i>M</i> 
10630 72 6f 77 73 2c 20 77 68 65 72 65 20 3c 69 3e 4d  rows, where <i>M
10640 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75  </i> is the valu
10650 65 20 66 6f 75 6e 64 20 62 79 0a 65 76 61 6c 75  e found by.evalu
10660 61 74 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54  ating the OFFSET
10670 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
10680 6f 6e 2c 20 61 72 65 20 73 6b 69 70 70 65 64 2c  on, are skipped,
10690 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69   and the followi
106a0 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20 77 68  ng .<i>N</i>, wh
106b0 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69 73 20  ere <i>N</i> is 
106c0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
106d0 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
106e0 6e 2c 20 61 72 65 20 64 65 6c 65 74 65 64 2e 29  n, are deleted.)
106f0 5e 0a 5e 49 66 20 74 68 65 72 65 20 61 72 65 20  ^.^If there are 
10700 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e 3c 2f  less than <i>N</
10710 69 3e 20 72 6f 77 73 20 72 65 6d 61 69 6e 69 6e  i> rows remainin
10720 67 20 61 66 74 65 72 20 74 61 6b 69 6e 67 20 74  g after taking t
10730 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
10740 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2c 20 6f  .into account, o
10750 72 20 69 66 20 74 68 65 20 4c 49 4d 49 54 20 63  r if the LIMIT c
10760 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 64 20  lause evaluated 
10770 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61  to a negative va
10780 6c 75 65 2c 20 74 68 65 6e 20 61 6c 6c 0a 72 65  lue, then all.re
10790 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 61 72 65  maining rows are
107a0 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 49   deleted...<p>^I
107b0 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
107c0 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52  tement has no OR
107d0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
107e0 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
107f0 74 0a 77 6f 75 6c 64 20 62 65 20 64 65 6c 65 74  t.would be delet
10800 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63  ed in the absenc
10810 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
10820 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d 62  lause are assemb
10830 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72  led in an.arbitr
10840 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65  ary order before
10850 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49   applying the LI
10860 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63  MIT and OFFSET c
10870 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d  lauses to determ
10880 69 6e 65 20 0a 74 68 65 20 73 75 62 73 65 74 20  ine .the subset 
10890 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c  that are actuall
108a0 79 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e  y deleted...<p>^
108b0 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c  (The ORDER BY cl
108c0 61 75 73 65 20 6f 6e 20 61 20 44 45 4c 45 54 45  ause on a DELETE
108d0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
108e0 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72  ed only to deter
108f0 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73 20  mine which.rows 
10900 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20  fall within the 
10910 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65 72  LIMIT. The order
10920 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61   in which rows a
10930 72 65 20 64 65 6c 65 74 65 64 20 69 73 20 61 72  re deleted is ar
10940 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e  bitrary.and is n
10950 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79  ot influenced by
10960 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
10970 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  ause.)^..<tcl>hd
10980 5f 66 72 61 67 6d 65 6e 74 20 74 72 75 6e 63 61  _fragment trunca
10990 74 65 6f 70 74 20 7b 74 72 75 6e 63 61 74 65 20  teopt {truncate 
109a0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74  optimization}</t
109b0 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54 72 75 6e  cl>.<h3>The Trun
109c0 63 61 74 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  cate Optimizatio
109d0 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  n</h3>..<p>^When
109e0 20 74 68 65 20 57 48 45 52 45 20 69 73 20 6f 6d   the WHERE is om
109f0 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44 45 4c  itted from a DEL
10a00 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  ETE statement an
10a10 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65 69 6e  d the table.bein
10a20 67 20 64 65 6c 65 74 65 64 20 68 61 73 20 6e 6f  g deleted has no
10a30 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c 69 74   triggers,.SQLit
10a40 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69 6d 69  e uses an optimi
10a50 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73 65 20  zation to erase 
10a60 74 68 65 20 65 6e 74 69 72 65 20 74 61 62 6c 65  the entire table
10a70 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f 75 74   content.without
10a80 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73 69 74   having to visit
10a90 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
10aa0 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64 75 61   table individua
10ab0 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72 75 6e 63  lly..This "trunc
10ac0 61 74 65 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ate" optimizatio
10ad0 6e 20 6d 61 6b 65 73 20 74 68 65 20 64 65 6c 65  n makes the dele
10ae0 74 65 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74  te run much fast
10af0 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53 51 4c  er..Prior to SQL
10b00 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36  ite [version 3.6
10b10 2e 35 5d 2c 20 74 68 65 20 74 72 75 6e 63 61 74  .5], the truncat
10b20 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 61  e optimization.a
10b30 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61 74 20 74  lso meant that t
10b40 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e  he [sqlite3_chan
10b50 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71 6c 69  ges()] and.[sqli
10b60 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
10b70 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a  s()] interfaces.
10b80 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74 5f 63  and the [count_c
10b90 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 0a 77  hanges pragma].w
10ba0 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  ill not actually
10bb0 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
10bc0 65 72 20 6f 66 20 64 65 6c 65 74 65 64 20 72 6f  er of deleted ro
10bd0 77 73 2e 20 20 0a 54 68 61 74 20 70 72 6f 62 6c  ws.  .That probl
10be0 65 6d 20 68 61 73 20 62 65 65 6e 20 66 69 78 65  em has been fixe
10bf0 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e  d as of [version
10c00 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70 3e 5e 54 68   3.6.5]...<p>^Th
10c10 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d  e truncate optim
10c20 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 70  ization can be p
10c30 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62  ermanently disab
10c40 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75 65 72  led for all quer
10c50 69 65 73 0a 62 79 20 72 65 63 6f 6d 70 69 6c 69  ies.by recompili
10c60 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68 20 74  ng.SQLite with t
10c70 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  he [SQLITE_OMIT_
10c80 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d 49 5a  TRUNCATE_OPTIMIZ
10c90 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74  ATION] compile-t
10ca0 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70 3e 0a  ime switch.</p>.
10cb0 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63 61 74 65  .<p>The truncate
10cc0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61   optimization ca
10cd0 6e 20 61 6c 73 6f 20 62 65 20 64 69 73 61 62 6c  n also be disabl
10ce0 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  ed at runtime us
10cf0 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33  ing.the [sqlite3
10d00 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28  _set_authorizer(
10d10 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 20 20 5e  )] interface.  ^
10d20 49 66 20 61 6e 20 61 75 74 68 6f 72 69 7a 65 72  If an authorizer
10d30 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74 75 72 6e   callback.return
10d40 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  s [SQLITE_IGNORE
10d50 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49 54 45  ] for an [SQLITE
10d60 5f 44 45 4c 45 54 45 5d 20 61 63 74 69 6f 6e 20  _DELETE] action 
10d70 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68 65 20 44  code, then.the D
10d80 45 4c 45 54 45 20 6f 70 65 72 61 74 69 6f 6e 20  ELETE operation 
10d90 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 62 75 74  will proceed but
10da0 20 74 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70   the truncate op
10db0 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69 6c 6c 0a  timization will.
10dc0 62 65 20 62 79 70 61 73 73 65 64 20 61 6e 64 20  be bypassed and 
10dd0 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 64 65 6c  rows will be del
10de0 65 74 65 64 20 6f 6e 65 20 62 79 20 6f 6e 65 2e  eted one by one.
10df0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
10e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e40 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
10e50 69 6f 6e 20 7b 44 45 54 41 43 48 20 44 41 54 41  ion {DETACH DATA
10e60 42 41 53 45 7d 20 64 65 74 61 63 68 20 2a 44 45  BASE} detach *DE
10e70 54 41 43 48 0a 0a 52 65 63 75 72 73 69 76 65 42  TACH..RecursiveB
10e80 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 74  ubbleDiagram det
10e90 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ach-stmt.</tcl>.
10ea0 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d  .<p>^This statem
10eb0 65 6e 74 20 64 65 74 61 63 68 65 73 20 61 6e 20  ent detaches an 
10ec0 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 62  additional datab
10ed0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  ase connection p
10ee0 72 65 76 69 6f 75 73 6c 79 20 0a 61 74 74 61 63  reviously .attac
10ef0 68 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 41  hed using the [A
10f00 54 54 41 43 48 5d 20 73 74 61 74 65 6d 65 6e 74  TTACH] statement
10f10 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f 74 20 69 6e  .  .^When not in
10f20 20 5b 73 68 61 72 65 64 20 63 61 63 68 65 20 6d   [shared cache m
10f30 6f 64 65 5d 2c 20 0a 69 74 20 69 73 20 70 6f 73  ode], .it is pos
10f40 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 74 68  sible to have th
10f50 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
10f60 66 69 6c 65 20 61 74 74 61 63 68 65 64 20 6d 75  file attached mu
10f70 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75 73 69  ltiple times usi
10f80 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20 6e 61  ng .different na
10f90 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63 68 69  mes, and detachi
10fa0 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f  ng one connectio
10fb0 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69 6c 6c  n to a file will
10fc0 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74 68 65   leave the .othe
10fd0 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a 5e  rs intact.</p>.^
10fe0 49 6e 20 5b 73 68 61 72 65 64 20 63 61 63 68 65  In [shared cache
10ff0 20 6d 6f 64 65 5d 2c 20 61 74 74 65 6d 70 74 69   mode], attempti
11000 6e 67 20 74 6f 20 61 74 74 61 63 68 20 74 68 65  ng to attach the
11010 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 66   same database f
11020 69 6c 65 20 6d 6f 72 65 0a 74 68 61 6e 20 6f 6e  ile more.than on
11030 63 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 6e  ce results in an
11040 20 65 72 72 6f 72 2e 0a 0a 3c 70 3e 5e 54 68 69   error...<p>^Thi
11050 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  s statement will
11060 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74 65 20   fail if SQLite 
11070 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  is in the middle
11080 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   of a transactio
11090 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  n.</p>...<tcl>.#
110a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110e0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
110f0 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e 44 45  ction {DROP INDE
11100 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b 7b 44  X} dropindex {{D
11110 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 52 65 63  ROP INDEX}}..Rec
11120 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
11130 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d 73  ram drop-index-s
11140 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
11150 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73  The DROP INDEX s
11160 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
11170 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64 0a   an index added.
11180 77 69 74 68 20 74 68 65 20 5b 43 52 45 41 54 45  with the [CREATE
11190 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e   INDEX] statemen
111a0 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20 69 73  t.  The index is
111b0 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f   completely remo
111c0 76 65 64 20 66 72 6f 6d 0a 74 68 65 20 64 69 73  ved from.the dis
111d0 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77 61 79  k.  The only way
111e0 20 74 6f 20 72 65 63 6f 76 65 72 20 74 68 65 20   to recover the 
111f0 69 6e 64 65 78 20 69 73 20 74 6f 20 72 65 65 6e  index is to reen
11200 74 65 72 20 74 68 65 0a 61 70 70 72 6f 70 72 69  ter the.appropri
11210 61 74 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  ate [CREATE INDE
11220 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  X] command.</p>.
11230 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
11240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11280 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
11290 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74  ROP TABLE} dropt
112a0 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42 4c  able {{DROP TABL
112b0 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  E}}..RecursiveBu
112c0 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
112d0 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63  -table-stmt.</tc
112e0 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
112f0 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
11300 20 72 65 6d 6f 76 65 73 20 61 20 74 61 62 6c 65   removes a table
11310 20 61 64 64 65 64 20 77 69 74 68 20 74 68 65 0a   added with the.
11320 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
11330 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e  tatement.  The n
11340 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69 73  ame specified is
11350 20 74 68 65 0a 74 61 62 6c 65 20 6e 61 6d 65 2e   the.table name.
11360 20 20 5e 54 68 65 20 64 72 6f 70 70 65 64 20 74    ^The dropped t
11370 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c 65 74 65  able is complete
11380 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  ly removed from 
11390 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 73 63  the database .sc
113a0 68 65 6d 61 20 61 6e 64 20 74 68 65 20 64 69 73  hema and the dis
113b0 6b 20 66 69 6c 65 2e 20 20 54 68 65 20 74 61 62  k file.  The tab
113c0 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65 20 72 65  le can not be re
113d0 63 6f 76 65 72 65 64 2e 20 20 0a 5e 41 6c 6c 20  covered.  .^All 
113e0 69 6e 64 69 63 65 73 20 61 6e 64 20 74 72 69 67  indices and trig
113f0 67 65 72 73 0a 61 73 73 6f 63 69 61 74 65 64 20  gers.associated 
11400 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 61  with the table a
11410 72 65 20 61 6c 73 6f 20 64 65 6c 65 74 65 64 2e  re also deleted.
11420 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70  </p>..<p>^The op
11430 74 69 6f 6e 61 6c 20 49 46 20 45 58 49 53 54 53  tional IF EXISTS
11440 20 63 6c 61 75 73 65 20 73 75 70 70 72 65 73 73   clause suppress
11450 65 73 20 74 68 65 20 65 72 72 6f 72 20 74 68 61  es the error tha
11460 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79  t would normally
11470 0a 72 65 73 75 6c 74 20 69 66 20 74 68 65 20 74  .result if the t
11480 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78  able does not ex
11490 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ist.</p>..<p>^If
114a0 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f   [foreign key co
114b0 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20 65  nstraints] are e
114c0 6e 61 62 6c 65 64 2c 20 61 20 44 52 4f 50 20 54  nabled, a DROP T
114d0 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 70 65 72  ABLE command per
114e0 66 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c 69 63 69  forms an.implici
114f0 74 20 5b 44 45 4c 45 54 45 20 7c 20 44 45 4c 45  t [DELETE | DELE
11500 54 45 20 46 52 4f 4d 5d 20 63 6f 6d 6d 61 6e 64  TE FROM] command
11510 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
11520 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
11530 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
11540 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
11550 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
11560 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
11570 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
11580 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
11590 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
115a0 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 0a 69 73  t DELETE FROM.is
115b0 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20 74 68   executed, so th
115c0 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20  is cannot cause 
115d0 61 6e 79 20 74 72 69 67 67 65 72 73 20 74 6f 20  any triggers to 
115e0 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72 61 73  fire. By contras
115f0 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20  t, ^an.implicit 
11600 44 45 4c 45 54 45 20 46 52 4f 4d 20 64 6f 65 73  DELETE FROM does
11610 20 63 61 75 73 65 20 61 6e 79 20 63 6f 6e 66 69   cause any confi
11620 67 75 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b  gured.[foreign k
11630 65 79 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74  ey actions] to t
11640 61 6b 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20  ake place. .^If 
11650 74 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c  the implicit DEL
11660 45 54 45 20 46 52 4f 4d 20 65 78 65 63 75 74 65  ETE FROM execute
11670 64 0a 61 73 20 70 61 72 74 20 6f 66 20 61 20 44  d.as part of a D
11680 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e  ROP TABLE comman
11690 64 20 76 69 6f 6c 61 74 65 73 20 61 6e 79 20 69  d violates any i
116a0 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
116b0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
116c0 2c 0a 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  ,.an error is re
116d0 74 75 72 6e 65 64 20 61 6e 64 20 74 68 65 20 74  turned and the t
116e0 61 62 6c 65 20 69 73 20 6e 6f 74 20 64 72 6f 70  able is not drop
116f0 70 65 64 2e 20 5e 49 66 20 0a 74 68 65 20 69 6d  ped. ^If .the im
11700 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52  plicit DELETE FR
11710 4f 4d 20 63 61 75 73 65 73 20 61 6e 79 20 0a 64  OM causes any .d
11720 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20  eferred foreign 
11730 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
11740 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c 20  to be violated, 
11750 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69 6f  and the violatio
11760 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20 77  ns still.exist w
11770 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74  hen the transact
11780 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65 64  ion is committed
11790 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  , an error is re
117a0 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74 69  turned at the ti
117b0 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a 3c  me.of commit...<
117c0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
117d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11810 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
11820 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
11830 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54 52  rigger {{DROP TR
11840 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69  IGGER}}..Recursi
11850 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
11860 64 72 6f 70 2d 74 72 69 67 67 65 72 2d 73 74 6d  drop-trigger-stm
11870 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
11880 65 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 73  e DROP TRIGGER s
11890 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
118a0 20 61 20 74 72 69 67 67 65 72 20 63 72 65 61 74   a trigger creat
118b0 65 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45 41  ed by the .[CREA
118c0 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
118d0 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20 72 65 6d  ement. ^Once rem
118e0 6f 76 65 64 2c 20 74 68 65 20 74 72 69 67 67 65  oved, the trigge
118f0 72 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20  r definition is 
11900 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72 65 73 65 6e  no.longer presen
11910 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  t in the sqlite_
11920 6d 61 73 74 65 72 20 28 6f 72 20 73 71 6c 69 74  master (or sqlit
11930 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 74  e_temp_master) t
11940 61 62 6c 65 20 61 6e 64 20 69 73 0a 6e 6f 74 20  able and is.not 
11950 66 69 72 65 64 20 62 79 20 61 6e 79 20 73 75 62  fired by any sub
11960 73 65 71 75 65 6e 74 20 49 4e 53 45 52 54 2c 20  sequent INSERT, 
11970 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
11980 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 70   statements...<p
11990 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 72 69 67  >^Note that trig
119a0 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74  gers are automat
119b0 69 63 61 6c 6c 79 20 64 72 6f 70 70 65 64 20 77  ically dropped w
119c0 68 65 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74  hen the associat
119d0 65 64 20 74 61 62 6c 65 20 69 73 0a 64 72 6f 70  ed table is.drop
119e0 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  ped...<tcl>.####
119f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a30 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
11a40 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20 64  on {DROP VIEW} d
11a50 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20 56  ropview {{DROP V
11a60 49 45 57 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  IEW}}..Recursive
11a70 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
11a80 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f 74  op-view-stmt.</t
11a90 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f  cl>..<p>^The DRO
11aa0 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74  P VIEW statement
11ab0 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77 20   removes a view 
11ac0 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20 5b  created by the [
11ad0 43 52 45 41 54 45 20 56 49 45 57 5d 20 0a 20 20  CREATE VIEW] .  
11ae0 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54 68 65 20  statement. ^The 
11af0 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e 20  view definition 
11b00 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
11b10 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
11b20 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e 6f 20 61  ema, but .  no a
11b30 63 74 75 61 6c 20 64 61 74 61 20 69 6e 20 74 68  ctual data in th
11b40 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 62 61 73  e underlying bas
11b50 65 20 74 61 62 6c 65 73 20 69 73 20 6d 6f 64 69  e tables is modi
11b60 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  fied...<p>^(The 
11b70 76 69 65 77 20 74 6f 20 64 72 6f 70 20 69 73 20  view to drop is 
11b80 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68  identified by th
11b90 65 20 76 69 65 77 2d 6e 61 6d 65 20 61 6e 64 20  e view-name and 
11ba0 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 73 63 68 65  optional .  sche
11bb0 6d 61 2d 6e 61 6d 65 20 73 70 65 63 69 66 69 65  ma-name specifie
11bc0 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
11bd0 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65   DROP VIEW state
11be0 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20 20 72 65  ment. This .  re
11bf0 66 65 72 65 6e 63 65 20 69 73 20 72 65 73 6f 6c  ference is resol
11c00 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 73 74  ved using the st
11c10 61 6e 64 61 72 64 20 70 72 6f 63 65 64 75 72 65  andard procedure
11c20 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20 72 65 73   for [object res
11c30 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a 3c 70 3e  olution].)^..<p>
11c40 0a 20 20 5e 49 66 20 74 68 65 20 73 70 65 63 69  .  ^If the speci
11c50 66 69 65 64 20 76 69 65 77 20 63 61 6e 6e 6f 74  fied view cannot
11c60 20 62 65 20 66 6f 75 6e 64 20 61 6e 64 20 74 68   be found and th
11c70 65 20 49 46 20 45 58 49 53 54 53 20 63 6c 61 75  e IF EXISTS clau
11c80 73 65 20 69 73 20 6e 6f 74 20 0a 20 20 70 72 65  se is not .  pre
11c90 73 65 6e 74 2c 20 69 74 20 69 73 20 61 6e 20 65  sent, it is an e
11ca0 72 72 6f 72 2e 20 5e 49 66 20 74 68 65 20 73 70  rror. ^If the sp
11cb0 65 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e  ecified view can
11cc0 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64  not be found and
11cd0 20 61 6e 20 49 46 0a 20 20 45 58 49 53 54 53 20   an IF.  EXISTS 
11ce0 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
11cf0 74 20 69 6e 20 74 68 65 20 44 52 4f 50 20 56 49  t in the DROP VI
11d00 45 57 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  EW statement, th
11d10 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  en the statement
11d20 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 0a  .  is a no-op...
11d30 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
11d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d80 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
11d90 61 74 61 62 61 73 65 20 4f 62 6a 65 63 74 20 4e  atabase Object N
11da0 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f 6e 7d 20  ame Resolution} 
11db0 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62 6a 65 63  {naming} {{objec
11dc0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 3c  t resolution}}.<
11dd0 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 49 6e 20  /tcl>..<p>.  In 
11de0 53 51 4c 69 74 65 2c 20 61 20 64 61 74 61 62 61  SQLite, a databa
11df0 73 65 20 6f 62 6a 65 63 74 20 28 61 20 74 61 62  se object (a tab
11e00 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72 69 67 67  le, index, trigg
11e10 65 72 20 6f 72 20 76 69 65 77 29 20 69 73 20 69  er or view) is i
11e20 64 65 6e 74 69 66 69 65 64 0a 20 20 62 79 20 74  dentified.  by t
11e30 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f  he name of the o
11e40 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20 6e 61  bject and the na
11e50 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  me of the databa
11e60 73 65 20 74 68 61 74 20 69 74 20 72 65 73 69 64  se that it resid
11e70 65 73 20 69 6e 2e 20 0a 20 20 44 61 74 61 62 61  es in. .  Databa
11e80 73 65 20 6f 62 6a 65 63 74 73 20 6d 61 79 20 72  se objects may r
11e90 65 73 69 64 65 20 69 6e 20 74 68 65 20 6d 61 69  eside in the mai
11ea0 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 20  n database, the 
11eb0 74 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20 6f  temp database, o
11ec0 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54 54 41 43  r in.  an [ATTAC
11ed0 48 7c 61 74 74 61 63 68 65 64 20 64 61 74 61 62  H|attached datab
11ee0 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20 54 68 65  ase]...<p>.  The
11ef0 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 5b   syntax of the [
11f00 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20 5b 44 52  DROP TABLE], [DR
11f10 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44 52 4f 50  OP INDEX], [DROP
11f20 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50 20 54 52   VIEW], [DROP TR
11f30 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45 49 4e 44  IGGER],.  [REIND
11f40 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54 41 42 4c  EX], [ALTER TABL
11f50 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f 74 68 65  E] and many othe
11f60 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c 6c 20 70  r commands all p
11f70 65 72 6d 69 74 20 74 68 65 20 75 73 65 72 20 74  ermit the user t
11f80 6f 0a 20 20 73 70 65 63 69 66 79 20 61 20 64 61  o.  specify a da
11f90 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20 65 69  tabase object ei
11fa0 74 68 65 72 20 62 79 20 69 74 73 20 6e 61 6d 65  ther by its name
11fb0 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79 20 61 20   alone, or by a 
11fc0 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 0a 20  combination of. 
11fd0 20 69 74 73 20 6e 61 6d 65 20 61 6e 64 20 74 68   its name and th
11fe0 65 20 6e 61 6d 65 20 6f 66 20 69 74 73 20 64 61  e name of its da
11ff0 74 61 62 61 73 65 2e 20 5e 28 49 66 20 6e 6f 20  tabase. ^(If no 
12000 64 61 74 61 62 61 73 65 20 69 73 20 73 70 65 63  database is spec
12010 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20 20  ified as part.  
12020 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20 72 65  of the object re
12030 66 65 72 65 6e 63 65 2c 20 74 68 65 6e 20 53 51  ference, then SQ
12040 4c 69 74 65 20 73 65 61 72 63 68 65 73 20 74 68  Lite searches th
12050 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20 61 6e 64  e main, temp and
12060 20 61 6c 6c 20 61 74 74 61 63 68 65 64 0a 20 20   all attached.  
12070 64 61 74 61 62 61 73 65 73 20 66 6f 72 20 61 6e  databases for an
12080 20 6f 62 6a 65 63 74 20 77 69 74 68 20 61 20 6d   object with a m
12090 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e 20 54 68  atching name. Th
120a0 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 20  e temp database 
120b0 69 73 20 73 65 61 72 63 68 65 64 0a 20 20 66 69  is searched.  fi
120c0 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64 20 62 79  rst, followed by
120d0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
120e0 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20 61 6c 6c  se, followed all
120f0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
12100 73 65 73 20 69 6e 20 74 68 65 0a 20 20 6f 72 64  ses in the.  ord
12110 65 72 20 74 68 61 74 20 74 68 65 79 20 77 65 72  er that they wer
12120 65 20 61 74 74 61 63 68 65 64 2e 20 54 68 65 20  e attached. The 
12130 72 65 66 65 72 65 6e 63 65 20 72 65 73 6f 6c 76  reference resolv
12140 65 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  es to the first 
12150 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64 2e 29 5e  match.  found.)^
12160 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c   For example:..<
12170 70 72 65 3e 5e 28 0a 20 20 20 20 20 20 2f 2a 20  pre>^(.      /* 
12180 41 64 64 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  Add a table name
12190 64 20 27 74 31 27 20 74 6f 20 74 68 65 20 74 65  d 't1' to the te
121a0 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20 61 6e 20  mp, main and an 
121b0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
121c0 65 20 2a 2f 0a 20 20 20 20 20 20 41 54 54 41 43  e */.      ATTAC
121d0 48 20 27 66 69 6c 65 2e 64 62 27 20 41 53 20 61  H 'file.db' AS a
121e0 75 78 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  ux;.      CREATE
121f0 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29 3b   TABLE t1(x, y);
12200 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45  .      CREATE TE
12210 4d 50 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79  MP TABLE t1(x, y
12220 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  );.      CREATE 
12230 54 41 42 4c 45 20 61 75 78 2e 74 31 28 78 2c 20  TABLE aux.t1(x, 
12240 79 29 3b 0a 0a 20 20 20 20 20 20 44 52 4f 50 20  y);..      DROP 
12250 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20  TABLE t1;       
12260 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20    /* Drop table 
12270 69 6e 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  in temp database
12280 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50 20 54   */.      DROP T
12290 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20 20  ABLE t1;        
122a0 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20 69   /* Drop table i
122b0 6e 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  n main database 
122c0 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41  */.      DROP TA
122d0 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20 20 20  BLE t1;         
122e0 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20 69 6e  /* Drop table in
122f0 20 61 75 78 20 64 61 74 61 62 61 73 65 20 2a 2f   aux database */
12300 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70 3e 0a 20  .)^</pre>..<p>. 
12310 20 5e 49 66 20 61 20 73 63 68 65 6d 61 20 6e 61   ^If a schema na
12320 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  me is specified 
12330 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 6f 62  as part of an ob
12340 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20  ject reference, 
12350 69 74 20 6d 75 73 74 20 62 65 0a 20 20 65 69 74  it must be.  eit
12360 68 65 72 20 22 6d 61 69 6e 22 2c 20 6f 72 20 22  her "main", or "
12370 74 65 6d 70 22 20 6f 72 20 74 68 65 20 73 63 68  temp" or the sch
12380 65 6d 61 2d 6e 61 6d 65 20 6f 66 20 61 6e 20 61  ema-name of an a
12390 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
123a0 2e 0a 20 20 5e 4c 69 6b 65 20 6f 74 68 65 72 20  ..  ^Like other 
123b0 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72 73 2c  SQL identifiers,
123c0 20 73 63 68 65 6d 61 20 6e 61 6d 65 73 20 61 72   schema names ar
123d0 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  e case-insensiti
123e0 76 65 2e 0a 20 20 5e 49 66 20 61 20 73 63 68 65  ve..  ^If a sche
123f0 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69  ma name is speci
12400 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  fied, then only 
12410 74 68 61 74 20 6f 6e 65 20 73 63 68 65 6d 61 20  that one schema 
12420 69 73 20 73 65 61 72 63 68 65 64 20 66 6f 72 0a  is searched for.
12430 20 20 74 68 65 20 6e 61 6d 65 64 20 6f 62 6a 65    the named obje
12440 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f 73 74 20  ct...<p>.  Most 
12450 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65  object reference
12460 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73 6f 6c  s may only resol
12470 76 65 20 74 6f 20 61 20 73 70 65 63 69 66 69 63  ve to a specific
12480 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 20   type of object 
12490 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c 65 20 61  (for.  example a
124a0 20 72 65 66 65 72 65 6e 63 65 20 74 68 61 74 20   reference that 
124b0 69 73 20 70 61 72 74 20 6f 66 20 61 20 44 52 4f  is part of a DRO
124c0 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  P TABLE statemen
124d0 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73 6f 6c  t may only resol
124e0 76 65 0a 20 20 74 6f 20 61 20 74 61 62 6c 65 20  ve.  to a table 
124f0 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61 6e 20 69  object, not an i
12500 6e 64 65 78 2c 20 74 72 69 67 67 65 72 20 6f 72  ndex, trigger or
12510 20 76 69 65 77 29 2e 20 48 6f 77 65 76 65 72 20   view). However 
12520 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65 78 74 73  in some contexts
12530 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45 49 4e 44   .  (e.g. [REIND
12540 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63 74 20 72  EX]) an object r
12550 65 66 65 72 65 6e 63 65 20 6d 61 79 20 62 65 20  eference may be 
12560 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f 72 65 20  resolve to more 
12570 74 68 61 6e 20 6f 6e 65 20 74 79 70 65 0a 20 20  than one type.  
12580 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57 68 65 6e  of object. ^When
12590 20 73 65 61 72 63 68 69 6e 67 20 64 61 74 61 62   searching datab
125a0 61 73 65 20 73 63 68 65 6d 61 73 20 66 6f 72 20  ase schemas for 
125b0 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2c 20  a named object, 
125c0 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20 74 79 70  objects of.  typ
125d0 65 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  es that cannot b
125e0 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 63 6f  e used in the co
125f0 6e 74 65 78 74 20 6f 66 20 74 68 65 20 72 65 66  ntext of the ref
12600 65 72 65 6e 63 65 20 61 72 65 20 61 6c 77 61 79  erence are alway
12610 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c  s .  ignored...<
12620 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
12630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12670 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50 4c  ###.Section EXPL
12680 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50 4c  AIN explain EXPL
12690 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  AIN..BubbleDiagr
126a0 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74 63  am sql-stmt.</tc
126b0 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51 4c 20 73  l>..<p>^An SQL s
126c0 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65 20  tatement can be 
126d0 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20  preceded by the 
126e0 6b 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49 4e  keyword "EXPLAIN
126f0 22 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72 61  " or.by the phra
12700 73 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52  se "EXPLAIN QUER
12710 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69 74 68 65  Y PLAN".  ^Eithe
12720 72 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 63  r modification c
12730 61 75 73 65 73 20 74 68 65 0a 53 51 4c 20 73 74  auses the.SQL st
12740 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 68 61 76  atement to behav
12750 65 20 61 73 20 61 20 71 75 65 72 79 20 61 6e 64  e as a query and
12760 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f 72   to return infor
12770 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f 77  mation about.how
12780 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
12790 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 70  nt would have op
127a0 65 72 61 74 65 64 20 69 66 20 74 68 65 20 45 58  erated if the EX
127b0 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f 72  PLAIN keyword or
127c0 0a 70 68 72 61 73 65 20 68 61 64 20 62 65 65 6e  .phrase had been
127d0 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   omitted.</p>..<
127e0 70 3e 54 68 65 20 6f 75 74 70 75 74 20 66 72 6f  p>The output fro
127f0 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64 20 45 58  m EXPLAIN and EX
12800 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
12810 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
12820 0a 69 6e 74 65 72 61 63 74 69 76 65 20 61 6e 61  .interactive ana
12830 6c 79 73 69 73 20 61 6e 64 20 74 72 6f 75 62 6c  lysis and troubl
12840 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c 79 2e 20  eshooting only. 
12850 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20   The details of 
12860 74 68 65 20 0a 6f 75 74 70 75 74 20 66 6f 72 6d  the .output form
12870 61 74 20 61 72 65 20 73 75 62 6a 65 63 74 20 74  at are subject t
12880 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e  o change from on
12890 65 20 72 65 6c 65 61 73 65 20 6f 66 20 53 51 4c  e release of SQL
128a0 69 74 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ite to the next.
128b0 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68  .Applications sh
128c0 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20 45 58 50  ould not use EXP
128d0 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41 49 4e 20  LAIN or EXPLAIN 
128e0 51 55 45 52 59 20 50 4c 41 4e 20 73 69 6e 63 65  QUERY PLAN since
128f0 0a 74 68 65 69 72 20 65 78 61 63 74 20 62 65 68  .their exact beh
12900 61 76 69 6f 72 20 69 73 20 76 61 72 69 61 62 6c  avior is variabl
12910 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61 72 74 69  e and only parti
12920 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74 65 64 2e  ally documented.
12930 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  </p>..<p>^When t
12940 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
12950 72 64 20 61 70 70 65 61 72 73 20 62 79 20 69 74  rd appears by it
12960 73 65 6c 66 20 69 74 20 63 61 75 73 65 73 20 74  self it causes t
12970 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 74 6f 20  he statement.to 
12980 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72  behave as a quer
12990 79 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  y that returns t
129a0 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 0a  he sequence of .
129b0 5b 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65  [virtual machine
129c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 5d 20 69   instructions] i
129d0 74 20 77 6f 75 6c 64 20 68 61 76 65 20 75 73 65  t would have use
129e0 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65  d to execute the
129f0 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a 74 68 65   command had.the
12a00 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
12a10 20 6e 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e   not been presen
12a20 74 2e 20 5e 57 68 65 6e 20 74 68 65 20 45 58 50  t. ^When the EXP
12a30 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
12a40 70 68 72 61 73 65 0a 61 70 70 65 61 72 73 2c 20  phrase.appears, 
12a50 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 72 65  the statement re
12a60 74 75 72 6e 73 20 68 69 67 68 2d 6c 65 76 65 6c  turns high-level
12a70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 72 65 67   information reg
12a80 61 72 64 69 6e 67 20 74 68 65 20 71 75 65 72 79  arding the query
12a90 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f 75 6c 64  .plan that would
12aa0 20 68 61 76 65 20 62 65 65 6e 20 75 73 65 64 2e   have been used.
12ab0 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e 20 51 55  ..The EXPLAIN QU
12ac0 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64  ERY PLAN command
12ad0 20 69 73 20 64 65 73 63 72 69 62 65 64 20 69 6e   is described in
12ae0 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75 65 72 79   .[explain query
12af0 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65 74 61 69   plan|more detai
12b00 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63 6c 3e 0a  l here]...<tcl>.
12b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
12b60 65 63 74 69 6f 6e 20 65 78 70 72 65 73 73 69 6f  ection expressio
12b70 6e 20 65 78 70 72 20 7b 2a 65 78 70 72 65 73 73  n expr {*express
12b80 69 6f 6e 20 7b 65 78 70 72 65 73 73 69 6f 6e 20  ion {expression 
12b90 73 79 6e 74 61 78 7d 7d 0a 0a 52 65 63 75 72 73  syntax}}..Recurs
12ba0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
12bb0 20 65 78 70 72 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70   expr.</tcl>..<p
12bc0 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69 73  >This section is
12bd0 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
12be0 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f 73  the others.  Mos
12bf0 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e 73  t other sections
12c00 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65 6e   of.this documen
12c10 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61 20  t talks about a 
12c20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20 63  particular SQL c
12c30 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73 65  ommand.  This se
12c40 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20 74  ction does.not t
12c50 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61 6e  alk about a stan
12c60 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20 62  dalone command b
12c70 75 74 20 61 62 6f 75 74 20 22 65 78 70 72 65 73  ut about "expres
12c80 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72 65  sions" which are
12c90 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73 20   .subcomponents 
12ca0 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63 6f  of most other co
12cb0 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74 63  mmands.</p>..<tc
12cc0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 69  l>hd_fragment bi
12cd0 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61 72 79 20  naryops {binary 
12ce0 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63 6c 3e  operators}</tcl>
12cf0 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73 3c 2f  .<h3>Operators</
12d00 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74 65 20  h3>.<p>^(SQLite 
12d10 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65 20  understands the 
12d20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72 79  following binary
12d30 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e 20 6f   operators, in o
12d40 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68 65 73  rder from.highes
12d50 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72 65 63  t to lowest prec
12d60 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c  edence:</p>..<bl
12d70 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c  ockquote><pre>.<
12d80 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32  font color="#2c2
12d90 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20 20  cf0"><big>||.*  
12da0 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d 0a    /    %.+    -.
12db0 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b 26  &lt;&lt;   &gt;&
12dc0 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20 20 7c  gt;   &amp;    |
12dd0 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20 20  .&lt;    &lt;=  
12de0 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a 3d   &gt;    &gt;=.=
12df0 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20 26 6c      ==   !=   &l
12e00 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e 49  t;&gt;   </big>I
12e10 53 20 20 20 49 53 20 4e 4f 54 20 20 20 49 4e 20  S   IS NOT   IN 
12e20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42 20 20 20    LIKE   GLOB   
12e30 4d 41 54 43 48 20 20 20 52 45 47 45 58 50 0a 41  MATCH   REGEXP.A
12e40 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a  ND   .OR</font>.
12e50 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
12e60 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53 75 70 70  te>)^..<p>^(Supp
12e70 6f 72 74 65 64 20 75 6e 61 72 79 20 70 72 65 66  orted unary pref
12e80 69 78 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65  ix operators are
12e90 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c   these:</p>..<bl
12ea0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c  ockquote><pre>.<
12eb0 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32  font color="#2c2
12ec0 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20 20 2b  cf0"><big>-    +
12ed0 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c 2f 62 69      ~    NOT</bi
12ee0 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e  g></font>.</pre>
12ef0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
12f00 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
12f10 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b 43 4f 4c  t collateop {COL
12f20 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 7d 3c 2f  LATE operator}</
12f30 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c  tcl>.<p>^The COL
12f40 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 69 73  LATE operator is
12f50 20 61 20 75 6e 61 72 79 20 70 6f 73 74 66 69 78   a unary postfix
12f60 0a 6f 70 65 72 61 74 6f 72 20 74 68 61 74 20 61  .operator that a
12f70 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c 6c 61 74  ssigns a [collat
12f80 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f  ing sequence] to
12f90 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
12fa0 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65  ^The COLLATE ope
12fb0 72 61 74 6f 72 20 68 61 73 20 61 20 68 69 67 68  rator has a high
12fc0 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 28 62  er precedence (b
12fd0 69 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74 6c  inds more tightl
12fe0 79 29 20 74 68 61 6e 20 61 6e 79 0a 62 69 6e 61  y) than any.bina
12ff0 72 79 20 6f 70 65 72 61 74 6f 72 20 61 6e 64 20  ry operator and 
13000 61 6e 79 20 75 6e 61 72 79 20 70 72 65 66 69 78  any unary prefix
13010 20 6f 70 65 72 61 74 6f 72 20 65 78 63 65 70 74   operator except
13020 20 22 7e 22 2e 0a 28 43 4f 4c 4c 41 54 45 20 61   "~"..(COLLATE a
13030 6e 64 20 22 7e 22 20 61 72 65 20 61 73 73 6f 63  nd "~" are assoc
13040 69 61 74 69 76 65 20 73 6f 20 74 68 65 69 72 20  iative so their 
13050 62 69 6e 64 69 6e 67 20 6f 72 64 65 72 20 64 6f  binding order do
13060 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 2e 29 0a  es not matter.).
13070 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ^The collating s
13080 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
13090 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  he COLLATE opera
130a0 74 6f 72 20 6f 76 65 72 72 69 64 65 73 20 74 68  tor overrides th
130b0 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e.collating sequ
130c0 65 6e 63 65 20 64 65 74 65 72 6d 69 6e 65 64 20  ence determined 
130d0 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 63  by the COLLATE c
130e0 6c 61 75 73 65 20 69 6e 20 61 20 74 61 62 6c 65  lause in a table
130f0 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  .[column definit
13100 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65 20 5b 63  ion]..See the [c
13110 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
13120 65 7c 20 64 65 74 61 69 6c 65 64 20 64 69 73 63  e| detailed disc
13130 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61 74  ussion on collat
13140 69 6e 67 20 73 65 71 75 65 6e 63 65 73 5d 0a 69  ing sequences].i
13150 6e 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 20  n the [datatype 
13160 7c 20 44 61 74 61 74 79 70 65 20 49 6e 20 53 51  | Datatype In SQ
13170 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65 6e 74 20  Lite3] document 
13180 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
13190 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70 3e  nformation..</p>
131a0 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22  ..<tcl>hd_puts "
131b0 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72 79 20 6f  .<p>^The unary o
131c0 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f  perator [Operato
131d0 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  r +] is a no-op.
131e0 20 20 5e 49 74 20 63 61 6e 20 62 65 20 61 70 70    ^It can be app
131f0 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c  lied.to strings,
13200 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f 62 73 20   numbers, blobs 
13210 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69 74 20 61  or NULL and it a
13220 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 61 20  lways returns a 
13230 72 65 73 75 6c 74 0a 77 69 74 68 20 74 68 65 20  result.with the 
13240 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20 74 68  same value as th
13250 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c  e operand.</p>"<
13260 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74  /tcl>..<p>Note t
13270 68 61 74 20 74 68 65 72 65 20 61 72 65 20 74 77  hat there are tw
13280 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 66 20  o variations of 
13290 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64 20 6e  the equals and n
132a0 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72 61 74  ot equals.operat
132b0 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73 20 63 61  ors.  ^Equals ca
132c0 6e 20 62 65 20 65 69 74 68 65 72 0a 0a 3c 74 63  n be either..<tc
132d0 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f 70 65  l>.hd_puts "[Ope
132e0 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65  rator =] or [Ope
132f0 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20  rator ==]..^The 
13300 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65 72 61  non-equals opera
13310 74 6f 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  tor can be eithe
13320 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20  r.[Operator !=] 
13330 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b 26 6c  or [Operator {&l
13340 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b  t;&gt;}]..^The [
13350 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65  Operator ||] ope
13360 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61  rator is \"conca
13370 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f  tenate\" - it jo
13380 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74 68 65  ins together.the
13390 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f 66 20   two strings of 
133a0 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a 5e 54  its operands..^T
133b0 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65  he operator [Ope
133c0 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74 73  rator %] outputs
133d0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74   the value of it
133e0 73 20 6c 65 66 74 20 0a 6f 70 65 72 61 6e 64 20  s left .operand 
133f0 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69 67 68 74  modulo its right
13400 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c   operand.</p>..<
13410 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  p>^The result of
13420 20 61 6e 79 20 62 69 6e 61 72 79 20 6f 70 65 72   any binary oper
13430 61 74 6f 72 20 69 73 20 65 69 74 68 65 72 20 61  ator is either a
13440 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
13450 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65 70 74 20  r .NULL, except 
13460 66 6f 72 20 74 68 65 20 5b 4f 70 65 72 61 74 6f  for the [Operato
13470 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65 6e 61 74  r ||] concatenat
13480 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20 77 68 69  ion operator whi
13490 63 68 20 61 6c 77 61 79 73 20 0a 65 76 61 6c 75  ch always .evalu
134a0 61 74 65 73 20 74 6f 20 65 69 74 68 65 72 20 4e  ates to either N
134b0 55 4c 4c 20 6f 72 20 61 20 74 65 78 74 20 76 61  ULL or a text va
134c0 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66 72  lue.</p>"..hd_fr
134d0 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e 6f 74 7d  agment {isisnot}
134e0 20 7b 49 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b   {IS operator} {
134f0 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 7d  IS NOT operator}
13500 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70 3e 5e 54  ..hd_puts "<p>^T
13510 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d  he [Operator IS]
13520 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b   and [Operator {
13530 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72 61 74 6f  IS NOT}] operato
13540 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f 70  rs work.like [Op
13550 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64 20 5b 4f  erator =] and [O
13560 70 65 72 61 74 6f 72 20 21 3d 5d 20 65 78 63 65  perator !=] exce
13570 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f 72 20 62  pt when one or b
13580 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70 65 72 61  oth of the.opera
13590 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e 20 5e 49  nds are NULL. ^I
135a0 6e 20 74 68 69 73 20 63 61 73 65 2c 20 69 66 20  n this case, if 
135b0 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
135c0 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  e NULL, then the
135d0 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61  .IS operator eva
135e0 6c 75 61 74 65 73 20 74 6f 20 31 20 28 74 72 75  luates to 1 (tru
135f0 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e 4f  e) and the IS NO
13600 54 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  T operator evalu
13610 61 74 65 73 0a 74 6f 20 30 20 28 66 61 6c 73 65  ates.to 0 (false
13620 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70 65 72 61  ). ^If one opera
13630 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e 64 20 74  nd is NULL and t
13640 68 65 20 6f 74 68 65 72 20 69 73 20 6e 6f 74 2c  he other is not,
13650 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65   then the.IS ope
13660 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20  rator evaluates 
13670 74 6f 20 30 20 28 66 61 6c 73 65 29 20 61 6e 64  to 0 (false) and
13680 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70 65 72   the IS NOT oper
13690 61 74 6f 72 20 69 73 20 31 20 28 74 72 75 65 29  ator is 1 (true)
136a0 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  ..^It is not pos
136b0 73 69 62 6c 65 20 66 6f 72 20 61 6e 20 49 53 20  sible for an IS 
136c0 6f 72 20 49 53 20 4e 4f 54 20 65 78 70 72 65 73  or IS NOT expres
136d0 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75 61 74 65  sion to evaluate
136e0 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72 61   to NULL..^Opera
136f0 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f 72 20 49  tors [Operator I
13700 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72  S] and [Operator
13710 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61 76 65 20   {IS NOT}] have 
13720 74 68 65 20 73 61 6d 65 20 0a 70 72 65 63 65 64  the same .preced
13730 65 6e 63 65 20 61 73 20 5b 4f 70 65 72 61 74 6f  ence as [Operato
13740 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64 5f  r =]."..<tcl>hd_
13750 66 72 61 67 6d 65 6e 74 20 6c 69 74 76 61 6c 75  fragment litvalu
13760 65 20 7b 6c 69 74 65 72 61 6c 20 76 61 6c 75 65  e {literal value
13770 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74 65  }</tcl>.<h3>Lite
13780 72 61 6c 20 56 61 6c 75 65 73 20 28 43 6f 6e 73  ral Values (Cons
13790 74 61 6e 74 73 29 3c 2f 68 33 3e 0a 3c 70 3e 0a  tants)</h3>.<p>.
137a0 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  A literal value 
137b0 72 65 70 72 65 73 65 6e 74 73 20 61 20 63 6f 6e  represents a con
137c0 73 74 61 6e 74 2e 0a 5e 4c 69 74 65 72 61 6c 20  stant..^Literal 
137d0 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 69 6e  values may be in
137e0 74 65 67 65 72 73 2c 20 66 6c 6f 61 74 69 6e 67  tegers, floating
137f0 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2c 20   point numbers, 
13800 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42 73 2c 20  strings,.BLOBs, 
13810 6f 72 20 4e 55 4c 4c 73 2e 0a 3c 70 3e 0a 54 68  or NULLs..<p>.Th
13820 65 20 73 79 6e 74 61 78 20 66 6f 72 20 69 6e 74  e syntax for int
13830 65 67 65 72 20 61 6e 64 20 66 6c 6f 61 74 69 6e  eger and floatin
13840 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 73  g point literals
13850 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 0a 22   (collectively."
13860 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c 73  numeric literals
13870 22 29 20 69 73 20 73 68 6f 77 6e 20 62 79 20 74  ") is shown by t
13880 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61  he following dia
13890 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  gram:</p>..<tcl>
138a0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6e 75  BubbleDiagram nu
138b0 6d 65 72 69 63 2d 6c 69 74 65 72 61 6c 3c 2f 74  meric-literal</t
138c0 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49 66 20 61 20  cl>..<p>.^(If a 
138d0 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c 20  numeric literal 
138e0 68 61 73 20 61 20 64 65 63 69 6d 61 6c 20 70 6f  has a decimal po
138f0 69 6e 74 20 6f 72 20 61 6e 20 65 78 70 6f 6e 65  int or an expone
13900 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65 20  ntiation.clause 
13910 6f 72 20 69 66 20 69 74 73 20 6d 61 67 6e 69 74  or if its magnit
13920 75 64 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e  ude is less than
13930 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
13940 37 35 38 30 38 20 6f 72 0a 67 72 65 61 74 65 72  75808 or.greater
13950 20 74 68 61 6e 20 39 32 32 33 33 37 32 30 33 36   than 9223372036
13960 38 35 34 37 37 35 38 30 37 2c 20 74 68 65 6e 20  854775807, then 
13970 69 74 20 69 73 20 61 20 66 6c 6f 61 74 69 6e 67  it is a floating
13980 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 2e 0a   point literal..
13990 4f 74 68 65 72 77 69 73 65 20 69 73 20 69 74 20  Otherwise is it 
139a0 69 73 20 61 6e 20 20 69 6e 74 65 67 65 72 20 6c  is an  integer l
139b0 69 74 65 72 61 6c 2e 29 5e 0a 5e 54 68 65 20 22  iteral.)^.^The "
139c0 45 22 20 63 68 61 72 61 63 74 65 72 20 74 68 61  E" character tha
139d0 74 20 62 65 67 69 6e 73 20 74 68 65 20 65 78 70  t begins the exp
139e0 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75  onentiation.clau
139f0 73 65 20 6f 66 20 61 20 66 6c 6f 61 74 69 6e 67  se of a floating
13a00 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20 63   point literal c
13a10 61 6e 20 62 65 20 65 69 74 68 65 72 20 75 70 70  an be either upp
13a20 65 72 20 6f 72 20 6c 6f 77 65 72 20 63 61 73 65  er or lower case
13a30 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63 68 61 72  ..^(The "." char
13a40 61 63 74 65 72 20 69 73 20 61 6c 77 61 79 73 20  acter is always 
13a50 75 73 65 64 20 0a 61 73 20 74 68 65 20 64 65 63  used .as the dec
13a60 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20  imal point even 
13a70 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20 73 65  if the locale se
13a80 74 74 69 6e 67 20 73 70 65 63 69 66 69 65 73 20  tting specifies 
13a90 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c  "," for.this rol
13aa0 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66 20 22  e - the use of "
13ab0 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63 69 6d  ," for the decim
13ac0 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72  al point would r
13ad0 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74  esult in.syntact
13ae0 69 63 20 61 6d 62 69 67 75 69 74 79 2e 29 5e 0a  ic ambiguity.)^.
13af0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
13b00 74 20 68 65 78 69 6e 74 20 7b 68 65 78 61 64 65  t hexint {hexade
13b10 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69  cimal integer li
13b20 74 65 72 61 6c 73 7d 20 7b 68 65 78 61 64 65 63  terals} {hexadec
13b30 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 7d 3c 2f  imal integers}</
13b40 74 63 6c 3e 0a 3c 70 3e 5e 48 65 78 61 64 65 63  tcl>.<p>^Hexadec
13b50 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69 74  imal integer lit
13b60 65 72 61 6c 73 20 66 6f 6c 6c 6f 77 20 74 68 65  erals follow the
13b70 20 43 2d 6c 61 6e 67 75 61 67 65 20 6e 6f 74 61   C-language nota
13b80 74 69 6f 6e 20 6f 66 0a 22 30 78 22 20 6f 72 20  tion of."0x" or 
13b90 22 30 58 22 20 66 6f 6c 6c 6f 77 65 64 20 62 79  "0X" followed by
13ba0 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 69 67   hexadecimal dig
13bb0 69 74 73 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c  its..^For exampl
13bc0 65 2c 20 30 78 31 32 33 34 20 6d 65 61 6e 73 20  e, 0x1234 means 
13bd0 74 68 65 20 73 61 6d 65 20 61 73 20 34 36 36 30  the same as 4660
13be0 0a 61 6e 64 20 30 78 38 30 30 30 30 30 30 30 30  .and 0x800000000
13bf0 30 30 30 30 30 30 30 20 6d 65 61 6e 73 20 74 68  0000000 means th
13c00 65 20 73 61 6d 65 20 61 73 20 2d 39 32 32 33 33  e same as -92233
13c10 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e 0a  72036854775808..
13c20 20 5e 28 48 65 78 61 64 65 63 69 6d 61 6c 20 69   ^(Hexadecimal i
13c30 6e 74 65 67 65 72 20 6c 69 74 65 72 61 6c 73 20  nteger literals 
13c40 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
13c50 61 73 20 36 34 2d 62 69 74 0a 74 77 6f 27 73 2d  as 64-bit.two's-
13c60 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
13c70 65 72 73 20 61 6e 64 20 61 72 65 20 74 68 75 73  ers and are thus
13c80 20 6c 69 6d 69 74 65 64 0a 74 6f 20 73 69 78 74   limited.to sixt
13c90 65 65 6e 20 73 69 67 6e 69 66 69 63 61 6e 74 20  een significant 
13ca0 64 69 67 69 74 73 20 6f 66 20 70 72 65 63 69 73  digits of precis
13cb0 69 6f 6e 2e 29 5e 0a 53 75 70 70 6f 72 74 20 66  ion.)^.Support f
13cc0 6f 72 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69  or hexadecimal i
13cd0 6e 74 65 67 65 72 73 20 77 61 73 20 61 64 64 65  ntegers was adde
13ce0 64 20 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73  d to SQLite vers
13cf0 69 6f 6e 20 33 2e 38 2e 36 2e 0a 5e 46 6f 72 20  ion 3.8.6..^For 
13d00 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74  backwards compat
13d10 69 62 69 6c 69 74 79 2c 20 74 68 65 20 22 30 78  ibility, the "0x
13d20 22 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e  " hexadecimal in
13d30 74 65 67 65 72 0a 6e 6f 74 61 74 69 6f 6e 20 69  teger.notation i
13d40 73 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74 6f 6f  s only understoo
13d50 64 20 62 79 20 74 68 65 20 53 51 4c 20 6c 61 6e  d by the SQL lan
13d60 67 75 61 67 65 20 70 61 72 73 65 72 2c 20 6e 6f  guage parser, no
13d70 74 20 62 79 20 74 68 65 0a 74 79 70 65 20 63 6f  t by the.type co
13d80 6e 76 65 72 73 69 6f 6e 73 20 72 6f 75 74 69 6e  nversions routin
13d90 65 73 2e 0a 5e 28 53 74 72 69 6e 67 20 76 61 72  es..^(String var
13da0 69 61 62 6c 65 73 20 74 68 61 74 0a 63 6f 6e 74  iables that.cont
13db0 61 69 6e 20 74 65 78 74 20 66 6f 72 6d 61 74 74  ain text formatt
13dc0 65 64 20 6c 69 6b 65 20 68 65 78 61 64 65 63 69  ed like hexadeci
13dd0 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 61 72 65  mal integers are
13de0 20 6e 6f 74 0a 69 6e 74 65 72 70 72 65 74 65 64   not.interpreted
13df0 20 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20   as hexadecimal 
13e00 69 6e 74 65 67 65 72 73 20 77 68 65 6e 20 63 6f  integers when co
13e10 65 72 63 69 6e 67 20 74 68 65 20 73 74 72 69 6e  ercing the strin
13e20 67 20 76 61 6c 75 65 0a 69 6e 74 6f 20 61 6e 20  g value.into an 
13e30 69 6e 74 65 67 65 72 20 64 75 65 20 74 6f 20 61  integer due to a
13e40 20 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f   [CAST expressio
13e50 6e 5d 20 6f 72 20 66 6f 72 20 61 20 5b 63 6f 6c  n] or for a [col
13e60 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 0a 74 72  umn affinity].tr
13e70 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 6f 72 20  ansformation or 
13e80 70 72 69 6f 72 20 74 6f 20 70 65 72 66 6f 72 6d  prior to perform
13e90 69 6e 67 20 61 20 6e 75 6d 65 72 69 63 20 6f 70  ing a numeric op
13ea0 65 72 61 74 69 6f 6e 20 6f 72 20 66 6f 72 0a 61  eration or for.a
13eb0 6e 79 20 6f 74 68 65 72 20 72 75 6e 2d 74 69 6d  ny other run-tim
13ec0 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 29 5e  e conversions.)^
13ed0 20 20 5e 28 57 68 65 6e 20 63 6f 65 72 63 69 6e    ^(When coercin
13ee0 67 20 61 0a 73 74 72 69 6e 67 20 76 61 6c 75 65  g a.string value
13ef0 20 69 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f   in the format o
13f00 66 20 61 20 68 65 78 61 64 65 63 69 6d 61 6c 20  f a hexadecimal 
13f10 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61 6e 20  integer into an 
13f20 69 6e 74 65 67 65 72 0a 76 61 6c 75 65 2c 20 74  integer.value, t
13f30 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 70 72  he conversion pr
13f40 6f 63 65 73 73 20 73 74 6f 70 73 20 77 68 65 6e  ocess stops when
13f50 20 74 68 65 20 27 78 27 20 63 68 61 72 61 63 74   the 'x' charact
13f60 65 72 20 69 73 20 73 65 65 6e 0a 73 6f 20 74 68  er is seen.so th
13f70 65 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 74 65  e resulting inte
13f80 67 65 72 20 76 61 6c 75 65 20 69 73 20 61 6c 77  ger value is alw
13f90 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 5e 28 53 51  ays zero.)^.^(SQ
13fa0 4c 69 74 65 20 6f 6e 6c 79 20 75 6e 64 65 72 73  Lite only unders
13fb0 74 61 6e 64 73 20 74 68 65 20 68 65 78 61 64 65  tands the hexade
13fc0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6e 6f  cimal integer no
13fd0 74 61 74 69 6f 6e 20 77 68 65 6e 20 69 74 0a 61  tation when it.a
13fe0 70 70 65 61 72 73 20 69 6e 20 74 68 65 20 53 51  ppears in the SQ
13ff0 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78 74  L statement text
14000 2c 20 6e 6f 74 20 77 68 65 6e 20 69 74 20 61 70  , not when it ap
14010 70 65 61 72 73 20 61 73 0a 70 61 72 74 20 6f 66  pears as.part of
14020 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
14030 74 68 65 20 64 61 74 61 62 61 73 65 2e 29 5e 0a  the database.)^.
14040 0a 3c 70 3e 20 5e 41 20 73 74 72 69 6e 67 20 63  .<p> ^A string c
14050 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72 6d 65  onstant is forme
14060 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67 20 74  d by enclosing t
14070 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73 69 6e  he.string in sin
14080 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29 2e 20  gle quotes ('). 
14090 20 5e 41 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   ^A single quote
140a0 20 77 69 74 68 69 6e 20 74 68 65 20 73 74 72 69   within the stri
140b0 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f 64 65  ng can.be encode
140c0 64 20 62 79 20 70 75 74 74 69 6e 67 20 74 77 6f  d by putting two
140d0 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69   single quotes i
140e0 6e 20 61 20 72 6f 77 20 2d 20 61 73 20 69 6e 20  n a row - as in 
140f0 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c 65 20  Pascal..C-style 
14100 65 73 63 61 70 65 73 20 75 73 69 6e 67 20 74 68  escapes using th
14110 65 20 62 61 63 6b 73 6c 61 73 68 20 63 68 61 72  e backslash char
14120 61 63 74 65 72 20 61 72 65 20 6e 6f 74 20 73 75  acter are not su
14130 70 70 6f 72 74 65 64 20 62 65 63 61 75 73 65 0a  pported because.
14140 74 68 65 79 20 61 72 65 20 6e 6f 74 20 73 74 61  they are not sta
14150 6e 64 61 72 64 20 53 51 4c 2e 0a 0a 3c 70 3e 20  ndard SQL...<p> 
14160 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73 20 61  ^BLOB literals a
14170 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61  re string litera
14180 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65  ls containing he
14190 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61 20 61  xadecimal data a
141a0 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79 20 61  nd.preceded by a
141b0 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72 20 22   single "x" or "
141c0 58 22 20 63 68 61 72 61 63 74 65 72 2e 20 20 5e  X" character.  ^
141d0 28 45 78 61 6d 70 6c 65 3a 20 58 27 35 33 35 31  (Example: X'5351
141e0 34 43 36 39 37 34 36 35 27 29 5e 0a 0a 3c 70 3e  4C697465')^..<p>
141f0 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75  .^A literal valu
14200 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68  e can also be th
14210 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a  e token "NULL"..
14220 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
14230 61 67 6d 65 6e 74 20 76 61 72 70 61 72 61 6d 20  agment varparam 
14240 70 61 72 61 6d 65 74 65 72 20 70 61 72 61 6d 65  parameter parame
14250 74 65 72 73 20 7b 62 6f 75 6e 64 20 70 61 72 61  ters {bound para
14260 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70 61  meter} {bound pa
14270 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a  rameters}</tcl>.
14280 3c 68 33 3e 50 61 72 61 6d 65 74 65 72 73 3c 2f  <h3>Parameters</
14290 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69 61  h3>.<p>.A "varia
142a0 62 6c 65 22 20 6f 72 20 22 70 61 72 61 6d 65 74  ble" or "paramet
142b0 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69 66  er" token.specif
142c0 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64 65  ies a placeholde
142d0 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
142e0 69 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75 65  ion for a .value
142f0 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64 20   that is filled 
14300 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  in at runtime us
14310 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33  ing the.[sqlite3
14320 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73  _bind_blob() | s
14330 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 66  qlite3_bind()] f
14340 61 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20 69  amily of C/C++ i
14350 6e 74 65 72 66 61 63 65 73 2e 0a 50 61 72 61 6d  nterfaces..Param
14360 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20 73  eters can take s
14370 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f  everal forms:.</
14380 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
14390 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74  .<table>.<tr>.<t
143a0 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
143b0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
143c0 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c  ?</b><i>NNN</i><
143d0 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
143e0 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41  0"></td>.<td>^(A
143f0 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66   question mark f
14400 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d  ollowed by a num
14410 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68  ber <i>NNN</i> h
14420 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20  olds a spot for 
14430 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d  the.NNN-th param
14440 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20  eter.  NNN must 
14450 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  be between 1 and
14460 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
14470 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e  IABLE_NUMBER].)^
14480 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
14490 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
144a0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
144b0 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  ><b>?</b></td><t
144c0 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
144d0 64 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74 69  d>.<td>^A questi
144e0 6f 6e 20 6d 61 72 6b 20 74 68 61 74 20 69 73 20  on mark that is 
144f0 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  not followed by 
14500 61 20 6e 75 6d 62 65 72 20 63 72 65 61 74 65 73  a number creates
14510 20 61 20 70 61 72 61 6d 65 74 65 72 0a 77 69 74   a parameter.wit
14520 68 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20 67  h a number one g
14530 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
14540 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65  largest paramete
14550 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79  r number already
14560 20 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20 74   assigned..^If t
14570 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61  his means the pa
14580 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69  rameter number i
14590 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 5b  s greater than.[
145a0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
145b0 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20  BLE_NUMBER], it 
145c0 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 54 68 69  is an error..Thi
145d0 73 20 70 61 72 61 6d 65 74 65 72 20 66 6f 72 6d  s parameter form
145e0 61 74 20 69 73 20 70 72 6f 76 69 64 65 64 20 66  at is provided f
145f0 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
14600 20 77 69 74 68 20 6f 74 68 65 72 20 64 61 74 61   with other data
14610 62 61 73 65 0a 65 6e 67 69 6e 65 73 2e 20 20 42  base.engines.  B
14620 75 74 20 62 65 63 61 75 73 65 20 69 74 20 69 73  ut because it is
14630 20 65 61 73 79 20 74 6f 20 6d 69 73 63 6f 75 6e   easy to miscoun
14640 74 20 74 68 65 20 71 75 65 73 74 69 6f 6e 20 6d  t the question m
14650 61 72 6b 73 2c 20 74 68 65 0a 75 73 65 20 6f 66  arks, the.use of
14660 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
14670 66 6f 72 6d 61 74 20 69 73 20 64 69 73 63 6f 75  format is discou
14680 72 61 67 65 64 2e 20 20 50 72 6f 67 72 61 6d 6d  raged.  Programm
14690 65 72 73 20 61 72 65 20 65 6e 63 6f 75 72 61 67  ers are encourag
146a0 65 64 0a 74 6f 20 75 73 65 20 6f 6e 65 20 6f 66  ed.to use one of
146b0 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 66 6f   the symbolic fo
146c0 72 6d 61 74 73 20 62 65 6c 6f 77 20 6f 72 20 74  rmats below or t
146d0 68 65 20 3f 4e 4e 4e 20 66 6f 72 6d 61 74 20 61  he ?NNN format a
146e0 62 6f 76 65 20 69 6e 73 74 65 61 64 2e 0a 3c 2f  bove instead..</
146f0 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
14700 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
14710 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
14720 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >:</b><i>AAAA</i
14730 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
14740 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
14750 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64  A colon followed
14760 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
14770 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73  r name holds a s
14780 70 6f 74 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69  pot for a .[sqli
14790 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
147a0 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61  er_name|named pa
147b0 72 61 6d 65 74 65 72 5d 20 77 69 74 68 20 74 68  rameter] with th
147c0 65 20 6e 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a  e name :AAAA.  .
147d0 5e 28 4e 61 6d 65 64 20 70 61 72 61 6d 65 74 65  ^(Named paramete
147e0 72 73 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62  rs are also numb
147f0 65 72 65 64 2e 20 54 68 65 20 6e 75 6d 62 65 72  ered. The number
14800 20 61 73 73 69 67 6e 65 64 20 69 73 20 6f 6e 65   assigned is one
14810 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 74 68   greater than.th
14820 65 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65  e largest parame
14830 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61  ter number alrea
14840 64 79 20 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e  dy assigned.)^ ^
14850 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68  If this means th
14860 65 20 70 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c  e parameter.woul
14870 64 20 62 65 20 61 73 73 69 67 6e 65 64 20 61 20  d be assigned a 
14880 6e 75 6d 62 65 72 20 67 72 65 61 74 65 72 20 74  number greater t
14890 68 61 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  han [SQLITE_MAX_
148a0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
148b0 2c 20 69 74 20 69 73 0a 61 6e 20 65 72 72 6f 72  , it is.an error
148c0 2e 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  . To avoid confu
148d0 73 69 6f 6e 2c 20 69 74 20 69 73 20 62 65 73 74  sion, it is best
148e0 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67   to avoid mixing
148f0 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65   named and numbe
14900 72 65 64 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c  red.parameters.<
14910 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
14920 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
14930 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
14940 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>@</b><i>AAAA</
14950 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
14960 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
14970 5e 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f  ^An "at" sign wo
14980 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
14990 20 61 20 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74   a colon, except
149a0 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20 6f   that the name o
149b0 66 0a 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f.the parameter 
149c0 63 72 65 61 74 65 64 20 69 73 20 40 41 41 41 41  created is @AAAA
149d0 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
149e0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
149f0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
14a00 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41  ><b>$</b><i>AAAA
14a10 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </i></td><td wid
14a20 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
14a30 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e  d>^A dollar-sign
14a40 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
14a50 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20  identifier name 
14a60 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f  also holds a spo
14a70 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61  t for a named.pa
14a80 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68 65  rameter with the
14a90 20 6e 61 6d 65 20 24 41 41 41 41 2e 20 20 5e 28   name $AAAA.  ^(
14aa0 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e  The identifier n
14ab0 61 6d 65 20 69 6e 20 74 68 69 73 20 63 61 73 65  ame in this case
14ac0 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65   can include.one
14ad0 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72 72 65   or more occurre
14ae0 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64  nces of "::" and
14af0 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73   a suffix enclos
14b00 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f  ed in "(...)" co
14b10 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78  ntaining.any tex
14b20 74 20 61 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69  t at all.)^  Thi
14b30 73 20 73 79 6e 74 61 78 20 69 73 20 74 68 65 20  s syntax is the 
14b40 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62  form of a variab
14b50 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b  le name in the.[
14b60 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74  http://www.tcl.t
14b70 6b 2f 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d  k/ | Tcl program
14b80 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20  ming language]. 
14b90 20 54 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66   The presence.of
14ba0 20 74 68 69 73 20 73 79 6e 74 61 78 20 72 65 73   this syntax res
14bb0 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61  ults from the fa
14bc0 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 69  ct that SQLite i
14bd0 73 20 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c  s really a .[Tcl
14be0 20 65 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74   extension] that
14bf0 20 68 61 73 20 65 73 63 61 70 65 64 20 69 6e 74   has escaped int
14c00 6f 20 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e  o the wild.</td>
14c10 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
14c20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
14c30 70 3e 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68  p>^Parameters th
14c40 61 74 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67  at are not assig
14c50 6e 65 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67  ned values using
14c60 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  .[sqlite3_bind_b
14c70 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f  lob() | sqlite3_
14c80 62 69 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61  bind()] are trea
14c90 74 65 64 0a 61 73 20 4e 55 4c 4c 2e 20 20 54 68  ted.as NULL.  Th
14ca0 65 20 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  e [sqlite3_bind_
14cb0 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
14cc0 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e  )] interface can
14cd0 20 62 65 20 75 73 65 64 0a 74 6f 20 74 72 61 6e   be used.to tran
14ce0 73 6c 61 74 65 20 61 20 73 79 6d 62 6f 6c 69 63  slate a symbolic
14cf0 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65 20   parameter name 
14d00 69 6e 74 6f 20 69 74 73 20 65 71 75 69 76 61 6c  into its equival
14d10 65 6e 74 20 6e 75 6d 65 72 69 63 20 69 6e 64 65  ent numeric inde
14d20 78 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  x.</p>..<p>^The 
14d30 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65  maximum paramete
14d40 72 20 6e 75 6d 62 65 72 20 69 73 20 73 65 74 20  r number is set 
14d50 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
14d60 62 79 0a 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d  by.the [SQLITE_M
14d70 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
14d80 45 52 5d 20 6d 61 63 72 6f 2e 20 20 5e 28 41 6e  ER] macro.  ^(An
14d90 20 69 6e 64 69 76 69 64 75 61 6c 20 5b 64 61 74   individual [dat
14da0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
14db0 5d 0a 44 20 63 61 6e 20 72 65 64 75 63 65 20 69  ].D can reduce i
14dc0 74 73 20 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d  ts maximum param
14dd0 65 74 65 72 20 6e 75 6d 62 65 72 20 62 65 6c 6f  eter number belo
14de0 77 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  w the compile-ti
14df0 6d 65 20 6d 61 78 69 6d 75 6d 0a 75 73 69 6e 67  me maximum.using
14e00 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69   the [sqlite3_li
14e10 6d 69 74 5d 28 44 2c 20 5b 53 51 4c 49 54 45 5f  mit](D, [SQLITE_
14e20 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e  LIMIT_VARIABLE_N
14e30 55 4d 42 45 52 5d 2c 2e 2e 2e 29 20 69 6e 74 65  UMBER],...) inte
14e40 72 66 61 63 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c  rface.)^.</p>..<
14e50 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
14e60 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45  like LIKE ESCAPE
14e70 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c  </tcl>.<h3>The L
14e80 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f 70 65  IKE and GLOB ope
14e90 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
14ea0 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  The LIKE operato
14eb0 72 20 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e  r does a pattern
14ec0 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72   matching compar
14ed0 69 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65 72 61  ison. ^The opera
14ee0 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74 20  nd.to the right 
14ef0 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f 70 65 72  of the LIKE oper
14f00 61 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20 74 68  ator contains th
14f10 65 20 70 61 74 74 65 72 6e 20 61 6e 64 20 74 68  e pattern and th
14f20 65 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70 65 72  e left hand.oper
14f30 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  and contains the
14f40 20 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63 68   string to match
14f50 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61 74   against the pat
14f60 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70  tern...<tcl>hd_p
14f70 75 74 73 20 22 5e 41 20 70 65 72 63 65 6e 74 20  uts "^A percent 
14f80 73 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29 20 69  symbol (\"%\") i
14f90 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65  n the LIKE patte
14fa0 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73  rn matches any.s
14fb0 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20  equence of zero 
14fc0 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65  or more characte
14fd0 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  rs in the string
14fe0 2e 20 20 5e 41 6e 20 75 6e 64 65 72 73 63 6f 72  .  ^An underscor
14ff0 65 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68 65  e.(\"_\") in the
15000 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61   LIKE pattern ma
15010 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65  tches any single
15020 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68   character in th
15030 65 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41 6e 79  e.string.  ^(Any
15040 20 6f 74 68 65 72 20 63 68 61 72 61 63 74 65 72   other character
15050 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66 20   matches itself 
15060 6f 72 20 69 74 73 20 6c 6f 77 65 72 2f 75 70 70  or its lower/upp
15070 65 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c 65  er case.equivale
15080 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e  nt (i.e. case-in
15090 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68 69  sensitive matchi
150a0 6e 67 29 2e 29 5e 20 20 28 41 20 62 75 67 3a 20  ng).)^  (A bug: 
150b0 5e 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64  ^SQLite only.und
150c0 65 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c  erstands upper/l
150d0 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20 41 53  ower case for AS
150e0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 62  CII characters b
150f0 79 20 64 65 66 61 75 6c 74 2e 20 20 5e 54 68 65  y default.  ^The
15100 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69  .LIKE operator i
15110 73 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  s case sensitive
15120 20 62 79 20 64 65 66 61 75 6c 74 20 66 6f 72 20   by default for 
15130 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74 65  unicode characte
15140 72 73 20 74 68 61 74 20 61 72 65 0a 62 65 79 6f  rs that are.beyo
15150 6e 64 20 74 68 65 20 41 53 43 49 49 20 72 61 6e  nd the ASCII ran
15160 67 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ge.  For example
15170 2c 0a 5e 74 68 65 20 65 78 70 72 65 73 73 69 6f  ,.^the expressio
15180 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49  n <b>'a'&nbsp;LI
15190 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a  KE&nbsp;'A'</b>.
151a0 69 73 20 54 52 55 45 20 62 75 74 20 3c 62 3e 27  is TRUE but <b>'
151b0 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49  &aelig;'&nbsp;LI
151c0 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b  KE&nbsp;'&AElig;
151d0 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e 29  '</b> is FALSE.)
151e0 3c 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  <p>"</tcl>..<p>^
151f0 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
15200 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73  ESCAPE clause is
15210 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
15220 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f  he expression.fo
15230 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41  llowing the ESCA
15240 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20  PE keyword must 
15250 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74  evaluate to a st
15260 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20  ring consisting 
15270 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72  of.a single char
15280 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68 61  acter. ^This cha
15290 72 61 63 74 65 72 20 6d 61 79 20 62 65 20 75 73  racter may be us
152a0 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70  ed in the LIKE p
152b0 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64  attern.to includ
152c0 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e  e literal percen
152d0 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20  t or underscore 
152e0 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68 65  characters. ^The
152f0 20 65 73 63 61 70 65 0a 63 68 61 72 61 63 74 65   escape.characte
15300 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  r followed by a 
15310 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28  percent symbol (
15320 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 28  %), underscore (
15330 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a  _), or a second.
15340 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
15350 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72  escape character
15360 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20   itself matches 
15370 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e  a.literal percen
15380 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73  t symbol, unders
15390 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c  core, or a singl
153a0 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74  e escape charact
153b0 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79  er,.respectively
153c0 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78  ...<p>^The infix
153d0 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69   LIKE operator i
153e0 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
153f0 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70   calling the.app
15400 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
15410 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b   SQL functions [
15420 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  like(<i>Y</i>,<i
15430 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b  >X</i>)] or.[lik
15440 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  e(<i>Y</i>,<i>X<
15450 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f  /i>,<i>Z</i>)]</
15460 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  a>.</p>..<p>^The
15470 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63   LIKE operator c
15480 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65 20  an be made case 
15490 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67 20  sensitive using 
154a0 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74  the.[case_sensit
154b0 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d  ive_like pragma]
154c0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
154d0 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f  ragment glob GLO
154e0 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  B</tcl>.<p>^The 
154f0 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69 73  GLOB operator is
15500 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45   similar to LIKE
15510 20 62 75 74 20 75 73 65 73 20 74 68 65 20 55 6e   but uses the Un
15520 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67  ix.file globbing
15530 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73 20   syntax for its 
15540 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c 73  wildcards.  ^Als
15550 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65 0a  o, GLOB is case.
15560 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b  sensitive, unlik
15570 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47  e LIKE.  ^Both G
15580 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79  LOB and LIKE may
15590 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 0a   be preceded by.
155a0 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20  the NOT keyword 
155b0 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65  to invert the se
155c0 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e  nse of the test.
155d0 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c 4f    ^The infix GLO
155e0 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69  B .operator is i
155f0 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
15600 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  lling the functi
15610 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69  on.[glob(<i>Y</i
15620 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64  >,<i>X</i>)] and
15630 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64   can be modified
15640 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74   by overriding.t
15650 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70  hat function.</p
15660 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
15670 65 6e 74 20 72 65 67 65 78 70 20 52 45 47 45 58  ent regexp REGEX
15680 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  P</tcl>.<p>^The 
15690 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20  REGEXP operator 
156a0 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e  is a special syn
156b0 74 61 78 20 66 6f 72 20 74 68 65 20 72 65 67 65  tax for the rege
156c0 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69  xp().user functi
156d0 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70 28  on.  ^No regexp(
156e0 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  ) user function 
156f0 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 64 65  is defined by de
15700 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65  fault.and so use
15710 20 6f 66 20 74 68 65 20 52 45 47 45 58 50 20 6f   of the REGEXP o
15720 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72  perator will nor
15730 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e 20  mally result in 
15740 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an.error message
15750 2e 20 20 5e 49 66 20 61 6e 20 5b 61 70 70 6c 69  .  ^If an [appli
15760 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53  cation-defined S
15770 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d  QL function] nam
15780 65 64 20 22 72 65 67 65 78 70 22 0a 69 73 20 61  ed "regexp".is a
15790 64 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  dded at run-time
157a0 2c 20 74 68 65 6e 20 74 68 65 20 22 3c 69 3e 58  , then the "<i>X
157b0 3c 2f 69 3e 20 52 45 47 45 58 50 20 3c 69 3e 59  </i> REGEXP <i>Y
157c0 3c 2f 69 3e 22 20 6f 70 65 72 61 74 6f 72 20 77  </i>" operator w
157d0 69 6c 6c 0a 62 65 20 69 6d 70 6c 65 6d 65 6e 74  ill.be implement
157e0 65 64 20 61 73 20 61 20 63 61 6c 6c 20 74 6f 20  ed as a call to 
157f0 22 72 65 67 65 78 70 28 3c 69 3e 59 3c 2f 69 3e  "regexp(<i>Y</i>
15800 2c 3c 69 3e 58 3c 2f 69 3e 29 22 2e 3c 2f 70 3e  ,<i>X</i>)".</p>
15810 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
15820 6e 74 20 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f  nt match MATCH</
15830 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54  tcl>.<p>^The MAT
15840 43 48 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61  CH operator is a
15850 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20   special syntax 
15860 66 6f 72 20 74 68 65 20 6d 61 74 63 68 28 29 0a  for the match().
15870 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
15880 6e 65 64 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e  ned function.  ^
15890 54 68 65 20 64 65 66 61 75 6c 74 20 6d 61 74 63  The default matc
158a0 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70  h() function imp
158b0 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73  lementation.rais
158c0 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  es an exception 
158d0 61 6e 64 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c  and is not reall
158e0 79 20 75 73 65 66 75 6c 20 66 6f 72 20 61 6e 79  y useful for any
158f0 74 68 69 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65  thing..^But exte
15900 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72  nsions can overr
15910 69 64 65 20 74 68 65 20 6d 61 74 63 68 28 29 20  ide the match() 
15920 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f  function with mo
15930 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63  re.helpful logic
15940 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
15950 72 61 67 6d 65 6e 74 20 62 65 74 77 65 65 6e 20  ragment between 
15960 42 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68  BETWEEN</tcl>.<h
15970 33 3e 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70  3>The BETWEEN op
15980 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e  erator</h3>.<p>^
15990 28 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65  (The BETWEEN ope
159a0 72 61 74 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c  rator is logical
159b0 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  ly equivalent to
159c0 20 61 20 70 61 69 72 20 6f 66 20 63 6f 6d 70 61   a pair of compa
159d0 72 69 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69  risons.."<i>x</i
159e0 3e 20 3c 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e  > <b>BETWEEN</b>
159f0 20 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44   <i>y</i> <b>AND
15a00 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69  </b> <i>z</i>" i
15a10 73 20 0a 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  s .equivalent to
15a20 20 0a 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67   ."<i>x</i><b>&g
15a30 74 3b 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20  t;=</b><i>y</i> 
15a40 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c  <b>AND</b> <i>x<
15a50 2f 69 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c  /i><b>&lt;=</b><
15a60 69 3e 7a 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a  i>z</i>" except.
15a70 74 68 61 74 20 77 69 74 68 20 42 45 54 57 45 45  that with BETWEE
15a80 4e 2c 20 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20  N, the <i>x</i> 
15a90 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e  expression is on
15aa0 6c 79 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  ly evaluated onc
15ab0 65 2e 29 5e 0a 5e 54 68 65 20 70 72 65 63 65 64  e.)^.^The preced
15ac0 65 6e 63 65 20 6f 66 20 74 68 65 20 42 45 54 57  ence of the BETW
15ad0 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20  EEN operator is 
15ae0 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
15af0 70 72 65 63 65 64 65 6e 63 65 0a 61 73 20 6f 70  precedence.as op
15b00 65 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62  erators <b>==</b
15b10 3e 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20  > and <b>!=</b> 
15b20 61 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20  and <b>LIKE</b> 
15b30 61 6e 64 20 67 72 6f 75 70 73 20 6c 65 66 74 20  and groups left 
15b40 74 6f 20 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e  to right...<tcl>
15b50 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 65  hd_fragment case
15b60 20 7b 43 41 53 45 20 65 78 70 72 65 73 73 69 6f   {CASE expressio
15b70 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  n}</tcl>.<h3>The
15b80 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
15b90 3c 2f 68 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20  </h3>.<p>A CASE 
15ba0 65 78 70 72 65 73 73 69 6f 6e 20 73 65 72 76 65  expression serve
15bb0 73 20 61 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72  s a role similar
15bc0 20 74 6f 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45   to IF-THEN-ELSE
15bd0 20 69 6e 20 6f 74 68 65 72 0a 70 72 6f 67 72 61   in other.progra
15be0 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e  mming languages.
15bf0 20 20 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f    ..<p>The optio
15c00 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 74  nal expression t
15c10 68 61 74 20 6f 63 63 75 72 73 20 69 6e 20 62 65  hat occurs in be
15c20 74 77 65 65 6e 20 74 68 65 20 43 41 53 45 20 6b  tween the CASE k
15c30 65 79 77 6f 72 64 20 61 6e 64 20 74 68 65 0a 66  eyword and the.f
15c40 69 72 73 74 20 57 48 45 4e 20 6b 65 79 77 6f 72  irst WHEN keywor
15c50 64 20 69 73 20 63 61 6c 6c 65 64 20 74 68 65 20  d is called the 
15c60 22 62 61 73 65 22 20 65 78 70 72 65 73 73 69 6f  "base" expressio
15c70 6e 2e 20 5e 54 68 65 72 65 20 61 72 65 20 74 77  n. ^There are tw
15c80 6f 20 62 61 73 69 63 20 66 6f 72 6d 73 0a 6f 66  o basic forms.of
15c90 20 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73   the CASE expres
15ca0 73 69 6f 6e 3a 20 74 68 6f 73 65 20 77 69 74 68  sion: those with
15cb0 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69   a base expressi
15cc0 6f 6e 20 61 6e 64 20 74 68 6f 73 65 20 77 69 74  on and those wit
15cd0 68 6f 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  hout...<p>^In a 
15ce0 43 41 53 45 20 77 69 74 68 6f 75 74 20 61 20 62  CASE without a b
15cf0 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ase expression, 
15d00 65 61 63 68 20 57 48 45 4e 20 65 78 70 72 65 73  each WHEN expres
15d10 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
15d20 64 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  d.and the result
15d30 20 74 72 65 61 74 65 64 20 61 73 20 61 20 62 6f   treated as a bo
15d40 6f 6c 65 61 6e 2c 20 73 74 61 72 74 69 6e 67 20  olean, starting 
15d50 77 69 74 68 20 74 68 65 20 6c 65 66 74 6d 6f 73  with the leftmos
15d60 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 69 6e 67  t and continuing
15d70 0a 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e  .to the right. ^
15d80 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
15d90 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
15da0 6e 20 69 73 20 74 68 65 20 65 76 61 6c 75 61 74  n is the evaluat
15db0 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 0a  ion of the THEN.
15dc0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
15dd0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
15de0 68 65 20 66 69 72 73 74 20 57 48 45 4e 20 65 78  he first WHEN ex
15df0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 65 76  pression that ev
15e00 61 6c 75 61 74 65 73 20 74 6f 0a 74 72 75 65 2e  aluates to.true.
15e10 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66   ^Or, if none of
15e20 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73   the WHEN expres
15e30 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74  sions evaluate t
15e40 6f 20 74 72 75 65 2c 20 74 68 65 20 72 65 73 75  o true, the resu
15e50 6c 74 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67  lt of.evaluating
15e60 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73   the ELSE expres
15e70 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49  sion, if any. ^I
15e80 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45 4c  f there is no EL
15e90 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  SE expression an
15ea0 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48  d.none of the WH
15eb0 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  EN expressions a
15ec0 72 65 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  re true, then th
15ed0 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c 74  e overall result
15ee0 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41   is NULL...<p>^A
15ef0 20 4e 55 4c 4c 20 72 65 73 75 6c 74 20 69 73 20   NULL result is 
15f00 63 6f 6e 73 69 64 65 72 65 64 20 75 6e 74 72 75  considered untru
15f10 65 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e  e when evaluatin
15f20 67 20 57 48 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c  g WHEN terms...<
15f30 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74  p>^In a CASE wit
15f40 68 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73  h a base express
15f50 69 6f 6e 2c 20 74 68 65 20 62 61 73 65 20 65 78  ion, the base ex
15f60 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
15f70 75 61 74 65 64 20 6a 75 73 74 0a 6f 6e 63 65 20  uated just.once 
15f80 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 69  and the result i
15f90 73 20 63 6f 6d 70 61 72 65 64 20 61 67 61 69 6e  s compared again
15fa0 73 74 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f  st the evaluatio
15fb0 6e 20 6f 66 20 65 61 63 68 20 57 48 45 4e 20 0a  n of each WHEN .
15fc0 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20  expression from 
15fd0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 5e  left to right. ^
15fe0 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
15ff0 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
16000 6e 20 69 73 20 74 68 65 20 0a 65 76 61 6c 75 61  n is the .evalua
16010 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e  tion of the THEN
16020 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
16030 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
16040 74 68 65 20 66 69 72 73 74 20 57 48 45 4e 0a 65  the first WHEN.e
16050 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 77 68  xpression for wh
16060 69 63 68 20 74 68 65 20 63 6f 6d 70 61 72 69 73  ich the comparis
16070 6f 6e 20 69 73 20 74 72 75 65 2e 20 5e 4f 72 2c  on is true. ^Or,
16080 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
16090 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 73  WHEN.expressions
160a0 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 76   evaluate to a v
160b0 61 6c 75 65 20 65 71 75 61 6c 20 74 6f 20 74 68  alue equal to th
160c0 65 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  e base expressio
160d0 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 6f 66  n, the result.of
160e0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
160f0 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 2c  ELSE expression,
16100 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68 65   if any. ^If the
16110 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65 78  re is no ELSE ex
16120 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e  pression and.non
16130 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78  e of the WHEN ex
16140 70 72 65 73 73 69 6f 6e 73 20 70 72 6f 64 75 63  pressions produc
16150 65 20 61 20 72 65 73 75 6c 74 20 65 71 75 61 6c  e a result equal
16160 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70   to the base exp
16170 72 65 73 73 69 6f 6e 2c 0a 74 68 65 20 6f 76 65  ression,.the ove
16180 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20 4e  rall result is N
16190 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63  ULL...<p>^When c
161a0 6f 6d 70 61 72 69 6e 67 20 61 20 62 61 73 65 20  omparing a base 
161b0 65 78 70 72 65 73 73 69 6f 6e 20 61 67 61 69 6e  expression again
161c0 73 74 20 61 20 57 48 45 4e 20 65 78 70 72 65 73  st a WHEN expres
161d0 73 69 6f 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63  sion, the same.c
161e0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
161f0 65 2c 20 61 66 66 69 6e 69 74 79 2c 20 61 6e 64  e, affinity, and
16200 20 4e 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72   NULL-handling r
16210 75 6c 65 73 20 61 70 70 6c 79 20 61 73 20 69 66  ules apply as if
16220 20 74 68 65 0a 62 61 73 65 20 65 78 70 72 65 73   the.base expres
16230 73 69 6f 6e 20 61 6e 64 20 57 48 45 4e 20 65 78  sion and WHEN ex
16240 70 72 65 73 73 69 6f 6e 20 61 72 65 20 72 65 73  pression are res
16250 70 65 63 74 69 76 65 6c 79 20 74 68 65 20 6c 65  pectively the le
16260 66 74 2d 20 61 6e 64 0a 72 69 67 68 74 2d 68 61  ft- and.right-ha
16270 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 61  nd operands of a
16280 6e 20 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c  n <big><b>=</b><
16290 2f 62 69 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c  /big> operator.<
162a0 2f 70 3e 20 5e 49 66 20 74 68 65 20 62 61 73 65  /p> ^If the base
162b0 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20   .expression is 
162c0 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
162d0 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45  sult of the CASE
162e0 20 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 72   is always the r
162f0 65 73 75 6c 74 20 0a 6f 66 20 65 76 61 6c 75 61  esult .of evalua
16300 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78  ting the ELSE ex
16310 70 72 65 73 73 69 6f 6e 20 69 66 20 69 74 20 65  pression if it e
16320 78 69 73 74 73 2c 20 6f 72 20 4e 55 4c 4c 20 69  xists, or NULL i
16330 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a  f it does not...
16340 3c 70 3e 5e 42 6f 74 68 20 66 6f 72 6d 73 20 6f  <p>^Both forms o
16350 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72 65  f the CASE expre
16360 73 73 69 6f 6e 20 75 73 65 20 6c 61 7a 79 2c 20  ssion use lazy, 
16370 6f 72 20 73 68 6f 72 74 2d 63 69 72 63 75 69 74  or short-circuit
16380 2c 20 0a 65 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a  , .evaluation...
16390 3c 70 3e 5e 28 54 68 65 20 6f 6e 6c 79 20 64 69  <p>^(The only di
163a0 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
163b0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
163c0 77 6f 20 43 41 53 45 20 65 78 70 72 65 73 73 69  wo CASE expressi
163d0 6f 6e 73 20 69 73 20 74 68 61 74 20 0a 74 68 65  ons is that .the
163e0 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73   <i>x</i> expres
163f0 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
16400 64 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69  d exactly once i
16410 6e 20 74 68 65 20 66 69 72 73 74 20 65 78 61 6d  n the first exam
16420 70 6c 65 20 62 75 74 20 0a 6d 69 67 68 74 20 62  ple but .might b
16430 65 20 65 76 61 6c 75 61 74 65 64 20 6d 75 6c 74  e evaluated mult
16440 69 70 6c 65 20 74 69 6d 65 73 20 69 6e 20 74 68  iple times in th
16450 65 20 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c  e second:..<ul><
16460 70 72 65 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20  pre>.<li>CASE x 
16470 57 48 45 4e 20 77 31 20 54 48 45 4e 20 72 31 20  WHEN w1 THEN r1 
16480 57 48 45 4e 20 77 32 20 54 48 45 4e 20 72 32 20  WHEN w2 THEN r2 
16490 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e  ELSE r3 END.<li>
164a0 43 41 53 45 20 57 48 45 4e 20 78 3d 77 31 20 54  CASE WHEN x=w1 T
164b0 48 45 4e 20 72 31 20 57 48 45 4e 20 78 3d 77 32  HEN r1 WHEN x=w2
164c0 20 54 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33   THEN r2 ELSE r3
164d0 20 45 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e   END.</pre></ul>
164e0 29 5e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  )^...<tcl>hd_fra
164f0 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e 20  gment in_op {IN 
16500 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 49  operator} {NOT I
16510 4e 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c  N operator}</tcl
16520 3e 0a 3c 68 33 3e 54 68 65 20 49 4e 20 61 6e 64  >.<h3>The IN and
16530 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
16540 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 49  s</h3>.<p>^The I
16550 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65  N and NOT IN ope
16560 72 61 74 6f 72 73 20 74 61 6b 65 20 61 20 73 69  rators take a si
16570 6e 67 6c 65 20 73 63 61 6c 61 72 20 6f 70 65 72  ngle scalar oper
16580 61 6e 64 20 6f 6e 20 74 68 65 0a 6c 65 66 74 20  and on the.left 
16590 61 6e 64 20 61 20 76 65 63 74 6f 72 20 6f 70 65  and a vector ope
165a0 72 61 6e 64 20 6f 6e 20 74 68 65 20 72 69 67 68  rand on the righ
165b0 74 0a 66 6f 72 6d 65 64 20 62 79 20 61 6e 20 65  t.formed by an e
165c0 78 70 6c 69 63 69 74 20 6c 69 73 74 20 6f 66 20  xplicit list of 
165d0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 73 63 61  zero or more sca
165e0 6c 61 72 73 20 6f 72 20 62 79 20 61 20 0a 73 69  lars or by a .si
165f0 6e 67 6c 65 20 73 75 62 71 75 65 72 79 2e 0a 5e  ngle subquery..^
16600 57 68 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f  When the right o
16610 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20  perand of an IN 
16620 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  or NOT IN operat
16630 6f 72 20 69 73 20 61 20 73 75 62 71 75 65 72 79  or is a subquery
16640 2c 20 74 68 65 0a 73 75 62 71 75 65 72 79 20 6d  , the.subquery m
16650 75 73 74 20 68 61 76 65 20 61 20 73 69 6e 67 6c  ust have a singl
16660 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 2e  e result column.
16670 0a 5e 57 68 65 6e 20 74 68 65 20 72 69 67 68 74  .^When the right
16680 20 6f 70 65 72 61 6e 64 20 69 73 20 61 6e 20 65   operand is an e
16690 6d 70 74 79 20 73 65 74 2c 20 74 68 65 20 72 65  mpty set, the re
166a0 73 75 6c 74 20 6f 66 20 49 4e 20 69 73 20 66 61  sult of IN is fa
166b0 6c 73 65 20 61 6e 64 20 74 68 65 0a 72 65 73 75  lse and the.resu
166c0 6c 74 20 6f 66 20 4e 4f 54 20 49 4e 20 69 73 20  lt of NOT IN is 
166d0 74 72 75 65 2c 20 72 65 67 61 72 64 6c 65 73 73  true, regardless
166e0 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f 70 65   of the left ope
166f0 72 61 6e 64 20 61 6e 64 20 65 76 65 6e 20 69 66  rand and even if
16700 20 74 68 65 0a 6c 65 66 74 20 6f 70 65 72 61 6e   the.left operan
16710 64 20 69 73 20 4e 55 4c 4c 2e 0a 5e 28 54 68 65  d is NULL..^(The
16720 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 49 4e   result of an IN
16730 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61   or NOT IN opera
16740 74 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65  tor is determine
16750 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d by the followi
16760 6e 67 0a 6d 61 74 72 69 78 3a 0a 0a 3c 63 65 6e  ng.matrix:..<cen
16770 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ter>.<table bord
16780 65 72 3d 31 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c  er=1>.<tr>.<th>L
16790 65 66 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e  eft operand <br>
167a0 69 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68  is NULL.<th>Righ
167b0 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 63 6f  t operand <br>co
167c0 6e 74 61 69 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e  ntains NULL.<th>
167d0 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20 3c 62  Right operand <b
167e0 72 3e 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65  r>is an empty se
167f0 74 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61  t.<th>Left opera
16800 6e 64 20 66 6f 75 6e 64 20 3c 62 72 3e 77 69 74  nd found <br>wit
16810 68 69 6e 20 72 69 67 68 74 20 6f 70 65 72 61 6e  hin right operan
16820 64 0a 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66 20  d.<th>Result of 
16830 3c 62 72 3e 49 4e 20 6f 70 65 72 61 74 6f 72 0a  <br>IN operator.
16840 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62  <th>Result of <b
16850 72 3e 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r>NOT IN operato
16860 72 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  r.<tr>.<td align
16870 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
16880 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16890 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
168a0 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
168b0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
168c0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
168d0 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67  ">false.<td alig
168e0 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a  n="center">true.
168f0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
16900 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74  center">does not
16910 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67   matter.<td alig
16920 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
16930 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16940 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  >yes.<td align="
16950 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
16960 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
16970 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  lse.<td align="c
16980 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e  enter">true.<tr>
16990 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
169a0 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
169b0 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
169c0 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
169d0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
169e0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
169f0 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
16a00 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c  ="center">true.<
16a10 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16a20 22 3e 66 61 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64  ">false.<tr>.<td
16a30 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16a40 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16a50 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c  nter">yes.<td al
16a60 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
16a70 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16a80 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16a90 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74  "center">NULL.<t
16aa0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16ab0 3e 4e 55 4c 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61  >NULL.<tr>.<td a
16ac0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
16ad0 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
16ae0 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
16af0 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
16b00 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
16b10 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f  lign="center">do
16b20 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74  es not matter.<t
16b30 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16b40 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d  >NULL.<td align=
16b50 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f  "center">NULL.</
16b60 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
16b70 29 5e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  )^..<p>^Note tha
16b80 74 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20  t SQLite allows 
16b90 74 68 65 20 70 61 72 65 6e 74 68 65 73 69 7a 65  the parenthesize
16ba0 64 20 6c 69 73 74 20 6f 66 20 73 63 61 6c 61 72  d list of scalar
16bb0 20 76 61 6c 75 65 73 20 6f 6e 0a 74 68 65 20 72   values on.the r
16bc0 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f  ight-hand side o
16bd0 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
16be0 4e 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  N operator to be
16bf0 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 20 62   an empty list b
16c00 75 74 0a 6d 6f 73 74 20 6f 74 68 65 72 20 53 51  ut.most other SQ
16c10 4c 20 64 61 74 61 62 61 73 65 20 64 61 74 61 62  L database datab
16c20 61 73 65 20 65 6e 67 69 6e 65 73 20 61 6e 64 20  ase engines and 
16c30 74 68 65 20 53 51 4c 39 32 20 73 74 61 6e 64 61  the SQL92 standa
16c40 72 64 20 72 65 71 75 69 72 65 0a 74 68 65 20 6c  rd require.the l
16c50 69 73 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61  ist to contain a
16c60 74 20 6c 65 61 73 74 20 6f 6e 65 20 65 6c 65 6d  t least one elem
16c70 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ent.</p>..<tcl>h
16c80 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70  d_fragment in_op
16c90 20 7b 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f   {EXISTS operato
16ca0 72 7d 20 7b 4e 4f 54 20 45 58 49 53 54 53 20 6f  r} {NOT EXISTS o
16cb0 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c  perator}</tcl>.<
16cc0 68 33 3e 54 68 65 20 45 58 49 53 54 53 20 6f 70  h3>The EXISTS op
16cd0 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 0a 3c 70 3e  erator</h3>..<p>
16ce0 5e 54 68 65 20 45 58 49 53 54 53 20 6f 70 65 72  ^The EXISTS oper
16cf0 61 74 6f 72 20 61 6c 77 61 79 73 20 65 76 61 6c  ator always eval
16d00 75 61 74 65 73 20 74 6f 20 6f 6e 65 20 6f 66 20  uates to one of 
16d10 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
16d20 65 73 20 30 20 0a 61 6e 64 20 31 2e 20 5e 49 66  es 0 .and 1. ^If
16d30 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 53   executing the S
16d40 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
16d50 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
16d60 20 72 69 67 68 74 2d 68 61 6e 64 20 0a 6f 70 65   right-hand .ope
16d70 72 61 6e 64 20 6f 66 20 74 68 65 20 45 58 49 53  rand of the EXIS
16d80 54 53 20 6f 70 65 72 61 74 6f 72 20 77 6f 75 6c  TS operator woul
16d90 64 20 72 65 74 75 72 6e 20 6f 6e 65 20 6f 72 20  d return one or 
16da0 6d 6f 72 65 20 72 6f 77 73 2c 20 74 68 65 6e 20  more rows, then 
16db0 74 68 65 0a 45 58 49 53 54 53 20 6f 70 65 72 61  the.EXISTS opera
16dc0 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f  tor evaluates to
16dd0 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e   1. ^If executin
16de0 67 20 74 68 65 20 53 45 4c 45 43 54 20 77 6f 75  g the SELECT wou
16df0 6c 64 20 72 65 74 75 72 6e 0a 6e 6f 20 72 6f 77  ld return.no row
16e00 73 20 61 74 20 61 6c 6c 2c 20 74 68 65 6e 20 74  s at all, then t
16e10 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
16e20 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  or evaluates to 
16e30 30 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d  0. ..<p>^The num
16e40 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
16e50 6e 20 65 61 63 68 20 72 6f 77 20 72 65 74 75 72  n each row retur
16e60 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
16e70 54 20 73 74 61 74 65 6d 65 6e 74 0a 28 69 66 20  T statement.(if 
16e80 61 6e 79 29 20 61 6e 64 20 74 68 65 20 73 70 65  any) and the spe
16e90 63 69 66 69 63 20 76 61 6c 75 65 73 20 72 65 74  cific values ret
16ea0 75 72 6e 65 64 20 68 61 76 65 20 6e 6f 20 65 66  urned have no ef
16eb0 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73 75  fect on the resu
16ec0 6c 74 73 0a 6f 66 20 74 68 65 20 45 58 49 53 54  lts.of the EXIST
16ed0 53 20 6f 70 65 72 61 74 6f 72 2e 20 5e 49 6e 20  S operator. ^In 
16ee0 70 61 72 74 69 63 75 6c 61 72 2c 20 72 6f 77 73  particular, rows
16ef0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 4e 55 4c 4c   containing NULL
16f00 20 76 61 6c 75 65 73 20 61 72 65 0a 6e 6f 74 20   values are.not 
16f10 68 61 6e 64 6c 65 64 20 61 6e 79 20 64 69 66 66  handled any diff
16f20 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20 72 6f 77  erently from row
16f30 73 20 77 69 74 68 6f 75 74 20 4e 55 4c 4c 20 76  s without NULL v
16f40 61 6c 75 65 73 2e 0a 0a 3c 68 33 3e 53 63 61 6c  alues...<h3>Scal
16f50 61 72 20 53 75 62 71 75 65 72 69 65 73 3c 2f 68  ar Subqueries</h
16f60 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43  3>..<p>^A [SELEC
16f70 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 65 6e 63  T] statement enc
16f80 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68  losed in parenth
16f90 65 73 65 73 20 6d 61 79 20 61 70 70 65 61 72 20  eses may appear 
16fa0 61 73 20 61 20 73 63 61 6c 61 72 0a 71 75 61 6e  as a scalar.quan
16fb0 74 69 74 79 2e 20 5e 41 20 5b 53 45 4c 45 43 54  tity. ^A [SELECT
16fc0 5d 20 75 73 65 64 20 61 73 20 61 20 73 63 61 6c  ] used as a scal
16fd0 61 72 20 71 75 61 6e 74 69 74 79 20 6d 75 73 74  ar quantity must
16fe0 20 72 65 74 75 72 6e 20 61 20 72 65 73 75 6c 74   return a result
16ff0 20 73 65 74 0a 77 69 74 68 20 61 20 73 69 6e 67   set.with a sing
17000 6c 65 20 63 6f 6c 75 6d 6e 2e 20 5e 54 68 65 20  le column. ^The 
17010 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65 78  result of the ex
17020 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
17030 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 6f 6e 6c  value of the.onl
17040 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  y column in the 
17050 66 69 72 73 74 20 72 6f 77 20 72 65 74 75 72 6e  first row return
17060 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
17070 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20   statement. ^If 
17080 74 68 65 20 53 45 4c 45 43 54 20 0a 79 69 65 6c  the SELECT .yiel
17090 64 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  ds more than one
170a0 20 72 65 73 75 6c 74 20 72 6f 77 2c 20 61 6c 6c   result row, all
170b0 20 72 6f 77 73 20 61 66 74 65 72 20 74 68 65 20   rows after the 
170c0 66 69 72 73 74 20 61 72 65 20 69 67 6e 6f 72 65  first are ignore
170d0 64 2e 20 5e 49 66 0a 74 68 65 20 53 45 4c 45 43  d. ^If.the SELEC
170e0 54 20 79 69 65 6c 64 73 20 6e 6f 20 72 6f 77 73  T yields no rows
170f0 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
17100 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
17110 6f 6e 20 69 73 20 4e 55 4c 4c 2e 0a 5e 28 54 68  on is NULL..^(Th
17120 65 20 4c 49 4d 49 54 20 6f 66 20 61 20 73 63 61  e LIMIT of a sca
17130 6c 61 72 20 73 75 62 71 75 65 72 79 20 69 73 20  lar subquery is 
17140 61 6c 77 61 79 73 20 31 2e 0a 41 6e 79 20 6f 74  always 1..Any ot
17150 68 65 72 20 4c 49 4d 49 54 20 76 61 6c 75 65 20  her LIMIT value 
17160 67 69 76 65 6e 20 69 6e 20 74 68 65 20 53 51 4c  given in the SQL
17170 20 74 65 78 74 20 69 73 20 69 67 6e 6f 72 65 64   text is ignored
17180 2e 29 5e 0a 0a 3c 70 3e 5e 41 6c 6c 20 74 79 70  .)^..<p>^All typ
17190 65 73 20 6f 66 20 5b 53 45 4c 45 43 54 5d 20 73  es of [SELECT] s
171a0 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64  tatement, includ
171b0 69 6e 67 20 61 67 67 72 65 67 61 74 65 20 61 6e  ing aggregate an
171c0 64 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  d [compound SELE
171d0 43 54 5d 0a 71 75 65 72 69 65 73 20 28 71 75 65  CT].queries (que
171e0 72 69 65 73 20 77 69 74 68 20 6b 65 79 77 6f 72  ries with keywor
171f0 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f 72  ds like UNION or
17200 20 45 58 43 45 50 54 29 20 61 72 65 20 61 6c 6c   EXCEPT) are all
17210 6f 77 65 64 20 61 73 20 73 63 61 6c 61 72 0a 73  owed as scalar.s
17220 75 62 71 75 65 72 69 65 73 2e 0a 0a 3c 68 33 3e  ubqueries...<h3>
17230 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 20 4e 61 6d  Table Column Nam
17240 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 63  es</h3>..<p>^A c
17250 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62  olumn name can b
17260 65 20 61 6e 79 20 6f 66 20 74 68 65 20 6e 61 6d  e any of the nam
17270 65 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68  es defined in th
17280 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
17290 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 6f 6e  .statement or on
172a0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
172b0 6e 67 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74  ng special ident
172c0 69 66 69 65 72 73 3a 20 22 3c 62 3e 52 4f 57 49  ifiers: "<b>ROWI
172d0 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44 3c  D</b>",."<b>OID<
172e0 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f  /b>", or "<b>_RO
172f0 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e 54 68 65 20  WID_</b>"..^The 
17300 74 68 72 65 65 20 73 70 65 63 69 61 6c 20 69 64  three special id
17310 65 6e 74 69 66 69 65 72 73 20 64 65 73 63 72 69  entifiers descri
17320 62 65 20 74 68 65 0a 75 6e 69 71 75 65 20 69 6e  be the.unique in
17330 74 65 67 65 72 20 6b 65 79 20 28 74 68 65 20 5b  teger key (the [
17340 72 6f 77 69 64 5d 29 20 61 73 73 6f 63 69 61 74  rowid]) associat
17350 65 64 20 77 69 74 68 20 65 76 65 72 79 20 0a 72  ed with every .r
17360 6f 77 20 6f 66 20 65 76 65 72 79 20 74 61 62 6c  ow of every tabl
17370 65 20 61 6e 64 20 73 6f 20 61 72 65 20 6e 6f 74  e and so are not
17380 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 5b 57   available on [W
17390 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
173a0 62 6c 65 73 2e 0a 5e 54 68 65 20 73 70 65 63 69  bles..^The speci
173b0 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  al identifiers o
173c0 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74 68 65  nly refer to the
173d0 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20   row key if the 
173e0 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73  [CREATE TABLE].s
173f0 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f  tatement does no
17400 74 20 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20  t define a real 
17410 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20  column with the 
17420 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20  same name..^The 
17430 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75 73 65  rowid can be use
17440 64 20 61 6e 79 77 68 65 72 65 20 61 20 72 65 67  d anywhere a reg
17450 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20  ular.column can 
17460 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  be used.</p>..<p
17470 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  >^A [SELECT] sta
17480 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73 20 65  tement used as e
17490 69 74 68 65 72 20 61 20 73 63 61 6c 61 72 20 73  ither a scalar s
174a0 75 62 71 75 65 72 79 20 6f 72 20 61 73 20 74 68  ubquery or as th
174b0 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70  e .right-hand op
174c0 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20  erand of an IN, 
174d0 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53 54 53  NOT IN or EXISTS
174e0 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
174f0 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72 65 6e  contain .referen
17500 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  ces to columns i
17510 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75 65 72  n the outer quer
17520 79 2e 20 53 75 63 68 20 61 20 73 75 62 71 75 65  y. Such a subque
17530 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61  ry is known as.a
17540 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
17550 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61  uery. ^A correla
17560 74 65 64 20 73 75 62 71 75 65 72 79 20 69 73 20  ted subquery is 
17570 72 65 65 76 61 6c 75 61 74 65 64 20 65 61 63 68  reevaluated each
17580 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75 6c 74   time.its result
17590 20 69 73 20 72 65 71 75 69 72 65 64 2e 20 5e 41   is required. ^A
175a0 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64 20 73  n uncorrelated s
175b0 75 62 71 75 65 72 79 20 69 73 20 65 76 61 6c 75  ubquery is evalu
175c0 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61  ated only once.a
175d0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 65  nd the result re
175e0 75 73 65 64 20 61 73 20 6e 65 63 65 73 73 61 72  used as necessar
175f0 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  y...<tcl>hd_frag
17600 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20 7b 43  ment castexpr {C
17610 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 7d 20  AST expression} 
17620 7b 43 41 53 54 7d 20 7b 63 61 73 74 7d 20 7b 43  {CAST} {cast} {C
17630 41 53 54 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74  AST operator}</t
17640 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65 78 70  cl>.<h3>CAST exp
17650 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c  ressions</h3>..<
17660 70 3e 41 20 43 41 53 54 20 65 78 70 72 65 73 73  p>A CAST express
17670 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
17680 22 43 41 53 54 28 3c 69 3e 65 78 70 72 3c 2f 69  "CAST(<i>expr</i
17690 3e 20 41 53 20 3c 69 3e 74 79 70 65 2d 6e 61 6d  > AS <i>type-nam
176a0 65 3c 2f 69 3e 29 22 0a 69 73 20 75 73 65 64 20  e</i>)".is used 
176b0 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76  to convert the v
176c0 61 6c 75 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c  alue of <i>expr<
176d0 2f 69 3e 20 74 6f 20 0a 61 20 64 69 66 66 65 72  /i> to .a differ
176e0 65 6e 74 20 5b 73 74 6f 72 61 67 65 20 63 6c 61  ent [storage cla
176f0 73 73 5d 20 73 70 65 63 69 66 69 65 64 20 62 79  ss] specified by
17700 20 3c 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61   <yyterm>type-na
17710 6d 65 3c 2f 79 79 74 65 72 6d 3e 2e 0a 5e 41 20  me</yyterm>..^A 
17720 43 41 53 54 20 63 6f 6e 76 65 72 73 69 6f 6e 20  CAST conversion 
17730 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  is similar to th
17740 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61  e conversion tha
17750 74 20 74 61 6b 65 73 0a 70 6c 61 63 65 20 77 68  t takes.place wh
17760 65 6e 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66  en a [column aff
17770 69 6e 69 74 79 5d 20 69 73 20 61 70 70 6c 69 65  inity] is applie
17780 64 20 74 6f 20 61 20 76 61 6c 75 65 20 65 78 63  d to a value exc
17790 65 70 74 20 74 68 61 74 20 77 69 74 68 0a 74 68  ept that with.th
177a0 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20  e CAST operator 
177b0 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61  the conversion a
177c0 6c 77 61 79 73 20 74 61 6b 65 73 20 70 6c 61 63  lways takes plac
177d0 65 20 65 76 65 6e 20 69 66 20 74 68 65 20 63 6f  e even if the co
177e0 6e 76 65 72 73 69 6f 6e 0a 6c 6f 73 73 79 20 61  nversion.lossy a
177f0 6e 64 20 69 72 72 65 76 65 72 73 69 62 6c 65 2c  nd irreversible,
17800 20 77 68 65 72 65 61 73 20 63 6f 6c 75 6d 6e 20   whereas column 
17810 61 66 66 69 6e 69 74 79 20 6f 6e 6c 79 20 63 68  affinity only ch
17820 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 20 74  anges the data t
17830 79 70 65 0a 6f 66 20 61 20 76 61 6c 75 65 20 69  ype.of a value i
17840 66 20 74 68 65 20 63 68 61 6e 67 65 20 69 73 20  f the change is 
17850 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72 65 76  lossless and rev
17860 65 72 73 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66  ersible...<p>^If
17870 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 3c 69   the value of <i
17880 3e 65 78 70 72 3c 2f 69 3e 20 69 73 20 4e 55 4c  >expr</i> is NUL
17890 4c 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  L, then the resu
178a0 6c 74 20 6f 66 20 74 68 65 20 43 41 53 54 0a 65  lt of the CAST.e
178b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6c 73  xpression is als
178c0 6f 20 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69  o NULL. ^Otherwi
178d0 73 65 2c 20 74 68 65 20 73 74 6f 72 61 67 65 20  se, the storage 
178e0 63 6c 61 73 73 20 6f 66 20 74 68 65 20 72 65 73  class of the res
178f0 75 6c 74 0a 69 73 20 64 65 74 65 72 6d 69 6e 65  ult.is determine
17900 64 20 62 79 20 61 70 70 6c 79 69 6e 67 20 74 68  d by applying th
17910 65 20 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74  e [rules for det
17920 65 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20  ermining column 
17930 61 66 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65  affinity] to.the
17940 20 3c 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61   <yyterm>type-na
17950 6d 65 3c 2f 79 79 74 65 72 6d 3e 2e 0a 0a 3c 74  me</yyterm>...<t
17960 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  able border=1>.<
17970 74 72 3e 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e  tr>.  <th> Affin
17980 69 74 79 20 6f 66 20 3c 79 79 74 65 72 6d 3e 74  ity of <yyterm>t
17990 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ype-name</yyterm
179a0 3e 0a 20 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73  >.  <th> Convers
179b0 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c  ion Processing.<
179c0 74 72 3e 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20  tr>.  <td> NONE 
179d0 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67  .  <td> ^Casting
179e0 20 61 20 76 61 6c 75 65 20 74 6f 20 61 20 3c 79   a value to a <y
179f0 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c  yterm>type-name<
17a00 2f 79 79 74 65 72 6d 3e 20 77 69 74 68 20 6e 6f  /yyterm> with no
17a10 20 61 66 66 69 6e 69 74 79 20 0a 20 20 63 61 75   affinity .  cau
17a20 73 65 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f  ses the value to
17a30 0a 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  .  be converted 
17a40 69 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43  into a BLOB.  ^C
17a50 61 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42  asting to a BLOB
17a60 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72   consists of fir
17a70 73 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65  st casting.  the
17a80 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69   value to TEXT i
17a90 6e 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d  n the [encoding]
17aa0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
17ab0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65   connection, the
17ac0 6e 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67  n.  interpreting
17ad0 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62   the resulting b
17ae0 79 74 65 20 73 65 71 75 65 6e 63 65 20 61 73 20  yte sequence as 
17af0 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f  a BLOB instead o
17b00 66 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e  f as TEXT...<tr>
17b10 0a 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c  .  <td> TEXT.  <
17b20 74 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42  td> ^To cast a B
17b30 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58  LOB value to TEX
17b40 54 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  T, the sequence 
17b50 6f 66 20 62 79 74 65 73 20 74 68 61 74 20 6d 61  of bytes that ma
17b60 6b 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42  ke up the.  BLOB
17b70 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20   is interpreted 
17b80 61 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20  as text encoded 
17b90 75 73 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  using the databa
17ba0 73 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c  se encoding..  <
17bb0 70 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61  p>.   ^Casting a
17bc0 6e 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41  n INTEGER or REA
17bd0 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58  L value into TEX
17be0 54 20 72 65 6e 64 65 72 73 20 74 68 65 20 76 61  T renders the va
17bf0 6c 75 65 20 61 73 20 69 66 20 76 69 61 20 0a 20  lue as if via . 
17c00 20 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72     [sqlite3_snpr
17c10 69 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20 74  intf()] except t
17c20 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e  hat the resultin
17c30 67 20 54 45 58 54 20 75 73 65 73 20 74 68 65 20  g TEXT uses the 
17c40 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20  [encoding] of.  
17c50 20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63    the database c
17c60 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e  onnection...<tr>
17c70 0a 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c  .  <td> REAL.  <
17c80 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e  td> ^When castin
17c90 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74  g a BLOB value t
17ca0 6f 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61  o a REAL, the va
17cb0 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e  lue is first con
17cc0 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20  verted to.      
17cd0 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c    TEXT..       <
17ce0 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  p>^When casting 
17cf0 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20  a TEXT value to 
17d00 52 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73  REAL, the longes
17d10 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69  t possible prefi
17d20 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65  x of.        the
17d30 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
17d40 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
17d50 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20  s a real number 
17d60 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f  is extracted fro
17d70 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45  m.        the TE
17d80 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  XT value and the
17d90 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72   remainder ignor
17da0 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67  ed. ^Any leading
17db0 20 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20   spaces in the. 
17dc0 20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75         TEXT valu
17dd0 65 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68  e are ignored wh
17de0 65 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72  en converging fr
17df0 6f 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e  om TEXT to REAL.
17e00 20 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a 20   ^(If there is. 
17e10 20 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78         no prefix
17e20 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
17e30 65 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65  erpreted as a re
17e40 61 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72  al number, the r
17e50 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20  esult of the.   
17e60 20 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20       conversion 
17e70 69 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a  is 0.0.)^..<tr>.
17e80 20 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20    <td> INTEGER. 
17e90 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74   <td> ^When cast
17ea0 69 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65  ing a BLOB value
17eb0 20 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65   to INTEGER, the
17ec0 20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20   value is first 
17ed0 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20  converted to.   
17ee0 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20       TEXT..     
17ef0 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69    <p>^When casti
17f00 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20  ng a TEXT value 
17f10 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20  to INTEGER, the 
17f20 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65  longest possible
17f30 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20   prefix of.     
17f40 20 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61     the value tha
17f50 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72  t can be interpr
17f60 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
17f70 65 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74  er number is ext
17f80 72 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20  racted from.    
17f90 20 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c      the TEXT val
17fa0 75 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  ue and the remai
17fb0 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41  nder ignored. ^A
17fc0 6e 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65  ny leading space
17fd0 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
17fe0 20 54 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e   TEXT value when
17ff0 20 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d   converting from
18000 20 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52   TEXT to INTEGER
18010 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49   are ignored. ^I
18020 66 20 74 68 65 72 65 0a 20 20 20 20 20 20 20 20  f there.        
18030 69 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61  is no prefix tha
18040 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72  t can be interpr
18050 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
18060 65 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72  er number, the r
18070 65 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66  esult.        of
18080 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
18090 69 73 20 30 2e 20 20 5e 28 54 68 65 20 43 41 53  is 0.  ^(The CAS
180a0 54 20 6f 70 65 72 61 74 6f 72 20 75 6e 64 65 72  T operator under
180b0 73 74 61 6e 64 73 20 64 65 63 69 6d 61 6c 0a 20  stands decimal. 
180c0 20 20 20 20 20 20 20 69 6e 74 65 67 65 72 73 20         integers 
180d0 6f 6e 6c 79 20 26 6d 64 61 73 68 3b 20 63 6f 6e  only &mdash; con
180e0 76 65 72 73 69 6f 6e 20 6f 66 20 5b 68 65 78 61  version of [hexa
180f0 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73  decimal integers
18100 5d 20 73 74 6f 70 73 20 0a 20 20 20 20 20 20 20  ] stops .       
18110 20 61 74 20 74 68 65 20 22 78 22 20 69 6e 20 74   at the "x" in t
18120 68 65 20 22 30 78 22 20 70 72 65 66 69 78 20 6f  he "0x" prefix o
18130 66 20 74 68 65 20 68 65 78 61 64 65 63 69 6d 61  f the hexadecima
18140 6c 20 69 6e 74 65 67 65 72 20 73 74 72 69 6e 67  l integer string
18150 20 0a 20 20 20 20 20 20 20 20 61 6e 64 20 74 68   .        and th
18160 75 73 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  us result of the
18170 20 43 41 53 54 20 69 73 20 61 6c 77 61 79 73 20   CAST is always 
18180 7a 65 72 6f 2e 29 5e 0a 0a 20 20 20 20 20 20 3c  zero.)^..      <
18190 70 3e 5e 41 20 63 61 73 74 20 6f 66 20 61 20 52  p>^A cast of a R
181a0 45 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  EAL value into a
181b0 6e 20 49 4e 54 45 47 45 52 20 72 65 73 75 6c 74  n INTEGER result
181c0 73 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72  s in the integer
181d0 0a 20 20 20 20 20 20 62 65 74 77 65 65 6e 20 74  .      between t
181e0 68 65 20 52 45 41 4c 20 76 61 6c 75 65 20 61 6e  he REAL value an
181f0 64 20 7a 65 72 6f 20 74 68 61 74 20 69 73 20 63  d zero that is c
18200 6c 6f 73 65 73 74 20 74 6f 20 74 68 65 20 52 45  losest to the RE
18210 41 4c 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20  AL value..      
18220 5e 49 66 20 61 20 52 45 41 4c 20 69 73 20 67 72  ^If a REAL is gr
18230 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 67  eater than the g
18240 72 65 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65  reatest possible
18250 20 73 69 67 6e 65 64 0a 20 20 20 20 20 20 69 6e   signed.      in
18260 74 65 67 65 72 20 28 2b 39 32 32 33 33 37 32 30  teger (+92233720
18270 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65  36854775807) the
18280 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
18290 74 68 65 20 67 72 65 61 74 65 73 74 20 70 6f 73  the greatest pos
182a0 73 69 62 6c 65 0a 20 20 20 20 20 20 73 69 67 6e  sible.      sign
182b0 65 64 20 69 6e 74 65 67 65 72 20 61 6e 64 20 69  ed integer and i
182c0 66 20 74 68 65 20 52 45 41 4c 20 69 73 20 6c 65  f the REAL is le
182d0 73 73 20 74 68 61 6e 20 74 68 65 20 6c 65 61 73  ss than the leas
182e0 74 20 70 6f 73 73 69 62 6c 65 20 73 69 67 6e 65  t possible signe
182f0 64 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72 20  d.      integer 
18300 28 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37  (-92233720368547
18310 37 35 38 30 38 29 20 74 68 65 6e 20 74 68 65 20  75808) then the 
18320 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 6c 65  result is the le
18330 61 73 74 20 70 6f 73 73 69 62 6c 65 0a 20 20 20  ast possible.   
18340 20 20 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65     signed intege
18350 72 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 50 72 69  r...      <p>Pri
18360 6f 72 20 74 6f 20 53 51 4c 69 74 65 20 76 65 72  or to SQLite ver
18370 73 69 6f 6e 20 33 2e 38 2e 32 2c 20 63 61 73 74  sion 3.8.2, cast
18380 69 6e 67 20 61 20 52 45 41 4c 20 76 61 6c 75 65  ing a REAL value
18390 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 20 20   greater than.  
183a0 20 20 20 20 2b 39 32 32 33 33 37 32 30 33 36 38      +92233720368
183b0 35 34 37 37 35 38 30 37 2e 30 20 69 6e 74 6f 20  54775807.0 into 
183c0 61 6e 20 69 6e 74 65 67 65 72 20 72 65 73 75 6c  an integer resul
183d0 74 65 64 20 69 6e 20 74 68 65 20 6d 6f 73 74 20  ted in the most 
183e0 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20 20 69  negative.      i
183f0 6e 74 65 67 65 72 2c 20 2d 39 32 32 33 33 37 32  nteger, -9223372
18400 30 33 36 38 35 34 37 37 35 38 30 38 2e 20 20 54  036854775808.  T
18410 68 69 73 20 62 65 68 61 76 69 6f 72 20 77 61 73  his behavior was
18420 20 6d 65 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74   meant to emulat
18430 65 20 74 68 65 0a 20 20 20 20 20 20 62 65 68 61  e the.      beha
18440 76 69 6f 72 20 6f 66 20 78 38 36 2f 78 36 34 20  vior of x86/x64 
18450 68 61 72 64 77 61 72 65 20 77 68 65 6e 20 64 6f  hardware when do
18460 69 6e 67 20 74 68 65 20 65 71 75 69 76 61 6c 65  ing the equivale
18470 6e 74 20 63 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20  nt cast...<tr>. 
18480 20 3c 74 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20   <td> NUMERIC.  
18490 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20  <td> ^Casting a 
184a0 54 45 58 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c  TEXT or BLOB val
184b0 75 65 20 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20  ue into NUMERIC 
184c0 66 69 72 73 74 20 64 6f 65 73 20 61 20 66 6f 72  first does a for
184d0 63 65 64 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f  ced.   conversio
184e0 6e 20 69 6e 74 6f 20 52 45 41 4c 20 62 75 74 20  n into REAL but 
184f0 74 68 65 6e 20 66 75 72 74 68 65 72 20 63 6f 6e  then further con
18500 76 65 72 74 73 20 74 68 65 20 72 65 73 75 6c 74  verts the result
18510 20 69 6e 74 6f 20 49 4e 54 45 47 45 52 20 69 66   into INTEGER if
18520 0a 20 20 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20  .   and only if 
18530 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66  the conversion f
18540 72 6f 6d 20 52 45 41 4c 20 74 6f 20 49 4e 54 45  rom REAL to INTE
18550 47 45 52 20 69 73 20 6c 6f 73 73 6c 65 73 73 20  GER is lossless 
18560 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65 2e 0a  and reversible..
18570 20 20 20 54 68 69 73 20 69 73 20 74 68 65 20 6f     This is the o
18580 6e 6c 79 20 63 6f 6e 74 65 78 74 20 69 6e 20 53  nly context in S
18590 51 4c 69 74 65 20 77 68 65 72 65 20 74 68 65 20  QLite where the 
185a0 4e 55 4d 45 52 49 43 20 61 6e 64 20 49 4e 54 45  NUMERIC and INTE
185b0 47 45 52 20 5b 61 66 66 69 6e 69 74 69 65 73 5d  GER [affinities]
185c0 0a 20 20 20 62 65 68 61 76 65 20 64 69 66 66 65  .   behave diffe
185d0 72 65 6e 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e  rently..   <p> ^
185e0 43 61 73 74 69 6e 67 20 61 20 52 45 41 4c 20 6f  Casting a REAL o
185f0 72 20 49 4e 54 45 47 45 52 20 76 61 6c 75 65 20  r INTEGER value 
18600 74 6f 20 4e 55 4d 45 52 49 43 20 69 73 20 61 20  to NUMERIC is a 
18610 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20 69 66 20 61  no-op, even if a
18620 20 72 65 61 6c 0a 20 20 20 76 61 6c 75 65 20 63   real.   value c
18630 6f 75 6c 64 20 62 65 20 6c 6f 73 73 6c 65 73 73  ould be lossless
18640 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly converted to 
18650 61 6e 20 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74  an integer...</t
18660 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70  r>..</table>..<p
18670 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  >^Note that the 
18680 72 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74  result from cast
18690 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42  ing any non-BLOB
186a0 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42   value into a .B
186b0 4c 4f 42 20 61 6e 64 20 74 68 65 20 72 65 73 75  LOB and the resu
186c0 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20  lt from casting 
186d0 61 6e 79 20 42 4c 4f 42 20 76 61 6c 75 65 20 69  any BLOB value i
186e0 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76  nto a non-BLOB v
186f0 61 6c 75 65 0a 6d 61 79 20 62 65 20 64 69 66 66  alue.may be diff
18700 65 72 65 6e 74 20 64 65 70 65 6e 64 69 6e 67 20  erent depending 
18710 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 64  on whether the d
18720 61 74 61 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e  atabase [encodin
18730 67 5d 20 69 73 20 55 54 46 2d 38 2c 0a 55 54 46  g] is UTF-8,.UTF
18740 2d 31 36 62 65 2c 20 6f 72 20 55 54 46 2d 31 36  -16be, or UTF-16
18750 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  le....<tcl>hd_fr
18760 61 67 6d 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78  agment booleanex
18770 70 72 20 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72  pr {boolean expr
18780 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68  ession}</tcl>.<h
18790 33 3e 42 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73  3>Boolean Expres
187a0 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  sions</h3>..<p>T
187b0 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20  he SQL language 
187c0 66 65 61 74 75 72 65 73 20 73 65 76 65 72 61 6c  features several
187d0 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20   contexts where 
187e0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  an expression is
187f0 20 0a 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20   .evaluated and 
18800 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 76 65  the result conve
18810 72 74 65 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61  rted to a boolea
18820 6e 20 28 74 72 75 65 20 6f 72 20 66 61 6c 73 65  n (true or false
18830 29 20 76 61 6c 75 65 2e 20 54 68 65 73 65 0a 63  ) value. These.c
18840 6f 6e 74 65 78 74 73 20 61 72 65 3a 0a 0a 20 20  ontexts are:..  
18850 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68  <ul>.    <li> th
18860 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
18870 66 20 61 20 53 45 4c 45 43 54 2c 20 55 50 44 41  f a SELECT, UPDA
18880 54 45 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61  TE or DELETE sta
18890 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
188a0 20 74 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47   the ON or USING
188b0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
188c0 6e 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74  n in a SELECT st
188d0 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69  atement,.    <li
188e0 3e 20 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61  > the HAVING cla
188f0 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
18900 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c  statement,.    <
18910 6c 69 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61  li> the WHEN cla
18920 75 73 65 20 6f 66 20 61 6e 20 53 51 4c 20 74 72  use of an SQL tr
18930 69 67 67 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c  igger, and.    <
18940 6c 69 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61  li> the WHEN cla
18950 75 73 65 20 6f 72 20 63 6c 61 75 73 65 73 20 6f  use or clauses o
18960 66 20 73 6f 6d 65 20 43 41 53 45 20 65 78 70 72  f some CASE expr
18970 65 73 73 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e  essions..  </ul>
18980 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72  ..<p>^(To conver
18990 74 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  t the results of
189a0 20 61 6e 20 53 51 4c 20 65 78 70 72 65 73 73 69   an SQL expressi
189b0 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20  on to a boolean 
189c0 76 61 6c 75 65 2c 20 53 51 4c 69 74 65 0a 66 69  value, SQLite.fi
189d0 72 73 74 20 63 61 73 74 73 20 74 68 65 20 72 65  rst casts the re
189e0 73 75 6c 74 20 74 6f 20 61 20 4e 55 4d 45 52 49  sult to a NUMERI
189f0 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73  C value in the s
18a00 61 6d 65 20 77 61 79 20 61 73 20 61 20 0a 5b 43  ame way as a .[C
18a10 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  AST expression].
18a20 20 41 20 6e 75 6d 65 72 69 63 20 7a 65 72 6f 20   A numeric zero 
18a30 76 61 6c 75 65 20 28 69 6e 74 65 67 65 72 20 76  value (integer v
18a40 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c 20 0a  alue 0 or real .
18a50 76 61 6c 75 65 20 30 2e 30 29 20 69 73 20 63 6f  value 0.0) is co
18a60 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 66  nsidered to be f
18a70 61 6c 73 65 2e 20 20 41 20 4e 55 4c 4c 20 76 61  alse.  A NULL va
18a80 6c 75 65 20 69 73 20 73 74 69 6c 6c 20 4e 55 4c  lue is still NUL
18a90 4c 2e 0a 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c  L..All other val
18aa0 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
18ab0 65 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e  ed true.)^..<p>^
18ac0 28 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68  (For example, th
18ad0 65 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30  e values NULL, 0
18ae0 2e 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27  .0, 0, 'english'
18af0 20 61 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c   and '0' are all
18b00 20 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62   considered.to b
18b10 65 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c  e false.)^ ^(Val
18b20 75 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c  ues 1, 1.0, 0.1,
18b30 20 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c   -0.1 and '1engl
18b40 69 73 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65  ish' are conside
18b50 72 65 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e  red to .be true.
18b60 29 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e  )^..<h3>Function
18b70 73 3c 2f 68 33 3e 0a 3c 70 3e 53 51 4c 69 74 65  s</h3>.<p>SQLite
18b80 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 5b   supports many [
18b90 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d  corefunc|simple]
18ba0 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67   and [aggfunc|ag
18bb0 67 72 65 67 61 74 65 5d 0a 53 51 4c 20 66 75 6e  gregate].SQL fun
18bc0 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20 70 72 65  ctions.  For pre
18bd0 73 65 6e 74 61 74 69 6f 6e 20 70 75 72 70 6f 73  sentation purpos
18be0 65 73 2c 20 73 69 6d 70 6c 65 20 66 75 6e 63 74  es, simple funct
18bf0 69 6f 6e 73 20 61 72 65 20 66 75 72 74 68 65 72  ions are further
18c00 0a 73 75 62 64 69 76 69 64 65 64 20 69 6e 74 6f  .subdivided into
18c10 20 5b 63 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72   [corefunc | cor
18c20 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64  e functions] and
18c30 20 5b 64 61 74 65 66 75 6e 63 7c 64 61 74 65 2d   [datefunc|date-
18c40 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e  time functions].
18c50 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61  .Applications ca
18c60 6e 20 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69  n add new functi
18c70 6f 6e 73 2c 20 77 72 69 74 74 65 6e 20 69 6e 20  ons, written in 
18c80 43 2f 43 2b 2b 2c 20 75 73 69 6e 67 20 74 68 65  C/C++, using the
18c90 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  .[sqlite3_create
18ca0 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74  _function()] int
18cb0 65 72 66 61 63 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70  erface..</p>..<p
18cc0 3e 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65  >^It is possible
18cd0 20 74 6f 20 68 61 76 65 20 61 6e 20 61 67 67 72   to have an aggr
18ce0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
18cf0 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
18d00 65 20 61 73 20 61 0a 73 69 6d 70 6c 65 20 66 75  e as a.simple fu
18d10 6e 63 74 69 6f 6e 2c 20 61 73 20 6c 6f 6e 67 20  nction, as long 
18d20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
18d30 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74   arguments for t
18d40 68 65 20 74 77 6f 20 66 6f 72 6d 73 20 6f 66 20  he two forms of 
18d50 74 68 65 0a 66 75 6e 63 74 69 6f 6e 20 61 72 65  the.function are
18d60 20 64 69 66 66 65 72 65 6e 74 2e 20 20 5e 46 6f   different.  ^Fo
18d70 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 5b  r example, the [
18d80 61 67 67 5f 6d 61 78 7c 6d 61 78 28 29 5d 20 66  agg_max|max()] f
18d90 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 0a 73  unction with a.s
18da0 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 69  ingle argument i
18db0 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 61  s an aggregate a
18dc0 6e 64 20 74 68 65 20 5b 6d 61 78 28 29 5d 20 66  nd the [max()] f
18dd0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 77 6f  unction with two
18de0 20 6f 72 20 6d 6f 72 65 0a 61 72 67 75 6d 65 6e   or more.argumen
18df0 74 73 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66  ts is a simple f
18e00 75 6e 63 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 0a  unction...<tcl>.
18e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
18e60 65 63 74 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e  ection {Core Fun
18e70 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63  ctions} corefunc
18e80 20 7b 2a 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f   {*corefunc}.pro
18e90 63 20 66 75 6e 63 64 65 66 20 7b 73 79 6e 74 61  c funcdef {synta
18ea0 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d  x keywords desc}
18eb0 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74   {.  hd_puts {<t
18ec0 72 3e 7d 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  r>}.  regsub -al
18ed0 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20  l {\s+} [string 
18ee0 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c  trim $syntax] {<
18ef0 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20  br />} syntax.  
18f00 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28  regsub -all {\((
18f10 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74  [^*)]+)\)} $synt
18f20 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d  ax {(<i>\1</i>)}
18f30 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
18f40 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61   -all {,} $synta
18f50 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e  x {</i>,<i>} syn
18f60 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
18f70 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e  l {<i>\.\.\.</i>
18f80 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20  } $syntax {...} 
18f90 73 79 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73  syntax.  hd_puts
18fa0 20 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74   "<td valign=\"t
18fb0 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67  op\" align=\"rig
18fc0 68 74 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30  ht\" width=\"120
18fd0 5c 22 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e  \">".  if {[llen
18fe0 67 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d  gth $keywords]==
18ff0 30 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20  0} {.    regexp 
19000 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61  {[a-z_]+} $synta
19010 78 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72  x name.    hd_fr
19020 61 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e  agment $name *$n
19030 61 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53  ame "${name}() S
19040 51 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d  QL function".  }
19050 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20   else {.    set 
19060 66 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78  fragname [lindex
19070 20 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20   $keywords 0].  
19080 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b    regsub -all {[
19090 5e 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65  ^a-z]} $fragname
190a0 20 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20   {} fragname.   
190b0 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72   hd_fragment $fr
190c0 61 67 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20  agname.    eval 
190d0 68 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72  hd_keywords [str
190e0 69 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d  ing map {\n { }}
190f0 20 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a   $keywords].  }.
19100 20 20 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74    hd_puts "$synt
19110 61 78 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75  ax</td>".  hd_pu
19120 74 73 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22  ts {<td valign="
19130 74 6f 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f  top">}.  hd_reso
19140 6c 76 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70  lve $desc.  hd_p
19150 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d  uts {</td></tr>}
19160 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  .}.</tcl>..<p>Th
19170 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73  e core functions
19180 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65   shown below are
19190 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65   available by de
191a0 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e  fault. .[datefun
191b0 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54  c | Date &amp; T
191c0 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2c 0a  ime functions],.
191d0 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72 65  [aggfunc | aggre
191e0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2c  gate functions],
191f0 20 61 6e 64 0a 5b 6a 73 6f 6e 31 20 7c 20 4a 53   and.[json1 | JS
19200 4f 4e 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72  ON functions] ar
19210 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70  e documented sep
19220 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70  arately.  An.app
19230 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66  lication may def
19240 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66  ine additional.f
19250 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e  unctions written
19260 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20   in C and added 
19270 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
19280 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65  engine using.the
19290 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
192a0 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49  _function()] API
192b0 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f  .</p>..<table bo
192c0 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69  rder=0 cellpaddi
192d0 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e  ng=10>.<tcl>.fun
192e0 63 64 65 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d  cdef {abs(X)} {}
192f0 20 7b 0a 20 20 5e 54 68 65 20 61 62 73 28 58 29   {.  ^The abs(X)
19300 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
19310 73 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76  s the absolute v
19320 61 6c 75 65 20 6f 66 20 74 68 65 20 6e 75 6d 65  alue of the nume
19330 72 69 63 0a 20 20 61 72 67 75 6d 65 6e 74 20 58  ric.  argument X
19340 2e 20 20 5e 41 62 73 28 58 29 20 72 65 74 75 72  .  ^Abs(X) retur
19350 6e 73 20 4e 55 4c 4c 20 69 66 20 58 20 69 73 20  ns NULL if X is 
19360 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58  NULL. .  ^(Abs(X
19370 29 20 72 65 74 75 72 6e 73 20 30 2e 30 20 69 66  ) returns 0.0 if
19380 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f   X is a string o
19390 72 20 62 6c 6f 62 0a 20 20 74 68 61 74 20 63 61  r blob.  that ca
193a0 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
193b0 64 20 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 76  d to a numeric v
193c0 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20 58 20 69  alue.)^  ^If X i
193d0 73 20 74 68 65 20 0a 20 20 69 6e 74 65 67 65 72  s the .  integer
193e0 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
193f0 37 35 38 30 38 20 74 68 65 6e 20 61 62 73 28 58  75808 then abs(X
19400 29 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65  ) throws an inte
19410 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65  ger overflow.  e
19420 72 72 6f 72 20 73 69 6e 63 65 20 74 68 65 72 65  rror since there
19430 20 69 73 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e   is no equivalen
19440 74 20 70 6f 73 69 74 69 76 65 20 36 34 2d 62 69  t positive 64-bi
19450 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74  t two complement
19460 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64   value..}..funcd
19470 65 66 20 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b  ef {changes()} {
19480 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e 67  } {.  ^The chang
19490 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  es() function re
194a0 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
194b0 20 6f 66 20 64 61 74 61 62 61 73 65 20 72 6f 77   of database row
194c0 73 20 74 68 61 74 20 77 65 72 65 20 63 68 61 6e  s that were chan
194d0 67 65 64 0a 20 20 6f 72 20 69 6e 73 65 72 74 65  ged.  or inserte
194e0 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20  d or deleted by 
194f0 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
19500 79 20 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45  y completed INSE
19510 52 54 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72  RT, DELETE,.  or
19520 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
19530 74 2c 20 65 78 63 6c 75 73 69 76 65 20 6f 66 20  t, exclusive of 
19540 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f  statements in lo
19550 77 65 72 2d 6c 65 76 65 6c 20 74 72 69 67 67 65  wer-level trigge
19560 72 73 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e 67  rs..  ^The chang
19570 65 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  es() SQL functio
19580 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
19590 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
195a0 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20  e3_changes()].  
195b0 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61  C/C++ function a
195c0 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73  nd hence follows
195d0 20 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20   the same rules 
195e0 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61  for counting cha
195f0 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  nges..}..funcdef
19600 20 7b 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e   {char(X1,X2,...
19610 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54  ,XN)} {} {.  ^(T
19620 68 65 20 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e  he char(X1,X2,..
19630 2e 2c 58 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  .,XN) function r
19640 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
19650 63 6f 6d 70 6f 73 65 64 20 6f 66 20 63 68 61 72  composed of char
19660 61 63 74 65 72 73 20 68 61 76 69 6e 67 20 74 68  acters having th
19670 65 0a 20 20 20 75 6e 69 63 6f 64 65 20 63 6f 64  e.   unicode cod
19680 65 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20 6f  e point values o
19690 66 20 69 6e 74 65 67 65 72 73 20 58 31 20 74 68  f integers X1 th
196a0 72 6f 75 67 68 20 58 4e 2c 20 72 65 73 70 65 63  rough XN, respec
196b0 74 69 76 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75 6e  tively.)^.}..fun
196c0 63 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58  cdef {coalesce(X
196d0 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20  ,Y,...)} {} {.  
196e0 5e 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20  ^The coalesce() 
196f0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19700 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66   a copy of its f
19710 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  irst non-NULL ar
19720 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c  gument, or.  NUL
19730 4c 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e  L if all argumen
19740 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43  ts are NULL.  ^C
19750 6f 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20 68  oalesce() must h
19760 61 76 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20  ave at least .  
19770 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a  2 arguments..}..
19780 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c  funcdef {glob(X,
19790 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
197a0 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69  glob(X,Y) functi
197b0 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  on is equivalent
197c0 20 74 6f 20 74 68 65 0a 20 20 65 78 70 72 65 73   to the.  expres
197d0 73 69 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20  sion "<b>Y GLOB 
197e0 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74  X</b>"..  Note t
197f0 68 61 74 20 74 68 65 20 58 20 61 6e 64 20 59 20  hat the X and Y 
19800 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65  arguments are re
19810 76 65 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c  versed in the gl
19820 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  ob() function.  
19830 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20  relative to the 
19840 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65  infix [GLOB] ope
19850 72 61 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65  rator..  ^If the
19860 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
19870 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74  _function()] int
19880 65 72 66 61 63 65 20 69 73 20 75 73 65 64 20 74  erface is used t
19890 6f 0a 20 20 6f 76 65 72 72 69 64 65 20 74 68 65  o.  override the
198a0 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74   glob(X,Y) funct
198b0 69 6f 6e 20 77 69 74 68 20 61 6e 20 61 6c 74 65  ion with an alte
198c0 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e  rnative implemen
198d0 74 61 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68  tation then.  th
198e0 65 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f  e [GLOB] operato
198f0 72 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68  r will invoke th
19900 65 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d  e alternative im
19910 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a  plementation..}.
19920 0a 66 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c  .funcdef {ifnull
19930 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
19940 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63  he ifnull() func
19950 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
19960 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72 73 74  opy of its first
19970 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65   non-NULL argume
19980 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66  nt, or.  NULL if
19990 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20   both arguments 
199a0 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75  are NULL.  ^Ifnu
199b0 6c 6c 28 29 20 6d 75 73 74 20 68 61 76 65 20 65  ll() must have e
199c0 78 61 63 74 6c 79 20 32 20 61 72 67 75 6d 65 6e  xactly 2 argumen
199d0 74 73 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c  ts..  ^The ifnul
199e0 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  l() function is 
199f0 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63  equivalent to [c
19a00 6f 61 6c 65 73 63 65 28 29 5d 20 77 69 74 68 20  oalesce()] with 
19a10 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d  two arguments..}
19a20 0a 0a 66 75 6e 63 64 65 66 20 7b 69 6e 73 74 72  ..funcdef {instr
19a30 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
19a40 68 65 20 69 6e 73 74 72 28 58 2c 59 29 20 66 75  he instr(X,Y) fu
19a50 6e 63 74 69 6f 6e 20 66 69 6e 64 73 20 74 68 65  nction finds the
19a60 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63   first occurrenc
19a70 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20 77 69  e of string Y wi
19a80 74 68 69 6e 20 0a 20 20 73 74 72 69 6e 67 20 58  thin .  string X
19a90 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
19aa0 20 6e 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72   number of prior
19ab0 20 63 68 61 72 61 63 74 65 72 73 20 70 6c 75 73   characters plus
19ac0 20 31 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20   1, or 0 if.  Y 
19ad0 69 73 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64  is nowhere found
19ae0 20 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72   within X..  ^Or
19af0 2c 20 69 66 20 58 20 61 6e 64 20 59 20 61 72 65  , if X and Y are
19b00 20 62 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68 65   both BLOBs, the
19b10 6e 20 69 6e 73 74 72 28 58 2c 59 29 20 72 65 74  n instr(X,Y) ret
19b20 75 72 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20  urns one.  more 
19b30 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  than the number 
19b40 62 79 74 65 73 20 70 72 69 6f 72 20 74 6f 20 74  bytes prior to t
19b50 68 65 20 66 69 72 73 74 20 6f 63 63 75 72 72 65  he first occurre
19b60 6e 63 65 20 6f 66 20 59 2c 20 6f 72 20 30 20 69  nce of Y, or 0 i
19b70 66 0a 20 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f  f.  Y does not o
19b80 63 63 75 72 20 61 6e 79 77 68 65 72 65 20 77 69  ccur anywhere wi
19b90 74 68 69 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f  thin X..  ^If bo
19ba0 74 68 20 61 72 67 75 6d 65 6e 74 73 20 58 20 61  th arguments X a
19bb0 6e 64 20 59 20 74 6f 20 69 6e 73 74 72 28 58 2c  nd Y to instr(X,
19bc0 59 29 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20  Y) are non-NULL 
19bd0 61 6e 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42  and are not BLOB
19be0 73 0a 20 20 74 68 65 6e 20 62 6f 74 68 20 61 72  s.  then both ar
19bf0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
19c00 20 73 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20   strings..  ^If 
19c10 65 69 74 68 65 72 20 58 20 6f 72 20 59 20 61 72  either X or Y ar
19c20 65 20 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28  e NULL in instr(
19c30 58 2c 59 29 20 74 68 65 6e 20 74 68 65 20 72 65  X,Y) then the re
19c40 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a  sult is NULL..}.
19c50 0a 66 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29  .funcdef {hex(X)
19c60 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65  } {} {.  ^The he
19c70 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74  x() function int
19c80 65 72 70 72 65 74 73 20 69 74 73 20 61 72 67 75  erprets its argu
19c90 6d 65 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61  ment as a BLOB a
19ca0 6e 64 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73  nd returns.  a s
19cb0 74 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74  tring which is t
19cc0 68 65 20 75 70 70 65 72 2d 63 61 73 65 20 68 65  he upper-case he
19cd0 78 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72  xadecimal render
19ce0 69 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ing of the conte
19cf0 6e 74 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f  nt of.  that blo
19d00 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  b..}..funcdef {l
19d10 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
19d20 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  ()} {} {.  ^The 
19d30 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
19d40 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  d() function ret
19d50 75 72 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d  urns the [ROWID]
19d60 0a 20 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72  .  of the last r
19d70 6f 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74  ow insert from t
19d80 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
19d90 65 63 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76  ection which inv
19da0 6f 6b 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74  oked the.  funct
19db0 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74  ion..  ^The last
19dc0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
19dd0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
19de0 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
19df0 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
19e00 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
19e10 64 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72  d()] C/C++ inter
19e20 66 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d  face function..}
19e30 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74  ..funcdef {lengt
19e40 68 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f  h(X)} {} {.  ^Fo
19e50 72 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65  r a string value
19e60 20 58 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58   X, the length(X
19e70 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
19e80 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
19e90 20 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 28   .  characters (
19ea0 6e 6f 74 20 62 79 74 65 73 29 20 69 6e 20 58 20  not bytes) in X 
19eb0 70 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72  prior to the fir
19ec0 73 74 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72  st NUL character
19ed0 2e 0a 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65  ..  Since SQLite
19ee0 20 73 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20   strings do not 
19ef0 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e  normally contain
19f00 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 2c   NUL characters,
19f10 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 0a 20   the length(X). 
19f20 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75   function will u
19f30 73 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68  sually return th
19f40 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
19f50 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
19f60 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20  the string X..  
19f70 5e 46 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c 75  ^For a blob valu
19f80 65 20 58 2c 20 6c 65 6e 67 74 68 28 58 29 20 72  e X, length(X) r
19f90 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
19fa0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
19fb0 65 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20  e blob..  ^If X 
19fc0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e  is NULL then len
19fd0 67 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a  gth(X) is NULL..
19fe0 20 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72    ^If X is numer
19ff0 69 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58  ic then length(X
1a000 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65  ) returns the le
1a010 6e 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67  ngth of a string
1a020 0a 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  .  representatio
1a030 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64  n of X..}..funcd
1a040 65 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69  ef {like(X,Y) li
1a050 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a  ke(X,Y,Z)} {} {.
1a060 20 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75    ^The like() fu
1a070 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  nction is used t
1a080 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  o implement the.
1a090 20 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26    "<b>Y LIKE X &
1a0a0 23 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33  #91;ESCAPE Z&#93
1a0b0 3b 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f  ;</b>" expressio
1a0c0 6e 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70  n. .  ^If the op
1a0d0 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c  tional ESCAPE cl
1a0e0 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c  ause is present,
1a0f0 20 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65   then the.  like
1a100 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  () function is i
1a110 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65  nvoked with thre
1a120 65 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f  e arguments.  ^O
1a130 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a  therwise, it is.
1a140 20 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74    invoked with t
1a150 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c  wo arguments onl
1a160 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  y. Note that the
1a170 20 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74   X and Y paramet
1a180 65 72 73 20 61 72 65 0a 20 20 72 65 76 65 72 73  ers are.  revers
1a190 65 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29  ed in the like()
1a1a0 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69   function relati
1a1b0 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20  ve to the infix 
1a1c0 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e  [LIKE] operator.
1a1d0 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33  .  ^The [sqlite3
1a1e0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
1a1f0 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61  ()] interface ca
1a200 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65  n be used to ove
1a210 72 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65  rride the.  like
1a220 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  () function and 
1a230 74 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74  thereby change t
1a240 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20  he operation of 
1a250 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65  the.  [LIKE] ope
1a260 72 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65  rator.  When ove
1a270 72 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65  rriding the like
1a280 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20  () function, it 
1a290 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74  may be important
1a2a0 0a 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62  .  to override b
1a2b0 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20  oth the two and 
1a2c0 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76  three argument v
1a2d0 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c  ersions of the l
1a2e0 69 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f  ike() .  functio
1a2f0 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69  n. Otherwise, di
1a300 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79  fferent code may
1a310 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d   be called to im
1a320 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c  plement the.  [L
1a330 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65  IKE] operator de
1a340 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
1a350 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43  er or not an ESC
1a360 41 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a  APE clause was .
1a370 20 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a    specified..}..
1a380 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69  .funcdef {likeli
1a390 68 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  hood(X,Y)} {} {.
1a3a0 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f    ^The likelihoo
1a3b0 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  d(X,Y) function 
1a3c0 72 65 74 75 72 6e 73 20 61 72 67 75 6d 65 6e 74  returns argument
1a3d0 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20   X unchanged..  
1a3e0 5e 28 54 68 65 20 76 61 6c 75 65 20 59 20 69 6e  ^(The value Y in
1a3f0 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29   likelihood(X,Y)
1a400 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74   must be a float
1a410 69 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61  ing point consta
1a420 6e 74 0a 20 20 62 65 74 77 65 65 6e 20 30 2e 30  nt.  between 0.0
1a430 20 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73   and 1.0, inclus
1a440 69 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69  ive.)^.  ^The li
1a450 6b 65 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e 63  kelihood(X) func
1a460 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20  tion is a no-op 
1a470 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
1a480 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69  nerator.  optimi
1a490 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68 61 74  zes away so that
1a4a0 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20   it consumes no 
1a4b0 43 50 55 20 63 79 63 6c 65 73 20 64 75 72 69 6e  CPU cycles durin
1a4c0 67 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68  g run-time.  (th
1a4d0 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61  at is, during ca
1a4e0 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f  lls to [sqlite3_
1a4f0 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65  step()])..  ^The
1a500 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20   purpose of the 
1a510 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20  likelihood(X,Y) 
1a520 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70  function is to p
1a530 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20  rovide a hint.  
1a540 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  to the query pla
1a550 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72  nner that the ar
1a560 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f  gument X is a bo
1a570 6f 6c 65 61 6e 20 74 68 61 74 20 69 73 0a 20 20  olean that is.  
1a580 74 72 75 65 20 77 69 74 68 20 61 20 70 72 6f 62  true with a prob
1a590 61 62 69 6c 69 74 79 20 6f 66 20 61 70 70 72 6f  ability of appro
1a5a0 78 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28  ximately Y..  ^(
1a5b0 54 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29  The [unlikely(X)
1a5c0 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68  ] function is sh
1a5d0 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b  ort-hand for lik
1a5e0 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35  elihood(X,0.0625
1a5f0 29 2e 29 5e 0a 20 20 5e 28 54 68 65 20 5b 6c 69  ).)^.  ^(The [li
1a600 6b 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69 6f  kely(X)] functio
1a610 6e 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64 20  n is short-hand 
1a620 66 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58  for likelihood(X
1a630 2c 30 2e 39 33 37 35 29 2e 29 5e 0a 7d 0a 0a 66  ,0.9375).)^.}..f
1a640 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 79 28 58  uncdef {likely(X
1a650 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
1a660 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1a670 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
1a680 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67  gument X unchang
1a690 65 64 2e 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c  ed..  ^The likel
1a6a0 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
1a6b0 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68   a no-op that th
1a6c0 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1a6d0 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61  .  optimizes awa
1a6e0 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e  y so that it con
1a6f0 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63  sumes no CPU cyc
1a700 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d  les at.  run-tim
1a710 65 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69  e (that is, duri
1a720 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c  ng calls to [sql
1a730 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20  ite3_step()]).. 
1a740 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66   ^The purpose of
1a750 20 74 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66   the likely(X) f
1a760 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72  unction is to pr
1a770 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74  ovide a hint.  t
1a780 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  o the query plan
1a790 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67  ner that the arg
1a7a0 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f  ument X is a boo
1a7b0 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61  lean value.  tha
1a7c0 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75  t is usually tru
1a7d0 65 2e 20 5e 28 54 68 65 20 6c 69 6b 65 6c 79 28  e. ^(The likely(
1a7e0 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65  X) function is e
1a7f0 71 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20 5b  quivalent.  to [
1a800 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 30 2e  likelihood](X,0.
1a810 39 33 37 35 29 2e 29 5e 20 53 65 65 20 61 6c 73  9375).)^ See als
1a820 6f 3a 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d  o: [unlikely(X)]
1a830 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f  ..}..funcdef {lo
1a840 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29 20  ad_extension(X) 
1a850 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58  load_extension(X
1a860 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1a870 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
1a880 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f  X,Y) function lo
1a890 61 64 73 20 5b 53 51 4c 69 74 65 20 65 78 74 65  ads [SQLite exte
1a8a0 6e 73 69 6f 6e 73 5d 20 6f 75 74 20 6f 66 20 74  nsions] out of t
1a8b0 68 65 20 73 68 61 72 65 64 0a 20 20 6c 69 62 72  he shared.  libr
1a8c0 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 64 20 58  ary file named X
1a8d0 20 75 73 69 6e 67 20 74 68 65 20 65 6e 74 72 79   using the entry
1a8e0 20 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68 65 20   point Y.  ^The 
1a8f0 72 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64 5f 65  result of load_e
1a900 78 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69 73 20  xtension().  is 
1a910 61 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e 20 20  always a NULL.  
1a920 5e 49 66 20 59 20 69 73 20 6f 6d 69 74 74 65 64  ^If Y is omitted
1a930 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c   then the defaul
1a940 74 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 6e 61  t entry point na
1a950 6d 65 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 54  me is used..  ^T
1a960 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  he load_extensio
1a970 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 61 69  n() function rai
1a980 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  ses an exception
1a990 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f   if the extensio
1a9a0 6e 20 66 61 69 6c 73 20 74 6f 0a 20 20 6c 6f 61  n fails to.  loa
1a9b0 64 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20  d or initialize 
1a9c0 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70  correctly...  <p
1a9d0 3e 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e  >^The load_exten
1a9e0 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  sion() function 
1a9f0 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65  will fail if the
1aa00 20 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d   extension attem
1aa10 70 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79  pts to .  modify
1aa20 20 6f 72 20 64 65 6c 65 74 65 20 61 6e 20 53 51   or delete an SQ
1aa30 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f  L function or co
1aa40 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1aa50 2e 20 20 5e 54 68 65 0a 20 20 65 78 74 65 6e 73  .  ^The.  extens
1aa60 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20  ion can add new 
1aa70 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
1aa80 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1aa90 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d  , but cannot.  m
1aaa0 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20  odify or delete 
1aab0 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f  existing functio
1aac0 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  ns or collating 
1aad0 73 65 71 75 65 6e 63 65 73 20 62 65 63 61 75 73  sequences becaus
1aae0 65 0a 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69  e.  those functi
1aaf0 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61  ons and/or colla
1ab00 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d  ting sequences m
1ab10 69 67 68 74 20 62 65 20 75 73 65 64 20 65 6c 73  ight be used els
1ab20 65 77 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20  ewhere.  in the 
1ab30 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
1ab40 67 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  g SQL statement.
1ab50 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74    To load an ext
1ab60 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68  ension that.  ch
1ab70 61 6e 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73  anges or deletes
1ab80 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f   functions or co
1ab90 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1aba0 73 2c 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71  s, use the.  [sq
1abb0 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
1abc0 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61  sion()] C-langua
1abd0 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20 3c  ge API.</p>..  <
1abe0 70 3e 46 6f 72 20 73 65 63 75 72 69 74 79 20 72  p>For security r
1abf0 65 61 73 6f 6e 73 2c 20 65 78 74 65 6e 73 69 6f  easons, extensio
1ac00 6e 20 6c 6f 61 64 65 64 20 69 73 20 74 75 72 6e  n loaded is turn
1ac10 65 64 20 6f 66 66 20 62 79 20 64 65 66 61 75 6c  ed off by defaul
1ac20 74 20 61 6e 64 20 6d 75 73 74 0a 20 20 62 65 20  t and must.  be 
1ac30 65 6e 61 62 6c 65 64 20 62 79 20 61 20 70 72 69  enabled by a pri
1ac40 6f 72 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69  or call to [sqli
1ac50 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f  te3_enable_load_
1ac60 65 78 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f 70  extension()].</p
1ac70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f  >.}..funcdef {lo
1ac80 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  wer(X)} {} {.  ^
1ac90 54 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e  The lower(X) fun
1aca0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1acb0 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58  copy of string X
1acc0 20 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20   with all ASCII 
1acd0 63 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e  characters.  con
1ace0 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20  verted to lower 
1acf0 63 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61  case.  ^The defa
1ad00 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77  ult built-in low
1ad10 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f  er() function wo
1ad20 72 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20  rks.  for ASCII 
1ad30 63 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e  characters only.
1ad40 20 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e    To do case con
1ad50 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d  versions on non-
1ad60 41 53 43 49 49 0a 20 20 63 68 61 72 61 63 74 65  ASCII.  characte
1ad70 72 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55  rs, load the ICU
1ad80 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66   extension..}..f
1ad90 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29  uncdef {ltrim(X)
1ada0 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20   ltrim(X,Y)} {} 
1adb0 7b 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58  {.  ^The ltrim(X
1adc0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
1add0 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
1ade0 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67  rmed by removing
1adf0 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63   any and all.  c
1ae00 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
1ae10 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20  ppear in Y from 
1ae20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66  the left side of
1ae30 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
1ae40 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
1ae50 74 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65  ted, ltrim(X) re
1ae60 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f  moves spaces fro
1ae70 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a  m the left side.
1ae80 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64    of X..}..funcd
1ae90 65 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29  ef {max(X,Y,...)
1aea0 7d 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20  } {*maxCoreFunc 
1aeb0 2a 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20  *max {max() SQL 
1aec0 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
1aed0 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65  The multi-argume
1aee0 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f  nt max() functio
1aef0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
1af00 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20  gument with the 
1af10 0a 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  .  maximum value
1af20 2c 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c  , or return NULL
1af30 20 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74   if any argument
1af40 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68   is NULL. .  ^Th
1af50 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
1af60 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20   max() function 
1af70 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67  searches its arg
1af80 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74  uments from left
1af90 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20   to right.  for 
1afa0 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  an argument that
1afb0 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61   defines a colla
1afc0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ting function an
1afd0 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c  d uses that coll
1afe0 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e  ating.  function
1aff0 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20   for all string 
1b000 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
1b010 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72  f none of the ar
1b020 67 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29  guments to max()
1b030 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c  .  define a coll
1b040 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20  ating function, 
1b050 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20  then the BINARY 
1b060 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1b070 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28  on is used..  ^(
1b080 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78  Note that <b>max
1b090 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70  ()</b> is a simp
1b0a0 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e  le function when
1b0b0 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d  .  it has 2 or m
1b0c0 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75  ore arguments bu
1b0d0 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e  t operates as an
1b0e0 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c  .  [maxAggFunc |
1b0f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1b100 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e  ion] if given on
1b110 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ly a single argu
1b120 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64  ment.)^.}..funcd
1b130 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29  ef {min(X,Y,...)
1b140 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20  } {*minCoreFunc 
1b150 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20  *min {min() SQL 
1b160 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
1b170 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65  The multi-argume
1b180 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f  nt min() functio
1b190 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
1b1a0 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a  gument with the.
1b1b0 20 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e    minimum value.
1b1c0 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
1b1d0 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e  gument min() fun
1b1e0 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69  ction searches i
1b1f0 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  ts arguments fro
1b200 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a  m left to right.
1b210 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e    for an argumen
1b220 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61  t that defines a
1b230 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1b240 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61  ion and uses tha
1b250 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75  t collating.  fu
1b260 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
1b270 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e  tring comparison
1b280 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20  s.  ^If none of 
1b290 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  the arguments to
1b2a0 20 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20   min().  define 
1b2b0 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
1b2c0 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42  tion, then the B
1b2d0 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
1b2e0 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
1b2f0 2e 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61 74 20  ..  ^(Note that 
1b300 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20  <b>min()</b> is 
1b310 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
1b320 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20  n when.  it has 
1b330 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65  2 or more argume
1b340 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73  nts but operates
1b350 20 61 73 20 61 6e 20 0a 20 20 5b 6d 69 6e 41 67   as an .  [minAg
1b360 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74  gFunc | aggregat
1b370 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67  e function] if g
1b380 69 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69  iven.  only a si
1b390 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e  ngle argument.)^
1b3a0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c  .}..funcdef {nul
1b3b0 6c 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  lif(X,Y)} {} {. 
1b3c0 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59   ^The nullif(X,Y
1b3d0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1b3e0 6e 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67  ns its first arg
1b3f0 75 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72 67  ument if the arg
1b400 75 6d 65 6e 74 73 20 61 72 65 0a 20 20 64 69 66  uments are.  dif
1b410 66 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20  ferent and NULL 
1b420 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  if the arguments
1b430 20 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20   are the same.  
1b440 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29  ^The nullif(X,Y)
1b450 20 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72   function.  sear
1b460 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e  ches its argumen
1b470 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ts from left to 
1b480 72 69 67 68 74 20 66 6f 72 20 61 6e 20 61 72 67  right for an arg
1b490 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e  ument that defin
1b4a0 65 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67  es a.  collating
1b4b0 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73   function and us
1b4c0 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e  es that collatin
1b4d0 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  g function for a
1b4e0 6c 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70  ll string.  comp
1b4f0 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65  arisons.  ^If ne
1b500 69 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20 74  ither argument t
1b510 6f 20 6e 75 6c 6c 69 66 28 29 20 64 65 66 69 6e  o nullif() defin
1b520 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  es a collating f
1b530 75 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74  unction.  then t
1b540 68 65 20 42 49 4e 41 52 59 20 69 73 20 75 73 65  he BINARY is use
1b550 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 70  d..}..funcdef {p
1b560 72 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e  rintf(FORMAT,...
1b570 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20  )} {} {.  ^(The 
1b580 70 72 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e  printf(FORMAT,..
1b590 2e 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  .) SQL function 
1b5a0 77 6f 72 6b 73 20 6c 69 6b 65 20 74 68 65 20 5b  works like the [
1b5b0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
1b5c0 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 0a 20 20  )] C-language.  
1b5d0 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65  function and the
1b5e0 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69   printf() functi
1b5f0 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e  on from the stan
1b600 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 2e 29  dard C library.)
1b610 5e 0a 20 20 54 68 65 20 66 69 72 73 74 20 61 72  ^.  The first ar
1b620 67 75 6d 65 6e 74 20 69 73 20 61 20 66 6f 72 6d  gument is a form
1b630 61 74 20 73 74 72 69 6e 67 20 74 68 61 74 20 73  at string that s
1b640 70 65 63 69 66 69 65 73 20 68 6f 77 20 74 6f 20  pecifies how to 
1b650 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6f 75  construct the ou
1b660 74 70 75 74 0a 20 20 73 74 72 69 6e 67 20 75 73  tput.  string us
1b670 69 6e 67 20 76 61 6c 75 65 73 20 74 61 6b 65 6e  ing values taken
1b680 20 66 72 6f 6d 20 73 75 62 73 65 71 75 65 6e 74   from subsequent
1b690 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 49 66   arguments.  ^If
1b6a0 20 74 68 65 20 46 4f 52 4d 41 54 20 61 72 67 75   the FORMAT argu
1b6b0 6d 65 6e 74 20 69 73 0a 20 20 6d 69 73 73 69 6e  ment is.  missin
1b6c0 67 20 6f 72 20 4e 55 4c 4c 20 74 68 65 6e 20 74  g or NULL then t
1b6d0 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
1b6e0 4c 2e 20 20 5e 54 68 65 20 25 6e 20 66 6f 72 6d  L.  ^The %n form
1b6f0 61 74 20 69 73 20 73 69 6c 65 6e 74 6c 79 20 69  at is silently i
1b700 67 6e 6f 72 65 64 20 61 6e 64 0a 20 20 64 6f 65  gnored and.  doe
1b710 73 20 6e 6f 74 20 63 6f 6e 73 75 6d 65 20 61 6e  s not consume an
1b720 20 61 72 67 75 6d 65 6e 74 2e 20 20 5e 54 68 65   argument.  ^The
1b730 20 25 70 20 66 6f 72 6d 61 74 20 69 73 20 61 6e   %p format is an
1b740 20 61 6c 69 61 73 20 66 6f 72 20 25 58 2e 20 20   alias for %X.  
1b750 5e 54 68 65 20 25 7a 20 66 6f 72 6d 61 74 0a 20  ^The %z format. 
1b760 20 69 73 20 69 6e 74 65 72 63 68 61 6e 67 65 61   is interchangea
1b770 62 6c 65 20 77 69 74 68 20 25 73 2e 20 20 5e 28  ble with %s.  ^(
1b780 49 66 20 74 68 65 72 65 20 61 72 65 20 74 6f 6f  If there are too
1b790 20 66 65 77 20 61 72 67 75 6d 65 6e 74 73 20 69   few arguments i
1b7a0 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6c  n the argument l
1b7b0 69 73 74 2c 0a 20 20 6d 69 73 73 69 6e 67 20 61  ist,.  missing a
1b7c0 72 67 75 6d 65 6e 74 73 20 61 72 65 20 61 73 73  rguments are ass
1b7d0 75 6d 65 64 20 74 6f 20 68 61 76 65 20 61 20 4e  umed to have a N
1b7e0 55 4c 4c 20 76 61 6c 75 65 2c 20 77 68 69 63 68  ULL value, which
1b7f0 20 69 73 20 74 72 61 6e 73 6c 61 74 65 64 20 69   is translated i
1b800 6e 74 6f 0a 20 20 30 20 6f 72 20 30 2e 30 20 66  nto.  0 or 0.0 f
1b810 6f 72 20 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61  or numeric forma
1b820 74 73 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73  ts or an empty s
1b830 74 72 69 6e 67 20 66 6f 72 20 25 73 2e 29 5e 0a  tring for %s.)^.
1b840 7d 0a 20 20 0a 0a 66 75 6e 63 64 65 66 20 7b 71  }.  ..funcdef {q
1b850 75 6f 74 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  uote(X)} {} {.  
1b860 5e 54 68 65 20 71 75 6f 74 65 28 58 29 20 66 75  ^The quote(X) fu
1b870 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1b880 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 53 51  he text of an SQ
1b890 4c 20 6c 69 74 65 72 61 6c 20 77 68 69 63 68 0a  L literal which.
1b8a0 20 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f    is the value o
1b8b0 66 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 73  f its argument s
1b8c0 75 69 74 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c  uitable for incl
1b8d0 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 20 53 51  usion into an SQ
1b8e0 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 5e  L statement..  ^
1b8f0 53 74 72 69 6e 67 73 20 61 72 65 20 73 75 72 72  Strings are surr
1b900 6f 75 6e 64 65 64 20 62 79 20 73 69 6e 67 6c 65  ounded by single
1b910 2d 71 75 6f 74 65 73 20 77 69 74 68 20 65 73 63  -quotes with esc
1b920 61 70 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72  apes on interior
1b930 20 71 75 6f 74 65 73 0a 20 20 61 73 20 6e 65 65   quotes.  as nee
1b940 64 65 64 2e 20 20 5e 42 4c 4f 42 73 20 61 72 65  ded.  ^BLOBs are
1b950 20 65 6e 63 6f 64 65 64 20 61 73 20 68 65 78 61   encoded as hexa
1b960 64 65 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73  decimal literals
1b970 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 77 69 74  ..  ^Strings wit
1b980 68 20 65 6d 62 65 64 64 65 64 20 4e 55 4c 20 63  h embedded NUL c
1b990 68 61 72 61 63 74 65 72 73 20 63 61 6e 6e 6f 74  haracters cannot
1b9a0 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64 20   be represented 
1b9b0 61 73 20 73 74 72 69 6e 67 0a 20 20 6c 69 74 65  as string.  lite
1b9c0 72 61 6c 73 20 69 6e 20 53 51 4c 20 61 6e 64 20  rals in SQL and 
1b9d0 68 65 6e 63 65 20 74 68 65 20 72 65 74 75 72 6e  hence the return
1b9e0 65 64 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61  ed string litera
1b9f0 6c 20 69 73 20 74 72 75 6e 63 61 74 65 64 20 70  l is truncated p
1ba00 72 69 6f 72 0a 20 20 74 6f 20 74 68 65 20 66 69  rior.  to the fi
1ba10 72 73 74 20 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63  rst NUL..}..func
1ba20 64 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b  def {random()} {
1ba30 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f  } {.  ^The rando
1ba40 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  m() function ret
1ba50 75 72 6e 73 20 61 20 70 73 65 75 64 6f 2d 72 61  urns a pseudo-ra
1ba60 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20 62  ndom integer.  b
1ba70 65 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30  etween -92233720
1ba80 33 36 38 35 34 37 37 35 38 30 38 20 61 6e 64 20  36854775808 and 
1ba90 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  +922337203685477
1baa0 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  5807..}..funcdef
1bab0 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d   {randomblob(N)}
1bac0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e   {} {.  ^The ran
1bad0 64 6f 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74  domblob(N) funct
1bae0 69 6f 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d  ion return an N-
1baf0 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69  byte blob contai
1bb00 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e 64  ning pseudo-rand
1bb10 6f 6d 0a 20 20 62 79 74 65 73 2e 20 5e 49 66 20  om.  bytes. ^If 
1bb20 4e 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31  N is less than 1
1bb30 20 74 68 65 6e 20 61 20 31 2d 62 79 74 65 20 72   then a 1-byte r
1bb40 61 6e 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65  andom blob is re
1bb50 74 75 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69  turned...  <p>Hi
1bb60 6e 74 3a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e  nt:  application
1bb70 73 20 63 61 6e 20 67 65 6e 65 72 61 74 65 20 67  s can generate g
1bb80 6c 6f 62 61 6c 6c 79 20 75 6e 69 71 75 65 20 69  lobally unique i
1bb90 64 65 6e 74 69 66 69 65 72 73 0a 20 20 75 73 69  dentifiers.  usi
1bba0 6e 67 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  ng this function
1bbb0 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 5b   together with [
1bbc0 68 65 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20  hex()] and/or.  
1bbd0 5b 6c 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20 74  [lower()] like t
1bbe0 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f  his:</p>..  <blo
1bbf0 63 6b 71 75 6f 74 65 3e 0a 20 20 68 65 78 28 72  ckquote>.  hex(r
1bc00 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62  andomblob(16))<b
1bc10 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28  r></br>.  lower(
1bc20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31  hex(randomblob(1
1bc30 36 29 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75  6))).  </blockqu
1bc40 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ote>.}..funcdef 
1bc50 7b 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d  {replace(X,Y,Z)}
1bc60 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65 70   {} {.  ^The rep
1bc70 6c 61 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63  lace(X,Y,Z) func
1bc80 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1bc90 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
1bca0 73 75 62 73 74 69 74 75 74 69 6e 67 0a 20 20 73  substituting.  s
1bcb0 74 72 69 6e 67 20 5a 20 66 6f 72 20 65 76 65 72  tring Z for ever
1bcc0 79 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20  y occurrence of 
1bcd0 73 74 72 69 6e 67 20 59 20 69 6e 20 73 74 72 69  string Y in stri
1bce0 6e 67 20 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e  ng X.  ^The [BIN
1bcf0 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67  ARY].  collating
1bd00 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
1bd10 64 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e  d for comparison
1bd20 73 2e 20 20 5e 49 66 20 59 20 69 73 20 61 6e 20  s.  ^If Y is an 
1bd30 65 6d 70 74 79 0a 20 20 73 74 72 69 6e 67 20 74  empty.  string t
1bd40 68 65 6e 20 72 65 74 75 72 6e 20 58 20 75 6e 63  hen return X unc
1bd50 68 61 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20 69  hanged.  ^If Z i
1bd60 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
1bd70 20 20 61 20 73 74 72 69 6e 67 2c 20 69 74 20 69    a string, it i
1bd80 73 20 63 61 73 74 20 74 6f 20 61 20 55 54 46 2d  s cast to a UTF-
1bd90 38 20 73 74 72 69 6e 67 20 70 72 69 6f 72 20 74  8 string prior t
1bda0 6f 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a  o processing..}.
1bdb0 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28  .funcdef {round(
1bdc0 58 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b  X) round(X,Y)} {
1bdd0 7d 20 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64  } {.  ^The round
1bde0 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
1bdf0 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e  eturns a floatin
1be00 67 2d 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20  g-point.  value 
1be10 58 20 72 6f 75 6e 64 65 64 20 74 6f 20 59 20 64  X rounded to Y d
1be20 69 67 69 74 73 20 74 6f 20 74 68 65 20 72 69 67  igits to the rig
1be30 68 74 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61  ht of the decima
1be40 6c 20 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74  l point..  ^If t
1be50 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73  he Y argument is
1be60 20 6f 6d 69 74 74 65 64 2c 20 69 74 20 69 73 20   omitted, it is 
1be70 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 30 2e  assumed to be 0.
1be80 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72  .}..funcdef {rtr
1be90 69 6d 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29  im(X) rtrim(X,Y)
1bea0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74  } {} {.  ^The rt
1beb0 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  rim(X,Y) functio
1bec0 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
1bed0 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d  ng formed by rem
1bee0 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c  oving any and al
1bef0 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74  l.  characters t
1bf00 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20  hat appear in Y 
1bf10 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73  from the right s
1bf20 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20  ide of X..  ^If 
1bf30 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69  the Y argument i
1bf40 73 20 6f 6d 69 74 74 65 64 2c 20 72 74 72 69 6d  s omitted, rtrim
1bf50 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63  (X) removes spac
1bf60 65 73 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68  es from the righ
1bf70 74 0a 20 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d  t.  side of X..}
1bf80 0a 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64  ..funcdef {sound
1bf90 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ex(X)} {} {.  ^T
1bfa0 68 65 20 73 6f 75 6e 64 65 78 28 58 29 20 66 75  he soundex(X) fu
1bfb0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1bfc0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
1bfd0 74 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f  the soundex enco
1bfe0 64 69 6e 67 20 0a 20 20 6f 66 20 74 68 65 20 73  ding .  of the s
1bff0 74 72 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20  tring X..  ^The 
1c000 73 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73  string "?000" is
1c010 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
1c020 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c   argument is NUL
1c030 4c 20 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20  L or contains.  
1c040 6e 6f 20 41 53 43 49 49 20 61 6c 70 68 61 62 65  no ASCII alphabe
1c050 74 69 63 20 63 68 61 72 61 63 74 65 72 73 2e 0a  tic characters..
1c060 20 20 5e 28 54 68 69 73 20 66 75 6e 63 74 69 6f    ^(This functio
1c070 6e 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  n is omitted fro
1c080 6d 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61  m SQLite by defa
1c090 75 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c  ult..  It is onl
1c0a0 79 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74  y available if t
1c0b0 68 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44  he [SQLITE_SOUND
1c0c0 45 58 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  EX] compile-time
1c0d0 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65   option.  is use
1c0e0 64 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73  d when SQLite is
1c0f0 20 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e   built.)^.}..fun
1c100 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d  cdef {sqlite_com
1c110 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 4e  pileoption_get(N
1c120 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
1c130 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
1c140 69 6f 6e 5f 67 65 74 28 29 20 53 51 4c 20 66 75  ion_get() SQL fu
1c150 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
1c160 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20  per around the. 
1c170 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c   [sqlite3_compil
1c180 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43  eoption_get()] C
1c190 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  /C++ function.. 
1c1a0 20 5e 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72   ^This routine r
1c1b0 65 74 75 72 6e 73 20 74 68 65 20 4e 2d 74 68 20  eturns the N-th 
1c1c0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
1c1d0 69 6f 6e 20 75 73 65 64 20 74 6f 20 62 75 69 6c  ion used to buil
1c1e0 64 20 53 51 4c 69 74 65 0a 20 20 6f 72 20 4e 55  d SQLite.  or NU
1c1f0 4c 4c 20 69 66 20 4e 20 69 73 20 6f 75 74 20 6f  LL if N is out o
1c200 66 20 72 61 6e 67 65 2e 20 20 53 65 65 20 61 6c  f range.  See al
1c210 73 6f 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f  so the [compile_
1c220 6f 70 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e  options pragma].
1c230 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c  .}..funcdef {sql
1c240 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
1c250 6e 5f 75 73 65 64 28 58 29 7d 20 7b 7d 20 7b 0a  n_used(X)} {} {.
1c260 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f    ^The sqlite_co
1c270 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
1c280 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  () SQL function 
1c290 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f  is a wrapper aro
1c2a0 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  und the.  [sqlit
1c2b0 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  e3_compileoption
1c2c0 5f 75 73 65 64 28 29 5d 20 43 2f 43 2b 2b 20 66  _used()] C/C++ f
1c2d0 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e  unction..  ^When
1c2e0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20   the argument X 
1c2f0 74 6f 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  to sqlite_compil
1c300 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 20  eoption_used(X) 
1c310 69 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63  is a string whic
1c320 68 0a 20 20 69 73 20 74 68 65 20 6e 61 6d 65 20  h.  is the name 
1c330 6f 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  of a compile-tim
1c340 65 20 6f 70 74 69 6f 6e 2c 20 74 68 69 73 20 72  e option, this r
1c350 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74  outine returns t
1c360 72 75 65 20 28 31 29 20 6f 72 0a 20 20 66 61 6c  rue (1) or.  fal
1c370 73 65 20 28 30 29 20 64 65 70 65 6e 64 69 6e 67  se (0) depending
1c380 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
1c390 6f 74 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 77  ot that option w
1c3a0 61 73 20 75 73 65 64 20 64 75 72 69 6e 67 20 74  as used during t
1c3b0 68 65 0a 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66  he.  build..}..f
1c3c0 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 73  uncdef {sqlite_s
1c3d0 6f 75 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b  ource_id()} {} {
1c3e0 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73  .  ^The sqlite_s
1c3f0 6f 75 72 63 65 5f 69 64 28 29 20 66 75 6e 63 74  ource_id() funct
1c400 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
1c410 72 69 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69  ring that identi
1c420 66 69 65 73 20 74 68 65 0a 20 20 73 70 65 63 69  fies the.  speci
1c430 66 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  fic version of t
1c440 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 74  he source code t
1c450 68 61 74 20 77 61 73 20 75 73 65 64 20 74 6f 20  hat was used to 
1c460 62 75 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65  build the SQLite
1c470 0a 20 20 6c 69 62 72 61 72 79 2e 20 20 5e 54 68  .  library.  ^Th
1c480 65 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65  e string returne
1c490 64 20 62 79 20 73 71 6c 69 74 65 5f 73 6f 75 72  d by sqlite_sour
1c4a0 63 65 5f 69 64 28 29 20 69 73 0a 20 20 74 68 65  ce_id() is.  the
1c4b0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74   date and time t
1c4c0 68 61 74 20 74 68 65 20 73 6f 75 72 63 65 20 63  hat the source c
1c4d0 6f 64 65 20 77 61 73 20 63 68 65 63 6b 65 64 20  ode was checked 
1c4e0 69 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20  in followed by. 
1c4f0 20 74 68 65 20 53 48 41 31 20 68 61 73 68 20 66   the SHA1 hash f
1c500 6f 72 20 74 68 61 74 20 63 68 65 63 6b 2d 69 6e  or that check-in
1c510 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f  .  ^This functio
1c520 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72  n is.  an SQL wr
1c530 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
1c540 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65   [sqlite3_source
1c550 69 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63  id()] C interfac
1c560 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  e..}..funcdef {s
1c570 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d  qlite_version()}
1c580 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c   {} {.  ^The sql
1c590 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75  ite_version() fu
1c5a0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1c5b0 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e  he version strin
1c5c0 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  g for the SQLite
1c5d0 0a 20 20 6c 69 62 72 61 72 79 20 74 68 61 74 20  .  library that 
1c5e0 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68  is running.  ^Th
1c5f0 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  is function is a
1c600 6e 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20  n SQL.  wrapper 
1c610 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69  around the [sqli
1c620 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
1c630 5d 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d  ] C-interface..}
1c640 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74  ..funcdef {subst
1c650 72 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28  r(X,Y,Z) substr(
1c660 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1c670 65 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20  e substr(X,Y,Z) 
1c680 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1c690 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20   a substring of 
1c6a0 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 74  input string X t
1c6b0 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74  hat begins.  wit
1c6c0 68 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61  h the Y-th chara
1c6d0 63 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69  cter and which i
1c6e0 73 20 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c  s Z characters l
1c6f0 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20  ong..  ^If Z is 
1c700 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75 62  omitted then sub
1c710 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73  str(X,Y) returns
1c720 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20   all characters 
1c730 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a  through the end.
1c740 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20    of the string 
1c750 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  X beginning with
1c760 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68   the Y-th..  ^Th
1c770 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72  e left-most char
1c780 61 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75  acter of X is nu
1c790 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69  mber 1.  ^If Y i
1c7a0 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65  s negative.  the
1c7b0 6e 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72  n the first char
1c7c0 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62  acter of the sub
1c7d0 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20  string is found 
1c7e0 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d  by counting from
1c7f0 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74   the.  right rat
1c800 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66  her than the lef
1c810 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67  t.  ^If Z is neg
1c820 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65  ative then.  the
1c830 20 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65   abs(Z) characte
1c840 72 73 20 70 72 65 63 65 64 69 6e 67 20 74 68 65  rs preceding the
1c850 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20   Y-th character 
1c860 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20  are returned..  
1c870 5e 49 66 20 58 20 69 73 20 61 20 73 74 72 69 6e  ^If X is a strin
1c880 67 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72  g then character
1c890 73 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20  s indices refer 
1c8a0 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20  to actual UTF-8 
1c8b0 0a 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20  .  characters.  
1c8c0 5e 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20  ^If X is a BLOB 
1c8d0 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73  then the indices
1c8e0 20 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e   refer to bytes.
1c8f0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74  .}..funcdef {tot
1c900 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d  al_changes()} {}
1c910 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f   {.  ^The total_
1c920 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69  changes() functi
1c930 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  on returns the n
1c940 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61  umber of row cha
1c950 6e 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79  nges.  caused by
1c960 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1c970 6f 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74  or DELETE.  stat
1c980 65 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65  ements since the
1c990 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73   current databas
1c9a0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73  e connection was
1c9b0 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73   opened..  ^This
1c9c0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
1c9d0 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
1c9e0 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  e [sqlite3_total
1c9f0 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f  _changes()].  C/
1ca00 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d  C++ interface..}
1ca10 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28  ..funcdef {trim(
1ca20 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  X) trim(X,Y)} {}
1ca30 20 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58   {.  ^The trim(X
1ca40 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
1ca50 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
1ca60 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67  rmed by removing
1ca70 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63   any and all.  c
1ca80 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
1ca90 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20  ppear in Y from 
1caa0 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a  both ends of X..
1cab0 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
1cac0 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
1cad0 20 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73   trim(X) removes
1cae0 20 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74   spaces from bot
1caf0 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a  h ends of X..}..
1cb00 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28  funcdef {typeof(
1cb10 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1cb20 74 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69  typeof(X) functi
1cb30 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1cb40 69 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74  ing that indicat
1cb50 65 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65  es the [datatype
1cb60 5d 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65  ] of.  the expre
1cb70 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c  ssion X: "null",
1cb80 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61   "integer", "rea
1cb90 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22  l", "text", or "
1cba0 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65  blob"..}..funcde
1cbb0 66 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20  f {unlikely(X)} 
1cbc0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69  {} {.  ^The unli
1cbd0 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
1cbe0 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1cbf0 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65  ument X unchange
1cc00 64 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65  d..  ^The unlike
1cc10 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  ly(X) function i
1cc20 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74  s a no-op that t
1cc30 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1cc40 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77  r.  optimizes aw
1cc50 61 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f  ay so that it co
1cc60 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79  nsumes no CPU cy
1cc70 63 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69  cles at.  run-ti
1cc80 6d 65 20 28 74 68 61 74 20 69 73 2c 20 64 75 72  me (that is, dur
1cc90 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71  ing calls to [sq
1cca0 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a  lite3_step()])..
1ccb0 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f    ^The purpose o
1ccc0 66 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58  f the unlikely(X
1ccd0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f  ) function is to
1cce0 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a   provide a hint.
1ccf0 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70    to the query p
1cd00 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20  lanner that the 
1cd10 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20  argument X is a 
1cd20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20  boolean value.  
1cd30 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
1cd40 6e 6f 74 20 74 72 75 65 2e 20 5e 28 54 68 65 20  not true. ^(The 
1cd50 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63  unlikely(X) func
1cd60 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65  tion is equivale
1cd70 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68  nt.  to [likelih
1cd80 6f 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e  ood](X, 0.0625).
1cd90 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75  )^.}..funcdef {u
1cda0 6e 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a  nicode(X)} {} {.
1cdb0 20 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28 58    ^The unicode(X
1cdc0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1cdd0 6e 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 75  ns the numeric u
1cde0 6e 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e  nicode code poin
1cdf0 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  t corresponding 
1ce00 74 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20 63  to.  the first c
1ce10 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20  haracter of the 
1ce20 73 74 72 69 6e 67 20 58 2e 20 20 49 66 20 74 68  string X.  If th
1ce30 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e  e argument to un
1ce40 69 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74 20  icode(X) is not 
1ce50 61 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e 20  a string.  then 
1ce60 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e  the result is un
1ce70 64 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63  defined..}..func
1ce80 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b  def {upper(X)} {
1ce90 7d 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72  } {.  ^The upper
1cea0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1ceb0 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69  urns a copy of i
1cec0 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e  nput string X in
1ced0 20 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f   which all .  lo
1cee0 77 65 72 2d 63 61 73 65 20 41 53 43 49 49 20 63  wer-case ASCII c
1cef0 68 61 72 61 63 74 65 72 73 20 61 72 65 20 63 6f  haracters are co
1cf00 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65 69 72  nverted to their
1cf10 20 75 70 70 65 72 2d 63 61 73 65 20 65 71 75 69   upper-case equi
1cf20 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64  valent..}..funcd
1cf30 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d  ef {zeroblob(N)}
1cf40 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72   {} {.  ^The zer
1cf50 6f 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f  oblob(N) functio
1cf60 6e 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42  n returns a BLOB
1cf70 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e   consisting of N
1cf80 20 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a   bytes of 0x00..
1cf90 20 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73    SQLite manages
1cfa0 20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73   these zeroblobs
1cfb0 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c   very efficientl
1cfc0 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61  y.  Zeroblobs ca
1cfd0 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72  n be used to.  r
1cfe0 65 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72  eserve space for
1cff0 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20   a BLOB that is 
1d000 6c 61 74 65 72 20 77 72 69 74 74 65 6e 20 75 73  later written us
1d010 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f  ing .  [sqlite3_
1d020 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e  blob_open() | in
1d030 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49  cremental BLOB I
1d040 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c  /O]..  ^This SQL
1d050 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70   function is imp
1d060 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74  lemented using t
1d070 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75  he [sqlite3_resu
1d080 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20  lt_zeroblob()]. 
1d090 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68   routine from th
1d0a0 65 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  e C/C++ interfac
1d0b0 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61  e..}.</tcl>.</ta
1d0c0 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  ble>..<tcl>.####
1d0d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d0e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d0f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d110 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
1d120 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d  on {Date And Tim
1d130 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74  e Functions} dat
1d140 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63  efunc {*datefunc
1d150 20 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20   {date and time 
1d160 66 75 6e 63 74 69 6f 6e 73 7d 7d 0a 68 64 5f 6b  functions}}.hd_k
1d170 65 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20  eywords {date() 
1d180 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74  SQL function} {t
1d190 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ime() SQL functi
1d1a0 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  on}.hd_keywords 
1d1b0 7b 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20  {datetime() SQL 
1d1c0 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61  function} {julia
1d1d0 6e 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74  nday() SQL funct
1d1e0 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73  ion}.hd_keywords
1d1f0 20 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c   {strftime() SQL
1d200 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c   function}.</tcl
1d210 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75  >..<p>.SQLite su
1d220 70 70 6f 72 74 73 20 66 69 76 65 20 64 61 74 65  pports five date
1d230 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
1d240 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  ons as follows:.
1d250 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c  </p>..<p>.<ol>.<
1d260 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f  li> ^(<b>date(</
1d270 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
1d280 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
1d290 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
1d2a0 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
1d2b0 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e  > ^(<b>time(</b>
1d2c0 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
1d2d0 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1d2e0 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1d2f0 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
1d300 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f  ^(<b>datetime(</
1d310 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
1d320 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
1d330 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
1d340 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
1d350 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79  > ^(<b>julianday
1d360 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
1d370 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1d380 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1d390 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1d3a0 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69  <li> ^(<b>strfti
1d3b0 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74  me(</b><i>format
1d3c0 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  , timestring, mo
1d3d0 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
1d3e0 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
1d3f0 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  >)^ </li>.</ol>.
1d400 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64  .<p>.^All five d
1d410 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
1d420 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69  ctions take a ti
1d430 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20  me string as an 
1d440 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20  argument. .^The 
1d450 74 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66  time string is f
1d460 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
1d470 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72  or more modifier
1d480 73 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d  s. .^The strftim
1d490 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73  e() function als
1d4a0 6f 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74  o takes a format
1d4b0 20 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66   string as its f
1d4c0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c  irst argument..<
1d4d0 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74  /p>..<p>.The dat
1d4e0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1d4f0 69 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73 65  ions use a subse
1d500 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  t of.[http://en.
1d510 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1d520 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53  ki/ISO_8601 | IS
1d530 30 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64  0-8601] date and
1d540 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e   time.formats..^
1d550 54 68 65 20 64 61 74 65 28 29 20 66 75 6e 63 74  The date() funct
1d560 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1d570 64 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72  date in this for
1d580 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e  mat: YYYY-MM-DD.
1d590 20 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75   .^The time() fu
1d5a0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1d5b0 68 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d  he time as HH:MM
1d5c0 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74  :SS. .^The datet
1d5d0 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ime() function r
1d5e0 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d  eturns "YYYY-MM-
1d5f0 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e  DD HH:MM:SS". .^
1d600 28 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29  (The julianday()
1d610 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1d620 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65  s the .[http://e
1d630 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1d640 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20  wiki/Julian_day 
1d650 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20  | Julian day] - 
1d660 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61  the.number of da
1d670 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e  ys since noon in
1d680 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f   Greenwich on No
1d690 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20  vember 24, 4714 
1d6a0 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65  B.C. .([http://e
1d6b0 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1d6c0 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47  wiki/Proleptic_G
1d6d0 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
1d6e0 72 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72  r | Proleptic Gr
1d6f0 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72  egorian calendar
1d700 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74  ]).)^.^The strft
1d710 69 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ime() routine re
1d720 74 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 66  turns the date f
1d730 6f 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69  ormatted accordi
1d740 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61  ng to .the forma
1d750 74 20 73 74 72 69 6e 67 20 73 70 65 63 69 66 69  t string specifi
1d760 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ed as the first 
1d770 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66  argument..^The f
1d780 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70  ormat string sup
1d790 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63  ports the most c
1d7a0 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69  ommon substituti
1d7b0 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ons found in the
1d7c0 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72   .[http://opengr
1d7d0 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75  oup.org/onlinepu
1d7e0 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68  bs/007908799/xsh
1d7f0 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c  /strftime.html |
1d800 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63   strftime() func
1d810 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73  tion].from the s
1d820 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
1d830 79 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73  y plus two new s
1d840 75 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66  ubstitutions, %f
1d850 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66   and %J..^(The f
1d860 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f  ollowing is a co
1d870 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76  mplete list of v
1d880 61 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29 20  alid strftime() 
1d890 73 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c  substitutions:.<
1d8a0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1d8b0 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
1d8c0 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "0" cellpadding=
1d8d0 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  "0" cellspacing=
1d8e0 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64  "0">.<tr><td><td
1d8f0 20 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e   width="10"><td>
1d900 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20  </tr>..<tr><td> 
1d910 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %d <td><td> day 
1d920 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72  of month: 00.<tr
1d930 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64  ><td> %f <td><td
1d940 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63  > fractional sec
1d950 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72  onds: SS.SSS.<tr
1d960 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64  ><td> %H <td><td
1d970 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c  > hour: 00-24 .<
1d980 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c  tr><td> %j <td><
1d990 74 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a  td> day of year:
1d9a0 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64   001-366.<tr><td
1d9b0 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75  > %J <td><td> Ju
1d9c0 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a  lian day number.
1d9d0 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e  <tr><td> %m <td>
1d9e0 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31  <td> month: 01-1
1d9f0 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74  2.<tr><td> %M <t
1da00 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30  d><td> minute: 0
1da10 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73  0-59.<tr><td> %s
1da20 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64   <td><td> second
1da30 73 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d  s since 1970-01-
1da40 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c  01.<tr><td> %S <
1da50 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a  td><td> seconds:
1da60 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20   00-59.<tr><td> 
1da70 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %w <td><td> day 
1da80 6f 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68  of week 0-6 with
1da90 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c   Sunday==0.<tr><
1daa0 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20  td> %W <td><td> 
1dab0 77 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30  week of year: 00
1dac0 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20  -53.<tr><td> %Y 
1dad0 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30  <td><td> year: 0
1dae0 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64  000-9999.<tr><td
1daf0 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a  > %% <td><td> %.
1db00 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1db10 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28  quote>)^..<p>.^(
1db20 4e 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20  Notice that all 
1db30 6f 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74  other date and t
1db40 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61  ime functions ca
1db50 6e 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69  n be expressed.i
1db60 6e 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74  n terms of strft
1db70 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  ime():.</p>..<bl
1db80 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
1db90 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
1dba0 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
1dbb0 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
1dbc0 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e  ><td><b>Function
1dbd0 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33  </b><td width="3
1dbe0 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61  0"><td><b>Equiva
1dbf0 6c 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c  lent strftime()<
1dc00 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64  /b>.<tr><td>   d
1dc10 61 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74  ate(...)      <t
1dc20 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
1dc30 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e  ('%Y-%m-%d', ...
1dc40 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d  ).<tr><td>   tim
1dc50 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e  e(...)      <td>
1dc60 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
1dc70 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a  %H:%M:%S', ...).
1dc80 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74  <tr><td>   datet
1dc90 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74  ime(...)  <td><t
1dca0 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59  d>  strftime('%Y
1dcb0 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27  -%m-%d %H:%M:%S'
1dcc0 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
1dcd0 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29    julianday(...)
1dce0 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1dcf0 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c  ime('%J', ...).<
1dd00 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
1dd10 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65  uote>)^..<p>.The
1dd20 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f   only reasons fo
1dd30 72 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63  r providing func
1dd40 74 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e  tions other than
1dd50 20 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66   strftime() is.f
1dd60 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61  or convenience a
1dd70 6e 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63  nd for efficienc
1dd80 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d  y..</p>..<h3>Tim
1dd90 65 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a  e Strings</h3>..
1dda0 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69  <p>^(A time stri
1ddb0 6e 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79  ng can be in any
1ddc0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1ddd0 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a  g formats:</p>..
1dde0 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  <ol>.<li> <i>YYY
1ddf0 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e  Y-MM-DD</i>.<li>
1de00 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
1de10 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
1de20 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
1de30 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
1de40 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
1de50 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
1de60 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1de70 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
1de80 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
1de90 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
1dea0 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53  >T</b><i>HH:MM:S
1deb0 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  S</i>.<li> <i>YY
1dec0 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54  YY-MM-DD</i><b>T
1ded0 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  </b><i>HH:MM:SS.
1dee0 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  SSS</i>.<li> <i>
1def0 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  HH:MM</i>.<li> <
1df00 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c  i>HH:MM:SS</i>.<
1df10 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  li> <i>HH:MM:SS.
1df20 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e  SSS</i>.<li> <b>
1df30 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e  now</b>.<li> <i>
1df40 44 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c  DDDDDDDDDD</i>.<
1df50 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20  /ol>)^..<p>.^In 
1df60 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67  formats 5 throug
1df70 68 20 37 2c 20 74 68 65 20 22 54 22 20 69 73 20  h 7, the "T" is 
1df80 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63  a literal charac
1df90 74 65 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a  ter separating .
1dfa0 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 68 65  the date and the
1dfb0 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72   time, as requir
1dfc0 65 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77  ed by .[http://w
1dfd0 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f  ww.w3c.org/TR/NO
1dfe0 54 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53  TE-datetime | IS
1dff0 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61  O-8601]. .^Forma
1e000 74 73 20 38 20 74 68 72 6f 75 67 68 20 31 30 20  ts 8 through 10 
1e010 74 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c  that specify onl
1e020 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20  y a time assume 
1e030 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d  a date of .2000-
1e040 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31  01-01. Format 11
1e050 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f  , the string 'no
1e060 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64  w', is converted
1e070 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65   into the .curre
1e080 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  nt date and time
1e090 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f   as obtained fro
1e0a0 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74 54 69  m the xCurrentTi
1e0b0 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65  me method.of the
1e0c0 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f   [sqlite3_vfs] o
1e0d0 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 54  bject in use..^T
1e0e0 68 65 20 27 6e 6f 77 27 20 61 72 67 75 6d 65 6e  he 'now' argumen
1e0f0 74 20 74 6f 20 64 61 74 65 20 61 6e 64 20 74 69  t to date and ti
1e100 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 77  me functions alw
1e110 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61 63  ays returns exac
1e120 74 6c 79 20 74 68 65 0a 73 61 6d 65 20 76 61 6c  tly the.same val
1e130 75 65 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20  ue for multiple 
1e140 69 6e 76 6f 63 61 74 69 6f 6e 73 20 77 69 74 68  invocations with
1e150 69 6e 20 74 68 65 20 73 61 6d 65 20 5b 73 71 6c  in the same [sql
1e160 69 74 65 33 5f 73 74 65 70 28 29 5d 20 63 61 6c  ite3_step()] cal
1e170 6c 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  l..^[http://en.w
1e180 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
1e190 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e  i/Coordinated_Un
1e1a0 69 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55  iversal_Time | U
1e1b0 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e  niversal Coordin
1e1c0 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d  ated Time (UTC)]
1e1d0 20 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d   is used. .^Form
1e1e0 61 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68  at 12 is the .[h
1e1f0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1e200 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
1e210 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20  an_day | Julian 
1e220 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72  day number].expr
1e230 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74  essed as a float
1e240 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
1e250 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d 61  .</p>..<p>.Forma
1e260 74 73 20 32 20 74 68 72 6f 75 67 68 20 31 30 20  ts 2 through 10 
1e270 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c  may be optionall
1e280 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  y followed by a 
1e290 74 69 6d 65 7a 6f 6e 65 20 69 6e 64 69 63 61 74  timezone indicat
1e2a0 6f 72 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a 22  or of the form."
1e2b0 3c 69 3e 26 23 39 31 3b 2b 2d 26 23 39 33 3b 48  <i>&#91;+-&#93;H
1e2c0 48 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a 75 73  H:MM</i>" or jus
1e2d0 74 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20 20 54  t "<i>Z</i>".  T
1e2e0 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
1e2f0 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 55   functions use U
1e300 54 43 20 6f 72 20 22 7a 75 6c 75 22 0a 74 69 6d  TC or "zulu".tim
1e310 65 20 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 61 6e  e internally, an
1e320 64 20 73 6f 20 74 68 65 20 22 5a 22 20 73 75 66  d so the "Z" suf
1e330 66 69 78 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20  fix is a no-op. 
1e340 20 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20 22 48   Any non-zero "H
1e350 48 3a 4d 4d 22 20 73 75 66 66 69 78 20 69 73 0a  H:MM" suffix is.
1e360 73 75 62 74 72 61 63 74 65 64 20 66 72 6f 6d 20  subtracted from 
1e370 74 68 65 20 69 6e 64 69 63 61 74 65 64 20 64 61  the indicated da
1e380 74 65 20 61 6e 64 20 74 69 6d 65 20 69 6e 20 6f  te and time in o
1e390 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 20  rder to compute 
1e3a0 7a 75 6c 75 20 74 69 6d 65 2e 0a 46 6f 72 20 65  zulu time..For e
1e3b0 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66 20 74  xample, all of t
1e3c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 69 6d  he following tim
1e3d0 65 20 73 74 72 69 6e 67 73 20 61 72 65 20 65 71  e strings are eq
1e3e0 75 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a  uivalent:.</p>..
1e3f0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32 30 31  <blockquote>.201
1e400 33 2d 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39  3-10-07 08:23:19
1e410 2e 31 32 30 3c 62 72 3e 0a 32 30 31 33 2d 31 30  .120<br>.2013-10
1e420 2d 30 37 54 30 38 3a 32 33 3a 31 39 2e 31 32 30  -07T08:23:19.120
1e430 5a 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37  Z<br>.2013-10-07
1e440 20 30 34 3a 32 33 3a 31 39 2e 31 32 30 2d 30 34   04:23:19.120-04
1e450 3a 30 30 3c 62 72 3e 0a 32 34 35 36 35 37 32 2e  :00<br>.2456572.
1e460 38 34 39 35 32 36 38 35 0a 3c 2f 62 6c 6f 63 6b  84952685.</block
1e470 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e  quote>..<p>.^(In
1e480 20 66 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20 61   formats 4, 7, a
1e490 6e 64 20 31 30 2c 20 74 68 65 20 66 72 61 63 74  nd 10, the fract
1e4a0 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76 61  ional seconds va
1e4b0 6c 75 65 20 53 53 2e 53 53 53 20 63 61 6e 20 68  lue SS.SSS can h
1e4c0 61 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ave.one or more 
1e4d0 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e 67  digits following
1e4e0 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
1e4f0 6e 74 2e 20 20 45 78 61 63 74 6c 79 20 74 68 72  nt.  Exactly thr
1e500 65 65 20 64 69 67 69 74 73 20 61 72 65 0a 73 68  ee digits are.sh
1e510 6f 77 6e 20 69 6e 20 74 68 65 20 65 78 61 6d 70  own in the examp
1e520 6c 65 73 20 62 65 63 61 75 73 65 20 6f 6e 6c 79  les because only
1e530 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65 65   the first three
1e540 20 64 69 67 69 74 73 20 61 72 65 20 73 69 67 6e   digits are sign
1e550 69 66 69 63 61 6e 74 0a 74 6f 20 74 68 65 20 72  ificant.to the r
1e560 65 73 75 6c 74 2c 20 62 75 74 20 74 68 65 20 69  esult, but the i
1e570 6e 70 75 74 20 73 74 72 69 6e 67 20 63 61 6e 20  nput string can 
1e580 68 61 76 65 20 66 65 77 65 72 20 6f 72 20 6d 6f  have fewer or mo
1e590 72 65 20 74 68 61 6e 20 74 68 72 65 65 20 64 69  re than three di
1e5a0 67 69 74 73 0a 61 6e 64 20 74 68 65 20 64 61 74  gits.and the dat
1e5b0 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  e/time functions
1e5c0 20 77 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65 72   will still oper
1e5d0 61 74 65 20 63 6f 72 72 65 63 74 6c 79 2e 29 5e  ate correctly.)^
1e5e0 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72 6d  .Similarly, form
1e5f0 61 74 20 31 32 20 69 73 20 73 68 6f 77 6e 20 77  at 12 is shown w
1e600 69 74 68 20 31 30 20 73 69 67 6e 69 66 69 63 61  ith 10 significa
1e610 6e 74 20 64 69 67 69 74 73 2c 20 62 75 74 20 74  nt digits, but t
1e620 68 65 20 64 61 74 65 2f 74 69 6d 65 0a 66 75 6e  he date/time.fun
1e630 63 74 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61 6c  ctions will real
1e640 6c 79 20 61 63 63 65 70 74 20 61 73 20 6d 61 6e  ly accept as man
1e650 79 20 6f 72 20 61 73 20 66 65 77 20 64 69 67 69  y or as few digi
1e660 74 73 20 61 73 20 61 72 65 20 6e 65 63 65 73 73  ts as are necess
1e670 61 72 79 20 74 6f 0a 72 65 70 72 65 73 65 6e 74  ary to.represent
1e680 20 74 68 65 20 4a 75 6c 69 61 6e 20 64 61 79 20   the Julian day 
1e690 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68  number..</p>..<h
1e6a0 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e  3>Modifiers</h3>
1e6b0 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73  ..<p>^The time s
1e6c0 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c  tring can be fol
1e6d0 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
1e6e0 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20   more modifiers 
1e6f0 74 68 61 74 20 0a 61 6c 74 65 72 20 64 61 74 65  that .alter date
1e700 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 45   and/or time. ^E
1e710 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20  ach modifier.is 
1e720 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  a transformation
1e730 20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64   that is applied
1e740 20 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c   to the time val
1e750 75 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a  ue to its left..
1e760 5e 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61  ^Modifiers are a
1e770 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74  pplied from left
1e780 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72   to right; order
1e790 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e   is important..^
1e7a0 28 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d  (The available m
1e7b0 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20  odifiers are as 
1e7c0 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f  follows.</p>..<o
1e7d0 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73  l>.<li> NNN days
1e7e0 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a  .<li> NNN hours.
1e7f0 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73  <li> NNN minutes
1e800 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73  .<li> NNN.NNNN s
1e810 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  econds.<li> NNN 
1e820 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  months.<li> NNN 
1e830 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74  years.<li> start
1e840 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73   of month.<li> s
1e850 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69  tart of year.<li
1e860 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c  > start of day.<
1e870 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c  li> weekday N.<l
1e880 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69  i> unixepoch.<li
1e890 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e  > localtime.<li>
1e8a0 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c   utc .</ol>)^..<
1e8b0 70 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78  p>^The first six
1e8c0 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68   modifiers (1 th
1e8d0 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79  rough 6) .simply
1e8e0 20 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69   add the specifi
1e8f0 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  ed amount of tim
1e900 65 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e  e to the date an
1e910 64 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65  d time .specifie
1e920 64 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69  d by the precedi
1e930 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e  ng timestring an
1e940 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 54 68  d modifiers..^Th
1e950 65 20 27 73 27 20 63 68 61 72 61 63 74 65 72 20  e 's' character 
1e960 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
1e970 65 20 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73  e modifier names
1e980 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 4e   is optional..^N
1e990 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d  ote that "&plusm
1e9a0 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f  n;NNN months" wo
1e9b0 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67  rks by rendering
1e9c0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61   the original da
1e9d0 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59  te into.the YYYY
1e9e0 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61  -MM-DD format, a
1e9f0 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d  dding the &plusm
1ea00 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20  n;NNN to the MM 
1ea10 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65  month value, the
1ea20 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68  n.normalizing th
1ea30 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73  e result.  ^Thus
1ea40 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  , for example, t
1ea50 68 65 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d  he data 2001-03-
1ea60 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27  31 modified.by '
1ea70 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61  +1 month' initia
1ea80 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d  lly yields 2001-
1ea90 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c  04-31, but April
1eaa0 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79   only has 30 day
1eab0 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69 73  s.so the date is
1eac0 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32   normalized to 2
1ead0 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73  001-05-01.  ^A s
1eae0 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63  imilar effect oc
1eaf0 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72  curs when.the or
1eb00 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46  iginal date is F
1eb10 65 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20  ebruary 29 of a 
1eb20 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65  leapyear and the
1eb30 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c   modifier is.&pl
1eb40 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65  usmn;N years whe
1eb50 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75  re N is not a mu
1eb60 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c  ltiple of four.<
1eb70 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74  /p>..<p>^The "st
1eb80 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72  art of" modifier
1eb90 73 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20  s (7 through 9) 
1eba0 73 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62  shift the date b
1ebb0 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65  ackwards .to the
1ebc0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
1ebd0 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c  e current month,
1ebe0 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70   year or day.</p
1ebf0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b  >..<p>^The "week
1ec00 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64  day" modifier ad
1ec10 76 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20  vances the date 
1ec20 66 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e  forward to the n
1ec30 65 78 74 20 64 61 74 65 20 0a 77 68 65 72 65 20  ext date .where 
1ec40 74 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62  the weekday numb
1ec50 65 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20  er is N. Sunday 
1ec60 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20  is 0, Monday is 
1ec70 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  1, and so forth.
1ec80 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75  </p>..<p>^The "u
1ec90 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1eca0 65 72 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72  er (11) only wor
1ecb0 6b 73 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61  ks if it immedia
1ecc0 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20  tely follows .a 
1ecd0 74 69 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68  timestring in th
1ece0 65 20 44 44 44 44 44 44 44 44 44 44 20 66 6f 72  e DDDDDDDDDD for
1ecf0 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69  mat. .^This modi
1ed00 66 69 65 72 20 63 61 75 73 65 73 20 74 68 65 20  fier causes the 
1ed10 44 44 44 44 44 44 44 44 44 44 20 74 6f 20 62 65  DDDDDDDDDD to be
1ed20 20 69 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74   interpreted not
1ed30 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61   .as a Julian da
1ed40 79 20 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e  y number as it n
1ed50 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65  ormally would be
1ed60 2c 20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f  , but as.[http:/
1ed70 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1ed80 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65  g/wiki/Unix_time
1ed90 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20   | Unix Time] - 
1eda0 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73  the .number of s
1edb0 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37  econds since 197
1edc0 30 2e 20 20 49 66 20 74 68 65 20 22 75 6e 69 78  0.  If the "unix
1edd0 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
1ede0 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20  does not.follow 
1edf0 61 20 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20  a timestring of 
1ee00 74 68 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44  the form DDDDDDD
1ee10 44 44 44 20 77 68 69 63 68 20 65 78 70 72 65 73  DDD which expres
1ee20 73 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  ses the number.o
1ee30 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  f seconds since 
1ee40 31 39 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72  1970 or if other
1ee50 20 6d 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72   modifiers.separ
1ee60 61 74 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f  ate the "unixepo
1ee70 63 68 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f  ch" modifier fro
1ee80 6d 20 70 72 69 6f 72 20 44 44 44 44 44 44 44 44  m prior DDDDDDDD
1ee90 44 44 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61  DD then the.beha
1eea0 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65  vior is undefine
1eeb0 64 2e 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73  d..Due to precis
1eec0 69 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20  ion limitations 
1eed0 69 6d 70 6f 73 65 64 20 62 79 20 74 68 65 20 69  imposed by the i
1eee0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75  mplementations u
1eef0 73 65 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74  se.of 64-bit int
1ef00 65 67 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78  egers, the "unix
1ef10 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
1ef20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64  only works for.d
1ef30 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30  ates between 000
1ef40 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  0-01-01 00:00:00
1ef50 20 61 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20   and 5352-11-01 
1ef60 31 30 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74  10:52:47 (unix t
1ef70 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31  imes.of -6216721
1ef80 39 32 30 30 20 74 68 72 6f 75 67 68 20 31 30 36  9200 through 106
1ef90 37 35 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a  75199167).</p>..
1efa0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
1efb0 20 6c 6f 63 61 6c 74 69 6d 65 20 7b 6c 6f 63 61   localtime {loca
1efc0 6c 74 69 6d 65 20 6d 6f 64 69 66 69 65 72 7d 3c  ltime modifier}<
1efd0 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 22 6c  /tcl>.<p>^The "l
1efe0 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69  ocaltime" modifi
1eff0 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73 20  er (12) assumes 
1f000 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  the time string 
1f010 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69  to its left is i
1f020 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  n.Universal Coor
1f030 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
1f040 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74  C) and adjusts t
1f050 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73  he time.string s
1f060 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c 61  o that it displa
1f070 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49  ys localtime.  I
1f080 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f  f "localtime".fo
1f090 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61  llows a time tha
1f0a0 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68  t is not UTC, th
1f0b0 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
1f0c0 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28  is undefined..^(
1f0d0 54 68 65 20 22 75 74 63 22 20 69 73 20 74 68 65  The "utc" is the
1f0e0 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f   opposite of "lo
1f0f0 63 61 6c 74 69 6d 65 22 2e 20 20 22 75 74 63 22  caltime".  "utc"
1f100 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 74 68   assumes that th
1f110 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73 20  e string.to its 
1f120 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65 20 6c  left is in the l
1f130 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e  ocal timezone an
1f140 64 20 61 64 6a 75 73 74 73 20 74 68 61 74 20 73  d adjusts that s
1f150 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20 55  tring to be in U
1f160 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72 69  TC.)^.If the pri
1f170 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74  or string is not
1f180 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20 74   in localtime, t
1f190 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
1f1a0 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65 66  f "utc" is.undef
1f1b0 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45  ined.</p>..<h3>E
1f1c0 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28  xamples</h3>..^(
1f1d0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
1f1e0 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a  urrent date.<p>.
1f1f0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c  .<blockquote>SEL
1f200 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b  ECT date('now');
1f210 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1f220 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1f230 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74 68  e last day of th
1f240 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e  e current month.
1f250 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1f260 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e  e>SELECT date('n
1f270 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f  ow','start of mo
1f280 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c  nth','+1 month',
1f290 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f  '-1 day');.</blo
1f2a0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1f2b0 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  >Compute the dat
1f2c0 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e  e and time given
1f2d0 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d   a unix timestam
1f2e0 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f 70  p 1092941466.</p
1f2f0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1f300 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65 74      SELECT datet
1f310 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c 20  ime(1092941466, 
1f320 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f  'unixepoch');.</
1f330 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1f340 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1f350 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69  date and time gi
1f360 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73  ven a unix times
1f370 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2c  tamp 1092941466,
1f380 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65   and .compensate
1f390 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20   for your local 
1f3a0 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c  timezone.</p>..<
1f3b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1f3c0 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30  LECT datetime(10
1f3d0 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65  92941466, 'unixe
1f3e0 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d  poch', 'localtim
1f3f0 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  e');.</blockquot
1f400 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
1f410 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 75  te the current u
1f420 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f  nix timestamp.</
1f430 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1f440 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
1f450 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a  me('%s','now');.
1f460 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1f470 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1f480 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73  e number of days
1f490 20 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e 69   since the signi
1f4a0 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44 65 63  ng of the US Dec
1f4b0 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65  laration.of Inde
1f4c0 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c  pendence.</p>..<
1f4d0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1f4e0 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28 27  LECT julianday('
1f4f0 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61  now') - julianda
1f500 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29 3b  y('1776-07-04');
1f510 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1f520 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1f530 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63  he number of sec
1f540 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61 72  onds since a par
1f550 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69  ticular moment i
1f560 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c  n 2004:</p>..<bl
1f570 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1f580 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27  CT strftime('%s'
1f590 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74 69  ,'now') - strfti
1f5a0 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30 31  me('%s','2004-01
1f5b0 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a  -01 02:34:56');.
1f5c0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1f5d0 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74  .^(<p>.Compute t
1f5e0 68 65 20 64 61 74 65 20 6f 66 20 74 68 65 20 66  he date of the f
1f5f0 69 72 73 74 20 54 75 65 73 64 61 79 20 69 6e 20  irst Tuesday in 
1f600 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65 20  October.for the 
1f610 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f  current year..</
1f620 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1f630 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 28 27  .  SELECT date('
1f640 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 79  now','start of y
1f650 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27  ear','+9 months'
1f660 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c  ,'weekday 2');.<
1f670 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1f680 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1f690 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20   time since the 
1f6a0 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65  unix epoch in se
1f6b0 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72  conds .(like str
1f6c0 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
1f6d0 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65  ) except include
1f6e0 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  s fractional par
1f6f0 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  t):</p>..<blockq
1f700 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28  uote>.  SELECT (
1f710 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29  julianday('now')
1f720 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36   - 2440587.5)*86
1f730 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  400.0;.</blockqu
1f740 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76 65  ote>)^..<h3>Cave
1f750 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68 33  ats And Bugs</h3
1f760 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74  >..<p>The comput
1f770 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74  ation of local t
1f780 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61 76  ime depends heav
1f790 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d 20  ily on the whim 
1f7a0 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73 20  .of politicians 
1f7b0 61 6e 64 20 69 73 20 74 68 75 73 20 64 69 66 66  and is thus diff
1f7c0 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f 72  icult to get cor
1f7d0 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f  rect for .all lo
1f7e0 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73 20  cales. ^In this 
1f7f0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
1f800 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
1f810 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e  ibrary .function
1f820 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 69   localtime_r() i
1f830 73 20 75 73 65 64 20 74 6f 20 61 73 73 69 73 74  s used to assist
1f840 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61 74   in the calculat
1f850 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69  ion of .local ti
1f860 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63 61  me.  ^(The .loca
1f870 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e 63  ltime_r() C func
1f880 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e  tion normally on
1f890 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65 61  ly works for yea
1f8a0 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30 20  rs.between 1970 
1f8b0 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64 61  and 2037. For da
1f8c0 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 69 73  tes outside this
1f8d0 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a   range, SQLite .
1f8e0 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70 20  attempts to map 
1f8f0 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61 6e  the year into an
1f900 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61 72   equivalent year
1f910 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72 61   within .this ra
1f920 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c 63  nge, do the calc
1f930 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61  ulation, then ma
1f940 70 20 74 68 65 20 79 65 61 72 20 62 61 63 6b 2e  p the year back.
1f950 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68  )^</p>...<p>^(Th
1f960 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e  ese functions on
1f970 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74 65  ly work for date
1f980 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30  s between 0000-0
1f990 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61 6e  1-01 00:00:00.an
1f9a0 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33 3a  d 9999-12-31 23:
1f9b0 35 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20 64  59:59 (julidan d
1f9c0 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31 30  ay numbers 17210
1f9d0 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33 37  59.5 through 537
1f9e0 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64  3484.5).)^.For d
1f9f0 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 61  ates outside tha
1fa00 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65 73  t range, the res
1fa10 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66 75  ults of these.fu
1fa20 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64 65  nctions are unde
1fa30 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e  fined.</p>..<p>N
1fa40 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73  on-Vista Windows
1fa50 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20   platforms only 
1fa60 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20  support one set 
1fa70 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56  of DST rules. .V
1fa80 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72  ista only suppor
1fa90 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72  ts two. Therefor
1faa0 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74  e, on these plat
1fab0 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63  forms, .historic
1fac0 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69  al DST calculati
1fad0 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f  ons will be inco
1fae0 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d  rrect. .For exam
1faf0 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20  ple, in the US, 
1fb00 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54 20  in 2007 the DST 
1fb10 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a  rules changed. .
1fb20 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
1fb30 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c  s platforms appl
1fb40 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20 44  y the new 2007 D
1fb50 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c  ST rules .to all
1fb60 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73 20   previous years 
1fb70 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64  as well. Vista d
1fb80 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74  oes somewhat bet
1fb90 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75  ter.getting resu
1fba0 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b  lts correct back
1fbb0 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74   to 1986, when t
1fbc0 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c  he rules were al
1fbd0 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a  so changed.</p>.
1fbe0 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c  .<p>All internal
1fbf0 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73   computations as
1fc00 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70 3a  sume the .[http:
1fc10 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1fc20 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61  rg/wiki/Gregoria
1fc30 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72 65  n_calendar | Gre
1fc40 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d  gorian calendar]
1fc50 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20  .system.  It is 
1fc60 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61  also assumed tha
1fc70 74 20 65 76 65 72 79 0a 64 61 79 20 69 73 20 65  t every.day is e
1fc80 78 61 63 74 6c 79 20 38 36 34 30 30 20 73 65 63  xactly 86400 sec
1fc90 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e  onds in duration
1fca0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
1fcb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fcc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fcd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fcf0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1fd00 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46  ion {Aggregate F
1fd10 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e  unctions} aggfun
1fd20 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f 74  c {*aggfunc}.</t
1fd30 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67  cl>..<p>.The agg
1fd40 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1fd50 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65   shown below are
1fd60 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65   available by de
1fd70 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e  fault.  Addition
1fd80 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e  al.aggregate fun
1fd90 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69  ctions written i
1fda0 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64 65 64  n C may be added
1fdb0 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c   using the .[sql
1fdc0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
1fdd0 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e  tion()]</a>.API.
1fde0 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e  </p>..<p>.^In an
1fdf0 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  y aggregate func
1fe00 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20  tion that takes 
1fe10 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
1fe20 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74  t, that argument
1fe30 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64  .can be preceded
1fe40 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
1fe50 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73  DISTINCT.  ^In s
1fe60 75 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69  uch cases, dupli
1fe70 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72  cate.elements ar
1fe80 65 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72  e filtered befor
1fe90 65 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 69  e being passed i
1fea0 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74  nto the aggregat
1feb0 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72  e function..^For
1fec0 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75   example, the fu
1fed0 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69  nction "count(di
1fee0 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20  stinct X)" will 
1fef0 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
1ff00 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61  r.of distinct va
1ff10 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58  lues of column X
1ff20 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
1ff30 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
1ff40 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20  non-null.values 
1ff50 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70  in column X..</p
1ff60 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  >..<table border
1ff70 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31  =0 cellpadding=1
1ff80 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66  0>.<tcl>.funcdef
1ff90 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76 67 20   {avg(X)} {*avg 
1ffa0 7b 61 76 67 28 29 20 61 67 67 72 65 67 61 74 65  {avg() aggregate
1ffb0 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1ffc0 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e 63 74  ^The avg() funct
1ffd0 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
1ffe0 65 20 61 76 65 72 61 67 65 20 76 61 6c 75 65 20  e average value 
1fff0 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  of all non-NULL 
20000 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20  <i>X</i> within 
20010 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53 74 72  a.  group.  ^Str
20020 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c  ing and BLOB val
20030 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  ues that do not 
20040 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72  look like number
20050 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70 72 65  s are.  interpre
20060 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54 68 65  ted as 0..  ^The
20070 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29   result of avg()
20080 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f   is always a flo
20090 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
200a0 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61  e as long as.  a
200b0 74 20 74 68 65 72 65 20 69 73 20 61 74 20 6c 65  t there is at le
200c0 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c  ast one non-NULL
200d0 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66 20 61   input even if a
200e0 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72 65 20  ll.  inputs are 
200f0 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68 65 20  integers.  ^The 
20100 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20  result of avg() 
20110 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f  is NULL if and o
20120 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65 20 61  nly if.  there a
20130 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  re no non-NULL i
20140 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63  nputs.  .}..func
20150 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f  def {count(X) co
20160 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20  unt(*)} {*count 
20170 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61  {count() aggrega
20180 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
20190 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58 29 20    ^The count(X) 
201a0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
201b0 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68  .  a count of th
201c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65  e number of time
201d0 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69  s.  that <i>X</i
201e0 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e  > is not NULL in
201f0 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20   a group.  ^The 
20200 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f  count(*) functio
20210 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72 67  n.  (with no arg
20220 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73 20  uments) returns 
20230 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
20240 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
20250 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65  group..}..funcde
20260 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  f {group_concat(
20270 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  X) group_concat(
20280 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70  X,Y)} {.  *group
20290 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63  _concat {group_c
202a0 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67 61 74  oncat() aggregat
202b0 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a  e function}.} {.
202c0 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e    ^The group_con
202d0 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  cat() function r
202e0 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e  eturns.  a strin
202f0 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20 63  g which is the c
20300 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a  oncatenation of.
20310 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76    all non-NULL v
20320 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69  alues of <i>X</i
20330 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65 74 65  >.  ^If paramete
20340 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72  r <i>Y</i> is pr
20350 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69 74 20  esent then.  it 
20360 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73  is used as the s
20370 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74 77 65  eparator.  betwe
20380 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  en instances of 
20390 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f  <i>X</i>.  ^A co
203a0 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75 73 65  mma (",") is use
203b0 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74  d as the separat
203c0 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e  or.  if <i>Y</i>
203d0 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20 54 68   is omitted.  Th
203e0 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63  e order of the c
203f0 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c 65 6d  oncatenated elem
20400 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69 74 72  ents is.  arbitr
20410 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ary..}..funcdef 
20420 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67  {max(X)} {*maxAg
20430 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b  gFunc *agg_max {
20440 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20  max() aggregate 
20450 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
20460 54 68 65 20 6d 61 78 28 29 20 61 67 67 72 65 67  The max() aggreg
20470 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  ate function.  r
20480 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d  eturns the maxim
20490 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20  um value of all 
204a0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
204b0 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69  oup..  ^The maxi
204c0 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65  mum value is the
204d0 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c   value that woul
204e0 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 6c 61  d be returned la
204f0 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52  st in an.  ORDER
20500 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d 65 20   BY on the same 
20510 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67  column.  ^Aggreg
20520 61 74 65 20 6d 61 78 28 29 20 72 65 74 75 72 6e  ate max() return
20530 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64  s NULL .  if and
20540 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61   only if there a
20550 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  re no non-NULL v
20560 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
20570 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
20580 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67  min(X)} {*minAgg
20590 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d  Func *agg_min {m
205a0 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20 66  in() aggregate f
205b0 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
205c0 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65 67 61  he min() aggrega
205d0 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  te function.  re
205e0 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75  turns the minimu
205f0 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  m non-NULL value
20600 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
20610 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e  n the group..  ^
20620 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75  The minimum valu
20630 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e  e is the first n
20640 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68  on-NULL value th
20650 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61 72 0a  at would appear.
20660 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59    in an ORDER BY
20670 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a   of the column..
20680 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 69 6e    ^Aggregate min
20690 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20  () returns NULL 
206a0 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74  if and only if t
206b0 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
206c0 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e  NULL.  values in
206d0 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66   the group..}..f
206e0 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20 74  uncdef {sum(X) t
206f0 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75  otal(X)} {.  *su
20700 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61  mFunc *sum *tota
20710 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67 72 65  l.  {sum() aggre
20720 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20  gate function}. 
20730 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67   {total() aggreg
20740 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20  ate function}.} 
20750 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29 20 61  {.  ^The sum() a
20760 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67 72 65  nd total() aggre
20770 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20  gate functions. 
20780 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66 20 61   return sum of a
20790 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  ll non-NULL valu
207a0 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
207b0 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61 72 65  .  ^If there are
207c0 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70   no non-NULL inp
207d0 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d  ut rows then sum
207e0 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c  () returns.  NUL
207f0 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65  L but total() re
20800 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c  turns 0.0..  NUL
20810 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c  L is not normall
20820 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75  y a helpful resu
20830 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f  lt for the sum o
20840 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20  f no rows.  but 
20850 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64  the SQL standard
20860 20 72 65 71 75 69 72 65 73 20 69 74 20 61 6e 64   requires it and
20870 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51   most other.  SQ
20880 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
20890 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d  es implement sum
208a0 28 29 20 74 68 61 74 20 77 61 79 20 73 6f 20 53  () that way so S
208b0 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e  QLite does it in
208c0 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20   the.  same way 
208d0 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63  in order to be c
208e0 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65  ompatible.   The
208f0 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f   non-standard to
20900 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  tal() function. 
20910 20 69 73 20 70 72 6f 76 69 64 65 64 20 61 73 20   is provided as 
20920 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79  a convenient way
20930 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20   to work around 
20940 74 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62  this design prob
20950 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c  lem.  in the SQL
20960 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a   language.</p>..
20970 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74    <p>^The result
20980 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61   of total() is a
20990 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67  lways a floating
209a0 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20   point value..  
209b0 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73  ^The result of s
209c0 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67  um() is an integ
209d0 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20  er value if all 
209e0 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20  non-NULL inputs 
209f0 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20  are integers..  
20a00 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f  ^If any input to
20a10 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65   sum() is neithe
20a20 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  r an integer or 
20a30 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75  a NULL.  then su
20a40 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c  m() returns a fl
20a50 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
20a60 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74  ue.  which might
20a70 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61   be an approxima
20a80 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65  tion to the true
20a90 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e   sum.</p>..  <p>
20aa0 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f  ^Sum() will thro
20ab0 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76  w an "integer ov
20ac0 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f  erflow" exceptio
20ad0 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a  n if all inputs.
20ae0 20 20 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f    are integers o
20af0 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20  r NULL.  and an 
20b00 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
20b10 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20 70   occurs at any p
20b20 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20  oint during the 
20b30 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e  computation..  ^
20b40 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68  Total() never th
20b50 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20  rows an integer 
20b60 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63  overflow..}.</tc
20b70 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63  l>.</table>..<tc
20b80 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
20b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20bb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20bd0 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54  #.Section INSERT
20be0 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54 20   insert {INSERT 
20bf0 2a 49 4e 53 45 52 54 73 7d 0a 0a 52 65 63 75 72  *INSERTs}..Recur
20c00 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
20c10 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 0a 3c 2f  m insert-stmt.</
20c20 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 53  tcl>..<p>The INS
20c30 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  ERT statement co
20c40 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62 61 73  mes in three bas
20c50 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e  ic forms.  .<ul>
20c60 0a 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 66 69 72  .<li><p>^The fir
20c70 73 74 20 66 6f 72 6d 20 28 77 69 74 68 20 74 68  st form (with th
20c80 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77 6f  e "VALUES" keywo
20c90 72 64 29 20 63 72 65 61 74 65 73 20 6f 6e 65 20  rd) creates one 
20ca0 6f 72 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77 73  or more.new rows
20cb0 20 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67 20   in.an existing 
20cc0 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 20 3c  table. ^If the <
20cd0 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61  yyterm>column-na
20ce0 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74  me</yyterm> list
20cf0 20 61 66 74 65 72 0a 3c 79 79 74 65 72 6d 3e 74   after.<yyterm>t
20d00 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  able-name</yyter
20d10 6d 3e 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68  m> is omitted th
20d20 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  en the number.of
20d30 20 76 61 6c 75 65 73 20 69 6e 73 65 72 74 65 64   values inserted
20d40 20 69 6e 74 6f 20 65 61 63 68 20 72 6f 77 0a 6d   into each row.m
20d50 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
20d60 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
20d70 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
20d80 74 61 62 6c 65 2e 20 5e 49 6e 20 74 68 69 73 20  table. ^In this 
20d90 63 61 73 65 0a 74 68 65 20 72 65 73 75 6c 74 20  case.the result 
20da0 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
20db0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72  e left-most expr
20dc0 65 73 73 69 6f 6e 20 66 72 6f 6d 20 65 61 63 68  ession from each
20dd0 20 74 65 72 6d 20 6f 66 0a 74 68 65 20 56 41 4c   term of.the VAL
20de0 55 45 53 20 6c 69 73 74 20 69 73 20 69 6e 73 65  UES list is inse
20df0 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 6c 65  rted into the le
20e00 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f  ft-most column o
20e10 66 20 65 61 63 68 20 6e 65 77 20 72 6f 77 2c 0a  f each new row,.
20e20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 66 6f 72  and so forth for
20e30 20 65 61 63 68 20 73 75 62 73 65 71 75 65 6e 74   each subsequent
20e40 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 49 66   expression. ^If
20e50 20 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d   a <yyterm>colum
20e60 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a  n-name</yyterm>.
20e70 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
20e80 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  d, then the numb
20e90 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  er of values in 
20ea0 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
20eb0 0a 56 41 4c 55 45 20 6c 69 73 74 20 6d 75 73 74  .VALUE list must
20ec0 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65   match the numbe
20ed0 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63  r of.specified c
20ee0 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66  olumns. ^Each of
20ef0 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d   the named colum
20f00 6e 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f  ns of the new ro
20f10 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77  w is populated.w
20f20 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 73 20  ith the results 
20f30 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
20f40 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
20f50 56 41 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f  VALUES expressio
20f60 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e  n. ^Table.column
20f70 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70  s that do not ap
20f80 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75  pear in the colu
20f90 6d 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75  mn list are popu
20fa0 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 20 0a  lated with the .
20fb0 5b 64 65 66 61 75 6c 74 20 63 6f 6c 75 6d 6e 20  [default column 
20fc0 76 61 6c 75 65 5d 20 28 73 70 65 63 69 66 69 65  value] (specifie
20fd0 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
20fe0 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20   [CREATE TABLE] 
20ff0 73 74 61 74 65 6d 65 6e 74 29 2c 20 6f 72 0a 77  statement), or.w
21000 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 5b  ith NULL if no [
21010 64 65 66 61 75 6c 74 20 76 61 6c 75 65 5d 20 69  default value] i
21020 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 6c  s specified...<l
21030 69 3e 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20  i><p>The second 
21040 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45  form of the INSE
21050 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e  RT statement con
21060 74 61 69 6e 73 20 61 20 5b 53 45 4c 45 43 54 5d  tains a [SELECT]
21070 20 73 74 61 74 65 6d 65 6e 74 0a 69 6e 73 74 65   statement.inste
21080 61 64 20 6f 66 20 61 20 56 41 4c 55 45 53 20 63  ad of a VALUES c
21090 6c 61 75 73 65 2e 20 5e 41 20 6e 65 77 20 65 6e  lause. ^A new en
210a0 74 72 79 20 69 73 20 69 6e 73 65 72 74 65 64 20  try is inserted 
210b0 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 66  into the table f
210c0 6f 72 20 65 61 63 68 0a 72 6f 77 20 6f 66 20 64  or each.row of d
210d0 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20  ata returned by 
210e0 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45  executing the SE
210f0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
21100 5e 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73  ^If a column-lis
21110 74 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20  t is.specified, 
21120 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
21130 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73  lumns in the res
21140 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43  ult of the SELEC
21150 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  T must be the sa
21160 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72  me.as the number
21170 20 6f 66 20 69 74 65 6d 73 20 69 6e 20 74 68 65   of items in the
21180 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 2e 20 5e 4f   column-list. ^O
21190 74 68 65 72 77 69 73 65 2c 20 69 66 20 6e 6f 20  therwise, if no 
211a0 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73  column-list is.s
211b0 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75  pecified, the nu
211c0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
211d0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  in the result of
211e0 20 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74   the SELECT must
211f0 20 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20   be the same.as 
21200 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
21210 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
21220 6c 65 2e 20 5e 41 6e 79 20 53 45 4c 45 43 54 20  le. ^Any SELECT 
21230 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c 75  statement, inclu
21240 64 69 6e 67 0a 5b 63 6f 6d 70 6f 75 6e 64 20 53  ding.[compound S
21250 45 4c 45 43 54 73 5d 20 61 6e 64 20 53 45 4c 45  ELECTs] and SELE
21260 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  CT statements wi
21270 74 68 20 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e  th [ORDER BY] an
21280 64 2f 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61  d/or [LIMIT] cla
21290 75 73 65 73 2c 20 0a 6d 61 79 20 62 65 20 75 73  uses, .may be us
212a0 65 64 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20  ed in an INSERT 
212b0 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 69  statement of thi
212c0 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70 3e  s form...<li><p>
212d0 54 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20 6f  The third form o
212e0 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  f an INSERT stat
212f0 65 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44 45  ement is with DE
21300 46 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28  FAULT VALUES..^(
21310 54 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44  The INSERT ... D
21320 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73 74  EFAULT VALUES st
21330 61 74 65 6d 65 6e 74 20 69 6e 73 65 72 74 73 20  atement inserts 
21340 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77  a single new row
21350 20 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64 20   into the.named 
21360 74 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20 63  table.)^ ^Each c
21370 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77  olumn of the new
21380 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65   row is populate
21390 64 20 77 69 74 68 20 69 74 73 20 0a 5b 64 65 66  d with its .[def
213a0 61 75 6c 74 20 76 61 6c 75 65 5d 2c 20 6f 72 20  ault value], or 
213b0 77 69 74 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e  with a NULL if n
213c0 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  o default value 
213d0 69 73 20 73 70 65 63 69 66 69 65 64 20 0a 61 73  is specified .as
213e0 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6c   part of the col
213f0 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  umn definition i
21400 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41  n the [CREATE TA
21410 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a  BLE] statement..
21420 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  .</ul>..<p>^The 
21430 22 52 45 50 4c 41 43 45 22 20 61 6e 64 20 22 49  "REPLACE" and "I
21440 4e 53 45 52 54 20 4f 52 20 3c 69 3e 61 63 74 69  NSERT OR <i>acti
21450 6f 6e 3c 2f 69 3e 22 20 66 6f 72 6d 73 20 73 70  on</i>" forms sp
21460 65 63 69 66 79 20 61 6e 20 61 6c 74 65 72 6e 61  ecify an alterna
21470 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20  tive.constraint 
21480 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
21490 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  ion algorithm to
214a0 20 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73   use during this
214b0 20 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d   one INSERT comm
214c0 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63  and..See the sec
214d0 74 69 6f 6e 20 74 69 74 6c 65 64 20 5b 4f 4e 20  tion titled [ON 
214e0 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64  CONFLICT] for ad
214f0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
21500 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74  tion..For compat
21510 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53  ibility with MyS
21520 51 4c 2c 20 5e 74 68 65 20 70 61 72 73 65 72 20  QL, ^the parser 
21530 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f  allows the use o
21540 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79  f the.single key
21550 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 6c 61  word <a href="la
21560 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22  ng_replace.html"
21570 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20  >REPLACE</a> as 
21580 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20 22 49  an .alias for "I
21590 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45  NSERT OR REPLACE
215a0 22 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74  "...<p>^(The opt
215b0 69 6f 6e 61 6c 20 22 3c 69 3e 73 63 68 65 6d 61  ional "<i>schema
215c0 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  -name</i><b>.</b
215d0 3e 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  >" prefix on the
215e0 20 0a 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d   .<yyterm>table-
215f0 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 69 73  name</yyterm>.is
21600 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 74   supported for t
21610 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20  op-level INSERT 
21620 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e  statements only.
21630 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e  )^  ^The table n
21640 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75  ame must be.unqu
21650 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45  alified for INSE
21660 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  RT statements th
21670 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at occur within 
21680 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
21690 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69   statements..^Si
216a0 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45  milarly, the "DE
216b0 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f  FAULT VALUES" fo
216c0 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54  rm of the INSERT
216d0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75   statement is su
216e0 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d  pported for.top-
216f0 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61  level INSERT sta
21700 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64  tements only and
21710 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20   not for INSERT 
21720 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
21730 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a  n.triggers..<p>.
21740 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
21750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21790 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f  #####.Section {O
217a0 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
217b0 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f  e} conflict {{co
217c0 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b  nflict clause} {
217d0 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 52  ON CONFLICT}}..R
217e0 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
217f0 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63  agram conflict-c
21800 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  lause.</tcl>..<p
21810 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
21820 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61   clause is not a
21830 20 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f   separate SQL co
21840 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a  mmand.  It is a.
21850 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61  non-standard cla
21860 75 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70  use that can app
21870 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65  ear in many othe
21880 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a  r SQL commands..
21890 49 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20  It is given its 
218a0 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74  own section in t
218b0 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63  his document bec
218c0 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70  ause it is not.p
218d0 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20  art of standard 
218e0 53 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72  SQL and therefor
218f0 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66  e might not be f
21900 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70  amiliar.</p>..<p
21910 3e 5e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72  >^The syntax for
21920 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
21930 20 63 6c 61 75 73 65 20 69 73 20 61 73 20 73 68   clause is as sh
21940 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68  own above for.th
21950 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  e CREATE TABLE c
21960 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20 74 68  ommand.  ^For th
21970 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44  e INSERT and.UPD
21980 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68  ATE commands, th
21990 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43  e keywords "ON C
219a0 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65 70  ONFLICT" are rep
219b0 6c 61 63 65 64 20 62 79 20 22 4f 52 22 20 73 6f  laced by "OR" so
219c0 20 74 68 61 74 0a 74 68 65 20 73 79 6e 74 61 78   that.the syntax
219d0 20 72 65 61 64 73 20 6d 6f 72 65 20 6e 61 74 75   reads more natu
219e0 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78 61 6d  rally.  For exam
219f0 70 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a  ple, instead of.
21a00 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c  "INSERT ON CONFL
21a10 49 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68  ICT IGNORE" we h
21a20 61 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49  ave "INSERT OR I
21a30 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77  GNORE"..The keyw
21a40 6f 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20  ords change but 
21a50 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74  the meaning of t
21a60 68 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65  he clause is the
21a70 20 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79   same.either way
21a80 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e  .</p>..<p>The ON
21a90 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
21aa0 20 61 70 70 6c 69 65 73 20 74 6f 20 5b 55 4e 49   applies to [UNI
21ab0 51 55 45 5d 2c 20 5b 4e 4f 54 20 4e 55 4c 4c 5d  QUE], [NOT NULL]
21ac0 2c 0a 5b 43 48 45 43 4b 5d 2c 20 61 6e 64 20 5b  ,.[CHECK], and [
21ad0 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e  PRIMARY KEY] con
21ae0 73 74 72 61 69 6e 74 73 2e 0a 54 68 65 20 4f 4e  straints..The ON
21af0 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
21b00 74 68 6d 20 64 6f 65 73 20 6e 6f 74 0a 61 70 70  thm does not.app
21b10 6c 79 20 74 6f 20 5b 46 4f 52 45 49 47 4e 20 4b  ly to [FOREIGN K
21b20 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e  EY constraints].
21b30 0a 54 68 65 72 65 20 61 72 65 20 66 69 76 65 20  .There are five 
21b40 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
21b50 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 63 68  ion algorithm ch
21b60 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c  oices:.ROLLBACK,
21b70 20 41 42 4f 52 54 2c 20 46 41 49 4c 2c 20 49 47   ABORT, FAIL, IG
21b80 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43  NORE, and REPLAC
21b90 45 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20  E..^The default 
21ba0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
21bb0 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ion algorithm is
21bc0 20 41 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73   ABORT.  This.is
21bd0 20 77 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a   what they mean:
21be0 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c  </p>..<dl>.<dt><
21bf0 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f  b>ROLLBACK</b></
21c00 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
21c10 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20  n an applicable 
21c20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
21c30 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
21c40 20 52 4f 4c 4c 42 41 43 4b 0a 72 65 73 6f 6c 75   ROLLBACK.resolu
21c50 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61  tion algorithm a
21c60 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  borts the curren
21c70 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  t SQL statement 
21c80 77 69 74 68 0a 61 6e 20 53 51 4c 49 54 45 5f 43  with.an SQLITE_C
21c90 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20  ONSTRAINT error 
21ca0 61 6e 64 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74  and rolls back t
21cb0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
21cc0 61 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74  action..^If no t
21cd0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61 63  ransaction is.ac
21ce0 74 69 76 65 20 28 6f 74 68 65 72 20 74 68 61 6e  tive (other than
21cf0 20 74 68 65 20 69 6d 70 6c 69 65 64 20 74 72 61   the implied tra
21d00 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73  nsaction that is
21d10 20 63 72 65 61 74 65 64 20 6f 6e 20 65 76 65 72   created on ever
21d20 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20  y.command) then 
21d30 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73  the ROLLBACK res
21d40 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
21d50 6d 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  m works the same
21d60 20 61 73 20 74 68 65 0a 41 42 4f 52 54 20 61 6c   as the.ABORT al
21d70 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64  gorithm.</p></dd
21d80 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c  >..<dt><b>ABORT<
21d90 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
21da0 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63   ^When an applic
21db0 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  able constraint 
21dc0 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
21dd0 2c 20 74 68 65 20 41 42 4f 52 54 0a 72 65 73 6f  , the ABORT.reso
21de0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
21df0 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72 72   aborts the curr
21e00 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
21e10 74 0a 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  t.with an SQLITE
21e20 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f  _CONSTRAINT erro
21e30 72 20 61 6e 64 20 62 61 63 6b 73 20 6f 75 74 20  r and backs out 
21e40 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d 61 64 65  any changes.made
21e50 20 62 79 20 74 68 65 20 63 75 72 72 65 6e 74 20   by the current 
21e60 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 3b 20 62  SQL statement; b
21e70 75 74 20 63 68 61 6e 67 65 73 20 63 61 75 73 65  ut changes cause
21e80 64 0a 62 79 20 70 72 69 6f 72 20 53 51 4c 20 73  d.by prior SQL s
21e90 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
21ea0 20 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61   the same transa
21eb0 63 74 69 6f 6e 20 61 72 65 20 70 72 65 73 65 72  ction are preser
21ec0 76 65 64 20 61 6e 64 20 74 68 65 0a 74 72 61 6e  ved and the.tran
21ed0 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20  saction remains 
21ee0 61 63 74 69 76 65 2e 0a 54 68 69 73 20 69 73 20  active..This is 
21ef0 74 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61  the default beha
21f00 76 69 6f 72 20 61 6e 64 20 74 68 65 20 62 65 68  vior and the beh
21f10 61 76 69 6f 72 20 73 70 65 63 69 66 69 65 64 20  avior specified 
21f20 62 79 20 74 68 65 20 53 51 4c 0a 73 74 61 6e 64  by the SQL.stand
21f30 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  ard.</p></dd>..<
21f40 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f  dt><b>FAIL</b></
21f50 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
21f60 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20  n an applicable 
21f70 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
21f80 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
21f90 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e   FAIL.resolution
21fa0 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74   algorithm abort
21fb0 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  s the current SQ
21fc0 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  L statement with
21fd0 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54   an.SQLITE_CONST
21fe0 52 41 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e 42  RAINT error.  ^B
21ff0 75 74 20 74 68 65 20 46 41 49 4c 20 72 65 73 6f  ut the FAIL reso
22000 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a  lution does not.
22010 62 61 63 6b 20 6f 75 74 20 70 72 69 6f 72 20 63  back out prior c
22020 68 61 6e 67 65 73 20 6f 66 20 74 68 65 20 53 51  hanges of the SQ
22030 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  L statement that
22040 20 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65 73   failed nor does
22050 0a 69 74 20 65 6e 64 20 74 68 65 20 74 72 61 6e  .it end the tran
22060 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78  saction..^For ex
22070 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44  ample, if an UPD
22080 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e  ATE.statement en
22090 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73  countered a cons
220a0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
220b0 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f   on the 100th ro
220c0 77 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70  w that.it attemp
220d0 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68  ts to update, th
220e0 65 6e 20 74 68 65 20 66 69 72 73 74 20 39 39 20  en the first 99 
220f0 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65 20  row changes are 
22100 70 72 65 73 65 72 76 65 64 0a 62 75 74 20 63 68  preserved.but ch
22110 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30  anges to rows 10
22120 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76  0 and beyond nev
22130 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64  er occur.</p></d
22140 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52  d>..<dt><b>IGNOR
22150 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  E</b></dt>.<dd><
22160 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
22170 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
22180 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
22190 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52 45 20  rs, .the IGNORE 
221a0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
221b0 69 74 68 6d 20 73 6b 69 70 73 20 74 68 65 20 6f  ithm skips the o
221c0 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 74  ne row that cont
221d0 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72 61  ains.the constra
221e0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 6e  int violation an
221f0 64 20 63 6f 6e 74 69 6e 75 65 73 20 70 72 6f 63  d continues proc
22200 65 73 73 69 6e 67 20 73 75 62 73 65 71 75 65 6e  essing subsequen
22210 74 20 72 6f 77 73 0a 6f 66 20 74 68 65 20 53 51  t rows.of the SQ
22220 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20 69  L statement as i
22230 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74 20 77  f nothing went w
22240 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f 77 73  rong..Other rows
22250 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
22260 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63  r the row that.c
22270 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e  ontained the con
22280 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
22290 6e 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 6f  n are inserted o
222a0 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c  r updated.normal
222b0 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20 69 73  ly. ^No error is
222c0 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 74   returned when t
222d0 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66 6c 69  he IGNORE confli
222e0 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c  ct resolution.al
222f0 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e  gorithm is used.
22300 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
22310 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64  b>REPLACE</b></d
22320 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
22330 20 61 20 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b   a [UNIQUE] or [
22340 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e  PRIMARY KEY] con
22350 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
22360 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 52  n occurs, .the R
22370 45 50 4c 41 43 45 20 61 6c 67 6f 72 69 74 68 6d  EPLACE algorithm
22380 0a 64 65 6c 65 74 65 73 20 70 72 65 2d 65 78 69  .deletes pre-exi
22390 73 74 69 6e 67 20 72 6f 77 73 20 74 68 61 74 20  sting rows that 
223a0 61 72 65 20 63 61 75 73 69 6e 67 20 74 68 65 20  are causing the 
223b0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
223c0 74 69 6f 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e  tion.prior to in
223d0 73 65 72 74 69 6e 67 20 6f 72 20 75 70 64 61 74  serting or updat
223e0 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20  ing the current 
223f0 72 6f 77 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d  row and the comm
22400 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65  and continues .e
22410 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c  xecuting normall
22420 79 2e 0a 5e 49 66 20 61 20 5b 4e 4f 54 20 4e 55  y..^If a [NOT NU
22430 4c 4c 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  LL] constraint v
22440 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
22450 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e   the REPLACE con
22460 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e  flict.resolution
22470 20 72 65 70 6c 61 63 65 73 20 74 68 65 20 4e 55   replaces the NU
22480 4c 4c 20 76 61 6c 75 65 20 77 69 74 68 0a 74 68  LL value with.th
22490 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
224a0 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c  for that column,
224b0 20 6f 72 20 69 66 20 74 68 65 20 63 6f 6c 75 6d   or if the colum
224c0 6e 20 68 61 73 20 6e 6f 20 64 65 66 61 75 6c 74  n has no default
224d0 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65  .value, then the
224e0 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d   ABORT algorithm
224f0 20 69 73 20 75 73 65 64 2e 0a 5e 49 66 20 61 20   is used..^If a 
22500 5b 43 48 45 43 4b 5d 20 63 6f 6e 73 74 72 61 69  [CHECK] constrai
22510 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
22520 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45  urs, the REPLACE
22530 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
22540 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 61  tion.algorithm a
22550 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c 69 6b 65  lways works like
22560 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e   ABORT.</p>..<p>
22570 5e 57 68 65 6e 20 74 68 65 20 52 45 50 4c 41 43  ^When the REPLAC
22580 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  E conflict resol
22590 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64  ution strategy d
225a0 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f  eletes rows in o
225b0 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20  rder to.satisfy 
225c0 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43  a constraint, [C
225d0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 7c 20  REATE TRIGGER | 
225e0 64 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d  delete triggers]
225f0 20 66 69 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c   fire if and onl
22600 79 20 69 66 0a 5b 72 65 63 75 72 73 69 76 65 5f  y if.[recursive_
22610 74 72 69 67 67 65 72 73 20 70 72 61 67 6d 61 20  triggers pragma 
22620 7c 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  | recursive trig
22630 67 65 72 73 5d 20 61 72 65 20 65 6e 61 62 6c 65  gers] are enable
22640 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
22650 5b 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f  [sqlite3_update_
22660 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20 68 6f  hook | update ho
22670 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b  ok] is not invok
22680 65 64 20 66 6f 72 20 72 6f 77 73 20 74 68 61 74  ed for rows that
22690 0a 61 72 65 20 64 65 6c 65 74 65 64 20 62 79 20  .are deleted by 
226a0 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66  the REPLACE conf
226b0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
226c0 73 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f 72 20  strategy.  ^Nor 
226d0 64 6f 65 73 0a 52 45 50 4c 41 43 45 20 69 6e 63  does.REPLACE inc
226e0 72 65 6d 65 6e 74 20 74 68 65 20 5b 73 71 6c 69  rement the [sqli
226f0 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68  te3_changes | ch
22700 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54  ange counter]..T
22710 68 65 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 62  he exceptional b
22720 65 68 61 76 69 6f 72 73 20 64 65 66 69 6e 65 64  ehaviors defined
22730 20 69 6e 20 74 68 69 73 20 70 61 72 61 67 72 61   in this paragra
22740 70 68 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ph might change 
22750 0a 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c  .in a future rel
22760 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a  ease.</p>.</dl>.
22770 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74  .<p>^The algorit
22780 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  hm specified in 
22790 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f 66  the OR clause of
227a0 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50   an INSERT or UP
227b0 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61  DATE.overrides a
227c0 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  ny algorithm spe
227d0 63 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41  cified in a CREA
227e0 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f  TE TABLE..^If no
227f0 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70   algorithm is sp
22800 65 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65  ecified anywhere
22810 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f  , the ABORT algo
22820 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f  rithm is used.</
22830 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
22840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22880 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
22890 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78   REINDEX reindex
228a0 20 52 45 49 4e 44 45 58 0a 0a 52 65 63 75 72 73   REINDEX..Recurs
228b0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
228c0 20 72 65 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f   reindex-stmt.</
228d0 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45  tcl>..<p>^The RE
228e0 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73  INDEX command is
228f0 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20   used to delete 
22900 61 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64  and recreate ind
22910 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63  ices from scratc
22920 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75  h..This is usefu
22930 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e  l when the defin
22940 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61  ition of a colla
22950 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61  tion sequence ha
22960 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a  s changed..</p>.
22970 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e  .<p>^If the REIN
22980 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 6e  DEX keyword is n
22990 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ot followed by a
229a0 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65   collation-seque
229b0 6e 63 65 20 6f 72 20 64 61 74 61 62 61 73 65 20  nce or database 
229c0 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 66 69  .object identifi
229d0 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  er, then all ind
229e0 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61  ices in all atta
229f0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
22a00 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e  re rebuilt...<p>
22a10 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20  ^If the REINDEX 
22a20 6b 65 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c 6f  keyword is follo
22a30 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69  wed by a collati
22a40 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on-sequence name
22a50 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69 63  , then.all indic
22a60 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68  es in all attach
22a70 65 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61  ed databases tha
22a80 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20  t use the named 
22a90 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
22aa0 63 65 73 0a 61 72 65 20 72 65 63 72 65 61 74 65  ces.are recreate
22ab0 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20  d. ..<p>^Or, if 
22ac0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 61 74 74  the argument att
22ad0 61 63 68 65 64 20 74 6f 20 74 68 65 20 52 45 49  ached to the REI
22ae0 4e 44 45 58 20 69 64 65 6e 74 69 66 69 65 73 20  NDEX identifies 
22af0 61 20 73 70 65 63 69 66 69 63 20 0a 64 61 74 61  a specific .data
22b00 62 61 73 65 20 74 61 62 6c 65 2c 20 74 68 65 6e  base table, then
22b10 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 61 74 74   all indices att
22b20 61 63 68 65 64 20 74 6f 20 74 68 65 20 64 61 74  ached to the dat
22b30 61 62 61 73 65 20 74 61 62 6c 65 20 61 72 65 20  abase table are 
22b40 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69 74  rebuilt. .^If it
22b50 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70   identifies a sp
22b60 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20  ecific database 
22b70 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75 73 74  index, then just
22b80 20 74 68 61 74 20 69 6e 64 65 78 20 69 73 20 72   that index is r
22b90 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e 46  ecreated...<p>^F
22ba0 6f 72 20 61 20 63 6f 6d 6d 61 6e 64 20 6f 66 20  or a command of 
22bb0 74 68 65 20 66 6f 72 6d 20 22 52 45 49 4e 44 45  the form "REINDE
22bc0 58 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22 2c 20  X <i>name</i>", 
22bd0 61 20 6d 61 74 63 68 0a 61 67 61 69 6e 73 74 20  a match.against 
22be0 3c 79 79 74 65 72 6d 3e 63 6f 6c 6c 61 74 69 6f  <yyterm>collatio
22bf0 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  n-name</yyterm> 
22c00 74 61 6b 65 73 20 70 72 65 63 65 64 65 6e 63 65  takes precedence
22c10 20 6f 76 65 72 20 61 20 6d 61 74 63 68 0a 61 67   over a match.ag
22c20 61 69 6e 73 74 20 3c 79 79 74 65 72 6d 3e 69 6e  ainst <yyterm>in
22c30 64 65 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  dex-name</yyterm
22c40 3e 20 6f 72 20 3c 79 79 74 65 72 6d 3e 74 61 62  > or <yyterm>tab
22c50 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
22c60 2e 0a 54 68 69 73 20 61 6d 62 69 67 75 69 74 79  ..This ambiguity
22c70 20 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6d   in the syntax m
22c80 61 79 20 62 65 20 61 76 6f 69 64 65 64 20 62 79  ay be avoided by
22c90 20 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69   always specifyi
22ca0 6e 67 20 61 0a 3c 79 79 74 65 72 6d 3e 73 63 68  ng a.<yyterm>sch
22cb0 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ema-name</yyterm
22cc0 3e 20 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e  > when reindexin
22cd0 67 20 61 20 73 70 65 63 69 66 69 63 20 74 61 62  g a specific tab
22ce0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74  le or index...<t
22cf0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
22d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22d40 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c  ###.Section REPL
22d50 41 43 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c  ACE replace REPL
22d60 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ACE..</tcl>..<p>
22d70 5e 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d  ^The REPLACE com
22d80 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73  mand is an alias
22d90 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f   for the "[ON CO
22da0 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45 52 54 20  NFLICT | INSERT 
22db0 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a 76 61 72  OR REPLACE]".var
22dc0 69 61 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e 53  iant of the [INS
22dd0 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a  ERT] command.  .
22de0 54 68 69 73 20 61 6c 69 61 73 20 69 73 20 70 72  This alias is pr
22df0 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61  ovided for compa
22e00 74 69 62 69 6c 69 74 79 20 6f 74 68 65 72 20 53  tibility other S
22e10 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
22e20 6e 65 73 2e 20 20 53 65 65 20 74 68 65 20 0a 5b  nes.  See the .[
22e30 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20  INSERT] command 
22e40 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f  documentation fo
22e50 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
22e60 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a  ormation.</p>  .
22e70 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
22e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22e90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22ec0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
22ed0 57 49 54 48 20 63 6c 61 75 73 65 7d 20 77 69 74  WITH clause} wit
22ee0 68 20 7b 7b 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  h {{common table
22ef0 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 57 49   expressions} WI
22f00 54 48 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  TH}..RecursiveBu
22f10 62 62 6c 65 44 69 61 67 72 61 6d 20 77 69 74 68  bbleDiagram with
22f20 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a  -clause.</tcl>..
22f30 3c 70 3e 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20  <p>Common Table 
22f40 45 78 70 72 65 73 73 69 6f 6e 73 20 6f 72 20 43  Expressions or C
22f50 54 45 73 20 61 63 74 20 6c 69 6b 65 20 74 65 6d  TEs act like tem
22f60 70 6f 72 61 72 79 20 5b 76 69 65 77 73 5d 20 74  porary [views] t
22f70 68 61 74 20 65 78 69 73 74 0a 6f 6e 6c 79 20 66  hat exist.only f
22f80 6f 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20  or the duration 
22f90 6f 66 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  of a single SQL 
22fa0 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72  statement.  Ther
22fb0 65 20 61 72 65 20 74 77 6f 20 6b 69 6e 64 73 20  e are two kinds 
22fc0 6f 66 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  of.common table 
22fd0 65 78 70 72 65 73 73 69 6f 6e 73 3a 20 22 6f 72  expressions: "or
22fe0 64 69 6e 61 72 79 22 20 61 6e 64 20 22 72 65 63  dinary" and "rec
22ff0 75 72 73 69 76 65 22 2e 20 4f 72 64 69 6e 61 72  ursive". Ordinar
23000 79 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  y .common table 
23010 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
23020 68 65 6c 70 66 75 6c 20 66 6f 72 20 6d 61 6b 69  helpful for maki
23030 6e 67 0a 71 75 65 72 69 65 73 20 65 61 73 69 65  ng.queries easie
23040 72 20 74 6f 20 75 6e 64 65 72 73 74 61 6e 64 20  r to understand 
23050 62 79 20 66 61 63 74 6f 72 69 6e 67 0a 73 75 62  by factoring.sub
23060 71 75 65 72 69 65 73 20 6f 75 74 20 6f 66 20 74  queries out of t
23070 68 65 20 6d 61 69 6e 20 53 51 4c 20 73 74 61 74  he main SQL stat
23080 65 6d 65 6e 74 2e 0a 52 65 63 75 72 73 69 76 65  ement..Recursive
23090 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
230a0 70 72 65 73 73 69 6f 6e 73 0a 70 72 6f 76 69 64  pressions.provid
230b0 65 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f  e the ability to
230c0 20 64 6f 20 68 69 65 72 61 72 63 68 69 63 61 6c   do hierarchical
230d0 20 6f 72 0a 72 65 63 75 72 73 69 76 65 20 71 75   or.recursive qu
230e0 65 72 69 65 73 20 6f 66 20 74 72 65 65 73 20 61  eries of trees a
230f0 6e 64 20 67 72 61 70 68 73 2c 20 61 20 63 61 70  nd graphs, a cap
23100 61 62 69 6c 69 74 79 0a 74 68 61 74 20 69 73 20  ability.that is 
23110 6e 6f 74 20 6f 74 68 65 72 77 69 73 65 20 61 76  not otherwise av
23120 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 53  ailable in the S
23130 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 0a 3c 70  QL language...<p
23140 3e 41 6c 6c 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  >All common tabl
23150 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 28 6f  e expressions (o
23160 72 64 69 6e 61 72 79 20 61 6e 64 20 72 65 63 75  rdinary and recu
23170 72 73 69 76 65 29 20 61 72 65 20 0a 63 72 65 61  rsive) are .crea
23180 74 65 64 20 62 79 20 70 72 65 70 65 6e 64 69 6e  ted by prependin
23190 67 20 61 20 57 49 54 48 20 63 6c 61 75 73 65 20  g a WITH clause 
231a0 69 6e 20 66 72 6f 6e 74 20 6f 66 20 61 20 5b 53  in front of a [S
231b0 45 4c 45 43 54 5d 2c 20 5b 49 4e 53 45 52 54 5d  ELECT], [INSERT]
231c0 2c 20 5b 44 45 4c 45 54 45 5d 2c 0a 6f 72 20 5b  , [DELETE],.or [
231d0 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e  UPDATE] statemen
231e0 74 2e 20 20 41 20 73 69 6e 67 6c 65 20 57 49 54  t.  A single WIT
231f0 48 20 63 6c 61 75 73 65 20 63 61 6e 20 73 70 65  H clause can spe
23200 63 69 66 79 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  cify one or more
23210 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  .common table ex
23220 70 72 65 73 73 69 6f 6e 73 2c 20 73 6f 6d 65 20  pressions, some 
23230 6f 66 20 77 68 69 63 68 20 61 72 65 20 6f 72 64  of which are ord
23240 69 6e 61 72 79 20 61 6e 64 20 73 6f 6d 65 20 6f  inary and some o
23250 66 20 77 68 69 63 68 0a 61 72 65 20 72 65 63 75  f which.are recu
23260 72 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  rsive...<tcl>hd_
23270 66 72 61 67 6d 65 6e 74 20 6f 72 64 69 6e 61 72  fragment ordinar
23280 79 63 74 65 20 7b 6f 72 64 69 6e 61 72 79 20 63  ycte {ordinary c
23290 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
232a0 65 73 73 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c  essions}</tcl>.<
232b0 68 33 3e 4f 72 64 69 6e 61 72 79 20 43 6f 6d 6d  h3>Ordinary Comm
232c0 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73 73  on Table Express
232d0 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6e  ions</h3>..<p>An
232e0 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e   ordinary common
232f0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
23300 6e 20 77 6f 72 6b 73 20 61 73 20 69 66 20 69 74  n works as if it
23310 20 77 65 72 65 20 61 20 5b 76 69 65 77 5d 20 74   were a [view] t
23320 68 61 74 0a 65 78 69 73 74 73 20 66 6f 72 20 74  hat.exists for t
23330 68 65 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61  he duration of a
23340 20 73 69 6e 67 6c 65 20 73 74 61 74 65 6d 65 6e   single statemen
23350 74 2e 20 20 4f 72 64 69 6e 61 72 79 20 63 6f 6d  t.  Ordinary com
23360 6d 6f 6e 20 74 61 62 6c 65 0a 65 78 70 72 65 73  mon table.expres
23370 73 69 6f 6e 73 20 61 72 65 20 75 73 65 66 75 6c  sions are useful
23380 20 66 6f 72 20 66 61 63 74 6f 72 69 6e 67 20 6f   for factoring o
23390 75 74 20 73 75 62 71 75 65 72 69 65 73 20 61 6e  ut subqueries an
233a0 64 20 6d 61 6b 69 6e 67 20 74 68 65 20 6f 76 65  d making the ove
233b0 72 61 6c 6c 0a 53 51 4c 20 73 74 61 74 65 6d 65  rall.SQL stateme
233c0 6e 74 20 65 61 73 69 65 72 20 74 6f 20 72 65 61  nt easier to rea
233d0 64 20 61 6e 64 20 75 6e 64 65 72 73 74 61 6e 64  d and understand
233e0 2e 0a 0a 3c 70 3e 41 20 57 49 54 48 20 63 6c 61  ...<p>A WITH cla
233f0 75 73 65 20 63 61 6e 20 63 6f 6e 74 61 69 6e 20  use can contain 
23400 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  ordinary common 
23410 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
23420 73 20 65 76 65 6e 20 69 66 0a 69 74 20 69 6e 63  s even if.it inc
23430 6c 75 64 65 73 20 74 68 65 20 52 45 43 55 52 53  ludes the RECURS
23440 49 56 45 20 6b 65 79 77 6f 72 64 2e 20 20 54 68  IVE keyword.  Th
23450 65 20 75 73 65 20 6f 66 20 52 45 43 55 52 53 49  e use of RECURSI
23460 56 45 20 64 6f 65 73 20 6e 6f 74 20 66 6f 72 63  VE does not forc
23470 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e.common table e
23480 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 62 65  xpressions to be
23490 20 72 65 63 75 72 73 69 76 65 2e 0a 0a 3c 74 63   recursive...<tc
234a0 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  l>.hd_fragment r
234b0 65 63 75 72 73 69 76 65 63 74 65 20 7b 72 65 63  ecursivecte {rec
234c0 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61  ursive common ta
234d0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d  ble expressions}
234e0 20 5c 0a 7b 72 65 63 75 72 73 69 76 65 20 71 75   \.{recursive qu
234f0 65 72 79 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ery}.</tcl>.<h3>
23500 52 65 63 75 72 73 69 76 65 20 43 6f 6d 6d 6f 6e  Recursive Common
23510 20 54 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f   Table Expressio
23520 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 72 65  ns</h3>..<p>A re
23530 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74  cursive common t
23540 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20  able expression 
23550 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 77  can be used to w
23560 72 69 74 65 20 61 20 71 75 65 72 79 20 74 68 61  rite a query tha
23570 74 0a 77 61 6c 6b 73 20 61 20 74 72 65 65 20 6f  t.walks a tree o
23580 72 20 67 72 61 70 68 2e 20 20 41 20 72 65 63 75  r graph.  A recu
23590 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62  rsive common tab
235a0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61  le expression ha
235b0 73 20 74 68 65 20 73 61 6d 65 0a 62 61 73 69 63  s the same.basic
235c0 20 73 79 6e 74 61 78 20 61 73 20 61 6e 20 6f 72   syntax as an or
235d0 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
235e0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ble expression, 
235f0 62 75 74 20 77 69 74 68 20 74 68 65 20 66 6f 6c  but with the fol
23600 6c 6f 77 69 6e 67 0a 61 64 64 69 74 69 6f 6e 61  lowing.additiona
23610 6c 20 66 65 61 74 75 72 65 73 3a 0a 0a 3c 6f 6c  l features:..<ol
23620 3e 0a 3c 6c 69 3e 20 54 68 65 20 22 5b 73 65 6c  >.<li> The "[sel
23630 65 63 74 2d 73 74 6d 74 5d 22 0a 20 20 20 20 20  ect-stmt]".     
23640 6d 75 73 74 20 62 65 20 61 20 5b 63 6f 6d 70 6f  must be a [compo
23650 75 6e 64 20 73 65 6c 65 63 74 5d 20 77 68 65 72  und select] wher
23660 65 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  e the right-most
23670 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61   [compound-opera
23680 74 6f 72 5d 20 69 73 0a 20 20 20 20 20 65 69 74  tor] is.     eit
23690 68 65 72 20 55 4e 49 4f 4e 20 6f 72 20 55 4e 49  her UNION or UNI
236a0 4f 4e 20 41 4c 4c 2e 0a 3c 6c 69 3e 20 54 68 65  ON ALL..<li> The
236b0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 6f 6e 20   table named on 
236c0 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69  the left-hand si
236d0 64 65 20 6f 66 20 74 68 65 20 41 53 20 6b 65 79  de of the AS key
236e0 77 6f 72 64 20 6d 75 73 74 20 61 70 70 65 61 72  word must appear
236f0 0a 20 20 20 20 20 65 78 61 63 74 6c 79 20 6f 6e  .     exactly on
23700 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ce in the FROM c
23710 6c 61 75 73 65 20 6f 66 20 74 68 65 20 72 69 67  lause of the rig
23720 68 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 73  ht-most SELECT s
23730 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 20 6f 66  tatement.     of
23740 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 73 65   the compound se
23750 6c 65 63 74 2c 20 61 6e 64 20 6e 6f 77 68 65 72  lect, and nowher
23760 65 20 65 6c 73 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  e else..</ol>..<
23770 70 3e 54 6f 20 70 75 74 20 69 74 20 61 6e 6f 74  p>To put it anot
23780 68 65 72 20 77 61 79 2c 20 61 20 72 65 63 75 72  her way, a recur
23790 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
237a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73  e expression mus
237b0 74 0a 6c 6f 6f 6b 20 6c 69 6b 65 20 74 68 65 20  t.look like the 
237c0 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 74 63 6c  following:..<tcl
237d0 3e 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  >RecursiveBubble
237e0 44 69 61 67 72 61 6d 20 72 65 63 75 72 73 69 76  Diagram recursiv
237f0 65 2d 63 74 65 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  e-cte</tcl>..<p>
23800 43 61 6c 6c 20 74 68 65 20 74 61 62 6c 65 20 6e  Call the table n
23810 61 6d 65 64 20 62 79 20 74 68 65 20 5b 63 74 65  amed by the [cte
23820 2d 74 61 62 6c 65 2d 6e 61 6d 65 5d 20 69 6e 20  -table-name] in 
23830 61 20 72 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d  a recursive.comm
23840 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
23850 69 6f 6e 20 74 68 65 20 22 72 65 63 75 72 73 69  ion the "recursi
23860 76 65 20 74 61 62 6c 65 22 2e 0a 49 6e 20 74 68  ve table"..In th
23870 65 20 5b 72 65 63 75 72 73 69 76 65 2d 63 74 65  e [recursive-cte
23880 5d 20 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d  ] bubble diagram
23890 20 61 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75   above, the recu
238a0 72 73 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74  rsive.table must
238b0 20 61 70 70 65 61 72 20 65 78 61 63 74 6c 79 20   appear exactly 
238c0 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  once in the FROM
238d0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 0a   clause of the .
238e0 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
238f0 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
23900 3e 0a 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20 61  >.and must not a
23910 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20 65  ppear anywhere e
23920 6c 73 65 20 69 6e 20 65 69 74 68 65 72 20 74 68  lse in either th
23930 65 0a 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61  e.<yyterm>initia
23940 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  l-select</yyterm
23950 3e 20 6f 72 20 74 68 65 0a 3c 79 79 74 65 72 6d  > or the.<yyterm
23960 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  >recursive-selec
23970 74 3c 2f 79 79 74 65 72 6d 3e 2c 20 69 6e 63 6c  t</yyterm>, incl
23980 75 64 69 6e 67 20 73 75 62 71 75 65 72 69 65 73  uding subqueries
23990 2e 0a 54 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e  ..The <yyterm>in
239a0 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79  itial-select</yy
239b0 74 65 72 6d 3e 20 6d 61 79 20 62 65 0a 61 20 5b  term> may be.a [
239c0 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d  compound select]
239d0 2c 20 62 75 74 20 69 74 20 6d 61 79 20 6e 6f 74  , but it may not
239e0 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45   include an ORDE
239f0 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20 6f 72 20  R BY, LIMIT, or 
23a00 4f 46 46 53 45 54 2e 0a 54 68 65 20 72 65 63 75  OFFSET..The recu
23a10 72 73 69 76 65 2d 73 65 6c 65 63 74 20 6d 75 73  rsive-select mus
23a20 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 73 65  t be a simple se
23a30 6c 65 63 74 2c 20 6e 6f 74 20 61 20 63 6f 6d 70  lect, not a comp
23a40 6f 75 6e 64 2e 20 20 54 68 65 0a 72 65 63 75 72  ound.  The.recur
23a50 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 61  sive-select is a
23a60 6c 6c 6f 77 65 64 20 74 6f 20 69 6e 63 6c 75 64  llowed to includ
23a70 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c  e an ORDER BY, L
23a80 49 4d 49 54 2c 20 61 6e 64 2f 6f 72 20 4f 46 46  IMIT, and/or OFF
23a90 53 45 54 2e 0a 0a 3c 70 3e 54 68 65 20 62 61 73  SET...<p>The bas
23aa0 69 63 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72  ic algorithm for
23ab0 20 63 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 63   computing the c
23ac0 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65  ontent of the re
23ad0 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a 69 73  cursive table.is
23ae0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f   as follows:..<o
23af0 6c 3e 0a 3c 6c 69 3e 20 52 75 6e 20 74 68 65 20  l>.<li> Run the 
23b00 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d  <yyterm>initial-
23b10 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20  select</yyterm> 
23b20 61 6e 64 20 61 64 64 20 74 68 65 20 72 65 73 75  and add the resu
23b30 6c 74 73 20 74 6f 20 61 20 71 75 65 75 65 2e 0a  lts to a queue..
23b40 3c 6c 69 3e 20 57 68 69 6c 65 20 74 68 65 20 71  <li> While the q
23b50 75 65 75 65 20 69 73 20 6e 6f 74 20 65 6d 70 74  ueue is not empt
23b60 79 3a 0a 3c 6f 6c 20 74 79 70 65 3d 22 61 22 3e  y:.<ol type="a">
23b70 0a 3c 6c 69 3e 20 45 78 74 72 61 63 74 20 61 20  .<li> Extract a 
23b80 73 69 6e 67 6c 65 20 72 6f 77 20 66 72 6f 6d 20  single row from 
23b90 74 68 65 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20  the queue..<li> 
23ba0 49 6e 73 65 72 74 20 74 68 61 74 20 73 69 6e 67  Insert that sing
23bb0 6c 65 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 20  le row into the 
23bc0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a  recursive table.
23bd0 3c 6c 69 3e 20 50 72 65 74 65 6e 64 20 74 68 61  <li> Pretend tha
23be0 74 20 74 68 65 20 73 69 6e 67 6c 65 20 72 6f 77  t the single row
23bf0 20 6a 75 73 74 20 65 78 74 72 61 63 74 65 64 20   just extracted 
23c00 69 73 20 74 68 65 20 6f 6e 6c 79 0a 20 20 20 20  is the only.    
23c10 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 63 75   row in the recu
23c20 72 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20  rsive table and 
23c30 72 75 6e 20 74 68 65 20 72 65 63 75 72 73 69 76  run the recursiv
23c40 65 2d 73 65 6c 65 63 74 2c 0a 20 20 20 20 20 61  e-select,.     a
23c50 64 64 69 6e 67 20 61 6c 6c 20 72 65 73 75 6c 74  dding all result
23c60 73 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 0a  s to the queue..
23c70 3c 2f 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </ol>.</ol>..<p>
23c80 54 68 65 20 62 61 73 69 63 20 70 72 6f 63 65 64  The basic proced
23c90 75 72 65 20 61 62 6f 76 65 20 6d 61 79 20 6d 6f  ure above may mo
23ca0 64 69 66 69 65 64 20 62 79 20 74 68 65 20 66 6f  dified by the fo
23cb0 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e  llowing addition
23cc0 61 6c 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a  al rules:..<ul>.
23cd0 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 20 55  <li><p>.  If a U
23ce0 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 63 6f  NION operator co
23cf0 6e 6e 65 63 74 73 20 74 68 65 20 3c 79 79 74 65  nnects the <yyte
23d00 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  rm>initial-selec
23d10 74 3c 2f 79 79 74 65 72 6d 3e 20 77 69 74 68 20  t</yyterm> with 
23d20 74 68 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65  the.  <yyterm>re
23d30 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f  cursive-select</
23d40 79 79 74 65 72 6d 3e 2c 20 74 68 65 6e 20 6f 6e  yyterm>, then on
23d50 6c 79 20 61 64 64 20 72 6f 77 73 20 74 6f 20 74  ly add rows to t
23d60 68 65 20 71 75 65 75 65 20 69 66 20 0a 20 20 6e  he queue if .  n
23d70 6f 20 69 64 65 6e 74 69 63 61 6c 20 72 6f 77 20  o identical row 
23d80 68 61 73 0a 20 20 62 65 65 6e 20 70 72 65 76 69  has.  been previ
23d90 6f 75 73 6c 79 20 61 64 64 65 64 20 74 6f 20 74  ously added to t
23da0 68 65 20 71 75 65 75 65 2e 20 20 52 65 70 65 61  he queue.  Repea
23db0 74 65 64 20 72 6f 77 73 20 61 72 65 20 64 69 73  ted rows are dis
23dc0 63 61 72 64 65 64 20 62 65 66 6f 72 65 20 62 65  carded before be
23dd0 69 6e 67 0a 20 20 61 64 64 65 64 20 74 6f 20 74  ing.  added to t
23de0 68 65 20 71 75 65 75 65 20 65 76 65 6e 20 69 66  he queue even if
23df0 20 74 68 65 20 72 65 70 65 61 74 65 64 20 72 6f   the repeated ro
23e00 77 73 20 68 61 76 65 20 61 6c 72 65 61 64 79 20  ws have already 
23e10 62 65 65 6e 20 65 78 74 72 61 63 74 65 64 0a 20  been extracted. 
23e20 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20   from the queue 
23e30 62 79 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  by the recursion
23e40 20 73 74 65 70 2e 20 20 49 66 20 74 68 65 20 6f   step.  If the o
23e50 70 65 72 61 74 6f 72 20 69 73 20 55 4e 49 4f 4e  perator is UNION
23e60 20 41 4c 4c 2c 0a 20 20 74 68 65 6e 20 61 6c 6c   ALL,.  then all
23e70 20 72 6f 77 73 20 67 65 6e 65 72 61 74 65 64 20   rows generated 
23e80 62 79 20 62 6f 74 68 20 74 68 65 20 3c 79 79 74  by both the <yyt
23e90 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65  erm>initial-sele
23ea0 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20  ct</yyterm> and 
23eb0 74 68 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65  the.  <yyterm>re
23ec0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f  cursive-select</
23ed0 79 79 74 65 72 6d 3e 20 61 72 65 20 61 6c 77 61  yyterm> are alwa
23ee0 79 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  ys added to the 
23ef0 71 75 65 75 65 20 65 76 65 6e 20 69 66 0a 20 20  queue even if.  
23f00 74 68 65 79 20 61 72 65 20 72 65 70 65 61 74 73  they are repeats
23f10 2e 0a 20 20 57 68 65 6e 20 64 65 74 65 72 6d 69  ..  When determi
23f20 6e 69 6e 67 20 69 66 20 61 20 72 6f 77 20 69 73  ning if a row is
23f30 20 72 65 70 65 61 74 65 64 2c 20 4e 55 4c 4c 20   repeated, NULL 
23f40 76 61 6c 75 65 73 20 63 6f 6d 70 61 72 65 0a 20  values compare. 
23f50 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e   equal to one an
23f60 6f 74 68 65 72 20 61 6e 64 20 6e 6f 74 20 65 71  other and not eq
23f70 75 61 6c 20 74 6f 20 61 6e 79 20 6f 74 68 65 72  ual to any other
23f80 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a   value..<li><p>.
23f90 20 20 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75    The LIMIT clau
23fa0 73 65 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20  se, if present, 
23fb0 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6d  determines the m
23fc0 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
23fd0 20 72 6f 77 73 20 74 68 61 74 0a 20 20 77 69 6c   rows that.  wil
23fe0 6c 20 65 76 65 72 20 62 65 20 61 64 64 65 64 20  l ever be added 
23ff0 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65  to the recursive
24000 20 74 61 62 6c 65 20 69 6e 20 73 74 65 70 20 32   table in step 2
24010 62 2e 0a 20 20 4f 6e 63 65 20 74 68 65 20 6c 69  b..  Once the li
24020 6d 69 74 20 69 73 20 72 65 61 63 68 65 64 2c 20  mit is reached, 
24030 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74  the recursion st
24040 6f 70 73 2e 0a 20 20 41 20 6c 69 6d 69 74 20 6f  ops..  A limit o
24050 66 20 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 61  f zero means tha
24060 74 20 6e 6f 20 72 6f 77 73 20 61 72 65 20 65 76  t no rows are ev
24070 65 72 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a  er added to the.
24080 20 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c    recursive tabl
24090 65 2c 20 61 6e 64 20 61 20 6e 65 67 61 74 69 76  e, and a negativ
240a0 65 20 6c 69 6d 69 74 20 6d 65 61 6e 73 20 61 6e  e limit means an
240b0 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75 6d 62 65   unlimited numbe
240c0 72 20 6f 66 20 72 6f 77 73 0a 20 20 6d 61 79 20  r of rows.  may 
240d0 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  be added to the 
240e0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e  recursive table.
240f0 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4f  .<li><p>.  The O
24100 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 69 66  FFSET clause, if
24110 20 69 74 20 69 73 20 70 72 65 73 65 6e 74 20 61   it is present a
24120 6e 64 20 68 61 73 20 61 20 70 6f 73 69 74 69 76  nd has a positiv
24130 65 20 76 61 6c 75 65 20 4e 2c 20 70 72 65 76 65  e value N, preve
24140 6e 74 73 20 74 68 65 0a 20 20 66 69 72 73 74 20  nts the.  first 
24150 4e 20 72 6f 77 73 20 66 72 6f 6d 20 62 65 69 6e  N rows from bein
24160 67 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72  g added to the r
24170 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a  ecursive table..
24180 20 20 54 68 65 20 66 69 72 73 74 20 4e 20 72 6f    The first N ro
24190 77 73 20 61 72 65 20 73 74 69 6c 6c 20 70 72 6f  ws are still pro
241a0 63 65 73 73 65 64 0a 20 20 62 79 20 74 68 65 20  cessed.  by the 
241b0 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
241c0 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
241d0 3e 20 26 6d 64 61 73 68 3b 20 74 68 65 79 0a 20  > &mdash; they. 
241e0 20 6a 75 73 74 20 61 72 65 20 6e 6f 74 20 61 64   just are not ad
241f0 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
24200 73 69 76 65 20 74 61 62 6c 65 2e 20 20 52 6f 77  sive table.  Row
24210 73 20 61 72 65 20 6e 6f 74 20 63 6f 75 6e 74 65  s are not counte
24220 64 20 74 6f 77 61 72 64 0a 20 20 66 75 6c 66 69  d toward.  fulfi
24230 6c 6c 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  lling the LIMIT 
24240 75 6e 74 69 6c 20 61 6c 6c 20 4f 46 46 53 45 54  until all OFFSET
24250 20 72 6f 77 73 20 68 61 76 65 20 62 65 65 6e 20   rows have been 
24260 73 6b 69 70 70 65 64 2e 0a 3c 6c 69 3e 3c 70 3e  skipped..<li><p>
24270 0a 20 20 49 66 20 61 6e 20 4f 52 44 45 52 20 42  .  If an ORDER B
24280 59 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  Y clause is pres
24290 65 6e 74 2c 20 69 74 20 64 65 74 65 72 6d 69 6e  ent, it determin
242a0 65 73 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  es the order in 
242b0 77 68 69 63 68 20 72 6f 77 73 0a 20 20 61 72 65  which rows.  are
242c0 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
242d0 74 68 65 20 71 75 65 75 65 20 69 6e 20 73 74 65  the queue in ste
242e0 70 20 32 61 2e 20 20 49 66 20 74 68 65 72 65 20  p 2a.  If there 
242f0 69 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  is no ORDER BY c
24300 6c 61 75 73 65 2c 0a 20 20 74 68 65 6e 20 74 68  lause,.  then th
24310 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
24320 20 72 6f 77 73 20 61 72 65 20 65 78 74 72 61 63   rows are extrac
24330 74 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ted is undefined
24340 2e 20 20 28 49 6e 20 74 68 65 20 63 75 72 72 65  .  (In the curre
24350 6e 74 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74  nt.  implementat
24360 69 6f 6e 2c 20 74 68 65 20 71 75 65 75 65 20 62  ion, the queue b
24370 65 63 6f 6d 65 73 20 61 20 46 49 46 4f 20 69 66  ecomes a FIFO if
24380 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
24390 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2c  ause is omitted,
243a0 0a 20 20 62 75 74 20 61 70 70 6c 69 63 61 74 69  .  but applicati
243b0 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 64  ons should not d
243c0 65 70 65 6e 64 20 6f 6e 20 74 68 61 74 20 66 61  epend on that fa
243d0 63 74 20 73 69 6e 63 65 20 69 74 20 6d 69 67 68  ct since it migh
243e0 74 20 63 68 61 6e 67 65 2e 29 0a 3c 2f 75 6c 3e  t change.).</ul>
243f0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
24400 6e 74 20 72 63 65 78 31 3c 2f 74 63 6c 3e 0a 3c  nt rcex1</tcl>.<
24410 68 34 3e 52 65 63 75 72 73 69 76 65 20 51 75 65  h4>Recursive Que
24420 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e  ry Examples</h4>
24430 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
24440 6e 67 20 71 75 65 72 79 20 72 65 74 75 72 6e 73  ng query returns
24450 20 61 6c 6c 20 69 6e 74 65 67 65 72 73 20 62 65   all integers be
24460 74 77 65 65 6e 20 31 20 61 6e 64 20 31 30 30 30  tween 1 and 1000
24470 30 30 30 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  000:..<blockquot
24480 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
24490 55 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20  URSIVE.  cnt(x) 
244a0 41 53 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e  AS (VALUES(1) UN
244b0 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78  ION ALL SELECT x
244c0 2b 31 20 46 52 4f 4d 20 63 6e 74 20 57 48 45 52  +1 FROM cnt WHER
244d0 45 20 78 3c 31 30 30 30 30 30 30 29 0a 53 45 4c  E x<1000000).SEL
244e0 45 43 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a  ECT x FROM cnt;.
244f0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
24500 74 65 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72  te>..<p>Consider
24510 20 68 6f 77 20 74 68 69 73 20 71 75 65 72 79 20   how this query 
24520 77 6f 72 6b 73 2e 20 20 54 68 65 20 69 6e 69 74  works.  The init
24530 69 61 6c 2d 73 65 6c 65 63 74 0a 72 75 6e 73 20  ial-select.runs 
24540 66 69 72 73 74 20 61 6e 64 20 72 65 74 75 72 6e  first and return
24550 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 0a 77  s a single row.w
24560 69 74 68 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  ith a single col
24570 75 6d 6e 20 22 31 22 2e 20 20 54 68 69 73 20 6f  umn "1".  This o
24580 6e 65 20 72 6f 77 20 69 73 20 61 64 64 65 64 20  ne row is added 
24590 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 49  to the queue.  I
245a0 6e 0a 73 74 65 70 20 32 61 2c 20 74 68 61 74 20  n.step 2a, that 
245b0 6f 6e 65 20 72 6f 77 20 69 73 20 65 78 74 72 61  one row is extra
245c0 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75  cted from the qu
245d0 65 75 65 20 61 6e 64 20 61 64 64 65 64 20 74 6f  eue and added to
245e0 20 22 63 6e 74 22 2e 0a 54 68 65 6e 20 74 68 65   "cnt"..Then the
245f0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
24600 74 20 69 73 20 72 75 6e 20 69 6e 20 61 63 63 6f  t is run in acco
24610 72 64 61 6e 63 65 20 77 69 74 68 20 73 74 65 70  rdance with step
24620 20 32 63 20 67 65 6e 65 72 61 74 69 6e 67 0a 61   2c generating.a
24630 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20   single new row 
24640 77 69 74 68 20 76 61 6c 75 65 20 22 32 22 20 74  with value "2" t
24650 6f 20 61 64 64 20 74 6f 20 74 68 65 20 71 75 65  o add to the que
24660 75 65 2e 20 20 54 68 65 20 71 75 65 75 65 20 73  ue.  The queue s
24670 74 69 6c 6c 0a 68 61 73 20 6f 6e 65 20 72 6f 77  till.has one row
24680 2c 20 73 6f 20 73 74 65 70 20 32 20 72 65 70 65  , so step 2 repe
24690 61 74 73 2e 20 20 54 68 65 20 22 32 22 20 72 6f  ats.  The "2" ro
246a0 77 20 69 73 20 65 78 74 72 61 63 74 65 64 20 61  w is extracted a
246b0 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a  nd added to the.
246c0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20  recursive table 
246d0 62 79 20 73 74 65 70 73 20 32 61 20 61 6e 64 20  by steps 2a and 
246e0 32 62 2e 20 20 54 68 65 6e 20 74 68 65 20 72 6f  2b.  Then the ro
246f0 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 32 20 69  w containing 2 i
24700 73 20 75 73 65 64 20 0a 61 73 20 69 66 20 69 74  s used .as if it
24710 20 77 65 72 65 20 74 68 65 20 63 6f 6d 70 6c 65   were the comple
24720 74 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  te content of th
24730 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
24740 65 20 61 6e 64 20 74 68 65 20 0a 72 65 63 75 72  e and the .recur
24750 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72  sive-select is r
24760 75 6e 20 61 67 61 69 6e 2c 20 72 65 73 75 6c 74  un again, result
24770 69 6e 67 20 69 6e 20 61 20 72 6f 77 20 77 69 74  ing in a row wit
24780 68 20 76 61 6c 75 65 20 22 33 22 20 62 65 69 6e  h value "3" bein
24790 67 20 61 64 64 65 64 0a 74 6f 20 74 68 65 20 71  g added.to the q
247a0 75 65 75 65 2e 20 20 54 68 69 73 20 72 65 70 65  ueue.  This repe
247b0 61 74 73 20 39 39 39 39 39 39 20 74 69 6d 65 73  ats 999999 times
247c0 20 75 6e 74 69 6c 20 66 69 6e 61 6c 6c 79 20 61   until finally a
247d0 74 20 73 74 65 70 20 32 61 20 74 68 65 0a 6f 6e  t step 2a the.on
247e0 6c 79 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20  ly value on the 
247f0 71 75 65 75 65 20 69 73 20 61 20 72 6f 77 20 63  queue is a row c
24800 6f 6e 74 61 69 6e 69 6e 67 20 31 30 30 30 30 30  ontaining 100000
24810 30 2e 20 20 54 68 61 74 20 72 6f 77 20 69 73 0a  0.  That row is.
24820 65 78 74 72 61 63 74 65 64 20 61 6e 64 20 61 64  extracted and ad
24830 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
24840 73 69 76 65 20 74 61 62 6c 65 2e 20 20 42 75 74  sive table.  But
24850 20 74 68 69 73 20 74 69 6d 65 2c 20 74 68 65 0a   this time, the.
24860 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 75  WHERE clause cau
24870 73 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76  ses the recursiv
24880 65 2d 73 65 6c 65 63 74 20 74 6f 20 72 65 74 75  e-select to retu
24890 72 6e 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 74  rn no rows, so t
248a0 68 65 0a 71 75 65 75 65 20 72 65 6d 61 69 6e 73  he.queue remains
248b0 20 65 6d 70 74 79 20 61 6e 64 20 74 68 65 20 72   empty and the r
248c0 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a  ecursion stops..
248d0 0a 3c 70 3e 3c 62 3e 4f 70 74 69 6d 69 7a 61 74  .<p><b>Optimizat
248e0 69 6f 6e 20 6e 6f 74 65 3a 3c 2f 62 3e 0a 49 6e  ion note:</b>.In
248f0 20 74 68 65 20 64 69 73 63 75 73 73 69 6f 6e 20   the discussion 
24900 61 62 6f 76 65 2c 20 73 74 61 74 65 6d 65 6e 74  above, statement
24910 73 20 6c 69 6b 65 20 22 69 6e 73 65 72 74 20 74  s like "insert t
24920 68 65 20 72 6f 77 20 69 6e 74 6f 0a 74 68 65 20  he row into.the 
24930 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 22  recursive table"
24940 20 73 68 6f 75 6c 64 20 62 65 20 75 6e 64 65 72   should be under
24950 73 74 6f 6f 64 20 63 6f 6e 63 65 70 74 75 61 6c  stood conceptual
24960 6c 79 2c 20 6e 6f 74 20 6c 69 74 65 72 61 6c 6c  ly, not literall
24970 79 2e 0a 49 74 20 73 6f 75 6e 64 73 20 61 73 20  y..It sounds as 
24980 69 66 20 53 51 4c 69 74 65 20 69 73 20 61 63 63  if SQLite is acc
24990 75 6d 75 6c 61 74 69 6e 67 20 61 20 68 75 67 65  umulating a huge
249a0 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 69 6e   table.containin
249b0 67 20 6f 6e 65 20 6d 69 6c 6c 69 6f 6e 20 72 6f  g one million ro
249c0 77 73 2c 20 74 68 65 6e 20 67 6f 69 6e 67 20 62  ws, then going b
249d0 61 63 6b 20 61 6e 64 20 73 63 61 6e 6e 69 6e 67  ack and scanning
249e0 20 74 68 61 74 20 74 61 62 6c 65 0a 66 72 6f 6d   that table.from
249f0 20 74 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 20 74   top to bottom t
24a00 6f 20 67 65 6e 65 72 61 74 65 20 74 68 65 20 72  o generate the r
24a10 65 73 75 6c 74 2e 20 20 57 68 61 74 20 72 65 61  esult.  What rea
24a20 6c 6c 79 20 68 61 70 70 65 6e 73 0a 69 73 20 74  lly happens.is t
24a30 68 61 74 20 74 68 65 20 71 75 65 72 79 20 6f 70  hat the query op
24a40 74 69 6d 69 7a 65 72 20 73 65 65 73 20 74 68 61  timizer sees tha
24a50 74 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 0a  t values in the.
24a60 22 63 6e 74 22 20 72 65 63 75 72 73 69 76 65 20  "cnt" recursive 
24a70 74 61 62 6c 65 20 61 72 65 20 6f 6e 6c 79 20 75  table are only u
24a80 73 65 64 20 6f 6e 63 65 2e 20 20 53 6f 20 61 73  sed once.  So as
24a90 20 65 61 63 68 20 72 6f 77 20 69 73 20 61 64 64   each row is add
24aa0 65 64 20 74 6f 0a 74 68 65 20 72 65 63 75 72 73  ed to.the recurs
24ab0 69 76 65 20 74 61 62 6c 65 2c 20 74 68 61 74 20  ive table, that 
24ac0 72 6f 77 20 69 73 20 69 6d 6d 65 64 69 61 74 65  row is immediate
24ad0 6c 79 20 72 65 74 75 72 6e 65 64 20 61 73 20 61  ly returned as a
24ae0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6d   result of the m
24af0 61 69 6e 0a 53 45 4c 45 43 54 20 73 74 61 74 65  ain.SELECT state
24b00 6d 65 6e 74 20 61 6e 64 20 74 68 65 6e 20 64 69  ment and then di
24b10 73 63 61 72 64 65 64 2e 20 20 53 51 4c 69 74 65  scarded.  SQLite
24b20 20 64 6f 65 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65   does <em>not</e
24b30 6d 3e 20 61 63 63 75 6d 75 6c 61 74 65 0a 61 20  m> accumulate.a 
24b40 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
24b50 63 6f 6e 74 61 69 6e 69 6e 67 20 61 20 6d 69 6c  containing a mil
24b60 6c 69 6f 6e 20 72 6f 77 73 2e 20 20 56 65 72 79  lion rows.  Very
24b70 20 6c 69 74 74 6c 65 20 6d 65 6d 6f 72 79 20 69   little memory i
24b80 73 0a 6e 65 65 64 65 64 20 74 6f 20 72 75 6e 20  s.needed to run 
24b90 74 68 65 20 61 62 6f 76 65 20 65 78 61 6d 70 6c  the above exampl
24ba0 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20  e.  However, if 
24bb0 74 68 65 20 65 78 61 6d 70 6c 65 20 68 61 64 20  the example had 
24bc0 75 73 65 64 0a 55 4e 49 4f 4e 20 69 6e 73 74 65  used.UNION inste
24bd0 61 64 20 6f 66 20 55 4e 49 4f 4e 20 41 4c 4c 2c  ad of UNION ALL,
24be0 20 74 68 65 6e 20 53 51 4c 69 74 65 20 77 6f 75   then SQLite wou
24bf0 6c 64 20 68 61 76 65 20 68 61 64 20 74 6f 20 6b  ld have had to k
24c00 65 65 70 20 61 72 6f 75 6e 64 0a 61 6c 6c 20 70  eep around.all p
24c10 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
24c20 74 65 64 20 63 6f 6e 74 65 6e 74 20 69 6e 20 6f  ted content in o
24c30 72 64 65 72 20 74 6f 20 63 68 65 63 6b 20 66 6f  rder to check fo
24c40 72 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 46 6f  r duplicates..Fo
24c50 72 20 74 68 69 73 20 72 65 61 73 6f 6e 2c 20 70  r this reason, p
24c60 72 6f 67 72 61 6d 6d 65 72 73 20 73 68 6f 75 6c  rogrammers shoul
24c70 64 20 73 74 72 69 76 65 20 74 6f 20 75 73 65 20  d strive to use 
24c80 55 4e 49 4f 4e 20 41 4c 4c 20 69 6e 73 74 65 61  UNION ALL instea
24c90 64 0a 6f 66 20 55 4e 49 4f 4e 20 77 68 65 6e 20  d.of UNION when 
24ca0 66 65 61 73 69 62 6c 65 2e 0a 0a 3c 70 3e 48 65  feasible...<p>He
24cb0 72 65 20 69 73 20 61 20 76 61 72 69 61 74 69 6f  re is a variatio
24cc0 6e 20 6f 6e 20 74 68 65 20 70 72 65 76 69 6f 75  n on the previou
24cd0 73 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f  s example:..<blo
24ce0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
24cf0 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 63  TH RECURSIVE.  c
24d00 6e 74 28 78 29 20 41 53 20 28 0a 20 20 20 20 20  nt(x) AS (.     
24d10 53 45 4c 45 43 54 20 31 0a 20 20 20 20 20 55 4e  SELECT 1.     UN
24d20 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c  ION ALL.     SEL
24d30 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74  ECT x+1 FROM cnt
24d40 0a 20 20 20 20 20 20 4c 49 4d 49 54 20 31 30 30  .      LIMIT 100
24d50 30 30 30 30 0a 20 20 29 0a 53 45 4c 45 43 54 20  0000.  ).SELECT 
24d60 78 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72  x FROM cnt;.</pr
24d70 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
24d80 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74 77  .<p>There are tw
24d90 6f 20 64 69 66 66 65 72 65 6e 63 65 73 20 69 6e  o differences in
24da0 20 74 68 69 73 20 76 61 72 69 61 74 69 6f 6e 2e   this variation.
24db0 20 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65    The initial-se
24dc0 6c 65 63 74 20 69 73 0a 22 53 45 4c 45 43 54 20  lect is."SELECT 
24dd0 31 22 20 69 6e 73 74 65 61 64 20 6f 66 20 22 56  1" instead of "V
24de0 41 4c 55 45 53 28 31 29 22 2e 20 20 42 75 74 20  ALUES(1)".  But 
24df0 74 68 6f 73 65 20 61 72 65 20 6a 75 73 74 20 64  those are just d
24e00 69 66 66 65 72 65 6e 74 0a 73 79 6e 74 61 78 65  ifferent.syntaxe
24e10 73 20 66 6f 72 20 73 61 79 69 6e 67 20 65 78 61  s for saying exa
24e20 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
24e30 69 6e 67 2e 20 20 54 68 65 20 6f 74 68 65 72 20  ing.  The other 
24e40 63 68 61 6e 67 65 20 69 73 20 74 68 61 74 20 74  change is that t
24e50 68 65 0a 72 65 63 75 72 73 69 6f 6e 20 69 73 20  he.recursion is 
24e60 73 74 6f 70 70 65 64 20 62 79 20 61 20 4c 49 4d  stopped by a LIM
24e70 49 54 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  IT rather than a
24e80 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 20 20   WHERE clause.  
24e90 54 68 65 20 75 73 65 20 6f 66 0a 4c 49 4d 49 54  The use of.LIMIT
24ea0 20 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e   means that when
24eb0 20 74 68 65 20 6f 6e 65 2d 6d 69 6c 6c 69 6f 6e   the one-million
24ec0 74 68 20 72 6f 77 20 69 73 20 61 64 64 65 64 20  th row is added 
24ed0 74 6f 20 74 68 65 20 22 63 6e 74 22 20 74 61 62  to the "cnt" tab
24ee0 6c 65 0a 28 61 6e 64 20 72 65 74 75 72 6e 65 64  le.(and returned
24ef0 20 62 79 20 74 68 65 20 6d 61 69 6e 20 53 45 4c   by the main SEL
24f00 45 43 54 2c 20 74 68 61 6e 6b 73 20 74 6f 20 74  ECT, thanks to t
24f10 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
24f20 65 72 29 0a 74 68 65 6e 20 74 68 65 20 72 65 63  er).then the rec
24f30 75 72 73 69 6f 6e 20 73 74 6f 70 73 20 69 6d 6d  ursion stops imm
24f40 65 64 69 61 74 65 6c 79 20 72 65 67 61 72 64 6c  ediately regardl
24f50 65 73 73 20 6f 66 20 68 6f 77 20 6d 61 6e 79 20  ess of how many 
24f60 72 6f 77 73 20 6d 69 67 68 74 20 62 65 0a 6c 65  rows might be.le
24f70 66 74 20 69 6e 20 74 68 65 20 71 75 65 75 65 2e  ft in the queue.
24f80 20 20 4f 6e 20 6d 6f 72 65 20 63 6f 6d 70 6c 65    On more comple
24f90 78 20 71 75 65 72 69 65 73 2c 20 69 74 20 63 61  x queries, it ca
24fa0 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 0a 64  n sometimes be.d
24fb0 69 66 66 69 63 75 6c 74 20 74 6f 20 65 6e 73 75  ifficult to ensu
24fc0 72 65 20 74 68 61 74 20 74 68 65 20 57 48 45 52  re that the WHER
24fd0 45 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 65 76  E clause will ev
24fe0 65 6e 74 75 61 6c 6c 79 20 63 61 75 73 65 20 74  entually cause t
24ff0 68 65 0a 71 75 65 75 65 20 74 6f 20 64 72 61 69  he.queue to drai
25000 6e 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73  n and the recurs
25010 69 6f 6e 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  ion to terminate
25020 2e 20 20 42 75 74 20 74 68 65 20 4c 49 4d 49 54  .  But the LIMIT
25030 20 63 6c 61 75 73 65 20 77 69 6c 6c 0a 61 6c 77   clause will.alw
25040 61 79 73 20 73 74 6f 70 20 74 68 65 20 72 65 63  ays stop the rec
25050 75 72 73 69 6f 6e 2e 20 20 53 6f 20 69 74 20 69  ursion.  So it i
25060 73 20 67 6f 6f 64 20 70 72 61 63 74 69 63 65 20  s good practice 
25070 74 6f 20 61 6c 77 61 79 73 20 69 6e 63 6c 75 64  to always includ
25080 65 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65  e a.LIMIT clause
25090 20 61 73 20 61 20 73 61 66 65 74 79 20 69 66 20   as a safety if 
250a0 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  an upper bound o
250b0 6e 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  n the size of th
250c0 65 20 72 65 63 75 72 73 69 6f 6e 20 0a 69 73 20  e recursion .is 
250d0 6b 6e 6f 77 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  known...<tcl>hd_
250e0 66 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f  fragment rcex2</
250f0 74 63 6c 3e 0a 3c 68 34 3e 48 69 65 72 61 72 63  tcl>.<h4>Hierarc
25100 68 69 63 61 6c 20 51 75 65 72 79 20 45 78 61 6d  hical Query Exam
25110 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 43 6f  ples</h4>..<p>Co
25120 6e 73 69 64 65 72 20 61 20 74 61 62 6c 65 20 74  nsider a table t
25130 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
25140 65 20 6d 65 6d 62 65 72 73 20 6f 66 20 61 6e 20  e members of an 
25150 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 61 73 0a  organization as.
25160 77 65 6c 6c 20 61 73 20 74 68 65 20 63 68 61 69  well as the chai
25170 6e 2d 6f 66 2d 63 6f 6d 6d 61 6e 64 20 77 69 74  n-of-command wit
25180 68 69 6e 20 74 68 61 74 20 6f 72 67 61 6e 69 7a  hin that organiz
25190 61 74 69 6f 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  ation:..<blockqu
251a0 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
251b0 20 54 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61   TABLE org(.  na
251c0 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  me TEXT PRIMARY 
251d0 4b 45 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54  KEY,.  boss TEXT
251e0 20 52 45 46 45 52 45 4e 43 45 53 20 6f 72 67 2c   REFERENCES org,
251f0 0a 20 20 68 65 69 67 68 74 20 49 4e 54 2c 0a 20  .  height INT,. 
25200 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e   -- other conten
25210 74 20 6f 6d 69 74 74 65 64 0a 29 3b 0a 3c 2f 70  t omitted.);.</p
25220 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
25230 0a 0a 3c 70 3e 45 76 65 72 79 20 6d 65 6d 62 65  ..<p>Every membe
25240 72 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a  r in the organiz
25250 61 74 69 6f 6e 20 68 61 73 20 61 20 6e 61 6d 65  ation has a name
25260 2c 20 61 6e 64 20 6d 6f 73 74 20 6d 65 6d 62 65  , and most membe
25270 72 73 20 68 61 76 65 0a 61 20 73 69 6e 67 6c 65  rs have.a single
25280 20 62 6f 73 73 2e 20 20 28 54 68 65 20 68 65 61   boss.  (The hea
25290 64 20 6f 66 20 74 68 65 20 77 68 6f 6c 65 20 6f  d of the whole o
252a0 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20  rganization has 
252b0 61 20 4e 55 4c 4c 0a 22 62 6f 73 73 22 20 66 69  a NULL."boss" fi
252c0 65 6c 64 2e 29 20 54 68 65 20 72 6f 77 73 20 6f  eld.) The rows o
252d0 66 20 74 68 65 20 22 6f 72 67 22 20 74 61 62 6c  f the "org" tabl
252e0 65 20 66 6f 72 6d 20 61 20 74 72 65 65 2e 0a 0a  e form a tree...
252f0 3c 70 3e 48 65 72 65 20 69 73 20 61 20 71 75 65  <p>Here is a que
25300 72 79 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ry that computes
25310 20 74 68 65 20 61 76 65 72 61 67 65 20 68 65 69   the average hei
25320 67 68 74 20 6f 76 65 72 20 65 76 65 72 79 6f 6e  ght over everyon
25330 65 0a 69 6e 20 41 6c 69 63 65 27 73 20 6f 72 67  e.in Alice's org
25340 61 6e 69 7a 61 74 69 6f 6e 2c 20 69 6e 63 6c 75  anization, inclu
25350 64 69 6e 67 20 41 6c 69 63 65 3a 0a 0a 3c 62 6c  ding Alice:..<bl
25360 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
25370 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
25380 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 28  works_for_alice(
25390 6e 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55  n) AS (.    VALU
253a0 45 53 28 27 41 6c 69 63 65 27 29 0a 20 20 20 20  ES('Alice').    
253b0 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54  UNION.    SELECT
253c0 20 6e 61 6d 65 20 46 52 4f 4d 20 6f 72 67 2c 20   name FROM org, 
253d0 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 0a  works_for_alice.
253e0 20 20 20 20 20 57 48 45 52 45 20 6f 72 67 2e 62       WHERE org.b
253f0 6f 73 73 3d 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c  oss=works_for_al
25400 69 63 65 2e 6e 0a 20 20 29 0a 53 45 4c 45 43 54  ice.n.  ).SELECT
25410 20 61 76 67 28 68 65 69 67 68 74 29 20 46 52 4f   avg(height) FRO
25420 4d 20 6f 72 67 0a 20 57 48 45 52 45 20 6f 72 67  M org. WHERE org
25430 2e 6e 61 6d 65 20 49 4e 20 77 6f 72 6b 73 5f 66  .name IN works_f
25440 6f 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e  or_alice;.</pre>
25450 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
25460 70 3e 54 68 65 20 6e 65 78 74 20 65 78 61 6d 70  p>The next examp
25470 6c 65 20 75 73 65 73 20 74 77 6f 20 0a 63 6f 6d  le uses two .com
25480 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
25490 73 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c  sions in a singl
254a0 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 20 20  e WITH clause.  
254b0 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  .The following t
254c0 61 62 6c 65 20 72 65 63 6f 72 64 73 20 61 20 66  able records a f
254d0 61 6d 69 6c 79 20 74 72 65 65 3a 0a 0a 3c 62 6c  amily tree:..<bl
254e0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
254f0 52 45 41 54 45 20 54 41 42 4c 45 20 66 61 6d 69  REATE TABLE fami
25500 6c 79 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20  ly(.  name TEXT 
25510 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d  PRIMARY KEY,.  m
25520 6f 6d 20 54 45 58 54 20 52 45 46 45 52 45 4e 43  om TEXT REFERENC
25530 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20 64 61 64  ES family,.  dad
25540 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53   TEXT REFERENCES
25550 20 66 61 6d 69 6c 79 2c 0a 20 20 62 6f 72 6e 20   family,.  born 
25560 44 41 54 45 54 49 4d 45 2c 0a 20 20 64 69 65 64  DATETIME,.  died
25570 20 44 41 54 45 54 49 4d 45 2c 20 2d 2d 20 4e 55   DATETIME, -- NU
25580 4c 4c 20 69 66 20 73 74 69 6c 6c 20 61 6c 69 76  LL if still aliv
25590 65 0a 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e  e.  -- other con
255a0 74 65 6e 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  tent.);.</pre></
255b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
255c0 54 68 65 20 22 66 61 6d 69 6c 79 22 20 74 61 62  The "family" tab
255d0 6c 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  le is similar to
255e0 20 74 68 65 20 65 61 72 6c 69 65 72 20 22 6f 72   the earlier "or
255f0 67 22 20 74 61 62 6c 65 20 65 78 63 65 70 74 20  g" table except 
25600 74 68 61 74 20 0a 6e 6f 77 20 74 68 65 72 65 20  that .now there 
25610 61 72 65 20 74 77 6f 20 70 61 72 65 6e 74 73 20  are two parents 
25620 74 6f 20 65 61 63 68 20 6d 65 6d 62 65 72 2e 0a  to each member..
25630 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20  We want to know 
25640 61 6c 6c 20 6c 69 76 69 6e 67 20 61 6e 63 65 73  all living ances
25650 74 6f 72 73 20 6f 66 20 41 6c 69 63 65 2c 20 66  tors of Alice, f
25660 72 6f 6d 20 6f 6c 64 65 73 74 20 74 6f 20 79 6f  rom oldest to yo
25670 75 6e 67 65 73 74 2e 0a 41 6e 20 6f 72 64 69 6e  ungest..An ordin
25680 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
25690 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 22 70 61   expression, "pa
256a0 72 65 6e 74 5f 6f 66 22 2c 20 69 73 20 64 65 66  rent_of", is def
256b0 69 6e 65 64 20 66 69 72 73 74 2e 20 20 54 68 61  ined first.  Tha
256c0 74 0a 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69  t.ordinary CTE i
256d0 73 20 61 20 76 69 65 77 20 74 68 61 74 20 63 61  s a view that ca
256e0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 66 69 6e  n be used to fin
256f0 64 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 6f 66  d all parents of
25700 20 61 6e 79 0a 69 6e 64 69 76 69 64 75 61 6c 2e   any.individual.
25710 20 20 54 68 61 74 20 6f 72 64 69 6e 61 72 79 20    That ordinary 
25720 43 54 45 20 69 73 20 74 68 65 6e 20 75 73 65 64  CTE is then used
25730 20 69 6e 20 74 68 65 20 22 61 6e 63 65 73 74 6f   in the "ancesto
25740 72 5f 6f 66 5f 61 6c 69 63 65 22 0a 72 65 63 75  r_of_alice".recu
25750 72 73 69 76 65 20 43 54 45 2e 20 20 54 68 65 20  rsive CTE.  The 
25760 72 65 63 75 72 73 69 76 65 20 43 54 45 20 69 73  recursive CTE is
25770 20 74 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68   then used in th
25780 65 20 66 69 6e 61 6c 20 71 75 65 72 79 3a 0a 0a  e final query:..
25790 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
257a0 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
257b0 0a 20 20 70 61 72 65 6e 74 5f 6f 66 28 6e 61 6d  .  parent_of(nam
257c0 65 2c 20 70 61 72 65 6e 74 29 20 41 53 0a 20 20  e, parent) AS.  
257d0 20 20 28 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    (SELECT name, 
257e0 6d 6f 6d 20 46 52 4f 4d 20 66 61 6d 69 6c 79 20  mom FROM family 
257f0 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 6e 61 6d  UNION SELECT nam
25800 65 2c 20 64 61 64 20 46 52 4f 4d 20 66 61 6d 69  e, dad FROM fami
25810 6c 79 29 2c 0a 20 20 61 6e 63 65 73 74 6f 72 5f  ly),.  ancestor_
25820 6f 66 5f 61 6c 69 63 65 28 6e 61 6d 65 29 20 41  of_alice(name) A
25830 53 0a 20 20 20 20 28 53 45 4c 45 43 54 20 70 61  S.    (SELECT pa
25840 72 65 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74  rent FROM parent
25850 5f 6f 66 20 57 48 45 52 45 20 6e 61 6d 65 3d 27  _of WHERE name='
25860 41 6c 69 63 65 27 0a 20 20 20 20 20 55 4e 49 4f  Alice'.     UNIO
25870 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43  N ALL.     SELEC
25880 54 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61  T parent FROM pa
25890 72 65 6e 74 5f 6f 66 20 4a 4f 49 4e 20 61 6e 63  rent_of JOIN anc
258a0 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 20 55  estor_of_alice U
258b0 53 49 4e 47 28 6e 61 6d 65 29 29 0a 53 45 4c 45  SING(name)).SELE
258c0 43 54 20 66 61 6d 69 6c 79 2e 6e 61 6d 65 20 46  CT family.name F
258d0 52 4f 4d 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f  ROM ancestor_of_
258e0 61 6c 69 63 65 2c 20 66 61 6d 69 6c 79 0a 20 57  alice, family. W
258f0 48 45 52 45 20 61 6e 63 65 73 74 6f 72 5f 6f 66  HERE ancestor_of
25900 5f 61 6c 69 63 65 2e 6e 61 6d 65 3d 66 61 6d 69  _alice.name=fami
25910 6c 79 2e 6e 61 6d 65 0a 20 20 20 41 4e 44 20 64  ly.name.   AND d
25920 69 65 64 20 49 53 20 4e 55 4c 4c 0a 20 4f 52 44  ied IS NULL. ORD
25930 45 52 20 42 59 20 62 6f 72 6e 3b 0a 3c 2f 70 72  ER BY born;.</pr
25940 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
25950 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
25960 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68  t rcex2</tcl>.<h
25970 34 3e 51 75 65 72 69 65 73 20 41 67 61 69 6e 73  4>Queries Agains
25980 74 20 41 20 47 72 61 70 68 3c 2f 68 34 3e 0a 0a  t A Graph</h4>..
25990 3c 70 3e 41 20 76 65 72 73 69 6f 6e 20 63 6f 6e  <p>A version con
259a0 74 72 6f 6c 20 73 79 73 74 65 6d 20 28 56 43 53  trol system (VCS
259b0 29 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79  ) will typically
259c0 20 73 74 6f 72 65 20 74 68 65 20 65 76 6f 6c 76   store the evolv
259d0 69 6e 67 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20  ing.versions of 
259e0 61 20 70 72 6f 6a 65 63 74 20 61 73 20 61 20 64  a project as a d
259f0 69 72 65 63 74 65 64 20 61 63 79 63 6c 69 63 20  irected acyclic 
25a00 67 72 61 70 68 20 28 44 41 47 29 2e 20 20 43 61  graph (DAG).  Ca
25a10 6c 6c 20 65 61 63 68 0a 76 65 72 73 69 6f 6e 20  ll each.version 
25a20 6f 66 20 74 68 65 20 70 72 6f 6a 65 63 74 20 61  of the project a
25a30 20 22 63 68 65 63 6b 69 6e 22 2e 20 20 41 20 73   "checkin".  A s
25a40 69 6e 67 6c 65 0a 63 68 65 63 6b 69 6e 20 63 61  ingle.checkin ca
25a50 6e 20 68 61 76 65 20 7a 65 72 6f 20 6f 72 20 6d  n have zero or m
25a60 6f 72 65 20 70 61 72 65 6e 74 73 2e 20 20 4d 6f  ore parents.  Mo
25a70 73 74 20 63 68 65 63 6b 69 6e 73 20 28 65 78 63  st checkins (exc
25a80 65 70 74 20 74 68 65 0a 66 69 72 73 74 29 20 68  ept the.first) h
25a90 61 76 65 20 61 20 73 69 6e 67 6c 65 20 70 61 72  ave a single par
25aa0 65 6e 74 2c 20 62 75 74 20 69 6e 20 74 68 65 20  ent, but in the 
25ab0 63 61 73 65 20 6f 66 20 61 20 6d 65 72 67 65 2c  case of a merge,
25ac0 20 61 20 63 68 65 63 6b 69 6e 0a 6d 69 67 68 74   a checkin.might
25ad0 20 68 61 76 65 20 74 77 6f 20 6f 72 20 74 68 72   have two or thr
25ae0 65 65 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e  ee or more paren
25af0 74 73 2e 20 20 41 20 73 63 68 65 6d 61 20 74 6f  ts.  A schema to
25b00 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 0a 63   keep track of.c
25b10 68 65 63 6b 69 6e 73 20 61 6e 64 20 74 68 65 20  heckins and the 
25b20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74  order in which t
25b30 68 65 79 20 6f 63 63 75 72 20 6d 69 67 68 74 20  hey occur might 
25b40 6c 6f 6f 6b 20 73 6f 6d 65 74 68 69 6e 67 20 6c  look something l
25b50 69 6b 65 0a 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63  ike.this:..<bloc
25b60 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
25b70 41 54 45 20 54 41 42 4c 45 20 63 68 65 63 6b 69  ATE TABLE checki
25b80 6e 28 0a 20 20 69 64 20 49 4e 54 45 47 45 52 20  n(.  id INTEGER 
25b90 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d  PRIMARY KEY,.  m
25ba0 74 69 6d 65 20 49 4e 54 45 47 45 52 20 2d 2d 20  time INTEGER -- 
25bb0 74 69 6d 65 73 74 61 6d 70 20 77 68 65 6e 20 74  timestamp when t
25bc0 68 69 73 20 63 68 65 63 6b 69 6e 20 6f 63 63 75  his checkin occu
25bd0 72 72 65 64 0a 29 3b 0a 43 52 45 41 54 45 20 54  rred.);.CREATE T
25be0 41 42 4c 45 20 64 65 72 69 76 65 64 66 72 6f 6d  ABLE derivedfrom
25bf0 28 0a 20 20 78 66 72 6f 6d 20 49 4e 54 45 47 45  (.  xfrom INTEGE
25c00 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52  R NOT NULL REFER
25c10 45 4e 43 45 53 20 63 68 65 63 6b 69 6e 2c 20 2d  ENCES checkin, -
25c20 2d 20 70 61 72 65 6e 74 20 63 68 65 63 6b 69 6e  - parent checkin
25c30 0a 20 20 78 74 6f 20 49 4e 54 45 47 45 52 20 4e  .  xto INTEGER N
25c40 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43  OT NULL REFERENC
25c50 45 53 20 63 68 65 63 6b 69 6e 2c 20 20 20 2d 2d  ES checkin,   --
25c60 20 64 65 72 69 76 65 64 20 63 68 65 63 6b 69 6e   derived checkin
25c70 0a 20 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78  .  PRIMARY KEY(x
25c80 66 72 6f 6d 2c 78 74 6f 29 0a 29 3b 0a 43 52 45  from,xto).);.CRE
25c90 41 54 45 20 49 4e 44 45 58 20 64 65 72 69 76 65  ATE INDEX derive
25ca0 64 66 72 6f 6d 5f 62 61 63 6b 20 4f 4e 20 64 65  dfrom_back ON de
25cb0 72 69 76 65 64 66 72 6f 6d 28 78 74 6f 2c 78 66  rivedfrom(xto,xf
25cc0 72 6f 6d 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  rom);.</pre></bl
25cd0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
25ce0 69 73 20 67 72 61 70 68 20 69 73 20 61 63 79 63  is graph is acyc
25cf0 6c 69 63 2e 20 20 41 6e 64 20 77 65 20 61 73 73  lic.  And we ass
25d00 75 6d 65 20 74 68 61 74 20 74 68 65 20 6d 74 69  ume that the mti
25d10 6d 65 20 6f 66 20 65 76 65 72 79 0a 63 68 69 6c  me of every.chil
25d20 64 20 63 68 65 63 6b 69 6e 20 69 73 20 6e 6f 20  d checkin is no 
25d30 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6d 74  less than the mt
25d40 69 6d 65 20 6f 66 20 61 6c 6c 20 69 74 73 20 70  ime of all its p
25d50 61 72 65 6e 74 73 2e 20 20 42 75 74 0a 75 6e 6c  arents.  But.unl
25d60 69 6b 65 20 74 68 65 20 65 61 72 6c 69 65 72 20  ike the earlier 
25d70 65 78 61 6d 70 6c 65 73 2c 20 74 68 69 73 20 67  examples, this g
25d80 72 61 70 68 20 6d 69 67 68 74 20 68 61 76 65 20  raph might have 
25d90 6d 75 6c 74 69 70 6c 65 20 70 61 74 68 73 20 6f  multiple paths o
25da0 66 0a 64 69 66 66 65 72 69 6e 67 20 6c 65 6e 67  f.differing leng
25db0 74 68 73 20 62 65 74 77 65 65 6e 20 61 6e 79 20  ths between any 
25dc0 74 77 6f 20 63 68 65 63 6b 69 6e 73 2e 0a 0a 3c  two checkins...<
25dd0 70 3e 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f  p>We want to kno
25de0 77 20 74 68 65 20 74 77 65 6e 74 79 20 6d 6f 73  w the twenty mos
25df0 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f  t recent ancesto
25e00 72 73 20 69 6e 20 74 69 6d 65 20 28 6f 75 74 20  rs in time (out 
25e10 6f 66 0a 74 68 65 20 74 68 6f 75 73 61 6e 64 73  of.the thousands
25e20 20 61 6e 64 20 74 68 6f 75 73 61 6e 64 73 20 6f   and thousands o
25e30 66 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74  f ancestors in t
25e40 68 65 20 77 68 6f 6c 65 20 44 41 47 29 20 66 6f  he whole DAG) fo
25e50 72 0a 63 68 65 63 6b 69 6e 20 22 40 42 41 53 45  r.checkin "@BASE
25e60 4c 49 4e 45 22 2e 20 20 28 41 20 71 75 65 72 79  LINE".  (A query
25e70 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73   similar to this
25e80 20 69 73 20 75 73 65 64 0a 62 79 20 74 68 65 20   is used.by the 
25e90 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
25ea0 77 77 77 2e 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f  www.fossil-scm.o
25eb0 72 67 2f 22 3e 46 6f 73 73 69 6c 3c 2f 61 3e 20  rg/">Fossil</a> 
25ec0 56 43 53 20 74 6f 0a 73 68 6f 77 20 74 68 65 20  VCS to.show the 
25ed0 4e 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e  N most recent an
25ee0 63 65 73 74 6f 72 73 20 6f 66 20 61 20 63 68 65  cestors of a che
25ef0 63 6b 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ck.  For example
25f00 3a 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a  :.<a href="http:
25f10 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67  //www.sqlite.org
25f20 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d  /src/timeline?p=
25f30 74 72 75 6e 6b 26 6e 3d 33 30 22 3e 68 74 74 70  trunk&n=30">http
25f40 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
25f50 67 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70  g/src/timeline?p
25f60 3d 74 72 75 6e 6b 26 6e 3d 33 30 3c 2f 61 3e 2e  =trunk&n=30</a>.
25f70 29 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  )..<blockquote><
25f80 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
25f90 49 56 45 0a 20 20 61 6e 63 65 73 74 6f 72 28 69  IVE.  ancestor(i
25fa0 64 2c 6d 74 69 6d 65 29 20 41 53 20 28 0a 20 20  d,mtime) AS (.  
25fb0 20 20 53 45 4c 45 43 54 20 69 64 2c 20 6d 74 69    SELECT id, mti
25fc0 6d 65 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20  me FROM checkin 
25fd0 57 48 45 52 45 20 69 64 3d 40 42 41 53 45 4c 49  WHERE id=@BASELI
25fe0 4e 45 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20  NE.    UNION.   
25ff0 20 53 45 4c 45 43 54 20 64 65 72 69 76 65 64 66   SELECT derivedf
26000 72 6f 6d 2e 78 66 72 6f 6d 2c 20 63 68 65 63 6b  rom.xfrom, check
26010 69 6e 2e 6d 74 69 6d 65 0a 20 20 20 20 20 20 46  in.mtime.      F
26020 52 4f 4d 20 61 6e 63 65 73 74 6f 72 2c 20 64 65  ROM ancestor, de
26030 72 69 76 65 64 66 72 6f 6d 2c 20 63 68 65 63 6b  rivedfrom, check
26040 69 6e 0a 20 20 20 20 20 57 48 45 52 45 20 61 6e  in.     WHERE an
26050 63 65 73 74 6f 72 2e 69 64 3d 64 65 72 69 76 65  cestor.id=derive
26060 64 66 72 6f 6d 2e 78 74 6f 0a 20 20 20 20 20 20  dfrom.xto.      
26070 20 41 4e 44 20 63 68 65 63 6b 69 6e 2e 69 64 3d   AND checkin.id=
26080 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f  derivedfrom.xfro
26090 6d 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20  m.     ORDER BY 
260a0 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45  checkin.mtime DE
260b0 53 43 0a 20 20 20 20 20 4c 49 4d 49 54 20 32 30  SC.     LIMIT 20
260c0 0a 20 20 29 0a 53 45 4c 45 43 54 20 2a 20 46 52  .  ).SELECT * FR
260d0 4f 4d 20 63 68 65 63 6b 69 6e 20 4a 4f 49 4e 20  OM checkin JOIN 
260e0 61 6e 63 65 73 74 6f 72 20 55 53 49 4e 47 28 69  ancestor USING(i
260f0 64 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  d);.</pre></bloc
26100 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65  kquote>..<p>.The
26110 20 22 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b   "ORDER BY check
26120 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43 22 20 74  in.mtime DESC" t
26130 65 72 6d 20 69 6e 20 74 68 65 20 72 65 63 75 72  erm in the recur
26140 73 69 76 65 2d 73 65 6c 65 63 74 20 6d 61 6b 65  sive-select make
26150 73 0a 74 68 65 20 71 75 65 72 79 20 72 75 6e 20  s.the query run 
26160 6d 75 63 68 20 66 61 73 74 65 72 20 62 79 20 70  much faster by p
26170 72 65 76 65 6e 74 69 6e 67 20 69 74 20 66 72 6f  reventing it fro
26180 6d 20 66 6f 6c 6c 6f 77 69 6e 67 0a 62 72 61 6e  m following.bran
26190 63 68 65 73 20 74 68 61 74 20 6d 65 72 67 65 20  ches that merge 
261a0 63 68 65 63 6b 69 6e 73 0a 66 72 6f 6d 20 6c 6f  checkins.from lo
261b0 6e 67 20 61 67 6f 2e 20 20 54 68 65 20 4f 52 44  ng ago.  The ORD
261c0 45 52 20 42 59 20 66 6f 72 63 65 73 20 74 68 65  ER BY forces the
261d0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
261e0 74 20 74 6f 20 66 6f 63 75 73 0a 6f 6e 20 74 68  t to focus.on th
261f0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 63 68  e most recent ch
26200 65 63 6b 69 6e 73 2c 20 74 68 65 20 6f 6e 65 73  eckins, the ones
26210 20 77 65 20 77 61 6e 74 2e 20 20 57 69 74 68 6f   we want.  Witho
26220 75 74 20 74 68 65 20 4f 52 44 45 52 20 42 59 0a  ut the ORDER BY.
26230 6f 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  on the recursive
26240 2d 73 65 6c 65 63 74 2c 20 6f 6e 65 20 77 6f 75  -select, one wou
26250 6c 64 20 62 65 20 66 6f 72 63 65 64 20 74 6f 20  ld be forced to 
26260 63 6f 6d 70 75 74 65 20 74 68 65 20 63 6f 6d 70  compute the comp
26270 6c 65 74 65 20 73 65 74 20 6f 66 0a 74 68 6f 75  lete set of.thou
26280 73 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f  sands of ancesto
26290 72 73 2c 20 73 6f 72 74 20 74 68 65 6d 20 61 6c  rs, sort them al
262a0 6c 20 62 79 20 6d 74 69 6d 65 2c 20 74 68 65 6e  l by mtime, then
262b0 20 74 61 6b 65 20 74 68 65 20 74 6f 70 20 74 77   take the top tw
262c0 65 6e 74 79 2e 0a 54 68 65 20 4f 52 44 45 52 20  enty..The ORDER 
262d0 42 59 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 73  BY essentially s
262e0 65 74 73 20 75 70 20 61 20 70 72 69 6f 72 69 74  ets up a priorit
262f0 79 20 71 75 65 75 65 20 74 68 61 74 0a 66 6f 72  y queue that.for
26300 63 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76  ces the recursiv
26310 65 20 71 75 65 72 79 20 74 6f 20 6c 6f 6f 6b 20  e query to look 
26320 61 74 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  at the most rece
26330 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 66 69 72  nt ancestors fir
26340 73 74 2c 0a 61 6c 6c 6f 77 69 6e 67 20 74 68 65  st,.allowing the
26350 20 75 73 65 20 6f 66 20 61 20 4c 49 4d 49 54 20   use of a LIMIT 
26360 63 6c 61 75 73 65 20 74 6f 20 72 65 73 74 72 69  clause to restri
26370 63 74 20 74 68 65 20 73 63 6f 70 65 20 6f 66 20  ct the scope of 
26380 74 68 65 0a 71 75 65 72 79 20 74 6f 20 6a 75 73  the.query to jus
26390 74 20 74 68 65 20 63 68 65 63 6b 69 6e 73 20 6f  t the checkins o
263a0 66 20 69 6e 74 65 72 65 73 74 2e 0a 0a 3c 74 63  f interest...<tc
263b0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 69  l>hd_fragment wi
263c0 74 68 6f 72 64 65 72 62 79 3c 2f 74 63 6c 3e 0a  thorderby</tcl>.
263d0 3c 68 34 3e 43 6f 6e 74 72 6f 6c 6c 69 6e 67 20  <h4>Controlling 
263e0 44 65 70 74 68 2d 46 69 72 73 74 20 56 65 72 73  Depth-First Vers
263f0 75 73 20 42 72 65 61 64 74 68 2d 46 69 72 73 74  us Breadth-First
26400 20 53 65 61 72 63 68 20 4f 66 20 61 20 54 72 65   Search Of a Tre
26410 65 0a 55 73 69 6e 67 20 4f 52 44 45 52 20 42 59  e.Using ORDER BY
26420 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 6e 20 4f 52 44  </h4>..<p>An ORD
26430 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20  ER BY clause on 
26440 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
26450 6c 65 63 74 20 63 61 6e 20 62 65 20 75 73 65 64  lect can be used
26460 20 74 6f 20 63 6f 6e 74 72 6f 6c 0a 77 68 65 74   to control.whet
26470 68 65 72 20 74 68 65 20 73 65 61 72 63 68 20 6f  her the search o
26480 66 20 61 20 74 72 65 65 20 69 73 20 64 65 70 74  f a tree is dept
26490 68 2d 66 69 72 73 74 20 6f 72 20 62 72 65 61 64  h-first or bread
264a0 74 68 2d 66 69 72 73 74 2e 20 20 54 6f 0a 69 6c  th-first.  To.il
264b0 6c 75 73 74 72 61 74 65 2c 20 77 65 20 77 69 6c  lustrate, we wil
264c0 6c 20 75 73 65 20 61 20 76 61 72 69 61 74 69 6f  l use a variatio
264d0 6e 20 6f 6e 20 74 68 65 20 22 6f 72 67 22 20 74  n on the "org" t
264e0 61 62 6c 65 20 66 72 6f 6d 20 61 6e 20 65 78 61  able from an exa
264f0 6d 70 6c 65 0a 61 62 6f 76 65 2c 20 77 69 74 68  mple.above, with
26500 6f 75 74 20 74 68 65 20 22 68 65 69 67 68 74 22  out the "height"
26510 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 77 69 74   column, and wit
26520 68 20 73 6f 6d 65 20 72 65 61 6c 20 64 61 74 61  h some real data
26530 20 69 6e 73 65 72 74 65 64 3a 0a 0a 3c 62 6c 6f   inserted:..<blo
26540 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
26550 45 41 54 45 20 54 41 42 4c 45 20 6f 72 67 28 0a  EATE TABLE org(.
26560 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d    name TEXT PRIM
26570 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73 20  ARY KEY,.  boss 
26580 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20  TEXT REFERENCES 
26590 6f 72 67 0a 29 20 57 49 54 48 4f 55 54 20 52 4f  org.) WITHOUT RO
265a0 57 49 44 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  WID;.INSERT INTO
265b0 20 6f 72 67 20 56 41 4c 55 45 53 28 27 41 6c 69   org VALUES('Ali
265c0 63 65 27 2c 4e 55 4c 4c 29 3b 0a 49 4e 53 45 52  ce',NULL);.INSER
265d0 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
265e0 53 28 27 42 6f 62 27 2c 27 41 6c 69 63 65 27 29  S('Bob','Alice')
265f0 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
26600 67 20 56 41 4c 55 45 53 28 27 43 69 6e 64 79 27  g VALUES('Cindy'
26610 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52  ,'Alice');.INSER
26620 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
26630 53 28 27 44 61 76 65 27 2c 27 42 6f 62 27 29 3b  S('Dave','Bob');
26640 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
26650 20 56 41 4c 55 45 53 28 27 45 6d 6d 61 27 2c 27   VALUES('Emma','
26660 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  Bob');.INSERT IN
26670 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 46  TO org VALUES('F
26680 72 65 64 27 2c 27 43 69 6e 64 79 27 29 3b 0a 49  red','Cindy');.I
26690 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
266a0 41 4c 55 45 53 28 27 47 61 69 6c 27 2c 27 43 69  ALUES('Gail','Ci
266b0 6e 64 79 27 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ndy');.</pre></b
266c0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 48  lockquote>..<p>H
266d0 65 72 65 20 69 73 20 61 20 71 75 65 72 79 20 74  ere is a query t
266e0 6f 20 73 68 6f 77 20 74 68 65 20 74 72 65 65 20  o show the tree 
266f0 73 74 72 75 63 74 75 72 65 20 69 6e 20 61 20 62  structure in a b
26700 72 65 61 64 74 68 2d 66 69 72 73 74 20 70 61 74  readth-first pat
26710 74 65 72 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  tern:..<blockquo
26720 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
26730 43 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f  CURSIVE.  under_
26740 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c  alice(name,level
26750 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
26760 53 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20  S('Alice',0).   
26770 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
26780 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20  ELECT org.name, 
26790 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65  under_alice.leve
267a0 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f  l+1.      FROM o
267b0 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c  rg JOIN under_al
267c0 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d  ice ON org.boss=
267d0 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65  under_alice.name
267e0 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32  .     ORDER BY 2
267f0 0a 20 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73  .  ).SELECT subs
26800 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c  tr('..........',
26810 31 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61  1,level*3) || na
26820 6d 65 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c  me FROM under_al
26830 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ice;.</pre></blo
26840 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
26850 20 22 4f 52 44 45 52 20 42 59 20 32 22 20 28 77   "ORDER BY 2" (w
26860 68 69 63 68 20 6d 65 61 6e 73 20 74 68 65 20 73  hich means the s
26870 61 6d 65 20 61 73 20 22 4f 52 44 45 52 20 42 59  ame as "ORDER BY
26880 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76   under_alice.lev
26890 65 6c 2b 31 22 29 0a 63 61 75 73 65 73 20 68 69  el+1").causes hi
268a0 67 68 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74  gher levels in t
268b0 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20  he organization 
268c0 63 68 61 72 74 20 28 77 69 74 68 20 73 6d 61 6c  chart (with smal
268d0 6c 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75  ler "level" valu
268e0 65 73 29 0a 74 6f 20 62 65 20 70 72 6f 63 65 73  es).to be proces
268f0 73 65 64 20 66 69 72 73 74 2c 20 72 65 73 75 6c  sed first, resul
26900 74 69 6e 67 20 69 6e 20 61 20 62 72 65 61 64 74  ting in a breadt
26910 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 20  h-first search. 
26920 20 54 68 65 20 6f 75 74 70 75 74 20 69 73 3a 0a   The output is:.
26930 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
26940 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a  e>.Alice....Bob.
26950 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 44  ...Cindy.......D
26960 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e  ave.......Emma..
26970 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e  .....Fred.......
26980 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  Gail.</pre></blo
26990 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 42 75 74  ckquote>..<p>But
269a0 20 69 66 20 77 65 20 63 68 61 6e 67 65 20 74 68   if we change th
269b0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
269c0 65 20 74 6f 20 61 64 64 20 74 68 65 20 22 44 45  e to add the "DE
269d0 53 43 22 20 6d 6f 64 69 66 69 65 72 2c 20 74 68  SC" modifier, th
269e0 61 74 20 77 69 6c 6c 0a 63 61 75 73 65 20 6c 6f  at will.cause lo
269f0 77 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74 68  wer levels in th
26a00 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 28  e organization (
26a10 77 69 74 68 20 6c 61 72 67 65 72 20 22 6c 65 76  with larger "lev
26a20 65 6c 22 20 76 61 6c 75 65 73 29 20 74 6f 20 62  el" values) to b
26a30 65 0a 70 72 6f 63 65 73 73 65 64 20 66 69 72 73  e.processed firs
26a40 74 20 62 79 20 74 68 65 20 72 65 63 75 72 73 69  t by the recursi
26a50 76 65 2d 73 65 6c 65 63 74 2c 20 72 65 73 75 6c  ve-select, resul
26a60 74 69 6e 67 20 69 6e 20 61 20 64 65 70 74 68 2d  ting in a depth-
26a70 66 69 72 73 74 20 73 65 61 72 63 68 3a 0a 0a 3c  first search:..<
26a80 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
26a90 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
26aa0 20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61    under_alice(na
26ab0 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20  me,level) AS (. 
26ac0 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65     VALUES('Alice
26ad0 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41  ',0).    UNION A
26ae0 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72  LL.    SELECT or
26af0 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c  g.name, under_al
26b00 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20  ice.level+1.    
26b10 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20    FROM org JOIN 
26b20 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f  under_alice ON o
26b30 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c  rg.boss=under_al
26b40 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52  ice.name.     OR
26b50 44 45 52 20 42 59 20 32 20 3c 62 3e 44 45 53 43  DER BY 2 <b>DESC
26b60 3c 2f 62 3e 0a 20 20 29 0a 53 45 4c 45 43 54 20  </b>.  ).SELECT 
26b70 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e  substr('........
26b80 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20 7c  ..',1,level*3) |
26b90 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64 65  | name FROM unde
26ba0 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c  r_alice;.</pre><
26bb0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
26bc0 3e 54 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74  >The output of t
26bd0 68 69 73 20 72 65 76 69 73 65 64 20 71 75 65 72  his revised quer
26be0 79 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  y is:..<blockquo
26bf0 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e  te><pre>.Alice..
26c00 2e 2e 42 6f 62 0a 2e 2e 2e 2e 2e 2e 44 61 76 65  ..Bob.......Dave
26c10 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 43  .......Emma....C
26c20 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a  indy.......Fred.
26c30 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65  ......Gail.</pre
26c40 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
26c50 3c 70 3e 57 68 65 6e 20 74 68 65 20 4f 52 44 45  <p>When the ORDE
26c60 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f  R BY clause is o
26c70 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
26c80 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
26c90 2c 20 74 68 65 0a 71 75 65 75 65 20 62 65 68 61  , the.queue beha
26ca0 76 65 73 20 61 73 20 61 20 46 49 46 4f 2c 20 77  ves as a FIFO, w
26cb0 68 69 63 68 20 72 65 73 75 6c 74 73 20 69 6e 20  hich results in 
26cc0 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20  a breadth-first 
26cd0 73 65 61 72 63 68 2e 0a 0a 0a 3c 74 63 6c 3e 68  search....<tcl>h
26ce0 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61 6e 64 65  d_fragment mande
26cf0 6c 62 72 6f 74 20 7b 63 6f 6d 70 75 74 65 20 74  lbrot {compute t
26d00 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 73 65  he Mandelbrot se
26d10 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 4f 75 74  t}</tcl>.<h4>Out
26d20 6c 61 6e 64 69 73 68 20 52 65 63 75 72 73 69 76  landish Recursiv
26d30 65 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73  e Query Examples
26d40 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h4>..<p>The fo
26d50 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20 63 6f  llowing query co
26d60 6d 70 75 74 65 73 20 61 6e 20 61 70 70 72 6f 78  mputes an approx
26d70 69 6d 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 4d  imation of the M
26d80 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 0a 61 6e  andelbrot Set.an
26d90 64 20 6f 75 74 70 75 74 73 20 74 68 65 20 72 65  d outputs the re
26da0 73 75 6c 74 20 61 73 20 41 53 43 49 49 2d 61 72  sult as ASCII-ar
26db0 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  t:..<blockquote>
26dc0 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
26dd0 53 49 56 45 0a 20 20 78 61 78 69 73 28 78 29 20  SIVE.  xaxis(x) 
26de0 41 53 20 28 56 41 4c 55 45 53 28 2d 32 2e 30 29  AS (VALUES(-2.0)
26df0 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
26e00 54 20 78 2b 30 2e 30 35 20 46 52 4f 4d 20 78 61  T x+0.05 FROM xa
26e10 78 69 73 20 57 48 45 52 45 20 78 26 6c 74 3b 31  xis WHERE x&lt;1
26e20 2e 32 29 2c 0a 20 20 79 61 78 69 73 28 79 29 20  .2),.  yaxis(y) 
26e30 41 53 20 28 56 41 4c 55 45 53 28 2d 31 2e 30 29  AS (VALUES(-1.0)
26e40 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
26e50 54 20 79 2b 30 2e 31 20 46 52 4f 4d 20 79 61 78  T y+0.1 FROM yax
26e60 69 73 20 57 48 45 52 45 20 79 26 6c 74 3b 31 2e  is WHERE y&lt;1.
26e70 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c 20 63 78  0),.  m(iter, cx
26e80 2c 20 63 79 2c 20 78 2c 20 79 29 20 41 53 20 28  , cy, x, y) AS (
26e90 0a 20 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78  .    SELECT 0, x
26ea0 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52  , y, 0.0, 0.0 FR
26eb0 4f 4d 20 78 61 78 69 73 2c 20 79 61 78 69 73 0a  OM xaxis, yaxis.
26ec0 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
26ed0 20 20 53 45 4c 45 43 54 20 69 74 65 72 2b 31 2c    SELECT iter+1,
26ee0 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79   cx, cy, x*x-y*y
26ef0 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b   + cx, 2.0*x*y +
26f00 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20 20 20 20   cy FROM m .    
26f10 20 57 48 45 52 45 20 28 78 2a 78 20 2b 20 79 2a   WHERE (x*x + y*
26f20 79 29 20 26 6c 74 3b 20 34 2e 30 20 41 4e 44 20  y) &lt; 4.0 AND 
26f30 69 74 65 72 26 6c 74 3b 32 38 0a 20 20 29 2c 0a  iter&lt;28.  ),.
26f40 20 20 6d 32 28 69 74 65 72 2c 20 63 78 2c 20 63    m2(iter, cx, c
26f50 79 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  y) AS (.    SELE
26f60 43 54 20 6d 61 78 28 69 74 65 72 29 2c 20 63 78  CT max(iter), cx
26f70 2c 20 63 79 20 46 52 4f 4d 20 6d 20 47 52 4f 55  , cy FROM m GROU
26f80 50 20 42 59 20 63 78 2c 20 63 79 0a 20 20 29 2c  P BY cx, cy.  ),
26f90 0a 20 20 61 28 74 29 20 41 53 20 28 0a 20 20 20  .  a(t) AS (.   
26fa0 20 53 45 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f   SELECT group_co
26fb0 6e 63 61 74 28 20 73 75 62 73 74 72 28 27 20 2e  ncat( substr(' .
26fc0 2b 2a 23 27 2c 20 31 2b 6d 69 6e 28 69 74 65 72  +*#', 1+min(iter
26fd0 2f 37 2c 34 29 2c 20 31 29 2c 20 27 27 29 20 0a  /7,4), 1), '') .
26fe0 20 20 20 20 46 52 4f 4d 20 6d 32 20 47 52 4f 55      FROM m2 GROU
26ff0 50 20 42 59 20 63 79 0a 20 20 29 0a 53 45 4c 45  P BY cy.  ).SELE
27000 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  CT group_concat(
27010 72 74 72 69 6d 28 74 29 2c 78 27 30 61 27 29 20  rtrim(t),x'0a') 
27020 46 52 4f 4d 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f  FROM a;.</pre></
27030 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
27040 49 6e 20 74 68 69 73 20 71 75 65 72 79 2c 20 74  In this query, t
27050 68 65 20 22 78 61 78 69 73 22 20 61 6e 64 20 22  he "xaxis" and "
27060 79 61 78 69 73 22 20 43 54 45 73 20 64 65 66 69  yaxis" CTEs defi
27070 6e 65 20 74 68 65 20 67 72 69 64 20 6f 66 20 70  ne the grid of p
27080 6f 69 6e 74 73 20 66 6f 72 0a 77 68 69 63 68 20  oints for.which 
27090 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53  the Mandelbrot S
270a0 65 74 20 77 69 6c 6c 20 62 65 20 61 70 70 72 6f  et will be appro
270b0 78 69 6d 61 74 65 64 2e 20 20 45 61 63 68 20 72  ximated.  Each r
270c0 6f 77 20 69 6e 20 74 68 65 0a 22 6d 28 69 74 65  ow in the."m(ite
270d0 72 2c 63 78 2c 63 79 2c 78 2c 79 29 22 20 43 54  r,cx,cy,x,y)" CT
270e0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 66 74  E means that aft
270f0 65 72 20 22 69 74 65 72 22 20 69 74 65 72 61 74  er "iter" iterat
27100 69 6f 6e 73 2c 20 74 68 65 20 4d 61 6e 64 65 6c  ions, the Mandel
27110 62 72 6f 74 0a 69 74 65 72 61 74 69 6f 6e 20 73  brot.iteration s
27120 74 61 72 74 69 6e 67 20 61 74 20 63 78 2c 63 79  tarting at cx,cy
27130 20 68 61 73 20 72 65 61 63 68 65 64 20 70 6f 69   has reached poi
27140 6e 74 20 78 2c 79 2e 20 20 54 68 65 20 6e 75 6d  nt x,y.  The num
27150 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
27160 73 0a 69 6e 20 74 68 69 73 20 65 78 61 6d 70 6c  s.in this exampl
27170 65 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20  e is limited to 
27180 32 38 20 28 77 68 69 63 68 20 73 65 76 65 72 65  28 (which severe
27190 6c 79 20 6c 69 6d 69 74 73 20 74 68 65 20 72 65  ly limits the re
271a0 73 6f 6c 75 74 69 6f 6e 20 6f 66 0a 74 68 65 20  solution of.the 
271b0 63 6f 6d 70 75 74 61 74 69 6f 6e 2c 20 62 75 74  computation, but
271c0 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 66   is sufficient f
271d0 6f 72 20 6c 6f 77 2d 72 65 73 6f 6c 75 74 69 6f  or low-resolutio
271e0 6e 20 41 53 43 49 49 2d 61 72 74 20 6f 75 74 70  n ASCII-art outp
271f0 75 74 29 2e 0a 54 68 65 20 22 6d 32 28 69 74 65  ut)..The "m2(ite
27200 72 2c 63 78 2c 63 79 29 22 20 43 54 45 20 68 6f  r,cx,cy)" CTE ho
27210 6c 64 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  lds the maximum 
27220 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
27230 69 6f 6e 73 20 72 65 61 63 68 65 64 20 77 68 65  ions reached whe
27240 6e 0a 73 74 61 72 74 69 6e 67 20 61 74 20 70 6f  n.starting at po
27250 69 6e 74 20 63 78 2c 63 79 2e 0a 46 69 6e 61 6c  int cx,cy..Final
27260 6c 79 2c 20 65 61 63 68 20 72 6f 77 20 69 6e 20  ly, each row in 
27270 74 68 65 20 22 61 28 74 29 22 20 43 54 45 20 68  the "a(t)" CTE h
27280 6f 6c 64 73 20 61 20 73 74 72 69 6e 67 20 0a 77  olds a string .w
27290 68 69 63 68 20 69 73 20 61 20 73 69 6e 67 6c 65  hich is a single
272a0 20 6c 69 6e 65 20 6f 66 20 74 68 65 20 6f 75 74   line of the out
272b0 70 75 74 20 41 53 43 49 49 2d 61 72 74 2e 0a 54  put ASCII-art..T
272c0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
272d0 65 6e 74 20 61 74 20 74 68 65 20 65 6e 64 20 6a  ent at the end j
272e0 75 73 74 20 71 75 65 72 69 65 73 20 74 68 65 20  ust queries the 
272f0 22 61 22 20 43 54 45 20 74 6f 0a 72 65 74 72 69  "a" CTE to.retri
27300 65 76 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66  eve all lines of
27310 20 41 53 43 49 49 2d 61 72 74 2c 20 6f 6e 65 20   ASCII-art, one 
27320 62 79 20 6f 6e 65 2e 0a 0a 3c 70 3e 52 75 6e 6e  by one...<p>Runn
27330 69 6e 67 20 74 68 65 20 71 75 65 72 79 20 61 62  ing the query ab
27340 6f 76 65 20 69 6e 20 61 6e 20 53 51 4c 69 74 65  ove in an SQLite
27350 20 5b 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73   [command-line s
27360 68 65 6c 6c 5d 20 72 65 73 75 6c 74 73 0a 69 6e  hell] results.in
27370 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   the following o
27380 75 74 70 75 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  utput:..<blockqu
27390 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 20  ote><pre>.      
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
273c0 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20 20  ..#.            
273d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273e0 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20         ..#*...  
273f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
27410 2e 2b 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  .+####+..       
27420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27430 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23       .......+###
27440 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20  #....   +.      
27450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27460 20 20 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23       ..##+*#####
27470 23 23 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20  #####+.++++.    
27480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27490 20 20 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23        .+.#######
274a0 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
274b0 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
274c0 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23  .........+######
274d0 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #############+.+
274e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  .              .
274f0 2e 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23  .++..#.....*####
27500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27510 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
27520 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23   ...+#######++##
27530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27540 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20  #####..         
27550 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23   ....+*#########
27560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27570 23 23 23 23 23 23 23 2e 0a 20 23 23 23 23 23 23  #######.. ######
27580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
275a0 23 23 23 23 23 23 23 2e 2e 2e 0a 20 20 20 20 20  #######....     
275b0 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23       ....+*#####
275c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
275d0 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20  ###########..   
275e0 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23            ...+##
275f0 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23  #####++#########
27600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a  ##############..
27610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
27620 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23  ++..#.....*#####
27630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27640 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
27650 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23   .............+#
27660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27670 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20  ##+.+.          
27680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27690 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23 23  .+.#############
276a0 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20  #####+..        
276b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276c0 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23     ..##+*#######
276d0 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20  ###+.++++.      
276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276f0 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23        .......+##
27700 23 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20  ##....   +.     
27710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27720 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23              ..+#
27730 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
27740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27750 20 20 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a           ..#*...
27760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27780 20 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20      ....#.      
27790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 2e                +.
277b0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
277c0 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ote>..<tcl>hd_fr
277d0 61 67 6d 65 6e 74 20 73 75 64 6f 6b 75 20 7b 73  agment sudoku {s
277e0 6f 6c 76 65 20 53 75 64 6f 6b 75 20 70 75 7a 7a  olve Sudoku puzz
277f0 6c 65 73 7d 20 3c 2f 74 63 6c 3e 0a 3c 70 3e 54  les} </tcl>.<p>T
27800 68 69 73 20 6e 65 78 74 20 71 75 65 72 79 20 73  his next query s
27810 6f 6c 76 65 73 20 61 20 53 75 64 6f 6b 75 20 70  olves a Sudoku p
27820 75 7a 7a 6c 65 2e 20 20 54 68 65 20 73 74 61 74  uzzle.  The stat
27830 65 20 6f 66 20 74 68 65 20 70 75 7a 7a 6c 65 20  e of the puzzle 
27840 69 73 0a 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is.defined by an
27850 20 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74   81-character st
27860 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72  ring formed by r
27870 65 61 64 69 6e 67 20 65 6e 74 72 69 65 73 20 66  eading entries f
27880 72 6f 6d 20 74 68 65 0a 70 75 7a 7a 6c 65 20 62  rom the.puzzle b
27890 6f 78 20 72 6f 77 20 62 79 20 72 6f 77 20 66 72  ox row by row fr
278a0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
278b0 20 61 6e 64 20 74 68 65 6e 20 66 72 6f 6d 20 74   and then from t
278c0 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 2e 0a 42 6c  op to bottom..Bl
278d0 61 6e 6b 20 73 71 75 61 72 65 73 20 69 6e 20 74  ank squares in t
278e0 68 65 20 70 75 7a 7a 6c 65 20 61 72 65 20 64 65  he puzzle are de
278f0 6e 6f 74 65 64 20 62 79 20 61 20 22 2e 22 20 63  noted by a "." c
27900 68 61 72 61 63 74 65 72 2e 20 20 0a 54 68 75 73  haracter.  .Thus
27910 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
27920 67 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  g:..<blockquote>
27930 0a 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35  .53..7....6..195
27940 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e  ....98....6.8...
27950 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e  6...34..8.3..17.
27960 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e  ..2...6.6....28.
27970 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e  ...419..5....8..
27980 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  79.</blockquote>
27990 0a 0a 3c 70 3e 43 6f 72 72 65 73 70 6f 6e 64 73  ..<p>Corresponds
279a0 20 74 6f 20 61 20 70 75 7a 7a 6c 65 20 6c 69 6b   to a puzzle lik
279b0 65 20 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  e this:..<blockq
279c0 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
279d0 64 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64  der="1" cellpadd
279e0 69 6e 67 3d 22 35 22 3e 0a 3c 74 72 3e 3c 74 64  ing="5">.<tr><td
279f0 3e 35 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e  >5<td>3<td> <td>
27a00 20 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20   <td>7<td> <td> 
27a10 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td> <td>.<tr><t
27a20 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>6<td> <td> <td
27a30 3e 31 3c 74 64 3e 39 3c 74 64 3e 35 3c 74 64 3e  >1<td>9<td>5<td>
27a40 20 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c   <td> <td>.<tr><
27a50 74 64 3e 20 3c 74 64 3e 39 3c 74 64 3e 38 3c 74  td> <td>9<td>8<t
27a60 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
27a70 3e 20 3c 74 64 3e 36 3c 74 64 3e 0a 3c 74 72 3e  > <td>6<td>.<tr>
27a80 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>8<td> <td> <
27a90 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74  td> <td>6<td> <t
27aa0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 33 0a 3c 74  d> <td> <td>3.<t
27ab0 72 3e 3c 74 64 3e 34 3c 74 64 3e 20 3c 74 64 3e  r><td>4<td> <td>
27ac0 20 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 33   <td>8<td> <td>3
27ad0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 0a  <td> <td> <td>1.
27ae0 3c 74 72 3e 3c 74 64 3e 37 3c 74 64 3e 20 3c 74  <tr><td>7<td> <t
27af0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74 64  d> <td> <td>2<td
27b00 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
27b10 36 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 36  6.<tr><td> <td>6
27b20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
27b30 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 38 3c 74  td> <td>2<td>8<t
27b40 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e  d>.<tr><td> <td>
27b50 20 3c 74 64 3e 20 3c 74 64 3e 34 3c 74 64 3e 31   <td> <td>4<td>1
27b60 3c 74 64 3e 39 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>9<td> <td> <
27b70 74 64 3e 35 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74  td>5.<tr><td> <t
27b80 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
27b90 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >8<td> <td> <td>
27ba0 37 3c 74 64 3e 39 0a 3c 2f 74 61 62 6c 65 3e 0a  7<td>9.</table>.
27bb0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
27bc0 70 3e 54 68 69 73 20 69 73 20 74 68 65 20 71 75  p>This is the qu
27bd0 65 72 79 20 74 68 61 74 20 73 6f 6c 76 65 73 20  ery that solves 
27be0 74 68 65 20 70 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c  the puzzle:..<bl
27bf0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
27c00 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
27c10 69 6e 70 75 74 28 73 75 64 29 20 41 53 20 28 0a  input(sud) AS (.
27c20 20 20 20 20 56 41 4c 55 45 53 28 27 35 33 2e 2e      VALUES('53..
27c30 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39  7....6..195....9
27c40 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33  8....6.8...6...3
27c50 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e  4..8.3..17...2..
27c60 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31  .6.6....28....41
27c70 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 27 29 0a  9..5....8..79').
27c80 20 20 29 2c 0a 20 20 64 69 67 69 74 73 28 7a 2c    ),.  digits(z,
27c90 20 6c 70 29 20 41 53 20 28 0a 20 20 20 20 56 41   lp) AS (.    VA
27ca0 4c 55 45 53 28 27 31 27 2c 20 31 29 0a 20 20 20  LUES('1', 1).   
27cb0 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
27cc0 54 0a 20 20 20 20 43 41 53 54 28 6c 70 2b 31 20  T.    CAST(lp+1 
27cd0 41 53 20 54 45 58 54 29 2c 20 6c 70 2b 31 20 46  AS TEXT), lp+1 F
27ce0 52 4f 4d 20 64 69 67 69 74 73 20 57 48 45 52 45  ROM digits WHERE
27cf0 20 6c 70 26 6c 74 3b 39 0a 20 20 29 2c 0a 20 20   lp&lt;9.  ),.  
27d00 78 28 73 2c 20 69 6e 64 29 20 41 53 20 28 0a 20  x(s, ind) AS (. 
27d10 20 20 20 53 45 4c 45 43 54 20 73 75 64 2c 20 69     SELECT sud, i
27d20 6e 73 74 72 28 73 75 64 2c 20 27 2e 27 29 20 46  nstr(sud, '.') F
27d30 52 4f 4d 20 69 6e 70 75 74 0a 20 20 20 20 55 4e  ROM input.    UN
27d40 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45  ION ALL.    SELE
27d50 43 54 0a 20 20 20 20 20 20 73 75 62 73 74 72 28  CT.      substr(
27d60 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20  s, 1, ind-1) || 
27d70 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69  z || substr(s, i
27d80 6e 64 2b 31 29 2c 0a 20 20 20 20 20 20 69 6e 73  nd+1),.      ins
27d90 74 72 28 20 73 75 62 73 74 72 28 73 2c 20 31 2c  tr( substr(s, 1,
27da0 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20   ind-1) || z || 
27db0 73 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29  substr(s, ind+1)
27dc0 2c 20 27 2e 27 20 29 0a 20 20 20 20 20 46 52 4f  , '.' ).     FRO
27dd0 4d 20 78 2c 20 64 69 67 69 74 73 20 41 53 20 7a  M x, digits AS z
27de0 0a 20 20 20 20 57 48 45 52 45 20 69 6e 64 3e 30  .    WHERE ind>0
27df0 0a 20 20 20 20 20 20 41 4e 44 20 4e 4f 54 20 45  .      AND NOT E
27e00 58 49 53 54 53 20 28 0a 20 20 20 20 20 20 20 20  XISTS (.        
27e10 20 20 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20      SELECT 1.   
27e20 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20             FROM 
27e30 64 69 67 69 74 73 20 41 53 20 6c 70 0a 20 20 20  digits AS lp.   
27e40 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20            WHERE 
27e50 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20  z.z = substr(s, 
27e60 28 28 69 6e 64 2d 31 29 2f 39 29 2a 39 20 2b 20  ((ind-1)/9)*9 + 
27e70 6c 70 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20  lp, 1).         
27e80 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20         OR z.z = 
27e90 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d  substr(s, ((ind-
27ea0 31 29 25 39 29 20 2b 20 28 6c 70 2d 31 29 2a 39  1)%9) + (lp-1)*9
27eb0 20 2b 20 31 2c 20 31 29 0a 20 20 20 20 20 20 20   + 1, 1).       
27ec0 20 20 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20           OR z.z 
27ed0 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28 28 69  = substr(s, (((i
27ee0 6e 64 2d 31 29 2f 33 29 20 25 20 33 29 20 2a 20  nd-1)/3) % 3) * 
27ef0 33 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3.              
27f00 20 20 20 20 20 20 20 20 20 20 2b 20 28 28 69 6e            + ((in
27f10 64 2d 31 29 2f 32 37 29 20 2a 20 32 37 20 2b 20  d-1)/27) * 27 + 
27f20 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  lp.             
27f30 20 20 20 20 20 20 20 20 20 20 20 2b 20 28 28 6c             + ((l
27f40 70 2d 31 29 20 2f 20 33 29 20 2a 20 36 2c 20 31  p-1) / 3) * 6, 1
27f50 29 0a 20 20 20 20 20 20 20 20 20 29 0a 20 20 29  ).         ).  )
27f60 0a 53 45 4c 45 43 54 20 73 20 46 52 4f 4d 20 78  .SELECT s FROM x
27f70 20 57 48 45 52 45 20 69 6e 64 3d 30 3b 0a 3c 2f   WHERE ind=0;.</
27f80 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
27f90 3e 0a 0a 3c 70 3e 54 68 65 20 22 69 6e 70 75 74  >..<p>The "input
27fa0 22 20 43 54 45 20 64 65 66 69 6e 65 73 20 74 68  " CTE defines th
27fb0 65 20 69 6e 70 75 74 20 70 75 7a 7a 6c 65 2e 0a  e input puzzle..
27fc0 54 68 65 20 22 64 69 67 69 74 73 22 20 43 54 45  The "digits" CTE
27fd0 20 64 65 66 69 6e 65 73 20 61 20 74 61 62 6c 65   defines a table
27fe0 20 74 68 61 74 20 68 6f 6c 64 73 20 61 6c 6c 20   that holds all 
27ff0 64 69 67 69 74 73 20 62 65 74 77 65 65 6e 20 31  digits between 1
28000 20 61 6e 64 20 39 2e 0a 54 68 65 20 77 6f 72 6b   and 9..The work
28010 20 6f 66 20 73 6f 6c 76 69 6e 67 20 74 68 65 20   of solving the 
28020 70 75 7a 7a 6c 65 20 69 73 20 75 6e 64 65 72 74  puzzle is undert
28030 61 6b 65 6e 20 62 79 20 74 68 65 20 22 78 22 20  aken by the "x" 
28040 43 54 45 2e 0a 41 6e 20 65 6e 74 72 79 20 69 6e  CTE..An entry in
28050 20 78 28 73 2c 69 6e 64 29 20 6d 65 61 6e 73 20   x(s,ind) means 
28060 74 68 61 74 20 74 68 65 20 38 31 2d 63 68 61 72  that the 81-char
28070 61 63 74 65 72 20 73 74 72 69 6e 67 20 22 73 22  acter string "s"
28080 20 69 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f   is a valid.sudo
28090 6b 75 20 70 75 7a 7a 6c 65 20 28 69 74 20 68 61  ku puzzle (it ha
280a0 73 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 73 29 20  s no conflicts) 
280b0 61 6e 64 20 74 68 61 74 20 74 68 65 20 66 69 72  and that the fir
280c0 73 74 20 75 6e 6b 6e 6f 77 6e 20 63 68 61 72 61  st unknown chara
280d0 63 74 65 72 0a 69 73 20 61 74 20 70 6f 73 69 74  cter.is at posit
280e0 69 6f 6e 20 22 69 6e 64 22 2c 20 6f 72 20 69 6e  ion "ind", or in
280f0 64 3d 3d 30 20 69 66 20 61 6c 6c 20 63 68 61 72  d==0 if all char
28100 61 63 74 65 72 20 70 6f 73 69 74 69 6f 6e 73 20  acter positions 
28110 61 72 65 20 66 69 6c 6c 65 64 20 69 6e 2e 0a 54  are filled in..T
28120 68 65 20 67 6f 61 6c 2c 20 74 68 65 6e 2c 20 69  he goal, then, i
28130 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 65 6e 74  s to compute ent
28140 72 69 65 73 20 66 6f 72 20 22 78 22 20 77 69 74  ries for "x" wit
28150 68 20 61 6e 20 22 69 6e 64 22 20 6f 66 20 30 2e  h an "ind" of 0.
28160 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 76 65 72 20  ..<p>The solver 
28170 77 6f 72 6b 73 20 62 79 20 61 64 64 69 6e 67 20  works by adding 
28180 6e 65 77 20 65 6e 74 72 69 65 73 20 74 6f 20 74  new entries to t
28190 68 65 20 22 78 22 20 72 65 63 75 72 73 69 76 65  he "x" recursive
281a0 20 74 61 62 6c 65 2e 0a 47 69 76 65 6e 20 70 72   table..Given pr
281b0 69 6f 72 20 65 6e 74 72 69 65 73 2c 20 74 68 65  ior entries, the
281c0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
281d0 74 20 74 72 69 65 73 20 74 6f 20 66 69 6c 6c 20  t tries to fill 
281e0 69 6e 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 0a  in a single new.
281f0 70 6f 73 69 74 69 6f 6e 20 77 69 74 68 20 61 6c  position with al
28200 6c 20 76 61 6c 75 65 73 20 62 65 74 77 65 65 6e  l values between
28210 20 31 20 61 6e 64 20 39 20 74 68 61 74 20 61 63   1 and 9 that ac
28220 74 75 61 6c 6c 79 20 77 6f 72 6b 20 69 6e 20 74  tually work in t
28230 68 61 74 0a 70 6f 73 69 74 69 6f 6e 2e 20 20 54  hat.position.  T
28240 68 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 22  he complicated "
28250 4e 4f 54 20 45 58 49 53 54 53 22 20 73 75 62 71  NOT EXISTS" subq
28260 75 65 72 79 20 69 73 20 74 68 65 20 6d 61 67 69  uery is the magi
28270 63 20 74 68 61 74 0a 66 69 67 75 72 65 73 20 6f  c that.figures o
28280 75 74 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ut whether or no
28290 74 20 65 61 63 68 20 63 61 6e 64 69 64 61 74 65  t each candidate
282a0 20 22 73 22 20 73 74 72 69 6e 67 20 69 73 20 61   "s" string is a
282b0 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75   valid.sudoku pu
282c0 7a 7a 6c 65 20 6f 72 20 6e 6f 74 2e 0a 0a 3c 70  zzle or not...<p
282d0 3e 54 68 65 20 66 69 6e 61 6c 20 61 6e 73 77 65  >The final answe
282e0 72 20 69 73 20 66 6f 75 6e 64 20 62 79 20 6c 6f  r is found by lo
282f0 6f 6b 69 6e 67 20 66 6f 72 20 61 20 73 74 72 69  oking for a stri
28300 6e 67 20 77 69 74 68 20 69 6e 64 3d 3d 30 2e 0a  ng with ind==0..
28310 49 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  If the original 
28320 73 75 64 6f 6b 75 20 70 72 6f 62 6c 65 6d 20 64  sudoku problem d
28330 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 75 6e  id not have a un
28340 69 71 75 65 20 73 6f 6c 75 74 69 6f 6e 2c 20 74  ique solution, t
28350 68 65 6e 0a 74 68 65 20 71 75 65 72 79 20 77 69  hen.the query wi
28360 6c 6c 20 72 65 74 75 72 6e 20 61 6c 6c 20 70 6f  ll return all po
28370 73 73 69 62 6c 65 20 73 6f 6c 75 74 69 6f 6e 73  ssible solutions
28380 2e 20 20 49 66 20 74 68 65 20 6f 72 69 67 69 6e  .  If the origin
28390 61 6c 20 70 72 6f 62 6c 65 6d 0a 77 61 73 20 75  al problem.was u
283a0 6e 73 6f 6c 76 61 62 6c 65 2c 20 74 68 65 6e 20  nsolvable, then 
283b0 6e 6f 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20  no rows will be 
283c0 72 65 74 75 72 6e 65 64 2e 20 20 49 6e 20 74 68  returned.  In th
283d0 69 73 20 63 61 73 65 2c 20 74 68 65 20 75 6e 69  is case, the uni
283e0 71 75 65 0a 61 6e 73 77 65 72 20 69 73 3a 0a 0a  que.answer is:..
283f0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 34  <blockquote>.534
28400 36 37 38 39 31 32 36 37 32 31 39 35 33 34 38 31  6789126721953481
28410 39 38 33 34 32 35 36 37 38 35 39 37 36 31 34 32  9834256785976142
28420 33 34 32 36 38 35 33 37 39 31 37 31 33 39 32 34  3426853791713924
28430 38 35 36 39 36 31 35 33 37 32 38 34 32 38 37 34  8569615372842874
28440 31 39 36 33 35 33 34 35 32 38 36 31 37 39 0a 3c  19635345286179.<
28450 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
28460 3e 54 68 65 20 73 6f 6c 75 74 69 6f 6e 20 77 61  >The solution wa
28470 73 20 63 6f 6d 70 75 74 65 64 20 69 6e 20 6c 65  s computed in le
28480 73 73 20 74 68 61 6e 20 33 30 30 20 6d 69 6c 6c  ss than 300 mill
28490 69 73 65 63 6f 6e 64 73 20 6f 6e 20 61 20 6d 6f  iseconds on a mo
284a0 64 65 72 6e 0a 77 6f 72 6b 73 74 61 74 69 6f 6e  dern.workstation
284b0 2e 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61 74 69 6f  ...<h3>Limitatio
284c0 6e 73 20 41 6e 64 20 43 61 76 65 61 74 73 3c 2f  ns And Caveats</
284d0 68 33 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  h3>..<ul>.<li><p
284e0 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61 75 73  >.The WITH claus
284f0 65 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  e cannot be used
28500 20 77 69 74 68 69 6e 20 61 20 5b 43 52 45 41 54   within a [CREAT
28510 45 20 54 52 49 47 47 45 52 5d 2e 0a 3c 6c 69 3e  E TRIGGER]..<li>
28520 3c 70 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61  <p>.The WITH cla
28530 75 73 65 20 6d 75 73 74 20 61 70 70 65 61 72 20  use must appear 
28540 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
28550 20 6f 66 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20   of a top-level 
28560 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
28570 6e 74 0a 6f 72 20 61 74 20 74 68 65 20 62 65 67  nt.or at the beg
28580 69 6e 6e 69 6e 67 20 6f 66 20 61 20 73 75 62 71  inning of a subq
28590 75 65 72 79 2e 20 20 54 68 65 20 57 49 54 48 20  uery.  The WITH 
285a0 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65  clause cannot be
285b0 20 70 72 65 70 65 6e 64 65 64 20 74 6f 0a 74 68   prepended to.th
285c0 65 20 73 65 63 6f 6e 64 20 6f 72 20 73 75 62 73  e second or subs
285d0 65 71 75 65 6e 74 20 53 45 4c 45 43 54 20 73 74  equent SELECT st
285e0 61 74 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f  atement of a [co
285f0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2e 0a  mpound select]..
28600 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 53 51 4c 3a  <li><p>.The SQL:
28610 31 39 39 39 20 73 70 65 63 20 72 65 71 75 69 72  1999 spec requir
28620 65 73 20 74 68 61 74 20 74 68 65 20 52 45 43 55  es that the RECU
28630 52 53 49 56 45 20 6b 65 79 77 6f 72 64 20 66 6f  RSIVE keyword fo
28640 6c 6c 6f 77 20 57 49 54 48 20 69 6e 20 61 6e 79  llow WITH in any
28650 0a 57 49 54 48 20 63 6c 61 75 73 65 20 74 68 61  .WITH clause tha
28660 74 20 69 6e 63 6c 75 64 65 73 20 61 20 72 65 63  t includes a rec
28670 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61  ursive common ta
28680 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ble expression. 
28690 20 48 6f 77 65 76 65 72 2c 20 66 6f 72 0a 63 6f   However, for.co
286a0 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
286b0 20 53 71 6c 53 65 72 76 65 72 20 61 6e 64 20 4f   SqlServer and O
286c0 72 61 63 6c 65 2c 20 53 51 4c 69 74 65 20 64 6f  racle, SQLite do
286d0 65 73 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 74  es not enforce t
286e0 68 69 73 20 72 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a  his rule..</ul>.
286f0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
28700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28740 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53  ######.Section S
28750 45 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45  ELECT select {SE
28760 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a 52 65 63  LECT query}..Rec
28770 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
28780 72 61 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 0a  ram select-stmt.
28790 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20  </tcl>...<p>The 
287a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
287b0 20 69 73 20 75 73 65 64 20 74 6f 20 71 75 65 72   is used to quer
287c0 79 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  y the database. 
287d0 20 54 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 61   The.result of a
287e0 20 53 45 4c 45 43 54 20 69 73 20 7a 65 72 6f 20   SELECT is zero 
287f0 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20  or more rows of 
28800 64 61 74 61 20 77 68 65 72 65 20 65 61 63 68 20  data where each 
28810 72 6f 77 0a 68 61 73 20 61 20 66 69 78 65 64 20  row.has a fixed 
28820 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
28830 73 2e 20 20 41 20 53 45 4c 45 43 54 20 73 74 61  s.  A SELECT sta
28840 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
28850 6d 61 6b 65 0a 61 6e 79 20 63 68 61 6e 67 65 73  make.any changes
28860 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
28870 2e 0a 0a 3c 70 3e 54 68 65 20 22 5b 73 65 6c 65  ...<p>The "[sele
28880 63 74 2d 73 74 6d 74 5d 22 20 73 79 6e 74 61 78  ct-stmt]" syntax
28890 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20 61   diagram above a
288a0 74 74 65 6d 70 74 73 20 74 6f 20 73 68 6f 77 20  ttempts to show 
288b0 61 73 20 6d 75 63 68 20 6f 66 20 74 68 65 0a 53  as much of the.S
288c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
288d0 73 79 6e 74 61 78 20 61 73 20 70 6f 73 73 69 62  syntax as possib
288e0 6c 65 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 64  le in a single d
288f0 69 61 67 72 61 6d 2c 20 62 65 63 61 75 73 65 20  iagram, because 
28900 73 6f 6d 65 20 72 65 61 64 65 72 73 0a 66 69 6e  some readers.fin
28910 64 20 74 68 61 74 20 68 65 6c 70 66 75 6c 2e 20  d that helpful. 
28920 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 22   The following "
28930 5b 66 61 63 74 6f 72 65 64 2d 73 65 6c 65 63 74  [factored-select
28940 2d 73 74 6d 74 5d 22 20 69 73 20 61 6e 20 61 6c  -stmt]" is an al
28950 74 65 72 6e 61 74 69 76 65 0a 73 79 6e 74 61 78  ternative.syntax
28960 20 64 69 61 67 72 61 6d 73 20 74 68 61 74 20 65   diagrams that e
28970 78 70 72 65 73 73 65 73 20 74 68 65 20 73 61 6d  xpresses the sam
28980 65 20 73 79 6e 74 61 78 20 62 75 74 20 74 72 69  e syntax but tri
28990 65 73 20 74 6f 20 62 72 65 61 6b 20 74 68 65 20  es to break the 
289a0 73 79 6e 74 61 78 20 0a 64 6f 77 6e 20 69 6e 74  syntax .down int
289b0 6f 20 73 6d 61 6c 6c 65 72 20 63 68 75 6e 6b 73  o smaller chunks
289c0 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69  ...<tcl>.Recursi
289d0 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
289e0 2d 2d 69 6e 69 74 69 61 6c 6c 79 2d 68 69 64 64  --initially-hidd
289f0 65 6e 20 66 61 63 74 6f 72 65 64 2d 73 65 6c 65  en factored-sele
28a00 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63  ct-stmt select-c
28a10 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e  ore.</tcl>..<p>N
28a20 6f 74 65 20 74 68 61 74 20 74 68 65 72 65 20 61  ote that there a
28a30 72 65 20 70 61 74 68 73 20 74 68 72 6f 75 67 68  re paths through
28a40 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
28a50 72 61 6d 73 20 74 68 61 74 0a 61 72 65 20 6e 6f  rams that.are no
28a60 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20 70 72 61  t allowed in pra
28a70 63 74 69 63 65 2e 20 20 53 6f 6d 65 20 65 78 61  ctice.  Some exa
28a80 6d 70 6c 65 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  mples:.<ul>.<li>
28a90 41 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73  A [VALUES] claus
28aa0 65 20 63 61 6e 20 62 65 20 74 68 65 20 66 69 72  e can be the fir
28ab0 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 61 20  st element in a 
28ac0 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
28ad0 5d 0a 20 20 20 20 74 68 61 74 20 75 73 65 73 20  ].    that uses 
28ae0 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2c  a [WITH] clause,
28af0 20 62 75 74 20 61 20 5b 73 69 6d 70 6c 65 20 53   but a [simple S
28b00 45 4c 45 43 54 5d 20 74 68 61 74 20 63 6f 6e 73  ELECT] that cons
28b10 69 73 74 73 20 6f 66 0a 20 20 20 20 6a 75 73 74  ists of.    just
28b20 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75   a [VALUES] clau
28b30 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65  se cannot be pre
28b40 63 65 64 65 64 20 62 79 20 61 20 5b 57 49 54 48  ceded by a [WITH
28b50 5d 20 63 6c 61 75 73 65 2e 0a 3c 6c 69 3e 54 68  ] clause..<li>Th
28b60 65 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 20  e [WITH] clause 
28b70 6d 75 73 74 20 6f 63 63 75 72 20 6f 6e 20 74 68  must occur on th
28b80 65 20 66 69 72 73 74 20 53 45 4c 45 43 54 20 6f  e first SELECT o
28b90 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  f a [compound SE
28ba0 4c 45 43 54 5d 2e 0a 20 20 20 20 49 74 20 63 61  LECT]..    It ca
28bb0 6e 6e 6f 74 20 66 6f 6c 6c 6f 77 20 61 20 5b 63  nnot follow a [c
28bc0 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72  ompound-operator
28bd0 5d 2e 0a 3c 2f 75 6c 3e 0a 54 68 65 73 65 20 61  ]..</ul>.These a
28be0 6e 64 20 6f 74 68 65 72 20 73 69 6d 69 6c 61 72  nd other similar
28bf0 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74   syntax restrict
28c00 69 6f 6e 73 20 61 72 65 20 64 65 73 63 72 69 62  ions are describ
28c10 65 64 20 69 6e 20 74 68 65 20 74 65 78 74 2e 0a  ed in the text..
28c20 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73  .<p>The SELECT s
28c30 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
28c40 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61 74 65 64  most complicated
28c50 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20   command in the 
28c60 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54 6f  SQL language..To
28c70 20 6d 61 6b 65 20 74 68 65 20 64 65 73 63 72 69   make the descri
28c80 70 74 69 6f 6e 20 65 61 73 69 65 72 20 74 6f 20  ption easier to 
28c90 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66 20  follow, some of 
28ca0 74 68 65 20 70 61 73 73 61 67 65 73 20 62 65 6c  the passages bel
28cb0 6f 77 20 64 65 73 63 72 69 62 65 0a 74 68 65 20  ow describe.the 
28cc0 77 61 79 20 74 68 65 20 64 61 74 61 20 72 65 74  way the data ret
28cd0 75 72 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43  urned by a SELEC
28ce0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64  T statement is d
28cf0 65 74 65 72 6d 69 6e 65 64 20 61 73 20 61 20 73  etermined as a s
28d00 65 72 69 65 73 20 6f 66 0a 73 74 65 70 73 2e 20  eries of.steps. 
28d10 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
28d20 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64 20  to keep in mind 
28d30 74 68 61 74 20 74 68 69 73 20 69 73 20 70 75 72  that this is pur
28d40 65 6c 79 20 69 6c 6c 75 73 74 72 61 74 69 76 65  ely illustrative
28d50 20 2d 0a 69 6e 20 70 72 61 63 74 69 63 65 20 6e   -.in practice n
28d60 65 69 74 68 65 72 20 53 51 4c 69 74 65 20 6e 6f  either SQLite no
28d70 72 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20  r any other SQL 
28d80 65 6e 67 69 6e 65 20 69 73 20 72 65 71 75 69 72  engine is requir
28d90 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68  ed to follow .th
28da0 69 73 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  is or any other 
28db0 73 70 65 63 69 66 69 63 20 70 72 6f 63 65 73 73  specific process
28dc0 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
28dd0 65 6e 74 20 73 69 6d 70 6c 65 73 65 6c 65 63 74  ent simpleselect
28de0 20 7b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 7d   {simple SELECT}
28df0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 69 6d 70 6c  </tcl>.<h3>Simpl
28e00 65 20 53 65 6c 65 63 74 20 50 72 6f 63 65 73 73  e Select Process
28e10 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ing</h3>..<p>The
28e20 20 63 6f 72 65 20 6f 66 20 61 20 53 45 4c 45 43   core of a SELEC
28e30 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  T statement is a
28e40 20 22 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 22   "simple SELECT"
28e50 20 73 68 6f 77 6e 20 62 79 20 74 68 65 0a 5b 73   shown by the.[s
28e60 65 6c 65 63 74 2d 63 6f 72 65 5d 20 61 6e 64 20  elect-core] and 
28e70 5b 73 69 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73  [simple-select-s
28e80 74 6d 74 5d 20 73 79 6e 74 61 78 20 64 69 61 67  tmt] syntax diag
28e90 72 61 6d 73 20 62 65 6c 6f 77 2e 20 20 0a 49 6e  rams below.  .In
28ea0 20 70 72 61 63 74 69 63 65 2c 20 6d 6f 73 74 20   practice, most 
28eb0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
28ec0 73 20 61 72 65 20 73 69 6d 70 6c 65 20 53 45 4c  s are simple SEL
28ed0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ECT statements..
28ee0 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65  .<tcl>.Recursive
28ef0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
28f00 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74  mple-select-stmt
28f10 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74   select-core.</t
28f20 63 6c 3e 0a 0a 3c 70 3e 47 65 6e 65 72 61 74 69  cl>..<p>Generati
28f30 6e 67 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ng the results o
28f40 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  f a simple SELEC
28f50 54 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  T.statement is p
28f60 72 65 73 65 6e 74 65 64 20 61 73 20 61 20 66 6f  resented as a fo
28f70 75 72 20 73 74 65 70 20 70 72 6f 63 65 73 73 20  ur step process 
28f80 69 6e 20 74 68 65 20 64 65 73 63 72 69 70 74 69  in the descripti
28f90 6f 6e 20 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a  on below:..<ol>.
28fa0 20 20 3c 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20    <li> <p>[FROM 
28fb0 63 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69  clause] processi
28fc0 6e 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61  ng: The input da
28fd0 74 61 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c  ta for the simpl
28fe0 65 20 53 45 4c 45 43 54 20 69 73 0a 20 20 20 20  e SELECT is.    
28ff0 20 20 20 64 65 74 65 72 6d 69 6e 65 64 2e 20 54     determined. T
29000 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73  he input data is
29010 20 65 69 74 68 65 72 20 69 6d 70 6c 69 63 69 74   either implicit
29020 6c 79 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  ly a single row 
29030 77 69 74 68 20 30 0a 20 20 20 20 20 20 20 63 6f  with 0.       co
29040 6c 75 6d 6e 73 20 28 69 66 20 74 68 65 72 65 20  lumns (if there 
29050 69 73 20 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73  is no FROM claus
29060 65 29 20 6f 72 20 69 73 20 64 65 74 65 72 6d 69  e) or is determi
29070 6e 65 64 20 62 79 20 74 68 65 20 46 52 4f 4d 0a  ned by the FROM.
29080 20 20 20 20 20 20 20 63 6c 61 75 73 65 2e 0a 20         clause.. 
29090 20 3c 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20   <li> <p>[WHERE 
290a0 63 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69  clause] processi
290b0 6e 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61  ng: The input da
290c0 74 61 20 69 73 20 66 69 6c 74 65 72 65 64 20 75  ta is filtered u
290d0 73 69 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20  sing the WHERE. 
290e0 20 20 20 20 20 20 63 6c 61 75 73 65 20 65 78 70        clause exp
290f0 72 65 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69  ression.  .  <li
29100 3e 20 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47  > <p>[GROUP BY|G
29110 52 4f 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20  ROUP BY, HAVING 
29120 61 6e 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d  and result-colum
29130 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72  n expression] pr
29140 6f 63 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20  ocessing: .     
29150 20 20 54 68 65 20 73 65 74 20 6f 66 20 72 65 73    The set of res
29160 75 6c 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70  ult rows is comp
29170 75 74 65 64 20 62 79 20 61 67 67 72 65 67 61 74  uted by aggregat
29180 69 6e 67 20 74 68 65 20 64 61 74 61 20 61 63 63  ing the data acc
29190 6f 72 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20  ording to.      
291a0 20 61 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c   any GROUP BY cl
291b0 61 75 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61  ause and calcula
291c0 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d  ting the result-
291d0 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  set expressions 
291e0 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20 20 72  for the.       r
291f0 6f 77 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65  ows of the filte
29200 72 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65  red input datase
29210 74 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  t.  .  <li> <p>[
29220 44 49 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43  DISTINCT|DISTINC
29230 54 2f 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70  T/ALL keyword] p
29240 72 6f 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68  rocessing: If th
29250 65 20 71 75 65 72 79 20 69 73 20 61 20 22 53 45  e query is a "SE
29260 4c 45 43 54 0a 20 20 20 20 20 20 20 44 49 53 54  LECT.       DIST
29270 49 4e 43 54 22 20 71 75 65 72 79 2c 20 64 75 70  INCT" query, dup
29280 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20  licate rows are 
29290 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
292a0 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
292b0 6f 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54  ows..</ol>..<p>T
292c0 68 65 72 65 20 61 72 65 20 74 77 6f 20 74 79 70  here are two typ
292d0 65 73 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c  es of simple SEL
292e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20  ECT statement - 
292f0 61 67 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e  aggregate and .n
29300 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65  on-aggregate que
29310 72 69 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20  ries. ^A simple 
29320 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
29330 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
29340 20 71 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e   query if.it con
29350 74 61 69 6e 73 20 65 69 74 68 65 72 20 61 20 47  tains either a G
29360 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f  ROUP BY clause o
29370 72 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  r one or more ag
29380 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
29390 73 0a 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  s.in the result-
293a0 73 65 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  set. ^Otherwise,
293b0 20 69 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   if a simple SEL
293c0 45 43 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ECT contains no 
293d0 61 67 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69  aggregate.functi
293e0 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42  ons or a GROUP B
293f0 59 20 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20  Y clause, it is 
29400 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
29410 71 75 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e  query...<p><b>1.
29420 20 44 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f   Determination o
29430 66 20 69 6e 70 75 74 20 64 61 74 61 20 28 46 52  f input data (FR
29440 4f 4d 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73  OM clause proces
29450 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  sing).</b>.<tcl>
29460 68 64 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d  hd_fragment from
29470 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63  clause</tcl>.<tc
29480 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46  l>hd_keywords {F
29490 52 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c  ROM clause}</tcl
294a0 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20  >..<p>The input 
294b0 64 61 74 61 20 75 73 65 64 20 62 79 20 61 20 73  data used by a s
294c0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65  imple SELECT que
294d0 72 79 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c  ry is a set of <
294e0 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61  i>N</i> rows .ea
294f0 63 68 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75  ch <i>M</i> colu
29500 6d 6e 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28  mns wide...<p>^(
29510 49 66 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  If the FROM clau
29520 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  se is omitted fr
29530 6f 6d 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  om a simple SELE
29540 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  CT statement, th
29550 65 6e 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61  en the .input da
29560 74 61 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79  ta is implicitly
29570 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65   a single row ze
29580 72 6f 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29  ro columns wide)
29590 5e 20 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e  ^ (i.e. <i>N</i>
295a0 3d 31 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d  =1 and.<i>M</i>=
295b0 30 29 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f  0)...<p>If a FRO
295c0 4d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  M clause is spec
295d0 69 66 69 65 64 2c 20 74 68 65 20 64 61 74 61 20  ified, the data 
295e0 6f 6e 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c  on which a simpl
295f0 65 20 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f  e SELECT query.o
29600 70 65 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72  perates comes fr
29610 6f 6d 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f  om the one or mo
29620 72 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  re tables or sub
29630 71 75 65 72 69 65 73 20 28 53 45 4c 45 43 54 20  queries (SELECT 
29640 73 74 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61  statements.in pa
29650 72 65 6e 74 68 65 73 69 73 29 20 73 70 65 63 69  renthesis) speci
29660 66 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  fied following t
29670 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e  he FROM keyword.
29680 20 5e 41 20 73 75 62 71 75 65 72 79 20 73 70 65   ^A subquery spe
29690 63 69 66 69 65 64 0a 69 6e 20 74 68 65 20 74 61  cified.in the ta
296a0 62 6c 65 2d 6f 72 2d 73 75 62 71 75 65 72 79 20  ble-or-subquery 
296b0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52  following the FR
296c0 4f 4d 20 63 6c 61 75 73 65 20 69 6e 20 61 20 0a  OM clause in a .
296d0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
296e0 61 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e 64 6c  atement is.handl
296f0 65 64 20 61 73 20 69 66 20 69 74 20 77 61 73 20  ed as if it was 
29700 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  a table containi
29710 6e 67 20 74 68 65 20 64 61 74 61 20 72 65 74 75  ng the data retu
29720 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e  rned by executin
29730 67 20 74 68 65 0a 73 75 62 71 75 65 72 79 20 73  g the.subquery s
29740 74 61 74 65 6d 65 6e 74 2e 20 5e 45 61 63 68 20  tatement. ^Each 
29750 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 73 75  column of the su
29760 62 71 75 65 72 79 20 68 61 73 20 74 68 65 0a 5b  bquery has the.[
29770 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c 6c 61 74  collation|collat
29780 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 61 6e  ion sequence] an
29790 64 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20  d [affinity] of 
297a0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
297b0 67 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 6e 20  g expression.in 
297c0 74 68 65 20 73 75 62 71 75 65 72 79 20 73 74 61  the subquery sta
297d0 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20  tement...<p>^If 
297e0 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 61 20  there is only a 
297f0 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
29800 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
29810 46 52 4f 4d 0a 63 6c 61 75 73 65 2c 20 74 68 65  FROM.clause, the
29820 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  n the input data
29830 20 75 73 65 64 20 62 79 20 74 68 65 20 53 45 4c   used by the SEL
29840 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
29850 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
29860 20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65   the.named table
29870 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d  . ^If there is m
29880 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 61 62  ore than one tab
29890 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
298a0 6e 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 74 68  n FROM clause.th
298b0 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  en the contents 
298c0 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e  of all tables an
298d0 64 2f 6f 72 20 73 75 62 71 75 65 72 69 65 73 0a  d/or subqueries.
298e0 61 72 65 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20  are joined into 
298f0 61 20 73 69 6e 67 6c 65 20 64 61 74 61 73 65 74  a single dataset
29900 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20   for the simple 
29910 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
29920 20 74 6f 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a   to operate on..
29930 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68 65 20  Exactly how the 
29940 64 61 74 61 20 69 73 20 63 6f 6d 62 69 6e 65 64  data is combined
29950 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20   depends on the 
29960 73 70 65 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f  specific [join-o
29970 70 65 72 61 74 6f 72 5d 20 61 6e 64 0a 5b 6a 6f  perator] and.[jo
29980 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75  in-constraint] u
29990 73 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74  sed to connect t
299a0 68 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  he tables or sub
299b0 71 75 65 72 69 65 73 20 74 6f 67 65 74 68 65 72  queries together
299c0 2e 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20  ...<p>All joins 
299d0 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 62 61  in SQLite are ba
299e0 73 65 64 20 6f 6e 20 74 68 65 20 63 61 72 74 65  sed on the carte
299f0 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20  sian product of 
29a00 74 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67  the left and.rig
29a10 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73  ht-hand datasets
29a20 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  . ^The columns o
29a30 66 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  f the cartesian 
29a40 70 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 20  product dataset 
29a50 61 72 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20  are, in .order, 
29a60 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  all the columns 
29a70 6f 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  of the left-hand
29a80 20 64 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65   dataset followe
29a90 64 20 62 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c  d by all the col
29aa0 75 6d 6e 73 0a 6f 66 20 74 68 65 20 72 69 67 68  umns.of the righ
29ab0 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 2e 20  t-hand dataset. 
29ac0 5e 54 68 65 72 65 20 69 73 20 61 20 72 6f 77 20  ^There is a row 
29ad0 69 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  in the cartesian
29ae0 20 70 72 6f 64 75 63 74 20 64 61 74 61 73 65 74   product dataset
29af0 0a 66 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62 69  .formed by combi
29b00 6e 69 6e 67 20 65 61 63 68 20 75 6e 69 71 75 65  ning each unique
29b10 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
29b20 61 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c  a row from the l
29b30 65 66 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69  eft-hand .and ri
29b40 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
29b50 73 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f  s. ^(In other wo
29b60 72 64 73 2c 20 69 66 20 74 68 65 20 6c 65 66 74  rds, if the left
29b70 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 63 6f  -hand dataset co
29b80 6e 73 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 3c 73  nsists of.<i>N<s
29b90 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f  ub><small>left</
29ba0 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e  small></sub></i>
29bb0 20 72 6f 77 73 20 6f 66 20 0a 3c 69 3e 4d 3c 73   rows of .<i>M<s
29bc0 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f  ub><small>left</
29bd0 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e  small></sub></i>
29be0 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74 68   columns, and th
29bf0 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
29c00 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62  aset of.<i>N<sub
29c10 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73  ><small>right</s
29c20 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20  mall></sub></i> 
29c30 72 6f 77 73 20 6f 66 0a 3c 69 3e 4d 3c 73 75 62  rows of.<i>M<sub
29c40 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73  ><small>right</s
29c50 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20  mall></sub></i> 
29c60 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68  columns, then th
29c70 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
29c80 75 63 74 20 69 73 20 61 0a 64 61 74 61 73 65 74  uct is a.dataset
29c90 20 6f 66 20 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73   of .<i>N<sub><s
29ca0 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
29cb0 3e 3c 2f 73 75 62 3e 26 74 69 6d 65 73 3b 4e 3c  ></sub>&times;N<
29cc0 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74  sub><small>right
29cd0 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f  </small></sub></
29ce0 69 3e 0a 72 6f 77 73 2c 20 65 61 63 68 20 63 6f  i>.rows, each co
29cf0 6e 74 61 69 6e 69 6e 67 20 0a 3c 69 3e 4d 3c 73  ntaining .<i>M<s
29d00 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f  ub><small>left</
29d10 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 2b 4d 3c 73  small></sub>+M<s
29d20 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c  ub><small>right<
29d30 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69  /small></sub></i
29d40 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c 70  > columns.)^..<p
29d50 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  >^If the join-op
29d60 65 72 61 74 6f 72 20 69 73 20 22 43 52 4f 53 53  erator is "CROSS
29d70 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45 52 20 4a   JOIN", "INNER J
29d80 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 6f 72 20  OIN", "JOIN" or 
29d90 61 20 63 6f 6d 6d 61 0a 28 22 2c 22 29 20 61 6e  a comma.(",") an
29da0 64 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 4e  d there is no ON
29db0 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
29dc0 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
29dd0 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 69 73  t of the join is
29de0 0a 73 69 6d 70 6c 79 20 74 68 65 20 63 61 72 74  .simply the cart
29df0 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66  esian product of
29e00 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
29e10 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
29e20 73 2e 20 0a 49 66 20 6a 6f 69 6e 2d 6f 70 65 72  s. .If join-oper
29e30 61 74 6f 72 20 64 6f 65 73 20 68 61 76 65 20 4f  ator does have O
29e40 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73  N or USING claus
29e50 65 73 2c 20 74 68 6f 73 65 20 61 72 65 20 68 61  es, those are ha
29e60 6e 64 6c 65 64 20 61 63 63 6f 72 64 69 6e 67 20  ndled according 
29e70 74 6f 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to.the following
29e80 20 62 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a 0a   bullet points:.
29e90 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  .<ul>.  <li> <p>
29ea0 5e 28 49 66 20 74 68 65 72 65 20 69 73 20 61 6e  ^(If there is an
29eb0 20 4f 4e 20 63 6c 61 75 73 65 20 74 68 65 6e 20   ON clause then 
29ec0 74 68 65 20 4f 4e 20 65 78 70 72 65 73 73 69 6f  the ON expressio
29ed0 6e 20 69 73 0a 20 20 20 20 20 20 20 65 76 61 6c  n is.       eval
29ee0 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  uated for each r
29ef0 6f 77 20 6f 66 20 74 68 65 20 63 61 72 74 65 73  ow of the cartes
29f00 69 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61  ian product as a
29f10 20 0a 20 20 20 20 20 20 20 5b 62 6f 6f 6c 65 61   .       [boolea
29f20 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f  n expression]. O
29f30 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69  nly rows for whi
29f40 63 68 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ch the expressio
29f50 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 0a  n evaluates to .
29f60 20 20 20 20 20 20 20 74 72 75 65 20 61 72 65 20         true are 
29f70 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68  included from th
29f80 65 20 64 61 74 61 73 65 74 2e 29 5e 0a 0a 20 20  e dataset.)^..  
29f90 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20 74 68 65 72  <li> <p>^If ther
29fa0 65 20 69 73 20 61 20 55 53 49 4e 47 20 63 6c 61  e is a USING cla
29fb0 75 73 65 0a 20 20 20 20 20 20 20 74 68 65 6e 20  use.       then 
29fc0 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75  each of the colu
29fd0 6d 6e 20 6e 61 6d 65 73 20 73 70 65 63 69 66 69  mn names specifi
29fe0 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e  ed must exist in
29ff0 20 74 68 65 20 64 61 74 61 73 65 74 73 20 74 6f   the datasets to
2a000 20 0a 20 20 20 20 20 20 20 62 6f 74 68 20 74 68   .       both th
2a010 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
2a020 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65   of the join-ope
2a030 72 61 74 6f 72 2e 20 5e 28 46 6f 72 20 65 61 63  rator. ^(For eac
2a040 68 20 70 61 69 72 20 6f 66 20 6e 61 6d 65 64 0a  h pair of named.
2a050 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c 20         columns, 
2a060 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22  the expression "
2a070 6c 68 73 2e 58 20 3d 20 72 68 73 2e 58 22 20 69  lhs.X = rhs.X" i
2a080 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
2a090 65 61 63 68 20 72 6f 77 20 6f 66 0a 20 20 20 20  each row of.    
2a0a0 20 20 20 74 68 65 20 63 61 72 74 65 73 69 61 6e     the cartesian
2a0b0 20 70 72 6f 64 75 63 74 20 61 73 20 61 20 5b 62   product as a [b
2a0c0 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
2a0d0 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f  n]. Only rows fo
2a0e0 72 20 77 68 69 63 68 0a 20 20 20 20 20 20 20 61  r which.       a
2a0f0 6c 6c 20 73 75 63 68 20 65 78 70 72 65 73 73 69  ll such expressi
2a100 6f 6e 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ons evaluates to
2a110 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64   true are includ
2a120 65 64 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20  ed from the.    
2a130 20 20 20 72 65 73 75 6c 74 20 73 65 74 2e 29 5e     result set.)^
2a140 20 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67   ^When comparing
2a150 20 76 61 6c 75 65 73 20 61 73 20 61 20 72 65 73   values as a res
2a160 75 6c 74 20 6f 66 20 61 20 55 53 49 4e 47 20 63  ult of a USING c
2a170 6c 61 75 73 65 2c 20 74 68 65 0a 20 20 20 20 20  lause, the.     
2a180 20 20 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66    normal rules f
2a190 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 66 66 69  or handling affi
2a1a0 6e 69 74 69 65 73 2c 20 63 6f 6c 6c 61 74 69 6f  nities, collatio
2a1b0 6e 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20  n sequences and 
2a1c0 4e 55 4c 4c 0a 20 20 20 20 20 20 20 76 61 6c 75  NULL.       valu
2a1d0 65 73 20 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e  es in comparison
2a1e0 73 20 61 70 70 6c 79 2e 20 5e 54 68 65 20 63 6f  s apply. ^The co
2a1f0 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 64 61  lumn from the da
2a200 74 61 73 65 74 20 6f 6e 20 74 68 65 0a 20 20 20  taset on the.   
2a210 20 20 20 20 6c 65 66 74 2d 68 61 6e 64 20 73 69      left-hand si
2a220 64 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f  de of the join-o
2a230 70 65 72 61 74 6f 72 20 69 73 20 63 6f 6e 73 69  perator is consi
2a240 64 65 72 65 64 20 74 6f 20 62 65 20 6f 6e 20 74  dered to be on t
2a250 68 65 20 6c 65 66 74 2d 68 61 6e 64 0a 20 20 20  he left-hand.   
2a260 20 20 20 20 73 69 64 65 20 6f 66 20 74 68 65 20      side of the 
2a270 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
2a280 74 6f 72 20 28 3d 29 20 66 6f 72 20 74 68 65 20  tor (=) for the 
2a290 70 75 72 70 6f 73 65 73 20 6f 66 20 63 6f 6c 6c  purposes of coll
2a2a0 61 74 69 6f 6e 20 0a 20 20 20 20 20 20 20 73 65  ation .       se
2a2b0 71 75 65 6e 63 65 20 61 6e 64 20 61 66 66 69 6e  quence and affin
2a2c0 69 74 79 20 70 72 65 63 65 64 65 6e 63 65 2e 0a  ity precedence..
2a2d0 0a 20 20 20 20 20 20 20 3c 70 3e 5e 46 6f 72 20  .       <p>^For 
2a2e0 65 61 63 68 20 70 61 69 72 20 6f 66 20 63 6f 6c  each pair of col
2a2f0 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20  umns identified 
2a300 62 79 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73  by a USING claus
2a310 65 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20  e, the column.  
2a320 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 72 69       from the ri
2a330 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
2a340 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
2a350 20 74 68 65 20 6a 6f 69 6e 65 64 20 64 61 74 61   the joined data
2a360 73 65 74 2e 20 5e 54 68 69 73 20 0a 20 20 20 20  set. ^This .    
2a370 20 20 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 64     is the only d
2a380 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
2a390 6e 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  n a USING clause
2a3a0 20 61 6e 64 20 69 74 73 20 65 71 75 69 76 61 6c   and its equival
2a3b0 65 6e 74 20 4f 4e 0a 20 20 20 20 20 20 20 63 6f  ent ON.       co
2a3c0 6e 73 74 72 61 69 6e 74 2e 0a 0a 20 20 3c 6c 69  nstraint...  <li
2a3d0 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 4e 41  > <p>^(If the NA
2a3e0 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 20 69 73  TURAL keyword is
2a3f0 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65   in the join-ope
2a400 72 61 74 6f 72 20 74 68 65 6e 20 61 6e 0a 20 20  rator then an.  
2a410 20 20 20 20 20 69 6d 70 6c 69 63 69 74 20 55 53       implicit US
2a420 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61 64  ING clause is ad
2a430 64 65 64 20 74 6f 20 74 68 65 20 6a 6f 69 6e 2d  ded to the join-
2a440 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 54 68 65  constraints. The
2a450 20 69 6d 70 6c 69 63 69 74 0a 20 20 20 20 20 20   implicit.      
2a460 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 63 6f   USING clause co
2a470 6e 74 61 69 6e 73 20 65 61 63 68 20 6f 66 20 74  ntains each of t
2a480 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  he column names 
2a490 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 62  that appear in b
2a4a0 6f 74 68 0a 20 20 20 20 20 20 20 74 68 65 20 6c  oth.       the l
2a4b0 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61  eft and right-ha
2a4c0 6e 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74  nd input dataset
2a4d0 73 2e 29 5e 20 5e 49 66 20 74 68 65 20 6c 65 66  s.)^ ^If the lef
2a4e0 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
2a4f0 0a 20 20 20 20 20 20 20 69 6e 70 75 74 20 64 61  .       input da
2a500 74 61 73 65 74 73 20 66 65 61 74 75 72 65 20 6e  tasets feature n
2a510 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20  o common column 
2a520 6e 61 6d 65 73 2c 20 74 68 65 6e 20 74 68 65 20  names, then the 
2a530 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 0a  NATURAL keyword.
2a540 20 20 20 20 20 20 20 68 61 73 20 6e 6f 20 65 66         has no ef
2a550 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73 75  fect on the resu
2a560 6c 74 73 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2e  lts of the join.
2a570 20 5e 41 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20   ^A USING or ON 
2a580 63 6c 61 75 73 65 20 6d 61 79 0a 20 20 20 20 20  clause may.     
2a590 20 20 6e 6f 74 20 62 65 20 61 64 64 65 64 20 74    not be added t
2a5a0 6f 20 61 20 6a 6f 69 6e 20 74 68 61 74 20 73 70  o a join that sp
2a5b0 65 63 69 66 69 65 73 20 74 68 65 20 4e 41 54 55  ecifies the NATU
2a5c0 52 41 4c 20 6b 65 79 77 6f 72 64 2e 0a 0a 20 20  RAL keyword...  
2a5d0 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
2a5e0 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69   join-operator i
2a5f0 73 20 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22 20  s a "LEFT JOIN" 
2a600 6f 72 20 22 4c 45 46 54 20 4f 55 54 45 52 20 4a  or "LEFT OUTER J
2a610 4f 49 4e 22 2c 20 74 68 65 6e 0a 20 20 20 20 20  OIN", then.     
2a620 20 20 61 66 74 65 72 0a 20 20 20 20 20 20 20 74    after.       t
2a630 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66  he ON or USING f
2a640 69 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65 73  iltering clauses
2a650 20 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c 69   have been appli
2a660 65 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f 77  ed, an extra row
2a670 20 69 73 20 0a 20 20 20 20 20 20 20 61 64 64 65   is .       adde
2a680 64 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20  d to the output 
2a690 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
2a6a0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66  the original lef
2a6b0 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20 20  t-hand input .  
2a6c0 20 20 20 20 20 64 61 74 61 73 65 74 20 74 68 61       dataset tha
2a6d0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
2a6e0 20 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 20   no rows at all 
2a6f0 69 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74 65  in the composite
2a700 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20  .       dataset 
2a710 28 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65  (if any).)^ ^The
2a720 20 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e 74   added rows cont
2a730 61 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  ain NULL values 
2a740 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20  in the columns. 
2a750 20 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64        that would
2a760 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69   normally contai
2a770 6e 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64 20  n values copied 
2a780 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
2a790 61 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20 20  and input.      
2a7a0 20 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c   dataset.  .</ul
2a7b0 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72  >..<p>^(When mor
2a7c0 65 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c 65  e than two table
2a7d0 73 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67  s are joined tog
2a7e0 65 74 68 65 72 20 61 73 20 70 61 72 74 20 6f 66  ether as part of
2a7f0 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a   a FROM clause,.
2a800 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69  the join operati
2a810 6f 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73 65  ons are processe
2a820 64 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20  d in order from 
2a830 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49  left to right. I
2a840 6e 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c 20  n other .words, 
2a850 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
2a860 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a  (A join-op-1 B j
2a870 6f 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20 63  oin-op-2 C) is c
2a880 6f 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41 20  omputed as .((A 
2a890 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69  join-op-1 B) joi
2a8a0 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 0a 3c 74  n-op-2 C).)^..<t
2a8b0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  cl>hd_fragment c
2a8c0 72 6f 73 73 6a 6f 69 6e 20 7b 74 72 65 61 74 73  rossjoin {treats
2a8d0 20 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20   the CROSS JOIN 
2a8e0 6f 70 65 72 61 74 6f 72 20 73 70 65 63 69 61 6c  operator special
2a8f0 6c 79 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e  ly}</tcl>.<p><b>
2a900 53 69 64 65 20 6e 6f 74 65 3a 20 53 70 65 63 69  Side note: Speci
2a910 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43  al handling of C
2a920 52 4f 53 53 20 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e  ROSS JOIN.</b>.^
2a930 54 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66 66  There is no diff
2a940 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74  erence between t
2a950 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c  he "INNER JOIN",
2a960 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20   "JOIN" and "," 
2a970 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e 20  join.operators. 
2a980 54 68 65 79 20 61 72 65 20 63 6f 6d 70 6c 65 74  They are complet
2a990 65 6c 79 20 69 6e 74 65 72 63 68 61 6e 67 65 61  ely interchangea
2a9a0 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 2e 0a 5e  ble in SQLite..^
2a9b0 28 54 68 65 20 22 43 52 4f 53 53 20 4a 4f 49 4e  (The "CROSS JOIN
2a9c0 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72 20  " join operator 
2a9d0 70 72 6f 64 75 63 65 73 20 74 68 65 20 73 61 6d  produces the sam
2a9e0 65 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  e result as the 
2a9f0 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22  ."INNER JOIN", "
2aa00 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f 70  JOIN" and "," op
2aa10 65 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20 69  erators)^, but i
2aa20 73 20 0a 5b 43 52 4f 53 53 20 4a 4f 49 4e 7c 68  s .[CROSS JOIN|h
2aa30 61 6e 64 6c 65 64 20 64 69 66 66 65 72 65 6e 74  andled different
2aa40 6c 79 20 62 79 20 74 68 65 20 71 75 65 72 79 20  ly by the query 
2aa50 6f 70 74 69 6d 69 7a 65 72 5d 0a 69 6e 20 74 68  optimizer].in th
2aa60 61 74 20 69 74 20 70 72 65 76 65 6e 74 73 20 74  at it prevents t
2aa70 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
2aa80 65 72 20 66 72 6f 6d 20 72 65 6f 72 64 65 72 69  er from reorderi
2aa90 6e 67 0a 74 68 65 20 74 61 62 6c 65 73 20 69 6e  ng.the tables in
2aaa0 20 74 68 65 20 6a 6f 69 6e 2e 20 20 41 6e 20 61   the join.  An a
2aab0 70 70 6c 69 63 61 74 69 6f 6e 20 70 72 6f 67 72  pplication progr
2aac0 61 6d 6d 65 72 20 63 61 6e 20 75 73 65 20 74 68  ammer can use th
2aad0 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20 0a 6f 70  e CROSS JOIN .op
2aae0 65 72 61 74 6f 72 20 74 6f 20 64 69 72 65 63 74  erator to direct
2aaf0 6c 79 20 69 6e 66 6c 75 65 6e 63 65 20 74 68 65  ly influence the
2ab00 20 61 6c 67 6f 72 69 74 68 6d 20 74 68 61 74 20   algorithm that 
2ab10 69 73 20 63 68 6f 73 65 6e 20 74 6f 20 69 6d 70  is chosen to imp
2ab20 6c 65 6d 65 6e 74 0a 74 68 65 20 53 45 4c 45 43  lement.the SELEC
2ab30 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 76  T statement.  Av
2ab40 6f 69 64 20 75 73 69 6e 67 20 43 52 4f 53 53 20  oid using CROSS 
2ab50 4a 4f 49 4e 20 65 78 63 65 70 74 20 69 6e 20 73  JOIN except in s
2ab60 70 65 63 69 66 69 63 20 73 69 74 75 61 74 69 6f  pecific situatio
2ab70 6e 73 20 0a 77 68 65 72 65 20 6d 61 6e 75 61 6c  ns .where manual
2ab80 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 65 20   control of the 
2ab90 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
2aba0 69 73 20 64 65 73 69 72 65 64 2e 20 20 41 76 6f  is desired.  Avo
2abb0 69 64 20 75 73 69 6e 67 0a 43 52 4f 53 53 20 4a  id using.CROSS J
2abc0 4f 49 4e 20 65 61 72 6c 79 20 69 6e 20 74 68 65  OIN early in the
2abd0 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f 66 20   development of 
2abe0 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 61  an application a
2abf0 73 20 64 6f 69 6e 67 20 73 6f 20 69 73 0a 61 20  s doing so is.a 
2ac00 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
2ac10 63 32 2e 63 6f 6d 2f 63 67 69 2f 77 69 6b 69 3f  c2.com/cgi/wiki?
2ac20 50 72 65 6d 61 74 75 72 65 4f 70 74 69 6d 69 7a  PrematureOptimiz
2ac30 61 74 69 6f 6e 22 3e 70 72 65 6d 61 74 75 72 65  ation">premature
2ac40 0a 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 61  .optimization</a
2ac50 3e 2e 20 20 54 68 65 20 73 70 65 63 69 61 6c 20  >.  The special 
2ac60 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53  handling of CROS
2ac70 53 20 4a 4f 49 4e 20 69 73 20 61 6e 20 53 51 4c  S JOIN is an SQL
2ac80 69 74 65 2d 73 70 65 63 69 66 69 63 0a 66 65 61  ite-specific.fea
2ac90 74 75 72 65 20 61 6e 64 20 69 73 20 6e 6f 74 20  ture and is not 
2aca0 61 20 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61  a part of standa
2acb0 72 64 20 53 51 4c 2e 0a 20 20 20 20 20 20 20 0a  rd SQL..       .
2acc0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2acd0 74 20 77 68 65 72 65 63 6c 61 75 73 65 3c 2f 74  t whereclause</t
2ace0 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
2acf0 6f 72 64 73 20 7b 57 48 45 52 45 20 63 6c 61 75  ords {WHERE clau
2ad00 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e  se}</tcl>.<p><b>
2ad10 32 2e 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  2. WHERE clause 
2ad20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e 0a 0a  filtering.</b>..
2ad30 3c 70 3e 5e 28 49 66 20 61 20 57 48 45 52 45 20  <p>^(If a WHERE 
2ad40 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
2ad50 69 65 64 2c 20 74 68 65 20 57 48 45 52 45 20 65  ied, the WHERE e
2ad60 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
2ad70 6c 75 61 74 65 64 20 66 6f 72 20 0a 65 61 63 68  luated for .each
2ad80 20 72 6f 77 20 69 6e 20 74 68 65 20 69 6e 70 75   row in the inpu
2ad90 74 20 64 61 74 61 20 61 73 20 61 20 5b 62 6f 6f  t data as a [boo
2ada0 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
2adb0 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20  . Only rows for 
2adc0 77 68 69 63 68 20 74 68 65 0a 57 48 45 52 45 20  which the.WHERE 
2add0 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
2ade0 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 74  n evaluates to t
2adf0 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64  rue are included
2ae00 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65   from the datase
2ae10 74 20 62 65 66 6f 72 65 0a 63 6f 6e 74 69 6e 75  t before.continu
2ae20 69 6e 67 2e 29 5e 20 20 52 6f 77 73 20 61 72 65  ing.)^  Rows are
2ae30 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   excluded from t
2ae40 68 65 20 72 65 73 75 6c 74 20 69 66 20 74 68 65  he result if the
2ae50 20 57 48 45 52 45 20 63 6c 61 75 73 65 0a 65 76   WHERE clause.ev
2ae60 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65  aluates to eithe
2ae70 72 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 2e  r false or NULL.
2ae80 0a 0a 3c 70 3e 46 6f 72 20 61 20 4a 4f 49 4e 20  ..<p>For a JOIN 
2ae90 6f 72 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 6f 72  or INNER JOIN or
2aea0 20 43 52 4f 53 53 20 4a 4f 49 4e 2c 20 74 68 65   CROSS JOIN, the
2aeb0 72 65 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65  re is no differe
2aec0 6e 63 65 20 62 65 74 77 65 65 6e 20 0a 61 20 63  nce between .a c
2aed0 6f 6e 73 74 72 61 69 6e 74 20 65 78 70 72 65 73  onstraint expres
2aee0 73 69 6f 6e 20 69 6e 20 74 68 65 20 57 48 45 52  sion in the WHER
2aef0 45 20 63 6c 61 75 73 65 20 61 6e 64 20 6f 6e 65  E clause and one
2af00 20 69 6e 20 74 68 65 20 4f 4e 20 63 6c 61 75 73   in the ON claus
2af10 65 2e 20 20 48 6f 77 65 76 65 72 2c 0a 66 6f 72  e.  However,.for
2af20 20 61 20 4c 45 46 54 20 4a 4f 49 4e 20 6f 72 20   a LEFT JOIN or 
2af30 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 2c  LEFT OUTER JOIN,
2af40 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
2af50 69 73 20 76 65 72 79 20 69 6d 70 6f 72 74 61 6e  is very importan
2af60 74 2e 20 20 0a 49 6e 20 61 20 4c 45 46 54 20 4a  t.  .In a LEFT J
2af70 4f 49 4e 2c 0a 74 68 65 20 65 78 74 72 61 20 4e  OIN,.the extra N
2af80 55 4c 4c 20 72 6f 77 20 66 6f 72 20 74 68 65 20  ULL row for the 
2af90 72 69 67 68 74 2d 68 61 6e 64 20 74 61 62 6c 65  right-hand table
2afa0 20 69 73 20 61 64 64 65 64 20 61 66 74 65 72 20   is added after 
2afb0 4f 4e 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73  ON clause proces
2afc0 73 69 6e 67 0a 62 75 74 20 62 65 66 6f 72 65 20  sing.but before 
2afd0 57 48 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f  WHERE clause pro
2afe0 63 65 73 73 69 6e 67 2e 20 20 41 20 63 6f 6e 73  cessing.  A cons
2aff0 74 72 61 69 6e 74 20 6f 66 20 74 68 65 20 66 6f  traint of the fo
2b000 72 6d 20 22 6c 65 66 74 2e 78 3d 72 69 67 68 74  rm "left.x=right
2b010 2e 79 22 0a 69 6e 20 61 6e 20 4f 4e 20 63 6c 61  .y".in an ON cla
2b020 75 73 65 20 77 69 6c 6c 20 74 68 65 72 65 66 6f  use will therefo
2b030 72 65 20 61 6c 6c 6f 77 20 74 68 72 6f 75 67 68  re allow through
2b040 20 74 68 65 20 61 64 64 65 64 20 61 6c 6c 2d 4e   the added all-N
2b050 55 4c 4c 20 72 6f 77 73 20 6f 66 20 74 68 65 0a  ULL rows of the.
2b060 72 69 67 68 74 20 74 61 62 6c 65 2e 20 20 42 75  right table.  Bu
2b070 74 20 69 66 20 74 68 61 74 20 73 61 6d 65 20 63  t if that same c
2b080 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 69 6e 20  onstraint is in 
2b090 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
2b0a0 20 61 20 4e 55 4c 4c 20 69 6e 0a 22 72 69 67 68   a NULL in."righ
2b0b0 74 2e 79 22 20 77 69 6c 6c 20 70 72 65 76 65 6e  t.y" will preven
2b0c0 74 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  t the expression
2b0d0 20 22 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e 79   "left.x=right.y
2b0e0 22 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 72 75  " from being tru
2b0f0 65 2c 20 61 6e 64 0a 74 68 75 73 20 65 78 63 6c  e, and.thus excl
2b100 75 64 65 20 74 68 61 74 20 72 6f 77 20 66 72 6f  ude that row fro
2b110 6d 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 0a 3c  m the output...<
2b120 70 3e 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74 69  p><b>3. Generati
2b130 6f 6e 20 6f 66 20 74 68 65 20 73 65 74 20 6f 66  on of the set of
2b140 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62   result rows.</b
2b150 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
2b160 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 74 63  nt resultset</tc
2b170 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
2b180 72 64 73 20 7b 72 65 73 75 6c 74 2d 73 65 74 20  rds {result-set 
2b190 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52  expressions} {GR
2b1a0 4f 55 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c  OUP BY}</tcl>..<
2b1b0 70 3e 4f 6e 63 65 20 74 68 65 20 69 6e 70 75 74  p>Once the input
2b1c0 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 46   data from the F
2b1d0 52 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62  ROM clause has b
2b1e0 65 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20  een filtered by 
2b1f0 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65  the.WHERE clause
2b200 20 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20   expression (if 
2b210 61 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66  any), the set of
2b220 20 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72   result rows for
2b230 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c   the simple .SEL
2b240 45 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74  ECT are calculat
2b250 65 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20  ed. Exactly how 
2b260 74 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70  this is done dep
2b270 65 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20  ends on whether 
2b280 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45  the simple .SELE
2b290 43 54 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  CT is an aggrega
2b2a0 74 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67  te or non-aggreg
2b2b0 61 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77  ate query, and w
2b2c0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
2b2d0 47 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20  GROUP.BY clause 
2b2e0 77 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a  was specified...
2b2f0 3c 70 3e 20 54 68 65 20 6c 69 73 74 20 6f 66 20  <p> The list of 
2b300 65 78 70 72 65 73 73 69 6f 6e 73 20 62 65 74 77  expressions betw
2b310 65 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20 61  een the SELECT a
2b320 6e 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73  nd FROM keywords
2b330 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65   is known as.the
2b340 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
2b350 6f 6e 20 6c 69 73 74 2e 20 20 5e 49 66 20 61 20  on list.  ^If a 
2b360 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2b370 6e 20 69 73 20 74 68 65 20 73 70 65 63 69 61 6c  n is the special
2b380 20 65 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20   expression."*" 
2b390 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73  then all columns
2b3a0 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61   in the input da
2b3b0 74 61 20 61 72 65 20 73 75 62 73 74 69 74 75 74  ta are substitut
2b3c0 65 64 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20  ed for that one 
2b3d0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66  expression..^(If
2b3e0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
2b3f0 69 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20  is the alias of 
2b400 61 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  a table or subqu
2b410 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
2b420 63 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20  clause.followed 
2b430 62 79 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c  by ".*" then all
2b440 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68   columns from th
2b450 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72  e named table or
2b460 20 73 75 62 71 75 65 72 79 20 61 72 65 0a 73 75   subquery are.su
2b470 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68  bstituted for th
2b480 65 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73  e single express
2b490 69 6f 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20 61  ion.)^ ^(It is a
2b4a0 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61  n error to use a
2b4b0 20 22 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a   "*" or."alias.*
2b4c0 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  " expression in 
2b4d0 61 6e 79 20 63 6f 6e 74 65 78 74 20 6f 74 68 65  any context othe
2b4e0 72 20 74 68 61 6e 20 61 20 72 65 73 75 6c 74 20  r than a result 
2b4f0 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e  expression list.
2b500 29 5e 0a 5e 28 49 74 20 69 73 20 61 6c 73 6f 20  )^.^(It is also 
2b510 61 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20  an error to use 
2b520 61 20 22 2a 22 20 6f 72 20 22 61 6c 69 61 73 2e  a "*" or "alias.
2b530 2a 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  *" expression in
2b540 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
2b550 0a 71 75 65 72 79 20 74 68 61 74 20 64 6f 65 73  .query that does
2b560 20 6e 6f 74 20 68 61 76 65 20 61 20 46 52 4f 4d   not have a FROM
2b570 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 70 3e 20   clause.)^..<p> 
2b580 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  ^(The number of 
2b590 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
2b5a0 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ows returned by 
2b5b0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
2b5c0 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 65 71 75  statement.is equ
2b5d0 61 6c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  al to the number
2b5e0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
2b5f0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
2b600 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 61 66  pression list af
2b610 74 65 72 0a 73 75 62 73 74 69 74 75 74 69 6f 6e  ter.substitution
2b620 20 6f 66 20 2a 20 61 6e 64 20 61 6c 69 61 73 2e   of * and alias.
2b630 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 29 5e  * expressions.)^
2b640 20 45 61 63 68 20 72 65 73 75 6c 74 20 72 6f 77   Each result row
2b650 20 69 73 20 63 61 6c 63 75 6c 61 74 65 64 20 62   is calculated b
2b660 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y.evaluating the
2b670 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
2b680 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65  the result expre
2b690 73 73 69 6f 6e 20 6c 69 73 74 20 77 69 74 68 20  ssion list with 
2b6a0 72 65 73 70 65 63 74 20 74 6f 20 61 0a 73 69 6e  respect to a.sin
2b6b0 67 6c 65 20 72 6f 77 20 6f 66 20 69 6e 70 75 74  gle row of input
2b6c0 20 64 61 74 61 20 6f 72 2c 20 66 6f 72 20 61 67   data or, for ag
2b6d0 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2c  gregate queries,
2b6e0 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f   with respect to
2b6f0 20 61 20 67 72 6f 75 70 0a 6f 66 20 72 6f 77 73   a group.of rows
2b700 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  ...<ul>.  <li><p
2b710 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20  >^If the SELECT 
2b720 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e  statement is <b>
2b730 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
2b740 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68 65 6e 20  query</b>, then 
2b750 0a 20 20 20 20 65 61 63 68 20 65 78 70 72 65 73  .    each expres
2b760 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
2b770 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
2b780 73 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  st is evaluated 
2b790 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 0a  for each row in.
2b7a0 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74 20      the dataset 
2b7b0 66 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 20  filtered by the 
2b7c0 57 48 45 52 45 20 63 6c 61 75 73 65 2e 0a 0a 20  WHERE clause... 
2b7d0 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
2b7e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2b7f0 20 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67   is <b>an aggreg
2b800 61 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75  ate query withou
2b810 74 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59  t a GROUP.    BY
2b820 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65  </b> clause, the
2b830 6e 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  n each aggregate
2b840 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2b850 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73  he result-set is
2b860 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20   .    evaluated 
2b870 6f 6e 63 65 20 61 63 72 6f 73 73 20 74 68 65 20  once across the 
2b880 65 6e 74 69 72 65 20 64 61 74 61 73 65 74 2e 20  entire dataset. 
2b890 5e 45 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67  ^Each non-aggreg
2b8a0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 20  ate expression. 
2b8b0 20 20 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74     in the result
2b8c0 2d 73 65 74 20 69 73 20 65 76 61 6c 75 61 74 65  -set is evaluate
2b8d0 64 20 6f 6e 63 65 20 66 6f 72 20 61 6e 20 61 72  d once for an ar
2b8e0 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
2b8f0 65 64 20 72 6f 77 20 6f 66 0a 20 20 20 20 74 68  ed row of.    th
2b900 65 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 20  e dataset. ^The 
2b910 73 61 6d 65 20 61 72 62 69 74 72 61 72 69 6c 79  same arbitrarily
2b920 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 69 73   selected row is
2b930 20 75 73 65 64 20 66 6f 72 20 65 61 63 68 0a 20   used for each. 
2b940 20 20 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65     non-aggregate
2b950 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 4f 72   expression. ^Or
2b960 2c 20 69 66 20 74 68 65 20 64 61 74 61 73 65 74  , if the dataset
2b970 20 63 6f 6e 74 61 69 6e 73 20 7a 65 72 6f 20 72   contains zero r
2b980 6f 77 73 2c 20 74 68 65 6e 20 0a 20 20 20 20 65  ows, then .    e
2b990 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  ach non-aggregat
2b9a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
2b9b0 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73  evaluated agains
2b9c0 74 20 61 20 72 6f 77 20 63 6f 6e 73 69 73 74 69  t a row consisti
2b9d0 6e 67 0a 20 20 20 20 65 6e 74 69 72 65 6c 79 20  ng.    entirely 
2b9e0 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a  of NULL values..
2b9f0 0a 20 20 20 3c 70 3e 5e 54 68 65 20 73 69 6e 67  .   <p>^The sing
2ba00 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
2ba10 2d 73 65 74 20 64 61 74 61 20 63 72 65 61 74 65  -set data create
2ba20 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  d by evaluating 
2ba30 74 68 65 20 61 67 67 72 65 67 61 74 65 0a 20 20  the aggregate.  
2ba40 20 20 61 6e 64 20 6e 6f 6e 2d 61 67 67 72 65 67    and non-aggreg
2ba50 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ate expressions 
2ba60 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
2ba70 74 20 66 6f 72 6d 73 20 74 68 65 20 72 65 73 75  t forms the resu
2ba80 6c 74 20 6f 66 20 61 6e 0a 20 20 20 20 61 67 67  lt of an.    agg
2ba90 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
2baa0 68 6f 75 74 20 61 20 47 52 4f 55 50 20 42 59 20  hout a GROUP BY 
2bab0 63 6c 61 75 73 65 2e 20 5e 41 6e 20 61 67 67 72  clause. ^An aggr
2bac0 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68  egate query with
2bad0 6f 75 74 20 61 0a 20 20 20 20 47 52 4f 55 50 20  out a.    GROUP 
2bae0 42 59 20 63 6c 61 75 73 65 20 61 6c 77 61 79 73  BY clause always
2baf0 20 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c 79   returns exactly
2bb00 20 6f 6e 65 20 72 6f 77 20 6f 66 20 64 61 74 61   one row of data
2bb10 2c 20 65 76 65 6e 20 69 66 20 74 68 65 72 65 20  , even if there 
2bb20 61 72 65 0a 20 20 20 20 7a 65 72 6f 20 72 6f 77  are.    zero row
2bb30 73 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 2e  s of input data.
2bb40 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28 49 66 20  ..  <li><p>^(If 
2bb50 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2bb60 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67  ment is <b>an ag
2bb70 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
2bb80 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42  th a GROUP.    B
2bb90 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68  Y</b> clause, th
2bba0 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 65  en each of the e
2bbb0 78 70 72 65 73 73 69 6f 6e 73 20 73 70 65 63 69  xpressions speci
2bbc0 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
2bbd0 74 68 65 0a 20 20 20 20 47 52 4f 55 50 20 42 59  the.    GROUP BY
2bbe0 20 63 6c 61 75 73 65 20 69 73 20 65 76 61 6c 75   clause is evalu
2bbf0 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
2bc00 77 20 6f 66 20 74 68 65 20 64 61 74 61 73 65 74  w of the dataset
2bc10 2e 20 45 61 63 68 20 72 6f 77 0a 20 20 20 20 69  . Each row.    i
2bc20 73 20 74 68 65 6e 20 61 73 73 69 67 6e 65 64 20  s then assigned 
2bc30 74 6f 20 61 20 22 67 72 6f 75 70 22 20 62 61 73  to a "group" bas
2bc40 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
2bc50 73 3b 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  s; rows for whic
2bc60 68 0a 20 20 20 20 74 68 65 20 72 65 73 75 6c 74  h.    the result
2bc70 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  s of evaluating 
2bc80 74 68 65 20 47 52 4f 55 50 20 42 59 20 65 78 70  the GROUP BY exp
2bc90 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74 68 65  ressions are the
2bca0 20 73 61 6d 65 20 67 65 74 0a 20 20 20 20 61 73   same get.    as
2bcb0 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 73 61  signed to the sa
2bcc0 6d 65 20 67 72 6f 75 70 2e 29 5e 20 5e 46 6f 72  me group.)^ ^For
2bcd0 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
2bce0 20 67 72 6f 75 70 69 6e 67 20 72 6f 77 73 2c 20   grouping rows, 
2bcf0 4e 55 4c 4c 20 0a 20 20 20 20 76 61 6c 75 65 73  NULL .    values
2bd00 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
2bd10 65 71 75 61 6c 2e 20 5e 54 68 65 20 75 73 75 61  equal. ^The usua
2bd20 6c 20 72 75 6c 65 73 20 66 6f 72 20 5b 63 6f 6c  l rules for [col
2bd30 6c 61 74 69 6f 6e 7c 73 65 6c 65 63 74 69 6e 67  lation|selecting
2bd40 20 61 0a 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e   a.    collation
2bd50 20 73 65 71 75 65 6e 63 65 5d 20 77 69 74 68 20   sequence] with 
2bd60 77 68 69 63 68 20 74 6f 20 63 6f 6d 70 61 72 65  which to compare
2bd70 20 74 65 78 74 20 76 61 6c 75 65 73 20 61 70 70   text values app
2bd80 6c 79 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69  ly when evaluati
2bd90 6e 67 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  ng.    expressio
2bda0 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59  ns in a GROUP BY
2bdb0 20 63 6c 61 75 73 65 2e 20 20 5e 54 68 65 20 65   clause.  ^The e
2bdc0 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
2bdd0 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
2bde0 65 0a 20 20 20 20 64 6f 20 3c 65 6d 3e 6e 6f 74  e.    do <em>not
2bdf0 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65  </em> have to be
2be00 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
2be10 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
2be20 72 65 73 75 6c 74 2e 20 5e 54 68 65 0a 20 20 20  result. ^The.   
2be30 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
2be40 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
2be50 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 67 67  e may not be agg
2be60 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2be70 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e 28 49 66  ns...    <p>^(If
2be80 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65   a HAVING clause
2be90 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 69   is specified, i
2bea0 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  t is evaluated o
2beb0 6e 63 65 20 66 6f 72 20 65 61 63 68 20 67 72 6f  nce for each gro
2bec0 75 70 20 0a 20 20 20 20 6f 66 20 72 6f 77 73 20  up .    of rows 
2bed0 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
2bee0 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68  pression]. If th
2bef0 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
2bf00 75 61 74 69 6e 67 20 74 68 65 0a 20 20 20 20 48  uating the.    H
2bf10 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
2bf20 66 61 6c 73 65 2c 20 74 68 65 20 67 72 6f 75 70  false, the group
2bf30 20 69 73 20 64 69 73 63 61 72 64 65 64 2e 29 5e   is discarded.)^
2bf40 20 5e 49 66 20 74 68 65 20 48 41 56 49 4e 47 20   ^If the HAVING 
2bf50 63 6c 61 75 73 65 20 69 73 0a 20 20 20 20 61 6e  clause is.    an
2bf60 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
2bf70 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
2bf80 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20 61 6c  luated across al
2bf90 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72  l rows in the gr
2bfa0 6f 75 70 2e 20 5e 49 66 0a 20 20 20 20 61 20 48  oup. ^If.    a H
2bfb0 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
2bfc0 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
2bfd0 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69  expression, it i
2bfe0 73 20 65 76 61 6c 75 61 74 65 64 20 77 69 74 68  s evaluated with
2bff0 20 72 65 73 70 65 63 74 0a 20 20 20 20 74 6f 20   respect.    to 
2c000 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73  an arbitrarily s
2c010 65 6c 65 63 74 65 64 20 72 6f 77 20 66 72 6f 6d  elected row from
2c020 20 74 68 65 20 67 72 6f 75 70 2e 20 20 5e 54 68   the group.  ^Th
2c030 65 20 48 41 56 49 4e 47 20 65 78 70 72 65 73 73  e HAVING express
2c040 69 6f 6e 20 6d 61 79 0a 20 20 20 20 72 65 66 65  ion may.    refe
2c050 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65  r to values, eve
2c060 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
2c070 74 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65 20  tions, that are 
2c080 6e 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75 6c  not in the resul
2c090 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c 70 3e 5e  t.</p>..    <p>^
2c0a0 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
2c0b0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
2c0c0 74 20 69 73 20 74 68 65 6e 20 65 76 61 6c 75 61  t is then evalua
2c0d0 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63  ted once for eac
2c0e0 68 0a 20 20 20 20 67 72 6f 75 70 20 6f 66 20 72  h.    group of r
2c0f0 6f 77 73 2e 20 5e 49 66 20 74 68 65 20 65 78 70  ows. ^If the exp
2c100 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 67  ression is an ag
2c110 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2c120 6f 6e 2c 20 69 74 20 69 73 20 0a 20 20 20 20 65  on, it is .    e
2c130 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20  valuated across 
2c140 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20  all rows in the 
2c150 67 72 6f 75 70 2e 20 5e 4f 74 68 65 72 77 69 73  group. ^Otherwis
2c160 65 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  e, it is evaluat
2c170 65 64 20 61 67 61 69 6e 73 74 0a 20 20 20 20 61  ed against.    a
2c180 20 73 69 6e 67 6c 65 20 61 72 62 69 74 72 61 72   single arbitrar
2c190 69 6c 79 20 63 68 6f 73 65 6e 20 72 6f 77 20 66  ily chosen row f
2c1a0 72 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20 67  rom within the g
2c1b0 72 6f 75 70 2e 20 5e 49 66 20 74 68 65 72 65 20  roup. ^If there 
2c1c0 69 73 20 6d 6f 72 65 0a 20 20 20 20 74 68 61 6e  is more.    than
2c1d0 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72 65 67 61   one non-aggrega
2c1e0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  te expression in
2c1f0 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2c   the result-set,
2c200 20 74 68 65 6e 20 61 6c 6c 20 73 75 63 68 0a 20   then all such. 
2c210 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61     expressions a
2c220 72 65 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  re evaluated for
2c230 20 74 68 65 20 73 61 6d 65 20 72 6f 77 2e 0a 0a   the same row...
2c240 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 67 72 6f      <p>^Each gro
2c250 75 70 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  up of input data
2c260 73 65 74 20 72 6f 77 73 20 63 6f 6e 74 72 69 62  set rows contrib
2c270 75 74 65 73 20 61 20 73 69 6e 67 6c 65 20 72 6f  utes a single ro
2c280 77 20 74 6f 20 74 68 65 20 0a 20 20 20 20 73 65  w to the .    se
2c290 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
2c2a0 2e 20 5e 53 75 62 6a 65 63 74 20 74 6f 20 66 69  . ^Subject to fi
2c2b0 6c 74 65 72 69 6e 67 20 61 73 73 6f 63 69 61 74  ltering associat
2c2c0 65 64 20 77 69 74 68 20 74 68 65 20 44 49 53 54  ed with the DIST
2c2d0 49 4e 43 54 0a 20 20 20 20 6b 65 79 77 6f 72 64  INCT.    keyword
2c2e0 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  , the number of 
2c2f0 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79  rows returned by
2c300 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75   an aggregate qu
2c310 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50  ery with a GROUP
2c320 0a 20 20 20 20 42 59 20 63 6c 61 75 73 65 20 69  .    BY clause i
2c330 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
2c340 65 20 6e 75 6d 62 65 72 20 6f 66 20 67 72 6f 75  e number of grou
2c350 70 73 20 6f 66 20 72 6f 77 73 20 70 72 6f 64 75  ps of rows produ
2c360 63 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 0a  ced by applying.
2c370 20 20 20 20 74 68 65 20 47 52 4f 55 50 20 42 59      the GROUP BY
2c380 20 61 6e 64 20 48 41 56 49 4e 47 20 63 6c 61 75   and HAVING clau
2c390 73 65 73 20 74 6f 20 74 68 65 20 66 69 6c 74 65  ses to the filte
2c3a0 72 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65  red input datase
2c3b0 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e  t..</ul>..<p><b>
2c3c0 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66 20 64 75  4. Removal of du
2c3d0 70 6c 69 63 61 74 65 20 72 6f 77 73 20 28 44 49  plicate rows (DI
2c3e0 53 54 49 4e 43 54 20 70 72 6f 63 65 73 73 69 6e  STINCT processin
2c3f0 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f  g).</b>.<tcl>hd_
2c400 66 72 61 67 6d 65 6e 74 20 64 69 73 74 69 6e 63  fragment distinc
2c410 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  t</tcl>.<tcl>hd_
2c420 6b 65 79 77 6f 72 64 73 20 7b 44 49 53 54 49 4e  keywords {DISTIN
2c430 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f  CT}</tcl>..<p>^O
2c440 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c 20 6f 72  ne of the ALL or
2c450 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
2c460 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 74 68  ds may follow th
2c470 65 20 53 45 4c 45 43 54 20 6b 65 79 77 6f 72 64  e SELECT keyword
2c480 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45   in a .simple SE
2c490 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
2c4a0 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53  ^If the simple S
2c4b0 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43  ELECT is a SELEC
2c4c0 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a  T ALL, then the.
2c4d0 65 6e 74 69 72 65 20 73 65 74 20 6f 66 20 72 65  entire set of re
2c4e0 73 75 6c 74 20 72 6f 77 73 20 61 72 65 20 72 65  sult rows are re
2c4f0 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
2c500 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69 74 68 65  LECT. ^If neithe
2c510 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54 49 4e 43  r ALL or.DISTINC
2c520 54 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20 74  T are present, t
2c530 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
2c540 20 69 73 20 61 73 20 69 66 20 41 4c 4c 20 77 65   is as if ALL we
2c550 72 65 20 73 70 65 63 69 66 69 65 64 2e 20 0a 5e  re specified. .^
2c560 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45  If the simple SE
2c570 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43 54  LECT is a SELECT
2c580 20 44 49 53 54 49 4e 43 54 2c 20 74 68 65 6e 20   DISTINCT, then 
2c590 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61  duplicate rows a
2c5a0 72 65 20 72 65 6d 6f 76 65 64 0a 66 72 6f 6d 20  re removed.from 
2c5b0 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  the set of resul
2c5c0 74 20 72 6f 77 73 20 62 65 66 6f 72 65 20 69 74  t rows before it
2c5d0 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 46   is returned. ^F
2c5e0 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
2c5f0 6f 66 0a 64 65 74 65 63 74 69 6e 67 20 64 75 70  of.detecting dup
2c600 6c 69 63 61 74 65 20 72 6f 77 73 2c 20 74 77 6f  licate rows, two
2c610 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
2c620 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
2c630 65 20 65 71 75 61 6c 2e 20 5e 54 68 65 0a 6e 6f  e equal. ^The.no
2c640 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 73  rmal rules for s
2c650 65 6c 65 63 74 69 6e 67 20 61 20 63 6f 6c 6c 61  electing a colla
2c660 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 6f  tion sequence to
2c670 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61   compare text va
2c680 6c 75 65 73 20 77 69 74 68 0a 61 70 70 6c 79 2e  lues with.apply.
2c690 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d  ..<tcl>.hd_fragm
2c6a0 65 6e 74 20 63 6f 6d 70 6f 75 6e 64 20 7b 63 6f  ent compound {co
2c6b0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 7d 20 7b  mpound select} {
2c6c0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 7d 20  compound query} 
2c6d0 7b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  {compound SELECT
2c6e0 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  } {compound SELE
2c6f0 43 54 73 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  CTs}.</tcl>.<h3>
2c700 43 6f 6d 70 6f 75 6e 64 20 53 65 6c 65 63 74 20  Compound Select 
2c710 53 74 61 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a  Statements</h3>.
2c720 0a 3c 70 3e 54 77 6f 20 6f 72 20 6d 6f 72 65 20  .<p>Two or more 
2c730 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
2c740 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20 62  statements may b
2c750 65 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f 67 65  e connected toge
2c760 74 68 65 72 20 74 6f 20 66 6f 72 6d 0a 61 20 63  ther to form.a c
2c770 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 75  ompound SELECT u
2c780 73 69 6e 67 20 74 68 65 20 55 4e 49 4f 4e 2c 20  sing the UNION, 
2c790 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52  UNION ALL, INTER
2c7a0 53 45 43 54 20 6f 72 20 45 58 43 45 50 54 20 6f  SECT or EXCEPT o
2c7b0 70 65 72 61 74 6f 72 2c 0a 61 73 20 73 68 6f 77  perator,.as show
2c7c0 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n by the followi
2c7d0 6e 67 20 64 69 61 67 72 61 6d 3a 0a 0a 3c 74 63  ng diagram:..<tc
2c7e0 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  l>.RecursiveBubb
2c7f0 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75  leDiagram compou
2c800 6e 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 0a 3c  nd-select-stmt.<
2c810 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  /tcl>..<p>^In a 
2c820 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
2c830 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74   all the constit
2c840 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73  uent SELECTs mus
2c850 74 20 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d  t return the sam
2c860 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  e .number of res
2c870 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 5e 41 73  ult columns. ^As
2c880 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20   the components 
2c890 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  of a compound SE
2c8a0 4c 45 43 54 20 6d 75 73 74 0a 62 65 20 73 69 6d  LECT must.be sim
2c8b0 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
2c8c0 6d 65 6e 74 73 2c 20 74 68 65 79 20 6d 61 79 20  ments, they may 
2c8d0 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 5b 4f 52 44  not contain [ORD
2c8e0 45 52 20 42 59 5d 20 6f 72 20 5b 4c 49 4d 49 54  ER BY] or [LIMIT
2c8f0 5d 20 63 6c 61 75 73 65 73 2e 0a 5e 5b 4f 52 44  ] clauses..^[ORD
2c900 45 52 20 42 59 5d 20 61 6e 64 20 5b 4c 49 4d 49  ER BY] and [LIMI
2c910 54 5d 20 63 6c 61 75 73 65 73 20 6d 61 79 20 6f  T] clauses may o
2c920 6e 6c 79 20 6f 63 63 75 72 20 61 74 20 74 68 65  nly occur at the
2c930 20 65 6e 64 20 6f 66 20 74 68 65 20 65 6e 74 69   end of the enti
2c940 72 65 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45  re compound.SELE
2c950 43 54 2c 20 61 6e 64 20 74 68 65 6e 20 6f 6e 6c  CT, and then onl
2c960 79 20 69 66 20 74 68 65 20 66 69 6e 61 6c 20 65  y if the final e
2c970 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 63 6f  lement of the co
2c980 6d 70 6f 75 6e 64 20 69 73 20 6e 6f 74 20 61 20  mpound is not a 
2c990 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 2e  [VALUES] clause.
2c9a0 0a 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64  ..<p>^A compound
2c9b0 20 53 45 4c 45 43 54 20 63 72 65 61 74 65 64 20   SELECT created 
2c9c0 75 73 69 6e 67 20 55 4e 49 4f 4e 20 41 4c 4c 20  using UNION ALL 
2c9d0 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73  operator returns
2c9e0 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72   all the rows.fr
2c9f0 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f  om the SELECT to
2ca00 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65   the left of the
2ca10 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61   UNION ALL opera
2ca20 74 6f 72 2c 20 61 6e 64 20 61 6c 6c 20 74 68 65  tor, and all the
2ca30 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53   rows.from the S
2ca40 45 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67  ELECT to the rig
2ca50 68 74 20 6f 66 20 69 74 2e 20 5e 54 68 65 20 55  ht of it. ^The U
2ca60 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 77 6f  NION operator wo
2ca70 72 6b 73 20 74 68 65 20 73 61 6d 65 20 77 61 79  rks the same way
2ca80 20 61 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c 20 65   as.UNION ALL, e
2ca90 78 63 65 70 74 20 74 68 61 74 20 64 75 70 6c 69  xcept that dupli
2caa0 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
2cab0 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 66  moved from the f
2cac0 69 6e 61 6c 20 72 65 73 75 6c 74 20 73 65 74 2e  inal result set.
2cad0 0a 5e 54 68 65 20 49 4e 54 45 52 53 45 43 54 20  .^The INTERSECT 
2cae0 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73  operator returns
2caf0 20 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f   the intersectio
2cb00 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  n of the results
2cb10 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
2cb20 0a 72 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20  .right SELECTs. 
2cb30 20 5e 54 68 65 20 45 58 43 45 50 54 20 6f 70 65   ^The EXCEPT ope
2cb40 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68  rator returns th
2cb50 65 20 73 75 62 73 65 74 20 6f 66 20 72 6f 77 73  e subset of rows
2cb60 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
2cb70 0a 6c 65 66 74 20 53 45 4c 45 43 54 20 74 68 61  .left SELECT tha
2cb80 74 20 61 72 65 20 6e 6f 74 20 61 6c 73 6f 20 72  t are not also r
2cb90 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 72  eturned by the r
2cba0 69 67 68 74 2d 68 61 6e 64 20 53 45 4c 45 43 54  ight-hand SELECT
2cbb0 2e 20 5e 44 75 70 6c 69 63 61 74 65 0a 72 6f 77  . ^Duplicate.row
2cbc0 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72  s are removed fr
2cbd0 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  om the results o
2cbe0 66 20 49 4e 54 45 52 53 45 43 54 20 61 6e 64 20  f INTERSECT and 
2cbf0 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 73  EXCEPT operators
2cc00 20 62 65 66 6f 72 65 20 74 68 65 0a 72 65 73 75   before the.resu
2cc10 6c 74 20 73 65 74 20 69 73 20 72 65 74 75 72 6e  lt set is return
2cc20 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65  ed...<p>^For the
2cc30 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74   purposes of det
2cc40 65 72 6d 69 6e 69 6e 67 20 64 75 70 6c 69 63 61  ermining duplica
2cc50 74 65 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20  te rows for the 
2cc60 72 65 73 75 6c 74 73 20 6f 66 20 63 6f 6d 70 6f  results of compo
2cc70 75 6e 64 0a 53 45 4c 45 43 54 20 6f 70 65 72 61  und.SELECT opera
2cc80 74 6f 72 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65  tors, NULL value
2cc90 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
2cca0 20 65 71 75 61 6c 20 74 6f 20 6f 74 68 65 72 20   equal to other 
2ccb0 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 0a  NULL values and.
2ccc0 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c  distinct from al
2ccd0 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
2cce0 73 2e 20 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6f  s. ^The collatio
2ccf0 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20  n sequence used 
2cd00 74 6f 20 63 6f 6d 70 61 72 65 20 0a 74 77 6f 20  to compare .two 
2cd10 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64  text values is d
2cd20 65 74 65 72 6d 69 6e 65 64 20 61 73 20 69 66 20  etermined as if 
2cd30 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  the columns of t
2cd40 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
2cd50 74 2d 68 61 6e 64 0a 53 45 4c 45 43 54 20 73 74  t-hand.SELECT st
2cd60 61 74 65 6d 65 6e 74 73 20 77 65 72 65 20 74 68  atements were th
2cd70 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
2cd80 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f  -hand operands o
2cd90 66 20 74 68 65 20 65 71 75 61 6c 73 20 28 3d 29  f the equals (=)
2cda0 0a 6f 70 65 72 61 74 6f 72 2c 20 65 78 63 65 70  .operator, excep
2cdb0 74 20 74 68 61 74 20 67 72 65 61 74 65 72 20 70  t that greater p
2cdc0 72 65 63 65 64 65 6e 63 65 20 69 73 20 6e 6f 74  recedence is not
2cdd0 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 63   assigned to a c
2cde0 6f 6c 6c 61 74 69 6f 6e 20 0a 73 65 71 75 65 6e  ollation .sequen
2cdf0 63 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74  ce specified wit
2ce00 68 20 74 68 65 20 70 6f 73 74 66 69 78 20 43 4f  h the postfix CO
2ce10 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 2e 20  LLATE operator. 
2ce20 5e 4e 6f 20 61 66 66 69 6e 69 74 79 0a 74 72 61  ^No affinity.tra
2ce30 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72 65  nsformations are
2ce40 20 61 70 70 6c 69 65 64 20 74 6f 20 61 6e 79 20   applied to any 
2ce50 76 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6d 70  values when comp
2ce60 61 72 69 6e 67 20 72 6f 77 73 20 61 73 20 70 61  aring rows as pa
2ce70 72 74 20 6f 66 20 61 0a 63 6f 6d 70 6f 75 6e 64  rt of a.compound
2ce80 20 53 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e 5e 28   SELECT. ..<p>^(
2ce90 57 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f  When three or mo
2cea0 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  re simple SELECT
2ceb0 73 20 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20  s are connected 
2cec0 69 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 20  into a compound 
2ced0 53 45 4c 45 43 54 2c 0a 74 68 65 79 20 67 72 6f  SELECT,.they gro
2cee0 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  up from left to 
2cef0 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20  right. In other 
2cf00 77 6f 72 64 73 2c 20 69 66 20 22 41 22 2c 20 22  words, if "A", "
2cf10 42 22 20 61 6e 64 20 22 43 22 20 61 72 65 20 61  B" and "C" are a
2cf20 6c 6c 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  ll.simple SELECT
2cf30 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 28 41 20   statements, (A 
2cf40 6f 70 20 42 20 6f 70 20 43 29 20 69 73 20 70 72  op B op C) is pr
2cf50 6f 63 65 73 73 65 64 20 61 73 20 28 28 41 20 6f  ocessed as ((A o
2cf60 70 20 42 29 20 6f 70 20 43 29 2e 29 5e 0a 0a 3c  p B) op C).)^..<
2cf70 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
2cf80 67 6d 65 6e 74 20 6f 72 64 65 72 62 79 20 7b 6f  gment orderby {o
2cf90 72 64 65 72 20 62 79 7d 20 7b 4f 52 44 45 52 20  rder by} {ORDER 
2cfa0 42 59 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  BY}</tcl>.<h3>Th
2cfb0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
2cfc0 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20  e</h3>..<p>If a 
2cfd0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2cfe0 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 6d 6f   that returns mo
2cff0 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
2d000 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e  does not have an
2d010 0a 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65  .ORDER BY clause
2d020 2c 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77  , the order in w
2d030 68 69 63 68 20 74 68 65 20 72 6f 77 73 20 61 72  hich the rows ar
2d040 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e  e returned is un
2d050 64 65 66 69 6e 65 64 2e 0a 4f 72 2c 20 69 66 20  defined..Or, if 
2d060 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
2d070 6e 74 20 64 6f 65 73 20 68 61 76 65 20 61 6e 20  nt does have an 
2d080 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
2d090 20 74 68 65 6e 20 74 68 65 20 6c 69 73 74 20 6f   then the list o
2d0a0 66 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61 74  f.expressions at
2d0b0 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 4f 52  tached to the OR
2d0c0 44 45 52 20 42 59 20 64 65 74 65 72 6d 69 6e 65  DER BY determine
2d0d0 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   the order in wh
2d0e0 69 63 68 20 72 6f 77 73 0a 61 72 65 20 72 65 74  ich rows.are ret
2d0f0 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
2d100 72 2e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 20 5b 63  r...<p>.^In a [c
2d110 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20  ompound SELECT] 
2d120 73 74 61 74 65 6d 65 6e 74 2c 20 6f 6e 6c 79 20  statement, only 
2d130 74 68 65 20 6c 61 73 74 20 6f 72 20 72 69 67 68  the last or righ
2d140 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53  t-most [simple S
2d150 45 4c 45 43 54 5d 0a 6d 61 79 20 68 61 76 65 20  ELECT].may have 
2d160 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
2d170 73 65 2e 20 5e 54 68 61 74 20 4f 52 44 45 52 20  se. ^That ORDER 
2d180 42 59 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 61  BY clause will a
2d190 70 70 6c 79 20 61 63 72 6f 73 73 20 61 6c 6c 20  pply across all 
2d1a0 65 6c 65 6d 65 6e 74 73 20 6f 66 0a 74 68 65 20  elements of.the 
2d1b0 63 6f 6d 70 6f 75 6e 64 2e 20 5e 49 66 20 74 68  compound. ^If th
2d1c0 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 65 6c 65  e right-most ele
2d1d0 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f  ment of a [compo
2d1e0 75 6e 64 20 53 45 4c 45 43 54 5d 20 69 73 20 61  und SELECT] is a
2d1f0 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65   [VALUES] clause
2d200 2c 0a 74 68 65 6e 20 6e 6f 20 4f 52 44 45 52 20  ,.then no ORDER 
2d210 42 59 20 63 6c 61 75 73 65 20 69 73 20 61 6c 6c  BY clause is all
2d220 6f 77 65 64 20 6f 6e 20 74 68 61 74 20 73 74 61  owed on that sta
2d230 74 65 6d 65 6e 74 2e 0a 0a 0a 3c 70 3e 5e 52 6f  tement....<p>^Ro
2d240 77 73 20 61 72 65 20 66 69 72 73 74 20 73 6f 72  ws are first sor
2d250 74 65 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ted based on the
2d260 20 72 65 73 75 6c 74 73 20 6f 66 0a 65 76 61 6c   results of.eval
2d270 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d  uating the left-
2d280 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
2d290 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  in the ORDER BY 
2d2a0 6c 69 73 74 2c 20 74 68 65 6e 20 74 69 65 73 20  list, then ties 
2d2b0 61 72 65 20 62 72 6f 6b 65 6e 0a 62 79 20 65 76  are broken.by ev
2d2c0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 73 65 63  aluating the sec
2d2d0 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  ond left-most ex
2d2e0 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 73 6f 20  pression and so 
2d2f0 6f 6e 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e  on. The order in
2d300 20 77 68 69 63 68 0a 74 77 6f 20 72 6f 77 73 20   which.two rows 
2d310 66 6f 72 20 77 68 69 63 68 20 61 6c 6c 20 4f 52  for which all OR
2d320 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2d330 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 65  ns evaluate to e
2d340 71 75 61 6c 20 76 61 6c 75 65 73 20 61 72 65 0a  qual values are.
2d350 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65  returned is unde
2d360 66 69 6e 65 64 2e 20 5e 45 61 63 68 20 4f 52 44  fined. ^Each ORD
2d370 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
2d380 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
2d390 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 6f  ly followed.by o
2d3a0 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72  ne of the keywor
2d3b0 64 73 20 41 53 43 20 28 73 6d 61 6c 6c 65 72 20  ds ASC (smaller 
2d3c0 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72  values are retur
2d3d0 6e 65 64 20 66 69 72 73 74 29 20 6f 72 20 44 45  ned first) or DE
2d3e0 53 43 20 28 6c 61 72 67 65 72 0a 76 61 6c 75 65  SC (larger.value
2d3f0 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66  s are returned f
2d400 69 72 73 74 29 2e 20 5e 49 66 20 6e 65 69 74 68  irst). ^If neith
2d410 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 20 61  er ASC or DESC a
2d420 72 65 20 73 70 65 63 69 66 69 65 64 2c 20 72 6f  re specified, ro
2d430 77 73 0a 61 72 65 20 73 6f 72 74 65 64 20 69 6e  ws.are sorted in
2d440 20 61 73 63 65 6e 64 69 6e 67 20 28 73 6d 61 6c   ascending (smal
2d450 6c 65 72 20 76 61 6c 75 65 73 20 66 69 72 73 74  ler values first
2d460 29 20 6f 72 64 65 72 20 62 79 20 64 65 66 61 75  ) order by defau
2d470 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68 20 4f 52 44  lt...<p>Each ORD
2d480 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
2d490 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
2d4a0 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
2d4b0 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ol>.<li><p>^If t
2d4c0 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
2d4d0 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73  ession is a cons
2d4e0 74 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74  tant integer K t
2d4f0 68 65 6e 20 74 68 65 0a 65 78 70 72 65 73 73 69  hen the.expressi
2d500 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  on is considered
2d510 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
2d520 65 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e K-th column of
2d530 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a   the result set.
2d540 28 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 75 6d  (columns are num
2d550 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  bered from left 
2d560 74 6f 20 72 69 67 68 74 20 73 74 61 72 74 69 6e  to right startin
2d570 67 20 77 69 74 68 20 31 29 2e 0a 0a 3c 6c 69 3e  g with 1)...<li>
2d580 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52  <p>^If the ORDER
2d590 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
2d5a0 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  s an identifier 
2d5b0 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
2d5c0 20 74 6f 0a 74 68 65 20 61 6c 69 61 73 20 6f 66   to.the alias of
2d5d0 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70   one of the outp
2d5e0 75 74 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e  ut columns, then
2d5f0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
2d600 69 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 61 6e  is considered.an
2d610 20 61 6c 69 61 73 20 66 6f 72 20 74 68 61 74 20   alias for that 
2d620 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e  column...<li><p>
2d630 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74  ^Otherwise, if t
2d640 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
2d650 65 73 73 69 6f 6e 20 69 73 20 61 6e 79 20 6f 74  ession is any ot
2d660 68 65 72 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  her expression, 
2d670 69 74 20 0a 69 73 20 65 76 61 6c 75 61 74 65 64  it .is evaluated
2d680 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 65   and the returne
2d690 64 20 76 61 6c 75 65 20 75 73 65 64 20 74 6f 20  d value used to 
2d6a0 6f 72 64 65 72 20 74 68 65 20 6f 75 74 70 75 74  order the output
2d6b0 20 72 6f 77 73 2e 20 5e 49 66 0a 74 68 65 20 53   rows. ^If.the S
2d6c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2d6d0 69 73 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  is a simple SELE
2d6e0 43 54 2c 20 74 68 65 6e 20 61 6e 20 4f 52 44 45  CT, then an ORDE
2d6f0 52 20 42 59 20 6d 61 79 20 63 6f 6e 74 61 69 6e  R BY may contain
2d700 20 61 6e 79 0a 61 72 62 69 74 72 61 72 79 20 65   any.arbitrary e
2d710 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e 48 6f 77  xpressions. ^How
2d720 65 76 65 72 2c 20 69 66 20 74 68 65 20 53 45 4c  ever, if the SEL
2d730 45 43 54 20 69 73 20 61 20 63 6f 6d 70 6f 75 6e  ECT is a compoun
2d740 64 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 0a 4f  d SELECT, then.O
2d750 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2d760 6f 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ons that are not
2d770 20 61 6c 69 61 73 65 73 20 74 6f 20 6f 75 74 70   aliases to outp
2d780 75 74 20 63 6f 6c 75 6d 6e 73 20 6d 75 73 74 20  ut columns must 
2d790 62 65 20 65 78 61 63 74 6c 79 0a 74 68 65 20 73  be exactly.the s
2d7a0 61 6d 65 20 61 73 20 61 6e 20 65 78 70 72 65 73  ame as an expres
2d7b0 73 69 6f 6e 20 75 73 65 64 20 61 73 20 61 6e 20  sion used as an 
2d7c0 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 2e 0a 3c  output column..<
2d7d0 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68  /ol>..<p>^For th
2d7e0 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 73 6f  e purposes of so
2d7f0 72 74 69 6e 67 20 72 6f 77 73 2c 20 76 61 6c 75  rting rows, valu
2d800 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  es are compared 
2d810 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a  in the same way.
2d820 61 73 20 66 6f 72 20 5b 63 6f 6d 70 61 72 69 73  as for [comparis
2d830 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 2e  on expressions].
2d840 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   The collation s
2d850 65 71 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20  equence used to 
2d860 63 6f 6d 70 61 72 65 0a 74 77 6f 20 74 65 78 74  compare.two text
2d870 20 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72   values is deter
2d880 6d 69 6e 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73  mined as follows
2d890 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ol>.  <li><p
2d8a0 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
2d8b0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2d8c0 61 73 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61  assigned a colla
2d8d0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73  tion sequence us
2d8e0 69 6e 67 0a 20 20 74 68 65 20 70 6f 73 74 66 69  ing.  the postfi
2d8f0 78 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  x [COLLATE opera
2d900 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 73  tor], then the s
2d910 70 65 63 69 66 69 65 64 20 63 6f 6c 6c 61 74 69  pecified collati
2d920 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 0a 20  on sequence is. 
2d930 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e   used..  <li><p>
2d940 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74  ^Otherwise, if t
2d950 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
2d960 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 6c 69  ession is an ali
2d970 61 73 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73  as to an express
2d980 69 6f 6e 0a 20 20 74 68 61 74 20 68 61 73 20 62  ion.  that has b
2d990 65 65 6e 20 61 73 73 69 67 6e 65 64 20 61 20 63  een assigned a c
2d9a0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2d9b0 65 20 75 73 69 6e 67 20 74 68 65 20 70 6f 73 74  e using the post
2d9c0 66 69 78 20 0a 20 20 5b 43 4f 4c 4c 41 54 45 20  fix .  [COLLATE 
2d9d0 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20  operator], then 
2d9e0 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
2d9f0 71 75 65 6e 63 65 20 61 73 73 69 67 6e 65 64 20  quence assigned 
2da00 74 6f 20 74 68 65 20 61 6c 69 61 73 65 64 0a 20  to the aliased. 
2da10 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
2da20 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f  sed..  <li><p>^O
2da30 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65  therwise, if the
2da40 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2da50 73 69 6f 6e 20 69 73 20 61 20 63 6f 6c 75 6d 6e  sion is a column
2da60 20 6f 72 20 61 6e 20 61 6c 69 61 73 20 6f 66 0a   or an alias of.
2da70 20 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20    an expression 
2da80 74 68 61 74 20 69 73 20 61 20 63 6f 6c 75 6d 6e  that is a column
2da90 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75  , then the defau
2daa0 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
2dab0 75 65 6e 63 65 20 66 6f 72 0a 20 20 74 68 65 20  uence for.  the 
2dac0 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 20  column is used. 
2dad0 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72  .  <li><p>^Other
2dae0 77 69 73 65 2c 20 74 68 65 20 5b 42 49 4e 41 52  wise, the [BINAR
2daf0 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  Y] collation seq
2db00 75 65 6e 63 65 20 69 73 20 75 73 65 64 2e 0a 3c  uence is used..<
2db10 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20 5b 63  /ol>..<p>In a [c
2db20 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20  ompound SELECT] 
2db30 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c 20 4f  statement, all O
2db40 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2db50 6f 6e 73 20 61 72 65 20 68 61 6e 64 6c 65 64 0a  ons are handled.
2db60 61 73 20 61 6c 69 61 73 65 73 20 66 6f 72 20 6f  as aliases for o
2db70 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ne of the result
2db80 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
2db90 63 6f 6d 70 6f 75 6e 64 2e 0a 5e 28 49 66 20 61  compound..^(If a
2dba0 6e 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  n ORDER BY expre
2dbb0 73 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6e 20  ssion is not an 
2dbc0 69 6e 74 65 67 65 72 20 61 6c 69 61 73 2c 20 74  integer alias, t
2dbd0 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63  hen SQLite searc
2dbe0 68 65 73 0a 74 68 65 20 6c 65 66 74 2d 6d 6f 73  hes.the left-mos
2dbf0 74 20 53 45 4c 45 43 54 20 69 6e 20 74 68 65 20  t SELECT in the 
2dc00 63 6f 6d 70 6f 75 6e 64 20 66 6f 72 20 61 20 72  compound for a r
2dc10 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61  esult column tha
2dc20 74 20 6d 61 74 63 68 65 73 20 65 69 74 68 65 72  t matches either
2dc30 0a 74 68 65 20 73 65 63 6f 6e 64 20 6f 72 20 74  .the second or t
2dc40 68 69 72 64 20 72 75 6c 65 73 20 61 62 6f 76 65  hird rules above
2dc50 2e 20 49 66 20 61 20 6d 61 74 63 68 20 69 73 20  . If a match is 
2dc60 66 6f 75 6e 64 2c 20 74 68 65 20 73 65 61 72 63  found, the searc
2dc70 68 20 73 74 6f 70 73 20 61 6e 64 0a 74 68 65 20  h stops and.the 
2dc80 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 68 61  expression is ha
2dc90 6e 64 6c 65 64 20 61 73 20 61 6e 20 61 6c 69 61  ndled as an alia
2dca0 73 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  s for the result
2dcb0 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 74 20   column that it 
2dcc0 68 61 73 20 62 65 65 6e 0a 6d 61 74 63 68 65 64  has been.matched
2dcd0 20 61 67 61 69 6e 73 74 2e 20 4f 74 68 65 72 77   against. Otherw
2dce0 69 73 65 2c 20 74 68 65 20 6e 65 78 74 20 53 45  ise, the next SE
2dcf0 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68  LECT to the righ
2dd00 74 20 69 73 20 74 72 69 65 64 2c 20 61 6e 64 20  t is tried, and 
2dd10 73 6f 20 6f 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20  so on.)^.^If no 
2dd20 6d 61 74 63 68 69 6e 67 20 65 78 70 72 65 73 73  matching express
2dd30 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64  ion can be found
2dd40 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63   in the result c
2dd50 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 79 0a 63 6f  olumns of any.co
2dd60 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54  nstituent SELECT
2dd70 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
2dd80 2e 20 5e 45 61 63 68 20 74 65 72 6d 20 6f 66 20  . ^Each term of 
2dd90 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
2dda0 75 73 65 20 69 73 0a 70 72 6f 63 65 73 73 65 64  use is.processed
2ddb0 20 73 65 70 61 72 61 74 65 6c 79 20 61 6e 64 20   separately and 
2ddc0 6d 61 79 20 62 65 20 6d 61 74 63 68 65 64 20 61  may be matched a
2ddd0 67 61 69 6e 73 74 20 72 65 73 75 6c 74 20 63 6f  gainst result co
2dde0 6c 75 6d 6e 73 20 66 72 6f 6d 20 64 69 66 66 65  lumns from diffe
2ddf0 72 65 6e 74 0a 53 45 4c 45 43 54 20 73 74 61 74  rent.SELECT stat
2de00 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
2de10 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63  mpound.</p>..<tc
2de20 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69  l>hd_fragment li
2de30 6d 69 74 6f 66 66 73 65 74 20 7b 4c 49 4d 49 54  mitoffset {LIMIT
2de40 7d 20 7b 4f 46 46 53 45 54 7d 3c 2f 74 63 6c 3e  } {OFFSET}</tcl>
2de50 0a 3c 68 33 3e 54 68 65 20 4c 49 4d 49 54 20 63  .<h3>The LIMIT c
2de60 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  lause</h3>..<p>^
2de70 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  The LIMIT clause
2de80 20 69 73 20 75 73 65 64 20 74 6f 20 70 6c 61 63   is used to plac
2de90 65 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64  e an upper bound
2dea0 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
2deb0 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20  f rows.returned 
2dec0 62 79 20 74 68 65 20 65 6e 74 69 72 65 20 53 45  by the entire SE
2ded0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
2dee0 0a 3c 70 3e 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f  .<p>^In a [compo
2def0 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20 6f 6e 6c  und SELECT], onl
2df00 79 20 74 68 65 0a 6c 61 73 74 20 6f 72 20 72 69  y the.last or ri
2df10 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65  ght-most [simple
2df20 20 53 45 4c 45 43 54 5d 20 6d 61 79 20 63 6f 6e   SELECT] may con
2df30 74 61 69 6e 20 61 20 4c 49 4d 49 54 20 63 6c 61  tain a LIMIT cla
2df40 75 73 65 2e 20 20 0a 5e 49 6e 20 61 20 5b 63 6f  use.  .^In a [co
2df50 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20  mpound SELECT], 
2df60 0a 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73  .the LIMIT claus
2df70 65 20 61 70 70 6c 69 65 73 20 74 6f 20 74 68 65  e applies to the
2df80 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64   entire compound
2df90 2c 20 6e 6f 74 20 6a 75 73 74 20 74 68 65 20 66  , not just the f
2dfa0 69 6e 61 6c 20 53 45 4c 45 43 54 2e 0a 5e 49 66  inal SELECT..^If
2dfb0 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20   the right-most 
2dfc0 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
2dfd0 69 73 20 61 20 5b 56 41 4c 55 45 53 20 63 6c 61  is a [VALUES cla
2dfe0 75 73 65 5d 20 74 68 65 6e 20 6e 6f 20 4c 49 4d  use] then no LIM
2dff0 49 54 20 63 6c 61 75 73 65 0a 69 73 20 61 6c 6c  IT clause.is all
2e000 6f 77 65 64 2e 0a 0a 3c 70 3e 5e 41 6e 79 20 73  owed...<p>^Any s
2e010 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
2e020 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20   may be used in 
2e030 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c 61 75 73  the .LIMIT claus
2e040 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73 20 69 74  e, so long as it
2e050 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 6e   evaluates to an
2e060 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 76 61   integer or a va
2e070 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a  lue that can be.
2e080 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
2e090 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
2e0a0 65 72 2e 20 5e 49 66 20 74 68 65 20 65 78 70 72  er. ^If the expr
2e0b0 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
2e0c0 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76 61 6c 75   to a NULL .valu
2e0d0 65 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 76  e or any other v
2e0e0 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74  alue that cannot
2e0f0 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be losslessly c
2e100 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
2e110 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72 72 6f 72  nteger, an.error
2e120 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 49   is returned. ^I
2e130 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72  f the LIMIT expr
2e140 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
2e150 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76   to a negative v
2e160 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68 65 72 65  alue,.then there
2e170 20 69 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75   is no upper bou
2e180 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72  nd on the number
2e190 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65   of rows returne
2e1a0 64 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  d. ^Otherwise, t
2e1b0 68 65 0a 53 45 4c 45 43 54 20 72 65 74 75 72 6e  he.SELECT return
2e1c0 73 20 74 68 65 20 66 69 72 73 74 20 4e 20 72 6f  s the first N ro
2e1d0 77 73 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74  ws of its result
2e1e0 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68 65 72 65   set only, where
2e1f0 20 4e 20 69 73 20 74 68 65 20 76 61 6c 75 65 0a   N is the value.
2e200 74 68 61 74 20 74 68 65 20 4c 49 4d 49 54 20 65  that the LIMIT e
2e210 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
2e220 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20 69 66 20  tes to. ^Or, if 
2e230 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2e240 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65 74 75 72  ment would.retur
2e250 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e 20 72 6f  n less than N ro
2e260 77 73 20 77 69 74 68 6f 75 74 20 61 20 4c 49 4d  ws without a LIM
2e270 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  IT clause, then 
2e280 74 68 65 20 65 6e 74 69 72 65 20 72 65 73 75 6c  the entire resul
2e290 74 20 73 65 74 20 69 73 0a 72 65 74 75 72 6e 65  t set is.returne
2e2a0 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 65 78 70  d. ..<p>^The exp
2e2b0 72 65 73 73 69 6f 6e 20 61 74 74 61 63 68 65 64  ression attached
2e2c0 20 74 6f 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c   to the optional
2e2d0 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 74   OFFSET clause t
2e2e0 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 61  hat may follow a
2e2f0 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 75  .LIMIT clause mu
2e300 73 74 20 61 6c 73 6f 20 65 76 61 6c 75 61 74 65  st also evaluate
2e310 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   to an integer, 
2e320 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  or a value that 
2e330 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c  can be.losslessl
2e340 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
2e350 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 61  n integer. ^If a
2e360 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73  n expression has
2e370 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73   an OFFSET claus
2e380 65 2c 0a 74 68 65 6e 20 74 68 65 20 66 69 72 73  e,.then the firs
2e390 74 20 4d 20 72 6f 77 73 20 61 72 65 20 6f 6d 69  t M rows are omi
2e3a0 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  tted from the re
2e3b0 73 75 6c 74 20 73 65 74 20 72 65 74 75 72 6e 65  sult set returne
2e3c0 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 0a  d by the SELECT.
2e3d0 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
2e3e0 65 20 6e 65 78 74 20 4e 20 72 6f 77 73 20 61 72  e next N rows ar
2e3f0 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68 65 72  e returned, wher
2e400 65 20 4d 20 61 6e 64 20 4e 20 61 72 65 20 74 68  e M and N are th
2e410 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 74 68  e values that.th
2e420 65 20 4f 46 46 53 45 54 20 61 6e 64 20 4c 49 4d  e OFFSET and LIM
2e430 49 54 20 63 6c 61 75 73 65 73 20 65 76 61 6c 75  IT clauses evalu
2e440 61 74 65 20 74 6f 2c 20 72 65 73 70 65 63 74 69  ate to, respecti
2e450 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66 20 74 68  vely. ^Or, if th
2e460 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c 64 20 72  e SELECT.would r
2e470 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20  eturn less than 
2e480 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69 74 20 64  M+N rows if it d
2e490 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 4c 49  id not have a LI
2e4a0 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  MIT clause, then
2e4b0 20 74 68 65 0a 66 69 72 73 74 20 4d 20 72 6f 77   the.first M row
2e4c0 73 20 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e  s are skipped an
2e4d0 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  d the remaining 
2e4e0 72 6f 77 73 20 28 69 66 20 61 6e 79 29 20 61 72  rows (if any) ar
2e4f0 65 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66 20  e returned. ^If 
2e500 74 68 65 0a 4f 46 46 53 45 54 20 63 6c 61 75 73  the.OFFSET claus
2e510 65 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  e evaluates to a
2e520 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c   negative value,
2e530 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 72 65   the results are
2e540 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 66 20   the same as if 
2e550 69 74 0a 68 61 64 20 65 76 61 6c 75 61 74 65 64  it.had evaluated
2e560 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 49   to zero...<p>^I
2e570 6e 73 74 65 61 64 20 6f 66 20 61 20 73 65 70 61  nstead of a sepa
2e580 72 61 74 65 20 4f 46 46 53 45 54 20 63 6c 61 75  rate OFFSET clau
2e590 73 65 2c 20 74 68 65 20 4c 49 4d 49 54 20 63 6c  se, the LIMIT cl
2e5a0 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79  ause may specify
2e5b0 20 74 77 6f 0a 73 63 61 6c 61 72 20 65 78 70 72   two.scalar expr
2e5c0 65 73 73 69 6f 6e 73 20 73 65 70 61 72 61 74 65  essions separate
2e5d0 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e 20 5e 49  d by a comma. ^I
2e5e0 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
2e5f0 20 66 69 72 73 74 20 65 78 70 72 65 73 73 69 6f   first expressio
2e600 6e 0a 69 73 20 75 73 65 64 20 61 73 20 74 68 65  n.is used as the
2e610 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69   OFFSET expressi
2e620 6f 6e 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e  on and the secon
2e630 64 20 61 73 20 74 68 65 20 4c 49 4d 49 54 20 65  d as the LIMIT e
2e640 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68 69 73 20  xpression..This 
2e650 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e 74 75 69  is counter-intui
2e660 74 69 76 65 2c 20 61 73 20 77 68 65 6e 20 75 73  tive, as when us
2e670 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63  ing the OFFSET c
2e680 6c 61 75 73 65 20 74 68 65 20 73 65 63 6f 6e 64  lause the second
2e690 20 6f 66 0a 74 68 65 20 74 77 6f 20 65 78 70 72   of.the two expr
2e6a0 65 73 73 69 6f 6e 73 20 69 73 20 74 68 65 20 4f  essions is the O
2e6b0 46 46 53 45 54 20 61 6e 64 20 74 68 65 20 66 69  FFSET and the fi
2e6c0 72 73 74 20 74 68 65 20 4c 49 4d 49 54 2e 20 0a  rst the LIMIT. .
2e6d0 54 68 69 73 20 72 65 76 65 72 73 61 6c 20 6f 66  This reversal of
2e6e0 20 74 68 65 20 6f 66 66 73 65 74 20 61 6e 64 20   the offset and 
2e6f0 6c 69 6d 69 74 20 69 73 20 69 6e 74 65 6e 74 69  limit is intenti
2e700 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d 69  onal.- it maximi
2e710 7a 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  zes compatibilit
2e720 79 20 77 69 74 68 20 6f 74 68 65 72 20 53 51 4c  y with other SQL
2e730 20 64 61 74 61 62 61 73 65 20 73 79 73 74 65 6d   database system
2e740 73 2e 0a 48 6f 77 65 76 65 72 2c 20 74 6f 20 61  s..However, to a
2e750 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20  void confusion, 
2e760 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20  programmers are 
2e770 73 74 72 6f 6e 67 6c 79 20 65 6e 63 6f 75 72 61  strongly encoura
2e780 67 65 64 20 74 6f 20 75 73 65 0a 74 68 65 20 66  ged to use.the f
2e790 6f 72 6d 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  orm of the LIMIT
2e7a0 20 63 6c 61 75 73 65 20 74 68 61 74 20 75 73 65   clause that use
2e7b0 73 20 74 68 65 20 22 4f 46 46 53 45 54 22 20 6b  s the "OFFSET" k
2e7c0 65 79 77 6f 72 64 20 61 6e 64 20 61 76 6f 69 64  eyword and avoid
2e7d0 0a 75 73 69 6e 67 20 61 20 4c 49 4d 49 54 20 63  .using a LIMIT c
2e7e0 6c 61 75 73 65 20 77 69 74 68 20 61 20 63 6f 6d  lause with a com
2e7f0 6d 61 2d 73 65 70 61 72 61 74 65 64 20 6f 66 66  ma-separated off
2e800 73 65 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  set...<tcl>hd_fr
2e810 61 67 6d 65 6e 74 20 76 61 6c 75 65 73 20 7b 56  agment values {V
2e820 41 4c 55 45 53 20 63 6c 61 75 73 65 7d 20 56 41  ALUES clause} VA
2e830 4c 55 45 53 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  LUES</tcl>.<h3>T
2e840 68 65 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  he VALUES clause
2e850 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  </h3>..<p>^(The 
2e860 70 68 72 61 73 65 20 22 56 41 4c 55 45 53 28 3c  phrase "VALUES(<
2e870 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 29  i>expr-list</i>)
2e880 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  " means the same
2e890 20 74 68 69 6e 67 0a 61 73 20 22 53 45 4c 45 43   thing.as "SELEC
2e8a0 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f  T <i>expr-list</
2e8b0 69 3e 22 2e 29 5e 20 20 5e 28 54 68 65 20 70 68  i>".)^  ^(The ph
2e8c0 72 61 73 65 0a 22 56 41 4c 55 45 53 28 3c 69 3e  rase."VALUES(<i>
2e8d0 65 78 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 29  expr-list-1</i>)
2e8e0 2c 2e 2e 2e 2c 28 3c 69 3e 65 78 70 72 2d 6c 69  ,...,(<i>expr-li
2e8f0 73 74 2d 4e 3c 2f 69 3e 29 22 20 6d 65 61 6e 73  st-N</i>)" means
2e900 20 74 68 65 20 73 61 6d 65 0a 74 68 69 6e 67 20   the same.thing 
2e910 61 73 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78  as "SELECT <i>ex
2e920 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 20 55 4e  pr-list-1</i> UN
2e930 49 4f 4e 20 41 4c 4c 20 2e 2e 2e 20 55 4e 49 4f  ION ALL ... UNIO
2e940 4e 20 41 4c 4c 0a 53 45 4c 45 43 54 20 3c 69 3e  N ALL.SELECT <i>
2e950 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 22  expr-list-N</i>"
2e960 2e 29 5e 20 20 42 6f 74 68 20 66 6f 72 6d 73 20  .)^  Both forms 
2e970 61 72 65 20 74 68 65 20 73 61 6d 65 2c 20 65 78  are the same, ex
2e980 63 65 70 74 20 74 68 61 74 0a 74 68 65 20 6e 75  cept that.the nu
2e990 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
2e9a0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 61 20 63  tatements in a c
2e9b0 6f 6d 70 6f 75 6e 64 20 69 73 20 6c 69 6d 69 74  ompound is limit
2e9c0 65 64 20 62 79 0a 5b 53 51 4c 49 54 45 5f 4c 49  ed by.[SQLITE_LI
2e9d0 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c  MIT_COMPOUND_SEL
2e9e0 45 43 54 5d 20 77 68 65 72 65 61 73 20 74 68 65  ECT] whereas the
2e9f0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2ea00 69 6e 20 61 0a 56 41 4c 55 45 53 20 63 6c 61 75  in a.VALUES clau
2ea10 73 65 20 68 61 73 20 6e 6f 20 61 72 62 69 74 72  se has no arbitr
2ea20 61 72 79 20 6c 69 6d 69 74 2e 0a 0a 3c 70 3e 54  ary limit...<p>T
2ea30 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20 72 65  here are some re
2ea40 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68  strictions on th
2ea50 65 20 75 73 65 20 6f 66 20 61 20 56 41 4c 55 45  e use of a VALUE
2ea60 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 61 72  S clause that ar
2ea70 65 0a 6e 6f 74 20 73 68 6f 77 6e 20 6f 6e 20 74  e.not shown on t
2ea80 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  he syntax diagra
2ea90 6d 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  ms:..<ul>.<li><p
2eaa0 3e 0a 5e 41 20 56 41 4c 55 45 53 20 63 6c 61 75  >.^A VALUES clau
2eab0 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 6c  se cannot be fol
2eac0 6c 6f 77 65 64 20 62 79 20 5b 4f 52 44 45 52 20  lowed by [ORDER 
2ead0 42 59 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41  BY]...<li><p>.^A
2eae0 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 63   VALUES clause c
2eaf0 61 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65  annot be followe
2eb00 64 20 62 79 20 5b 4c 49 4d 49 54 5d 2e 0a 3c 2f  d by [LIMIT]..</
2eb10 75 6c 3e 0a 0a 0a 3c 68 33 3e 54 68 65 20 57 49  ul>...<h3>The WI
2eb20 54 48 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a  TH Clause</h3>..
2eb30 3c 70 3e 5e 53 45 4c 45 43 54 20 73 74 61 74 65  <p>^SELECT state
2eb40 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 6f 70 74  ments may be opt
2eb50 69 6f 6e 61 6c 6c 79 20 70 72 65 63 65 64 65 64  ionally preceded
2eb60 20 62 79 20 61 20 73 69 6e 67 6c 65 0a 5b 57 49   by a single.[WI
2eb70 54 48 20 63 6c 61 75 73 65 5d 20 74 68 61 74 20  TH clause] that 
2eb80 64 65 66 69 6e 65 73 20 6f 6e 65 20 6f 72 20 6d  defines one or m
2eb90 6f 72 65 20 5b 63 6f 6d 6d 6f 6e 20 74 61 62 6c  ore [common tabl
2eba0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 5d 0a 66  e expressions].f
2ebb0 6f 72 20 75 73 65 20 77 69 74 68 69 6e 20 74 68  or use within th
2ebc0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2ebd0 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  nt...<tcl>hd_fra
2ebe0 67 6d 65 6e 74 20 74 61 62 66 75 6e 63 31 20 7b  gment tabfunc1 {
2ebf0 74 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e  table-valued fun
2ec00 63 74 69 6f 6e 73 20 69 6e 20 74 68 65 20 46 52  ctions in the FR
2ec10 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e  OM clause}</tcl>
2ec20 0a 3c 68 33 3e 54 61 62 6c 65 2d 76 61 6c 75 65  .<h3>Table-value
2ec30 64 20 46 75 6e 63 74 69 6f 6e 73 20 49 6e 20 54  d Functions In T
2ec40 68 65 20 46 52 4f 4d 20 43 6c 61 75 73 65 3c 2f  he FROM Clause</
2ec50 68 33 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75  h3>..<p>A [virtu
2ec60 61 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63  al table] that c
2ec70 6f 6e 74 61 69 6e 73 20 5b 68 69 64 64 65 6e 20  ontains [hidden 
2ec80 63 6f 6c 75 6d 6e 73 5d 20 63 61 6e 20 62 65 20  columns] can be 
2ec90 75 73 65 64 20 6c 69 6b 65 0a 61 20 5b 74 61 62  used like.a [tab
2eca0 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69  le-valued functi
2ecb0 6f 6e 5d 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  on] in the FROM 
2ecc0 63 6c 61 75 73 65 2e 20 20 54 68 65 20 61 72 67  clause.  The arg
2ecd0 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 0a 74 61  uments to the.ta
2ece0 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74  ble-valued funct
2ecf0 69 6f 6e 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ion become const
2ed00 72 61 69 6e 74 73 20 6f 6e 20 74 68 65 20 48 49  raints on the HI
2ed10 44 44 45 4e 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a  DDEN columns of.
2ed20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
2ed30 65 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 20 69  e.  Additional i
2ed40 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 20 62  nformation can b
2ed50 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 5b  e found in the.[
2ed60 74 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e  table-valued fun
2ed70 63 74 69 6f 6e 73 7c 76 69 72 74 75 61 6c 20 74  ctions|virtual t
2ed80 61 62 6c 65 20 64 6f 63 75 6d 65 6e 74 61 74 69  able documentati
2ed90 6f 6e 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  on]...<tcl>.####
2eda0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2edb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2edc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2edd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ede0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
2edf0 6f 6e 20 55 50 44 41 54 45 20 75 70 64 61 74 65  on UPDATE update
2ee00 20 7b 55 50 44 41 54 45 20 2a 55 50 44 41 54 45   {UPDATE *UPDATE
2ee10 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  s}..RecursiveBub
2ee20 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61 74  bleDiagram updat
2ee30 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-stmt.</tcl>..<
2ee40 70 3e 5e 41 6e 20 55 50 44 41 54 45 20 73 74 61  p>^An UPDATE sta
2ee50 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  tement is used t
2ee60 6f 20 6d 6f 64 69 66 79 20 61 20 73 75 62 73 65  o modify a subse
2ee70 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  t of the values 
2ee80 73 74 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20  stored in .zero 
2ee90 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20  or more rows of 
2eea0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
2eeb0 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  le identified by
2eec0 20 74 68 65 20 0a 5b 71 75 61 6c 69 66 69 65 64   the .[qualified
2eed0 2d 74 61 62 6c 65 2d 6e 61 6d 65 5d 20 73 70 65  -table-name] spe
2eee0 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
2eef0 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
2ef00 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20  tement...<p>^If 
2ef10 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
2ef20 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68 61  ment does not ha
2ef30 76 65 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  ve a WHERE claus
2ef40 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  e, all rows in t
2ef50 68 65 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f 64  he.table are mod
2ef60 69 66 69 65 64 20 62 79 20 74 68 65 20 55 50 44  ified by the UPD
2ef70 41 54 45 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ATE. ^Otherwise,
2ef80 20 74 68 65 20 55 50 44 41 54 45 20 61 66 66 65   the UPDATE affe
2ef90 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72  cts only those.r
2efa0 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
2efb0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 0a 5b  e WHERE clause.[
2efc0 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
2efd0 6f 6e 7c 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  on|boolean expre
2efe0 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20  ssion is true]. 
2eff0 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72  ^It is not an er
2f000 72 6f 72 20 69 66 20 74 68 65 0a 57 48 45 52 45  ror if the.WHERE
2f010 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74   clause does not
2f020 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72 75   evaluate to tru
2f030 65 20 66 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e  e for any row in
2f040 20 74 68 65 20 74 61 62 6c 65 20 2d 20 74 68 69   the table - thi
2f050 73 20 6a 75 73 74 0a 6d 65 61 6e 73 20 74 68 61  s just.means tha
2f060 74 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  t the UPDATE sta
2f070 74 65 6d 65 6e 74 20 61 66 66 65 63 74 73 20 7a  tement affects z
2f080 65 72 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68  ero rows...<p>Th
2f090 65 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20  e modifications 
2f0a0 6d 61 64 65 20 74 6f 20 65 61 63 68 20 72 6f 77  made to each row
2f0b0 20 61 66 66 65 63 74 65 64 20 62 79 20 61 6e 20   affected by an 
2f0c0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
2f0d0 20 61 72 65 0a 64 65 74 65 72 6d 69 6e 65 64 20   are.determined 
2f0e0 62 79 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61  by the list of a
2f0f0 73 73 69 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f  ssignments follo
2f100 77 69 6e 67 20 74 68 65 20 53 45 54 20 6b 65 79  wing the SET key
2f110 77 6f 72 64 2e 20 45 61 63 68 0a 61 73 73 69 67  word. Each.assig
2f120 6e 6d 65 6e 74 20 73 70 65 63 69 66 69 65 73 20  nment specifies 
2f130 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e  a <yyterm>column
2f140 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 74  -name</yyterm> t
2f150 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68  o the left of th
2f160 65 20 0a 65 71 75 61 6c 73 20 73 69 67 6e 20 61  e .equals sign a
2f170 6e 64 20 61 0a 73 63 61 6c 61 72 20 65 78 70 72  nd a.scalar expr
2f180 65 73 73 69 6f 6e 20 74 6f 20 74 68 65 20 72 69  ession to the ri
2f190 67 68 74 2e 20 5e 46 6f 72 20 65 61 63 68 20 61  ght. ^For each a
2f1a0 66 66 65 63 74 65 64 20 72 6f 77 2c 20 74 68 65  ffected row, the
2f1b0 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 0a 61   named columns.a
2f1c0 72 65 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  re set to the va
2f1d0 6c 75 65 73 20 66 6f 75 6e 64 20 62 79 20 65 76  lues found by ev
2f1e0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72  aluating the cor
2f1f0 72 65 73 70 6f 6e 64 69 6e 67 20 73 63 61 6c 61  responding scala
2f200 72 20 0a 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  r .expressions. 
2f210 5e 49 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  ^If a single col
2f220 75 6d 6e 2d 6e 61 6d 65 20 61 70 70 65 61 72 73  umn-name appears
2f230 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20   more than once 
2f240 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 61  in the list of.a
2f250 73 73 69 67 6e 6d 65 6e 74 20 65 78 70 72 65 73  ssignment expres
2f260 73 69 6f 6e 73 2c 20 61 6c 6c 20 62 75 74 20 74  sions, all but t
2f270 68 65 20 72 69 67 68 74 6d 6f 73 74 20 6f 63 63  he rightmost occ
2f280 75 72 72 65 6e 63 65 20 69 73 20 69 67 6e 6f 72  urrence is ignor
2f290 65 64 2e 20 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61  ed. ^Columns.tha
2f2a0 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20  t do not appear 
2f2b0 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61  in the list of a
2f2c0 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6c  ssignments are l
2f2d0 65 66 74 20 75 6e 6d 6f 64 69 66 69 65 64 2e 20  eft unmodified. 
2f2e0 5e 54 68 65 20 73 63 61 6c 61 72 0a 65 78 70 72  ^The scalar.expr
2f2f0 65 73 73 69 6f 6e 73 20 6d 61 79 20 72 65 66 65  essions may refe
2f300 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  r to columns of 
2f310 74 68 65 20 72 6f 77 20 62 65 69 6e 67 20 75 70  the row being up
2f320 64 61 74 65 64 2e 20 5e 49 6e 20 74 68 69 73 20  dated. ^In this 
2f330 63 61 73 65 20 61 6c 6c 0a 73 63 61 6c 61 72 20  case all.scalar 
2f340 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
2f350 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65  evaluated before
2f360 20 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73   any assignments
2f370 20 61 72 65 20 6d 61 64 65 2e 0a 0a 3c 70 3e 5e   are made...<p>^
2f380 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 4f 52  The optional "OR
2f390 20 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22 20   <i>action</i>" 
2f3a0 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 20  conflict clause 
2f3b0 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68 65  that follows the
2f3c0 0a 55 50 44 41 54 45 20 6b 65 79 77 6f 72 64 20  .UPDATE keyword 
2f3d0 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20  allows the user 
2f3e0 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61 20 73 70  to nominate a sp
2f3f0 65 63 69 66 69 63 0a 63 6f 6e 73 74 72 61 69 6e  ecific.constrain
2f400 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
2f410 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
2f420 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
2f430 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20 63 6f  is one UPDATE co
2f440 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20 74 6f 20  mmand..Refer to 
2f450 74 68 65 20 73 65 63 74 69 6f 6e 20 65 6e 74 69  the section enti
2f460 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  tled [ON CONFLIC
2f470 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  T] for additiona
2f480 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a  l information...
2f490 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73  <h3>Restrictions
2f4a0 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61 74 65   on UPDATE State
2f4b0 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45  ments Within CRE
2f4c0 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e  ATE TRIGGER</h3>
2f4d0 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
2f4e0 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 73 79  ng additional sy
2f4f0 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e  ntax restriction
2f500 73 20 61 70 70 6c 79 20 74 6f 20 55 50 44 41 54  s apply to UPDAT
2f510 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  E statements tha
2f520 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74  t.occur within t
2f530 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52  he body of a [CR
2f540 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
2f550 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75 6c 3e  atement.  ..<ul>
2f560 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c  .  <li><p>^The <
2f570 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d  yyterm>table-nam
2f580 65 3c 2f 79 79 74 65 72 6d 3e 20 73 70 65 63 69  e</yyterm> speci
2f590 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
2f5a0 61 6e 20 55 50 44 41 54 45 20 0a 20 20 20 20 20  an UPDATE .     
2f5b0 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69   statement withi
2f5c0 6e 0a 20 20 20 20 20 20 61 20 74 72 69 67 67 65  n.      a trigge
2f5d0 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75  r body must be u
2f5e0 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e 28 49 6e  nqualified. ^(In
2f5f0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
2f600 65 0a 20 20 20 20 20 20 3c 69 3e 73 63 68 65 6d  e.      <i>schem
2f610 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  a-name</i><b>.</
2f620 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  b> prefix on the
2f630 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20 74   table name of t
2f640 68 65 20 55 50 44 41 54 45 20 69 73 0a 20 20 20  he UPDATE is.   
2f650 20 20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77     not allowed w
2f660 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29  ithin triggers.)
2f670 5e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 74 61  ^ ^Unless the ta
2f680 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65  ble to which the
2f690 20 74 72 69 67 67 65 72 0a 20 20 20 20 20 20 69   trigger.      i
2f6a0 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e  s attached is in
2f6b0 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
2f6c0 73 65 2c 20 74 68 65 20 74 61 62 6c 65 20 62 65  se, the table be
2f6d0 69 6e 67 20 75 70 64 61 74 65 64 20 62 79 20 74  ing updated by t
2f6e0 68 65 0a 20 20 20 20 20 20 74 72 69 67 67 65 72  he.      trigger
2f6f0 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 72 65   program must re
2f700 73 69 64 65 20 69 6e 20 74 68 65 20 73 61 6d 65  side in the same
2f710 20 64 61 74 61 62 61 73 65 20 61 73 20 69 74 2e   database as it.
2f720 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a 20   ^If the table. 
2f730 20 20 20 20 20 74 6f 20 77 68 69 63 68 20 74 68       to which th
2f740 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74  e trigger is att
2f750 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65 20  ached is in the 
2f760 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74  TEMP database, t
2f770 68 65 6e 20 74 68 65 0a 20 20 20 20 20 20 75 6e  hen the.      un
2f780 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f  qualified name o
2f790 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
2f7a0 67 20 75 70 64 61 74 65 64 20 69 73 20 72 65 73  g updated is res
2f7b0 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d  olved in the sam
2f7c0 65 20 77 61 79 0a 20 20 20 20 20 20 61 73 20 69  e way.      as i
2f7d0 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c  t is for a top-l
2f7e0 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28  evel statement (
2f7f0 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69 72  by searching fir
2f800 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  st the TEMP data
2f810 62 61 73 65 2c 0a 20 20 20 20 20 20 74 68 65 6e  base,.      then
2f820 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2f830 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68  se, then any oth
2f840 65 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  er databases in 
2f850 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77  the order they w
2f860 65 72 65 0a 20 20 20 20 20 20 61 74 74 61 63 68  ere.      attach
2f870 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  ed)...  <li><p>^
2f880 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61  The INDEXED BY a
2f890 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63  nd NOT INDEXED c
2f8a0 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61  lauses are not a
2f8b0 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54 45  llowed on UPDATE
2f8c0 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74  .      statement
2f8d0 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
2f8e0 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70  s.</p>..  <li><p
2f8f0 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  >^The LIMIT and 
2f900 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73  ORDER BY clauses
2f910 20 66 6f 72 20 55 50 44 41 54 45 20 61 72 65 20   for UPDATE are 
2f920 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74 68  unsupported with
2f930 69 6e 0a 20 20 20 20 20 20 74 72 69 67 67 65 72  in.      trigger
2f940 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
2f950 20 74 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e   the compilation
2f960 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 74 6f   options used to
2f970 20 62 75 69 6c 64 20 53 51 4c 69 74 65 2e 0a 3c   build SQLite..<
2f980 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e  /ul>..<h3>Option
2f990 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44  al LIMIT and ORD
2f9a0 45 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f 68  ER BY Clauses</h
2f9b0 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69  3>..<p>^(If SQLi
2f9c0 74 65 20 69 73 20 62 75 69 6c 74 20 77 69 74 68  te is built with
2f9d0 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
2f9e0 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
2f9f0 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65  E_LIMIT].compile
2fa00 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65  -time option the
2fa10 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20  n the syntax of 
2fa20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
2fa30 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65 64  ment is extended
2fa40 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f  .with optional O
2fa50 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
2fa60 54 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20 66  T clauses)^ as f
2fa70 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63  ollows:</p>..<tc
2fa80 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
2fa90 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69  update-stmt-limi
2faa0 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49  ted</tcl>..<p>^I
2fab0 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  f an UPDATE stat
2fac0 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49 4d 49  ement has a LIMI
2fad0 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6d 61  T clause, the ma
2fae0 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
2faf0 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c 20 62  rows that.will b
2fb00 65 20 75 70 64 61 74 65 64 20 69 73 20 66 6f 75  e updated is fou
2fb10 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67  nd by evaluating
2fb20 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e   the accompanyin
2fb30 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  g expression and
2fb40 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f 20 61   casting.it to a
2fb50 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n integer value.
2fb60 20 5e 41 20 6e 65 67 61 74 69 76 65 20 76 61 6c   ^A negative val
2fb70 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74 65  ue is interprete
2fb80 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e  d as "no limit".
2fb90 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 4c 49 4d  ..<p>^If the LIM
2fba0 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  IT expression ev
2fbb0 61 6c 75 61 74 65 73 20 74 6f 20 6e 6f 6e 2d 6e  aluates to non-n
2fbc0 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69  egative value <i
2fbd0 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74 68 65 0a 55  >N</i> and the.U
2fbe0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
2fbf0 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20  has an ORDER BY 
2fc00 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
2fc10 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64   rows that would
2fc20 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 0a 74   be updated in.t
2fc30 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
2fc40 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
2fc50 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64  re sorted accord
2fc60 69 6e 67 20 74 6f 20 74 68 65 20 4f 52 44 45 52  ing to the ORDER
2fc70 20 42 59 20 61 6e 64 20 74 68 65 0a 66 69 72 73   BY and the.firs
2fc80 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70 64 61 74  t <i>N</i> updat
2fc90 65 64 2e 20 5e 28 49 66 20 74 68 65 20 55 50 44  ed. ^(If the UPD
2fca0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6c  ATE statement al
2fcb0 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  so has an OFFSET
2fcc0 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 69 74   clause,.then it
2fcd0 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76   is similarly ev
2fce0 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74  aluated and cast
2fcf0 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76   to an integer v
2fd00 61 6c 75 65 2e 20 49 66 20 74 68 65 20 4f 46 46  alue. If the OFF
2fd10 53 45 54 0a 65 78 70 72 65 73 73 69 6f 6e 20 65  SET.expression e
2fd20 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 6f  valuates to a no
2fd30 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
2fd40 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e 20   <i>M</i>, then 
2fd50 74 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f  the first <i>M</
2fd60 69 3e 0a 72 6f 77 73 20 61 72 65 20 73 6b 69 70  i>.rows are skip
2fd70 70 65 64 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c  ped and the foll
2fd80 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20 72  owing <i>N</i> r
2fd90 6f 77 73 20 75 70 64 61 74 65 64 20 69 6e 73 74  ows updated inst
2fda0 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74  ead.)^..<p>^If t
2fdb0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
2fdc0 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45 52  ent has no ORDER
2fdd0 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
2fde0 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a 77   all rows that.w
2fdf0 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20  ould be updated 
2fe00 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20 6f  in the absence o
2fe10 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  f the LIMIT clau
2fe20 73 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65 64  se are assembled
2fe30 20 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72 79   in an.arbitrary
2fe40 20 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61 70   order before ap
2fe50 70 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49 54  plying the LIMIT
2fe60 20 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61 75   and OFFSET clau
2fe70 73 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ses to determine
2fe80 20 0a 77 68 69 63 68 20 61 72 65 20 61 63 74 75   .which are actu
2fe90 61 6c 6c 79 20 75 70 64 61 74 65 64 2e 0a 0a 3c  ally updated...<
2fea0 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59  p>^(The ORDER BY
2feb0 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55 50   clause on an UP
2fec0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
2fed0 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64  s used only to d
2fee0 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72  etermine which.r
2fef0 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20  ows fall within 
2ff00 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f  the LIMIT. The o
2ff10 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
2ff20 77 73 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20  ws are modified 
2ff30 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64  is arbitrary.and
2ff40 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63   is not influenc
2ff50 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20  ed by the ORDER 
2ff60 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74  BY clause.)^..<t
2ff70 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
2ff80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ff90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ffa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ffb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ffc0 23 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55  ##.Section VACUU
2ffd0 4d 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d 0a  M vacuum VACUUM.
2ffe0 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
2fff0 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73  Diagram vacuum-s
30000 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  tmt.</tcl>..<p>.
30010 20 20 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d    The VACUUM com
30020 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20 74 68  mand rebuilds th
30030 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
30040 65 2e 20 54 68 65 72 65 20 61 72 65 20 73 65 76  e. There are sev
30050 65 72 61 6c 20 0a 20 20 72 65 61 73 6f 6e 73 20  eral .  reasons 
30060 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d  an application m
30070 69 67 68 74 20 64 6f 20 74 68 69 73 3a 0a 0a 3c  ight do this:..<
30080 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  ul>.  <li> <p> ^
30090 55 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73  Unless SQLite is
300a0 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 61 75 74   running in "aut
300b0 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c 22 20 6d  o_vacuum=FULL" m
300c0 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c 61 72 67  ode, when a larg
300d0 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74 20 6f 66  e.     amount of
300e0 20 64 61 74 61 20 69 73 20 64 65 6c 65 74 65 64   data is deleted
300f0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
30100 73 65 20 66 69 6c 65 20 69 74 20 6c 65 61 76 65  se file it leave
30110 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79 0a 20  s behind empty. 
30120 20 20 20 20 73 70 61 63 65 2c 20 6f 72 20 22 66      space, or "f
30130 72 65 65 22 20 64 61 74 61 62 61 73 65 20 70 61  ree" database pa
30140 67 65 73 2e 20 54 68 69 73 20 6d 65 61 6e 73 20  ges. This means 
30150 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
30160 65 20 6d 69 67 68 74 0a 20 20 20 20 20 62 65 20  e might.     be 
30170 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74 72 69  larger than stri
30180 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79 2e 20  ctly necessary. 
30190 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20  ^Running VACUUM 
301a0 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20 0a  to rebuild the .
301b0 20 20 20 20 20 64 61 74 61 62 61 73 65 20 72 65       database re
301c0 63 6c 61 69 6d 73 20 74 68 69 73 20 73 70 61 63  claims this spac
301d0 65 20 61 6e 64 20 72 65 64 75 63 65 73 20 74 68  e and reduces th
301e0 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  e size of the da
301f0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a 20 20  tabase file...  
30200 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65 71 75 65  <li> <p> ^Freque
30210 6e 74 20 69 6e 73 65 72 74 73 2c 20 75 70 64 61  nt inserts, upda
30220 74 65 73 2c 20 61 6e 64 20 64 65 6c 65 74 65 73  tes, and deletes
30230 20 63 61 6e 20 63 61 75 73 65 20 74 68 65 20 64   can cause the d
30240 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20 20  atabase file.   
30250 20 20 74 6f 20 62 65 63 6f 6d 65 20 66 72 61 67    to become frag
30260 6d 65 6e 74 65 64 20 2d 20 77 68 65 72 65 20 64  mented - where d
30270 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ata for a single
30280 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
30290 69 73 20 73 63 61 74 74 65 72 65 64 20 0a 20 20  is scattered .  
302a0 20 20 20 61 72 6f 75 6e 64 20 74 68 65 20 64 61     around the da
302b0 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 52 75  tabase file. ^Ru
302c0 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 65 6e 73  nning VACUUM ens
302d0 75 72 65 73 20 74 68 61 74 20 65 61 63 68 20 74  ures that each t
302e0 61 62 6c 65 20 61 6e 64 0a 20 20 20 20 20 69 6e  able and.     in
302f0 64 65 78 20 69 73 20 6c 61 72 67 65 6c 79 20 73  dex is largely s
30300 74 6f 72 65 64 20 63 6f 6e 74 69 67 75 6f 75 73  tored contiguous
30310 6c 79 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ly within the da
30320 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 49 6e  tabase file. ^In
30330 20 73 6f 6d 65 0a 20 20 20 20 20 63 61 73 65 73   some.     cases
30340 2c 20 56 41 43 55 55 4d 20 6d 61 79 20 61 6c 73  , VACUUM may als
30350 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
30360 62 65 72 20 6f 66 20 70 61 72 74 69 61 6c 6c 79  ber of partially
30370 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 69 6e   filled pages in
30380 0a 20 20 20 20 20 74 68 65 20 64 61 74 61 62 61  .     the databa
30390 73 65 2c 20 72 65 64 75 63 69 6e 67 20 74 68 65  se, reducing the
303a0 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
303b0 61 62 61 73 65 20 66 69 6c 65 20 66 75 72 74 68  abase file furth
303c0 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20  er...  <li> <p> 
303d0 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 20 64  ^Normally, the d
303e0 61 74 61 62 61 73 65 20 5b 70 61 67 65 5f 73 69  atabase [page_si
303f0 7a 65 5d 20 61 6e 64 20 77 68 65 74 68 65 72 20  ze] and whether 
30400 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74 61 62  or not the datab
30410 61 73 65 0a 20 20 20 20 20 73 75 70 70 6f 72 74  ase.     support
30420 73 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  s [auto_vacuum] 
30430 6d 75 73 74 20 62 65 20 63 6f 6e 66 69 67 75 72  must be configur
30440 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 64 61  ed before the da
30450 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a 20  tabase file is. 
30460 20 20 20 20 61 63 74 75 61 6c 6c 79 20 63 72 65      actually cre
30470 61 74 65 64 2e 20 5e 48 6f 77 65 76 65 72 2c 20  ated. ^However, 
30480 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 77 72 69  when not in [wri
30490 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f  te-ahead log] mo
304a0 64 65 2c 20 74 68 65 20 0a 20 20 20 20 20 5b 70  de, the .     [p
304b0 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f 72  age_size] and/or
304c0 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70   [auto_vacuum] p
304d0 72 6f 70 65 72 74 69 65 73 20 6f 66 20 61 6e 20  roperties of an 
304e0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
304f0 65 20 6d 61 79 20 62 65 0a 20 20 20 20 20 63 68  e may be.     ch
30500 61 6e 67 65 64 20 62 79 20 75 73 69 6e 67 20 74  anged by using t
30510 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 20 70 72  he [page_size pr
30520 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a 65 5d 20  agma|page_size] 
30530 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20 20 5b 61   and/or .     [a
30540 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72 61 67 6d  uto_vacuum|pragm
30550 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70  a auto_vacuum] p
30560 72 61 67 6d 61 73 20 61 6e 64 20 74 68 65 6e 20  ragmas and then 
30570 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43 55  immediately VACU
30580 55 4d 69 6e 67 0a 20 20 20 20 20 74 68 65 20 64  UMing.     the d
30590 61 74 61 62 61 73 65 2e 20 5e 57 68 65 6e 20 69  atabase. ^When i
305a0 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
305b0 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c 79 20 74  og] mode, only t
305c0 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  he [auto_vacuum]
305d0 0a 20 20 20 20 20 73 75 70 70 6f 72 74 20 70 72  .     support pr
305e0 6f 70 65 72 74 79 20 63 61 6e 20 62 65 20 63 68  operty can be ch
305f0 61 6e 67 65 64 20 75 73 69 6e 67 20 56 41 43 55  anged using VACU
30600 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28  UM..</ul>..<p>^(
30610 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b  VACUUM only work
30620 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s on the main da
30630 74 61 62 61 73 65 2e 20 49 74 20 69 73 20 6e 6f  tabase. It is no
30640 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 56 41  t possible to VA
30650 43 55 55 4d 20 61 6e 0a 61 74 74 61 63 68 65 64  CUUM an.attached
30660 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 29   database file.)
30670 5e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55  ^..<p>^The VACUU
30680 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20  M command works 
30690 62 79 20 63 6f 70 79 69 6e 67 20 74 68 65 20 63  by copying the c
306a0 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
306b0 61 74 61 62 61 73 65 20 69 6e 74 6f 0a 61 20 74  atabase into.a t
306c0 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73  emporary databas
306d0 65 20 66 69 6c 65 20 61 6e 64 20 74 68 65 6e 20  e file and then 
306e0 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20  overwriting the 
306f0 6f 72 69 67 69 6e 61 6c 20 77 69 74 68 20 74 68  original with th
30700 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  e .contents of t
30710 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  he temporary fil
30720 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77 72 69  e. ^When overwri
30730 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61  ting the origina
30740 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f  l, a rollback.jo
30750 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d  urnal or [write-
30760 61 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66  ahead log] WAL f
30770 69 6c 65 20 69 73 20 75 73 65 64 20 6a 75 73 74  ile is used just
30780 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
30790 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20 64 61  for any.other da
307a0 74 61 62 61 73 65 20 74 72 61 6e 73 61 63 74 69  tabase transacti
307b0 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e 73 20  on. ^This means 
307c0 74 68 61 74 20 77 68 65 6e 20 56 41 43 55 55 4d  that when VACUUM
307d0 69 6e 67 20 61 20 64 61 74 61 62 61 73 65 2c 20  ing a database, 
307e0 0a 61 73 20 6d 75 63 68 20 61 73 20 74 77 69 63  .as much as twic
307f0 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  e the size of th
30800 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62  e original datab
30810 61 73 65 20 66 69 6c 65 20 69 73 20 72 65 71 75  ase file is requ
30820 69 72 65 64 20 69 6e 20 66 72 65 65 0a 64 69 73  ired in free.dis
30830 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68  k space...<p>^Th
30840 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64  e VACUUM command
30850 20 6d 61 79 20 63 68 61 6e 67 65 20 74 68 65 20   may change the 
30860 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49 44 73 5d  [ROWID | ROWIDs]
30870 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
30880 6e 79 0a 74 61 62 6c 65 73 20 74 68 61 74 20 64  ny.tables that d
30890 6f 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 65 78  o not have an ex
308a0 70 6c 69 63 69 74 20 5b 49 4e 54 45 47 45 52 20  plicit [INTEGER 
308b0 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f  PRIMARY KEY]..</
308c0 70 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43 55 55 4d  p>..<p>^A VACUUM
308d0 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68   will fail if th
308e0 65 72 65 20 69 73 20 61 6e 20 6f 70 65 6e 20 74  ere is an open t
308f0 72 61 6e 73 61 63 74 69 6f 6e 2c 20 6f 72 20 69  ransaction, or i
30900 66 20 74 68 65 72 65 20 61 72 65 20 6f 6e 65 20  f there are one 
30910 6f 72 0a 6d 6f 72 65 20 61 63 74 69 76 65 20 53  or.more active S
30920 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  QL statements wh
30930 65 6e 20 69 74 20 69 73 20 72 75 6e 2e 0a 0a 3c  en it is run...<
30940 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c 69 74 65  p>^(As of SQLite
30950 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e   version 3.1, an
30960 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
30970 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d  using the VACUUM
30980 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65 63 6c   command to.recl
30990 61 69 6d 20 73 70 61 63 65 20 61 66 74 65 72 20  aim space after 
309a0 64 61 74 61 20 68 61 73 20 62 65 65 6e 20 64 65  data has been de
309b0 6c 65 74 65 64 20 69 73 20 61 75 74 6f 2d 76 61  leted is auto-va
309c0 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c  cuum mode, enabl
309d0 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 61 75  ed using.the [au
309e0 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d  to_vacuum] pragm
309f0 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61 75 74 6f  a.)^ ^When [auto
30a00 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e 61 62  _vacuum] is enab
30a10 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61  led for a databa
30a20 73 65 0a 66 72 65 65 20 70 61 67 65 73 20 6d 61  se.free pages ma
30a30 79 20 62 65 20 72 65 63 6c 61 69 6d 65 64 20 61  y be reclaimed a
30a40 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20 64 61  fter deleting da
30a50 74 61 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20  ta, causing the 
30a60 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2c 0a  file to shrink,.
30a70 77 69 74 68 6f 75 74 20 72 65 62 75 69 6c 64 69  without rebuildi
30a80 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ng the entire da
30a90 74 61 62 61 73 65 20 75 73 69 6e 67 20 56 41 43  tabase using VAC
30aa0 55 55 4d 2e 20 20 48 6f 77 65 76 65 72 2c 20 75  UUM.  However, u
30ab0 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75 75  sing.[auto_vacuu
30ac0 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f 20 65  m] can lead to e
30ad0 78 74 72 61 20 64 61 74 61 62 61 73 65 20 66 69  xtra database fi
30ae0 6c 65 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e  le fragmentation
30af0 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f 76 61 63  .  And [auto_vac
30b00 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63 6f  uum].does not co
30b10 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c 79 20  mpact partially 
30b20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f 66 20  filled pages of 
30b30 74 68 65 20 64 61 74 61 62 61 73 65 20 61 73 20  the database as 
30b40 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c 2f  VACUUM does...</
30b50 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  p>...<tcl>.#####
30b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30ba0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
30bb0 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69  n {INDEXED BY} i
30bc0 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58  ndexedby {{INDEX
30bd0 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45  ED BY} {NOT INDE
30be0 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70  XED}}..</tcl>.<p
30bf0 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59  >^The INDEXED BY
30c00 20 70 68 72 61 73 65 20 66 6f 72 63 65 73 20 74   phrase forces t
30c10 68 65 20 5b 53 51 4c 69 74 65 20 71 75 65 72 79  he [SQLite query
30c20 20 70 6c 61 6e 6e 65 72 5d 20 74 6f 20 75 73 65   planner] to use
30c30 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20 6e 61   a.particular na
30c40 6d 65 64 20 69 6e 64 65 78 20 6f 6e 20 61 20 5b  med index on a [
30c50 44 45 4c 45 54 45 5d 2c 20 5b 53 45 4c 45 43 54  DELETE], [SELECT
30c60 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73  ], or [UPDATE] s
30c70 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 49 4e  tatement..The IN
30c80 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
30c90 69 73 20 61 6e 20 53 51 4c 69 74 65 20 65 78 74  is an SQLite ext
30ca0 65 6e 73 69 6f 6e 20 61 6e 64 0a 69 73 20 6e 6f  ension and.is no
30cb0 74 20 70 6f 72 74 61 62 6c 65 20 74 6f 20 6f 74  t portable to ot
30cc0 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
30cd0 20 65 6e 67 69 6e 65 73 2e 3c 2f 70 3e 0a 0a 3c   engines.</p>..<
30ce0 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75  tcl>.RecursiveBu
30cf0 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c  bbleDiagram qual
30d00 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
30d10 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
30d20 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 79 79   "INDEXED BY <yy
30d30 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c  term>index-name<
30d40 2f 79 79 74 65 72 6d 3e 22 20 70 68 72 61 73 65  /yyterm>" phrase
30d50 20 73 70 65 63 69 66 69 65 73 20 0a 74 68 61 74   specifies .that
30d60 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78   the named index
30d70 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20 69 6e  .must be used in
30d80 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75   order to look u
30d90 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20  p values on the 
30da0 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e  preceding table.
30db0 0a 5e 49 66 20 3c 79 79 74 65 72 6d 3e 69 6e 64  .^If <yyterm>ind
30dc0 65 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ex-name</yyterm>
30dd0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20   does not exist 
30de0 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65  or cannot be use
30df0 64 20 0a 66 6f 72 20 74 68 65 20 71 75 65 72 79  d .for the query
30e00 2c 20 74 68 65 6e 20 74 68 65 20 70 72 65 70 61  , then the prepa
30e10 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51  ration of the SQ
30e20 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c  L statement fail
30e30 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e  s..^(The "NOT IN
30e40 44 45 58 45 44 22 20 63 6c 61 75 73 65 20 73 70  DEXED" clause sp
30e50 65 63 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20  ecifies that no 
30e60 69 6e 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75  index shall be u
30e70 73 65 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69  sed when.accessi
30e80 6e 67 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  ng the preceding
30e90 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e   table, includin
30ea0 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65  g implied indice
30eb0 73 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49 51  s create by.UNIQ
30ec0 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
30ed0 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  EY constraints. 
30ee0 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 5b 72   However, the [r
30ef0 6f 77 69 64 5d 0a 63 61 6e 20 73 74 69 6c 6c 20  owid].can still 
30f00 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f 6b 20  be used to look 
30f10 75 70 20 65 6e 74 72 69 65 73 20 65 76 65 6e 20  up entries even 
30f20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45 58 45  when "NOT INDEXE
30f30 44 22 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  D" is specified.
30f40 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20  )^</p>..<p>Some 
30f50 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
30f60 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e  ines provide non
30f70 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74 22  -standard "hint"
30f80 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69 63   mechanisms whic
30f90 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  h.can be used to
30fa0 20 67 69 76 65 20 74 68 65 20 71 75 65 72 79 20   give the query 
30fb0 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73 20  optimizer clues 
30fc0 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69 63  about what indic
30fd0 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73 65  es it should.use
30fe0 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61   for a particula
30ff0 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  r statement.  Th
31000 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73  e INDEX BY claus
31010 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 0a  e of SQLite is .
31020 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68  <em>not</em> a h
31030 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  inting mechanism
31040 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20 6e   and it should n
31050 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 73 75  ot be used as su
31060 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44  ch..^The INDEXED
31070 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65 73 20   BY clause does 
31080 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f 70 74  not give the opt
31090 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61 62 6f  imizer hints abo
310a0 75 74 20 77 68 69 63 68 20 69 6e 64 65 78 0a 74  ut which index.t
310b0 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65 73 20  o use; it gives 
310c0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 61 20  the optimizer a 
310d0 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66 20 77  requirement of w
310e0 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20 75 73  hich index to us
310f0 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65 72 79  e..^If the query
31100 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 75 6e   optimizer is un
31110 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65 20  able to use the 
31120 69 6e 64 65 78 20 73 70 65 63 69 66 69 65 64 20  index specified 
31130 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42 59 20  by the.INDEX BY 
31140 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
31150 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61 69 6c   query will fail
31160 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c   with an error.<
31170 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45  /p>..<p>The INDE
31180 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
31190 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e   <em>not</em> in
311a0 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
311b0 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70 65 72  n tuning.the per
311c0 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20 71 75  formance of a qu
311d0 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65 6e 74  ery.  The intent
311e0 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45 44 20   of the INDEXED 
311f0 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74 6f 20  BY clause is.to 
31200 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69 6d 65  raise a run-time
31210 20 65 72 72 6f 72 20 69 66 20 61 20 73 63 68 65   error if a sche
31220 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63 68 20  ma change, such 
31230 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63  as dropping or.c
31240 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78  reating an index
31250 2c 20 63 61 75 73 65 73 20 74 68 65 20 71 75 65  , causes the que
31260 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20 74 69  ry plan for a ti
31270 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71 75 65  me-sensitive que
31280 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20 54  ry.to change.  T
31290 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
312a0 61 75 73 65 20 69 73 20 64 65 73 69 67 6e 65 64  ause is designed
312b0 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63 74 0a   to help detect.
312c0 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75 65 72  undesirable quer
312d0 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73 20 64  y plan changes d
312e0 75 72 69 6e 67 20 72 65 67 72 65 73 73 69 6f 6e  uring regression
312f0 20 74 65 73 74 69 6e 67 2e 0a 41 70 70 6c 69 63   testing..Applic
31300 61 74 69 6f 6e 20 0a 64 65 76 65 6c 6f 70 65 72  ation .developer
31310 73 20 61 72 65 20 61 64 6d 6f 6e 69 73 68 65 64  s are admonished
31320 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65   to omit all use
31330 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20 64   of INDEXED BY d
31340 75 72 69 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f  uring.applicatio
31350 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d  n design, implem
31360 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e  entation, testin
31370 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20  g, and tuning.  
31380 49 66 0a 49 4e 44 45 58 45 44 20 42 59 20 69 73  If.INDEXED BY is
31390 20 74 6f 20 62 65 20 75 73 65 64 20 61 74 20 61   to be used at a
313a0 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65  ll, it should be
313b0 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
313c0 20 76 65 72 79 0a 65 6e 64 20 6f 66 20 74 68 65   very.end of the
313d0 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f   development pro
313e0 63 65 73 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69  cess when "locki
313f0 6e 67 20 64 6f 77 6e 22 20 61 20 64 65 73 69 67  ng down" a desig
31400 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20  n.</p>..<h3>See 
31410 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e  Also:</h3>..<ol>
31420 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 71 75 65  .<li><p>The [que
31430 72 79 20 70 6c 61 6e 6e 65 72 20 63 68 65 63 6b  ry planner check
31440 6c 69 73 74 5d 20 64 65 73 63 72 69 62 65 73 20  list] describes 
31450 73 74 65 70 73 20 74 68 61 74 20 61 70 70 6c 69  steps that appli
31460 63 61 74 69 6f 6e 0a 64 65 76 65 6c 6f 70 65 72  cation.developer
31470 73 20 73 68 6f 75 6c 64 20 66 6f 6c 6c 6f 77 69  s should followi
31480 6e 67 20 74 6f 20 68 65 6c 70 20 72 65 73 6f 6c  ng to help resol
31490 76 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  ve query planner
314a0 20 70 72 6f 62 6c 65 6d 73 2e 0a 4e 6f 74 69 63   problems..Notic
314b0 65 20 74 68 65 20 74 68 61 74 20 74 68 65 20 75  e the that the u
314c0 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59  se of INDEXED BY
314d0 20 69 73 20 61 20 6c 61 73 74 20 72 65 73 6f 72   is a last resor
314e0 74 2c 20 74 6f 20 62 65 20 75 73 65 64 20 6f 6e  t, to be used on
314f0 6c 79 0a 77 68 65 6e 20 61 6c 6c 20 6f 74 68 65  ly.when all othe
31500 72 20 6d 65 61 73 75 72 65 73 20 66 61 69 6c 2e  r measures fail.
31510 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5b 75 70  </p>..<li><p>[up
31520 6c 75 73 63 6f 6e 74 72 6f 6c 7c 54 68 65 20 75  luscontrol|The u
31530 6e 61 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f  nary "+" operato
31540 72 5d 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74  r].can be used t
31550 6f 20 64 69 73 71 75 61 6c 69 66 79 20 74 65 72  o disqualify ter
31560 6d 73 20 69 6e 20 74 68 65 20 57 48 45 52 45 20  ms in the WHERE 
31570 63 6c 61 75 73 65 20 66 72 6f 6d 20 75 73 65 20  clause from use 
31580 62 79 20 69 6e 64 69 63 65 73 2e 0a 43 61 72 65  by indices..Care
31590 66 75 6c 20 75 73 65 20 6f 66 20 75 6e 61 72 79  ful use of unary
315a0 20 2b 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73   + can sometimes
315b0 20 68 65 6c 70 20 70 72 65 76 65 6e 74 20 74 68   help prevent th
315c0 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
315d0 66 72 6f 6d 0a 63 68 6f 6f 73 69 6e 67 20 61 20  from.choosing a 
315e0 70 6f 6f 72 20 69 6e 64 65 78 20 77 69 74 68 6f  poor index witho
315f0 75 74 20 72 65 73 74 72 69 63 74 69 6e 67 20 69  ut restricting i
31600 74 20 74 6f 20 75 73 69 6e 67 20 6f 6e 65 20 73  t to using one s
31610 70 65 63 69 66 69 63 20 69 6e 64 65 78 2e 0a 43  pecific index..C
31620 61 72 65 66 75 6c 20 70 6c 61 63 65 6d 65 6e 74  areful placement
31630 20 6f 66 20 75 6e 61 72 79 20 2b 20 6f 70 65 72   of unary + oper
31640 61 74 6f 72 73 20 69 73 20 61 20 62 65 74 74 65  ators is a bette
31650 72 20 6d 65 74 68 6f 64 20 66 6f 72 20 63 6f 6e  r method for con
31660 74 72 6f 6c 6c 69 6e 67 20 0a 77 68 69 63 68 20  trolling .which 
31670 69 6e 64 69 63 65 73 20 61 72 65 20 75 73 65 64  indices are used
31680 20 62 79 20 61 20 71 75 65 72 79 2e 3c 2f 70 3e   by a query.</p>
31690 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 73 71  ..<li><p>The [sq
316a0 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75  lite3_stmt_statu
316b0 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72  s()] C/C++ inter
316c0 66 61 63 65 20 74 6f 67 65 74 68 65 72 20 77 69  face together wi
316d0 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53  th the.[SQLITE_S
316e0 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43  TMTSTATUS_FULLSC
316f0 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51  AN_STEP] and [SQ
31700 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
31710 53 4f 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20  SORT] verbs.can 
31720 62 65 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  be used to detec
31730 74 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68  t at run-time wh
31740 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  en an SQL statem
31750 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e  ent is not.makin
31760 67 20 65 66 66 65 63 74 69 76 65 20 75 73 65 20  g effective use 
31770 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e  of indices.  Man
31780 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d  y applications m
31790 61 79 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65  ay prefer to.use
317a0 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74   the [sqlite3_st
317b0 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74  mt_status()] int
317c0 65 72 66 61 63 65 20 74 6f 20 64 65 74 65 63 74  erface to detect
317d0 20 69 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61   index misuse.ra
317e0 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e  ther than the IN
317f0 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
31800 64 65 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c  described here.<
31810 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e  /p>.</ol>..<tcl>
31820 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
31830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
31870 20 41 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f   A list of keywo
31880 72 64 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b  rds.  A asterisk
31890 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68   occurs after th
318a0 65 20 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20  e keyword if it 
318b0 69 73 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c  is on.# the fall
318c0 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74  back list..#.set
318d0 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c   keyword_list [l
318e0 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 0a  sort {.   ABORT.
318f0 20 20 20 41 43 54 49 4f 4e 0a 20 20 20 41 44 44     ACTION.   ADD
31900 0a 20 20 20 41 46 54 45 52 0a 20 20 20 41 4c 4c  .   AFTER.   ALL
31910 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41  .   ALTER.   ANA
31920 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20 20 20 41  LYZE.   AND.   A
31930 53 0a 20 20 20 41 53 43 0a 20 20 20 41 54 54 41  S.   ASC.   ATTA
31940 43 48 0a 20 20 20 41 55 54 4f 49 4e 43 52 45 4d  CH.   AUTOINCREM
31950 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 0a 20 20  ENT.   BEFORE.  
31960 20 42 45 47 49 4e 0a 20 20 20 42 45 54 57 45 45   BEGIN.   BETWEE
31970 4e 0a 20 20 20 42 59 0a 20 20 20 43 41 53 43 41  N.   BY.   CASCA
31980 44 45 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41  DE.   CASE.   CA
31990 53 54 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43  ST.   CHECK.   C
319a0 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e  OLLATE.   COLUMN
319b0 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f  .   COMMIT.   CO
319c0 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e 53 54 52  NFLICT.   CONSTR
319d0 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20  AINT.   CREATE. 
319e0 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45    CROSS.   CURRE
319f0 4e 54 5f 44 41 54 45 0a 20 20 20 43 55 52 52 45  NT_DATE.   CURRE
31a00 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55 52 52 45  NT_TIME.   CURRE
31a10 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20 20  NT_TIMESTAMP.   
31a20 44 41 54 41 42 41 53 45 0a 20 20 20 44 45 46 41  DATABASE.   DEFA
31a30 55 4c 54 0a 20 20 20 44 45 46 45 52 52 45 44 0a  ULT.   DEFERRED.
31a40 20 20 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20     DEFERRABLE.  
31a50 20 44 45 4c 45 54 45 0a 20 20 20 44 45 53 43 0a   DELETE.   DESC.
31a60 20 20 20 44 45 54 41 43 48 0a 20 20 20 44 49 53     DETACH.   DIS
31a70 54 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20  TINCT.   DROP.  
31a80 20 45 4e 44 0a 20 20 20 45 41 43 48 0a 20 20 20   END.   EACH.   
31a90 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20  ELSE.   ESCAPE. 
31aa0 20 20 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c    EXCEPT.   EXCL
31ab0 55 53 49 56 45 0a 20 20 20 45 58 49 53 54 53 0a  USIVE.   EXISTS.
31ac0 20 20 20 45 58 50 4c 41 49 4e 0a 20 20 20 46 41     EXPLAIN.   FA
31ad0 49 4c 0a 20 20 20 46 4f 52 0a 20 20 20 46 4f 52  IL.   FOR.   FOR
31ae0 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20  EIGN.   FROM.   
31af0 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20 20 20  FULL.   GLOB.   
31b00 47 52 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a  GROUP.   HAVING.
31b10 20 20 20 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a     IF.   IGNORE.
31b20 20 20 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 20     IMMEDIATE.   
31b30 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49  IN.   INDEX.   I
31b40 4e 44 45 58 45 44 0a 20 20 20 49 4e 49 54 49 41  NDEXED.   INITIA
31b50 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20  LLY.   INNER.   
31b60 49 4e 53 45 52 54 0a 20 20 20 49 4e 53 54 45 41  INSERT.   INSTEA
31b70 44 0a 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20  D.   INTERSECT. 
31b80 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20    INTO.   IS.   
31b90 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20  ISNULL.   JOIN. 
31ba0 20 20 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20 20    KEY.   LEFT.  
31bb0 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20   LIKE.   LIMIT. 
31bc0 20 20 4d 41 54 43 48 0a 20 20 20 4e 41 54 55 52    MATCH.   NATUR
31bd0 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a  AL.   NO.   NOT.
31be0 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55     NOTNULL.   NU
31bf0 4c 4c 0a 20 20 20 4f 46 0a 20 20 20 4f 46 46 53  LL.   OF.   OFFS
31c00 45 54 0a 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20  ET.   ON.   OR. 
31c10 20 20 4f 52 44 45 52 0a 20 20 20 4f 55 54 45 52    ORDER.   OUTER
31c20 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50 52 41 47  .   PLAN.   PRAG
31c30 4d 41 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20  MA.   PRIMARY.  
31c40 20 51 55 45 52 59 0a 20 20 20 52 41 49 53 45 0a   QUERY.   RAISE.
31c50 20 20 20 52 45 43 55 52 53 49 56 45 0a 20 20 20     RECURSIVE.   
31c60 52 45 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45  REFERENCES.   RE
31c70 47 45 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a  GEXP.   REINDEX.
31c80 20 20 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45     RELEASE.   RE
31c90 4e 41 4d 45 0a 20 20 20 52 45 50 4c 41 43 45 0a  NAME.   REPLACE.
31ca0 20 20 20 52 45 53 54 52 49 43 54 0a 20 20 20 52     RESTRICT.   R
31cb0 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b  IGHT.   ROLLBACK
31cc0 0a 20 20 20 52 4f 57 0a 20 20 20 53 41 56 45 50  .   ROW.   SAVEP
31cd0 4f 49 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20  OINT.   SELECT. 
31ce0 20 20 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20    SET.   TABLE. 
31cf0 20 20 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52    TEMP.   TEMPOR
31d00 41 52 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54  ARY.   THEN.   T
31d10 4f 0a 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e  O.   TRANSACTION
31d20 0a 20 20 20 54 52 49 47 47 45 52 0a 20 20 20 55  .   TRIGGER.   U
31d30 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20  NION.   UNIQUE. 
31d40 20 20 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e    UPDATE.   USIN
31d50 47 0a 20 20 20 56 41 43 55 55 4d 0a 20 20 20 56  G.   VACUUM.   V
31d60 41 4c 55 45 53 0a 20 20 20 56 49 45 57 0a 20 20  ALUES.   VIEW.  
31d70 20 56 49 52 54 55 41 4c 0a 20 20 20 57 49 54 48   VIRTUAL.   WITH
31d80 0a 20 20 20 57 49 54 48 4f 55 54 0a 20 20 20 57  .   WITHOUT.   W
31d90 48 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a  HEN.   WHERE.}].
31da0 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63  .hd_puts {<DIV c
31db0 6c 61 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f  lass="pdf_sectio
31dc0 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51  n">}.Section {SQ
31dd0 4c 69 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b  Lite Keywords} k
31de0 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b  eywords {{*SQL k
31df0 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79  eyword} {SQL key
31e00 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20  words}}.hd_puts 
31e10 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a  {</DIV>}.</tcl>.
31e20 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e  .<p>The SQL stan
31e30 64 61 72 64 20 73 70 65 63 69 66 69 65 73 20 61  dard specifies a
31e40 20 68 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   huge number of 
31e50 6b 65 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d  keywords which m
31e60 61 79 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61  ay not.be used a
31e70 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  s the names of t
31e80 61 62 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20  ables, indices, 
31e90 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61 73  columns, databas
31ea0 65 73 2c 20 75 73 65 72 2d 64 65 66 69 6e 65 64  es, user-defined
31eb0 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c  .functions, coll
31ec0 61 74 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20  ations, virtual 
31ed0 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f  table modules, o
31ee0 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65  r any other name
31ef0 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69  d object..The li
31f00 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 69  st of keywords i
31f10 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66  s so long that f
31f20 65 77 20 70 65 6f 70 6c 65 20 63 61 6e 20 72 65  ew people can re
31f30 6d 65 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e  member them all.
31f40 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f  .For most SQL co
31f50 64 65 2c 20 79 6f 75 72 20 73 61 66 65 73 74 20  de, your safest 
31f60 62 65 74 20 69 73 20 74 6f 20 6e 65 76 65 72 20  bet is to never 
31f70 75 73 65 20 61 6e 79 20 45 6e 67 6c 69 73 68 20  use any English 
31f80 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64 20 61 73  language.word as
31f90 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 75   the name of a u
31fa0 73 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65  ser-defined obje
31fb0 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79  ct.</p>..<p>If y
31fc0 6f 75 20 77 61 6e 74 20 74 6f 20 75 73 65 20 61  ou want to use a
31fd0 20 6b 65 79 77 6f 72 64 20 61 73 20 61 20 6e 61   keyword as a na
31fe0 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f 20  me, you need to 
31ff0 71 75 6f 74 65 20 69 74 2e 20 20 54 68 65 72 65  quote it.  There
32000 0a 61 72 65 20 66 6f 75 72 20 77 61 79 73 20 6f  .are four ways o
32010 66 20 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72  f quoting keywor
32020 64 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70  ds in SQLite:</p
32030 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f  >..<p>.<blockquo
32040 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e  te>.<table>.<tr>
32050 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
32060 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f  "><b>'keyword'</
32070 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  b></td><td width
32080 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64  ="20"></td>..<td
32090 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 73  >^A keyword in s
320a0 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 73 20  ingle quotes is 
320b0 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
320c0 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
320d0 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
320e0 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c  p"><b>"keyword"<
320f0 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
32100 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
32110 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74  d in double-quot
32120 65 73 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  es is an identif
32130 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a  ier.</td></tr>..
32140 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
32150 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65  "top"><b>&#91;ke
32160 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f  yword&#93;</b></
32170 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
32180 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63  d>^A keyword enc
32190 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65 20  losed in square 
321a0 62 72 61 63 6b 65 74 73 20 69 73 20 0a 20 20 20  brackets is .   
321b0 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69       an identifi
321c0 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  er.  This is not
321d0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20   standard SQL.  
321e0 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63  This quoting mec
321f0 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69  hanism.        i
32200 73 20 75 73 65 64 20 62 79 20 4d 53 20 41 63 63  s used by MS Acc
32210 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76  ess and SQL Serv
32220 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64  er and is includ
32230 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72  ed in SQLite for
32240 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69  .        compati
32250 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72  bility.</td></tr
32260 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
32270 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36  gn="top"><b>&#96
32280 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62  ;keyword&#96;</b
32290 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
322a0 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
322b0 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72 61 76  enclosed in grav
322c0 65 20 61 63 63 65 6e 74 73 20 28 41 53 43 49 49  e accents (ASCII
322d0 20 63 6f 64 65 20 39 36 29 20 69 73 20 0a 20 20   code 96) is .  
322e0 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66        an identif
322f0 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  ier.  This is no
32300 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20  t standard SQL. 
32310 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65   This quoting me
32320 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20  chanism.        
32330 69 73 20 75 73 65 64 20 62 79 20 4d 79 53 51 4c  is used by MySQL
32340 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64   and is included
32350 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20   in SQLite for. 
32360 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69         compatibi
32370 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  lity.</td></tr>.
32380 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
32390 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  quote>.</p>..<p>
323a0 46 6f 72 20 72 65 73 69 6c 69 65 6e 63 65 20 77  For resilience w
323b0 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77  hen confronted w
323c0 69 74 68 20 68 69 73 74 6f 72 69 63 61 6c 20 53  ith historical S
323d0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 53  QL statements, S
323e0 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74  QLite.will somet
323f0 69 6d 65 73 20 62 65 6e 64 20 74 68 65 20 71 75  imes bend the qu
32400 6f 74 69 6e 67 20 72 75 6c 65 73 20 61 62 6f 76  oting rules abov
32410 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  e:</p>..<ul>.<li
32420 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72  ><p>^If a keywor
32430 64 20 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74  d in single.quot
32440 65 73 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27  es (ex: <b>'key'
32450 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62  </b> or <b>'glob
32460 27 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69  '</b>) is used i
32470 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72  n a context wher
32480 65 0a 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  e.an identifier 
32490 69 73 20 61 6c 6c 6f 77 65 64 20 62 75 74 20 77  is allowed but w
324a0 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69  here a string li
324b0 74 65 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c  teral is not all
324c0 6f 77 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 74  owed, then.the t
324d0 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f  oken is understo
324e0 6f 64 20 74 6f 20 62 65 20 61 6e 20 69 64 65 6e  od to be an iden
324f0 74 69 66 69 65 72 20 69 6e 73 74 65 61 64 20 6f  tifier instead o
32500 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  f a string liter
32510 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  al..</p></li>..<
32520 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77  li><p>^If a keyw
32530 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75  ord in double.qu
32540 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65  otes (ex: <b>"ke
32550 79 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c  y"</b> or <b>"gl
32560 6f 62 22 3c 2f 62 3e 29 20 69 73 20 75 73 65 64  ob"</b>) is used
32570 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68   in a context wh
32580 65 72 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere.it cannot be
32590 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20   resolved to an 
325a0 69 64 65 6e 74 69 66 69 65 72 20 62 75 74 20 77  identifier but w
325b0 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69  here a string li
325c0 74 65 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64  teral.is allowed
325d0 2c 20 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e  , then the token
325e0 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74   is understood t
325f0 6f 20 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69  o be a string li
32600 74 65 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66  teral instead.of
32610 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c   an identifier.<
32620 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a  /p></li>.</ul>..
32630 3c 70 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20 61  <p>Programmers a
32640 72 65 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74  re cautioned not
32650 20 74 6f 20 75 73 65 20 74 68 65 20 74 77 6f 20   to use the two 
32660 65 78 63 65 70 74 69 6f 6e 73 20 64 65 73 63 72  exceptions descr
32670 69 62 65 64 20 69 6e 0a 74 68 65 20 70 72 65 76  ibed in.the prev
32680 69 6f 75 73 20 62 75 6c 6c 65 74 73 2e 20 20 57  ious bullets.  W
32690 65 20 65 6d 70 68 61 73 69 7a 65 20 74 68 61 74  e emphasize that
326a0 20 74 68 65 79 20 65 78 69 73 74 20 6f 6e 6c 79   they exist only
326b0 20 73 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64   so that old.and
326c0 20 69 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20   ill-formed SQL 
326d0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20  statements will 
326e0 72 75 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20 20  run correctly.  
326f0 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
32700 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20  of.SQLite might 
32710 72 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73  raise errors ins
32720 74 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e  tead of acceptin
32730 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a  g the malformed.
32740 73 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72  statements cover
32750 65 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74  ed by the except
32760 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a  ions above.</p>.
32770 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73  .<p>.SQLite adds
32780 20 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72   new keywords fr
32790 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20  om time to time 
327a0 77 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e  when it takes on
327b0 20 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53   new features..S
327c0 6f 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75  o to prevent you
327d0 72 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e  r code from bein
327e0 67 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75  g broken by futu
327f0 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c  re enhancements,
32800 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d   you should.norm
32810 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69  ally quote any i
32820 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69  dentifier that i
32830 73 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e  s an English lan
32840 67 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e  guage word, even
32850 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68   if.you do not h
32860 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ave to..</p>..<p
32870 3e 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77  >.The list below
32880 20 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69   shows all possi
32890 62 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65  ble keywords use
328a0 64 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f  d by any build o
328b0 66 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c  f.SQLite regardl
328c0 65 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d  ess of [compile-
328d0 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20  time options].  
328e0 0a 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65  .Most reasonable
328f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20   configurations 
32900 75 73 65 20 6d 6f 73 74 20 6f 72 20 61 6c 6c 20  use most or all 
32910 6f 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64  of these keyword
32920 73 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77  s,.but some keyw
32930 6f 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74  ords may be omit
32940 74 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e  ted when SQL lan
32950 67 75 61 67 65 20 66 65 61 74 75 72 65 73 20 61  guage features a
32960 72 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52  re.disabled..^(R
32970 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
32980 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
32990 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79  nfiguration, any
329a0 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74   identifier that
329b0 20 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66   is not on.the f
329c0 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64  ollowing <tcl>hd
329d0 5f 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24  _puts [llength $
329e0 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74  keyword_list]</t
329f0 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74  cl> element.list
32a00 20 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72   is not a keywor
32a10 64 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72  d to the SQL par
32a20 73 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c  ser in SQLite:.<
32a30 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
32a40 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
32a50 31 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61  100%"><tr>.<td a
32a60 6c 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69  lign="left" vali
32a70 67 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22  gn="top" width="
32a80 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20  20%">.<tcl>.set 
32a90 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77  n [llength $keyw
32aa0 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43  ord_list].set nC
32ab0 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65  ol 5.set nRow [e
32ac0 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31  xpr {($n+$nCol-1
32ad0 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20  )/$nCol}].set i 
32ae0 30 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24  0.foreach word $
32af0 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20  keyword_list {. 
32b00 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20   if {$i==$nRow} 
32b10 7b 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c  {.    hd_puts "<
32b20 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c  /td><td valign=\
32b30 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c  "top\" align=\"l
32b40 65 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30  eft\" width=\"20
32b50 25 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20  %\">".    set i 
32b60 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  1.  } else {.   
32b70 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64   incr i.  }.  hd
32b80 5f 70 75 74 73 20 22 24 77 6f 72 64 3c 62 72 3e  _puts "$word<br>
32b90 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  \n".}.</tcl>.</t
32ba0 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c  d></tr></table><
32bb0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a     /blockquote>)^.