Documentation Source Text

Hex Artifact Content
Login

Artifact 797bd95f46c5d83591982881fd13d943b5444803:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 7b 57 49 54 48 20 63 6c 61 75  .    {{WITH clau
03d0: 73 65 7d 20 77 69 74 68 63 6c 61 75 73 65 7d 0a  se} withclause}.
03e0: 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d      {comment com
03f0: 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c 41  ment}.    {EXPLA
0400: 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20 20  IN explain}.    
0410: 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  {expression expr
0420: 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54 52  }.    {{BEGIN TR
0430: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
0440: 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43 4f  action}.    {{CO
0450: 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e  MMIT TRANSACTION
0460: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f  } transaction CO
0470: 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44 20  MMIT}.    {{END 
0480: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0490: 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54 7d  nsaction COMMIT}
04a0: 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20  .    {{ROLLBACK 
04b0: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
04c0: 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41 43  nsaction ROLLBAC
04d0: 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49 4e  K}.    {SAVEPOIN
04e0: 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20 20  T savepoint}.   
04f0: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
0500: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
0510: 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20 7b  SAVEPOINT}.    {
0520: 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68 74  PRAGMA pragma.ht
0530: 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f 4e  ml}.    {{ON CON
0540: 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
0550: 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43 52  nflict}.    {{CR
0560: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0570: 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52 4f  eview}.    {{DRO
0580: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
0590: 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20 54  }.    {{CREATE T
05a0: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
05b0: 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52 4f  igger}.    {{DRO
05c0: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
05d0: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41 54  rigger}.    {{AT
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
05f0: 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45 54  ttach}.    {{DET
0600: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
0610: 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45 49  tach}.      {REI
0620: 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20  NDEX reindex}.  
0630: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
0640: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20   altertable}.   
0650: 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c   {{ANALYZE} anal
0660: 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58  yze}.    {{INDEX
0670: 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
0680: 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74  }.    {{aggregat
0690: 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e functions} agg
06a0: 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20  func aggfunc}.  
06b0: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
06c0: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72  ns} corefunc cor
06d0: 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74  efunc}.    {{dat
06e0: 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
06f0: 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64  ions} datefunc d
0700: 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65  atefunc}.    {ke
0710: 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20  ywords keywords 
0720: 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
0730: 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73    }.  set lang_s
0740: 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78  ection_break [ex
0750: 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c  pr {([llength $l
0760: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
0770: 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61  ]+2)/3}].  forea
0780: 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73  ch {section} [ls
0790: 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69  ort -index 0 -di
07a0: 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73  ctionary $lang_s
07b0: 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20  ection_list] {. 
07c0: 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c   foreach {s_titl
07d0: 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73  e s_tag s_kw} $s
07e0: 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b  ection {}.  if {
07f0: 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20  $s_kw == ""} {. 
0800: 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74     set s_kw $s_t
0810: 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24  itle.  }.  if {$
0820: 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68  s_tag=="pragma.h
0830: 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  tml"} {.    set 
0840: 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65  url $s_tag.  } e
0850: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72  lse {.    set ur
0860: 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74  l lang_$s_tag.ht
0870: 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f  ml.  }.  hd_reso
0880: 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77  lve "<li>\[$s_kw
0890: 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e  |$s_title\]</li>
08a0: 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20  ".  incr i.  if 
08b0: 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69  {$i==$lang_secti
08c0: 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d  on_break || $i==
08d0: 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f  2*$lang_section_
08e0: 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f  break} {.    hd_
08f0: 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e  puts "</ul></td>
0900: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
0910: 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c  \"><ul>".  }.}.<
0920: 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e  /tcl>.</ul></td>
0930: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  </tr></table>..<
0940: 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20  p>^The routines 
0950: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0960: 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33  _v2()], [sqlite3
0970: 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71  _prepare()],.[sq
0980: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
0990: 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  )], [sqlite3_pre
09a0: 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b  pare16_v2()], .[
09b0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c  sqlite3_exec()],
09c0: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65   and [sqlite3_ge
09d0: 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70  t_table()] accep
09e0: 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  t.an SQL stateme
09f0: 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d  nt list (sql-stm
0a00: 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73  t-list) which is
0a10: 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70   a semicolon-sep
0a20: 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73  arated.list of s
0a30: 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  tatements.</p>..
0a40: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
0a50: 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74  am sql-stmt-list
0a60: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20  </tcl>..<p>Each 
0a70: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  SQL statement in
0a80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c   the statement l
0a90: 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ist is an instan
0aa0: 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77  ce of the.follow
0ab0: 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ing:</p>..<tcl>B
0ac0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
0ad0: 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63  -stmt</tcl>..<tc
0ae0: 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72  l>.proc Operator
0af0: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75   {name} {.  retu
0b00: 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  rn "<font color=
0b10: 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67  \"#2c2cf0\"><big
0b20: 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f  >$name</big></fo
0b30: 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74  nt>".}.proc Nont
0b40: 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b  erminal {name} {
0b50: 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66  .  return "<i><f
0b60: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33  ont color=\"#ff3
0b70: 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e  434\">$name</fon
0b80: 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b  t></i>".}.proc K
0b90: 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a  eyword {name} {.
0ba0: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0bb0: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0bc0: 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a  ">$name</font>".
0bd0: 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b  }.proc Example {
0be0: 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74  text} {.  hd_put
0bf0: 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  s "<blockquote><
0c00: 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c  pre>$text</pre><
0c10: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a  /blockquote>".}.
0c20: 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e  .proc Section {n
0c30: 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72  ame label keywor
0c40: 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44  ds} {.  global D
0c50: 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61  OC.  hd_close_ma
0c60: 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69  in.  hd_open_mai
0c70: 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74  n lang_$label.ht
0c80: 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22  ml.  hd_header "
0c90: 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e  SQLite Query Lan
0ca0: 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44  guage: $name" $D
0cb0: 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e  OC/pages/lang.in
0cc0: 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f  .  eval hd_keywo
0cd0: 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20  rds $keywords.  
0ce0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65  if {[lsearch $ke
0cf0: 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d  ywords $name] ==
0d00: 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20   -1 && [lsearch 
0d10: 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65  $keywords *$name
0d20: 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65  ] == -1} {.    e
0d30: 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
0d40: 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20  { $name }.  }.  
0d50: 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69  hd_puts {<h1 ali
0d60: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20  gn="center">SQL 
0d70: 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79  As Understood By
0d80: 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20   SQLite</h1>}.  
0d90: 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68  hd_puts {<p><a h
0da0: 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e  ref="lang.html">
0db0: 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20  [Top]</a></p>}. 
0dc0: 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e   hd_puts "<h2>$n
0dd0: 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23  ame</h2>".}..###
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e20: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0e30: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0e40: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0e50: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41  ALTER TABLE} {*A
0e60: 4c 54 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  LTER}}..Recursiv
0e70: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
0e80: 6c 74 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  lter-table-stmt.
0e90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69 74  </tcl>..<p>SQLit
0ea0: 65 20 73 75 70 70 6f 72 74 73 20 61 20 6c 69 6d  e supports a lim
0eb0: 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20 41  ited subset of A
0ec0: 4c 54 45 52 20 54 41 42 4c 45 2e 0a 54 68 65 20  LTER TABLE..The 
0ed0: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
0ee0: 61 6e 64 20 69 6e 20 53 51 4c 69 74 65 20 61 6c  and in SQLite al
0ef0: 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f  lows the user to
0f00: 20 72 65 6e 61 6d 65 20 61 20 74 61 62 6c 65 0a   rename a table.
0f10: 6f 72 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  or to add a new 
0f20: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
0f30: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 3c 2f 70  sting table..</p
0f40: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f50: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 69 73  AME TO syntax is
0f60: 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d 65 20   used to rename 
0f70: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
0f80: 66 69 65 64 20 62 79 20 0a 3c 69 3e 26 23 39 31  fied by .<i>&#91
0f90: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26  ;database-name.&
0fa0: 23 39 33 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  #93;table-name</
0fb0: 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62  i> to <i>new-tab
0fc0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54  le-name</i>.)^.T
0fd0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e  his command .can
0fe0: 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d  not be used to m
0ff0: 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77  ove a table betw
1000: 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  een attached dat
1010: 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20  abases, only to 
1020: 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20  rename .a table 
1030: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
1040: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
1050: 70 3e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  p> ^If the table
1060: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68   being renamed h
1070: 61 73 20 74 72 69 67 67 65 72 73 20 6f 72 20 69  as triggers or i
1080: 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65  ndices, then the
1090: 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68  se remain.attach
10a0: 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ed to the table 
10b0: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
10c0: 6e 20 72 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77  n renamed.  ^How
10d0: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
10e0: 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66 69  re.any view defi
10f0: 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74  nitions, or stat
1100: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
1110: 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61 74  by triggers that
1120: 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74 61   refer to.the ta
1130: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1140: 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74  d, these are not
1150: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d   automatically m
1160: 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20 74  odified to use t
1170: 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d  he new.table nam
1180: 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72 65  e. If this is re
1190: 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69 67  quired, the trig
11a0: 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65 66  gers or view def
11b0: 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62 65  initions must be
11c0: 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63  .dropped and rec
11d0: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
11e0: 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d 65  e new table name
11f0: 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a   by hand..</p>..
1200: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62  <blockquote><tab
1210: 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65  le border="1" ce
1220: 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a  llpadding="10">.
1230: 3c 74 72 3e 3c 74 64 3e 0a 3c 65 6d 3e 49 6d 70  <tr><td>.<em>Imp
1240: 6f 72 74 61 6e 74 20 4e 6f 74 65 3a 3c 2f 65 6d  ortant Note:</em
1250: 3e 0a 54 68 65 20 27 41 4c 54 45 52 20 54 41 42  >.The 'ALTER TAB
1260: 4c 45 20 2e 2e 2e 20 52 45 4e 41 4d 45 20 54 4f  LE ... RENAME TO
1270: 20 2e 2e 2e 27 20 63 6f 6d 6d 61 6e 64 20 64 6f   ...' command do
1280: 65 73 20 6e 6f 74 20 75 70 64 61 74 65 20 61 63  es not update ac
1290: 74 69 6f 6e 0a 73 74 61 74 65 6d 65 6e 74 73 20  tion.statements 
12a0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
12b0: 6f 72 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  or SELECT statem
12c0: 65 6e 74 73 20 77 69 74 68 69 6e 20 76 69 65 77  ents within view
12d0: 73 2e 0a 49 66 20 74 68 65 20 74 61 62 6c 65 20  s..If the table 
12e0: 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 69 73  being renamed is
12f0: 20 72 65 66 65 72 65 6e 63 65 64 20 66 72 6f 6d   referenced from
1300: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1310: 20 6f 72 20 76 69 65 77 73 2c 0a 74 68 65 6e 20   or views,.then 
1320: 74 68 6f 73 65 20 74 72 69 67 67 65 72 73 20 61  those triggers a
1330: 6e 64 20 76 69 65 77 73 20 6d 75 73 74 20 62 65  nd views must be
1340: 20 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63   dropped and rec
1350: 72 65 61 74 65 64 20 73 65 70 61 72 61 74 65 6c  reated separatel
1360: 79 0a 62 79 20 74 68 65 20 61 70 70 6c 69 63 61  y.by the applica
1370: 74 69 6f 6e 2e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e  tion..</td></tr>
1380: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1390: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 49 66 20 5b  quote>..<p>^If [
13a0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
13b0: 74 72 61 69 6e 74 73 5d 20 61 72 65 20 0a 5b 66  traints] are .[f
13c0: 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61 67  oreign_keys prag
13d0: 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20 77 68  ma | enabled] wh
13e0: 65 6e 20 61 20 74 61 62 6c 65 20 69 73 20 72 65  en a table is re
13f0: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 61 6e 79 0a  named, then any.
1400: 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61  [foreign-key-cla
1410: 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45 53  use | REFERENCES
1420: 20 63 6c 61 75 73 65 73 5d 20 69 6e 20 61 6e 79   clauses] in any
1430: 20 74 61 62 6c 65 20 28 65 69 74 68 65 72 20 74   table (either t
1440: 68 65 0a 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he.table being r
1450: 65 6e 61 6d 65 64 20 6f 72 20 73 6f 6d 65 20 6f  enamed or some o
1460: 74 68 65 72 20 74 61 62 6c 65 29 0a 74 68 61 74  ther table).that
1470: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 74 61   refer to the ta
1480: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1490: 64 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 74  d are modified t
14a0: 6f 20 72 65 66 65 72 20 0a 74 6f 20 74 68 65 20  o refer .to the 
14b0: 72 65 6e 61 6d 65 64 20 74 61 62 6c 65 20 62 79  renamed table by
14c0: 20 69 74 73 20 6e 65 77 20 6e 61 6d 65 2e 0a 0a   its new name...
14d0: 3c 70 3e 20 5e 54 68 65 20 41 44 44 20 43 4f 4c  <p> ^The ADD COL
14e0: 55 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75 73  UMN syntax.is us
14f0: 65 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  ed to add a new 
1500: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
1510: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 54 68  sting table..^Th
1520: 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20  e new column is 
1530: 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64 20  always appended 
1540: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
1550: 65 20 6c 69 73 74 20 6f 66 20 65 78 69 73 74 69  e list of existi
1560: 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20  ng columns..The 
1570: 5b 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c  [column-def] rul
1580: 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 68  e defines the ch
1590: 61 72 61 63 74 65 72 69 73 74 69 63 73 20 6f 66  aracteristics of
15a0: 20 74 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e   the new column.
15b0: 0a 5e 28 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  .^(The new colum
15c0: 6e 20 6d 61 79 20 74 61 6b 65 20 61 6e 79 20 6f  n may take any o
15d0: 66 20 74 68 65 20 66 6f 72 6d 73 20 70 65 72 6d  f the forms perm
15e0: 69 73 73 69 62 6c 65 20 69 6e 20 61 20 5b 43 52  issible in a [CR
15f0: 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
1600: 65 6d 65 6e 74 2c 20 77 69 74 68 20 74 68 65 20  ement, with the 
1610: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69  following restri
1620: 63 74 69 6f 6e 73 3a 29 5e 0a 3c 75 6c 3e 0a 3c  ctions:)^.<ul>.<
1630: 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d  li>^The column m
1640: 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 50 52  ay not have a PR
1650: 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 55 4e 49  IMARY KEY or UNI
1660: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 3c  QUE constraint.<
1670: 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f  /li>.<li>^The co
1680: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76  lumn may not hav
1690: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
16a0: 65 20 6f 66 20 43 55 52 52 45 4e 54 5f 54 49 4d  e of CURRENT_TIM
16b0: 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c  E, CURRENT_DATE,
16c0: 20 0a 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49   .    CURRENT_TI
16d0: 4d 45 53 54 41 4d 50 2c 20 6f 72 20 61 6e 20 65  MESTAMP, or an e
16e0: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70 61 72  xpression in par
16f0: 65 6e 74 68 65 73 65 73 2e 3c 2f 6c 69 3e 0a 3c  entheses.</li>.<
1700: 6c 69 3e 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c  li>^If a NOT NUL
1710: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  L constraint is 
1720: 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
1730: 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20  the column must 
1740: 68 61 76 65 20 61 0a 20 20 20 20 64 65 66 61 75  have a.    defau
1750: 6c 74 20 76 61 6c 75 65 20 6f 74 68 65 72 20 74  lt value other t
1760: 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c 69 3e 5e 49  han NULL..<li>^I
1770: 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  f [foreign key c
1780: 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20  onstraints] are 
1790: 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72  [foreign_keys pr
17a0: 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20  agma | enabled] 
17b0: 61 6e 64 0a 20 20 20 20 61 20 63 6f 6c 75 6d 6e  and.    a column
17c0: 20 77 69 74 68 20 61 20 5b 66 6f 72 65 69 67 6e   with a [foreign
17d0: 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45  -key-clause | RE
17e0: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 5d  FERENCES clause]
17f0: 0a 20 20 20 20 69 73 20 61 64 64 65 64 2c 20 74  .    is added, t
1800: 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68  he column must h
1810: 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 76 61  ave a default va
1820: 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 3c 2f 75  lue of NULL..</u
1830: 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 61 6c 73  l>..<p>^Note als
1840: 6f 20 74 68 61 74 20 77 68 65 6e 20 61 64 64 69  o that when addi
1850: 6e 67 20 61 20 5b 43 48 45 43 4b 20 63 6f 6e 73  ng a [CHECK cons
1860: 74 72 61 69 6e 74 5d 2c 20 74 68 65 20 43 48 45  traint], the CHE
1870: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a 69 73  CK constraint.is
1880: 20 6e 6f 74 20 74 65 73 74 65 64 20 61 67 61 69   not tested agai
1890: 6e 73 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  nst preexisting 
18a0: 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c  rows of the tabl
18b0: 65 2e 0a 5e 54 68 69 73 20 63 61 6e 20 72 65 73  e..^This can res
18c0: 75 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20 74  ult in a table t
18d0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61 74  hat contains dat
18e0: 61 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69 6f  a that.is in vio
18f0: 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43 48  lation of the CH
1900: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ECK constraint. 
1910: 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   Future versions
1920: 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74   of SQLite might
1930: 0a 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69 64  .change to valid
1940: 61 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  ate CHECK constr
1950: 61 69 6e 74 73 20 61 73 20 74 68 65 79 20 61 72  aints as they ar
1960: 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  e added.</p>..<p
1970: 3e 20 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20  > The execution 
1980: 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54 45  time of the ALTE
1990: 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  R TABLE command 
19a0: 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f  is independent o
19b0: 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  f.the amount of 
19c0: 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62 6c  data in the tabl
19d0: 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54 41  e.  The ALTER TA
19e0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  BLE command runs
19f0: 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20 61   as quickly.on a
1a00: 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20 6d   table with 10 m
1a10: 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20 69  illion rows as i
1a20: 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62 6c  t does on a tabl
1a30: 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c 2f  e with 1 row..</
1a40: 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44 44  p>..<p>After ADD
1a50: 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65 6e   COLUMN has been
1a60: 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62 61   run on a databa
1a70: 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61 73  se, that databas
1a80: 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72 65  e will not.be re
1a90: 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74 65  adable by SQLite
1aa0: 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 61   version 3.1.3 a
1ab0: 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a  nd earlier.</p>.
1ac0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
1ad0: 74 20 6f 74 68 65 72 61 6c 74 65 72 3c 2f 74 63  t otheralter</tc
1ae0: 6c 3e 0a 3c 68 33 3e 4d 61 6b 69 6e 67 20 4f 74  l>.<h3>Making Ot
1af0: 68 65 72 20 4b 69 6e 64 73 20 4f 66 20 54 61 62  her Kinds Of Tab
1b00: 6c 65 20 53 63 68 65 6d 61 20 43 68 61 6e 67 65  le Schema Change
1b10: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 54 68 65 20  s</h3>..<p> The 
1b20: 6f 6e 6c 79 20 73 63 68 65 6d 61 20 61 6c 74 65  only schema alte
1b30: 72 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 20 64 69  ring commands di
1b40: 72 65 63 74 6c 79 20 73 75 70 70 6f 72 74 65 64  rectly supported
1b50: 20 62 79 20 53 51 4c 69 74 65 20 61 72 65 20 74   by SQLite are t
1b60: 68 65 0a 22 72 65 6e 61 6d 65 20 74 61 62 6c 65  he."rename table
1b70: 22 20 61 6e 64 20 22 61 64 64 20 63 6f 6c 75 6d  " and "add colum
1b80: 6e 22 20 63 6f 6d 6d 61 6e 64 73 20 73 68 6f 77  n" commands show
1b90: 6e 20 61 62 6f 76 65 2e 20 20 48 6f 77 65 76 65  n above.  Howeve
1ba0: 72 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  r, applications.
1bb0: 63 61 6e 20 6d 61 6b 65 20 6f 74 68 65 72 20 61  can make other a
1bc0: 72 62 69 74 72 61 72 79 20 63 68 61 6e 67 65 73  rbitrary changes
1bd0: 20 74 6f 20 74 68 65 20 66 6f 72 6d 61 74 20 6f   to the format o
1be0: 66 20 61 20 74 61 62 6c 65 20 75 73 69 6e 67 20  f a table using 
1bf0: 61 20 73 69 6d 70 6c 65 0a 73 65 71 75 65 6e 63  a simple.sequenc
1c00: 65 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e  e of operations.
1c10: 0a 54 68 65 20 73 74 65 70 73 20 74 6f 20 6d 61  .The steps to ma
1c20: 6b 65 20 61 72 62 69 74 72 61 72 79 20 63 68 61  ke arbitrary cha
1c30: 6e 67 65 73 20 74 6f 20 74 68 65 20 73 63 68 65  nges to the sche
1c40: 6d 61 20 64 65 73 69 67 6e 20 6f 66 20 73 6f 6d  ma design of som
1c50: 65 20 74 61 62 6c 65 20 58 0a 61 72 65 20 61 73  e table X.are as
1c60: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
1c70: 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69  <li><p>.If forei
1c80: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
1c90: 74 73 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 0a  ts are enabled,.
1ca0: 64 69 73 61 62 6c 65 20 74 68 65 6d 20 75 73 69  disable them usi
1cb0: 6e 67 20 5b 50 52 41 47 4d 41 20 66 6f 72 65 69  ng [PRAGMA forei
1cc0: 67 6e 5f 6b 65 79 73 20 7c 20 50 52 41 47 4d 41  gn_keys | PRAGMA
1cd0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 46   foreign_keys=OF
1ce0: 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 53 74 61  F]...<li><p>.Sta
1cf0: 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
1d00: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 52 65 6d 65 6d  ...<li><p>.Remem
1d10: 62 65 72 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  ber the format o
1d20: 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 20 61 6e  f all indexes an
1d30: 64 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  d triggers assoc
1d40: 69 61 74 65 64 20 77 69 74 68 20 74 61 62 6c 65  iated with table
1d50: 20 58 2e 0a 54 68 69 73 20 69 6e 66 6f 72 6d 61   X..This informa
1d60: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 6e 65 65  tion will be nee
1d70: 64 65 64 20 69 6e 20 73 74 65 70 20 38 20 62 65  ded in step 8 be
1d80: 6c 6f 77 2e 20 20 4f 6e 65 20 77 61 79 20 74 6f  low.  One way to
1d90: 20 64 6f 20 74 68 69 73 20 69 73 0a 74 6f 20 72   do this is.to r
1da0: 75 6e 20 61 20 71 75 65 72 79 20 6c 69 6b 65 20  un a query like 
1db0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 53  the following:.S
1dc0: 45 4c 45 43 54 20 74 79 70 65 2c 20 73 71 6c 20  ELECT type, sql 
1dd0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
1de0: 65 72 20 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d  er WHERE tbl_nam
1df0: 65 3d 27 58 27 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  e='X'...<li><p>.
1e00: 55 73 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c  Use [CREATE TABL
1e10: 45 5d 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  E] to construct 
1e20: 61 20 6e 65 77 20 74 61 62 6c 65 20 22 6e 65 77  a new table "new
1e30: 5f 58 22 20 74 68 61 74 20 69 73 20 69 6e 20 74  _X" that is in t
1e40: 68 65 20 64 65 73 69 72 65 64 0a 72 65 76 69 73  he desired.revis
1e50: 65 64 20 66 6f 72 6d 61 74 20 6f 66 20 74 61 62  ed format of tab
1e60: 6c 65 20 58 2e 20 20 4d 61 6b 65 20 73 75 72 65  le X.  Make sure
1e70: 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20 22   that the name "
1e80: 6e 65 77 5f 58 22 20 64 6f 65 73 20 6e 6f 74 20  new_X" does not 
1e90: 63 6f 6c 6c 69 64 65 0a 77 69 74 68 20 61 6e 79  collide.with any
1ea0: 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 20   existing table 
1eb0: 6e 61 6d 65 2c 20 6f 66 20 63 6f 75 72 73 65 2e  name, of course.
1ec0: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 54 72 61 6e 73 66  ..<li><p>.Transf
1ed0: 65 72 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20  er content from 
1ee0: 58 20 69 6e 74 6f 20 6e 65 77 5f 58 20 75 73 69  X into new_X usi
1ef0: 6e 67 20 61 20 73 74 61 74 65 6d 65 6e 74 0a 6c  ng a statement.l
1f00: 69 6b 65 3a 20 49 4e 53 45 52 54 20 49 4e 54 4f  ike: INSERT INTO
1f10: 20 6e 65 77 5f 58 20 53 45 4c 45 43 54 20 2e 2e   new_X SELECT ..
1f20: 2e 20 46 52 4f 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c  . FROM X...<li><
1f30: 70 3e 0a 44 72 6f 70 20 74 68 65 20 6f 6c 64 20  p>.Drop the old 
1f40: 74 61 62 6c 65 20 58 3a 20 20 5b 44 52 4f 50 20  table X:  [DROP 
1f50: 54 41 42 4c 45 20 7c 20 44 52 4f 50 20 54 41 42  TABLE | DROP TAB
1f60: 4c 45 20 58 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  LE X]...<li><p>.
1f70: 43 68 61 6e 67 65 20 74 68 65 20 6e 61 6d 65 20  Change the name 
1f80: 6f 66 20 6e 65 77 5f 58 20 74 6f 20 58 20 75 73  of new_X to X us
1f90: 69 6e 67 3a 20 41 4c 54 45 52 20 54 41 42 4c 45  ing: ALTER TABLE
1fa0: 20 6e 65 77 5f 58 20 52 45 4e 41 4d 45 20 54 4f   new_X RENAME TO
1fb0: 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65   X...<li><p>.Use
1fc0: 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
1fd0: 61 6e 64 20 5b 43 52 45 41 54 45 20 54 52 49 47  and [CREATE TRIG
1fe0: 47 45 52 5d 20 74 6f 20 72 65 63 6f 6e 73 74 72  GER] to reconstr
1ff0: 75 63 74 20 69 6e 64 65 78 65 73 20 61 6e 64 20  uct indexes and 
2000: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
2010: 74 65 64 20 77 69 74 68 20 74 61 62 6c 65 20 58  ted with table X
2020: 2e 20 20 50 65 72 68 61 70 73 20 75 73 65 20 74  .  Perhaps use t
2030: 68 65 20 6f 6c 64 20 66 6f 72 6d 61 74 20 6f 66  he old format of
2040: 20 74 68 65 20 74 72 69 67 67 65 72 73 20 61 6e   the triggers an
2050: 64 0a 69 6e 64 65 78 65 73 20 73 61 76 65 64 20  d.indexes saved 
2060: 66 72 6f 6d 20 73 74 65 70 20 33 20 61 62 6f 76  from step 3 abov
2070: 65 20 61 73 20 61 20 67 75 69 64 65 2c 20 6d 61  e as a guide, ma
2080: 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 61 73 20  king changes as 
2090: 61 70 70 72 6f 70 72 69 61 74 65 0a 66 6f 72 20  appropriate.for 
20a0: 74 68 65 20 61 6c 74 65 72 61 74 69 6f 6e 2e 0a  the alteration..
20b0: 0a 3c 6c 69 3e 3c 70 3e 49 66 20 61 6e 79 20 76  .<li><p>If any v
20c0: 69 65 77 73 20 72 65 66 65 72 20 74 6f 20 74 61  iews refer to ta
20d0: 62 6c 65 20 58 20 69 6e 20 61 20 77 61 79 20 74  ble X in a way t
20e0: 68 61 74 20 69 73 20 61 66 66 65 63 74 65 64 20  hat is affected 
20f0: 62 79 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68  by the.schema ch
2100: 61 6e 67 65 2c 20 74 68 65 6e 20 64 72 6f 70 20  ange, then drop 
2110: 74 68 6f 73 65 20 76 69 65 77 73 20 75 73 69 6e  those views usin
2120: 67 20 5b 44 52 4f 50 20 56 49 45 57 5d 20 61 6e  g [DROP VIEW] an
2130: 64 20 72 65 63 72 65 61 74 65 20 74 68 65 6d 0a  d recreate them.
2140: 77 69 74 68 20 77 68 61 74 65 76 65 72 20 63 68  with whatever ch
2150: 61 6e 67 65 73 20 61 72 65 20 6e 65 63 65 73 73  anges are necess
2160: 61 72 79 20 74 6f 20 61 63 63 6f 6d 6d 6f 64 61  ary to accommoda
2170: 74 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  te the schema ch
2180: 61 6e 67 65 0a 75 73 69 6e 67 20 5b 43 52 45 41  ange.using [CREA
2190: 54 45 20 56 49 45 57 5d 2e 0a 0a 3c 6c 69 3e 3c  TE VIEW]...<li><
21a0: 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b 65  p>.If foreign ke
21b0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65  y constraints we
21c0: 72 65 20 6f 72 69 67 69 6e 61 6c 6c 79 20 65 6e  re originally en
21d0: 61 62 6c 65 64 0a 74 68 65 6e 20 72 75 6e 20 5b  abled.then run [
21e0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
21f0: 65 79 5f 63 68 65 63 6b 5d 20 74 6f 20 76 65 72  ey_check] to ver
2200: 69 66 79 20 74 68 61 74 20 74 68 65 20 73 63 68  ify that the sch
2210: 65 6d 61 0a 63 68 61 6e 67 65 20 64 69 64 20 6e  ema.change did n
2220: 6f 74 20 62 72 65 61 6b 20 61 6e 79 20 66 6f 72  ot break any for
2230: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2240: 69 6e 74 73 2e 0a 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ints....<li><p>.
2250: 43 6f 6d 6d 69 74 20 74 68 65 20 74 72 61 6e 73  Commit the trans
2260: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 69  action started i
2270: 6e 20 73 74 65 70 20 32 2e 0a 0a 3c 6c 69 3e 3c  n step 2...<li><
2280: 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b 65  p>.If foreign ke
2290: 79 73 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  ys constraints w
22a0: 65 72 65 20 6f 72 69 67 69 6e 61 6c 6c 79 20 65  ere originally e
22b0: 6e 61 62 6c 65 64 2c 20 72 65 65 6e 61 62 6c 65  nabled, reenable
22c0: 20 74 68 65 6d 20 6e 6f 77 2e 0a 3c 2f 6f 6c 3e   them now..</ol>
22d0: 0a 0a 3c 70 3e 54 68 65 20 70 72 6f 63 65 64 75  ..<p>The procedu
22e0: 72 65 20 61 62 6f 76 65 20 69 73 20 63 6f 6d 70  re above is comp
22f0: 6c 65 74 65 6c 79 20 67 65 6e 65 72 61 6c 20 61  letely general a
2300: 6e 64 20 77 69 6c 6c 20 77 6f 72 6b 20 65 76 65  nd will work eve
2310: 6e 20 69 66 20 74 68 65 0a 73 63 68 65 6d 61 20  n if the.schema 
2320: 63 68 61 6e 67 65 20 63 61 75 73 65 73 20 74 68  change causes th
2330: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 74  e information st
2340: 6f 72 65 64 20 69 6e 20 74 68 65 20 74 61 62 6c  ored in the tabl
2350: 65 20 74 6f 20 63 68 61 6e 67 65 2e 0a 53 6f 20  e to change..So 
2360: 74 68 65 20 66 75 6c 6c 20 70 72 6f 63 65 64 75  the full procedu
2370: 72 65 20 61 62 6f 76 65 20 69 73 20 61 70 70 72  re above is appr
2380: 6f 70 72 69 61 74 65 20 66 6f 72 20 64 72 6f 70  opriate for drop
2390: 70 69 6e 67 20 61 20 63 6f 6c 75 6d 6e 2c 0a 63  ping a column,.c
23a0: 68 61 6e 67 69 6e 67 20 74 68 65 20 6f 72 64 65  hanging the orde
23b0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 61 64  r of columns, ad
23c0: 64 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67  ding or removing
23d0: 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
23e0: 61 69 6e 74 0a 6f 72 20 50 52 49 4d 41 52 59 20  aint.or PRIMARY 
23f0: 4b 45 59 2c 20 61 64 64 69 6e 67 20 43 48 45 43  KEY, adding CHEC
2400: 4b 20 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45 59  K or FOREIGN KEY
2410: 20 6f 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e   or NOT NULL con
2420: 73 74 72 61 69 6e 74 73 2c 0a 6f 72 20 63 68 61  straints,.or cha
2430: 6e 67 69 6e 67 20 74 68 65 20 64 61 74 61 74 79  nging the dataty
2440: 70 65 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 2c  pe for a column,
2450: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2e 20 20 48   for example.  H
2460: 6f 77 65 76 65 72 2c 20 61 20 73 69 6d 70 6c 65  owever, a simple
2470: 72 0a 61 6e 64 20 66 61 73 74 65 72 20 70 72 6f  r.and faster pro
2480: 63 65 64 75 72 65 20 63 61 6e 20 6f 70 74 69 6f  cedure can optio
2490: 6e 61 6c 6c 79 20 62 65 20 75 73 65 64 20 66 6f  nally be used fo
24a0: 72 0a 73 6f 6d 65 20 63 68 61 6e 67 65 73 20 74  r.some changes t
24b0: 68 61 74 20 64 6f 20 6e 6f 20 61 66 66 65 63 74  hat do no affect
24c0: 20 74 68 65 20 6f 6e 2d 64 69 73 6b 20 63 6f 6e   the on-disk con
24d0: 74 65 6e 74 20 69 6e 20 61 6e 79 20 77 61 79 2e  tent in any way.
24e0: 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73  .The following s
24f0: 69 6d 70 6c 65 72 20 70 72 6f 63 65 64 75 72 65  impler procedure
2500: 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 20   is appropriate 
2510: 66 6f 72 20 72 65 6d 6f 76 69 6e 67 0a 43 48 45  for removing.CHE
2520: 43 4b 20 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45  CK or FOREIGN KE
2530: 59 20 6f 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  Y or NOT NULL co
2540: 6e 73 74 72 61 69 6e 74 73 2c 0a 72 65 6e 61 6d  nstraints,.renam
2550: 69 6e 67 20 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20  ing columns, or 
2560: 61 64 64 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69  adding or removi
2570: 6e 67 20 6f 72 20 63 68 61 6e 67 69 6e 67 20 64  ng or changing d
2580: 65 66 61 75 6c 74 20 76 61 6c 75 65 73 20 6f 6e  efault values on
2590: 0a 61 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6f 6c 3e  .a column...<ol>
25a0: 0a 3c 6c 49 3e 3c 70 3e 20 53 74 61 72 74 20 61  .<lI><p> Start a
25b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 0a 3c   transaction...<
25c0: 6c 69 3e 3c 70 3e 20 52 75 6e 20 5b 50 52 41 47  li><p> Run [PRAG
25d0: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
25e0: 6e 5d 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  n] to determine 
25f0: 74 68 65 20 63 75 72 72 65 6e 74 20 73 63 68 65  the current sche
2600: 6d 61 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma.version numbe
2610: 72 2e 20 20 54 68 69 73 20 6e 75 6d 62 65 72 20  r.  This number 
2620: 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20 66  will be needed f
2630: 6f 72 20 73 74 65 70 20 36 20 62 65 6c 6f 77 2e  or step 6 below.
2640: 0a 0a 3c 6c 69 3e 3c 70 3e 20 41 63 74 69 76 61  ..<li><p> Activa
2650: 74 65 20 73 63 68 65 6d 61 20 65 64 69 74 69 6e  te schema editin
2660: 67 20 75 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41  g using .[PRAGMA
2670: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
2680: 20 7c 20 50 52 41 47 4d 41 20 77 72 69 74 61 62   | PRAGMA writab
2690: 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 5d 2e 0a 0a  le_schema=ON]...
26a0: 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20 61 6e 20 5b  <li><p> Run an [
26b0: 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e  UPDATE] statemen
26c0: 74 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20  t to change the 
26d0: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 61  definition of ta
26e0: 62 6c 65 20 58 0a 69 6e 20 74 68 65 20 5b 73 71  ble X.in the [sq
26f0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
2700: 65 5d 3a 20 0a 55 50 44 41 54 45 20 73 71 6c 69  e]: .UPDATE sqli
2710: 74 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71  te_master SET sq
2720: 6c 3d 2e 2e 2e 20 57 48 45 52 45 20 74 79 70 65  l=... WHERE type
2730: 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d  ='table' AND nam
2740: 65 3d 27 58 27 3b 0a 3c 70 3e 3c 65 6d 3e 43 61  e='X';.<p><em>Ca
2750: 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4d 61 6b  ution:</em>  Mak
2760: 69 6e 67 20 61 20 63 68 61 6e 67 65 20 74 6f 20  ing a change to 
2770: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
2780: 72 20 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69  r table like thi
2790: 73 20 77 69 6c 6c 0a 72 65 6e 64 65 72 20 74 68  s will.render th
27a0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  e database corru
27b0: 70 74 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c  pt and unreadabl
27c0: 65 20 69 66 20 74 68 65 20 63 68 61 6e 67 65 20  e if the change 
27d0: 63 6f 6e 74 61 69 6e 73 0a 61 20 73 79 6e 74 61  contains.a synta
27e0: 78 20 65 72 72 6f 72 2e 20 20 49 74 20 69 73 20  x error.  It is 
27f0: 73 75 67 67 65 73 74 65 64 20 74 68 61 74 20 63  suggested that c
2800: 61 72 65 66 75 6c 20 74 65 73 74 69 6e 67 20 6f  areful testing o
2810: 66 20 74 68 65 20 55 50 44 41 54 45 0a 73 74 61  f the UPDATE.sta
2820: 74 65 6d 65 6e 74 20 62 65 20 64 6f 6e 65 20 6f  tement be done o
2830: 6e 20 61 20 73 65 70 61 72 61 74 65 20 62 6c 61  n a separate bla
2840: 6e 6b 20 64 61 74 61 62 61 73 65 20 70 72 69 6f  nk database prio
2850: 72 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e  r to using it on
2860: 0a 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  .a database cont
2870: 61 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74  aining important
2880: 20 64 61 74 61 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20   data...<li><p> 
2890: 49 66 20 74 68 65 20 63 68 61 6e 67 65 20 74 6f  If the change to
28a0: 20 74 61 62 6c 65 20 58 20 61 6c 73 6f 20 61 66   table X also af
28b0: 66 65 63 74 73 20 6f 74 68 65 72 20 74 61 62 6c  fects other tabl
28c0: 65 73 20 6f 72 20 69 6e 64 65 78 65 73 20 6f 72  es or indexes or
28d0: 0a 74 72 69 67 67 65 72 73 20 61 72 65 20 76 69  .triggers are vi
28e0: 65 77 73 20 77 69 74 68 69 6e 20 73 63 68 65 6d  ews within schem
28f0: 61 2c 20 74 68 65 6e 20 72 75 6e 20 5b 55 50 44  a, then run [UPD
2900: 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ATE] statements 
2910: 74 6f 20 6d 6f 64 69 66 79 0a 74 68 6f 73 65 20  to modify.those 
2920: 6f 74 68 65 72 20 74 61 62 6c 65 73 20 69 6e 64  other tables ind
2930: 65 78 65 73 20 61 6e 64 20 76 69 65 77 73 20 74  exes and views t
2940: 6f 6f 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  oo.  For example
2950: 2c 20 69 66 20 74 68 65 20 6e 61 6d 65 20 6f 66  , if the name of
2960: 0a 61 20 63 6f 6c 75 6d 6e 20 63 68 61 6e 67 65  .a column change
2970: 73 2c 20 61 6c 6c 20 46 4f 52 45 49 47 4e 20 4b  s, all FOREIGN K
2980: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  EY constraints, 
2990: 74 72 69 67 67 65 72 73 2c 20 69 6e 64 65 78 65  triggers, indexe
29a0: 73 2c 20 61 6e 64 0a 76 69 65 77 73 20 74 68 61  s, and.views tha
29b0: 74 20 72 65 66 65 72 20 74 6f 20 74 68 61 74 20  t refer to that 
29c0: 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 62 65 20 6d  column must be m
29d0: 6f 64 69 66 69 65 64 2e 0a 3c 70 3e 3c 65 6d 3e  odified..<p><em>
29e0: 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4f  Caution:</em>  O
29f0: 6e 63 65 20 61 67 61 69 6e 2c 20 6d 61 6b 69 6e  nce again, makin
2a00: 67 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  g changes to the
2a10: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a   sqlite_master .
2a20: 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73 20  table like this 
2a30: 77 69 6c 6c 20 72 65 6e 64 65 72 20 74 68 65 20  will render the 
2a40: 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
2a50: 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65 20   and unreadable 
2a60: 69 66 20 74 68 65 20 0a 63 68 61 6e 67 65 20 63  if the .change c
2a70: 6f 6e 74 61 69 6e 73 20 61 6e 20 65 72 72 6f 72  ontains an error
2a80: 2e 20 20 43 61 72 65 66 75 6c 6c 79 20 74 65 73  .  Carefully tes
2a90: 74 20 6f 66 20 74 68 69 73 20 65 6e 74 69 72 65  t of this entire
2aa0: 20 70 72 6f 63 65 64 75 72 65 0a 6f 6e 20 61 20   procedure.on a 
2ab0: 73 65 70 61 72 61 74 65 20 74 65 73 74 20 64 61  separate test da
2ac0: 74 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20  tabase prior to 
2ad0: 75 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61  using it on.a da
2ae0: 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e  tabase containin
2af0: 67 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61  g important data
2b00: 20 61 6e 64 2f 6f 72 20 6d 61 6b 65 20 62 61 63   and/or make bac
2b10: 6b 75 70 20 63 6f 70 69 65 73 20 6f 66 0a 69 6d  kup copies of.im
2b20: 70 6f 72 74 61 6e 74 20 64 61 74 61 62 61 73 65  portant database
2b30: 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69  s prior to runni
2b40: 6e 67 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  ng this procedur
2b50: 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 6e 63 72  e...<li><p> Incr
2b60: 65 6d 65 6e 74 20 74 68 65 20 73 63 68 65 6d 61  ement the schema
2b70: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
2b80: 75 73 69 6e 67 0a 5b 50 52 41 47 4d 41 20 73 63  using.[PRAGMA sc
2b90: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7c 20 50  hema_version | P
2ba0: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
2bb0: 73 69 6f 6e 3d 58 5d 20 77 68 65 72 65 20 58 20  sion=X] where X 
2bc0: 69 73 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e  is one.more than
2bd0: 20 74 68 65 20 6f 6c 64 20 73 63 68 65 6d 61 20   the old schema 
2be0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
2bf0: 6f 75 6e 64 20 69 6e 20 73 74 65 70 20 32 20 61  ound in step 2 a
2c00: 62 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 44  bove...<li><p> D
2c10: 69 73 61 62 6c 65 20 73 63 68 65 6d 61 20 65 64  isable schema ed
2c20: 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52  iting using .[PR
2c30: 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
2c40: 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72  hema | PRAGMA wr
2c50: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46  itable_schema=OF
2c60: 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 28 4f 70  F]...<li><p> (Op
2c70: 74 69 6f 6e 61 6c 29 20 52 75 6e 20 5b 50 52 41  tional) Run [PRA
2c80: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2c90: 65 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74  eck] to verify t
2ca0: 68 61 74 20 74 68 65 0a 73 63 68 65 6d 61 20 63  hat the.schema c
2cb0: 68 61 6e 67 65 73 20 64 69 64 20 6e 6f 74 20 64  hanges did not d
2cc0: 61 6d 61 67 65 20 74 68 65 20 64 61 74 61 62 61  amage the databa
2cd0: 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 43 6f 6d  se...<li><p> Com
2ce0: 6d 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  mit the transact
2cf0: 69 6f 6e 20 73 74 61 72 74 65 64 20 6f 6e 20 73  ion started on s
2d00: 74 65 70 20 31 20 61 62 6f 76 65 2e 0a 3c 2f 6f  tep 1 above..</o
2d10: 6c 3e 0a 0a 3c 70 3e 49 66 20 73 6f 6d 65 20 66  l>..<p>If some f
2d20: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 20 6f 66  uture version of
2d30: 20 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77   SQLite adds new
2d40: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61 70   ALTER TABLE cap
2d50: 61 62 69 6c 69 74 69 65 73 2c 20 0a 74 68 6f 73  abilities, .thos
2d60: 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 77  e capabilities w
2d70: 69 6c 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79 20  ill very likely 
2d80: 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 74  use one of the t
2d90: 77 6f 20 70 72 6f 63 65 64 75 72 65 73 0a 6f 75  wo procedures.ou
2da0: 74 6c 69 6e 65 64 20 61 62 6f 76 65 2e 0a 0a 3c  tlined above...<
2db0: 74 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f 66 20 74  tcl>.#  One of t
2dc0: 68 65 20 72 65 61 73 6f 6e 73 20 74 68 61 74 0a  he reasons that.
2dd0: 23 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  # SQLite does no
2de0: 74 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70  t currently supp
2df0: 6f 72 74 20 6d 6f 72 65 20 41 4c 54 45 52 20 54  ort more ALTER T
2e00: 41 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69 65  ABLE capabilitie
2e10: 73 20 69 73 20 74 68 61 74 0a 23 20 74 68 65 20  s is that.# the 
2e20: 70 72 6f 63 65 64 75 72 65 20 73 68 6f 77 6e 20  procedure shown 
2e30: 61 62 6f 76 65 20 69 73 20 64 69 66 66 69 63 75  above is difficu
2e40: 6c 74 20 74 6f 20 61 75 74 6f 6d 61 74 65 20 66  lt to automate f
2e50: 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  or an arbitrary 
2e60: 73 63 68 65 6d 61 2e 0a 23 20 50 61 72 74 69 63  schema..# Partic
2e70: 75 6c 61 72 6c 79 20 74 72 6f 75 62 6c 65 73 6f  ularly troubleso
2e80: 6d 65 20 61 72 65 61 73 20 61 72 65 20 69 64 65  me areas are ide
2e90: 6e 74 69 66 79 69 6e 67 20 61 6c 6c 20 76 69 65  ntifying all vie
2ea0: 77 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ws associated wi
2eb0: 74 68 0a 23 20 74 61 62 6c 65 20 58 20 69 6e 20  th.# table X in 
2ec0: 73 74 65 70 20 31 20 61 6e 64 20 63 72 65 61 74  step 1 and creat
2ed0: 69 6e 67 20 6e 65 77 20 76 69 65 77 73 20 61 6e  ing new views an
2ee0: 64 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20  d triggers that 
2ef0: 61 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 0a 23  are compatible.#
2f00: 20 77 69 74 68 20 74 68 65 20 61 6c 74 65 72 65   with the altere
2f10: 64 20 73 63 68 65 6d 61 20 66 6f 72 20 74 61 62  d schema for tab
2f20: 6c 65 20 58 20 69 6e 20 73 74 65 70 20 36 2e 20  le X in step 6. 
2f30: 20 49 74 20 69 73 20 61 20 74 72 69 63 6b 79 20   It is a tricky 
2f40: 62 75 74 20 73 6f 6c 76 61 62 6c 65 0a 23 20 70  but solvable.# p
2f50: 72 6f 62 6c 65 6d 20 74 6f 20 63 72 65 61 74 65  roblem to create
2f60: 20 63 6f 64 65 20 74 68 61 74 20 77 69 6c 6c 20   code that will 
2f70: 70 65 72 66 6f 72 6d 20 74 68 65 20 73 74 65 70  perform the step
2f80: 73 20 61 62 6f 76 65 20 0a 23 20 66 6f 72 20 22  s above .# for "
2f90: 72 65 61 73 6f 6e 61 62 6c 65 22 20 73 63 68 65  reasonable" sche
2fa0: 6d 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75  mas commonly fou
2fb0: 6e 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20  nd in practice. 
2fc0: 20 0a 23 20 42 75 74 20 74 68 65 72 65 20 65 78   .# But there ex
2fd0: 69 73 74 20 6d 61 6c 65 76 6f 6c 65 6e 74 20 73  ist malevolent s
2fe0: 63 68 65 6d 61 73 20 66 6f 72 20 77 68 69 63 68  chemas for which
2ff0: 0a 23 20 74 68 65 73 65 20 73 74 65 70 73 20 61  .# these steps a
3000: 72 65 20 6d 61 64 64 65 6e 69 6e 67 6c 79 20 64  re maddeningly d
3010: 69 66 66 69 63 75 6c 74 20 74 6f 20 64 6f 20 63  ifficult to do c
3020: 6f 72 72 65 63 74 6c 79 2e 20 20 52 61 74 68 65  orrectly.  Rathe
3030: 72 20 74 68 61 6e 20 63 72 65 61 74 65 0a 23 20  r than create.# 
3040: 41 4c 54 45 52 20 54 41 42 4c 45 20 66 65 61 74  ALTER TABLE feat
3050: 75 72 65 73 20 74 68 61 74 20 77 6f 72 6b 20 63  ures that work c
3060: 6f 72 72 65 63 74 6c 79 20 39 39 2e 39 25 20 6f  orrectly 99.9% o
3070: 66 20 74 68 65 20 74 69 6d 65 20 62 75 74 20 70  f the time but p
3080: 6f 73 73 69 62 6c 79 0a 23 20 63 6f 72 72 75 70  ossibly.# corrup
3090: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 6e 20  t the schema on 
30a0: 74 68 65 20 6f 74 68 65 72 20 30 2e 31 25 2c 20  the other 0.1%, 
30b0: 74 68 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c  the SQLite devel
30c0: 6f 70 65 72 73 20 68 61 76 65 20 64 65 63 69 64  opers have decid
30d0: 65 64 0a 23 20 74 6f 20 70 75 73 68 20 74 68 65  ed.# to push the
30e0: 20 70 72 6f 62 6c 65 6d 20 69 6e 74 6f 20 74 68   problem into th
30f0: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f  e application do
3100: 6d 61 69 6e 2c 20 77 68 65 72 65 20 69 74 20 69  main, where it i
3110: 73 20 6d 75 63 68 20 65 61 73 69 65 72 0a 23 20  s much easier.# 
3120: 74 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e  to solve..</tcl>
3130: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
3140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3180: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
3190: 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a  {ANALYZE} analyz
31a0: 65 20 41 4e 41 4c 59 5a 45 0a 0a 52 65 63 75 72  e ANALYZE..Recur
31b0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
31c0: 6d 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c  m analyze-stmt.<
31d0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  /tcl>..<p> ^The 
31e0: 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20  ANALYZE command 
31f0: 67 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69  gathers statisti
3200: 63 73 20 61 62 6f 75 74 20 74 61 62 6c 65 73 20  cs about tables 
3210: 61 6e 64 0a 69 6e 64 69 63 65 73 20 61 6e 64 20  and.indices and 
3220: 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 6c 65  stores the colle
3230: 63 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cted information
3240: 0a 69 6e 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61  .in [internal ta
3250: 62 6c 65 73 5d 20 6f 66 20 74 68 65 20 64 61 74  bles] of the dat
3260: 61 62 61 73 65 20 77 68 65 72 65 20 74 68 65 20  abase where the 
3270: 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
3280: 63 61 6e 0a 61 63 63 65 73 73 20 74 68 65 20 69  can.access the i
3290: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 75  nformation and u
32a0: 73 65 20 69 74 20 74 6f 20 68 65 6c 70 20 6d 61  se it to help ma
32b0: 6b 65 20 62 65 74 74 65 72 20 71 75 65 72 79 20  ke better query 
32c0: 70 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63 65 73  planning choices
32d0: 2e 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e  ..^If no argumen
32e0: 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61 6c  ts are given, al
32f0: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
3300: 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a 65  ases are.analyze
3310: 64 2e 20 20 5e 49 66 20 61 20 64 61 74 61 62 61  d.  ^If a databa
3320: 73 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e  se name is given
3330: 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
3340: 2c 20 74 68 65 6e 20 61 6c 6c 20 74 61 62 6c 65  , then all table
3350: 73 0a 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e  s.and indices in
3360: 20 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61   that one databa
3370: 73 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e  se are analyzed.
3380: 20 20 0a 5e 49 66 20 74 68 65 20 61 72 67 75 6d    .^If the argum
3390: 65 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e  ent is a table n
33a0: 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ame, then only t
33b0: 68 61 74 20 74 61 62 6c 65 20 61 6e 64 20 74 68  hat table and th
33c0: 65 0a 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69  e.indices associ
33d0: 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74  ated with that t
33e0: 61 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65  able are analyze
33f0: 64 2e 20 20 5e 49 66 20 74 68 65 20 61 72 67 75  d.  ^If the argu
3400: 6d 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64 65 78  ment.is an index
3410: 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79   name, then only
3420: 20 74 68 61 74 20 6f 6e 65 20 69 6e 64 65 78 20   that one index 
3430: 69 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e  is analyzed.</p>
3440: 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61 75  ..<p> ^The defau
3450: 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  lt implementatio
3460: 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61  n stores all sta
3470: 74 69 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e  tistics in a sin
3480: 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20  gle.table named 
3490: 22 5b 73 71 6c 69 74 65 5f 73 74 61 74 31 5d 22  "[sqlite_stat1]"
34a0: 2e 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73  .  ^If SQLite is
34b0: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
34c0: 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he.[SQLITE_ENABL
34d0: 45 5f 53 54 41 54 33 5d 20 6f 70 74 69 6f 6e 20  E_STAT3] option 
34e0: 61 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20  and without the 
34f0: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
3500: 54 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68  TAT4].option, th
3510: 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69  en additional hi
3520: 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a  stogram data is.
3530: 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74  collected and st
3540: 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f  ored in [sqlite_
3550: 73 74 61 74 33 5d 2e 0a 20 5e 49 66 20 53 51 4c  stat3].. ^If SQL
3560: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
3570: 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45  with the.[SQLITE
3580: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 6f  _ENABLE_STAT4] o
3590: 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69  ption, then addi
35a0: 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d  tional histogram
35b0: 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74   data is.collect
35c0: 65 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e  ed and stored in
35d0: 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 34 5d 2e   [sqlite_stat4].
35e0: 0a 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20  .Older versions 
35f0: 6f 66 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20  of SQLite would 
3600: 6d 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65 20  make use of the 
3610: 5b 73 71 6c 69 74 65 5f 73 74 61 74 32 5d 20 74  [sqlite_stat2] t
3620: 61 62 6c 65 0a 77 68 65 6e 20 63 6f 6d 70 69 6c  able.when compil
3630: 65 64 20 77 69 74 68 20 5b 53 51 4c 49 54 45 5f  ed with [SQLITE_
3640: 45 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 62 75  ENABLE_STAT2] bu
3650: 74 20 61 6c 6c 20 72 65 63 65 6e 74 20 76 65 72  t all recent ver
3660: 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
3670: 69 67 6e 6f 72 65 20 74 68 65 20 73 71 6c 69 74  ignore the sqlit
3680: 65 5f 73 74 61 74 32 20 74 61 62 6c 65 2e 0a 46  e_stat2 table..F
3690: 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e  uture enhancemen
36a0: 74 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64  ts may create.ad
36b0: 64 69 74 69 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e  ditional [intern
36c0: 61 6c 20 74 61 62 6c 65 73 5d 20 77 69 74 68 20  al tables] with 
36d0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61  the same name pa
36e0: 74 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74  ttern except wit
36f0: 68 0a 66 69 6e 61 6c 20 64 69 67 69 74 20 6c 61  h.final digit la
3700: 72 67 65 72 20 74 68 61 6e 20 22 34 22 2e 0a 41  rger than "4"..A
3710: 6c 6c 20 6f 66 20 74 68 65 73 65 20 74 61 62 6c  ll of these tabl
3720: 65 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76  es are collectiv
3730: 65 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20  ely referred to 
3740: 61 73 20 22 73 74 61 74 69 73 74 69 63 73 20 74  as "statistics t
3750: 61 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ables"..</p>..<p
3760: 3e 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  > ^The content o
3770: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
3780: 20 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71   tables can be q
3790: 75 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45  ueried using [SE
37a0: 4c 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65  LECT].and can be
37b0: 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 74   changed using t
37c0: 68 65 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e  he [DELETE], [IN
37d0: 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41  SERT], and [UPDA
37e0: 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28  TE] commands..^(
37f0: 54 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  The [DROP TABLE]
3800: 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f   command works o
3810: 6e 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62  n statistics tab
3820: 6c 65 73 0a 61 73 20 6f 66 20 53 51 4c 69 74 65  les.as of SQLite
3830: 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29   version 3.7.9.)
3840: 5e 0a 5e 54 68 65 20 5b 41 4c 54 45 52 20 54 41  ^.^The [ALTER TA
3850: 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  BLE] command doe
3860: 73 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 73 74  s not work on st
3870: 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 2e  atistics tables.
3880: 0a 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72  .Appropriate car
3890: 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  e should be used
38a0: 20 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74   when changing t
38b0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
38c0: 65 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62  e statistics.tab
38d0: 6c 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63  les as invalid c
38e0: 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65  ontent can cause
38f0: 20 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63   SQLite to selec
3900: 74 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75  t inefficient.qu
3910: 65 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65  ery plans.  Gene
3920: 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20  rally speaking, 
3930: 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d  one should not m
3940: 6f 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e  odify the conten
3950: 74 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74  t of.the statist
3960: 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e  ics tables by an
3970: 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65  y mechanism othe
3980: 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20  r than invoking 
3990: 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d  the.ANALYZE comm
39a0: 61 6e 64 2e 20 20 0a 53 65 65 20 22 5b 4d 61 6e  and.  .See "[Man
39b0: 75 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66 20 51  ual Control Of Q
39c0: 75 65 72 79 20 50 6c 61 6e 73 20 55 73 69 6e 67  uery Plans Using
39d0: 20 53 51 4c 49 54 45 5f 53 54 41 54 20 54 61 62   SQLITE_STAT Tab
39e0: 6c 65 73 5d 22 20 66 6f 72 0a 66 75 72 74 68 65  les]" for.furthe
39f0: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  r information.</
3a00: 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74  p>..<p> ^Statist
3a10: 69 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20  ics gathered by 
3a20: 41 4e 41 4c 59 5a 45 20 61 72 65 20 6e 6f 74 20  ANALYZE are not 
3a30: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70  automatically up
3a40: 64 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e  dated as.the con
3a50: 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61  tent of the data
3a60: 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49  base changes.  I
3a70: 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
3a80: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68   the database.ch
3a90: 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e  anges significan
3aa0: 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64  tly, or if the d
3ab0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
3ac0: 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65  hanges, then one
3ad0: 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72   should.consider
3ae0: 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41   rerunning the A
3af0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69  NALYZE command i
3b00: 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74  n order to updat
3b10: 65 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  e the statistics
3b20: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71  .</p>..<p> The q
3b30: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6c 6f 61  uery planner loa
3b40: 64 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ds the content o
3b50: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
3b60: 20 74 61 62 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d   tables.into mem
3b70: 6f 72 79 20 77 68 65 6e 20 74 68 65 20 73 63 68  ory when the sch
3b80: 65 6d 61 20 69 73 20 72 65 61 64 2e 20 20 5e 48  ema is read.  ^H
3b90: 65 6e 63 65 2c 20 77 68 65 6e 20 61 6e 20 61 70  ence, when an ap
3ba0: 70 6c 69 63 61 74 69 6f 6e 0a 63 68 61 6e 67 65  plication.change
3bb0: 73 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  s the statistics
3bc0: 20 74 61 62 6c 65 73 20 64 69 72 65 63 74 6c 79   tables directly
3bd0: 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f  , SQLite will no
3be0: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 6e 6f  t immediately.no
3bf0: 74 69 63 65 20 74 68 65 20 63 68 61 6e 67 65 73  tice the changes
3c00: 2e 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f  . ^An applicatio
3c10: 6e 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20  n.can force the 
3c20: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f  query planner to
3c30: 20 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74   reread the stat
3c40: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79  istics tables by
3c50: 20 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c   running.<b>ANAL
3c60: 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  YZE sqlite_maste
3c70: 72 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e  r</b>. </p>..<p>
3c80: 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23   ..<tcl>.#######
3c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cd0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
3ce0: 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45  {ATTACH DATABASE
3cf0: 7d 20 61 74 74 61 63 68 20 7b 61 74 74 61 63 68  } attach {attach
3d00: 65 64 20 2a 41 54 54 41 43 48 7d 0a 0a 52 65 63  ed *ATTACH}..Rec
3d10: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
3d20: 72 61 6d 20 61 74 74 61 63 68 2d 73 74 6d 74 0a  ram attach-stmt.
3d30: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65  </tcl>..<p> ^The
3d40: 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45   ATTACH DATABASE
3d50: 20 73 74 61 74 65 6d 65 6e 74 20 61 64 64 73 20   statement adds 
3d60: 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  another database
3d70: 20 0a 66 69 6c 65 20 74 6f 20 74 68 65 20 63 75   .file to the cu
3d80: 72 72 65 6e 74 20 5b 64 61 74 61 62 61 73 65 20  rrent [database 
3d90: 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e 20 0a 44 61  connection]. .Da
3da0: 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61  tabase files tha
3db0: 74 20 77 65 72 65 20 70 72 65 76 69 6f 75 73 6c  t were previousl
3dc0: 79 20 61 74 74 61 63 68 65 64 20 63 61 6e 20 62  y attached can b
3dd0: 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 0a  e removed using.
3de0: 74 68 65 20 5b 44 45 54 41 43 48 20 44 41 54 41  the [DETACH DATA
3df0: 42 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 2e 0a 0a  BASE] command...
3e00: 3c 70 3e 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  <p>^The filename
3e10: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3e20: 65 20 74 6f 20 62 65 20 61 74 74 61 63 68 65 64  e to be attached
3e30: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
3e40: 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  .the expression 
3e50: 74 68 61 74 20 6f 63 63 75 72 73 20 62 65 66 6f  that occurs befo
3e60: 72 65 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72  re the AS keywor
3e70: 64 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  d..^The filename
3e80: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
3e90: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d   follows the sam
3ea0: 65 20 73 65 6d 61 6e 74 69 63 73 20 61 73 20 74  e semantics as t
3eb0: 68 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72 67 75  he.filename argu
3ec0: 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74 65 33  ment to [sqlite3
3ed0: 5f 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b 73 71  _open()] and [sq
3ee0: 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d  lite3_open_v2()]
3ef0: 3b 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61  ; the.special na
3f00: 6d 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20  me "[:memory:]" 
3f10: 72 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 5b 69  results in an [i
3f20: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
3f30: 65 5d 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20  e] and an.empty 
3f40: 73 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69  string results i
3f50: 6e 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72  n a new temporar
3f60: 79 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65  y database..^The
3f70: 20 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65   filename argume
3f80: 6e 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49  nt can be a [URI
3f90: 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52   filename] if UR
3fa0: 49 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65  I filename proce
3fb0: 73 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20  ssing.is enable 
3fc0: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
3fd0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
3fe0: 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f   default behavio
3ff0: 72 20 69 73 20 66 6f 72 0a 55 52 49 20 66 69 6c  r is for.URI fil
4000: 65 6e 61 6d 65 73 20 74 6f 20 62 65 20 64 69 73  enames to be dis
4010: 61 62 6c 65 64 2c 20 68 6f 77 65 76 65 72 20 74  abled, however t
4020: 68 61 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65  hat might change
4030: 20 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c   in a future rel
4040: 65 61 73 65 0a 6f 66 20 53 51 4c 69 74 65 2c 20  ease.of SQLite, 
4050: 73 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  so application d
4060: 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64  evelopers are ad
4070: 76 69 73 65 64 20 74 6f 20 70 6c 61 6e 20 61 63  vised to plan ac
4080: 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 54  cordingly...<p>T
4090: 68 65 20 6e 61 6d 65 20 74 68 61 74 20 6f 63 63  he name that occ
40a0: 75 72 73 20 61 66 74 65 72 20 74 68 65 20 41 53  urs after the AS
40b0: 20 6b 65 79 77 6f 72 64 20 69 73 20 74 68 65 20   keyword is the 
40c0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
40d0: 62 61 73 65 0a 75 73 65 64 20 69 6e 74 65 72 6e  base.used intern
40e0: 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 0a  ally by SQLite..
40f0: 5e 54 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61  ^The database-na
4100: 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a  mes 'main' and .
4110: 27 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20  'temp' refer to 
4120: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
4130: 65 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61  e and the databa
4140: 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d  se used for .tem
4150: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
4160: 5e 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65  ^The main and te
4170: 6d 70 20 64 61 74 61 62 61 73 65 73 20 63 61 6e  mp databases can
4180: 6e 6f 74 20 62 65 20 61 74 74 61 63 68 65 64 20  not be attached 
4190: 6f 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e  or.detached.</p>
41a0: 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20 69  ..<p> ^(Tables i
41b0: 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
41c0: 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72 65  tabase can be re
41d0: 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20  ferred to using 
41e0: 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64  the syntax .<i>d
41f0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62  atabase-name.tab
4200: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20  le-name</i>.)^  
4210: 5e 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ^If the name of 
4220: 74 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69  the table is uni
4230: 71 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61  que.across all a
4240: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
4250: 73 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61  s and the main a
4260: 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  nd temp database
4270: 73 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64  s, then the.<i>d
4280: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
4290: 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72   prefix is not r
42a0: 65 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74 77  equired.  ^If tw
42b0: 6f 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  o or more tables
42c0: 20 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64 61   in.different da
42d0: 74 61 62 61 73 65 73 20 68 61 76 65 20 74 68 65  tabases have the
42e0: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74   same name and t
42f0: 68 65 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  he .<i>database-
4300: 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20  name</i> prefix 
4310: 69 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61  is not used on a
4320: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
4330: 2c 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65  , then the.table
4340: 20 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f   chosen is the o
4350: 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
4360: 73 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73  se that was leas
4370: 74 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63  t recently attac
4380: 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54  hed.</p>..<p>.^T
4390: 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f  ransactions invo
43a0: 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61  lving multiple a
43b0: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
43c0: 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73  s are atomic,.as
43d0: 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20  suming that the 
43e0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
43f0: 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d   not "[:memory:]
4400: 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72  " and the .[jour
4410: 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74  nal_mode] is not
4420: 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68   [WAL].  ^(If th
4430: 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20  e main.database 
4440: 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72  is ":memory:" or
4450: 20 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f   if the journal_
4460: 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65  mode is WAL, the
4470: 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  n .transactions 
4480: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61  continue to be a
4490: 74 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63  tomic within eac
44a0: 68 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74  h individual.dat
44b0: 61 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20  abase file. But 
44c0: 69 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70  if the host comp
44d0: 75 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20  uter crashes in 
44e0: 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20  the middle.of a 
44f0: 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74  [COMMIT] where t
4500: 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62  wo or more datab
4510: 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70  ase files are up
4520: 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74  dated,.some of t
4530: 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74  hose files might
4540: 20 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73   get the changes
4550: 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69   where others.mi
4560: 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a  ght not.)^.</p>.
4570: 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61  .<p> ^There is a
4580: 20 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e   limit, set usin
4590: 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  g [sqlite3_limit
45a0: 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45  ()] and .[SQLITE
45b0: 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d  _LIMIT_ATTACHED]
45c0: 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  , to the number 
45d0: 6f 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61  of databases tha
45e0: 74 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61  t can be.simulta
45f0: 6e 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64  neously attached
4600: 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74   to a single dat
4610: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
4620: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
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 23 23 23 23 23 23 23 23 23  ################
4660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4670: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
4680: 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e  tion {BEGIN TRAN
4690: 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63  SACTION} transac
46a0: 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d  tion {*BEGIN COM
46b0: 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 52  MIT ROLLBACK}..R
46c0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
46d0: 61 67 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74  agram begin-stmt
46e0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
46f0: 44 69 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73  Diagram commit-s
4700: 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62  tmt.RecursiveBub
4710: 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62  bleDiagram rollb
4720: 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ack-stmt.</tcl>.
4730: 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73  .<p>.^No changes
4740: 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
4750: 74 68 65 20 64 61 74 61 62 61 73 65 20 65 78 63  the database exc
4760: 65 70 74 20 77 69 74 68 69 6e 20 61 20 74 72 61  ept within a tra
4770: 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63  nsaction..^Any c
4780: 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e  ommand that chan
4790: 67 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ges the database
47a0: 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79   (basically, any
47b0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68   SQL command.oth
47c0: 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d  er than [SELECT]
47d0: 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  ) will automatic
47e0: 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72 61  ally start a tra
47f0: 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20  nsaction if.one 
4800: 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69  is not already i
4810: 6e 20 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f  n effect.  ^Auto
4820: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65  matically starte
4830: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61  d transactions.a
4840: 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65  re committed whe
4850: 6e 20 74 68 65 20 6c 61 73 74 20 71 75 65 72 79  n the last query
4860: 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a   finishes..</p>.
4870: 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f  .<p>.^Transactio
4880: 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72 74 65  ns can be starte
4890: 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67  d manually using
48a0: 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61   the BEGIN.comma
48b0: 6e 64 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e  nd.  ^(Such tran
48c0: 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79  sactions usually
48d0: 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74   persist until t
48e0: 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f  he next.COMMIT o
48f0: 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  r ROLLBACK comma
4900: 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73  nd.  But a trans
4910: 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f  action will also
4920: 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68   .ROLLBACK if th
4930: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c  e database is cl
4940: 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72  osed or if an er
4950: 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74  ror occurs.and t
4960: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66  he ROLLBACK conf
4970: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
4980: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
4990: 63 69 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68  cified.)^.See th
49a0: 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
49b0: 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c  on the [ON CONFL
49c0: 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20  ICT].clause for 
49d0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
49e0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
49f0: 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69   ROLLBACK.confli
4a00: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
4a10: 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c  gorithm..</p>..<
4a20: 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54  p>.^END TRANSACT
4a30: 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20  ION is an alias 
4a40: 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e  for COMMIT..</p>
4a50: 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74  ..<p> ^(Transact
4a60: 69 6f 6e 73 20 63 72 65 61 74 65 64 20 75 73 69  ions created usi
4a70: 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49  ng BEGIN...COMMI
4a80: 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e  T do not nest.)^
4a90: 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61  .^For nested tra
4aa0: 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74  nsactions, use t
4ab0: 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61  he [SAVEPOINT] a
4ac0: 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d  nd [RELEASE] com
4ad0: 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53  mands..The "TO S
4ae0: 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61 6d 65  AVEPOINT <i>name
4af0: 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f 66 20  </i>" clause of 
4b00: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
4b10: 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68  mand shown.in th
4b20: 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  e syntax diagram
4b30: 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61   above is only a
4b40: 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53 41  pplicable to [SA
4b50: 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63  VEPOINT].transac
4b60: 74 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65  tions.  ^An atte
4b70: 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68  mpt to invoke th
4b80: 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20  e BEGIN command 
4b90: 77 69 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63  within.a transac
4ba0: 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77  tion will fail w
4bb0: 69 74 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65  ith an error, re
4bc0: 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
4bd0: 68 65 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74  her.the transact
4be0: 69 6f 6e 20 77 61 73 20 73 74 61 72 74 65 64 20  ion was started 
4bf0: 62 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f  by [SAVEPOINT] o
4c00: 72 20 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e  r a prior BEGIN.
4c10: 0a 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d  .^The COMMIT com
4c20: 6d 61 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c  mand and the ROL
4c30: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69  LBACK command wi
4c40: 74 68 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61  thout the TO cla
4c50: 75 73 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d  use.work the sam
4c60: 65 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d  e on [SAVEPOINT]
4c70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73   transactions as
4c80: 20 74 68 65 79 20 64 6f 20 77 69 74 68 20 74 72   they do with tr
4c90: 61 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74  ansactions.start
4ca0: 65 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e  ed by BEGIN.</p>
4cb0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
4cc0: 6e 74 20 69 6d 6d 65 64 69 61 74 65 20 7b 42 45  nt immediate {BE
4cd0: 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 7d 20 7b  GIN IMMEDIATE} {
4ce0: 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 7d  BEGIN EXCLUSIVE}
4cf0: 3c 2f 74 63 6c 3e 0a 3c 70 3e 0a 5e 54 72 61 6e  </tcl>.<p>.^Tran
4d00: 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  sactions can be 
4d10: 64 65 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69  deferred, immedi
4d20: 61 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76  ate, or exclusiv
4d30: 65 2e 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c  e.  .^The defaul
4d40: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65  t transaction be
4d50: 68 61 76 69 6f 72 20 69 73 20 64 65 66 65 72 72  havior is deferr
4d60: 65 64 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65  ed..^Deferred me
4d70: 61 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b  ans that no lock
4d80: 73 20 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f  s are acquired.o
4d90: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  n the database u
4da0: 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73  ntil the databas
4db0: 65 20 69 73 20 66 69 72 73 74 20 61 63 63 65 73  e is first acces
4dc0: 73 65 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68  sed.  ^Thus with
4dd0: 20 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e   a.deferred tran
4de0: 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47  saction, the BEG
4df0: 49 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73  IN statement its
4e00: 65 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67  elf does nothing
4e10: 20 74 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74   to the.filesyst
4e20: 65 6d 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20  em.  ^Locks.are 
4e30: 6e 6f 74 20 61 63 71 75 69 72 65 64 20 75 6e 74  not acquired unt
4e40: 69 6c 20 74 68 65 20 66 69 72 73 74 20 72 65 61  il the first rea
4e50: 64 20 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61  d or write opera
4e60: 74 69 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73  tion.  ^The firs
4e70: 74 20 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e  t read.operation
4e80: 20 61 67 61 69 6e 73 74 20 61 20 64 61 74 61 62   against a datab
4e90: 61 73 65 20 63 72 65 61 74 65 73 20 61 20 5b 53  ase creates a [S
4ea0: 48 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20  HARED] lock and 
4eb0: 74 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20  the first.write 
4ec0: 6f 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65  operation create
4ed0: 73 20 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c  s a [RESERVED] l
4ee0: 6f 63 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20  ock.   ^Because 
4ef0: 74 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20  the acquisition 
4f00: 6f 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65  of.locks is defe
4f10: 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20  rred until they 
4f20: 61 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69  are needed, it i
4f30: 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
4f40: 61 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f  another.thread o
4f50: 72 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20  r process could 
4f60: 63 72 65 61 74 65 20 61 20 73 65 70 61 72 61 74  create a separat
4f70: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  e transaction an
4f80: 64 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64  d write to.the d
4f90: 61 74 61 62 61 73 65 20 61 66 74 65 72 20 74 68  atabase after th
4fa0: 65 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63  e BEGIN on the c
4fb0: 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 68 61  urrent thread ha
4fc0: 73 20 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20  s executed..^If 
4fd0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4fe0: 69 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68  is immediate, th
4ff0: 65 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f  en [RESERVED] lo
5000: 63 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64  cks.are acquired
5010: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
5020: 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  s as soon as the
5030: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69   BEGIN command i
5040: 73 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68  s.executed, with
5050: 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20  out waiting for 
5060: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
5070: 62 65 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72  be used.  ^After
5080: 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41   a BEGIN IMMEDIA
5090: 54 45 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64  TE, .no other [d
50a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
50b0: 6f 6e 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65  on] will be able
50c0: 20 74 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65   to write to the
50d0: 20 64 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20   database or.do 
50e0: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
50f0: 45 20 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55  E or BEGIN EXCLU
5100: 53 49 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72  SIVE.  ^Other pr
5110: 6f 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74  ocesses can cont
5120: 69 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f  inue.to read fro
5130: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  m the database, 
5140: 68 6f 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78  however.  ^An ex
5150: 63 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74  clusive transact
5160: 69 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c  ion causes.[EXCL
5170: 55 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20  USIVE] locks to 
5180: 62 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  be acquired on a
5190: 6c 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e  ll databases.  ^
51a0: 41 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58  After a BEGIN.EX
51b0: 43 4c 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65  CLUSIVE, no othe
51c0: 72 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  r [database conn
51d0: 65 63 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66  ection] except f
51e0: 6f 72 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69  or [read_uncommi
51f0: 74 74 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e  tted].connection
5200: 73 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74  s will be able t
5210: 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
5220: 61 73 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72  ase and no other
5230: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68   connection with
5240: 6f 75 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69  out.exception wi
5250: 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72  ll be able to wr
5260: 69 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ite the database
5270: 20 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73   until the trans
5280: 61 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65  action is.comple
5290: 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28  te..</p>..<p>.^(
52a0: 41 6e 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e  An implicit tran
52b0: 73 61 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73  saction (a trans
52c0: 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73  action that is s
52d0: 74 61 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63  tarted automatic
52e0: 61 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e  ally,.not a tran
52f0: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
5300: 62 79 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d  by BEGIN) is com
5310: 6d 69 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63  mitted automatic
5320: 61 6c 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61  ally when.the la
5330: 73 74 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  st active statem
5340: 65 6e 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41  ent finishes.  A
5350: 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73   statement finis
5360: 68 65 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65  hes when its.pre
5370: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
5380: 69 73 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65  is [sqlite3_rese
5390: 74 28 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a  t() | reset] or.
53a0: 5b 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  [sqlite3_finaliz
53b0: 65 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d  e() | finalized]
53c0: 2e 20 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69  .  An open [sqli
53d0: 74 65 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66  te3_blob] used f
53e0: 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42  or.incremental B
53f0: 4c 4f 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61  LOB I/O counts a
5400: 73 20 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20  s an unfinished 
5410: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
5420: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66  [sqlite3_blob].f
5430: 69 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 20  inishes when it 
5440: 69 73 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  is [sqlite3_blob
5450: 5f 63 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65  _close() | close
5460: 64 5d 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  d].)^.</p>..<p>.
5470: 5e 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f  ^The explicit CO
5480: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  MMIT command run
5490: 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65  s immediately, e
54a0: 76 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65  ven if there are
54b0: 0a 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54  .pending [SELECT
54c0: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e  ] statements.  ^
54d0: 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72  However, if ther
54e0: 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72  e are pending.wr
54f0: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20  ite operations, 
5500: 74 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61  the COMMIT comma
5510: 6e 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  nd.will fail wit
5520: 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
5530: 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c  [SQLITE_BUSY]..<
5540: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74  /p>..<p>.^An att
5550: 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20  empt to execute 
5560: 43 4f 4d 4d 49 54 20 6d 69 67 68 74 20 61 6c 73  COMMIT might als
5570: 6f 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b  o result in an [
5580: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74  SQLITE_BUSY] ret
5590: 75 72 6e 20 63 6f 64 65 0a 69 66 20 61 6e 20 61  urn code.if an a
55a0: 6e 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f 72  nother thread or
55b0: 20 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 5b   process has a [
55c0: 73 68 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20  shared lock] on 
55d0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61  the database.tha
55e0: 74 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20  t prevented the 
55f0: 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65  database from be
5600: 69 6e 67 20 75 70 64 61 74 65 64 2e 20 20 5e 57  ing updated.  ^W
5610: 68 65 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73  hen COMMIT fails
5620: 20 69 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68   in this.way, th
5630: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65  e transaction re
5640: 6d 61 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64  mains active and
5650: 20 74 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20   the COMMIT can 
5660: 62 65 20 72 65 74 72 69 65 64 20 6c 61 74 65 72  be retried later
5670: 0a 61 66 74 65 72 20 74 68 65 20 72 65 61 64 65  .after the reade
5680: 72 20 68 61 73 20 68 61 64 20 61 20 63 68 61 6e  r has had a chan
5690: 63 65 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70  ce to clear..</p
56a0: 3e 0a 0a 3c 70 3e 0a 49 6e 20 76 65 72 79 20 6f  >..<p>.In very o
56b0: 6c 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ld versions of S
56c0: 51 4c 69 74 65 20 28 62 65 66 6f 72 65 20 76 65  QLite (before ve
56d0: 72 73 69 6f 6e 20 33 2e 37 2e 31 31 20 63 69 72  rsion 3.7.11 cir
56e0: 63 61 20 32 30 31 32 2d 30 33 2d 32 30 29 0a 74  ca 2012-03-20).t
56f0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c  he ROLLBACK will
5700: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
5710: 72 6f 72 20 63 6f 64 65 20 0a 5b 53 51 4c 49 54  ror code .[SQLIT
5720: 45 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72 65  E_BUSY] if there
5730: 20 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67   are any pending
5740: 20 71 75 65 72 69 65 73 2e 20 20 5e 49 6e 20 6d   queries.  ^In m
5750: 6f 72 65 20 72 65 63 65 6e 74 0a 76 65 72 73 69  ore recent.versi
5760: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 74  ons of SQLite, t
5770: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c  he ROLLBACK will
5780: 20 70 72 6f 63 65 65 64 20 61 6e 64 20 70 65 6e   proceed and pen
5790: 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a  ding statements.
57a0: 77 69 6c 6c 20 6f 66 74 65 6e 20 62 65 20 61 62  will often be ab
57b0: 6f 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74  orted, causing t
57c0: 68 65 6d 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  hem to return an
57d0: 20 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5d 20   [SQLITE_ABORT] 
57e0: 6f 72 0a 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54  or.[SQLITE_ABORT
57f0: 5f 52 4f 4c 4c 42 41 43 4b 5d 20 65 72 72 6f 72  _ROLLBACK] error
5800: 2e 0a 5e 49 6e 20 53 51 4c 69 74 65 20 76 65 72  ..^In SQLite ver
5810: 73 69 6f 6e 20 33 2e 38 2e 38 20 61 6e 64 20 6c  sion 3.8.8 and l
5820: 61 74 65 72 2c 20 61 20 70 65 6e 64 69 6e 67 20  ater, a pending 
5830: 72 65 61 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e  read will contin
5840: 75 65 20 66 75 6e 63 74 69 6f 6e 69 6e 67 0a 61  ue functioning.a
5850: 66 74 65 72 20 74 68 65 20 52 4f 4c 4c 42 41 43  fter the ROLLBAC
5860: 4b 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65  K as long as the
5870: 20 52 4f 4c 4c 42 41 43 4b 20 64 6f 65 73 20 6e   ROLLBACK does n
5880: 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61  ot modify the da
5890: 74 61 62 61 73 65 0a 73 63 68 65 6d 61 2e 0a 3c  tabase.schema..<
58a0: 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41  /p>..<p>.If [PRA
58b0: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
58c0: 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20  ] is set to OFF 
58d0: 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20  (thus disabling 
58e0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  the rollback jou
58f0: 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20  rnal.file) then 
5900: 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20  the behavior of 
5910: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
5920: 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65  mand is undefine
5930: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73  d..</p>..<h3>Res
5940: 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20  ponse To Errors 
5950: 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63  Within A Transac
5960: 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e  tion</h3>..<p> ^
5970: 28 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64  (If certain kind
5980: 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75  s of errors occu
5990: 72 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  r within a trans
59a0: 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e  action, the.tran
59b0: 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d  saction may or m
59c0: 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64  ay not be rolled
59d0: 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61   back automatica
59e0: 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73  lly.  The.errors
59f0: 20 74 68 61 74 20 63 61 6e 20 63 61 75 73 65 20   that can cause 
5a00: 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c  an automatic rol
5a10: 6c 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f  lback include:</
5a20: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53  p>..<ul>.<li> [S
5a30: 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74  QLITE_FULL]: dat
5a40: 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75  abase or disk fu
5a50: 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ll.<li> [SQLITE_
5a60: 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f  IOERR]: disk I/O
5a70: 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c   error.<li> [SQL
5a80: 49 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62  ITE_BUSY]: datab
5a90: 61 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e  ase in use by an
5aa0: 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c  other process.<l
5ab0: 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  i> [SQLITE_NOMEM
5ac0: 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79  ]: out or memory
5ad0: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46  .</ul>)^..<p>.^F
5ae0: 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20  or all of these 
5af0: 65 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61  errors, SQLite a
5b00: 74 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20  ttempts to undo 
5b10: 6a 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61  just the one sta
5b20: 74 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f  tement.it was wo
5b30: 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61  rking on and lea
5b40: 76 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  ve changes from 
5b50: 70 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73  prior statements
5b60: 20 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65   within the.same
5b70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74   transaction int
5b80: 61 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  act and continue
5b90: 20 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61   with the transa
5ba0: 63 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72  ction.  ^However
5bb0: 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  , .depending on 
5bc0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
5bd0: 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e  ing evaluated an
5be0: 64 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77  d the point at w
5bf0: 68 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f  hich the.error o
5c00: 63 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20  ccurs, it might 
5c10: 62 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72  be necessary for
5c20: 20 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62   SQLite to rollb
5c30: 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74  ack and.cancel t
5c40: 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  he entire transa
5c50: 63 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c  ction.  ^An appl
5c60: 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c  ication can tell
5c70: 20 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66   which.course of
5c80: 20 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74   action SQLite t
5c90: 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65  ook by using the
5ca0: 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  .[sqlite3_get_au
5cb0: 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61  tocommit()] C-la
5cc0: 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65  nguage interface
5cd0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20  .</p>..<p>It is 
5ce0: 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74  recommended that
5cf0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65   applications re
5d00: 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72  spond to the err
5d10: 6f 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65  ors.listed above
5d20: 20 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69   by explicitly i
5d30: 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43  ssuing a ROLLBAC
5d40: 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20  K command.  ^If 
5d50: 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e  the .transaction
5d60: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
5d70: 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75  n rolled back au
5d80: 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74  tomatically.by t
5d90: 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73  he error respons
5da0: 65 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  e, then the ROLL
5db0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c  BACK command wil
5dc0: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65  l fail with an.e
5dd0: 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72  rror, but no har
5de0: 6d 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74  m is caused by t
5df0: 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74  his.</p>..<p>Fut
5e00: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
5e10: 53 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e  SQLite may exten
5e20: 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72  d the list of er
5e30: 72 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74  rors which.might
5e40: 20 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63   cause automatic
5e50: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c   transaction rol
5e60: 6c 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76  lback.  Future v
5e70: 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74  ersions of.SQLit
5e80: 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74  e might change t
5e90: 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73  he error respons
5ea0: 65 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61  e.  In particula
5eb0: 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65  r, we may.choose
5ec0: 20 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65   to simplify the
5ed0: 20 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75   interface in fu
5ee0: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
5ef0: 20 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69   SQLite by.causi
5f00: 6e 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62  ng the errors ab
5f10: 6f 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20  ove to force an 
5f20: 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f  unconditional ro
5f30: 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63  llback.</p>..<tc
5f40: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
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 23 23 23 23 23 23 23 23 23  ################
5f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f90: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45  ##.Section {SAVE
5fa0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
5fb0: 20 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45   {SAVEPOINT RELE
5fc0: 41 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  ASE}..RecursiveB
5fd0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76  ubbleDiagram sav
5fe0: 65 70 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75  epoint-stmt.Recu
5ff0: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
6000: 61 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a  am release-stmt.
6010: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
6020: 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d  iagram rollback-
6030: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
6040: 20 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65   ^SAVEPOINTs are
6050: 20 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65   a method of cre
6060: 61 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f  ating transactio
6070: 6e 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b  ns, similar to.[
6080: 42 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d  BEGIN] and [COMM
6090: 49 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74  IT], except that
60a0: 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61   the SAVEPOINT a
60b0: 6e 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  nd RELEASE comma
60c0: 6e 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e  nds.are named an
60d0: 64 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e  d may be nested.
60e0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53  </p>..<p> ^The S
60f0: 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64  AVEPOINT command
6100: 20 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72   starts a new tr
6110: 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61  ansaction with a
6120: 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e   name..^The tran
6130: 73 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65  saction names ne
6140: 65 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65  ed not be unique
6150: 2e 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20  ..^(A SAVEPOINT 
6160: 63 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65  can be started e
6170: 69 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20  ither within or 
6180: 6f 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45  outside of.a [BE
6190: 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e  GIN]...[COMMIT].
61a0: 29 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56  )^  ^(When a SAV
61b0: 45 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75  EPOINT is the ou
61c0: 74 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69  ter-most savepoi
61d0: 6e 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74  nt.and it is not
61e0: 20 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e   within a [BEGIN
61f0: 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65  ]...[COMMIT] the
6200: 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
6210: 73 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45  s the.same as BE
6220: 47 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41  GIN DEFERRED TRA
6230: 4e 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a  NSACTION.)^</p>.
6240: 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43  .<p>^The ROLLBAC
6250: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76  K TO command rev
6260: 65 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f  erts the state o
6270: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  f the database b
6280: 61 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77  ack to what.it w
6290: 61 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68  as just after th
62a0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
62b0: 53 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74  SAVEPOINT.  ^Not
62c0: 65 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68  e that unlike th
62d0: 61 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41  at.plain [ROLLBA
62e0: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74  CK] command (wit
62f0: 68 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77  hout the TO keyw
6300: 6f 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43  ord) the ROLLBAC
6310: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65  K TO command.doe
6320: 73 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65  s not cancel the
6330: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
6340: 49 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65  Instead of cance
6350: 6c 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61  lling the transa
6360: 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42  ction,.the ROLLB
6370: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72  ACK TO command r
6380: 65 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e  estarts the tran
6390: 73 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74  saction again at
63a0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
63b0: 5e 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67  ^All intervening
63c0: 20 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20   SAVEPOINTs are 
63d0: 63 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65  canceled, howeve
63e0: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
63f0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
6400: 69 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49  is like a [COMMI
6410: 54 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49  T] for a SAVEPOI
6420: 4e 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45  NT..^The RELEASE
6430: 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20   command causes 
6440: 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62  all savepoints b
6450: 61 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75  ack to and inclu
6460: 64 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72  ding the .most r
6470: 65 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  ecent savepoint 
6480: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
6490: 6e 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76  name to be remov
64a0: 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61  ed from the .tra
64b0: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20  nsaction stack. 
64c0: 20 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66   ^The RELEASE of
64d0: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
64e0: 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63  ction.does not c
64f0: 61 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73  ause any changes
6500: 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74   to be written t
6510: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
6520: 69 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72  ile; it merely.r
6530: 65 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74  emoves savepoint
6540: 73 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73  s from the trans
6550: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63  action stack suc
6560: 68 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20  h that it is.no 
6570: 6c 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20  longer possible 
6580: 74 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74  to ROLLBACK TO t
6590: 68 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e  hose savepoints.
65a0: 0a 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63  .^If a RELEASE c
65b0: 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ommand releases 
65c0: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
65d0: 76 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74  vepoint, so.that
65e0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
65f0: 20 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65   stack becomes e
6600: 6d 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41  mpty, then RELEA
6610: 53 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61  SE is the same.a
6620: 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65  s [COMMIT]..^The
6630: 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e   [COMMIT] comman
6640: 64 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f  d may be used to
6650: 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76   release all sav
6660: 65 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d  epoints and.comm
6670: 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  it the transacti
6680: 6f 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74  on even if the t
6690: 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f  ransaction was o
66a0: 72 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65  riginally starte
66b0: 64 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54  d.by a SAVEPOINT
66c0: 20 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64   command instead
66d0: 20 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f   of a [BEGIN] co
66e0: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  mmand.</p>..<p>^
66f0: 49 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  If the savepoint
6700: 2d 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41  -name in a RELEA
6710: 53 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  SE command does 
6720: 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61  not match any.sa
6730: 76 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c  vepoint currentl
6740: 79 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63  y in the transac
6750: 74 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e  tion stack, then
6760: 20 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61   no savepoints a
6770: 72 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65  re.released, the
6780: 20 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63   database is unc
6790: 68 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20  hanged, and the 
67a0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
67b0: 72 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72  returns.an error
67c0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  .</p>..<p>^Note 
67d0: 74 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72  that an inner tr
67e0: 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20  ansaction might 
67f0: 63 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68  commit (using th
6800: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
6810: 64 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65  d).but then late
6820: 72 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20  r have its work 
6830: 75 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c  undone by a ROLL
6840: 42 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72  BACK in an outer
6850: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41   transaction..^A
6860: 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f   power failure o
6870: 72 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20  r program crash 
6880: 6f 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c  or OS crash will
6890: 20 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72   cause the outer
68a0: 2d 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f  -most.transactio
68b0: 6e 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75  n to rollback, u
68c0: 6e 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67  ndoing all chang
68d0: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
68e0: 75 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61  urred within.tha
68f0: 74 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  t outer transact
6900: 69 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65  ion, even change
6910: 73 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70  s that have supp
6920: 6f 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d  osedly been "com
6930: 6d 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52  mitted".by the R
6940: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20  ELEASE command. 
6950: 20 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74   ^Content is not
6960: 20 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74   actually commit
6970: 74 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20  ted on the disk 
6980: 0a 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72  .until the outer
6990: 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  most transaction
69a0: 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c   commits.</p>..<
69b0: 70 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65  p>There are seve
69c0: 72 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e  ral ways of thin
69d0: 6b 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52  king about the R
69e0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c  ELEASE command:<
69f0: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
6a00: 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69  >.Some people vi
6a10: 65 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68  ew RELEASE as th
6a20: 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  e equivalent of 
6a30: 43 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56  COMMIT for a SAV
6a40: 45 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20  EPOINT..This is 
6a50: 61 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f  an acceptable po
6a60: 69 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c  int of view as l
6a70: 6f 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d  ong as one remem
6a80: 62 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68  bers that the.ch
6a90: 61 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20  anges committed 
6aa0: 62 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e  by an inner tran
6ab0: 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61  saction might la
6ac0: 74 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79  ter be undone by
6ad0: 20 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61   a.rollback in a
6ae0: 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  n outer transact
6af0: 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ion.</p></li>..<
6b00: 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76  li><p>.Another v
6b10: 69 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69  iew of RELEASE i
6b20: 73 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73  s that it merges
6b30: 20 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63   a named transac
6b40: 74 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61  tion into its.pa
6b50: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
6b60: 2c 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61  , so that the na
6b70: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
6b80: 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62  and its parent b
6b90: 65 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74  ecome.the same t
6ba0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74  ransaction.  Aft
6bb0: 65 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20  er RELEASE, the 
6bc0: 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f  named transactio
6bd0: 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74  n and its parent
6be0: 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20  .will commit or 
6bf0: 72 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65  rollback togethe
6c00: 72 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69  r, whatever thei
6c10: 72 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c  r fate may be..<
6c20: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
6c30: 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74  >.One can also t
6c40: 68 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e  hink of savepoin
6c50: 74 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e  ts as."marks" in
6c60: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6c70: 20 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74   timeline.  In t
6c80: 68 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41  his view, the SA
6c90: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a  VEPOINT command.
6ca0: 63 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61  creates a new ma
6cb0: 72 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rk, the ROLLBACK
6cc0: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69   TO command rewi
6cd0: 6e 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65  nds the timeline
6ce0: 20 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74   back.to a point
6cf0: 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20   just after the 
6d00: 6e 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20  named mark, and 
6d10: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
6d20: 61 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73  and.erases marks
6d30: 20 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69   from the timeli
6d40: 6e 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61  ne without actua
6d50: 6c 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63  lly making any.c
6d60: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
6d70: 74 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69  tabase..</p></li
6d80: 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54  >.</ul>....<h3>T
6d90: 72 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69  ransaction Nesti
6da0: 6e 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  ng Rules</h3>..<
6db0: 70 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e  p>^The last tran
6dc0: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
6dd0: 77 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73  will be the firs
6de0: 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  t.transaction co
6df0: 6d 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65  mmitted or rolle
6e00: 64 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e  d back.</p>..<p>
6e10: 5e 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  ^The [BEGIN] com
6e20: 6d 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  mand only works 
6e30: 69 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  if the transacti
6e40: 6f 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74  on stack is empt
6e50: 79 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77  y, or.in other w
6e60: 6f 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72  ords if there ar
6e70: 65 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61  e no pending tra
6e80: 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20  nsactions.  ^If 
6e90: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  the transaction.
6ea0: 73 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70  stack is not emp
6eb0: 74 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47  ty when the [BEG
6ec0: 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69  IN] command is i
6ed0: 6e 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65  nvoked, then the
6ee0: 20 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77   command.fails w
6ef0: 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70  ith an error.</p
6f00: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d  >..<p>^The [COMM
6f10: 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  IT] command comm
6f20: 69 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64  its all outstand
6f30: 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ing transactions
6f40: 20 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20   and leaves.the 
6f50: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
6f60: 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70  k empty.</p>..<p
6f70: 3e 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f  >^The RELEASE co
6f80: 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74  mmand starts wit
6f90: 68 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  h the most recen
6fa0: 74 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68  t addition to th
6fb0: 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e.transaction st
6fc0: 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73  ack and releases
6fd0: 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b   savepoints back
6fe0: 77 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75  wards .in time u
6ff0: 6e 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73  ntil it releases
7000: 20 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74   a savepoint wit
7010: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76  h a matching sav
7020: 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72  epoint-name..^Pr
7030: 69 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20  ior savepoints, 
7040: 65 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  even savepoints 
7050: 77 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61  with matching sa
7060: 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61  vepoint-names, a
7070: 72 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49  re.unchanged..^I
7080: 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  f the RELEASE co
7090: 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65  mmand causes the
70a0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
70b0: 63 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70  ck to become emp
70c0: 74 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41  ty (if the RELEA
70d0: 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61  SE command relea
70e0: 73 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73  ses the.outermos
70f0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72  t transaction fr
7100: 6f 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68  om the stack) th
7110: 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  en the transacti
7120: 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a  on commits.</p>.
7130: 0a 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41  .<p>^The [ROLLBA
7140: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68  CK] command with
7150: 6f 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20  out a TO clause 
7160: 72 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20  rolls backs all 
7170: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64  transactions.and
7180: 20 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e   leaves the tran
7190: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d  saction stack em
71a0: 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  pty.</p>..<p>^Th
71b0: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
71c0: 6e 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61  nd with a TO cla
71d0: 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74  use rolls back t
71e0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e  ransactions goin
71f0: 67 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74  g.backwards in t
7200: 69 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20  ime back to the 
7210: 6d 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45  most recent SAVE
7220: 50 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74  POINT with a mat
7230: 63 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65  ching name..^The
7240: 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20   SAVEPOINT with 
7250: 74 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  the matching nam
7260: 65 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65  e remains on the
7270: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
7280: 63 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61  ck,.but all data
7290: 62 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61  base changes tha
72a0: 74 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72  t occurred after
72b0: 20 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20   that SAVEPOINT 
72c0: 77 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20  was created.are 
72d0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49  rolled back.  ^I
72e0: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
72f0: 6e 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41  name in a ROLLBA
7300: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f  CK TO command do
7310: 65 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79  es not.match any
7320: 20 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68   SAVEPOINT on th
7330: 65 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68  e stack, then th
7340: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
7350: 6e 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  nd fails with an
7360: 0a 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65  .error and leave
7370: 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  s the state of t
7380: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68  he database unch
7390: 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  anged.</p>..<tcl
73a0: 3e 0a 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 23 23 23 23 23 23 23 23 23 23  ################
73e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73f0: 23 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e  #.Section commen
7400: 74 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65  t comment {comme
7410: 6e 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52  nt *comments}..R
7420: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
7430: 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79  agram comment-sy
7440: 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ntax.</tcl>..<p>
7450: 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f  ^Comments are no
7460: 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20  t SQL commands, 
7470: 62 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69  but can occur wi
7480: 74 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66  thin the text of
7490: 0a 53 51 4c 20 71 75 65 72 69 65 73 20 70 61 73  .SQL queries pas
74a0: 73 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f  sed to [sqlite3_
74b0: 70 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e  prepare_v2()] an
74c0: 64 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66  d related interf
74d0: 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  aces..^Comments 
74e0: 61 72 65 20 74 72 65 61 74 65 64 20 61 73 20 77  are treated as w
74f0: 68 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65  hitespace by the
7500: 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e   parser..^Commen
7510: 74 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79  ts can begin any
7520: 77 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65  where whitespace
7530: 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20   .can be found, 
7540: 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65  including inside
7550: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
7560: 74 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20  t span multiple 
7570: 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  lines..</p>..<p>
7580: 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65  ^SQL comments be
7590: 67 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e  gin with two con
75a0: 73 65 63 75 74 69 76 65 20 22 2d 22 20 63 68 61  secutive "-" cha
75b0: 72 61 63 74 65 72 73 20 28 41 53 43 49 49 20 30  racters (ASCII 0
75c0: 78 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20  x2d).and extend 
75d0: 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  up to and includ
75e0: 69 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77  ing the next new
75f0: 6c 69 6e 65 20 63 68 61 72 61 63 74 65 72 20 28  line character (
7600: 41 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75  ASCII 0x0a).or u
7610: 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20  ntil the end of 
7620: 69 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72  input, whichever
7630: 20 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70   comes first.</p
7640: 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63  >..<p>^C-style c
7650: 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69  omments begin.wi
7660: 74 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65  th "/*" and exte
7670: 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63  nd up to and inc
7680: 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20  luding the next 
7690: 22 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70  "*/" character p
76a0: 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65  air.or until the
76b0: 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77   end of input, w
76c0: 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66  hichever comes f
76d0: 69 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20  irst.  ^C-style 
76e0: 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61  comments.can spa
76f0: 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73  n multiple lines
7700: 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d  . </p>..<p>^Comm
7710: 65 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20  ents can appear 
7720: 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70  anywhere whitesp
7730: 61 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69  ace can occur,.i
7740: 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20  ncluding inside 
7750: 65 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20  expressions and 
7760: 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66  in the middle of
7770: 20 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65   other SQL state
7780: 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73  ments..^Comments
7790: 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f   do not nest..</
77a0: 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  p>...<tcl>.#####
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 23 23  ################
77e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77f0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
7800: 6e 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d  n {CREATE INDEX}
7810: 20 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43   createindex {{C
7820: 52 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52  REATE INDEX}}..R
7830: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
7840: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64  agram create-ind
7850: 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ex-stmt.</tcl>..
7860: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 49  <p>^The CREATE I
7870: 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e  NDEX command con
7880: 73 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79  sists of the key
7890: 77 6f 72 64 73 20 22 43 52 45 41 54 45 20 49 4e  words "CREATE IN
78a0: 44 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79  DEX" followed.by
78b0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
78c0: 20 6e 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20   new index, the 
78d0: 6b 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68  keyword "ON", th
78e0: 65 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76  e name of a prev
78f0: 69 6f 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74  iously.created t
7900: 61 62 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20  able that is to 
7910: 62 65 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20  be indexed, and 
7920: 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
7930: 6c 69 73 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66  list of names of
7940: 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20  .columns in the 
7950: 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 75  table that are u
7960: 73 65 64 20 66 6f 72 20 74 68 65 20 69 6e 64 65  sed for the inde
7970: 78 20 6b 65 79 2e 0a 49 66 20 74 68 65 20 6f 70  x key..If the op
7980: 74 69 6f 6e 61 6c 20 57 48 45 52 45 20 63 6c 61  tional WHERE cla
7990: 75 73 65 20 69 73 20 69 6e 63 6c 75 64 65 64 2c  use is included,
79a0: 20 74 68 65 6e 20 74 68 65 20 69 6e 64 65 78 20   then the index 
79b0: 69 73 20 61 20 22 5b 70 61 72 74 69 61 6c 20 69  is a "[partial i
79c0: 6e 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74  ndex]"..</p>..<t
79d0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
79e0: 64 65 73 63 69 64 78 7d 20 7b 64 65 73 63 65 6e  descidx} {descen
79f0: 64 69 6e 67 20 69 6e 64 69 63 65 73 7d 20 7b 64  ding indices} {d
7a00: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 7d  escending index}
7a10: 20 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64   {descending ind
7a20: 65 78 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  exes}</tcl>.<p>^
7a30: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  Each column name
7a40: 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64   can be followed
7a50: 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 22   by one of the "
7a60: 41 53 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b  ASC" or "DESC" k
7a70: 65 79 77 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63  eywords.to indic
7a80: 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 20  ate sort order. 
7a90: 20 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72   ^The sort order
7aa0: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
7ab0: 62 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e  be ignored depen
7ac0: 64 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61  ding.on the data
7ad0: 62 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74  base file format
7ae0: 2c 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63 75  , and in particu
7af0: 6c 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61 20  lar the [schema 
7b00: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a  format number]..
7b10: 5e 54 68 65 20 22 6c 65 67 61 63 79 22 20 73 63  ^The "legacy" sc
7b20: 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29 20  hema format (1) 
7b30: 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f  ignores index.so
7b40: 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20  rt order.  ^The 
7b50: 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78  descending index
7b60: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28   schema format (
7b70: 34 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73  4) takes index s
7b80: 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61  ort order.into a
7b90: 63 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65  ccount.  Only ve
7ba0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
7bb0: 20 33 2e 33 2e 30 20 61 6e 64 20 6c 61 74 65 72   3.3.0 and later
7bc0: 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64   are able to und
7bd0: 65 72 73 74 61 6e 64 0a 74 68 65 20 64 65 73 63  erstand.the desc
7be0: 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 66 6f 72  ending index for
7bf0: 6d 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69  mat. For compati
7c00: 62 69 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20  bility, version 
7c10: 6f 66 20 53 51 4c 69 74 65 20 62 65 74 77 65 65  of SQLite betwee
7c20: 6e 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e  n 3.3.0.and 3.7.
7c30: 39 20 75 73 65 20 74 68 65 20 6c 65 67 61 63 79  9 use the legacy
7c40: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62   schema format b
7c50: 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20  y default.  The 
7c60: 6e 65 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72  newer schema for
7c70: 6d 61 74 20 69 73 0a 75 73 65 64 20 62 79 20 64  mat is.used by d
7c80: 65 66 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f  efault in versio
7c90: 6e 20 33 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74  n 3.7.10 and lat
7ca0: 65 72 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79  er..^The [legacy
7cb0: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61  _file_format pra
7cc0: 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64  gma] can be used
7cd0: 20 74 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74   to change set t
7ce0: 68 65 20 73 70 65 63 69 66 69 63 0a 62 65 68 61  he specific.beha
7cf0: 76 69 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72  vior for any ver
7d00: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c  sion of SQLite.<
7d10: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c  /p>..<p>^The COL
7d20: 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69  LATE clause opti
7d30: 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67  onally following
7d40: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d   each column nam
7d50: 65 20 64 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c  e defines a.coll
7d60: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 75  ating sequence u
7d70: 73 65 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74  sed for text ent
7d80: 72 69 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c  ries in that col
7d90: 75 6d 6e 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c  umn..^The defaul
7da0: 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75  t collating.sequ
7db0: 65 6e 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c  ence is the coll
7dc0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64  ating sequence d
7dd0: 65 66 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20  efined for that 
7de0: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43  column in the.[C
7df0: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
7e00: 74 65 6d 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20  tement.  ^Or if 
7e10: 6e 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  no collating seq
7e20: 75 65 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69  uence is otherwi
7e30: 73 65 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20  se defined,.the 
7e40: 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20  built-in BINARY 
7e50: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
7e60: 63 65 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a  ce is used.</p>.
7e70: 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f  .<p>There are no
7e80: 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74   arbitrary limit
7e90: 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  s on the number 
7ea0: 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20  of indices that 
7eb0: 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20  can be.attached 
7ec0: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
7ed0: 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72  e.  ^(The number
7ee0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61   of columns in a
7ef0: 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69  n index is .limi
7f00: 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ted to the value
7f10: 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33   set by.[sqlite3
7f20: 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f  _limit]([SQLITE_
7f30: 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e  LIMIT_COLUMN],..
7f40: 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  .).)^</p>..<tcl>
7f50: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71  hd_fragment uniq
7f60: 75 65 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e  ueidx {unique in
7f70: 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49  dex}</tcl>.<p>^I
7f80: 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79  f the UNIQUE key
7f90: 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 74  word appears bet
7fa0: 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20  ween CREATE and 
7fb0: 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69  INDEX then dupli
7fc0: 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69  cate.index entri
7fd0: 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77  es are not allow
7fe0: 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70  ed.  ^Any attemp
7ff0: 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75  t to insert a du
8000: 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69  plicate entry.wi
8010: 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  ll result in an 
8020: 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65  error.  ^For the
8030: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69   purposes of uni
8040: 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c  que indices, all
8050: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65   NULL values.are
8060: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64   considered to d
8070: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c  ifferent from al
8080: 6c 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c  l other NULL val
8090: 75 65 73 20 61 6e 64 20 61 72 65 20 74 68 75 73  ues and are thus
80a0: 20 75 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73   unique..This is
80b0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20   one of the two 
80c0: 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72  possible interpr
80d0: 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  etations of the 
80e0: 53 51 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a  SQL-92 standard.
80f0: 28 74 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e  (the language in
8100: 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 69 73   the standard is
8110: 20 61 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20   ambiguous) and 
8120: 69 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74  is the interpret
8130: 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62  ation.followed b
8140: 79 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79  y PostgreSQL, My
8150: 53 51 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61  SQL, Firebird, a
8160: 6e 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f  nd Oracle.  Info
8170: 72 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f  rmix and.Microso
8180: 66 74 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f  ft SQL Server fo
8190: 6c 6c 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69  llow the other i
81a0: 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
81b0: 20 74 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f   the standard.</
81c0: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f  p>..<p>^If the o
81d0: 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45  ptional IF NOT E
81e0: 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20  XISTS clause is 
81f0: 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74  present and anot
8200: 68 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74  her index.with t
8210: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72  he same name alr
8220: 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65  eady exists, the
8230: 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62  n this command b
8240: 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c  ecomes a no-op.<
8250: 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73  /p>..<p>^Indexes
8260: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74   are removed wit
8270: 68 20 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45  h the [DROP INDE
8280: 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  X] command.</p>.
8290: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
82a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82e0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
82f0: 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63  CREATE TABLE} {c
8300: 72 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52  reatetable} {{CR
8310: 45 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65  EATE TABLE}}..Re
8320: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
8330: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c  gram create-tabl
8340: 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-stmt.</tcl>..<
8350: 70 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41  p>The "CREATE TA
8360: 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  BLE" command is 
8370: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  used to create a
8380: 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e   new table in an
8390: 20 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73   SQLite .databas
83a0: 65 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c  e. A CREATE TABL
83b0: 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66  E command specif
83c0: 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ies the followin
83d0: 67 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  g attributes of 
83e0: 74 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a  the.new table:..
83f0: 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68  <ul>.  <li><p>Th
8400: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
8410: 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  w table...  <li>
8420: 3c 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65  <p> The database
8430: 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65   in which the ne
8440: 77 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  w table is creat
8450: 65 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62  ed. Tables may b
8460: 65 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64  e .      created
8470: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
8480: 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20  abase, the temp 
8490: 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20  database, or in 
84a0: 61 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20  any attached.   
84b0: 20 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20     database...  
84c0: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65  <li><p> The name
84d0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
84e0: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
84f0: 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63   <li><p> The dec
8500: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61  lared type of ea
8510: 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
8520: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
8530: 70 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c  p> A default val
8540: 75 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  ue or expression
8550: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
8560: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a   in the table...
8570: 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61    <li><p> A defa
8580: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
8590: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69  quence to use wi
85a0: 74 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a  th each column..
85b0: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f  .  <li><p> Optio
85c0: 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59  nally, a PRIMARY
85d0: 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
85e0: 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20  le. Both single 
85f0: 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20  column and.     
8600: 20 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c    composite (mul
8610: 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72  tiple column) pr
8620: 69 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73  imary keys are s
8630: 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69  upported...  <li
8640: 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51  ><p> A set of SQ
8650: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f  L constraints fo
8660: 72 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51  r each table. SQ
8670: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e  Lite supports UN
8680: 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20  IQUE, NOT.      
8690: 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64   NULL, CHECK and
86a0: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e   FOREIGN KEY con
86b0: 73 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69  straints...  <li
86c0: 3e 3c 70 3e 20 57 68 65 74 68 65 72 20 74 68 65  ><p> Whether the
86d0: 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54   table is a [WIT
86e0: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
86f0: 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65  e..</ul>..<p>Eve
8700: 72 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ry CREATE TABLE 
8710: 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73  statement must s
8720: 70 65 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f  pecify a name fo
8730: 72 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e  r the new table.
8740: 0a 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73  .  ^(Table names
8750: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
8760: 20 22 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72   "sqlite_" are r
8770: 65 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65  eserved for inte
8780: 72 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69  rnal use. It.  i
8790: 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74  s an error to at
87a0: 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20  tempt to create 
87b0: 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e  a table with a n
87c0: 61 6d 65 20 74 68 61 74 20 73 74 61 72 74 73 20  ame that starts 
87d0: 77 69 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22  with.  "sqlite_"
87e0: 2e 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26  .)^..<p> ^If a &
87f0: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
8800: 26 67 74 3b 20 69 73 20 73 70 65 63 69 66 69 65  &gt; is specifie
8810: 64 2c 20 69 74 20 6d 75 73 74 20 62 65 20 65 69  d, it must be ei
8820: 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 0a 20 20  ther "main", .  
8830: 22 74 65 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e  "temp", or the n
8840: 61 6d 65 20 6f 66 20 61 6e 20 5b 41 54 54 41 43  ame of an [ATTAC
8850: 48 20 44 41 54 41 42 41 53 45 7c 61 74 74 61 63  H DATABASE|attac
8860: 68 65 64 20 64 61 74 61 62 61 73 65 5d 2e 20 5e  hed database]. ^
8870: 49 6e 20 74 68 69 73 20 63 61 73 65 0a 20 20 74  In this case.  t
8880: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20  he new table is 
8890: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6e  created in the n
88a0: 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e  amed database. ^
88b0: 49 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72  If the "TEMP" or
88c0: 20 22 54 45 4d 50 4f 52 41 52 59 22 0a 20 20 6b   "TEMPORARY".  k
88d0: 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 62 65  eyword occurs be
88e0: 74 77 65 65 6e 20 74 68 65 20 22 43 52 45 41 54  tween the "CREAT
88f0: 45 22 20 61 6e 64 20 22 54 41 42 4c 45 22 20 74  E" and "TABLE" t
8900: 68 65 6e 20 74 68 65 20 6e 65 77 20 74 61 62 6c  hen the new tabl
8910: 65 20 69 73 0a 20 20 63 72 65 61 74 65 64 20 69  e is.  created i
8920: 6e 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62  n the temp datab
8930: 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65  ase. ^It is an e
8940: 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20  rror to specify 
8950: 62 6f 74 68 20 61 20 0a 20 20 26 6c 74 3b 64 61  both a .  &lt;da
8960: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
8970: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20  and the TEMP or 
8980: 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72  TEMPORARY keywor
8990: 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20  d, unless the.  
89a0: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
89b0: 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e  e&gt; is "temp".
89c0: 20 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65   ^If no database
89d0: 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69   name is specifi
89e0: 65 64 20 61 6e 64 20 74 68 65 0a 20 20 54 45 4d  ed and the.  TEM
89f0: 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74  P keyword is not
8a00: 20 70 72 65 73 65 6e 74 20 74 68 65 6e 20 74 68   present then th
8a10: 65 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  e table is creat
8a20: 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 0a 20  ed in the main. 
8a30: 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 0a   database...<p>.
8a40: 20 20 5e 49 74 20 69 73 20 75 73 75 61 6c 6c 79    ^It is usually
8a50: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74   an error to att
8a60: 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61  empt to create a
8a70: 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 20   new table in a 
8a80: 64 61 74 61 62 61 73 65 20 74 68 61 74 0a 20 20  database that.  
8a90: 61 6c 72 65 61 64 79 20 63 6f 6e 74 61 69 6e 73  already contains
8aa0: 20 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 20   a table, index 
8ab0: 6f 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73  or view of the s
8ac0: 61 6d 65 20 6e 61 6d 65 2e 20 5e 48 6f 77 65 76  ame name. ^Howev
8ad0: 65 72 2c 20 69 66 20 74 68 65 0a 20 20 22 49 46  er, if the.  "IF
8ae0: 20 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61   NOT EXISTS" cla
8af0: 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
8b00: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
8b10: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
8b20: 74 65 6d 65 6e 74 20 61 6e 64 0a 20 20 61 20 74  tement and.  a t
8b30: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 20  able or view of 
8b40: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c  the same name al
8b50: 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68  ready exists, th
8b60: 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  e CREATE TABLE c
8b70: 6f 6d 6d 61 6e 64 0a 20 20 73 69 6d 70 6c 79 20  ommand.  simply 
8b80: 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20 28 61  has no effect (a
8b90: 6e 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73  nd no error mess
8ba0: 61 67 65 20 69 73 20 72 65 74 75 72 6e 65 64 29  age is returned)
8bb0: 2e 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 73  . ^An error is s
8bc0: 74 69 6c 6c 0a 20 20 72 65 74 75 72 6e 65 64 20  till.  returned 
8bd0: 69 66 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e  if the table can
8be0: 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 62  not be created b
8bf0: 65 63 61 75 73 65 20 6f 66 20 61 6e 20 65 78 69  ecause of an exi
8c00: 73 74 69 6e 67 20 69 6e 64 65 78 2c 20 65 76 65  sting index, eve
8c10: 6e 20 0a 20 20 69 66 20 74 68 65 20 22 49 46 20  n .  if the "IF 
8c20: 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75  NOT EXISTS" clau
8c30: 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  se is specified.
8c40: 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 6e 6f 74 20  ..<p>^It is not 
8c50: 61 6e 20 65 72 72 6f 72 20 74 6f 20 63 72 65 61  an error to crea
8c60: 74 65 20 61 20 74 61 62 6c 65 20 74 68 61 74 20  te a table that 
8c70: 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
8c80: 65 20 61 73 20 61 6e 20 0a 20 20 65 78 69 73 74  e as an .  exist
8c90: 69 6e 67 20 5b 43 52 45 41 54 45 20 54 52 49 47  ing [CREATE TRIG
8ca0: 47 45 52 7c 74 72 69 67 67 65 72 5d 2e 0a 0a 3c  GER|trigger]...<
8cb0: 70 3e 5e 54 61 62 6c 65 73 20 61 72 65 20 72 65  p>^Tables are re
8cc0: 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20  moved using the 
8cd0: 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61  [DROP TABLE] sta
8ce0: 74 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c  tement.  </p>..<
8cf0: 68 33 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  h3>CREATE TABLE 
8d00: 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 53 74  ... AS SELECT St
8d10: 61 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c  atements</h3>..<
8d20: 70 3e 5e 28 41 20 22 43 52 45 41 54 45 20 54 41  p>^(A "CREATE TA
8d30: 42 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43  BLE ... AS SELEC
8d40: 54 22 20 73 74 61 74 65 6d 65 6e 74 20 63 72 65  T" statement cre
8d50: 61 74 65 73 20 61 6e 64 20 70 6f 70 75 6c 61 74  ates and populat
8d60: 65 73 20 61 20 64 61 74 61 62 61 73 65 0a 74 61  es a database.ta
8d70: 62 6c 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ble based on the
8d80: 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
8d90: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29  LECT statement.)
8da0: 5e 20 5e 28 54 68 65 20 74 61 62 6c 65 20 68 61  ^ ^(The table ha
8db0: 73 20 74 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65  s the same.numbe
8dc0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20  r of columns as 
8dd0: 74 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65  the rows returne
8de0: 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20  d by the SELECT 
8df0: 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e  statement. The n
8e00: 61 6d 65 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75  ame of.each colu
8e10: 6d 6e 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  mn is the same a
8e20: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
8e30: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
8e40: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65  column in the re
8e50: 73 75 6c 74 0a 73 65 74 20 6f 66 20 74 68 65 20  sult.set of the 
8e60: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
8e70: 2e 29 5e 20 5e 28 54 68 65 20 64 65 63 6c 61 72  .)^ ^(The declar
8e80: 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20  ed type of each 
8e90: 63 6f 6c 75 6d 6e 20 69 73 20 64 65 74 65 72 6d  column is determ
8ea0: 69 6e 65 64 0a 62 79 20 74 68 65 20 5b 65 78 70  ined.by the [exp
8eb0: 72 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74 79  ression affinity
8ec0: 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  ] of the corresp
8ed0: 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f  onding expressio
8ee0: 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  n in the result 
8ef0: 73 65 74 0a 6f 66 20 74 68 65 20 53 45 4c 45 43  set.of the SELEC
8f00: 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 73 20  T statement, as 
8f10: 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c  follows:.</p>..<
8f20: 63 65 6e 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f  center><table bo
8f30: 72 64 65 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74  rder=1>.  <tr><t
8f40: 68 3e 45 78 70 72 65 73 73 69 6f 6e 20 41 66 66  h>Expression Aff
8f50: 69 6e 69 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75  inity   <th>Colu
8f60: 6d 6e 20 44 65 63 6c 61 72 65 64 20 54 79 70 65  mn Declared Type
8f70: 0a 20 20 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20  .  <tr><td>TEXT 
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f90: 20 3c 74 64 3e 22 54 45 58 54 22 0a 20 20 3c 74   <td>"TEXT".  <t
8fa0: 72 3e 3c 74 64 3e 4e 55 4d 45 52 49 43 20 20 20  r><td>NUMERIC   
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e              <td>
8fc0: 22 4e 55 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e  "NUM".  <tr><td>
8fd0: 49 4e 54 45 47 45 52 20 20 20 20 20 20 20 20 20  INTEGER         
8fe0: 20 20 20 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a        <td>"INT".
8ff0: 20 20 3c 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20    <tr><td>REAL  
9000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9010: 3c 74 64 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72  <td>"REAL".  <tr
9020: 3e 3c 74 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20  ><td>NONE       
9030: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
9040: 22 20 28 65 6d 70 74 79 20 73 74 72 69 6e 67 29  " (empty string)
9050: 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65  .</table></cente
9060: 72 3e 29 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62  r>)^..<p>^(A tab
9070: 6c 65 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  le created using
9080: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53   CREATE TABLE AS
9090: 20 68 61 73 20 6e 6f 20 50 52 49 4d 41 52 59 20   has no PRIMARY 
90a0: 4b 45 59 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74  KEY and no.const
90b0: 72 61 69 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69  raints of any ki
90c0: 6e 64 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20  nd. The default 
90d0: 76 61 6c 75 65 20 6f 66 20 65 61 63 68 20 63 6f  value of each co
90e0: 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68  lumn is NULL. Th
90f0: 65 20 64 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74  e default.collat
9100: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ion sequence for
9110: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
9120: 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73  the new table is
9130: 20 42 49 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e   BINARY.)^..<p>^
9140: 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
9150: 73 69 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c  sing CREATE TABL
9160: 45 20 41 53 20 61 72 65 20 69 6e 69 74 69 61 6c  E AS are initial
9170: 6c 79 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74  ly populated wit
9180: 68 20 74 68 65 0a 72 6f 77 73 20 6f 66 20 64 61  h the.rows of da
9190: 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ta returned by t
91a0: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
91b0: 65 6e 74 2e 20 5e 52 6f 77 73 20 61 72 65 20 61  ent. ^Rows are a
91c0: 73 73 69 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f  ssigned contiguo
91d0: 75 73 6c 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b  usly.ascending [
91e0: 72 6f 77 69 64 5d 20 76 61 6c 75 65 73 2c 20 73  rowid] values, s
91f0: 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 2c 20  tarting with 1, 
9200: 69 6e 20 74 68 65 20 5b 6f 72 64 65 72 20 62 79  in the [order by
9210: 7c 6f 72 64 65 72 5d 20 74 68 61 74 20 74 68 65  |order] that the
9220: 79 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 62  y.are returned b
9230: 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
9240: 74 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64  tement...<tcl>hd
9250: 5f 66 72 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65  _fragment {table
9260: 63 6f 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20  coldef} {column 
9270: 64 65 66 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c  definition} {col
9280: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d  umn definitions}
9290: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d  </tcl>.<h3>Colum
92a0: 6e 20 44 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68  n Definitions</h
92b0: 33 3e 0a 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74  3>..<p>Unless it
92c0: 20 69 73 20 61 20 43 52 45 41 54 45 20 54 41 42   is a CREATE TAB
92d0: 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54  LE ... AS SELECT
92e0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 20 43 52   statement, a CR
92f0: 45 41 54 45 20 54 41 42 4c 45 20 69 6e 63 6c 75  EATE TABLE inclu
9300: 64 65 73 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  des.one or more 
9310: 5b 63 6f 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75  [column-def|colu
9320: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c  mn definitions],
9330: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
9340: 6f 77 65 64 20 62 79 20 61 20 6c 69 73 74 20 6f  owed by a list o
9350: 66 0a 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61  f.[table-constra
9360: 69 6e 74 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72  int|table constr
9370: 61 69 6e 74 73 5d 2e 20 20 45 61 63 68 20 63 6f  aints].  Each co
9380: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  lumn definition 
9390: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 0a  consists of the.
93a0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  name of the colu
93b0: 6d 6e 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66  mn, optionally f
93c0: 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 64  ollowed by the d
93d0: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
93e0: 74 68 65 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e  the column,.then
93f0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74   one or more opt
9400: 69 6f 6e 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f  ional [column-co
9410: 6e 73 74 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20  nstraint|column 
9420: 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e  constraints]. In
9430: 63 6c 75 64 65 64 20 69 6e 0a 74 68 65 20 64 65  cluded in.the de
9440: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c  finition of "col
9450: 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 22  umn constraints"
9460: 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
9470: 73 20 6f 66 20 74 68 65 20 70 72 65 76 69 6f 75  s of the previou
9480: 73 0a 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20  s.statement are 
9490: 74 68 65 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20  the COLLATE and 
94a0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 73 2c  DEFAULT clauses,
94b0: 20 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65   even though the
94c0: 73 65 20 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c  se are not reall
94d0: 79 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e  y.constraints in
94e0: 20 74 68 65 20 73 65 6e 73 65 20 74 68 61 74 20   the sense that 
94f0: 74 68 65 79 20 64 6f 20 6e 6f 74 20 72 65 73 74  they do not rest
9500: 72 69 63 74 20 74 68 65 20 64 61 74 61 20 74 68  rict the data th
9510: 61 74 20 74 68 65 20 74 61 62 6c 65 20 6d 61 79  at the table may
9520: 0a 63 6f 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74  .contain. The ot
9530: 68 65 72 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  her constraints 
9540: 2d 20 4e 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43  - NOT NULL, CHEC
9550: 4b 2c 20 55 4e 49 51 55 45 2c 20 50 52 49 4d 41  K, UNIQUE, PRIMA
9560: 52 59 20 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49  RY KEY and.FOREI
9570: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
9580: 74 73 20 2d 20 69 6d 70 6f 73 65 20 72 65 73 74  ts - impose rest
9590: 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  rictions on the 
95a0: 74 61 62 6c 65 73 20 64 61 74 61 2c 20 61 6e 64  tables data, and
95b0: 20 61 72 65 20 61 72 65 0a 64 65 73 63 72 69 62   are are.describ
95c0: 65 64 20 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72  ed under [constr
95d0: 61 69 6e 74 73 7c 53 51 4c 20 44 61 74 61 20 43  aints|SQL Data C
95e0: 6f 6e 73 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f  onstraints] belo
95f0: 77 2e 0a 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d  w...<p>^Unlike m
9600: 6f 73 74 20 53 51 4c 20 64 61 74 61 62 61 73 65  ost SQL database
9610: 73 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  s, SQLite does n
9620: 6f 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20  ot restrict the 
9630: 74 79 70 65 20 6f 66 20 64 61 74 61 20 74 68 61  type of data tha
9640: 74 0a 6d 61 79 20 62 65 20 69 6e 73 65 72 74 65  t.may be inserte
9650: 64 20 69 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  d into a column 
9660: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c  based on the col
9670: 75 6d 6e 73 20 64 65 63 6c 61 72 65 64 20 74 79  umns declared ty
9680: 70 65 2e 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c  pe. Instead,.SQL
9690: 69 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69  ite uses [dynami
96a0: 63 20 74 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20  c typing]. ^The 
96b0: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66  declared type of
96c0: 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65   a column is use
96d0: 64 20 74 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74  d to.determine t
96e0: 68 65 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66  he [affinity] of
96f0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79   the column only
9700: 2e 0a 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c  ...<p>The DEFAUL
9710: 54 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  T clause specifi
9720: 65 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  es a default val
9730: 75 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68  ue to use for th
9740: 65 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76  e column if no.v
9750: 61 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69 74  alue is explicit
9760: 6c 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74  ly provided by t
9770: 68 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69  he user when doi
9780: 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20  ng an [INSERT]. 
9790: 5e 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20  ^If there.is no 
97a0: 65 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54  explicit DEFAULT
97b0: 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64   clause attached
97c0: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
97d0: 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  inition, then th
97e0: 65 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65  e .default value
97f0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69   of the column i
9800: 73 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70  s NULL. ^(An exp
9810: 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c  licit DEFAULT cl
9820: 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79  ause may specify
9830: 0a 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c  .that the defaul
9840: 74 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  t value is NULL,
9850: 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61   a string consta
9860: 6e 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  nt, a blob const
9870: 61 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75  ant, a.signed-nu
9880: 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e  mber, or any con
9890: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
98a0: 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72   enclosed in par
98b0: 65 6e 74 68 65 73 65 73 2e 20 41 0a 64 65 66 61  entheses. A.defa
98c0: 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c  ult value may al
98d0: 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  so be one of the
98e0: 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e   special case-in
98f0: 64 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f 72  dependent keywor
9900: 64 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  ds.CURRENT_TIME,
9910: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72   CURRENT_DATE or
9920: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
9930: 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70  MP.)^ ^For the p
9940: 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a 44  urposes of the.D
9950: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61  EFAULT clause, a
9960: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
9970: 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73 74  considered const
9980: 61 6e 74 20 69 66 20 69 74 20 64 6f 65 73 0a 63  ant if it does.c
9990: 6f 6e 74 61 69 6e 73 20 6e 6f 20 73 75 62 2d 71  ontains no sub-q
99a0: 75 65 72 69 65 73 2c 20 63 6f 6c 75 6d 6e 20 6f  ueries, column o
99b0: 72 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63  r table referenc
99c0: 65 73 2c 20 5b 62 6f 75 6e 64 20 70 61 72 61 6d  es, [bound param
99d0: 65 74 65 72 73 5d 2c 0a 6f 72 20 73 74 72 69 6e  eters],.or strin
99e0: 67 20 6c 69 74 65 72 61 6c 73 20 65 6e 63 6c 6f  g literals enclo
99f0: 73 65 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75  sed in double-qu
9a00: 6f 74 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20  otes instead of 
9a10: 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 2e 0a 0a  single-quotes...
9a20: 3c 70 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61  <p>^(Each time a
9a30: 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64   row is inserted
9a40: 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20   into the table 
9a50: 62 79 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  by an INSERT sta
9a60: 74 65 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65  tement that .doe
9a70: 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78  s not provide ex
9a80: 70 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f  plicit values fo
9a90: 72 20 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75  r all table colu
9aa0: 6d 6e 73 20 74 68 65 20 76 61 6c 75 65 73 20 73  mns the values s
9ab0: 74 6f 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77  tored in.the new
9ac0: 20 72 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69   row are determi
9ad0: 6e 65 64 20 62 79 20 74 68 65 69 72 20 64 65 66  ned by their def
9ae0: 61 75 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61  ault values)^, a
9af0: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e  s follows:..<ul>
9b00: 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  .  <li><p>^If th
9b10: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
9b20: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  of the column is
9b30: 20 61 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c   a constant NULL
9b40: 2c 20 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a  , text, blob or.
9b50: 20 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65      signed-numbe
9b60: 72 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68  r value, then th
9b70: 61 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64  at value is used
9b80: 20 64 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65   directly in the
9b90: 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69   new row...  <li
9ba0: 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61  ><p>^If the defa
9bb0: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63  ult value of a c
9bc0: 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72  olumn is an expr
9bd0: 65 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74  ession in parent
9be0: 68 65 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20  heses, then.    
9bf0: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
9c00: 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65  s evaluated once
9c10: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
9c20: 73 65 72 74 65 64 20 61 6e 64 20 74 68 65 20 72  serted and the r
9c30: 65 73 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20  esults.    used 
9c40: 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a  in the new row..
9c50: 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  .  <li><p>^If th
9c60: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
9c70: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43  of a column is C
9c80: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52  URRENT_TIME, CUR
9c90: 52 45 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20  RENT_DATE or.   
9ca0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
9cb0: 4d 50 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  MP, then the val
9cc0: 75 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e  ue used in the n
9cd0: 65 77 20 72 6f 77 20 69 73 20 61 20 74 65 78 74  ew row is a text
9ce0: 0a 20 20 20 20 72 65 70 72 65 73 65 6e 74 61 74  .    representat
9cf0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65  ion of the curre
9d00: 6e 74 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f  nt UTC date and/
9d10: 6f 72 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55  or time. ^For CU
9d20: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a  RRENT_TIME, the.
9d30: 20 20 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68      format of th
9d40: 65 20 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d  e value is "HH:M
9d50: 4d 3a 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52  M:SS". ^For CURR
9d60: 45 4e 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d  ENT_DATE, "YYYY-
9d70: 4d 4d 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20  MM-DD". ^The.   
9d80: 20 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52   format for CURR
9d90: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73  ENT_TIMESTAMP is
9da0: 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a   "YYYY-MM-DD HH:
9db0: 4d 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  MM:SS"..</ul>..<
9dc0: 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63  p>^The COLLATE c
9dd0: 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20  lause specifies 
9de0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63  the name of a [c
9df0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
9e00: 65 5d 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65  e] to use as.the
9e10: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
9e20: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  on sequence for 
9e30: 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20  the column. ^If 
9e40: 6e 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  no COLLATE claus
9e50: 65 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20  e is.specified, 
9e60: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
9e70: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69  ation sequence i
9e80: 73 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e  s [BINARY]...<p>
9e90: 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  ^The number of c
9ea0: 6f 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c  olumns in a tabl
9eb0: 65 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20  e is limited by 
9ec0: 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  the [SQLITE_MAX_
9ed0: 43 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d  COLUMN].compile-
9ee0: 74 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20  time parameter. 
9ef0: 5e 41 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66  ^A single row of
9f00: 20 61 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20   a table cannot 
9f10: 73 74 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a  store more than.
9f20: 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47  [SQLITE_MAX_LENG
9f30: 54 48 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74  TH] bytes of dat
9f40: 61 2e 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73  a. ^Both of thes
9f50: 65 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20  e limits can be 
9f60: 6c 6f 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69  lowered at.runti
9f70: 6d 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71  me using the [sq
9f80: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43  lite3_limit()] C
9f90: 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c  /C++ interface.<
9fa0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
9fb0: 67 6d 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e  gment {constrain
9fc0: 74 73 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73  ts} {constraints
9fd0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20  }</tcl>.<h3>SQL 
9fe0: 44 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73  Data Constraints
9ff0: 3c 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </h3>..<tcl>hd_f
a000: 72 61 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63  ragment primkeyc
a010: 6f 6e 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45  onst {PRIMARY KE
a020: 59 7d 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20  Y} {PRIMARY KEY 
a030: 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c  constraint}</tcl
a040: 3e 0a 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65  >.<p>^Each table
a050: 20 69 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68   in SQLite may h
a060: 61 76 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20  ave at most one 
a070: 3c 62 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f  <b>PRIMARY KEY</
a080: 62 3e 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65  b>. ^If the.  ke
a090: 79 77 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b  ywords PRIMARY K
a0a0: 45 59 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  EY are added to 
a0b0: 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  a column definit
a0c0: 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72  ion, then the pr
a0d0: 69 6d 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20  imary key.  for 
a0e0: 74 68 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73  the table consis
a0f0: 74 73 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c  ts of that singl
a100: 65 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69  e column. ^Or, i
a110: 66 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  f a PRIMARY KEY 
a120: 63 6c 61 75 73 65 20 0a 20 20 69 73 20 73 70 65  clause .  is spe
a130: 63 69 66 69 65 64 20 61 73 20 61 20 5b 74 61 62  cified as a [tab
a140: 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20  le-constraint], 
a150: 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79  then the primary
a160: 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
a170: 65 0a 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  e.  consists of 
a180: 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75  the list of colu
a190: 6d 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73  mns specified as
a1a0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49   part of the PRI
a1b0: 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e  MARY KEY clause.
a1c0: 0a 20 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20  .  ^An error is 
a1d0: 72 61 69 73 65 64 20 69 66 20 6d 6f 72 65 20 74  raised if more t
a1e0: 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20  han one PRIMARY 
a1f0: 4b 45 59 20 63 6c 61 75 73 65 20 61 70 70 65 61  KEY clause appea
a200: 72 73 20 69 6e 20 61 0a 20 20 43 52 45 41 54 45  rs in a.  CREATE
a210: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
a220: 2e 20 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20  .  ^The PRIMARY 
a230: 4b 45 59 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20  KEY is optional 
a240: 66 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62  for ordinary tab
a250: 6c 65 73 0a 20 20 62 75 74 20 69 73 20 72 65 71  les.  but is req
a260: 75 69 72 65 64 20 66 6f 72 20 5b 57 49 54 48 4f  uired for [WITHO
a270: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
a280: 2e 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65  ...<p>If a table
a290: 20 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f   has a single co
a2a0: 6c 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79  lumn primary key
a2b0: 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65   and the declare
a2c0: 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20  d type of that. 
a2d0: 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45   column is "INTE
a2e0: 47 45 52 22 20 61 6e 64 20 74 68 65 20 74 61 62  GER" and the tab
a2f0: 6c 65 20 69 73 20 6e 6f 74 20 61 20 5b 57 49 54  le is not a [WIT
a300: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
a310: 65 2c 0a 20 20 74 68 65 6e 20 74 68 65 20 63 6f  e,.  then the co
a320: 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73  lumn is known as
a330: 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49   an [INTEGER PRI
a340: 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65  MARY KEY]..  See
a350: 20 62 65 6c 6f 77 20 66 6f 72 20 61 20 64 65 73   below for a des
a360: 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20  cription of the 
a370: 73 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74 69  special properti
a380: 65 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72 73  es and behaviors
a390: 0a 20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  .  associated wi
a3a0: 74 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50  th an [INTEGER P
a3b0: 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70  RIMARY KEY]...<p
a3c0: 3e 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61 20  >^Each row in a 
a3d0: 74 61 62 6c 65 20 77 69 74 68 20 61 20 70 72 69  table with a pri
a3e0: 6d 61 72 79 20 6b 65 79 20 6d 75 73 74 20 68 61  mary key must ha
a3f0: 76 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62  ve a unique comb
a400: 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c  ination.  of val
a410: 75 65 73 20 69 6e 20 69 74 73 20 70 72 69 6d 61  ues in its prima
a420: 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20  ry key columns. 
a430: 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
a440: 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67  s of determining
a450: 0a 20 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73  .  the uniquenes
a460: 73 20 6f 66 20 70 72 69 6d 61 72 79 20 6b 65 79  s of primary key
a470: 20 76 61 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61   values, NULL va
a480: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
a490: 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f  red distinct fro
a4a0: 6d 0a 20 20 61 6c 6c 20 6f 74 68 65 72 20 76 61  m.  all other va
a4b0: 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20  lues, including 
a4c0: 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66  other NULLs. ^If
a4d0: 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20   an [INSERT] or 
a4e0: 5b 55 50 44 41 54 45 5d 0a 20 20 73 74 61 74 65  [UPDATE].  state
a4f0: 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f  ment attempts to
a500: 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c   modify the tabl
a510: 65 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61  e content so tha
a520: 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f  t two or more ro
a530: 77 73 0a 20 20 68 61 76 65 20 69 64 65 6e 74 69  ws.  have identi
a540: 63 61 6c 20 70 72 69 6d 61 72 79 20 6b 65 79 20  cal primary key 
a550: 76 61 6c 75 65 73 2c 20 74 68 61 74 20 69 73 20  values, that is 
a560: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
a570: 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 20 41 63 63  lation...<p> Acc
a580: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 53 51  ording to the SQ
a590: 4c 20 73 74 61 6e 64 61 72 64 2c 20 50 52 49 4d  L standard, PRIM
a5a0: 41 52 59 20 4b 45 59 20 73 68 6f 75 6c 64 20 61  ARY KEY should a
a5b0: 6c 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f 54 20  lways imply NOT 
a5c0: 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74 75 6e  NULL..  Unfortun
a5d0: 61 74 65 6c 79 2c 20 64 75 65 20 74 6f 20 61 20  ately, due to a 
a5e0: 62 75 67 20 69 6e 20 73 6f 6d 65 20 65 61 72 6c  bug in some earl
a5f0: 79 20 76 65 72 73 69 6f 6e 73 2c 20 74 68 69 73  y versions, this
a600: 20 69 73 20 6e 6f 74 20 74 68 65 0a 20 20 63 61   is not the.  ca
a610: 73 65 20 69 6e 20 53 51 4c 69 74 65 2e 20 5e 55  se in SQLite. ^U
a620: 6e 6c 65 73 73 20 74 68 65 20 63 6f 6c 75 6d 6e  nless the column
a630: 20 69 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20   is an [INTEGER 
a640: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 6f 72 0a  PRIMARY KEY] or.
a650: 20 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 61    the table is a
a660: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
a670: 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 63 6f   table or the co
a680: 6c 75 6d 6e 20 69 73 20 64 65 63 6c 61 72 65 64  lumn is declared
a690: 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c   NOT NULL,.  SQL
a6a0: 69 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20  ite allows NULL 
a6b0: 76 61 6c 75 65 73 20 69 6e 20 61 20 50 52 49 4d  values in a PRIM
a6c0: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20  ARY KEY column. 
a6d0: 20 53 51 4c 69 74 65 20 63 6f 75 6c 64 20 62 65   SQLite could be
a6e0: 20 66 69 78 65 64 20 74 6f 0a 20 20 63 6f 6e 66   fixed to.  conf
a6f0: 6f 72 6d 20 74 6f 20 74 68 65 20 73 74 61 6e 64  orm to the stand
a700: 61 72 64 2c 20 62 75 74 20 64 6f 69 6e 67 20 73  ard, but doing s
a710: 6f 20 6d 69 67 68 74 20 62 72 65 61 6b 20 6c 65  o might break le
a720: 67 61 63 79 20 61 70 70 6c 69 63 61 74 69 6f 6e  gacy application
a730: 73 2e 0a 20 20 48 65 6e 63 65 2c 20 69 74 20 68  s..  Hence, it h
a740: 61 73 20 62 65 65 6e 20 64 65 63 69 64 65 64 20  as been decided 
a750: 74 6f 20 6d 65 72 65 6c 79 20 64 6f 63 75 6d 65  to merely docume
a760: 6e 74 20 74 68 65 20 66 61 63 74 20 74 68 61 74  nt the fact that
a770: 20 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f 77 69   SQLite.  allowi
a780: 6e 67 20 4e 55 4c 4c 73 20 69 6e 20 6d 6f 73 74  ng NULLs in most
a790: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
a7a0: 75 6d 6e 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  umns...<tcl>hd_f
a7b0: 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f  ragment uniqueco
a7c0: 6e 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e  nst {UNIQUE} {un
a7d0: 69 71 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d  ique constraint}
a7e0: 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61   {UNIQUE constra
a7f0: 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41  int}</tcl>.<p>^A
a800: 20 3c 62 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63   <b>UNIQUE</b> c
a810: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d  onstraint is sim
a820: 69 6c 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52  ilar to a PRIMAR
a830: 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
a840: 2c 20 65 78 63 65 70 74 0a 20 20 74 68 61 74 20  , except.  that 
a850: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d  a single table m
a860: 61 79 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62  ay have any numb
a870: 65 72 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e  er of UNIQUE con
a880: 73 74 72 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65  straints. ^For e
a890: 61 63 68 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e  ach.  UNIQUE con
a8a0: 73 74 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74  straint on the t
a8b0: 61 62 6c 65 2c 20 65 61 63 68 20 72 6f 77 20 6d  able, each row m
a8c0: 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 20 75 6e  ust contain a un
a8d0: 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ique combination
a8e0: 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  .  of values in 
a8f0: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e  the columns iden
a900: 74 69 66 69 65 64 20 62 79 20 74 68 65 20 55 4e  tified by the UN
a910: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e  IQUE constraint.
a920: 20 0a 20 20 5e 46 6f 72 20 74 68 65 20 70 75 72   .  ^For the pur
a930: 70 6f 73 65 73 20 6f 66 20 55 4e 49 51 55 45 20  poses of UNIQUE 
a940: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 4e 55 4c  constraints, NUL
a950: 4c 20 76 61 6c 75 65 73 0a 20 20 61 72 65 20 63  L values.  are c
a960: 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e  onsidered distin
a970: 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65  ct from all othe
a980: 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64  r values, includ
a990: 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e  ing other NULLs.
a9a0: 0a 0a 3c 70 3e 5e 49 6e 20 6d 6f 73 74 20 63 61  ..<p>^In most ca
a9b0: 73 65 73 2c 20 55 4e 49 51 55 45 20 61 6e 64 20  ses, UNIQUE and 
a9c0: 50 52 49 4d 41 52 59 20 4b 45 59 0a 20 20 63 6f  PRIMARY KEY.  co
a9d0: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 69 6d  nstraints are im
a9e0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 72 65  plemented by cre
a9f0: 61 74 69 6e 67 20 61 20 75 6e 69 71 75 65 20 69  ating a unique i
aa00: 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61  ndex in the data
aa10: 62 61 73 65 2e 0a 20 20 28 54 68 65 20 65 78 63  base..  (The exc
aa20: 65 70 74 69 6f 6e 73 20 61 72 65 20 5b 49 4e 54  eptions are [INT
aa30: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
aa40: 5d 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  ] and PRIMARY KE
aa50: 59 73 20 6f 6e 20 0a 20 20 5b 57 49 54 48 4f 55  Ys on .  [WITHOU
aa60: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e  T ROWID] tables.
aa70: 29 0a 20 20 48 65 6e 63 65 2c 20 74 68 65 20 66  ).  Hence, the f
aa80: 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d 61 73  ollowing schemas
aa90: 20 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 20 65   are logically e
aaa0: 71 75 69 76 61 6c 65 6e 74 3a 0a 0a 20 20 3c 6f  quivalent:..  <o
aab0: 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41  l>.  <li><p>CREA
aac0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
aad0: 20 55 4e 49 51 55 45 29 3b 0a 20 20 3c 6c 69 3e   UNIQUE);.  <li>
aae0: 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  <p>CREATE TABLE 
aaf0: 74 31 28 61 2c 20 62 20 50 52 49 4d 41 52 59 20  t1(a, b PRIMARY 
ab00: 4b 45 59 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43  KEY);.  <li><p>C
ab10: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
ab20: 2c 20 62 29 3b 3c 62 72 3e 0a 20 20 20 20 20 20  , b);<br>.      
ab30: 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55 45     CREATE UNIQUE
ab40: 20 49 4e 44 45 58 20 74 31 62 20 4f 4e 20 74 31   INDEX t1b ON t1
ab50: 28 62 29 3b 0a 20 20 3c 2f 6f 6c 3e 0a 0a 3c 74  (b);.  </ol>..<t
ab60: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
ab70: 63 6b 63 6f 6e 73 74 7d 20 7b 43 48 45 43 4b 7d  ckconst} {CHECK}
ab80: 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69   {CHECK constrai
ab90: 6e 74 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74  nt} {CHECK const
aba0: 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 70  raints}</tcl>.<p
abb0: 3e 5e 28 41 20 3c 62 3e 43 48 45 43 4b 3c 2f 62  >^(A <b>CHECK</b
abc0: 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79  > constraint may
abd0: 20 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20   be attached to 
abe0: 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  a column definit
abf0: 69 6f 6e 20 6f 72 0a 20 20 73 70 65 63 69 66 69  ion or.  specifi
ac00: 65 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f  ed as a table co
ac10: 6e 73 74 72 61 69 6e 74 2e 20 49 6e 20 70 72 61  nstraint. In pra
ac20: 63 74 69 63 65 20 69 74 20 6d 61 6b 65 73 20 6e  ctice it makes n
ac30: 6f 20 64 69 66 66 65 72 65 6e 63 65 2e 29 5e 20  o difference.)^ 
ac40: 5e 28 45 61 63 68 0a 20 20 74 69 6d 65 20 61 20  ^(Each.  time a 
ac50: 6e 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72  new row is inser
ac60: 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62  ted into the tab
ac70: 6c 65 20 6f 72 20 61 6e 20 65 78 69 73 74 69 6e  le or an existin
ac80: 67 20 72 6f 77 20 69 73 20 75 70 64 61 74 65 64  g row is updated
ac90: 2c 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69  ,.  the expressi
aca0: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
acb0: 74 68 20 65 61 63 68 20 43 48 45 43 4b 20 63 6f  th each CHECK co
acc0: 6e 73 74 72 61 69 6e 74 20 69 73 20 65 76 61 6c  nstraint is eval
acd0: 75 61 74 65 64 20 61 6e 64 0a 20 20 63 61 73 74  uated and.  cast
ace0: 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61   to a NUMERIC va
acf0: 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20  lue in the same 
ad00: 77 61 79 20 61 73 20 61 20 5b 43 41 53 54 20 65  way as a [CAST e
ad10: 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74  xpression]. If t
ad20: 68 65 20 0a 20 20 72 65 73 75 6c 74 20 69 73 20  he .  result is 
ad30: 7a 65 72 6f 20 28 69 6e 74 65 67 65 72 20 76 61  zero (integer va
ad40: 6c 75 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61  lue 0 or real va
ad50: 6c 75 65 20 30 2e 30 29 2c 20 74 68 65 6e 20 61  lue 0.0), then a
ad60: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 76 69   constraint.  vi
ad70: 6f 6c 61 74 69 6f 6e 20 68 61 73 20 6f 63 63 75  olation has occu
ad80: 72 72 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20  rred.)^ ^If the 
ad90: 43 48 45 43 4b 20 65 78 70 72 65 73 73 69 6f 6e  CHECK expression
ada0: 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 4e 55   evaluates to NU
adb0: 4c 4c 2c 20 6f 72 0a 20 20 61 6e 79 20 6f 74 68  LL, or.  any oth
adc0: 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75  er non-zero valu
add0: 65 2c 20 69 74 20 69 73 20 6e 6f 74 20 61 20 63  e, it is not a c
ade0: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
adf0: 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 65 78 70 72  ion..  ^The expr
ae00: 65 73 73 69 6f 6e 20 6f 66 20 61 20 43 48 45 43  ession of a CHEC
ae10: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79  K constraint may
ae20: 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 73   not contain a s
ae30: 75 62 71 75 65 72 79 2e 0a 0a 3c 74 63 6c 3e 68  ubquery...<tcl>h
ae40: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e  d_fragment {notn
ae50: 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e  ullconst} {NOT N
ae60: 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63  ULL} {NOT NULL c
ae70: 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e  onstraint}</tcl>
ae80: 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55  .<p>^A <b>NOT NU
ae90: 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e  LL</b> constrain
aea0: 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61 74  t may only be at
aeb0: 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75  tached to a colu
aec0: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a 20  mn definition,. 
aed0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 61   not specified a
aee0: 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72  s a table constr
aef0: 61 69 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70 72  aint.  Not surpr
af00: 69 73 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f 54  isingly, ^(a NOT
af10: 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61 69   NULL.  constrai
af20: 6e 74 20 64 69 63 74 61 74 65 73 20 74 68 61 74  nt dictates that
af30: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
af40: 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63  column may not c
af50: 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61  ontain a NULL va
af60: 6c 75 65 2e 0a 20 20 41 74 74 65 6d 70 74 69 6e  lue..  Attemptin
af70: 67 20 74 6f 20 73 65 74 20 74 68 65 20 63 6f 6c  g to set the col
af80: 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  umn value to NUL
af90: 4c 20 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67  L when inserting
afa0: 20 61 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20 20   a new row or.  
afb0: 75 70 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73  updating an exis
afc0: 74 69 6e 67 20 6f 6e 65 20 63 61 75 73 65 73 20  ting one causes 
afd0: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
afe0: 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78  lation.)^..<p>Ex
aff0: 61 63 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e 73  actly how a cons
b000: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
b010: 20 69 73 20 64 65 61 6c 74 20 77 69 74 68 20 69   is dealt with i
b020: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
b030: 74 68 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74 20  the.  [conflict 
b040: 63 6c 61 75 73 65 7c 63 6f 6e 73 74 72 61 69 6e  clause|constrain
b050: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
b060: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d  ution algorithm]
b070: 2e 20 45 61 63 68 20 0a 20 20 50 52 49 4d 41 52  . Each .  PRIMAR
b080: 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20 4e  Y KEY, UNIQUE, N
b090: 4f 54 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43  OT NULL and CHEC
b0a0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 68 61 73  K constraint has
b0b0: 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c   a default confl
b0c0: 69 63 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f 6e  ict.  resolution
b0d0: 20 61 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52 49   algorithm. ^PRI
b0e0: 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45  MARY KEY, UNIQUE
b0f0: 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f   and NOT NULL co
b100: 6e 73 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65  nstraints may be
b110: 0a 20 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73  .  explicitly as
b120: 73 69 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74  signed a default
b130: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
b140: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 62  tion algorithm b
b150: 79 20 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61 20  y including.  a 
b160: 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65  [conflict-clause
b170: 5d 20 69 6e 20 74 68 65 69 72 20 64 65 66 69 6e  ] in their defin
b180: 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66 20  itions. ^Or, if 
b190: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66  a constraint def
b1a0: 69 6e 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20 6e  inition.  does n
b1b0: 6f 74 20 69 6e 63 6c 75 64 65 20 61 20 5b 63 6f  ot include a [co
b1c0: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 6f  nflict-clause] o
b1d0: 72 20 69 74 20 69 73 20 61 20 43 48 45 43 4b 20  r it is a CHECK 
b1e0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20  constraint, the 
b1f0: 64 65 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c 69  default.  confli
b200: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
b210: 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54  gorithm is ABORT
b220: 2e 20 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e  . ^Different con
b230: 73 74 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20  straints within 
b240: 74 68 65 0a 20 20 73 61 6d 65 20 74 61 62 6c 65  the.  same table
b250: 20 6d 61 79 20 68 61 76 65 20 64 69 66 66 65 72   may have differ
b260: 65 6e 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66  ent default conf
b270: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
b280: 61 6c 67 6f 72 69 74 68 6d 73 2e 20 53 65 65 0a  algorithms. See.
b290: 20 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69    the section ti
b2a0: 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  tled [ON CONFLIC
b2b0: 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  T] for additiona
b2c0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a  l information...
b2d0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
b2e0: 20 72 6f 77 69 64 20 7b 49 4e 54 45 47 45 52 20   rowid {INTEGER 
b2f0: 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f 57  PRIMARY KEY} ROW
b300: 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c  ID rowid</tcl>.<
b310: 68 33 3e 52 4f 57 49 44 73 20 61 6e 64 20 74 68  h3>ROWIDs and th
b320: 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  e INTEGER PRIMAR
b330: 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  Y KEY</h3>..<p>^
b340: 45 78 63 65 70 74 20 66 6f 72 20 5b 57 49 54 48  Except for [WITH
b350: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
b360: 73 2c 20 61 6c 6c 20 72 6f 77 73 20 77 69 74 68  s, all rows with
b370: 69 6e 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  in SQLite tables
b380: 0a 68 61 76 65 20 61 20 36 34 2d 62 69 74 20 73  .have a 64-bit s
b390: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65  igned integer ke
b3a0: 79 20 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20  y that uniquely 
b3b0: 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 72  identifies the r
b3c0: 6f 77 20 77 69 74 68 69 6e 20 69 74 73 20 74 61  ow within its ta
b3d0: 62 6c 65 2e 0a 54 68 69 73 20 69 6e 74 65 67 65  ble..This intege
b3e0: 72 20 69 73 20 75 73 75 61 6c 6c 79 0a 63 61 6c  r is usually.cal
b3f0: 6c 65 64 20 74 68 65 20 22 72 6f 77 69 64 22 2e  led the "rowid".
b400: 20 5e 54 68 65 20 72 6f 77 69 64 20 76 61 6c 75   ^The rowid valu
b410: 65 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  e can be accesse
b420: 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74  d using one of t
b430: 68 65 20 73 70 65 63 69 61 6c 0a 63 61 73 65 2d  he special.case-
b440: 69 6e 64 65 70 65 6e 64 65 6e 74 20 6e 61 6d 65  independent name
b450: 73 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22  s "rowid", "oid"
b460: 2c 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20 69  , or "_rowid_" i
b470: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 63 6f 6c  n place of a col
b480: 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20 61 20  umn name..^If a 
b490: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61  table contains a
b4a0: 20 75 73 65 72 20 64 65 66 69 6e 65 64 20 63 6f   user defined co
b4b0: 6c 75 6d 6e 20 6e 61 6d 65 64 20 22 72 6f 77 69  lumn named "rowi
b4c0: 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72  d", "oid" or "_r
b4d0: 6f 77 69 64 5f 22 2c 0a 74 68 65 6e 20 74 68 61  owid_",.then tha
b4e0: 74 20 6e 61 6d 65 20 61 6c 77 61 79 73 20 72 65  t name always re
b4f0: 66 65 72 73 20 74 68 65 20 65 78 70 6c 69 63 69  fers the explici
b500: 74 6c 79 20 64 65 63 6c 61 72 65 64 20 63 6f 6c  tly declared col
b510: 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  umn and cannot b
b520: 65 20 75 73 65 64 0a 74 6f 20 72 65 74 72 69 65  e used.to retrie
b530: 76 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  ve the integer r
b540: 6f 77 69 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e  owid value...<p>
b550: 54 68 65 20 72 6f 77 69 64 20 28 61 6e 64 20 22  The rowid (and "
b560: 6f 69 64 22 20 61 6e 64 20 22 5f 72 6f 77 69 64  oid" and "_rowid
b570: 5f 22 29 20 69 73 20 6f 6d 69 74 74 65 64 20 69  _") is omitted i
b580: 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44  n [WITHOUT ROWID
b590: 5d 20 74 61 62 6c 65 73 2e 0a 57 49 54 48 4f 55  ] tables..WITHOU
b5a0: 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 20 61  T ROWID tables a
b5b0: 72 65 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  re only availabl
b5c0: 65 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72  e in SQLite [ver
b5d0: 73 69 6f 6e 20 33 2e 38 2e 32 5d 20 61 6e 64 20  sion 3.8.2] and 
b5e0: 6c 61 74 65 72 2e 0a 41 20 74 61 62 6c 65 20 74  later..A table t
b5f0: 68 61 74 20 6c 61 63 6b 73 20 74 68 65 20 57 49  hat lacks the WI
b600: 54 48 4f 55 54 20 52 4f 57 49 44 20 63 6c 61 75  THOUT ROWID clau
b610: 73 65 20 69 73 20 63 61 6c 6c 65 64 20 61 20 22  se is called a "
b620: 72 6f 77 69 64 20 74 61 62 6c 65 22 2e 0a 0a 3c  rowid table"...<
b630: 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20 72  p>The data for r
b640: 6f 77 69 64 20 74 61 62 6c 65 73 20 69 73 20 73  owid tables is s
b650: 74 6f 72 65 64 20 61 73 20 61 20 42 2d 54 72 65  tored as a B-Tre
b660: 65 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  e structure cont
b670: 61 69 6e 69 6e 67 0a 6f 6e 65 20 65 6e 74 72 79  aining.one entry
b680: 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 20   for each table 
b690: 72 6f 77 2c 20 75 73 69 6e 67 20 74 68 65 20 72  row, using the r
b6a0: 6f 77 69 64 20 76 61 6c 75 65 20 61 73 20 74 68  owid value as th
b6b0: 65 20 6b 65 79 2e 20 54 68 69 73 20 6d 65 61 6e  e key. This mean
b6c0: 73 20 74 68 61 74 0a 72 65 74 72 69 65 76 69 6e  s that.retrievin
b6d0: 67 20 6f 72 20 73 6f 72 74 69 6e 67 20 72 65 63  g or sorting rec
b6e0: 6f 72 64 73 20 62 79 20 72 6f 77 69 64 20 69 73  ords by rowid is
b6f0: 20 66 61 73 74 2e 20 53 65 61 72 63 68 69 6e 67   fast. Searching
b700: 20 66 6f 72 20 61 20 72 65 63 6f 72 64 20 77 69   for a record wi
b710: 74 68 20 61 0a 73 70 65 63 69 66 69 63 20 72 6f  th a.specific ro
b720: 77 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c 6c 20  wid, or for all 
b730: 72 65 63 6f 72 64 73 20 77 69 74 68 20 72 6f 77  records with row
b740: 69 64 73 20 77 69 74 68 69 6e 20 61 20 73 70 65  ids within a spe
b750: 63 69 66 69 65 64 20 72 61 6e 67 65 20 69 73 0a  cified range is.
b760: 61 72 6f 75 6e 64 20 74 77 69 63 65 20 61 73 20  around twice as 
b770: 66 61 73 74 20 61 73 20 61 20 73 69 6d 69 6c 61  fast as a simila
b780: 72 20 73 65 61 72 63 68 20 6d 61 64 65 20 62 79  r search made by
b790: 20 73 70 65 63 69 66 79 69 6e 67 20 61 6e 79 20   specifying any 
b7a0: 6f 74 68 65 72 20 50 52 49 4d 41 52 59 0a 4b 45  other PRIMARY.KE
b7b0: 59 20 6f 72 20 69 6e 64 65 78 65 64 20 76 61 6c  Y or indexed val
b7c0: 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68 20 6f  ue...<p> ^With o
b7d0: 6e 65 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 74  ne exception not
b7e0: 65 64 20 62 65 6c 6f 77 2c 20 69 66 20 61 20 72  ed below, if a r
b7f0: 6f 77 69 64 20 74 61 62 6c 65 20 68 61 73 20 61  owid table has a
b800: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61   primary key tha
b810: 74 20 63 6f 6e 73 69 73 74 73 0a 6f 66 20 61 20  t consists.of a 
b820: 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e  single column an
b830: 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74  d the declared t
b840: 79 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c 75  ype of that colu
b850: 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22 20  mn is "INTEGER" 
b860: 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20 6f  in any mixture o
b870: 66 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f 77 65  f.upper and lowe
b880: 72 20 63 61 73 65 2c 20 74 68 65 6e 20 74 68 65  r case, then the
b890: 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73 20   column becomes 
b8a0: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
b8b0: 20 72 6f 77 69 64 2e 20 53 75 63 68 20 61 0a 63   rowid. Such a.c
b8c0: 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c 79  olumn is usually
b8d0: 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 73 20   referred to as 
b8e0: 61 6e 20 22 69 6e 74 65 67 65 72 20 70 72 69 6d  an "integer prim
b8f0: 61 72 79 20 6b 65 79 22 2e 20 41 20 50 52 49 4d  ary key". A PRIM
b900: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a 6f  ARY KEY column.o
b910: 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e 20 69  nly becomes an i
b920: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
b930: 65 79 20 69 66 20 74 68 65 20 64 65 63 6c 61 72  ey if the declar
b940: 65 64 20 74 79 70 65 20 6e 61 6d 65 20 69 73 20  ed type name is 
b950: 65 78 61 63 74 6c 79 0a 22 49 4e 54 45 47 45 52  exactly."INTEGER
b960: 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65 67  ".  ^Other integ
b970: 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c 69  er type names li
b980: 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49 47  ke "INT" or "BIG
b990: 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20 49  INT" or "SHORT I
b9a0: 4e 54 45 47 45 52 22 0a 6f 72 20 22 55 4e 53 49  NTEGER".or "UNSI
b9b0: 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20 63 61  GNED INTEGER" ca
b9c0: 75 73 65 73 20 74 68 65 20 70 72 69 6d 61 72 79  uses the primary
b9d0: 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62   key column to b
b9e0: 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64 69  ehave as an ordi
b9f0: 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75 6d  nary.table colum
ba00: 6e 20 77 69 74 68 20 69 6e 74 65 67 65 72 20 5b  n with integer [
ba10: 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61 20  affinity] and a 
ba20: 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f  unique index, no
ba30: 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  t as an alias fo
ba40: 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c 70  r.the rowid...<p
ba50: 3e 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20  > The exception 
ba60: 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65 20  mentioned above 
ba70: 69 73 20 74 68 61 74 20 5e 69 66 20 74 68 65 20  is that ^if the 
ba80: 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61  declaration of a
ba90: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65 63   column with.dec
baa0: 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e 54 45  lared type "INTE
bab0: 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20 61 6e  GER" includes an
bac0: 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45   "PRIMARY KEY DE
bad0: 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74 20 64  SC" clause, it d
bae0: 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20 61  oes not.become a
baf0: 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
bb00: 72 6f 77 69 64 20 61 6e 64 20 69 73 20 6e 6f 74  rowid and is not
bb10: 20 63 6c 61 73 73 69 66 69 65 64 20 61 73 20 61   classified as a
bb20: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
bb30: 79 20 6b 65 79 2e 0a 54 68 69 73 20 71 75 69 72  y key..This quir
bb40: 6b 20 69 73 20 6e 6f 74 20 62 79 20 64 65 73 69  k is not by desi
bb50: 67 6e 2e 20 49 74 20 69 73 20 64 75 65 20 74 6f  gn. It is due to
bb60: 20 61 20 62 75 67 20 69 6e 20 65 61 72 6c 79 20   a bug in early 
bb70: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
bb80: 74 65 2e 0a 42 75 74 20 66 69 78 69 6e 67 20 74  te..But fixing t
bb90: 68 65 20 62 75 67 20 63 6f 75 6c 64 20 72 65 73  he bug could res
bba0: 75 6c 74 20 69 6e 20 62 61 63 6b 77 61 72 64 73  ult in backwards
bbb0: 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69   incompatibiliti
bbc0: 65 73 2e 0a 48 65 6e 63 65 2c 20 74 68 65 20 6f  es..Hence, the o
bbd0: 72 69 67 69 6e 61 6c 20 62 65 68 61 76 69 6f 72  riginal behavior
bbe0: 20 68 61 73 20 62 65 65 6e 20 72 65 74 61 69 6e   has been retain
bbf0: 65 64 20 28 61 6e 64 20 64 6f 63 75 6d 65 6e 74  ed (and document
bc00: 65 64 29 20 62 65 63 61 75 73 65 20 6f 64 64 0a  ed) because odd.
bc10: 62 65 68 61 76 69 6f 72 20 69 6e 20 61 20 63 6f  behavior in a co
bc20: 72 6e 65 72 20 63 61 73 65 20 69 73 20 66 61 72  rner case is far
bc30: 20 62 65 74 74 65 72 20 74 68 61 6e 20 61 20 63   better than a c
bc40: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72 65  ompatibility bre
bc50: 61 6b 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 0a  ak.  This means.
bc60: 74 68 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f  that ^(the follo
bc70: 77 69 6e 67 20 74 68 72 65 65 20 74 61 62 6c 65  wing three table
bc80: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c   declarations al
bc90: 6c 20 63 61 75 73 65 20 74 68 65 20 63 6f 6c 75  l cause the colu
bca0: 6d 6e 20 22 78 22 20 74 6f 20 62 65 20 61 6e 0a  mn "x" to be an.
bcb0: 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f  alias for the ro
bcc0: 77 69 64 20 28 61 6e 20 69 6e 74 65 67 65 72 20  wid (an integer 
bcd0: 70 72 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c  primary key):..<
bce0: 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41  ul>.<li><tt>CREA
bcf0: 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
bd00: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
bd10: 20 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74   ASC, y, z);</tt
bd20: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
bd30: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
bd40: 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52  ER, y, z, PRIMAR
bd50: 59 20 4b 45 59 28 78 20 41 53 43 29 29 3b 3c 2f  Y KEY(x ASC));</
bd60: 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41  tt>.<li><tt>CREA
bd70: 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
bd80: 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d  EGER, y, z, PRIM
bd90: 41 52 59 20 4b 45 59 28 78 20 44 45 53 43 29 29  ARY KEY(x DESC))
bda0: 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a  ;</tt>.</ul>)^..
bdb0: 3c 70 3e 42 75 74 20 5e 28 74 68 65 20 66 6f 6c  <p>But ^(the fol
bdc0: 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69  lowing declarati
bdd0: 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 75  on does not resu
bde0: 6c 74 20 69 6e 20 22 78 22 20 62 65 69 6e 67 20  lt in "x" being 
bdf0: 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65  an alias for.the
be00: 20 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69   rowid:.<ul>.<li
be10: 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c  ><tt>CREATE TABL
be20: 45 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52  E t(x INTEGER PR
be30: 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20  IMARY KEY DESC, 
be40: 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c  y, z);</tt>.</ul
be50: 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76  >)^..<p>^Rowid v
be60: 61 6c 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64  alues may be mod
be70: 69 66 69 65 64 20 75 73 69 6e 67 20 61 6e 20 55  ified using an U
be80: 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
be90: 69 6e 20 74 68 65 20 73 61 6d 65 0a 77 61 79 20  in the same.way 
bea0: 61 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c  as any other col
beb0: 75 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65  umn value can, e
bec0: 69 74 68 65 72 20 75 73 69 6e 67 20 6f 6e 65 20  ither using one 
bed0: 6f 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  of the built-in 
bee0: 61 6c 69 61 73 65 73 0a 28 22 72 6f 77 69 64 22  aliases.("rowid"
bef0: 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77  , "oid" or "_row
bf00: 69 64 5f 22 29 20 6f 72 20 62 79 20 75 73 69 6e  id_") or by usin
bf10: 67 20 61 6e 20 61 6c 69 61 73 20 63 72 65 61 74  g an alias creat
bf20: 65 64 20 62 79 20 61 6e 20 69 6e 74 65 67 65 72  ed by an integer
bf30: 0a 70 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53  .primary key. ^S
bf40: 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53  imilarly, an INS
bf50: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6d 61  ERT statement ma
bf60: 79 20 70 72 6f 76 69 64 65 20 61 20 76 61 6c 75  y provide a valu
bf70: 65 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a  e to use as the.
bf80: 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72  rowid for each r
bf90: 6f 77 20 69 6e 73 65 72 74 65 64 2e 20 5e 28 55  ow inserted. ^(U
bfa0: 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c  nlike normal SQL
bfb0: 69 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20  ite columns, an 
bfc0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a  integer primary.
bfd0: 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c  key or rowid col
bfe0: 75 6d 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e  umn must contain
bff0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e   integer values.
c000: 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   Integer primary
c010: 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f   key or rowid.co
c020: 6c 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61 62  lumns are not ab
c030: 6c 65 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74  le to hold float
c040: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73  ing point values
c050: 2c 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73  , strings, BLOBs
c060: 2c 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c  , or NULLs.)^..<
c070: 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20  p>^If an UPDATE 
c080: 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70  statement attemp
c090: 74 73 20 74 6f 20 73 65 74 20 61 6e 20 69 6e 74  ts to set an int
c0a0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
c0b0: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
c0c0: 0a 74 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c  .to a NULL or bl
c0d0: 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20  ob value, or to 
c0e0: 61 20 73 74 72 69 6e 67 20 6f 72 20 72 65 61 6c  a string or real
c0f0: 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e   value that cann
c100: 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
c110: 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e  .converted to an
c120: 20 69 6e 74 65 67 65 72 2c 20 61 20 22 64 61 74   integer, a "dat
c130: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20  atype mismatch" 
c140: 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64  error occurs and
c150: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 69   the statement.i
c160: 73 20 61 62 6f 72 74 65 64 2e 20 5e 49 66 20 61  s aborted. ^If a
c170: 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
c180: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69  nt attempts to i
c190: 6e 73 65 72 74 20 61 20 62 6c 6f 62 20 76 61 6c  nsert a blob val
c1a0: 75 65 2c 20 6f 72 20 61 20 73 74 72 69 6e 67 0a  ue, or a string.
c1b0: 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68  or real value th
c1c0: 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73  at cannot be los
c1d0: 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
c1e0: 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  d to an integer 
c1f0: 69 6e 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20  into an.integer 
c200: 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72  primary key or r
c210: 6f 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22  owid column, a "
c220: 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63  datatype mismatc
c230: 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20  h" error occurs 
c240: 61 6e 64 20 74 68 65 0a 73 74 61 74 65 6d 65 6e  and the.statemen
c250: 74 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c  t is aborted...<
c260: 70 3e 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20  p>^If an INSERT 
c270: 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70  statement attemp
c280: 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e  ts to insert a N
c290: 55 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  ULL value into a
c2a0: 20 72 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67 65   rowid or.intege
c2b0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f  r primary key co
c2c0: 6c 75 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d  lumn, the system
c2d0: 20 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65   chooses an inte
c2e0: 67 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65  ger value to use
c2f0: 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20 61 75   as the.rowid au
c300: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20 64  tomatically. A d
c310: 65 74 61 69 6c 65 64 20 64 65 73 63 72 69 70 74  etailed descript
c320: 69 6f 6e 20 6f 66 20 68 6f 77 20 74 68 69 73 20  ion of how this 
c330: 69 73 20 64 6f 6e 65 20 69 73 20 70 72 6f 76 69  is done is provi
c340: 64 65 64 0a 3c 61 20 68 72 65 66 3d 22 61 75 74  ded.<a href="aut
c350: 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72  oinc.html">separ
c360: 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a  ately</a>.</p>..
c370: 3c 70 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e 74  <p>^(The [parent
c380: 20 6b 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65   key] of a [fore
c390: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
c3a0: 6e 74 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  nt] is not allow
c3b0: 65 64 20 74 6f 0a 75 73 65 20 74 68 65 20 72 6f  ed to.use the ro
c3c0: 77 69 64 2e 20 20 54 68 65 20 70 61 72 65 6e 74  wid.  The parent
c3d0: 20 6b 65 79 20 6d 75 73 74 20 75 73 65 64 20 6e   key must used n
c3e0: 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c  amed columns onl
c3f0: 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  y.)^</p>..<tcl>.
c400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
c450: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54  ection {CREATE T
c460: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
c470: 69 67 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54  igger {{CREATE T
c480: 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73  RIGGER}}..Recurs
c490: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
c4a0: 20 63 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d   create-trigger-
c4b0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
c4c0: 5e 54 68 65 20 43 52 45 41 54 45 20 54 52 49 47  ^The CREATE TRIG
c4d0: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73  GER statement is
c4e0: 20 75 73 65 64 20 74 6f 20 61 64 64 20 74 72 69   used to add tri
c4f0: 67 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61  ggers to the .da
c500: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e  tabase schema. ^
c510: 54 72 69 67 67 65 72 73 20 61 72 65 20 64 61 74  Triggers are dat
c520: 61 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73  abase operations
c530: 20 0a 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d   .that are autom
c540: 61 74 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d  atically perform
c550: 65 64 20 77 68 65 6e 20 61 20 73 70 65 63 69 66  ed when a specif
c560: 69 65 64 20 64 61 74 61 62 61 73 65 20 65 76 65  ied database eve
c570: 6e 74 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e  nt.occurs.  </p>
c580: 0a 0a 3c 70 3e 5e 41 20 74 72 69 67 67 65 72 20  ..<p>^A trigger 
c590: 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64  may be specified
c5a0: 20 74 6f 20 66 69 72 65 20 77 68 65 6e 65 76 65   to fire wheneve
c5b0: 72 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49  r a [DELETE], [I
c5c0: 4e 53 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41  NSERT],.or [UPDA
c5d0: 54 45 5d 20 6f 66 20 61 0a 70 61 72 74 69 63 75  TE] of a.particu
c5e0: 6c 61 72 20 64 61 74 61 62 61 73 65 20 74 61 62  lar database tab
c5f0: 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68  le occurs, or wh
c600: 65 6e 65 76 65 72 20 61 6e 20 5b 55 50 44 41 54  enever an [UPDAT
c610: 45 5d 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20  E] occurs on.on 
c620: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 70 65 63  one or more spec
c630: 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66  ified columns of
c640: 20 61 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c   a table.</p>..<
c650: 70 3e 5e 41 74 20 74 68 69 73 20 74 69 6d 65 20  p>^At this time 
c660: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
c670: 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f  only FOR EACH RO
c680: 57 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20  W triggers, not 
c690: 46 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45  FOR EACH.STATEME
c6a0: 4e 54 20 74 72 69 67 67 65 72 73 2e 20 5e 48 65  NT triggers. ^He
c6b0: 6e 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73  nce explicitly s
c6c0: 70 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41  pecifying FOR EA
c6d0: 43 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e  CH ROW is option
c6e0: 61 6c 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f  al..^FOR EACH RO
c6f0: 57 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  W implies that t
c700: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
c710: 73 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  s specified in t
c720: 68 65 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62  he trigger.may b
c730: 65 20 65 78 65 63 75 74 65 64 20 28 64 65 70 65  e executed (depe
c740: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45  nding on the WHE
c750: 4e 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61  N clause) for ea
c760: 63 68 20 64 61 74 61 62 61 73 65 20 72 6f 77 20  ch database row 
c770: 62 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20  being.inserted, 
c780: 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74  updated or delet
c790: 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
c7a0: 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20  ent causing the 
c7b0: 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e  trigger to fire.
c7c0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20  </p>..<p>^(Both 
c7d0: 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  the WHEN clause 
c7e0: 61 6e 64 20 74 68 65 20 74 72 69 67 67 65 72 20  and the trigger 
c7f0: 61 63 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65  actions may acce
c800: 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a  ss elements of .
c810: 74 68 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e  the row being in
c820: 73 65 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20  serted, deleted 
c830: 6f 72 20 75 70 64 61 74 65 64 20 75 73 69 6e 67  or updated using
c840: 20 72 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74   references of t
c850: 68 65 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69  he form ."NEW.<i
c860: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e  >column-name</i>
c870: 22 20 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f  " and "OLD.<i>co
c880: 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20  lumn-name</i>", 
c890: 77 68 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d  where.<i>column-
c8a0: 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20  name</i> is the 
c8b0: 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  name of a column
c8c0: 20 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20   from the table 
c8d0: 74 68 61 74 20 74 68 65 20 74 72 69 67 67 65 72  that the trigger
c8e0: 0a 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  .is associated w
c8f0: 69 74 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64  ith.)^ ^(OLD and
c900: 20 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20   NEW references 
c910: 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  may only be used
c920: 20 69 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a   in triggers on.
c930: 65 76 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68  events for which
c940: 20 74 68 65 79 20 61 72 65 20 72 65 6c 65 76 61   they are releva
c950: 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  nt, as follows:<
c960: 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  /p>..<table bord
c970: 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67  er=0 cellpadding
c980: 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  =10>.<tr>.<td va
c990: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
c9a0: 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31  ="right" width=1
c9b0: 32 30 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e  20><i>INSERT</i>
c9c0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
c9d0: 3d 22 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72  ="top">NEW refer
c9e0: 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c  ences are valid<
c9f0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
ca00: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
ca10: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77   align="right" w
ca20: 69 64 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41  idth=120><i>UPDA
ca30: 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20  TE</i></td>.<td 
ca40: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57  valign="top">NEW
ca50: 20 61 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e   and OLD referen
ca60: 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74  ces are valid</t
ca70: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
ca80: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
ca90: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
caa0: 74 68 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45  th=120><i>DELETE
cab0: 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  </i></td>.<td va
cac0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72  lign="top">OLD r
cad0: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
cae0: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
caf0: 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a  /table>.</p>)^..
cb00: 3c 70 3e 5e 49 66 20 61 20 57 48 45 4e 20 63 6c  <p>^If a WHEN cl
cb10: 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64  ause is supplied
cb20: 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  , the SQL statem
cb30: 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 0a 61  ents specified.a
cb40: 72 65 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64  re only executed
cb50: 20 66 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68   for rows for wh
cb60: 69 63 68 20 74 68 65 20 57 48 45 4e 0a 63 6c 61  ich the WHEN.cla
cb70: 75 73 65 20 69 73 20 74 72 75 65 2e 20 5e 49 66  use is true. ^If
cb80: 20 6e 6f 20 57 48 45 4e 20 63 6c 61 75 73 65 20   no WHEN clause 
cb90: 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65  is supplied, the
cba0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a   SQL statements.
cbb0: 61 72 65 20 65 78 65 63 75 74 65 64 20 66 6f 72  are executed for
cbc0: 20 61 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a   all rows.</p>..
cbd0: 3c 70 3e 5e 54 68 65 20 42 45 46 4f 52 45 20 6f  <p>^The BEFORE o
cbe0: 72 20 41 46 54 45 52 20 6b 65 79 77 6f 72 64 20  r AFTER keyword 
cbf0: 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20  determines when 
cc00: 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69  the trigger acti
cc10: 6f 6e 73 0a 77 69 6c 6c 20 62 65 20 65 78 65 63  ons.will be exec
cc20: 75 74 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f  uted relative to
cc30: 20 74 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20   the insertion, 
cc40: 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20  modification or 
cc50: 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61  removal of the.a
cc60: 73 73 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f  ssociated row.</
cc70: 70 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43  p>..<p>^An [ON C
cc80: 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20  ONFLICT] clause 
cc90: 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64  may be specified
cca0: 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 5b   as part of an [
ccb0: 55 50 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45  UPDATE] or [INSE
ccc0: 52 54 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68 69  RT].action withi
ccd0: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 74 68  n the body of th
cce0: 65 20 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65  e trigger..^Howe
ccf0: 76 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f  ver if an [ON CO
cd00: 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69  NFLICT] clause i
cd10: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
cd20: 61 72 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74  art of .the stat
cd30: 65 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68  ement causing th
cd40: 65 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72  e trigger to fir
cd50: 65 2c 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74  e, then conflict
cd60: 20 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79   handling.policy
cd70: 20 6f 66 20 74 68 65 20 6f 75 74 65 72 20 73 74   of the outer st
cd80: 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
cd90: 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70  instead.</p>..<p
cda0: 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 61  >^Triggers are a
cdb0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52  utomatically [DR
cdc0: 4f 50 20 54 52 49 47 47 45 52 20 7c 20 64 72 6f  OP TRIGGER | dro
cdd0: 70 70 65 64 5d 0a 77 68 65 6e 20 74 68 65 20 74  pped].when the t
cde0: 61 62 6c 65 20 74 68 61 74 20 74 68 65 79 20 61  able that they a
cdf0: 72 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20 77  re .associated w
ce00: 69 74 68 20 28 74 68 65 20 3c 69 3e 74 61 62 6c  ith (the <i>tabl
ce10: 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65  e-name</i> table
ce20: 29 20 69 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c  ) is .[DROP TABL
ce30: 45 20 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e  E | dropped].  ^
ce40: 48 6f 77 65 76 65 72 20 69 66 20 74 68 65 20 74  However if the t
ce50: 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72  rigger actions r
ce60: 65 66 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74  eference.other t
ce70: 61 62 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67  ables, the trigg
ce80: 65 72 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65  er is not droppe
ce90: 64 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66  d or modified if
cea0: 20 74 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62   those other.tab
ceb0: 6c 65 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41  les are [DROP TA
cec0: 42 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f  BLE | dropped] o
ced0: 72 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c  r [ALTER TABLE |
cee0: 20 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a   modified].</p>.
cef0: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72  .<p>^Triggers ar
cf00: 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20  e removed using 
cf10: 74 68 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45  the [DROP TRIGGE
cf20: 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70  R] statement.</p
cf30: 3e 0a 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65  >..<h3>Syntax Re
cf40: 73 74 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50  strictions On UP
cf50: 44 41 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e  DATE, DELETE, an
cf60: 64 20 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65  d INSERT Stateme
cf70: 6e 74 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54  nts Within.    T
cf80: 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  riggers</h3>..<p
cf90: 3e 5e 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20  >^The [UPDATE], 
cfa0: 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49  [DELETE], and [I
cfb0: 4e 53 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74  NSERT].statement
cfc0: 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
cfd0: 73 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74  s do not support
cfe0: 0a 74 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78  .the full syntax
cff0: 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b   for [UPDATE], [
d000: 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e  DELETE], and [IN
d010: 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  SERT] statements
d020: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
d030: 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70  .restrictions ap
d040: 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  ply:</p>..<ul>.<
d050: 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e  li><p>.  ^(The n
d060: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
d070: 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20   to be modified 
d080: 69 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20  in an [UPDATE], 
d090: 5b 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e  [DELETE], or [IN
d0a0: 53 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e  SERT].  statemen
d0b0: 74 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71  t must be an unq
d0c0: 75 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e  ualified table n
d0d0: 61 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ame.  In other w
d0e0: 6f 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20  ords, one must. 
d0f0: 20 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61   use just "<i>ta
d100: 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74  blename</i>" not
d110: 20 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69   "<i>database</i
d120: 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c  ><b>.</b><i>tabl
d130: 65 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65  ename</i>".  whe
d140: 6e 20 73 70 65 63 69 66 79 69 6e 67 20 74 68 65  n specifying the
d150: 20 74 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20   table.)^  ^The 
d160: 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69  table to be modi
d170: 66 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20  fied must exist 
d180: 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61  in the.  same da
d190: 74 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61  tabase as the ta
d1a0: 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
d1b0: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
d1c0: 20 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20   is attached..  
d1d0: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
d1e0: 70 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52  p>.  ^The "INSER
d1f0: 54 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c  T INTO <i>table<
d200: 2f 69 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55  /i> DEFAULT VALU
d210: 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20  ES" form of the 
d220: 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65  [INSERT] stateme
d230: 6e 74 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70  nt.  is not supp
d240: 6f 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c  orted..  </p></l
d250: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54  i>..<li><p>.  ^T
d260: 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e  he INDEXED BY an
d270: 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  d NOT INDEXED cl
d280: 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75  auses are not su
d290: 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44  pported for [UPD
d2a0: 41 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45  ATE] and.  [DELE
d2b0: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  TE] statements..
d2c0: 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69    </p></li>..<li
d2d0: 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44  ><p>.  ^(The ORD
d2e0: 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
d2f0: 63 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41  clauses on [UPDA
d300: 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d  TE] and [DELETE]
d310: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20   statements are 
d320: 6e 6f 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e  not.  supported.
d330: 20 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c    ORDER BY and L
d340: 49 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72  IMIT are not nor
d350: 6d 61 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20  mally supported 
d360: 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a  for [UPDATE] or.
d370: 20 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e    [DELETE] in an
d380: 79 20 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61  y context but ca
d390: 6e 20 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72  n be enabled for
d3a0: 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
d3b0: 6d 65 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68  ments.  using th
d3c0: 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
d3d0: 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
d3e0: 49 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69  IMIT] compile-ti
d3f0: 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65  me option.  Howe
d400: 76 65 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70  ver,.  that comp
d410: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
d420: 6f 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20  only applies to 
d430: 74 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54  top-level [UPDAT
d440: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a  E] and [DELETE].
d450: 20 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f    statements, no
d460: 74 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b  t [UPDATE] and [
d470: 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e  DELETE] statemen
d480: 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
d490: 72 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  rs.)^.  </p></li
d4a0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 5b 63  >..<li><p>.  ^[c
d4b0: 6f 6d 6d 6f 6e 2d 74 61 62 6c 65 2d 65 78 70 72  ommon-table-expr
d4c0: 65 73 73 69 6f 6e 7c 43 6f 6d 6d 6f 6e 20 74 61  ession|Common ta
d4d0: 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 5d 20  ble expression] 
d4e0: 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65  are not supporte
d4f0: 64 20 66 6f 72 0a 20 20 73 74 61 74 65 6d 65 6e  d for.  statemen
d500: 74 73 20 69 6e 73 69 64 65 20 6f 66 20 74 72 69  ts inside of tri
d510: 67 67 65 72 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c  ggers..  </p></l
d520: 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68  i>.</ul>..<tcl>h
d530: 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65  d_fragment inste
d540: 61 64 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49  ad_of_trigger {I
d550: 4e 53 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54  NSTEAD OF} {INST
d560: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c  EAD OF trigger}<
d570: 2f 74 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41  /tcl>.<h3>INSTEA
d580: 44 20 4f 46 20 74 72 69 67 67 65 72 73 3c 2f 68  D OF triggers</h
d590: 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73  3>..<p>^Triggers
d5a0: 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 20   may be created 
d5b0: 6f 6e 20 5b 76 69 65 77 73 5d 2c 20 61 73 20 77  on [views], as w
d5c0: 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72 79 20  ell as ordinary 
d5d0: 74 61 62 6c 65 73 2c 20 62 79 0a 73 70 65 63 69  tables, by.speci
d5e0: 66 79 69 6e 67 20 49 4e 53 54 45 41 44 20 4f 46  fying INSTEAD OF
d5f0: 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54   in the CREATE T
d600: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
d610: 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f  . .^If one or mo
d620: 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e  re ON INSERT, ON
d630: 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50   DELETE.or ON UP
d640: 44 41 54 45 20 74 72 69 67 67 65 72 73 20 61 72  DATE triggers ar
d650: 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76  e defined on a v
d660: 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20  iew, then it is 
d670: 6e 6f 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20  not an.error to 
d680: 65 78 65 63 75 74 65 20 61 6e 20 49 4e 53 45 52  execute an INSER
d690: 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  T, DELETE or UPD
d6a0: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e  ATE statement on
d6b0: 20 74 68 65 20 76 69 65 77 2c 20 0a 72 65 73 70   the view, .resp
d6c0: 65 63 74 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74  ectively.  ^Inst
d6d0: 65 61 64 2c 0a 65 78 65 63 75 74 69 6e 67 20 61  ead,.executing a
d6e0: 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
d6f0: 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68   or UPDATE on th
d700: 65 20 76 69 65 77 20 63 61 75 73 65 73 20 74 68  e view causes th
d710: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 74 72 69  e associated.tri
d720: 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20 5e  ggers to fire. ^
d730: 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73 20  The real tables 
d740: 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20 76  underlying the v
d750: 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69  iew are not modi
d760: 66 69 65 64 0a 28 65 78 63 65 70 74 20 70 6f 73  fied.(except pos
d770: 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74 6c 79  sibly explicitly
d780: 2c 20 62 79 20 61 20 74 72 69 67 67 65 72 20 70  , by a trigger p
d790: 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70  rogram).</p>..<p
d7a0: 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  >^Note that the 
d7b0: 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  [sqlite3_changes
d7c0: 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33  ()] and [sqlite3
d7d0: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
d7e0: 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 64 6f 20  ] interfaces.do 
d7f0: 6e 6f 74 20 63 6f 75 6e 74 20 49 4e 53 54 45 41  not count INSTEA
d800: 44 20 4f 46 20 74 72 69 67 67 65 72 20 66 69 72  D OF trigger fir
d810: 69 6e 67 73 2c 20 62 75 74 20 74 68 65 0a 5b 63  ings, but the.[c
d820: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61  ount_changes pra
d830: 67 6d 61 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20  gma] does count 
d840: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
d850: 65 72 20 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a  er firing.</p>..
d860: 3c 68 33 3e 53 6f 6d 65 20 45 78 61 6d 70 6c 65  <h3>Some Example
d870: 20 54 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a   Triggers</h3>..
d880: 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68  <p>^(Assuming th
d890: 61 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f  at customer reco
d8a0: 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  rds are stored i
d8b0: 6e 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73  n the "customers
d8c0: 22 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61  " table, and.tha
d8d0: 74 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20  t order records 
d8e0: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
d8f0: 65 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65  e "orders" table
d900: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  , the following.
d910: 55 50 44 41 54 45 20 74 72 69 67 67 65 72 0a 65  UPDATE trigger.e
d920: 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20  nsures that all 
d930: 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72  associated order
d940: 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65 64  s are redirected
d950: 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72   when a customer
d960: 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20   changes.his or 
d970: 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e  her address:</p>
d980: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
d990: 0a 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  .CREATE TRIGGER 
d9a0: 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f  update_customer_
d9b0: 61 64 64 72 65 73 73 20 55 50 44 41 54 45 20 4f  address UPDATE O
d9c0: 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73  F address ON cus
d9d0: 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a  tomers .  BEGIN.
d9e0: 20 20 20 20 55 50 44 41 54 45 20 6f 72 64 65 72      UPDATE order
d9f0: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
da00: 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48 45 52  new.address WHER
da10: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
da20: 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e  = old.name;.  EN
da30: 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57  D;.}</tcl>..<p>W
da40: 69 74 68 20 74 68 69 73 20 74 72 69 67 67 65 72  ith this trigger
da50: 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63   installed, exec
da60: 75 74 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d  uting the statem
da70: 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ent:</p>..<tcl>E
da80: 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20  xample {.UPDATE 
da90: 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64  customers SET ad
daa0: 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20  dress = '1 Main 
dab0: 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20  St.' WHERE name 
dac0: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
dad0: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73  }</tcl>..<p>caus
dae0: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
daf0: 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63   to be automatic
db00: 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f  ally executed:</
db10: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
db20: 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73   {.UPDATE orders
db30: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27   SET address = '
db40: 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52  1 Main St.' WHER
db50: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
db60: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
db70: 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 70 3e 46 6f  }</tcl>)^..<p>Fo
db80: 72 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20  r an example of 
db90: 61 6e 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72  an INSTEAD OF tr
dba0: 69 67 67 65 72 2c 20 63 6f 6e 73 69 64 65 72 20  igger, consider 
dbb0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63  the following sc
dbc0: 68 65 6d 61 3a 0a 0a 3c 74 63 6c 3e 45 78 61 6d  hema:..<tcl>Exam
dbd0: 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 41 42  ple {.CREATE TAB
dbe0: 4c 45 20 63 75 73 74 6f 6d 65 72 28 0a 20 20 63  LE customer(.  c
dbf0: 75 73 74 5f 69 64 20 49 4e 54 45 47 45 52 20 50  ust_id INTEGER P
dc00: 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 63 75  RIMARY KEY,.  cu
dc10: 73 74 5f 6e 61 6d 65 20 54 45 58 54 2c 0a 20 20  st_name TEXT,.  
dc20: 63 75 73 74 5f 61 64 64 72 20 54 45 58 54 0a 29  cust_addr TEXT.)
dc30: 3b 0a 43 52 45 41 54 45 20 56 49 45 57 20 63 75  ;.CREATE VIEW cu
dc40: 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 41  stomer_address A
dc50: 53 0a 20 20 20 53 45 4c 45 43 54 20 63 75 73 74  S.   SELECT cust
dc60: 5f 69 64 2c 20 63 75 73 74 5f 61 64 64 72 20 46  _id, cust_addr F
dc70: 52 4f 4d 20 63 75 73 74 6f 6d 65 72 3b 0a 43 52  ROM customer;.CR
dc80: 45 41 54 45 20 54 52 49 47 47 45 52 20 63 75 73  EATE TRIGGER cus
dc90: 74 5f 61 64 64 72 5f 63 68 6e 67 0a 49 4e 53 54  t_addr_chng.INST
dca0: 45 41 44 20 4f 46 20 55 50 44 41 54 45 20 4f 46  EAD OF UPDATE OF
dcb0: 20 63 75 73 74 5f 61 64 64 72 20 4f 4e 20 63 75   cust_addr ON cu
dcc0: 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 0a 42  stomer_address.B
dcd0: 45 47 49 4e 0a 20 20 55 50 44 41 54 45 20 63 75  EGIN.  UPDATE cu
dce0: 73 74 6f 6d 65 72 20 53 45 54 20 63 75 73 74 5f  stomer SET cust_
dcf0: 61 64 64 72 3d 4e 45 57 2e 63 75 73 74 5f 61 64  addr=NEW.cust_ad
dd00: 64 72 0a 20 20 20 57 48 45 52 45 20 63 75 73 74  dr.   WHERE cust
dd10: 5f 69 64 3d 4e 45 57 2e 63 75 73 74 5f 69 64 3b  _id=NEW.cust_id;
dd20: 0a 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c  .END;.}</tcl>..<
dd30: 70 3e 57 69 74 68 20 74 68 65 20 73 63 68 65 6d  p>With the schem
dd40: 61 20 61 62 6f 76 65 2c 20 61 20 73 74 61 74 65  a above, a state
dd50: 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d  ment of the form
dd60: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
dd70: 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73  ple {.UPDATE cus
dd80: 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 53 45  tomer_address SE
dd90: 54 20 63 75 73 74 5f 61 64 64 72 3d 24 6e 65 77  T cust_addr=$new
dda0: 5f 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63  _address WHERE c
ddb0: 75 73 74 5f 69 64 3d 24 63 75 73 74 5f 69 64 3b  ust_id=$cust_id;
ddc0: 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 75  .}</tcl>..<p>Cau
ddd0: 73 65 73 20 74 68 65 20 63 75 73 74 6f 6d 65 72  ses the customer
dde0: 2e 63 75 73 74 5f 61 64 64 72 20 66 69 65 6c 64  .cust_addr field
ddf0: 20 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 66   to be updated f
de00: 6f 72 20 61 20 73 70 65 63 69 66 69 63 0a 63 75  or a specific.cu
de10: 73 74 6f 6d 65 72 20 65 6e 74 72 79 20 74 68 61  stomer entry tha
de20: 74 20 68 61 73 20 63 75 73 74 6f 6d 65 72 2e 63  t has customer.c
de30: 75 73 74 5f 69 64 20 65 71 75 61 6c 20 74 6f 20  ust_id equal to 
de40: 74 68 65 20 24 63 75 73 74 5f 69 64 20 70 61 72  the $cust_id par
de50: 61 6d 65 74 65 72 2e 0a 4e 6f 74 65 20 68 6f 77  ameter..Note how
de60: 20 74 68 65 20 76 61 6c 75 65 73 20 61 73 73 69   the values assi
de70: 67 6e 65 64 20 74 6f 20 74 68 65 20 76 69 65 77  gned to the view
de80: 20 61 72 65 20 6d 61 64 65 20 61 76 61 69 6c 61   are made availa
de90: 62 6c 65 20 61 73 20 66 69 65 6c 64 0a 69 6e 20  ble as field.in 
dea0: 74 68 65 20 73 70 65 63 69 61 6c 20 22 4e 45 57  the special "NEW
deb0: 22 20 74 61 62 6c 65 20 77 69 74 68 69 6e 20 74  " table within t
dec0: 68 65 20 74 72 69 67 67 65 72 20 62 6f 64 79 2e  he trigger body.
ded0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
dee0: 61 67 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66  agment undef_bef
def0: 6f 72 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42  ore {undefined B
df00: 45 46 4f 52 45 20 74 72 69 67 67 65 72 20 62 65  EFORE trigger be
df10: 68 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  havior}</tcl>.<h
df20: 33 3e 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68  3>Cautions On Th
df30: 65 20 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20  e Use Of BEFORE 
df40: 74 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c  triggers</h3>..<
df50: 70 3e 49 66 20 61 20 42 45 46 4f 52 45 20 55 50  p>If a BEFORE UP
df60: 44 41 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44  DATE or BEFORE D
df70: 45 4c 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f  ELETE trigger mo
df80: 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65  difies or delete
df90: 73 20 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73  s a row.that was
dfa0: 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70   to have been up
dfb0: 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  dated or deleted
dfc0: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
dfd0: 74 20 6f 66 20 74 68 65 20 73 75 62 73 65 71 75  t of the subsequ
dfe0: 65 6e 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65  ent.update or de
dff0: 6c 65 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69  lete operation i
e000: 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75  s undefined.  Fu
e010: 72 74 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20  rthermore, if a 
e020: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d  BEFORE trigger.m
e030: 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74  odifies or delet
e040: 65 73 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69  es a row, then i
e050: 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77  t is undefined w
e060: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46  hether or not AF
e070: 54 45 52 20 74 72 69 67 67 65 72 73 0a 74 68 61  TER triggers.tha
e080: 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68  t would have oth
e090: 65 72 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68  erwise run on th
e0a0: 6f 73 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e  ose rows will in
e0b0: 20 66 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a   fact run..</p>.
e0c0: 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66  .<p>The value of
e0d0: 20 4e 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e   NEW.rowid is un
e0e0: 64 65 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46  defined in a BEF
e0f0: 4f 52 45 20 49 4e 53 45 52 54 20 74 72 69 67 67  ORE INSERT trigg
e100: 65 72 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20  er in which.the 
e110: 72 6f 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70  rowid is not exp
e120: 6c 69 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61  licitly set to a
e130: 6e 20 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a  n integer.</p>..
e140: 3c 70 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68  <p>Because of th
e150: 65 20 62 65 68 61 76 69 6f 72 73 20 64 65 73 63  e behaviors desc
e160: 72 69 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f  ribed above, pro
e170: 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63  grammers are enc
e180: 6f 75 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65  ouraged to.prefe
e190: 72 20 41 46 54 45 52 20 74 72 69 67 67 65 72 73  r AFTER triggers
e1a0: 20 6f 76 65 72 20 42 45 46 4f 52 45 20 74 72 69   over BEFORE tri
e1b0: 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ggers.</p>..<tcl
e1c0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 61 69  >hd_fragment rai
e1d0: 73 65 20 7b 52 41 49 53 45 20 66 75 6e 63 74 69  se {RAISE functi
e1e0: 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  on}</tcl>.<h3>Th
e1f0: 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
e200: 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  on</h3>..<p>^(A 
e210: 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63  special SQL func
e220: 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79  tion RAISE() may
e230: 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
e240: 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
e250: 6d 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f  m,)^.with the fo
e260: 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f  llowing syntax</
e270: 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  p> ..<tcl>Bubble
e280: 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
e290: 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70  nction</tcl>..<p
e2a0: 3e 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52  >^(When one of R
e2b0: 41 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e  AISE(ROLLBACK,..
e2c0: 2e 29 2c 20 52 41 49 53 45 28 41 42 4f 52 54 2c  .), RAISE(ABORT,
e2d0: 2e 2e 2e 29 20 6f 72 20 52 41 49 53 45 28 46 41  ...) or RAISE(FA
e2e0: 49 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65  IL,...).is calle
e2f0: 64 20 64 75 72 69 6e 67 20 74 72 69 67 67 65 72  d during trigger
e300: 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69  -program.executi
e310: 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69 65  on, the specifie
e320: 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d [ON CONFLICT] 
e330: 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65  processing is pe
e340: 72 66 6f 72 6d 65 64 0a 74 68 65 20 63 75 72 72  rformed.the curr
e350: 65 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e  ent query termin
e360: 61 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72  ates.)^.An error
e370: 20 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45   code of [SQLITE
e380: 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20  _CONSTRAINT] is 
e390: 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
e3a0: 61 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f  application,.alo
e3b0: 6e 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ng with the spec
e3c0: 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
e3d0: 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68  age.</p>..<p>^Wh
e3e0: 65 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29  en RAISE(IGNORE)
e3f0: 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20   is called, the 
e400: 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65  remainder of the
e410: 20 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72   current trigger
e420: 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74   program,.the st
e430: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75  atement that cau
e440: 73 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20  sed the trigger 
e450: 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75  program to execu
e460: 74 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65  te and any subse
e470: 71 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72  quent.trigger pr
e480: 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c  ograms that woul
e490: 64 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63  d have been exec
e4a0: 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e  uted are abandon
e4b0: 65 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73 65  ed. ^No database
e4c0: 0a 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c  .changes are rol
e4d0: 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74  led back.  ^If t
e4e0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  he statement tha
e4f0: 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69  t caused the tri
e500: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20  gger program.to 
e510: 65 78 65 63 75 74 65 20 69 73 20 69 74 73 65 6c  execute is itsel
e520: 66 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  f part of a trig
e530: 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65  ger program, the
e540: 6e 20 74 68 61 74 20 74 72 69 67 67 65 72 20 70  n that trigger p
e550: 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65  rogram.resumes e
e560: 78 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20  xecution at the 
e570: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
e580: 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e   next step..</p>
e590: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
e5a0: 6e 74 20 74 65 6d 70 74 72 69 67 20 7b 54 45 4d  nt temptrig {TEM
e5b0: 50 20 74 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f  P triggers on no
e5c0: 6e 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f  n-TEMP tables}</
e5d0: 74 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72  tcl>.<h3>TEMP Tr
e5e0: 69 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45  iggers on Non-TE
e5f0: 4d 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a  MP Tables</h3>..
e600: 3c 70 3e 5e 28 41 20 74 72 69 67 67 65 72 20 6e  <p>^(A trigger n
e610: 6f 72 6d 61 6c 6c 79 20 65 78 69 73 74 73 20 69  ormally exists i
e620: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
e630: 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65  ase as the table
e640: 20 6e 61 6d 65 64 0a 61 66 74 65 72 20 74 68 65   named.after the
e650: 20 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e   "ON" keyword in
e660: 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47   the CREATE TRIG
e670: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  GER statement.  
e680: 45 78 63 65 70 74 2c 20 69 74 20 69 73 0a 70 6f  Except, it is.po
e690: 73 73 69 62 6c 65 20 74 6f 20 63 72 65 61 74 65  ssible to create
e6a0: 20 61 20 54 45 4d 50 20 54 52 49 47 47 45 52 20   a TEMP TRIGGER 
e6b0: 6f 6e 20 61 20 74 61 62 6c 65 20 69 6e 20 61 6e  on a table in an
e6c0: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 2e 29  other database.)
e6d0: 5e 20 20 0a 53 75 63 68 20 61 20 74 72 69 67 67  ^  .Such a trigg
e6e0: 65 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72  er will only fir
e6f0: 65 20 77 68 65 6e 20 63 68 61 6e 67 65 73 0a 61  e when changes.a
e700: 72 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 74  re made to the t
e710: 61 72 67 65 74 20 74 61 62 6c 65 20 62 79 20 74  arget table by t
e720: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74  he application t
e730: 68 61 74 20 64 65 66 69 6e 65 64 20 74 68 65 20  hat defined the 
e740: 74 72 69 67 67 65 72 2e 0a 4f 74 68 65 72 20 61  trigger..Other a
e750: 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74  pplications that
e760: 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61   modify the data
e770: 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  base will not be
e780: 20 61 62 6c 65 20 74 6f 20 73 65 65 20 74 68 65   able to see the
e790: 0a 54 45 4d 50 20 74 72 69 67 67 65 72 20 61 6e  .TEMP trigger an
e7a0: 64 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72  d hence cannot r
e7b0: 75 6e 20 74 68 65 20 74 72 69 67 67 65 72 2e 3c  un the trigger.<
e7c0: 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66  /p>..<p>When def
e7d0: 69 6e 69 6e 67 20 61 20 54 45 4d 50 20 74 72 69  ining a TEMP tri
e7e0: 67 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45  gger on a non-TE
e7f0: 4d 50 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20  MP table, it is 
e800: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65  important to.spe
e810: 63 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73  cify the databas
e820: 65 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f  e holding the no
e830: 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20 20 46  n-TEMP table.  F
e840: 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74  or example,.in t
e850: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
e860: 74 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 69 6d  tement, it is im
e870: 70 6f 72 74 61 6e 74 20 74 6f 20 73 61 79 20 22  portant to say "
e880: 6d 61 69 6e 2e 74 61 62 31 22 20 69 6e 73 74 65  main.tab1" inste
e890: 61 64 0a 6f 66 20 6a 75 73 74 20 22 74 61 62 31  ad.of just "tab1
e8a0: 22 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ":</p>..<blockqu
e8b0: 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
e8c0: 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 65 78   TEMP TRIGGER ex
e8d0: 31 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f  1 AFTER INSERT O
e8e0: 4e 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61  N <b>main.</b>ta
e8f0: 62 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70  b1 BEGIN ....</p
e900: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
e910: 0a 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f 20  ..<p>Failure to 
e920: 73 70 65 63 69 66 79 20 74 68 65 20 64 61 74 61  specify the data
e930: 62 61 73 65 20 6e 61 6d 65 20 6f 6e 20 74 68 65  base name on the
e940: 20 74 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f   target table co
e950: 75 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68  uld result.in th
e960: 65 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 62  e TEMP trigger b
e970: 65 69 6e 67 20 72 65 61 74 74 61 63 68 65 64 20  eing reattached 
e980: 74 6f 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  to a table with 
e990: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e  the same name in
e9a0: 0a 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73  .another databas
e9b0: 65 20 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73  e whenever any s
e9c0: 63 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63  chema change occ
e9d0: 75 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  urs.</p>..<tcl>.
e9e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
ea30: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
ea40: 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65  VIEW} {createvie
ea50: 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57  w} {{CREATE VIEW
ea60: 7d 20 76 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a  } view *views}..
ea70: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
ea80: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69  iagram create-vi
ea90: 65 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ew-stmt.</tcl>..
eaa0: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56  <p>^The CREATE V
eab0: 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69  IEW command assi
eac0: 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20  gns a name to a 
ead0: 70 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53  pre-packaged .[S
eae0: 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
eaf0: 2e 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65  . .^Once the vie
eb00: 77 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74  w is created, it
eb10: 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
eb20: 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  the FROM clause.
eb30: 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45  of another [SELE
eb40: 43 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  CT] in place of 
eb50: 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f  a table name..</
eb60: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22  p>..<p>^If the "
eb70: 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52  TEMP" or "TEMPOR
eb80: 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63  ARY" keyword occ
eb90: 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22  urs in between "
eba0: 43 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45  CREATE".and "VIE
ebb0: 57 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77  W" then the view
ebc0: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
ebd0: 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65   is only visible
ebe0: 20 74 6f 20 74 68 65 0a 5b 64 61 74 61 62 61 73   to the.[databas
ebf0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 74 68  e connection] th
ec00: 61 74 20 63 72 65 61 74 65 64 20 69 74 20 61 6e  at created it an
ec10: 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  d is automatical
ec20: 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a  ly deleted when.
ec30: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
ec40: 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65  nection is close
ec50: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20  d.</p>..<p> ^If 
ec60: 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e  a &lt;database-n
ec70: 61 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69  ame&gt; is speci
ec80: 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76  fied, then the v
ec90: 69 65 77 20 69 73 20 63 72 65 61 74 65 64 20 69  iew is created i
eca0: 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74  n .the named dat
ecb0: 61 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e  abase. ^It is an
ecc0: 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66   error to specif
ecd0: 79 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74  y both a &lt;dat
ece0: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61  abase-name&gt;.a
ecf0: 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77  nd the TEMP keyw
ed00: 6f 72 64 20 6f 6e 20 61 20 56 49 45 57 2c 20 75  ord on a VIEW, u
ed10: 6e 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61  nless the &lt;da
ed20: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
ed30: 69 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e  is "temp"..^If n
ed40: 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  o database name 
ed50: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e  is specified, an
ed60: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
ed70: 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  rd is not presen
ed80: 74 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20 63  t,.the VIEW is c
ed90: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61  reated in the ma
eda0: 69 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e  in database.</p>
edb0: 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74  ..<p>^You cannot
edc0: 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45   [DELETE], [INSE
edd0: 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d  RT], or [UPDATE]
ede0: 20 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73   a view.  ^Views
edf0: 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a   are read-only .
ee00: 69 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77  in SQLite.  ^How
ee10: 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61  ever, in many ca
ee20: 73 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20  ses you can use 
ee30: 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74  an.[INSTEAD OF t
ee40: 72 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76  rigger] on the v
ee50: 69 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73  iew to accomplis
ee60: 68 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e  h .the same thin
ee70: 67 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72  g.  ^Views are r
ee80: 65 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65  emoved .with the
ee90: 20 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d   [DROP VIEW] com
eea0: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  mand.</p>..<tcl>
eeb0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
eec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
ef00: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
ef10: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b  VIRTUAL TABLE} {
ef20: 63 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52  createvtab} {{CR
ef30: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
ef40: 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  LE}}..RecursiveB
ef50: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65  ubbleDiagram cre
ef60: 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c  ate-virtual-tabl
ef70: 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-stmt.</tcl>..<
ef80: 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62  p>A [virtual tab
ef90: 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66  le] is an interf
efa0: 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e  ace to an extern
efb0: 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f  al storage or co
efc0: 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65  mputation.engine
efd0: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f   that appears to
efe0: 20 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20   be a table but 
eff0: 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c  does not actuall
f000: 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74  y store informat
f010: 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62  ion.in the datab
f020: 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
f030: 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f  p>In general, yo
f040: 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e  u can do anythin
f050: 67 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61  g with a [virtua
f060: 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61  l table] that ca
f070: 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61  n be done.with a
f080: 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
f090: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79  , except that ^y
f0a0: 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65  ou cannot create
f0b0: 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67   indices or trig
f0c0: 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61  gers on a.virtua
f0d0: 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20  l table.  ^Some 
f0e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
f0f0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69  plementations mi
f100: 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74  ght impose addit
f110: 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f  ional.restrictio
f120: 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ns.  For example
f130: 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74  , many virtual t
f140: 61 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f  ables are read-o
f150: 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  nly.</p>..<p>The
f160: 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65   &lt;module-name
f170: 26 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65  &gt; is the name
f180: 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   of an object th
f190: 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68  at implements.th
f1a0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
f1b0: 20 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c    ^The &lt;modul
f1c0: 65 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20  e-name&gt; must 
f1d0: 62 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69  be registered wi
f1e0: 74 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61  th.the SQLite da
f1f0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
f200: 6e 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33  n using.[sqlite3
f210: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
f220: 5d 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72  ] or [sqlite3_cr
f230: 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29  eate_module_v2()
f240: 5d 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69  ].prior to issui
f250: 6e 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49  ng the CREATE VI
f260: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
f270: 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75  ement..^The modu
f280: 6c 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72  le takes zero or
f290: 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61   more comma-sepa
f2a0: 72 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e  rated arguments.
f2b0: 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20  .^The arguments 
f2c0: 63 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75  can be just abou
f2d0: 74 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f  t any text as lo
f2e0: 6e 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c  ng as it has bal
f2f0: 61 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65  anced.parenthese
f300: 73 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74  s.  The argument
f310: 20 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69   syntax is suffi
f320: 63 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20  ciently general 
f330: 74 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e  that the.argumen
f340: 74 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  ts can be made t
f350: 6f 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c  o appear as [col
f360: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d  umn definitions]
f370: 20 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61   in a traditiona
f380: 6c 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  l.[CREATE TABLE]
f390: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53   statement.  .^S
f3a0: 51 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65  QLite passes the
f3b0: 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
f3c0: 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68  s directly.to th
f3d0: 65 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20  e [xCreate] and 
f3e0: 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f  [xConnect] metho
f3f0: 64 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  ds of the module
f400: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a   implementation.
f410: 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65  without any inte
f420: 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20  rpretation.  It 
f430: 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62  is the responsib
f440: 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64  ility.of the mod
f450: 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
f460: 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20  on to parse and 
f470: 69 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77  interpret its ow
f480: 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e  n arguments.</p>
f490: 0a 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20  ..<p>^A virtual 
f4a0: 74 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79  table is destroy
f4b0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64  ed using the ord
f4c0: 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c  inary.[DROP TABL
f4d0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
f4e0: 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20  here is no.DROP 
f4f0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74  VIRTUAL TABLE st
f500: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74  atement.</p>..<t
f510: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
f520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f560: 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54  ##.Section DELET
f570: 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45  E delete {DELETE
f580: 20 2a 44 45 4c 45 54 45 73 7d 0a 0a 52 65 63 75   *DELETEs}..Recu
f590: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
f5a0: 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 0a 3c  am delete-stmt.<
f5b0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45  /tcl>..<p>The DE
f5c0: 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d  LETE command rem
f5d0: 6f 76 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f  oves records fro
f5e0: 6d 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e  m the table iden
f5f0: 74 69 66 69 65 64 20 62 79 20 74 68 65 0a 20 20  tified by the.  
f600: 20 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61   <i>qualified-ta
f610: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 0a 0a  ble-name</i>. ..
f620: 3c 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45  <p>^If the WHERE
f630: 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70   clause is not p
f640: 72 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f  resent, all reco
f650: 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  rds in the table
f660: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20   are deleted..  
f670: 20 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61   ^If a WHERE cla
f680: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
f690: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65   then only those
f6a0: 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
f6b0: 74 68 65 0a 20 20 20 72 65 73 75 6c 74 20 6f 66  the.   result of
f6c0: 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
f6d0: 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 73 20  WHERE clause as 
f6e0: 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  a [boolean expre
f6f0: 73 73 69 6f 6e 7c 0a 20 20 20 62 6f 6f 6c 65 61  ssion|.   boolea
f700: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
f710: 74 72 75 65 5d 20 61 72 65 20 64 65 6c 65 74 65  true] are delete
f720: 64 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  d...<h3>Restrict
f730: 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53  ions on DELETE S
f740: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
f750: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
f760: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
f770: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
f780: 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c  ons apply to DEL
f790: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74  ETE statements t
f7a0: 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e  hat occur within
f7b0: 20 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20   the.   body of 
f7c0: 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
f7d0: 52 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c  R] statement:..<
f7e0: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  ul>.  <li><p>^Th
f7f0: 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
f800: 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  /i> specified as
f810: 20 70 61 72 74 20 6f 66 20 61 20 44 45 4c 45 54   part of a DELET
f820: 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  E statement with
f830: 69 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72  in.    a trigger
f840: 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e   body must be un
f850: 71 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e  qualified.  ^(In
f860: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
f870: 65 0a 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73  e.    <i>databas
f880: 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  e-name</i><b>.</
f890: 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  b> prefix on the
f8a0: 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e   table name is n
f8b0: 6f 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20  ot allowed .    
f8c0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
f8d0: 29 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  )^ ^If the table
f8e0: 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
f8f0: 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65  igger is attache
f900: 64 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20  d is.    not in 
f910: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
f920: 65 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20 73  e, then DELETE s
f930: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
f940: 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20   the trigger.   
f950: 20 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72 61   body must opera
f960: 74 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74  te on tables wit
f970: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
f980: 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66  abase as it. ^If
f990: 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 74   the table.    t
f9a0: 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
f9b0: 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20  ger is attached 
f9c0: 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64  is in the TEMP d
f9d0: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
f9e0: 65 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65  e.    unqualifie
f9f0: 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
fa00: 62 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65  ble being delete
fa10: 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e  d is resolved in
fa20: 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
fa30: 0a 20 20 20 20 69 74 20 69 73 20 66 6f 72 20 61  .    it is for a
fa40: 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
fa50: 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
fa60: 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
fa70: 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  P database, then
fa80: 0a 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64 61  .    the main da
fa90: 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79  tabase, then any
faa0: 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
fab0: 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
fac0: 65 79 20 77 65 72 65 0a 20 20 20 20 61 74 74 61  ey were.    atta
fad0: 63 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c  ched)..    .  <l
fae0: 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
faf0: 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
fb00: 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
fb10: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
fb20: 44 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74 65  DELETE.    state
fb30: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
fb40: 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c  ggers.</p>..  <l
fb50: 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  i><p>^The LIMIT 
fb60: 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
fb70: 75 73 65 73 20 28 64 65 73 63 72 69 62 65 64 20  uses (described 
fb80: 62 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75 70  below) are unsup
fb90: 70 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20 44  ported for.    D
fba0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
fbb0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
fbc0: 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33  .</p>.</ul>..<h3
fbd0: 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20  >Optional LIMIT 
fbe0: 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
fbf0: 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  uses</h3>..<p>^(
fc00: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
fc10: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b  piled with the [
fc20: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
fc30: 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
fc40: 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  T].compile-time 
fc50: 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  option, then the
fc60: 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44   syntax of the D
fc70: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
fc80: 69 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74  is.extended by t
fc90: 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f  he addition of o
fca0: 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59  ptional ORDER BY
fcb0: 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
fcc0: 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  es:)^</p>..<tcl>
fcd0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
fce0: 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65  lete-stmt-limite
fcf0: 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20  d</tcl>..<p>^If 
fd00: 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  a DELETE stateme
fd10: 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63  nt has a LIMIT c
fd20: 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d  lause, the maxim
fd30: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  um number of row
fd40: 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 64  s that.will be d
fd50: 65 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64 20  eleted is found 
fd60: 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
fd70: 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65  e accompanying e
fd80: 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61  xpression and ca
fd90: 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69  sting.it to an i
fda0: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 49  nteger value. ^I
fdb0: 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
fdc0: 74 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74  the evaluating t
fdd0: 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a  he LIMIT clause.
fde0: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
fdf0: 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
fe00: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  o an integer val
fe10: 75 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  ue, it is an err
fe20: 6f 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76 65  or. ^A .negative
fe30: 20 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73 20   LIMIT value is 
fe40: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22  interpreted as "
fe50: 6e 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20  no limit". ^(If 
fe60: 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
fe70: 6d 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20 61  ment .also has a
fe80: 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  n OFFSET clause,
fe90: 20 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69   then it is simi
fea0: 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20  larly evaluated 
feb0: 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a 69  and cast to an.i
fec0: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41 67  nteger value. Ag
fed0: 61 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ain, it is an er
fee0: 72 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75 65  ror if the value
fef0: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
ff00: 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20  essly.converted 
ff10: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e  to an integer.)^
ff20: 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f   ^If there is no
ff30: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
ff40: 6f 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65  or the calculate
ff50: 64 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  d.integer value 
ff60: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
ff70: 20 65 66 66 65 63 74 69 76 65 20 4f 46 46 53 45   effective OFFSE
ff80: 54 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e  T value is zero.
ff90: 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44 45  ..<p>^(If the DE
ffa0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  LETE statement h
ffb0: 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  as an ORDER BY c
ffc0: 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
ffd0: 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rows that would 
ffe0: 0a 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74  .be deleted in t
fff0: 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
10000 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
10010 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64  re sorted accord
10020 69 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44 45  ing to the .ORDE
10030 52 20 42 59 2e 20 54 68 65 20 66 69 72 73 74 20  R BY. The first 
10040 3c 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77  <i>M</i> rows, w
10050 68 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73  here <i>M</i> is
10060 20 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e 64   the value found
10070 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   by.evaluating t
10080 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
10090 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65   expression, are
100a0 20 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74 68   skipped, and th
100b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e  e following .<i>
100c0 4e 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e  N</i>, where <i>
100d0 4e 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c  N</i> is the val
100e0 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ue of the LIMIT 
100f0 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20  expression, are 
10100 64 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74  deleted.)^.^If t
10110 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
10120 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73  an <i>N</i> rows
10130 20 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65 72   remaining after
10140 20 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46 53   taking the OFFS
10150 45 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61  ET clause.into a
10160 63 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74 68  ccount, or if th
10170 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 65  e LIMIT clause e
10180 76 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e 65  valuated to a ne
10190 67 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68  gative value, th
101a0 65 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67  en all.remaining
101b0 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65   rows are delete
101c0 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44  d...<p>^If the D
101d0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
101e0 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20  has no ORDER BY 
101f0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
10200 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64   rows that.would
10210 20 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74   be deleted in t
10220 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
10230 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
10240 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20  re assembled in 
10250 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64  an.arbitrary ord
10260 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69  er before applyi
10270 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64  ng the LIMIT and
10280 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20   OFFSET clauses 
10290 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74 68  to determine .th
102a0 65 20 73 75 62 73 65 74 20 74 68 61 74 20 61 72  e subset that ar
102b0 65 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65 74  e actually delet
102c0 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
102d0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
102e0 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
102f0 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  ent is used only
10300 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
10310 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69  ich.rows fall wi
10320 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20  thin the LIMIT. 
10330 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  The order in whi
10340 63 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65  ch rows are dele
10350 74 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ted is arbitrary
10360 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c  .and is not infl
10370 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52  uenced by the OR
10380 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e  DER BY clause.)^
10390 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
103a0 6e 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20 7b  nt truncateopt {
103b0 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
103c0 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ation}</tcl>.<h3
103d0 3e 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70  >The Truncate Op
103e0 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a  timization</h3>.
103f0 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48  .<p>^When the WH
10400 45 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ERE is omitted f
10410 72 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61  rom a DELETE sta
10420 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74  tement and the t
10430 61 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74  able.being delet
10440 65 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65  ed has no trigge
10450 72 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20  rs,.SQLite uses 
10460 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  an optimization 
10470 74 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e 74  to erase the ent
10480 69 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  ire table conten
10490 74 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  t.without having
104a0 20 74 6f 20 76 69 73 69 74 20 65 61 63 68 20 72   to visit each r
104b0 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ow of the table 
104c0 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68  individually..Th
104d0 69 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70  is "truncate" op
104e0 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73  timization makes
104f0 20 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20   the delete run 
10500 6d 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69  much faster..Pri
10510 6f 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65  or to SQLite [ve
10520 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68  rsion 3.6.5], th
10530 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d  e truncate optim
10540 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61  ization.also mea
10550 6e 74 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c  nt that the [sql
10560 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20  ite3_changes()] 
10570 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74  and.[sqlite3_tot
10580 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e  al_changes()] in
10590 74 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65  terfaces.and the
105a0 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20   [count_changes 
105b0 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74  pragma].will not
105c0 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e   actually return
105d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
105e0 65 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54  eleted rows.  .T
105f0 68 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20  hat problem has 
10600 62 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66  been fixed as of
10610 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d   [version 3.6.5]
10620 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63  ...<p>^The trunc
10630 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
10640 20 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e   can be permanen
10650 74 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72  tly disabled for
10660 20 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20   all queries.by 
10670 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69  recompiling.SQLi
10680 74 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  te with the [SQL
10690 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54  ITE_OMIT_TRUNCAT
106a0 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20  E_OPTIMIZATION] 
106b0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69  compile-time swi
106c0 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  tch.</p>..<p>The
106d0 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
106e0 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20  zation can also 
106f0 62 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72  be disabled at r
10700 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65  untime using.the
10710 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75   [sqlite3_set_au
10720 74 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65  thorizer()] inte
10730 72 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61  rface.  ^If an a
10740 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61  uthorizer callba
10750 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49  ck.returns [SQLI
10760 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61  TE_IGNORE] for a
10770 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  n [SQLITE_DELETE
10780 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74  ] action code, t
10790 68 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f  hen.the DELETE o
107a0 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72  peration will pr
107b0 6f 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72  oceed but the tr
107c0 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74  uncate optimizat
107d0 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61  ion will.be bypa
107e0 73 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69  ssed and rows wi
107f0 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e  ll be deleted on
10800 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c  e by one.</p>..<
10810 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
10820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10860 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45  ####.Section {DE
10870 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
10880 65 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 52  etach *DETACH..R
10890 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
108a0 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d  agram detach-stm
108b0 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
108c0 69 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74  is statement det
108d0 61 63 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f  aches an additio
108e0 6e 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e  nal database con
108f0 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73  nection previous
10900 6c 79 20 0a 61 74 74 61 63 68 65 64 20 75 73 69  ly .attached usi
10910 6e 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20  ng the [ATTACH] 
10920 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57 68  statement.  .^Wh
10930 65 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72 65  en not in [share
10940 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 0a  d cache mode], .
10950 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
10960 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  o have the same 
10970 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74  database file at
10980 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20  tached multiple 
10990 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66  times using .dif
109a0 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e  ferent names, an
109b0 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20  d detaching one 
109c0 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20  connection to a 
109d0 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20  file will leave 
109e0 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61  the .others inta
109f0 63 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68 61  ct.</p>.^In [sha
10a00 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c  red cache mode],
10a10 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61   attempting to a
10a20 74 74 61 63 68 20 74 68 65 20 73 61 6d 65 20 64  ttach the same d
10a30 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 6f 72  atabase file mor
10a40 65 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65 73 75  e.than once resu
10a50 6c 74 73 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e  lts in an error.
10a60 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65  ..<p>^This state
10a70 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69  ment will fail i
10a80 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74  f SQLite is in t
10a90 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74  he middle of a t
10aa0 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a  ransaction.</p>.
10ab0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
10ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10af0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10b00 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
10b10 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70  DROP INDEX} drop
10b20 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44  index {{DROP IND
10b30 45 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  EX}}..RecursiveB
10b40 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
10b50 70 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74  p-index-stmt.</t
10b60 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f  cl>..<p>^The DRO
10b70 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  P INDEX statemen
10b80 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64  t removes an ind
10b90 65 78 20 61 64 64 65 64 0a 77 69 74 68 20 74 68  ex added.with th
10ba0 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d  e [CREATE INDEX]
10bb0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
10bc0 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65   index is comple
10bd0 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f  tely removed fro
10be0 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65  m.the disk.  The
10bf0 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63   only way to rec
10c00 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69  over the index i
10c10 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65  s to reenter the
10c20 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52  .appropriate [CR
10c30 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d  EATE INDEX] comm
10c40 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<tcl>.
10c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
10ca0 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42  ection {DROP TAB
10cb0 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b  LE} droptable {{
10cc0 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52 65  DROP TABLE}}..Re
10cd0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
10ce0 67 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d  gram drop-table-
10cf0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
10d00 5e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20  ^The DROP TABLE 
10d10 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
10d20 73 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20  s a table added 
10d30 77 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45  with the.[CREATE
10d40 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
10d50 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65  t.  The name spe
10d60 63 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61  cified is the.ta
10d70 62 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20  ble name.  ^The 
10d80 64 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73  dropped table is
10d90 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f   completely remo
10da0 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ved from the dat
10db0 61 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e  abase .schema an
10dc0 64 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e  d the disk file.
10dd0 20 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20    The table can 
10de0 6e 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64  not be recovered
10df0 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73  .  .^All indices
10e00 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73   and triggers.as
10e10 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
10e20 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f  e table are also
10e30 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   deleted.</p>..<
10e40 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p>^The optional 
10e50 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  IF EXISTS clause
10e60 20 73 75 70 70 72 65 73 73 65 73 20 74 68 65 20   suppresses the 
10e70 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64  error that would
10e80 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74   normally.result
10e90 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f   if the table do
10ea0 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70  es not exist.</p
10eb0 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69  >..<p>^If [forei
10ec0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
10ed0 74 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c  ts] are enabled,
10ee0 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f   a DROP TABLE co
10ef0 6d 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61  mmand performs a
10f00 6e 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45  n.implicit [DELE
10f10 54 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d  TE | DELETE FROM
10f20 20 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63 6f   &lt;tbl&gt;] co
10f30 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d  mmand before rem
10f40 6f 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20  oving the.table 
10f50 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
10f60 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74  e schema. ^Any t
10f70 72 69 67 67 65 72 73 20 61 74 74 61 63 68 65 64  riggers attached
10f80 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72   to the table ar
10f90 65 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74  e.dropped from t
10fa0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
10fb0 6d 61 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d  ma before the im
10fc0 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52  plicit DELETE FR
10fd0 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 0a  OM &lt;tbl&gt; .
10fe0 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20  is executed, so 
10ff0 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73  this cannot caus
11000 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20 74  e any triggers t
11010 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72  o fire. By contr
11020 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69  ast, ^an.implici
11030 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
11040 74 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20 63  t;tbl&gt; does c
11050 61 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67 75  ause any configu
11060 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79  red.[foreign key
11070 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61 6b   actions] to tak
11080 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74 68  e place. .^If th
11090 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  e implicit DELET
110a0 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67  E FROM &lt;tbl&g
110b0 74 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20 70  t; executed.as p
110c0 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41  art of a DROP TA
110d0 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c  BLE command viol
110e0 61 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61  ates any immedia
110f0 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
11100 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65  onstraints,.an e
11110 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
11120 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
11130 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e  s not dropped. ^
11140 49 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74  If .the implicit
11150 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74   DELETE FROM &lt
11160 3b 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73 20  ;tbl&gt; causes 
11170 61 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f  any .deferred fo
11180 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
11190 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c  aints to be viol
111a0 61 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69  ated, and the vi
111b0 6f 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65  olations still.e
111c0 78 69 73 74 20 77 68 65 6e 20 74 68 65 20 74 72  xist when the tr
111d0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d  ansaction is com
111e0 6d 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72  mitted, an error
111f0 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 74 20   is returned at 
11200 74 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d  the time.of comm
11210 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  it...<tcl>.#####
11220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f  #########.Sectio
11270 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d  n {DROP TRIGGER}
11280 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44   droptrigger {{D
11290 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52  ROP TRIGGER}}..R
112a0 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
112b0 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67  agram drop-trigg
112c0 65 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  er-stmt.</tcl>..
112d0 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 52 49  <p>^The DROP TRI
112e0 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72  GGER statement r
112f0 65 6d 6f 76 65 73 20 61 20 74 72 69 67 67 65 72  emoves a trigger
11300 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
11310 0a 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52  .[CREATE TRIGGER
11320 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e  ] statement. ^On
11330 63 65 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20  ce removed, the 
11340 74 72 69 67 67 65 72 20 64 65 66 69 6e 69 74 69  trigger definiti
11350 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20  on is no.longer 
11360 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 73  present in the s
11370 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 6f 72  qlite_master (or
11380 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
11390 74 65 72 29 20 74 61 62 6c 65 20 61 6e 64 20 69  ter) table and i
113a0 73 0a 6e 6f 74 20 66 69 72 65 64 20 62 79 20 61  s.not fired by a
113b0 6e 79 20 73 75 62 73 65 71 75 65 6e 74 20 49 4e  ny subsequent IN
113c0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
113d0 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
113e0 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  s...<p>^Note tha
113f0 74 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61  t triggers are a
11400 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f  utomatically dro
11410 70 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73  pped when the as
11420 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69  sociated table i
11430 73 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c  s.dropped...<tcl
11440 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
11450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11490 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56  .Section {DROP V
114a0 49 45 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b  IEW} dropview {{
114b0 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63  DROP VIEW}}..Rec
114c0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
114d0 72 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74  ram drop-view-st
114e0 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
114f0 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61  he DROP VIEW sta
11500 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61  tement removes a
11510 20 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79   view created by
11520 20 74 68 65 20 5b 43 52 45 41 54 45 20 56 49 45   the [CREATE VIE
11530 57 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e  W] .  statement.
11540 20 5e 54 68 65 20 76 69 65 77 20 64 65 66 69 6e   ^The view defin
11550 69 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64  ition is removed
11560 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
11570 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 0a  se schema, but .
11580 20 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61    no actual data
11590 20 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69   in the underlyi
115a0 6e 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69  ng base tables i
115b0 73 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e  s modified...<p>
115c0 5e 28 54 68 65 20 76 69 65 77 20 74 6f 20 64 72  ^(The view to dr
115d0 6f 70 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  op is identified
115e0 20 62 79 20 74 68 65 20 76 69 65 77 2d 6e 61 6d   by the view-nam
115f0 65 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a  e and optional .
11600 20 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20    database-name 
11610 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
11620 74 20 6f 66 20 74 68 65 20 44 52 4f 50 20 56 49  t of the DROP VI
11630 45 57 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  EW statement. Th
11640 69 73 20 0a 20 20 72 65 66 65 72 65 6e 63 65 20  is .  reference 
11650 69 73 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e  is resolved usin
11660 67 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 70  g the standard p
11670 72 6f 63 65 64 75 72 65 20 66 6f 72 20 5b 6f 62  rocedure for [ob
11680 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d  ject resolution]
11690 2e 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74  .)^..<p>.  ^If t
116a0 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65  he specified vie
116b0 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  w cannot be foun
116c0 64 20 61 6e 64 20 74 68 65 20 49 46 20 45 58 49  d and the IF EXI
116d0 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  STS clause is no
116e0 74 20 0a 20 20 70 72 65 73 65 6e 74 2c 20 69 74  t .  present, it
116f0 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49   is an error. ^I
11700 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
11710 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66  view cannot be f
11720 6f 75 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a 20  ound and an IF. 
11730 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
11740 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  s present in the
11750 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65   DROP VIEW state
11760 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73  ment, then the s
11770 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 61 20  tatement.  is a 
11780 6e 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23  no-op....<tcl>.#
11790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117d0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
117e0 63 74 69 6f 6e 20 7b 44 61 74 61 62 61 73 65 20  ction {Database 
117f0 4f 62 6a 65 63 74 20 4e 61 6d 65 20 52 65 73 6f  Object Name Reso
11800 6c 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d  lution} {naming}
11810 20 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75   {{object resolu
11820 74 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  tion}}.</tcl>..<
11830 70 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c 20  p>.  In SQLite, 
11840 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63  a database objec
11850 74 20 28 61 20 74 61 62 6c 65 2c 20 69 6e 64 65  t (a table, inde
11860 78 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76 69  x, trigger or vi
11870 65 77 29 20 69 73 20 69 64 65 6e 74 69 66 69 65  ew) is identifie
11880 64 0a 20 20 62 79 20 74 68 65 20 6e 61 6d 65 20  d.  by the name 
11890 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20 61 6e  of the object an
118a0 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
118b0 65 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20  e database that 
118c0 69 74 20 72 65 73 69 64 65 73 20 69 6e 2e 20 0a  it resides in. .
118d0 20 20 44 61 74 61 62 61 73 65 20 6f 62 6a 65 63    Database objec
118e0 74 73 20 6d 61 79 20 72 65 73 69 64 65 20 69 6e  ts may reside in
118f0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
11900 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74  se, the temp dat
11910 61 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61  abase, or in.  a
11920 6e 20 5b 41 54 54 41 43 48 7c 61 74 74 61 63 68  n [ATTACH|attach
11930 65 64 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c  ed database]...<
11940 70 3e 0a 20 20 54 68 65 20 73 79 6e 74 61 78 20  p>.  The syntax 
11950 6f 66 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  of the [DROP TAB
11960 4c 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58  LE], [DROP INDEX
11970 5d 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20  ], [DROP VIEW], 
11980 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a  [DROP TRIGGER],.
11990 20 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c    [REINDEX], [AL
119a0 54 45 52 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d  TER TABLE] and m
119b0 61 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e  any other comman
119c0 64 73 20 61 6c 6c 20 70 65 72 6d 69 74 20 74 68  ds all permit th
119d0 65 20 75 73 65 72 20 74 6f 0a 20 20 73 70 65 63  e user to.  spec
119e0 69 66 79 20 61 20 64 61 74 61 62 61 73 65 20 6f  ify a database o
119f0 62 6a 65 63 74 20 65 69 74 68 65 72 20 62 79 20  bject either by 
11a00 69 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20  its name alone, 
11a10 6f 72 20 62 79 20 61 20 63 6f 6d 62 69 6e 61 74  or by a combinat
11a20 69 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d  ion of.  its nam
11a30 65 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f  e and the name o
11a40 66 20 69 74 73 20 64 61 74 61 62 61 73 65 2e 20  f its database. 
11a50 5e 28 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65  ^(If no database
11a60 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
11a70 20 70 61 72 74 0a 20 20 6f 66 20 74 68 65 20 6f   part.  of the o
11a80 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c  bject reference,
11a90 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61   then SQLite sea
11aa0 72 63 68 65 73 20 74 68 65 20 6d 61 69 6e 2c 20  rches the main, 
11ab0 74 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74 74  temp and all att
11ac0 61 63 68 65 64 0a 20 20 64 61 74 61 62 61 73 65  ached.  database
11ad0 73 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20  s for an object 
11ae0 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
11af0 6e 61 6d 65 2e 20 54 68 65 20 74 65 6d 70 20 64  name. The temp d
11b00 61 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63  atabase is searc
11b10 68 65 64 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c  hed.  first, fol
11b20 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6d 61 69  lowed by the mai
11b30 6e 20 64 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c  n database, foll
11b40 6f 77 65 64 20 61 6c 6c 20 61 74 74 61 63 68 65  owed all attache
11b50 64 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  d databases in t
11b60 68 65 0a 20 20 6f 72 64 65 72 20 74 68 61 74 20  he.  order that 
11b70 74 68 65 79 20 77 65 72 65 20 61 74 74 61 63 68  they were attach
11b80 65 64 2e 20 54 68 65 20 72 65 66 65 72 65 6e 63  ed. The referenc
11b90 65 20 72 65 73 6f 6c 76 65 73 20 74 6f 20 74 68  e resolves to th
11ba0 65 20 66 69 72 73 74 20 6d 61 74 63 68 0a 20 20  e first match.  
11bb0 66 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61  found.)^ For exa
11bc0 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20  mple:..<pre>^(. 
11bd0 20 20 20 20 20 2f 2a 20 41 64 64 20 61 20 74 61       /* Add a ta
11be0 62 6c 65 20 6e 61 6d 65 64 20 27 74 31 27 20 74  ble named 't1' t
11bf0 6f 20 74 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e  o the temp, main
11c00 20 61 6e 64 20 61 6e 20 61 74 74 61 63 68 65 64   and an attached
11c10 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20   database */.   
11c20 20 20 20 41 54 54 41 43 48 20 27 66 69 6c 65 2e     ATTACH 'file.
11c30 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
11c40 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
11c50 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43  1(x, y);.      C
11c60 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
11c70 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20   t1(x, y);.     
11c80 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75   CREATE TABLE au
11c90 78 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20  x.t1(x, y);..   
11ca0 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
11cb0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f  ;         /* Dro
11cc0 70 20 74 61 62 6c 65 20 69 6e 20 74 65 6d 70 20  p table in temp 
11cd0 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20  database */.    
11ce0 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
11cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70           /* Drop
11d00 20 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64   table in main d
11d10 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20  atabase */.     
11d20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20   DROP TABLE t1; 
11d30 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20          /* Drop 
11d40 74 61 62 6c 65 20 69 6e 20 61 75 78 20 64 61 74  table in aux dat
11d50 61 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65  abase */.)^</pre
11d60 3e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64  >..<p>.  ^If a d
11d70 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20  atabase name is 
11d80 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
11d90 74 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 72  t of an object r
11da0 65 66 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73  eference, it mus
11db0 74 20 62 65 0a 20 20 65 69 74 68 65 72 20 22 6d  t be.  either "m
11dc0 61 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22 20  ain", or "temp" 
11dd0 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  or the name of a
11de0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
11df0 61 73 65 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72  ase. ^Like other
11e00 0a 20 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65  .  SQL identifie
11e10 72 73 2c 20 64 61 74 61 62 61 73 65 20 6e 61 6d  rs, database nam
11e20 65 73 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65  es are case-inse
11e30 6e 73 69 74 69 76 65 2e 20 5e 49 66 20 61 20 64  nsitive. ^If a d
11e40 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 20 20 69  atabase name.  i
11e50 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
11e60 6e 20 6f 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64  n only the named
11e70 20 64 61 74 61 62 61 73 65 20 69 73 20 73 65 61   database is sea
11e80 72 63 68 65 64 20 66 6f 72 20 74 68 65 20 6e 61  rched for the na
11e90 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e  med object...<p>
11ea0 0a 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72  .  Most object r
11eb0 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e  eferences may on
11ec0 6c 79 20 72 65 73 6f 6c 76 65 20 74 6f 20 61 20  ly resolve to a 
11ed0 73 70 65 63 69 66 69 63 20 74 79 70 65 20 6f 66  specific type of
11ee0 20 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20 20 65   object (for.  e
11ef0 78 61 6d 70 6c 65 20 61 20 72 65 66 65 72 65 6e  xample a referen
11f00 63 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ce that is part 
11f10 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20  of a DROP TABLE 
11f20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e  statement may on
11f30 6c 79 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20  ly resolve.  to 
11f40 61 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  a table object, 
11f50 6e 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20 74 72  not an index, tr
11f60 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 2e 20  igger or view). 
11f70 48 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d 65 20  However in some 
11f80 63 6f 6e 74 65 78 74 73 20 0a 20 20 28 65 2e 67  contexts .  (e.g
11f90 2e 20 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e 20  . [REINDEX]) an 
11fa0 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65  object reference
11fb0 20 6d 61 79 20 62 65 20 72 65 73 6f 6c 76 65 20   may be resolve 
11fc0 74 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  to more than one
11fd0 20 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63   type.  of objec
11fe0 74 2e 20 5e 57 68 65 6e 20 73 65 61 72 63 68 69  t. ^When searchi
11ff0 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
12000 6d 61 73 20 66 6f 72 20 61 20 6e 61 6d 65 64 20  mas for a named 
12010 6f 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73 20  object, objects 
12020 6f 66 0a 20 20 74 79 70 65 73 20 74 68 61 74 20  of.  types that 
12030 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69  cannot be used i
12040 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66  n the context of
12050 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 61   the reference a
12060 72 65 20 61 6c 77 61 79 73 20 0a 20 20 69 67 6e  re always .  ign
12070 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ored...<tcl>.###
12080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120c0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
120d0 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c  ion EXPLAIN expl
120e0 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62  ain EXPLAIN..Bub
120f0 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73  bleDiagram sql-s
12100 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
12110 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  An SQL statement
12120 20 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64   can be preceded
12130 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
12140 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20  "EXPLAIN" or.by 
12150 74 68 65 20 70 68 72 61 73 65 20 22 45 58 50 4c  the phrase "EXPL
12160 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e  AIN QUERY PLAN".
12170 20 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69    ^Either modifi
12180 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  cation causes th
12190 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e.SQL statement 
121a0 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
121b0 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75  uery and to retu
121c0 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  rn information a
121d0 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c  bout.how the SQL
121e0 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
121f0 20 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69   have operated i
12200 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  f the EXPLAIN ke
12210 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20  yword or.phrase 
12220 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64  had been omitted
12230 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75  .</p>..<p>The ou
12240 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49  tput from EXPLAI
12250 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55  N and EXPLAIN QU
12260 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65  ERY PLAN is inte
12270 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63  nded for.interac
12280 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e  tive analysis an
12290 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e  d troubleshootin
122a0 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74  g only.  The det
122b0 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74  ails of the .out
122c0 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73  put format are s
122d0 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65  ubject to change
122e0 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73   from one releas
122f0 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74  e of SQLite to t
12300 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61  he next..Applica
12310 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74  tions should not
12320 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20   use EXPLAIN or 
12330 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
12340 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65  AN since.their e
12350 78 61 63 74 20 62 65 68 61 76 69 6f 72 20 69 73  xact behavior is
12360 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e   variable and on
12370 6c 79 20 70 61 72 74 69 61 6c 6c 79 20 64 6f 63  ly partially doc
12380 75 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  umented.</p>..<p
12390 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41  >^When the EXPLA
123a0 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61  IN keyword appea
123b0 72 73 20 62 79 20 69 74 73 65 6c 66 20 69 74 20  rs by itself it 
123c0 63 61 75 73 65 73 20 74 68 65 20 73 74 61 74 65  causes the state
123d0 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61  ment.to behave a
123e0 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20 72  s a query that r
123f0 65 74 75 72 6e 73 20 74 68 65 20 73 65 71 75 65  eturns the seque
12400 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c  nce of .[virtual
12410 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63   machine instruc
12420 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20  tions] it would 
12430 68 61 76 65 20 75 73 65 64 20 74 6f 20 65 78 65  have used to exe
12440 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64  cute the command
12450 20 68 61 64 0a 74 68 65 20 45 58 50 4c 41 49 4e   had.the EXPLAIN
12460 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65   keyword not bee
12470 6e 20 70 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e  n present. ^When
12480 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45   the EXPLAIN QUE
12490 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65 0a 61  RY PLAN phrase.a
124a0 70 70 65 61 72 73 2c 20 74 68 65 20 73 74 61 74  ppears, the stat
124b0 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 68 69  ement returns hi
124c0 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61  gh-level informa
124d0 74 69 6f 6e 20 72 65 67 61 72 64 69 6e 67 20 74  tion regarding t
124e0 68 65 20 71 75 65 72 79 0a 70 6c 61 6e 20 74 68  he query.plan th
124f0 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  at would have be
12500 65 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20 45 58  en used...The EX
12510 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
12520 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73 63   command is desc
12530 72 69 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61  ribed in .[expla
12540 69 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f  in query plan|mo
12550 72 65 20 64 65 74 61 69 6c 20 68 65 72 65 5d 2e  re detail here].
12560 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
12570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125b0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65  ######.Section e
125c0 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b  xpression expr {
125d0 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70  *expression {exp
125e0 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d  ression syntax}}
125f0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
12600 65 44 69 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f  eDiagram expr.</
12610 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65  tcl>..<p>This se
12620 63 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65  ction is differe
12630 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65  nt from the othe
12640 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20  rs.  Most other 
12650 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73  sections of.this
12660 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20   document talks 
12670 61 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c  about a particul
12680 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20  ar SQL command. 
12690 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f   This section do
126a0 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75  es.not talk abou
126b0 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63  t a standalone c
126c0 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74  ommand but about
126d0 20 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77   "expressions" w
126e0 68 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d  hich are .subcom
126f0 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20  ponents of most 
12700 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c  other commands.<
12710 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
12720 67 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20  gment binaryops 
12730 7b 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72  {binary operator
12740 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65  s}</tcl>.<h3>Ope
12750 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
12760 28 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  (SQLite understa
12770 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
12780 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
12790 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
127a0 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
127b0 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
127c0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
127d0 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
127e0 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
127f0 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
12800 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
12810 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
12820 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
12830 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
12840 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
12850 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
12860 20 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e   </big>IS   IS N
12870 4f 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20  OT   IN   LIKE  
12880 20 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20   GLOB   MATCH   
12890 52 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52  REGEXP.AND   .OR
128a0 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f  </font>.</pre></
128b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
128c0 70 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e  p>^(Supported un
128d0 61 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61  ary prefix opera
128e0 74 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c  tors are these:<
128f0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
12900 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
12910 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
12920 67 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20  g>-    +    ~   
12930 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74   NOT</big></font
12940 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  >.</pre></blockq
12950 75 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  uote>)^..<tcl>hd
12960 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74  _fragment collat
12970 65 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65  eop {COLLATE ope
12980 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  rator}</tcl>.<p>
12990 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65  ^The COLLATE ope
129a0 72 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79  rator is a unary
129b0 20 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f   postfix.operato
129c0 72 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61  r that assigns a
129d0 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
129e0 65 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72  ence] to an expr
129f0 65 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c  ession..^The COL
12a00 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61  LATE operator ha
12a10 73 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65  s a higher prece
12a20 64 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72  dence (binds mor
12a30 65 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20  e tightly) than 
12a40 61 6e 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61  any.binary opera
12a50 74 6f 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72  tor and any unar
12a60 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f  y prefix operato
12a70 72 20 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43  r except "~"..(C
12a80 4f 4c 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61  OLLATE and "~" a
12a90 72 65 20 61 73 73 6f 63 69 61 74 69 76 65 20 73  re associative s
12aa0 6f 20 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20  o their binding 
12ab0 6f 72 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d  order does not m
12ac0 61 74 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c  atter.).^The col
12ad0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
12ae0 73 65 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41  set by the COLLA
12af0 54 45 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72  TE operator over
12b00 72 69 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74  rides the.collat
12b10 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 74  ing sequence det
12b20 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43  ermined by the C
12b30 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e  OLLATE clause in
12b40 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e   a table.[column
12b50 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65   definition]..Se
12b60 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67  e the [collating
12b70 20 73 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69   sequence| detai
12b80 6c 65 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f  led discussion o
12b90 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  n collating sequ
12ba0 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64  ences].in the [d
12bb0 61 74 61 74 79 70 65 20 7c 20 44 61 74 61 74 79  atatype | Dataty
12bc0 70 65 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64  pe In SQLite3] d
12bd0 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69  ocument for addi
12be0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
12bf0 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  on..</p>..<tcl>h
12c00 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65  d_puts ".<p>^The
12c10 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20   unary operator 
12c20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20  [Operator +] is 
12c30 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61  a no-op.  ^It ca
12c40 6e 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20  n be applied.to 
12c50 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73  strings, numbers
12c60 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20  , blobs or NULL 
12c70 61 6e 64 20 69 74 20 61 6c 77 61 79 73 20 72 65  and it always re
12c80 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77  turns a result.w
12c90 69 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ith the same val
12ca0 75 65 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e  ue as the operan
12cb0 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c  d.</p>"</tcl>..<
12cc0 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72  p>Note that ther
12cd0 65 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74  e are two variat
12ce0 69 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61  ions of the equa
12cf0 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c  ls and not equal
12d00 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45  s.operators.  ^E
12d10 71 75 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74  quals can be eit
12d20 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75  her..<tcl>.hd_pu
12d30 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d  ts "[Operator =]
12d40 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d   or [Operator ==
12d50 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61  ]..^The non-equa
12d60 6c 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  ls operator can 
12d70 62 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61  be either.[Opera
12d80 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72  tor !=] or [Oper
12d90 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d  ator {&lt;&gt;}]
12da0 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72  ..^The [Operator
12db0 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73   ||] operator is
12dc0 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22   \"concatenate\"
12dd0 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65   - it joins toge
12de0 74 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72  ther.the two str
12df0 69 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72  ings of its oper
12e00 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61  ands..^The opera
12e10 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d  tor [Operator %]
12e20 20 6f 75 74 70 75 74 73 20 74 68 65 20 76 61 6c   outputs the val
12e30 75 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a  ue of its left .
12e40 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69  operand modulo i
12e50 74 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  ts right operand
12e60 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72  .</p>..<p>^The r
12e70 65 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e  esult of any bin
12e80 61 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ary operator is 
12e90 65 69 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63  either a numeric
12ea0 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c   value or .NULL,
12eb0 20 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20   except for the 
12ec0 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f  [Operator ||] co
12ed0 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72  ncatenation oper
12ee0 61 74 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79  ator which alway
12ef0 73 20 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20  s .evaluates to 
12f00 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
12f10 20 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e   text value.</p>
12f20 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  "..hd_fragment {
12f30 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65  isisnot} {IS ope
12f40 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f  rator} {IS NOT o
12f50 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74  perator}..hd_put
12f60 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72  s "<p>^The [Oper
12f70 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70  ator IS] and [Op
12f80 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d  erator {IS NOT}]
12f90 20 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a   operators work.
12fa0 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d  like [Operator =
12fb0 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20  ] and [Operator 
12fc0 21 3d 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20  !=] except when 
12fd0 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74  one or both of t
12fe0 68 65 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he.operands are 
12ff0 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63  NULL. ^In this c
13000 61 73 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65  ase, if both ope
13010 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20  rands are NULL, 
13020 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72  then the.IS oper
13030 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74  ator evaluates t
13040 6f 20 31 20 28 74 72 75 65 29 20 61 6e 64 20 74  o 1 (true) and t
13050 68 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  he IS NOT operat
13060 6f 72 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20  or evaluates.to 
13070 30 20 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f  0 (false). ^If o
13080 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
13090 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72  LL and the other
130a0 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68   is not, then th
130b0 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76  e.IS operator ev
130c0 61 6c 75 61 74 65 73 20 74 6f 20 30 20 28 66 61  aluates to 0 (fa
130d0 6c 73 65 29 20 61 6e 64 20 74 68 65 20 49 53 20  lse) and the IS 
130e0 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20  NOT operator is 
130f0 31 20 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73  1 (true)..^It is
13100 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f   not possible fo
13110 72 20 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f  r an IS or IS NO
13120 54 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  T expression to 
13130 65 76 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c  evaluate to NULL
13140 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70  ..^Operators [Op
13150 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b  erator IS] and [
13160 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54  Operator {IS NOT
13170 7d 5d 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  }] have the same
13180 20 0a 70 72 65 63 65 64 65 6e 63 65 20 61 73 20   .precedence as 
13190 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a  [Operator =]."..
131a0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
131b0 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72   litvalue {liter
131c0 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a  al value}</tcl>.
131d0 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75  <h3>Literal Valu
131e0 65 73 20 28 43 6f 6e 73 74 61 6e 74 73 29 3c 2f  es (Constants)</
131f0 68 33 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61  h3>.<p>.A litera
13200 6c 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e  l value represen
13210 74 73 20 61 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e  ts a constant..^
13220 4c 69 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d  Literal values m
13230 61 79 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20  ay be integers, 
13240 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
13250 75 6d 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c  umbers, strings,
13260 0a 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73  .BLOBs, or NULLs
13270 2e 0a 3c 70 3e 0a 54 68 65 20 73 79 6e 74 61 78  ..<p>.The syntax
13280 20 66 6f 72 20 69 6e 74 65 67 65 72 20 61 6e 64   for integer and
13290 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
132a0 6c 69 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63  literals (collec
132b0 74 69 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20  tively."numeric 
132c0 6c 69 74 65 72 61 6c 73 22 29 20 69 73 20 73 68  literals") is sh
132d0 6f 77 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f  own by the follo
132e0 77 69 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70  wing diagram:</p
132f0 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
13300 61 67 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69  agram numeric-li
13310 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  teral</tcl>..<p>
13320 0a 5e 28 49 66 20 61 20 6e 75 6d 65 72 69 63 20  .^(If a numeric 
13330 6c 69 74 65 72 61 6c 20 68 61 73 20 61 20 64 65  literal has a de
13340 63 69 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61  cimal point or a
13350 6e 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e  n exponentiation
13360 0a 63 6c 61 75 73 65 20 6f 72 20 69 66 20 69 74  .clause or if it
13370 73 20 6d 61 67 6e 69 74 75 64 65 20 69 73 20 6c  s magnitude is l
13380 65 73 73 20 74 68 61 6e 20 2d 39 32 32 33 33 37  ess than -922337
13390 32 30 33 36 38 35 34 37 37 35 38 30 38 20 6f 72  2036854775808 or
133a0 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 39 32  .greater than 92
133b0 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
133c0 37 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20  7, then it is a 
133d0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
133e0 69 74 65 72 61 6c 2e 0a 4f 74 68 65 72 77 69 73  iteral..Otherwis
133f0 65 20 69 73 20 69 74 20 69 73 20 61 6e 20 20 69  e is it is an  i
13400 6e 74 65 67 65 72 20 6c 69 74 65 72 61 6c 2e 29  nteger literal.)
13410 5e 0a 5e 54 68 65 20 22 45 22 20 63 68 61 72 61  ^.^The "E" chara
13420 63 74 65 72 20 74 68 61 74 20 62 65 67 69 6e 73  cter that begins
13430 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 69 61 74   the exponentiat
13440 69 6f 6e 0a 63 6c 61 75 73 65 20 6f 66 20 61 20  ion.clause of a 
13450 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
13460 69 74 65 72 61 6c 20 63 61 6e 20 62 65 20 65 69  iteral can be ei
13470 74 68 65 72 20 75 70 70 65 72 20 6f 72 20 6c 6f  ther upper or lo
13480 77 65 72 20 63 61 73 65 2e 0a 5e 28 54 68 65 20  wer case..^(The 
13490 22 2e 22 20 63 68 61 72 61 63 74 65 72 20 69 73  "." character is
134a0 20 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73   always used .as
134b0 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
134c0 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c  nt even if the l
134d0 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70  ocale setting sp
134e0 65 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a  ecifies "," for.
134f0 74 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20  this role - the 
13500 75 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74  use of "," for t
13510 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
13520 20 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e   would result in
13530 0a 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67  .syntactic ambig
13540 75 69 74 79 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  uity.)^..<tcl>hd
13550 5f 66 72 61 67 6d 65 6e 74 20 68 65 78 69 6e 74  _fragment hexint
13560 20 7b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e   {hexadecimal in
13570 74 65 67 65 72 20 6c 69 74 65 72 61 6c 73 7d 20  teger literals} 
13580 7b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  {hexadecimal int
13590 65 67 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  egers}</tcl>.<p>
135a0 5e 48 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  ^Hexadecimal int
135b0 65 67 65 72 20 6c 69 74 65 72 61 6c 73 20 66 6f  eger literals fo
135c0 6c 6c 6f 77 20 74 68 65 20 43 2d 6c 61 6e 67 75  llow the C-langu
135d0 61 67 65 20 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a  age notation of.
135e0 22 30 78 22 20 6f 72 20 22 30 58 22 20 66 6f 6c  "0x" or "0X" fol
135f0 6c 6f 77 65 64 20 62 79 20 68 65 78 61 64 65 63  lowed by hexadec
13600 69 6d 61 6c 20 64 69 67 69 74 73 2e 0a 5e 46 6f  imal digits..^Fo
13610 72 20 65 78 61 6d 70 6c 65 2c 20 30 78 31 32 33  r example, 0x123
13620 34 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  4 means the same
13630 20 61 73 20 34 36 36 30 0a 61 6e 64 20 30 78 38   as 4660.and 0x8
13640 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 20  000000000000000 
13650 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61  means the same a
13660 73 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  s -9223372036854
13670 37 37 35 38 30 38 2e 0a 20 5e 28 48 65 78 61 64  775808.. ^(Hexad
13680 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c  ecimal integer l
13690 69 74 65 72 61 6c 73 20 61 72 65 20 69 6e 74 65  iterals are inte
136a0 72 70 72 65 74 65 64 20 61 73 20 36 34 2d 62 69  rpreted as 64-bi
136b0 74 0a 74 77 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65  t.two's-compleme
136c0 6e 74 20 69 6e 74 65 67 65 72 73 20 61 6e 64 20  nt integers and 
136d0 61 72 65 20 74 68 75 73 20 6c 69 6d 69 74 65 64  are thus limited
136e0 0a 74 6f 20 73 69 78 74 65 65 6e 20 73 69 67 6e  .to sixteen sign
136f0 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 20 6f  ificant digits o
13700 66 20 70 72 65 63 69 73 69 6f 6e 2e 29 5e 0a 53  f precision.)^.S
13710 75 70 70 6f 72 74 20 66 6f 72 20 68 65 78 61 64  upport for hexad
13720 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20  ecimal integers 
13730 77 61 73 20 61 64 64 65 64 20 74 6f 20 53 51 4c  was added to SQL
13740 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e  ite version 3.8.
13750 36 2e 0a 5e 46 6f 72 20 62 61 63 6b 77 61 72 64  6..^For backward
13760 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c  s compatibility,
13770 20 74 68 65 20 22 30 78 22 20 68 65 78 61 64 65   the "0x" hexade
13780 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 0a 6e 6f  cimal integer.no
13790 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  tation is only u
137a0 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 74 68 65  nderstood by the
137b0 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 70 61   SQL language pa
137c0 72 73 65 72 2c 20 6e 6f 74 20 62 79 20 74 68 65  rser, not by the
137d0 0a 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e  .type conversion
137e0 73 20 72 6f 75 74 69 6e 65 73 2e 0a 5e 28 53 74  s routines..^(St
137f0 72 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 74  ring variables t
13800 68 61 74 0a 63 6f 6e 74 61 69 6e 20 74 65 78 74  hat.contain text
13810 20 66 6f 72 6d 61 74 74 65 64 20 6c 69 6b 65 20   formatted like 
13820 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
13830 67 65 72 73 20 61 72 65 20 6e 6f 74 0a 69 6e 74  gers are not.int
13840 65 72 70 72 65 74 65 64 20 61 73 20 68 65 78 61  erpreted as hexa
13850 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73  decimal integers
13860 20 77 68 65 6e 20 63 6f 65 72 63 69 6e 67 20 74   when coercing t
13870 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0a  he string value.
13880 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
13890 64 75 65 20 74 6f 20 61 20 5b 43 41 53 54 20 65  due to a [CAST e
138a0 78 70 72 65 73 73 69 6f 6e 5d 20 6f 72 20 66 6f  xpression] or fo
138b0 72 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69  r a [column affi
138c0 6e 69 74 79 5d 0a 74 72 61 6e 73 66 6f 72 6d 61  nity].transforma
138d0 74 69 6f 6e 20 6f 72 20 70 72 69 6f 72 20 74 6f  tion or prior to
138e0 20 70 65 72 66 6f 72 6d 69 6e 67 20 61 20 6e 75   performing a nu
138f0 6d 65 72 69 63 20 6f 70 65 72 61 74 69 6f 6e 20  meric operation 
13900 6f 72 20 66 6f 72 0a 61 6e 79 20 6f 74 68 65 72  or for.any other
13910 20 72 75 6e 2d 74 69 6d 65 20 63 6f 6e 76 65 72   run-time conver
13920 73 69 6f 6e 73 2e 29 5e 20 20 5e 28 57 68 65 6e  sions.)^  ^(When
13930 20 63 6f 65 72 63 69 6e 67 20 61 0a 73 74 72 69   coercing a.stri
13940 6e 67 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  ng value in the 
13950 66 6f 72 6d 61 74 20 6f 66 20 61 20 68 65 78 61  format of a hexa
13960 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20  decimal integer 
13970 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a  into an integer.
13980 76 61 6c 75 65 2c 20 74 68 65 20 63 6f 6e 76 65  value, the conve
13990 72 73 69 6f 6e 20 70 72 6f 63 65 73 73 20 73 74  rsion process st
139a0 6f 70 73 20 77 68 65 6e 20 74 68 65 20 27 78 27  ops when the 'x'
139b0 20 63 68 61 72 61 63 74 65 72 20 69 73 20 73 65   character is se
139c0 65 6e 0a 73 6f 20 74 68 65 20 72 65 73 75 6c 74  en.so the result
139d0 69 6e 67 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ing integer valu
139e0 65 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f  e is always zero
139f0 2e 29 5e 0a 5e 28 53 51 4c 69 74 65 20 6f 6e 6c  .)^.^(SQLite onl
13a00 79 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68  y understands th
13a10 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e  e hexadecimal in
13a20 74 65 67 65 72 20 6e 6f 74 61 74 69 6f 6e 20 77  teger notation w
13a30 68 65 6e 20 69 74 0a 61 70 70 65 61 72 73 20 69  hen it.appears i
13a40 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
13a50 65 6e 74 20 74 65 78 74 2c 20 6e 6f 74 20 77 68  ent text, not wh
13a60 65 6e 20 69 74 20 61 70 70 65 61 72 73 20 61 73  en it appears as
13a70 0a 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6e  .part of the con
13a80 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61  tent of the data
13a90 62 61 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20  base.)^..<p> ^A 
13aa0 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20  string constant 
13ab0 69 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63  is formed by enc
13ac0 6c 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e  losing the.strin
13ad0 67 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74  g in single quot
13ae0 65 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67  es (').  ^A sing
13af0 6c 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20  le quote within 
13b00 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62  the string can.b
13b10 65 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74  e encoded by put
13b20 74 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20  ting two single 
13b30 71 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20  quotes in a row 
13b40 2d 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a  - as in Pascal..
13b50 43 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73 20  C-style escapes 
13b60 75 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c  using the backsl
13b70 61 73 68 20 63 68 61 72 61 63 74 65 72 20 61 72  ash character ar
13b80 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  e not supported 
13b90 62 65 63 61 75 73 65 0a 74 68 65 79 20 61 72 65  because.they are
13ba0 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51   not standard SQ
13bb0 4c 2e 0a 0a 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69  L...<p> ^BLOB li
13bc0 74 65 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e  terals are strin
13bd0 67 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61  g literals conta
13be0 69 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61  ining hexadecima
13bf0 6c 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65  l data and.prece
13c00 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  ded by a single 
13c10 22 78 22 20 6f 72 20 22 58 22 20 63 68 61 72 61  "x" or "X" chara
13c20 63 74 65 72 2e 20 20 5e 28 45 78 61 6d 70 6c 65  cter.  ^(Example
13c30 3a 20 58 27 35 33 35 31 34 43 36 39 37 34 36 35  : X'53514C697465
13c40 27 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65  ')^..<p>.^A lite
13c50 72 61 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c  ral value can al
13c60 73 6f 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20  so be the token 
13c70 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74  "NULL"..</p>..<t
13c80 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76  cl>hd_fragment v
13c90 61 72 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65  arparam paramete
13ca0 72 20 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f  r parameters {bo
13cb0 75 6e 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b  und parameter} {
13cc0 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73  bound parameters
13cd0 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61  }</tcl>.<h3>Para
13ce0 6d 65 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a  meters</h3>.<p>.
13cf0 41 20 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20  A "variable" or 
13d00 22 70 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65  "parameter" toke
13d10 6e 0a 73 70 65 63 69 66 69 65 73 20 61 20 70 6c  n.specifies a pl
13d20 61 63 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65  aceholder in the
13d30 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20   expression for 
13d40 61 20 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73  a .value that is
13d50 20 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75   filled in at ru
13d60 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a  ntime using the.
13d70 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c  [sqlite3_bind_bl
13d80 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62  ob() | sqlite3_b
13d90 69 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66  ind()] family of
13da0 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
13db0 73 2e 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61  s..Parameters ca
13dc0 6e 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66  n take several f
13dd0 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  orms:.</p>..<blo
13de0 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e  ckquote>.<table>
13df0 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
13e00 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
13e10 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e  top"><b>?</b><i>
13e20 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  NNN</i></td><td 
13e30 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
13e40 0a 3c 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f  .<td>^(A questio
13e50 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20  n mark followed 
13e60 62 79 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e  by a number <i>N
13e70 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73  NN</i> holds a s
13e80 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d  pot for the.NNN-
13e90 74 68 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e  th parameter.  N
13ea0 4e 4e 20 6d 75 73 74 20 62 65 20 62 65 74 77 65  NN must be betwe
13eb0 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45  en 1 and [SQLITE
13ec0 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
13ed0 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c  MBER].)^.</td>.<
13ee0 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
13ef0 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
13f00 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62  gn="top"><b>?</b
13f10 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
13f20 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
13f30 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  A question mark 
13f40 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c  that is not foll
13f50 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72  owed by a number
13f60 20 63 72 65 61 74 65 73 20 61 20 70 61 72 61 6d   creates a param
13f70 65 74 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62  eter.with a numb
13f80 65 72 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74  er one greater t
13f90 68 61 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20  han the largest 
13fa0 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
13fb0 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65   already assigne
13fc0 64 2e 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e  d..^If this mean
13fd0 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  s the parameter 
13fe0 6e 75 6d 62 65 72 20 69 73 20 67 72 65 61 74 65  number is greate
13ff0 72 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d  r than.[SQLITE_M
14000 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
14010 45 52 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ER], it is an er
14020 72 6f 72 2e 0a 54 68 69 73 20 70 61 72 61 6d 65  ror..This parame
14030 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20 70 72  ter format is pr
14040 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61  ovided for compa
14050 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74  tibility with ot
14060 68 65 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67  her database.eng
14070 69 6e 65 73 2e 20 20 42 75 74 20 62 65 63 61 75  ines.  But becau
14080 73 65 20 69 74 20 69 73 20 65 61 73 79 20 74 6f  se it is easy to
14090 20 6d 69 73 63 6f 75 6e 74 20 74 68 65 20 71 75   miscount the qu
140a0 65 73 74 69 6f 6e 20 6d 61 72 6b 73 2c 20 74 68  estion marks, th
140b0 65 0a 75 73 65 20 6f 66 20 74 68 69 73 20 70 61  e.use of this pa
140c0 72 61 6d 65 74 65 72 20 66 6f 72 6d 61 74 20 69  rameter format i
140d0 73 20 64 69 73 63 6f 75 72 61 67 65 64 2e 20 20  s discouraged.  
140e0 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20  Programmers are 
140f0 65 6e 63 6f 75 72 61 67 65 64 0a 74 6f 20 75 73  encouraged.to us
14100 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 79 6d  e one of the sym
14110 62 6f 6c 69 63 20 66 6f 72 6d 61 74 73 20 62 65  bolic formats be
14120 6c 6f 77 20 6f 72 20 74 68 65 20 3f 4e 4e 4e 20  low or the ?NNN 
14130 66 6f 72 6d 61 74 20 61 62 6f 76 65 20 69 6e 73  format above ins
14140 74 65 61 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72  tead..</td>.</tr
14150 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
14160 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
14170 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69  "top"><b>:</b><i
14180 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  >AAAA</i></td><t
14190 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
141a0 64 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20  d>.<td>^A colon 
141b0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69  followed by an i
141c0 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68  dentifier name h
141d0 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20  olds a spot for 
141e0 61 20 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64  a .[sqlite3_bind
141f0 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c  _parameter_name|
14200 6e 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 5d  named parameter]
14210 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 3a   with the name :
14220 41 41 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20  AAAA.  .^(Named 
14230 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 61  parameters are a
14240 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54 68  lso numbered. Th
14250 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65  e number assigne
14260 64 20 69 73 20 6f 6e 65 20 67 72 65 61 74 65 72  d is one greater
14270 20 74 68 61 6e 0a 74 68 65 20 6c 61 72 67 65 73   than.the larges
14280 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  t parameter numb
14290 65 72 20 61 6c 72 65 61 64 79 20 61 73 73 69 67  er already assig
142a0 6e 65 64 2e 29 5e 20 5e 49 66 20 74 68 69 73 20  ned.)^ ^If this 
142b0 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65  means the parame
142c0 74 65 72 0a 77 6f 75 6c 64 20 62 65 20 61 73 73  ter.would be ass
142d0 69 67 6e 65 64 20 61 20 6e 75 6d 62 65 72 20 67  igned a number g
142e0 72 65 61 74 65 72 20 74 68 61 6e 20 5b 53 51 4c  reater than [SQL
142f0 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
14300 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a  _NUMBER], it is.
14310 61 6e 20 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f  an error. To avo
14320 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74  id confusion, it
14330 20 69 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69   is best to avoi
14340 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61  d mixing named a
14350 6e 64 20 6e 75 6d 62 65 72 65 64 0a 70 61 72 61  nd numbered.para
14360 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74  meters.</td>.</t
14370 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
14380 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
14390 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c  ="top"><b>@</b><
143a0 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c  i>AAAA</i></td><
143b0 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
143c0 74 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22  td>.<td>^An "at"
143d0 20 73 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63   sign works exac
143e0 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e  tly like a colon
143f0 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  , except that th
14400 65 20 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70 61  e name of.the pa
14410 72 61 6d 65 74 65 72 20 63 72 65 61 74 65 64 20  rameter created 
14420 69 73 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c  is @AAAA.</td>.<
14430 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
14440 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
14450 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62  gn="top"><b>$</b
14460 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
14470 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
14480 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c  </td>.<td>^A dol
14490 6c 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65  lar-sign followe
144a0 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69  d by an identifi
144b0 65 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c  er name also hol
144c0 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20  ds a spot for a 
144d0 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20  named.parameter 
144e0 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 24 41  with the name $A
144f0 41 41 41 2e 20 20 5e 28 54 68 65 20 69 64 65 6e  AAA.  ^(The iden
14500 74 69 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74  tifier name in t
14510 68 69 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63  his case can inc
14520 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65  lude.one or more
14530 20 6f 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20   occurrences of 
14540 22 3a 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69  "::" and a suffi
14550 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28  x enclosed in "(
14560 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67  ...)" containing
14570 0a 61 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c  .any text at all
14580 2e 29 5e 20 20 54 68 69 73 20 73 79 6e 74 61 78  .)^  This syntax
14590 20 69 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20   is the form of 
145a0 61 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20  a variable name 
145b0 69 6e 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77  in the.[http://w
145c0 77 77 2e 74 63 6c 2e 74 6b 2f 20 7c 20 54 63 6c  ww.tcl.tk/ | Tcl
145d0 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e   programming lan
145e0 67 75 61 67 65 5d 2e 20 20 54 68 65 20 70 72 65  guage].  The pre
145f0 73 65 6e 63 65 0a 6f 66 20 74 68 69 73 20 73 79  sence.of this sy
14600 6e 74 61 78 20 72 65 73 75 6c 74 73 20 66 72 6f  ntax results fro
14610 6d 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20  m the fact that 
14620 53 51 4c 69 74 65 20 69 73 20 72 65 61 6c 6c 79  SQLite is really
14630 20 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69   a .[Tcl extensi
14640 6f 6e 5d 20 74 68 61 74 20 68 61 73 20 65 73 63  on] that has esc
14650 61 70 65 64 20 69 6e 74 6f 20 74 68 65 20 77 69  aped into the wi
14660 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  ld.</td>.</tr>.<
14670 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
14680 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d  uote>..<p>^Param
14690 65 74 65 72 73 20 74 68 61 74 20 61 72 65 20 6e  eters that are n
146a0 6f 74 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75  ot assigned valu
146b0 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65  es using.[sqlite
146c0 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20  3_bind_blob() | 
146d0 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20  sqlite3_bind()] 
146e0 61 72 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e  are treated.as N
146f0 55 4c 4c 2e 20 20 54 68 65 20 5b 73 71 6c 69 74  ULL.  The [sqlit
14700 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
14710 72 5f 69 6e 64 65 78 28 29 5d 20 69 6e 74 65 72  r_index()] inter
14720 66 61 63 65 20 63 61 6e 20 62 65 20 75 73 65 64  face can be used
14730 0a 74 6f 20 74 72 61 6e 73 6c 61 74 65 20 61 20  .to translate a 
14740 73 79 6d 62 6f 6c 69 63 20 70 61 72 61 6d 65 74  symbolic paramet
14750 65 72 20 6e 61 6d 65 20 69 6e 74 6f 20 69 74 73  er name into its
14760 20 65 71 75 69 76 61 6c 65 6e 74 20 6e 75 6d 65   equivalent nume
14770 72 69 63 20 69 6e 64 65 78 2e 3c 2f 70 3e 0a 0a  ric index.</p>..
14780 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20  <p>^The maximum 
14790 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
147a0 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d 70 69   is set at compi
147b0 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65 20 5b  le-time by.the [
147c0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
147d0 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72  BLE_NUMBER] macr
147e0 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76 69 64  o.  ^(An individ
147f0 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20 63 6f  ual [database co
14800 6e 6e 65 63 74 69 6f 6e 5d 0a 44 20 63 61 6e 20  nnection].D can 
14810 72 65 64 75 63 65 20 69 74 73 20 6d 61 78 69 6d  reduce its maxim
14820 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  um parameter num
14830 62 65 72 20 62 65 6c 6f 77 20 74 68 65 20 63 6f  ber below the co
14840 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d  mpile-time maxim
14850 75 6d 0a 75 73 69 6e 67 20 74 68 65 20 5b 73 71  um.using the [sq
14860 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20  lite3_limit](D, 
14870 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41  [SQLITE_LIMIT_VA
14880 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e  RIABLE_NUMBER],.
14890 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 2e 29 5e  ..) interface.)^
148a0 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
148b0 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b  ragment like LIK
148c0 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c  E ESCAPE</tcl>.<
148d0 68 33 3e 54 68 65 20 4c 49 4b 45 20 61 6e 64 20  h3>The LIKE and 
148e0 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 73 3c 2f  GLOB operators</
148f0 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45  h3>.<p>^The LIKE
14900 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 61   operator does a
14910 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 69 6e   pattern matchin
14920 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54  g comparison. ^T
14930 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68  he operand.to th
14940 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 4c  e right of the L
14950 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e  IKE operator con
14960 74 61 69 6e 73 20 74 68 65 20 70 61 74 74 65 72  tains the patter
14970 6e 20 61 6e 64 20 74 68 65 20 6c 65 66 74 20 68  n and the left h
14980 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74  and.operand cont
14990 61 69 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20  ains the string 
149a0 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e 73 74  to match against
149b0 20 74 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c   the pattern...<
149c0 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41 20  tcl>hd_puts "^A 
149d0 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28  percent symbol (
149e0 5c 22 25 5c 22 29 20 69 6e 20 74 68 65 20 4c 49  \"%\") in the LI
149f0 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68  KE pattern match
14a00 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63 65 20  es any.sequence 
14a10 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  of zero or more 
14a20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
14a30 65 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75  e string.  ^An u
14a40 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22  nderscore.(\"_\"
14a50 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61  ) in the LIKE pa
14a60 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e  ttern matches an
14a70 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  y single charact
14a80 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69 6e 67  er in the.string
14a90 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65 72 20 63  .  ^(Any other c
14aa0 68 61 72 61 63 74 65 72 20 6d 61 74 63 68 65 73  haracter matches
14ab0 20 69 74 73 65 6c 66 20 6f 72 20 69 74 73 20 6c   itself or its l
14ac0 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a  ower/upper case.
14ad0 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e  equivalent (i.e.
14ae0 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76   case-insensitiv
14af0 65 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20 20  e matching).)^  
14b00 28 41 20 62 75 67 3a 20 5e 53 51 4c 69 74 65 20  (A bug: ^SQLite 
14b10 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73  only.understands
14b20 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73   upper/lower cas
14b30 65 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72  e for ASCII char
14b40 61 63 74 65 72 73 20 62 79 20 64 65 66 61 75 6c  acters by defaul
14b50 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70  t.  ^The.LIKE op
14b60 65 72 61 74 6f 72 20 69 73 20 63 61 73 65 20 73  erator is case s
14b70 65 6e 73 69 74 69 76 65 20 62 79 20 64 65 66 61  ensitive by defa
14b80 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64 65 20  ult for unicode 
14b90 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
14ba0 61 72 65 0a 62 65 79 6f 6e 64 20 74 68 65 20 41  are.beyond the A
14bb0 53 43 49 49 20 72 61 6e 67 65 2e 20 20 46 6f 72  SCII range.  For
14bc0 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65   example,.^the e
14bd0 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27  xpression <b>'a'
14be0 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b  &nbsp;LIKE&nbsp;
14bf0 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20  'A'</b>.is TRUE 
14c00 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27  but <b>'&aelig;'
14c10 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b  &nbsp;LIKE&nbsp;
14c20 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73  '&AElig;'</b> is
14c30 20 46 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74 63   FALSE.)<p>"</tc
14c40 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f  l>..<p>^If the o
14c50 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63  ptional ESCAPE c
14c60 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
14c70 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65  , then the expre
14c80 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20  ssion.following 
14c90 74 68 65 20 45 53 43 41 50 45 20 6b 65 79 77 6f  the ESCAPE keywo
14ca0 72 64 20 6d 75 73 74 20 65 76 61 6c 75 61 74 65  rd must evaluate
14cb0 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e   to a string con
14cc0 73 69 73 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e  sisting of.a sin
14cd0 67 6c 65 20 63 68 61 72 61 63 74 65 72 2e 20 5e  gle character. ^
14ce0 54 68 69 73 20 63 68 61 72 61 63 74 65 72 20 6d  This character m
14cf0 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68  ay be used in th
14d00 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74  e LIKE pattern.t
14d10 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61  o include litera
14d20 6c 20 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64  l percent or und
14d30 65 72 73 63 6f 72 65 20 63 68 61 72 61 63 74 65  erscore characte
14d40 72 73 2e 20 5e 54 68 65 20 65 73 63 61 70 65 0a  rs. ^The escape.
14d50 63 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77  character follow
14d60 65 64 20 62 79 20 61 20 70 65 72 63 65 6e 74 20  ed by a percent 
14d70 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64 65  symbol (%), unde
14d80 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20 61  rscore (_), or a
14d90 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63 65   second.instance
14da0 20 6f 66 20 74 68 65 20 65 73 63 61 70 65 20 63   of the escape c
14db0 68 61 72 61 63 74 65 72 20 69 74 73 65 6c 66 20  haracter itself 
14dc0 6d 61 74 63 68 65 73 20 61 0a 6c 69 74 65 72 61  matches a.litera
14dd0 6c 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  l percent symbol
14de0 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f 72  , underscore, or
14df0 20 61 20 73 69 6e 67 6c 65 20 65 73 63 61 70 65   a single escape
14e00 20 63 68 61 72 61 63 74 65 72 2c 0a 72 65 73 70   character,.resp
14e10 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54  ectively...<p>^T
14e20 68 65 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70  he infix LIKE op
14e30 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d  erator is implem
14e40 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
14e50 20 74 68 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e   the.application
14e60 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e  -defined SQL fun
14e70 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e  ctions [like(<i>
14e80 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d  Y</i>,<i>X</i>)]
14e90 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f   or.[like(<i>Y</
14ea0 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a  i>,<i>X</i>,<i>Z
14eb0 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a  </i>)]</a>.</p>.
14ec0 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70  .<p>^The LIKE op
14ed0 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 6d 61  erator can be ma
14ee0 64 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  de case sensitiv
14ef0 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 63 61 73  e using the.[cas
14f00 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65  e_sensitive_like
14f10 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c   pragma].</p>..<
14f20 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
14f30 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a  glob GLOB</tcl>.
14f40 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65  <p>^The GLOB ope
14f50 72 61 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72  rator is similar
14f60 20 74 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65   to LIKE but use
14f70 73 20 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20  s the Unix.file 
14f80 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20  globbing syntax 
14f90 66 6f 72 20 69 74 73 20 77 69 6c 64 63 61 72 64  for its wildcard
14fa0 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20  s.  ^Also, GLOB 
14fb0 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76  is case.sensitiv
14fc0 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20  e, unlike LIKE. 
14fd0 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20   ^Both GLOB and 
14fe0 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63  LIKE may be prec
14ff0 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20  eded by.the NOT 
15000 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72  keyword to inver
15010 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74  t the sense of t
15020 68 65 20 74 65 73 74 2e 20 20 5e 54 68 65 20 69  he test.  ^The i
15030 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61  nfix GLOB .opera
15040 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  tor is implement
15050 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
15060 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62  e function.[glob
15070 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
15080 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20  i>)] and can be 
15090 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65 72  modified by over
150a0 72 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63  riding.that func
150b0 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  tion.</p>..<tcl>
150c0 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65  hd_fragment rege
150d0 78 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a  xp REGEXP</tcl>.
150e0 3c 70 3e 5e 54 68 65 20 52 45 47 45 58 50 20 6f  <p>^The REGEXP o
150f0 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65  perator is a spe
15100 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  cial syntax for 
15110 74 68 65 20 72 65 67 65 78 70 28 29 0a 75 73 65  the regexp().use
15120 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f  r function.  ^No
15130 20 72 65 67 65 78 70 28 29 20 75 73 65 72 20 66   regexp() user f
15140 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
15150 65 64 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e  ed by default.an
15160 64 20 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20  d so use of the 
15170 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20  REGEXP operator 
15180 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65  will normally re
15190 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72  sult in an.error
151a0 20 6d 65 73 73 61 67 65 2e 20 20 5e 49 66 20 61   message.  ^If a
151b0 6e 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  n [application-d
151c0 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74  efined SQL funct
151d0 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67 65  ion] named "rege
151e0 78 70 22 0a 69 73 20 61 64 64 65 64 20 61 74 20  xp".is added at 
151f0 72 75 6e 2d 74 69 6d 65 2c 20 74 68 65 6e 20 74  run-time, then t
15200 68 65 20 22 3c 69 3e 58 3c 2f 69 3e 20 52 45 47  he "<i>X</i> REG
15210 45 58 50 20 3c 69 3e 59 3c 2f 69 3e 22 20 6f 70  EXP <i>Y</i>" op
15220 65 72 61 74 6f 72 20 77 69 6c 6c 0a 62 65 20 69  erator will.be i
15230 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
15240 63 61 6c 6c 20 74 6f 20 22 72 65 67 65 78 70 28  call to "regexp(
15250 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
15260 3e 29 22 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  >)".</p>..<tcl>h
15270 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68  d_fragment match
15280 20 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e   MATCH</tcl>.<p>
15290 5e 54 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61  ^The MATCH opera
152a0 74 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c  tor is a special
152b0 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20   syntax for the 
152c0 6d 61 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74  match().applicat
152d0 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ion-defined func
152e0 74 69 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61  tion.  ^The defa
152f0 75 6c 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63  ult match() func
15300 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tion implementat
15310 69 6f 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78  ion.raises an ex
15320 63 65 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e  ception and is n
15330 6f 74 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c  ot really useful
15340 20 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e   for anything..^
15350 42 75 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63  But extensions c
15360 61 6e 20 6f 76 65 72 72 69 64 65 20 74 68 65 20  an override the 
15370 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e  match() function
15380 20 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66   with more.helpf
15390 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c  ul logic.</p>..<
153a0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
153b0 62 65 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c  between BETWEEN<
153c0 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45  /tcl>.<h3>The BE
153d0 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f  TWEEN operator</
153e0 68 33 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54  h3>.<p>^(The BET
153f0 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73  WEEN operator is
15400 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76   logically equiv
15410 61 6c 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20  alent to a pair 
15420 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a  of comparisons..
15430 22 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54  "<i>x</i> <b>BET
15440 57 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69  WEEN</b> <i>y</i
15450 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e  > <b>AND</b> <i>
15460 7a 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76  z</i>" is .equiv
15470 61 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c  alent to ."<i>x<
15480 2f 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c  /i><b>&gt;=</b><
15490 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f  i>y</i> <b>AND</
154a0 62 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c  b> <i>x</i><b>&l
154b0 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22  t;=</b><i>z</i>"
154c0 20 65 78 63 65 70 74 0a 74 68 61 74 20 77 69 74   except.that wit
154d0 68 20 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c  h BETWEEN, the <
154e0 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69  i>x</i> expressi
154f0 6f 6e 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75  on is only evalu
15500 61 74 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68  ated once.)^.^Th
15510 65 20 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20  e precedence of 
15520 74 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72  the BETWEEN oper
15530 61 74 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65  ator is the same
15540 20 61 73 20 74 68 65 20 70 72 65 63 65 64 65 6e   as the preceden
15550 63 65 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20  ce.as operators 
15560 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62  <b>==</b> and <b
15570 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c  >!=</b> and <b>L
15580 49 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75  IKE</b> and grou
15590 70 73 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  ps left to right
155a0 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
155b0 65 6e 74 20 63 61 73 65 20 7b 43 41 53 45 20 65  ent case {CASE e
155c0 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e  xpression}</tcl>
155d0 0a 3c 68 33 3e 54 68 65 20 43 41 53 45 20 65 78  .<h3>The CASE ex
155e0 70 72 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70  pression</h3>.<p
155f0 3e 41 20 43 41 53 45 20 65 78 70 72 65 73 73 69  >A CASE expressi
15600 6f 6e 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65  on serves a role
15610 20 73 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54   similar to IF-T
15620 48 45 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65  HEN-ELSE in othe
15630 72 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61  r.programming la
15640 6e 67 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54  nguages.  ..<p>T
15650 68 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72  he optional expr
15660 65 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75  ession that occu
15670 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68  rs in between th
15680 65 20 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61  e CASE keyword a
15690 6e 64 20 74 68 65 0a 66 69 72 73 74 20 57 48 45  nd the.first WHE
156a0 4e 20 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c  N keyword is cal
156b0 6c 65 64 20 74 68 65 20 22 62 61 73 65 22 20 65  led the "base" e
156c0 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72  xpression. ^Ther
156d0 65 20 61 72 65 20 74 77 6f 20 62 61 73 69 63 20  e are two basic 
156e0 66 6f 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53  forms.of the CAS
156f0 45 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68  E expression: th
15700 6f 73 65 20 77 69 74 68 20 61 20 62 61 73 65 20  ose with a base 
15710 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74  expression and t
15720 68 6f 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c  hose without...<
15730 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74  p>^In a CASE wit
15740 68 6f 75 74 20 61 20 62 61 73 65 20 65 78 70 72  hout a base expr
15750 65 73 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45  ession, each WHE
15760 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  N expression is 
15770 65 76 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68  evaluated.and th
15780 65 20 72 65 73 75 6c 74 20 74 72 65 61 74 65 64  e result treated
15790 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73   as a boolean, s
157a0 74 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 65  tarting with the
157b0 20 6c 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f   leftmost and co
157c0 6e 74 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20  ntinuing.to the 
157d0 72 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75  right. ^The resu
157e0 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65  lt of the CASE e
157f0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65  xpression is the
15800 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74   evaluation of t
15810 68 65 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69  he THEN.expressi
15820 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  on that correspo
15830 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nds to the first
15840 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
15850 20 74 68 61 74 20 65 76 61 6c 75 61 74 65 73 20   that evaluates 
15860 74 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66  to.true. ^Or, if
15870 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45   none of the WHE
15880 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  N expressions ev
15890 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20  aluate to true, 
158a0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76  the result of.ev
158b0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53  aluating the ELS
158c0 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66  E expression, if
158d0 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20   any. ^If there 
158e0 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65  is no ELSE expre
158f0 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f  ssion and.none o
15900 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65  f the WHEN expre
15910 73 73 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c  ssions are true,
15920 20 74 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c   then the overal
15930 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  l result is NULL
15940 2e 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65  ...<p>^A NULL re
15950 73 75 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72  sult is consider
15960 65 64 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65  ed untrue when e
15970 76 61 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74  valuating WHEN t
15980 65 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  erms...<p>^In a 
15990 43 41 53 45 20 77 69 74 68 20 61 20 62 61 73 65  CASE with a base
159a0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65   expression, the
159b0 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
159c0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75   is evaluated ju
159d0 73 74 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20  st.once and the 
159e0 72 65 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72  result is compar
159f0 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 65  ed against the e
15a00 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63  valuation of eac
15a10 68 20 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69  h WHEN .expressi
15a20 6f 6e 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  on from left to 
15a30 72 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75  right. ^The resu
15a40 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65  lt of the CASE e
15a50 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65  xpression is the
15a60 20 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20   .evaluation of 
15a70 74 68 65 20 54 48 45 4e 20 65 78 70 72 65 73 73  the THEN express
15a80 69 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70  ion that corresp
15a90 6f 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73  onds to the firs
15aa0 74 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  t WHEN.expressio
15ab0 6e 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  n for which the 
15ac0 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
15ad0 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65  ue. ^Or, if none
15ae0 20 6f 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70   of the WHEN.exp
15af0 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74  ressions evaluat
15b00 65 20 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75  e to a value equ
15b10 61 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65  al to the base e
15b20 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72  xpression, the r
15b30 65 73 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74  esult.of evaluat
15b40 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70  ing the ELSE exp
15b50 72 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e  ression, if any.
15b60 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f   ^If there is no
15b70 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
15b80 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65   and.none of the
15b90 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
15ba0 73 20 70 72 6f 64 75 63 65 20 61 20 72 65 73 75  s produce a resu
15bb0 6c 74 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  lt equal to the 
15bc0 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  base expression,
15bd0 0a 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73  .the overall res
15be0 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70  ult is NULL...<p
15bf0 3e 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  >^When comparing
15c00 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69   a base expressi
15c10 6f 6e 20 61 67 61 69 6e 73 74 20 61 20 57 48 45  on against a WHE
15c20 4e 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68  N expression, th
15c30 65 20 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67  e same.collating
15c40 20 73 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e   sequence, affin
15c50 69 74 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61  ity, and NULL-ha
15c60 6e 64 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70  ndling rules app
15c70 6c 79 20 61 73 20 69 66 20 74 68 65 0a 62 61 73  ly as if the.bas
15c80 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  e expression and
15c90 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
15ca0 20 61 72 65 20 72 65 73 70 65 63 74 69 76 65 6c   are respectivel
15cb0 79 20 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a  y the left- and.
15cc0 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
15cd0 6e 64 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c  nds of an <big><
15ce0 62 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70  b>=</b></big> op
15cf0 65 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20  erator.</p> ^If 
15d00 74 68 65 20 62 61 73 65 20 0a 65 78 70 72 65 73  the base .expres
15d10 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65  sion is NULL the
15d20 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
15d30 74 68 65 20 43 41 53 45 20 69 73 20 61 6c 77 61  the CASE is alwa
15d40 79 73 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f  ys the result .o
15d50 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
15d60 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
15d70 20 69 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f   if it exists, o
15d80 72 20 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65  r NULL if it doe
15d90 73 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68  s not...<p>^Both
15da0 20 66 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41   forms of the CA
15db0 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73  SE expression us
15dc0 65 20 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74  e lazy, or short
15dd0 2d 63 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75  -circuit, .evalu
15de0 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65  ation...<p>^(The
15df0 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65   only difference
15e00 20 62 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c   between the fol
15e10 6c 6f 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20  lowing two CASE 
15e20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74  expressions is t
15e30 68 61 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69  hat .the <i>x</i
15e40 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  > expression is 
15e50 65 76 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c  evaluated exactl
15e60 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69  y once in the fi
15e70 72 73 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20  rst example but 
15e80 0a 6d 69 67 68 74 20 62 65 20 65 76 61 6c 75 61  .might be evalua
15e90 74 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d  ted multiple tim
15ea0 65 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64  es in the second
15eb0 3a 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69  :..<ul><pre>.<li
15ec0 3e 43 41 53 45 20 78 20 57 48 45 4e 20 77 31 20  >CASE x WHEN w1 
15ed0 54 48 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20  THEN r1 WHEN w2 
15ee0 54 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20  THEN r2 ELSE r3 
15ef0 45 4e 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45  END.<li>CASE WHE
15f00 4e 20 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57  N x=w1 THEN r1 W
15f10 48 45 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32  HEN x=w2 THEN r2
15f20 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70   ELSE r3 END.</p
15f30 72 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63  re></ul>)^...<tc
15f40 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e  l>hd_fragment in
15f50 5f 6f 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72  _op {IN operator
15f60 7d 20 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  } {NOT IN operat
15f70 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  or}</tcl>.<h3>Th
15f80 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20  e IN and NOT IN 
15f90 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c  operators</h3>.<
15fa0 70 3e 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f  p>^The IN and NO
15fb0 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74  T IN operators t
15fc0 61 6b 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61  ake a single sca
15fd0 6c 61 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74  lar operand on t
15fe0 68 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65  he.left and a ve
15ff0 63 74 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20  ctor operand on 
16000 74 68 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64  the right.formed
16010 20 62 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20   by an explicit 
16020 6c 69 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20  list of zero or 
16030 6d 6f 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20  more scalars or 
16040 62 79 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62  by a .single sub
16050 71 75 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65  query..^When the
16060 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f   right operand o
16070 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
16080 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  N operator is a 
16090 73 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75  subquery, the.su
160a0 62 71 75 65 72 79 20 6d 75 73 74 20 68 61 76 65  bquery must have
160b0 20 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74   a single result
160c0 20 63 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74   column..^When t
160d0 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  he right operand
160e0 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74   is an empty set
160f0 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  , the result of 
16100 49 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20  IN is false and 
16110 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f  the.result of NO
16120 54 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65  T IN is true, re
16130 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
16140 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64  left operand and
16150 20 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66   even if the.lef
16160 74 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  t operand is NUL
16170 4c 2e 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20  L..^(The result 
16180 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20  of an IN or NOT 
16190 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64  IN operator is d
161a0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
161b0 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69   following.matri
161c0 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61  x:..<center>.<ta
161d0 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  ble border=1>.<t
161e0 72 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72  r>.<th>Left oper
161f0 61 6e 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a  and <br>is NULL.
16200 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e  <th>Right operan
16210 64 20 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e  d <br>contains N
16220 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70  ULL.<th>Right op
16230 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20  erand <br>is an 
16240 65 6d 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65  empty set.<th>Le
16250 66 74 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64  ft operand found
16260 20 3c 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68   <br>within righ
16270 74 20 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65  t operand.<th>Re
16280 73 75 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f  sult of <br>IN o
16290 70 65 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75  perator.<th>Resu
162a0 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e  lt of <br>NOT IN
162b0 20 6f 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c   operator.<tr>.<
162c0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
162d0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
162e0 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
162f0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
16300 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16310 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
16320 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a  ="center">false.
16330 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16340 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64  r">true.<tr>.<td
16350 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16360 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
16370 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16380 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16390 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
163a0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
163b0 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
163c0 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20  nter">false.<td 
163d0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74  align="center">t
163e0 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  rue.<tr>.<td ali
163f0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
16400 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16410 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65  ">does not matte
16420 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  r.<td align="cen
16430 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
16440 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c  n="center">yes.<
16450 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16460 22 3e 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e  ">true.<td align
16470 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a  ="center">false.
16480 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
16490 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
164a0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
164b0 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
164c0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
164d0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
164e0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
164f0 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d  >NULL.<td align=
16500 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74  "center">NULL.<t
16510 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
16520 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c  nter">yes.<td al
16530 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65  ign="center">doe
16540 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64  s not matter.<td
16550 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16560 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16570 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d  nter">does not m
16580 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d  atter.<td align=
16590 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74  "center">NULL.<t
165a0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
165b0 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  >NULL.</table>.<
165c0 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e  /center>)^..<p>^
165d0 4e 6f 74 65 20 74 68 61 74 20 53 51 4c 69 74 65  Note that SQLite
165e0 20 61 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65   allows the pare
165f0 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f  nthesized list o
16600 66 20 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20  f scalar values 
16610 6f 6e 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e  on.the right-han
16620 64 20 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20  d side of an IN 
16630 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  or NOT IN operat
16640 6f 72 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74  or to be an empt
16650 79 20 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20  y list but.most 
16660 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
16670 73 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  se database engi
16680 6e 65 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39  nes and the SQL9
16690 32 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69  2 standard requi
166a0 72 65 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63  re.the list to c
166b0 6f 6e 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20  ontain at least 
166c0 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e  one element.</p>
166d0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
166e0 6e 74 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53  nt in_op {EXISTS
166f0 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20   operator} {NOT 
16700 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d  EXISTS operator}
16710 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45  </tcl>.<h3>The E
16720 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f  XISTS operator</
16730 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49  h3>..<p>^The EXI
16740 53 54 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77  STS operator alw
16750 61 79 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ays evaluates to
16760 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65   one of the inte
16770 67 65 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e  ger values 0 .an
16780 64 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69  d 1. ^If executi
16790 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  ng the SELECT st
167a0 61 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65  atement specifie
167b0 64 20 61 73 20 74 68 65 20 72 69 67 68 74 2d 68  d as the right-h
167c0 61 6e 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20  and .operand of 
167d0 74 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61  the EXISTS opera
167e0 74 6f 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e  tor would return
167f0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77   one or more row
16800 73 2c 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53  s, then the.EXIS
16810 54 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c  TS operator eval
16820 75 61 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20  uates to 1. ^If 
16830 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45  executing the SE
16840 4c 45 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72  LECT would retur
16850 6e 0a 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c  n.no rows at all
16860 2c 20 74 68 65 6e 20 74 68 65 20 45 58 49 53 54  , then the EXIST
16870 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
16880 61 74 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e  ates to 0. ..<p>
16890 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  ^The number of c
168a0 6f 6c 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72  olumns in each r
168b0 6f 77 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ow returned by t
168c0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
168d0 65 6e 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64  ent.(if any) and
168e0 20 74 68 65 20 73 70 65 63 69 66 69 63 20 76 61   the specific va
168f0 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20 68 61  lues returned ha
16900 76 65 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20  ve no effect on 
16910 74 68 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74  the results.of t
16920 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
16930 6f 72 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c  or. ^In particul
16940 61 72 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e  ar, rows contain
16950 69 6e 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  ing NULL values 
16960 61 72 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20  are.not handled 
16970 61 6e 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20  any differently 
16980 66 72 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75  from rows withou
16990 74 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a  t NULL values...
169a0 3c 68 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75  <h3>Scalar Subqu
169b0 65 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  eries</h3>..<p>^
169c0 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  A [SELECT] state
169d0 6d 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e  ment enclosed in
169e0 20 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79   parentheses may
169f0 20 61 70 70 65 61 72 20 61 73 20 61 20 73 63 61   appear as a sca
16a00 6c 61 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41  lar.quantity. ^A
16a10 20 5b 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61   [SELECT] used a
16a20 73 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74  s a scalar quant
16a30 69 74 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20  ity must return 
16a40 61 20 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74  a result set.wit
16a50 68 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  h a single colum
16a60 6e 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  n. ^The result o
16a70 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
16a80 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
16a90 20 74 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e   the.only column
16aa0 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f   in the first ro
16ab0 77 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  w returned by th
16ac0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
16ad0 6e 74 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45  nt. ^If the SELE
16ae0 43 54 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20  CT .yields more 
16af0 74 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20  than one result 
16b00 72 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66  row, all rows af
16b10 74 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72  ter the first ar
16b20 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74  e ignored. ^If.t
16b30 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73  he SELECT yields
16b40 20 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74   no rows, then t
16b50 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
16b60 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55  expression is NU
16b70 4c 4c 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20  LL..^(The LIMIT 
16b80 6f 66 20 61 20 73 63 61 6c 61 72 20 73 75 62 71  of a scalar subq
16b90 75 65 72 79 20 69 73 20 61 6c 77 61 79 73 20 31  uery is always 1
16ba0 2e 0a 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49  ..Any other LIMI
16bb0 54 20 76 61 6c 75 65 20 67 69 76 65 6e 20 69 6e  T value given in
16bc0 20 74 68 65 20 53 51 4c 20 74 65 78 74 20 69 73   the SQL text is
16bd0 20 69 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e   ignored.)^..<p>
16be0 5e 41 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53  ^All types of [S
16bf0 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
16c00 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72  , including aggr
16c10 65 67 61 74 65 20 61 6e 64 20 5b 63 6f 6d 70 6f  egate and [compo
16c20 75 6e 64 20 53 45 4c 45 43 54 5d 0a 71 75 65 72  und SELECT].quer
16c30 69 65 73 20 28 71 75 65 72 69 65 73 20 77 69 74  ies (queries wit
16c40 68 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20  h keywords like 
16c50 55 4e 49 4f 4e 20 6f 72 20 45 58 43 45 50 54 29  UNION or EXCEPT)
16c60 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 61 73 20   are allowed as 
16c70 73 63 61 6c 61 72 0a 73 75 62 71 75 65 72 69 65  scalar.subquerie
16c80 73 2e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f  s...<h3>Table Co
16c90 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a  lumn Names</h3>.
16ca0 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61  .<p>^A column na
16cb0 6d 65 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66  me can be any of
16cc0 20 74 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e   the names defin
16cd0 65 64 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54  ed in the [CREAT
16ce0 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65  E TABLE].stateme
16cf0 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65  nt or one of the
16d00 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69   following speci
16d10 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20  al identifiers: 
16d20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a  "<b>ROWID</b>",.
16d30 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72  "<b>OID</b>", or
16d40 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e   "<b>_ROWID_</b>
16d50 22 2e 0a 5e 54 68 65 20 74 68 72 65 65 20 73 70  "..^The three sp
16d60 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72  ecial identifier
16d70 73 20 64 65 73 63 72 69 62 65 20 74 68 65 0a 75  s describe the.u
16d80 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 6b 65  nique integer ke
16d90 79 20 28 74 68 65 20 5b 72 6f 77 69 64 5d 29 20  y (the [rowid]) 
16da0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
16db0 65 76 65 72 79 20 0a 72 6f 77 20 6f 66 20 65 76  every .row of ev
16dc0 65 72 79 20 74 61 62 6c 65 20 61 6e 64 20 73 6f  ery table and so
16dd0 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62   are not availab
16de0 6c 65 20 6f 6e 20 5b 57 49 54 48 4f 55 54 20 52  le on [WITHOUT R
16df0 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 5e 54  OWID] tables..^T
16e00 68 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74  he special ident
16e10 69 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65  ifiers only refe
16e20 72 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79  r to the row key
16e30 20 69 66 20 74 68 65 20 5b 43 52 45 41 54 45 20   if the [CREATE 
16e40 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74  TABLE].statement
16e50 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65   does not define
16e60 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77   a real column w
16e70 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
16e80 65 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61  e..^The rowid ca
16e90 6e 20 62 65 20 75 73 65 64 20 61 6e 79 77 68 65  n be used anywhe
16ea0 72 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c  re a regular.col
16eb0 75 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e  umn can be used.
16ec0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c  </p>..<p>^A [SEL
16ed0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 75  ECT] statement u
16ee0 73 65 64 20 61 73 20 65 69 74 68 65 72 20 61 20  sed as either a 
16ef0 73 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20  scalar subquery 
16f00 6f 72 20 61 73 20 74 68 65 20 0a 72 69 67 68 74  or as the .right
16f10 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66  -hand operand of
16f20 20 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f   an IN, NOT IN o
16f30 72 20 45 58 49 53 54 53 20 65 78 70 72 65 73 73  r EXISTS express
16f40 69 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  ion may contain 
16f50 0a 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 63  .references to c
16f60 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f 75  olumns in the ou
16f70 74 65 72 20 71 75 65 72 79 2e 20 53 75 63 68 20  ter query. Such 
16f80 61 20 73 75 62 71 75 65 72 79 20 69 73 20 6b 6e  a subquery is kn
16f90 6f 77 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c 61  own as.a correla
16fa0 74 65 64 20 73 75 62 71 75 65 72 79 2e 20 5e 41  ted subquery. ^A
16fb0 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
16fc0 75 65 72 79 20 69 73 20 72 65 65 76 61 6c 75 61  uery is reevalua
16fd0 74 65 64 20 65 61 63 68 20 74 69 6d 65 0a 69 74  ted each time.it
16fe0 73 20 72 65 73 75 6c 74 20 69 73 20 72 65 71 75  s result is requ
16ff0 69 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72 72  ired. ^An uncorr
17000 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
17010 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c  is evaluated onl
17020 79 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20 72  y once.and the r
17030 65 73 75 6c 74 20 72 65 75 73 65 64 20 61 73 20  esult reused as 
17040 6e 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63 6c  necessary...<tcl
17050 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73  >hd_fragment cas
17060 74 65 78 70 72 20 7b 43 41 53 54 20 65 78 70 72  texpr {CAST expr
17070 65 73 73 69 6f 6e 7d 20 7b 43 41 53 54 7d 20 7b  ession} {CAST} {
17080 63 61 73 74 7d 20 7b 43 41 53 54 20 6f 70 65 72  cast} {CAST oper
17090 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ator}</tcl>.<h3>
170a0 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 73  CAST expressions
170b0 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53 54  </h3>..<p>A CAST
170c0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
170d0 68 65 20 66 6f 72 6d 20 22 43 41 53 54 28 26 6c  he form "CAST(&l
170e0 74 3b 65 78 70 72 26 67 74 3b 20 41 53 20 26 6c  t;expr&gt; AS &l
170f0 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 29  t;type-name&gt;)
17100 22 0a 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  ".is used to con
17110 76 65 72 74 20 74 68 65 20 76 61 6c 75 65 20 6f  vert the value o
17120 66 20 26 6c 74 3b 65 78 70 72 26 67 74 3b 20 74  f &lt;expr&gt; t
17130 6f 20 0a 61 20 64 69 66 66 65 72 65 6e 74 20 5b  o .a different [
17140 73 74 6f 72 61 67 65 20 63 6c 61 73 73 5d 20 73  storage class] s
17150 70 65 63 69 66 69 65 64 20 62 79 20 26 6c 74 3b  pecified by &lt;
17160 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 2e 0a 5e  type-name&gt;..^
17170 41 20 43 41 53 54 20 63 6f 6e 76 65 72 73 69 6f  A CAST conversio
17180 6e 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  n is similar to 
17190 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74  the conversion t
171a0 68 61 74 20 74 61 6b 65 73 0a 70 6c 61 63 65 20  hat takes.place 
171b0 77 68 65 6e 20 61 20 5b 63 6f 6c 75 6d 6e 20 61  when a [column a
171c0 66 66 69 6e 69 74 79 5d 20 69 73 20 61 70 70 6c  ffinity] is appl
171d0 69 65 64 20 74 6f 20 61 20 76 61 6c 75 65 20 65  ied to a value e
171e0 78 63 65 70 74 20 74 68 61 74 20 77 69 74 68 0a  xcept that with.
171f0 74 68 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f  the CAST operato
17200 72 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  r the conversion
17210 20 61 6c 77 61 79 73 20 74 61 6b 65 73 20 70 6c   always takes pl
17220 61 63 65 20 65 76 65 6e 20 69 66 20 74 68 65 20  ace even if the 
17230 63 6f 6e 76 65 72 73 69 6f 6e 0a 6c 6f 73 73 79  conversion.lossy
17240 20 61 6e 64 20 69 72 72 65 76 65 72 73 69 62 6c   and irreversibl
17250 65 2c 20 77 68 65 72 65 61 73 20 63 6f 6c 75 6d  e, whereas colum
17260 6e 20 61 66 66 69 6e 69 74 79 20 6f 6e 6c 79 20  n affinity only 
17270 63 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61  changes the data
17280 20 74 79 70 65 0a 6f 66 20 61 20 76 61 6c 75 65   type.of a value
17290 20 69 66 20 74 68 65 20 63 68 61 6e 67 65 20 69   if the change i
172a0 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72  s lossless and r
172b0 65 76 65 72 73 69 62 6c 65 2e 0a 0a 3c 70 3e 5e  eversible...<p>^
172c0 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
172d0 26 6c 74 3b 65 78 70 72 26 67 74 3b 20 69 73 20  &lt;expr&gt; is 
172e0 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 72  NULL, then the r
172f0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53  esult of the CAS
17300 54 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  T.expression is 
17310 61 6c 73 6f 20 4e 55 4c 4c 2e 20 5e 4f 74 68 65  also NULL. ^Othe
17320 72 77 69 73 65 2c 20 74 68 65 20 73 74 6f 72 61  rwise, the stora
17330 67 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20  ge class of the 
17340 72 65 73 75 6c 74 0a 69 73 20 64 65 74 65 72 6d  result.is determ
17350 69 6e 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67  ined by applying
17360 20 74 68 65 20 5b 72 75 6c 65 73 20 66 6f 72 20   the [rules for 
17370 64 65 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c 75  determining colu
17380 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 74 6f 0a  mn affinity] to.
17390 74 68 65 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d  the &lt;type-nam
173a0 65 26 67 74 3b 2e 0a 0a 3c 74 61 62 6c 65 20 62  e&gt;...<table b
173b0 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20  order=1>.<tr>.  
173c0 3c 74 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66  <th> Affinity of
173d0 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67   &lt;type-name&g
173e0 74 3b 0a 20 20 3c 74 68 3e 20 43 6f 6e 76 65 72  t;.  <th> Conver
173f0 73 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 0a  sion Processing.
17400 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45  <tr>.  <td> NONE
17410 20 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e   .  <td> ^Castin
17420 67 20 61 20 76 61 6c 75 65 20 74 6f 20 61 20 26  g a value to a &
17430 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b  lt;type-name&gt;
17440 20 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74   with no affinit
17450 79 20 63 61 75 73 65 73 20 74 68 65 20 76 61 6c  y causes the val
17460 75 65 20 74 6f 0a 20 20 62 65 20 63 6f 6e 76 65  ue to.  be conve
17470 72 74 65 64 20 69 6e 74 6f 20 61 20 42 4c 4f 42  rted into a BLOB
17480 2e 20 20 5e 43 61 73 74 69 6e 67 20 74 6f 20 61  .  ^Casting to a
17490 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74 73 20 6f   BLOB consists o
174a0 66 20 66 69 72 73 74 20 63 61 73 74 69 6e 67 0a  f first casting.
174b0 20 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20 54    the value to T
174c0 45 58 54 20 69 6e 20 74 68 65 20 5b 65 6e 63 6f  EXT in the [enco
174d0 64 69 6e 67 5d 20 6f 66 20 74 68 65 20 64 61 74  ding] of the dat
174e0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
174f0 2c 20 74 68 65 6e 0a 20 20 69 6e 74 65 72 70 72  , then.  interpr
17500 65 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  eting the result
17510 69 6e 67 20 62 79 74 65 20 73 65 71 75 65 6e 63  ing byte sequenc
17520 65 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74  e as a BLOB inst
17530 65 61 64 20 6f 66 20 61 73 20 54 45 58 54 2e 0a  ead of as TEXT..
17540 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 54 45 58  .<tr>.  <td> TEX
17550 54 0a 20 20 3c 74 64 3e 20 5e 54 6f 20 63 61 73  T.  <td> ^To cas
17560 74 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74  t a BLOB value t
17570 6f 20 54 45 58 54 2c 20 74 68 65 20 73 65 71 75  o TEXT, the sequ
17580 65 6e 63 65 20 6f 66 20 62 79 74 65 73 20 74 68  ence of bytes th
17590 61 74 20 6d 61 6b 65 20 75 70 20 74 68 65 0a 20  at make up the. 
175a0 20 42 4c 4f 42 20 69 73 20 69 6e 74 65 72 70 72   BLOB is interpr
175b0 65 74 65 64 20 61 73 20 74 65 78 74 20 65 6e 63  eted as text enc
175c0 6f 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 64  oded using the d
175d0 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67  atabase encoding
175e0 2e 0a 20 20 3c 70 3e 0a 20 20 20 5e 43 61 73 74  ..  <p>.   ^Cast
175f0 69 6e 67 20 61 6e 20 49 4e 54 45 47 45 52 20 6f  ing an INTEGER o
17600 72 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74  r REAL value int
17610 6f 20 54 45 58 54 20 72 65 6e 64 65 72 73 20 74  o TEXT renders t
17620 68 65 20 76 61 6c 75 65 20 61 73 20 69 66 20 76  he value as if v
17630 69 61 20 0a 20 20 20 20 5b 73 71 6c 69 74 65 33  ia .    [sqlite3
17640 5f 73 6e 70 72 69 6e 74 66 28 29 5d 20 65 78 63  _snprintf()] exc
17650 65 70 74 20 74 68 61 74 20 74 68 65 20 72 65 73  ept that the res
17660 75 6c 74 69 6e 67 20 54 45 58 54 20 75 73 65 73  ulting TEXT uses
17670 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20   the [encoding] 
17680 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74 61 62  of.    the datab
17690 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a  ase connection..
176a0 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 52 45 41  .<tr>.  <td> REA
176b0 4c 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63  L.  <td> ^When c
176c0 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76 61  asting a BLOB va
176d0 6c 75 65 20 74 6f 20 61 20 52 45 41 4c 2c 20 74  lue to a REAL, t
176e0 68 65 20 76 61 6c 75 65 20 69 73 20 66 69 72 73  he value is firs
176f0 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20  t converted to. 
17700 20 20 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20         TEXT..   
17710 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73      <p>^When cas
17720 74 69 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75  ting a TEXT valu
17730 65 20 74 6f 20 52 45 41 4c 2c 20 74 68 65 20 6c  e to REAL, the l
17740 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  ongest possible 
17750 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20  prefix of.      
17760 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74    the value that
17770 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
17780 74 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75  ted as a real nu
17790 6d 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65  mber is extracte
177a0 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74  d from.        t
177b0 68 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e  he TEXT value an
177c0 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  d the remainder 
177d0 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65  ignored. ^Any le
177e0 61 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20  ading spaces in 
177f0 74 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54  the.        TEXT
17800 20 76 61 6c 75 65 20 61 72 65 20 69 67 6e 6f 72   value are ignor
17810 65 64 20 77 68 65 6e 20 63 6f 6e 76 65 72 67 69  ed when convergi
17820 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20  ng from TEXT to 
17830 52 45 41 4c 2e 20 5e 28 49 66 20 74 68 65 72 65  REAL. ^(If there
17840 20 69 73 0a 20 20 20 20 20 20 20 20 6e 6f 20 70   is.        no p
17850 72 65 66 69 78 20 74 68 61 74 20 63 61 6e 20 62  refix that can b
17860 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
17870 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
17880 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
17890 65 0a 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72  e.        conver
178a0 73 69 6f 6e 20 69 73 20 30 2e 30 2e 29 5e 0a 0a  sion is 0.0.)^..
178b0 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 49 4e 54 45  <tr>.  <td> INTE
178c0 47 45 52 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e  GER.  <td> ^When
178d0 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20   casting a BLOB 
178e0 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52  value to INTEGER
178f0 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66  , the value is f
17900 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74  irst converted t
17910 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a  o.        TEXT..
17920 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20         <p>^When 
17930 63 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76  casting a TEXT v
17940 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c  alue to INTEGER,
17950 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73   the longest pos
17960 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a  sible prefix of.
17970 20 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75          the valu
17980 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e  e that can be in
17990 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20  terpreted as an 
179a0 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 69  integer number i
179b0 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
179c0 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58  .        the TEX
179d0 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  T value and the 
179e0 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65  remainder ignore
179f0 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20  d. ^Any leading 
17a00 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20  spaces in the.  
17a10 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65        TEXT value
17a20 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67   when converting
17a30 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 49 4e   from TEXT to IN
17a40 54 45 47 45 52 20 61 72 65 20 69 67 6e 6f 72 65  TEGER are ignore
17a50 64 2e 20 5e 49 66 20 74 68 65 72 65 0a 20 20 20  d. ^If there.   
17a60 20 20 20 20 20 69 73 20 6e 6f 20 70 72 65 66 69       is no prefi
17a70 78 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e  x that can be in
17a80 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20  terpreted as an 
17a90 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 2c 20  integer number, 
17aa0 74 68 65 20 72 65 73 75 6c 74 0a 20 20 20 20 20  the result.     
17ab0 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72     of the conver
17ac0 73 69 6f 6e 20 69 73 20 30 2e 20 20 5e 28 54 68  sion is 0.  ^(Th
17ad0 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20  e CAST operator 
17ae0 75 6e 64 65 72 73 74 61 6e 64 73 20 64 65 63 69  understands deci
17af0 6d 61 6c 20 69 6e 74 65 67 65 72 73 0a 20 20 20  mal integers.   
17b00 20 20 20 20 20 6f 6e 6c 79 20 26 6d 64 61 73 68       only &mdash
17b10 3b 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f 66 20  ; conversion of 
17b20 5b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  [hexadecimal int
17b30 65 67 65 72 73 5d 20 73 74 6f 70 73 20 61 74 20  egers] stops at 
17b40 74 68 65 20 22 78 22 20 69 6e 20 74 68 65 0a 20  the "x" in the. 
17b50 20 20 20 20 20 20 20 22 30 78 22 20 70 72 65 66         "0x" pref
17b60 69 78 20 6f 66 20 74 68 65 20 68 65 78 61 64 65  ix of the hexade
17b70 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 73 74  cimal integer st
17b80 72 69 6e 67 20 61 6e 64 20 74 68 75 73 20 72 65  ring and thus re
17b90 73 75 6c 74 20 6f 66 20 74 68 65 20 0a 20 20 20  sult of the .   
17ba0 20 20 20 20 20 43 41 53 54 20 69 73 20 61 6c 77       CAST is alw
17bb0 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 0a 20 20 20  ays zero.)^..   
17bc0 20 20 20 3c 70 3e 5e 41 20 63 61 73 74 20 6f 66     <p>^A cast of
17bd0 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e   a REAL value in
17be0 74 6f 20 61 6e 20 49 4e 54 45 47 45 52 20 72 65  to an INTEGER re
17bf0 73 75 6c 74 73 20 69 6e 20 74 68 65 20 69 6e 74  sults in the int
17c00 65 67 65 72 0a 20 20 20 20 20 20 62 65 74 77 65  eger.      betwe
17c10 65 6e 20 74 68 65 20 52 45 41 4c 20 76 61 6c 75  en the REAL valu
17c20 65 20 61 6e 64 20 7a 65 72 6f 20 74 68 61 74 20  e and zero that 
17c30 69 73 20 63 6c 6f 73 65 73 74 20 74 6f 20 74 68  is closest to th
17c40 65 20 52 45 41 4c 20 76 61 6c 75 65 2e 0a 20 20  e REAL value..  
17c50 20 20 20 20 5e 49 66 20 61 20 52 45 41 4c 20 69      ^If a REAL i
17c60 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
17c70 68 65 20 67 72 65 61 74 65 73 74 20 70 6f 73 73  he greatest poss
17c80 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20 20  ible signed.    
17c90 20 20 69 6e 74 65 67 65 72 20 28 2b 39 32 32 33    integer (+9223
17ca0 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29  372036854775807)
17cb0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
17cc0 20 69 73 20 74 68 65 20 67 72 65 61 74 65 73 74   is the greatest
17cd0 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20   possible.      
17ce0 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61  signed integer a
17cf0 6e 64 20 69 66 20 74 68 65 20 52 45 41 4c 20 69  nd if the REAL i
17d00 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
17d10 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65 20 73  least possible s
17d20 69 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65  igned.      inte
17d30 67 65 72 20 28 2d 39 32 32 33 33 37 32 30 33 36  ger (-9223372036
17d40 38 35 34 37 37 35 38 30 38 29 20 74 68 65 6e 20  854775808) then 
17d50 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
17d60 65 20 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65  e least possible
17d70 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e  .      signed in
17d80 74 65 67 65 72 2e 0a 0a 20 20 20 20 20 20 3c 70  teger...      <p
17d90 3e 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65  >Prior to SQLite
17da0 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 2c 20   version 3.8.2, 
17db0 63 61 73 74 69 6e 67 20 61 20 52 45 41 4c 20 76  casting a REAL v
17dc0 61 6c 75 65 20 67 72 65 61 74 65 72 20 74 68 61  alue greater tha
17dd0 6e 0a 20 20 20 20 20 20 2b 39 32 32 33 33 37 32  n.      +9223372
17de0 30 33 36 38 35 34 37 37 35 38 30 37 2e 30 20 69  036854775807.0 i
17df0 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72  nto an integer r
17e00 65 73 75 6c 74 65 64 20 69 6e 20 74 68 65 20 6d  esulted in the m
17e10 6f 73 74 20 6e 65 67 61 74 69 76 65 0a 20 20 20  ost negative.   
17e20 20 20 20 69 6e 74 65 67 65 72 2c 20 2d 39 32 32     integer, -922
17e30 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
17e40 2e 20 20 54 68 69 73 20 62 65 68 61 76 69 6f 72  .  This behavior
17e50 20 77 61 73 20 6d 65 61 6e 74 20 74 6f 20 65 6d   was meant to em
17e60 75 6c 61 74 65 20 74 68 65 0a 20 20 20 20 20 20  ulate the.      
17e70 62 65 68 61 76 69 6f 72 20 6f 66 20 78 38 36 2f  behavior of x86/
17e80 78 36 34 20 68 61 72 64 77 61 72 65 20 77 68 65  x64 hardware whe
17e90 6e 20 64 6f 69 6e 67 20 74 68 65 20 65 71 75 69  n doing the equi
17ea0 76 61 6c 65 6e 74 20 63 61 73 74 2e 0a 0a 3c 74  valent cast...<t
17eb0 72 3e 0a 20 20 3c 74 64 3e 20 4e 55 4d 45 52 49  r>.  <td> NUMERI
17ec0 43 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e  C.  <td> ^Castin
17ed0 67 20 61 20 54 45 58 54 20 6f 72 20 42 4c 4f 42  g a TEXT or BLOB
17ee0 20 76 61 6c 75 65 20 69 6e 74 6f 20 4e 55 4d 45   value into NUME
17ef0 52 49 43 20 66 69 72 73 74 20 64 6f 65 73 20 61  RIC first does a
17f00 20 66 6f 72 63 65 64 0a 20 20 20 63 6f 6e 76 65   forced.   conve
17f10 72 73 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c 20  rsion into REAL 
17f20 62 75 74 20 74 68 65 6e 20 66 75 72 74 68 65 72  but then further
17f30 20 63 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65   converts the re
17f40 73 75 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45  sult into INTEGE
17f50 52 20 69 66 0a 20 20 20 61 6e 64 20 6f 6e 6c 79  R if.   and only
17f60 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   if the conversi
17f70 6f 6e 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20  on from REAL to 
17f80 49 4e 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c  INTEGER is lossl
17f90 65 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62  ess and reversib
17fa0 6c 65 2e 0a 20 20 20 54 68 69 73 20 69 73 20 74  le..   This is t
17fb0 68 65 20 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20  he only context 
17fc0 69 6e 20 53 51 4c 69 74 65 20 77 68 65 72 65 20  in SQLite where 
17fd0 74 68 65 20 4e 55 4d 45 52 49 43 20 61 6e 64 20  the NUMERIC and 
17fe0 49 4e 54 45 47 45 52 20 5b 61 66 66 69 6e 69 74  INTEGER [affinit
17ff0 69 65 73 5d 0a 20 20 20 62 65 68 61 76 65 20 64  ies].   behave d
18000 69 66 66 65 72 65 6e 74 6c 79 2e 0a 20 20 20 3c  ifferently..   <
18010 70 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45  p> ^Casting a RE
18020 41 4c 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61  AL or INTEGER va
18030 6c 75 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69  lue to NUMERIC i
18040 73 20 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20  s a no-op, even 
18050 69 66 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c  if a real.   val
18060 75 65 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73  ue could be loss
18070 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
18080 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a   to an integer..
18090 0a 3c 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e  .</tr>..</table>
180a0 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
180b0 74 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  the result from 
180c0 63 61 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d  casting any non-
180d0 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20  BLOB value into 
180e0 61 20 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20  a .BLOB and the 
180f0 72 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74  result from cast
18100 69 6e 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c  ing any BLOB val
18110 75 65 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c  ue into a non-BL
18120 4f 42 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20  OB value.may be 
18130 64 69 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64  different depend
18140 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74  ing on whether t
18150 68 65 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63  he database [enc
18160 6f 64 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c  oding] is UTF-8,
18170 0a 55 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54  .UTF-16be, or UT
18180 46 2d 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68  F-16le....<tcl>h
18190 64 5f 66 72 61 67 6d 65 6e 74 20 62 6f 6f 6c 65  d_fragment boole
181a0 61 6e 65 78 70 72 20 7b 62 6f 6f 6c 65 61 6e 20  anexpr {boolean 
181b0 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c  expression}</tcl
181c0 3e 0a 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20 45 78  >.<h3>Boolean Ex
181d0 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
181e0 3c 70 3e 54 68 65 20 53 51 4c 20 6c 61 6e 67 75  <p>The SQL langu
181f0 61 67 65 20 66 65 61 74 75 72 65 73 20 73 65 76  age features sev
18200 65 72 61 6c 20 63 6f 6e 74 65 78 74 73 20 77 68  eral contexts wh
18210 65 72 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f  ere an expressio
18220 6e 20 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20  n is .evaluated 
18230 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 63  and the result c
18240 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20 62 6f  onverted to a bo
18250 6f 6c 65 61 6e 20 28 74 72 75 65 20 6f 72 20 66  olean (true or f
18260 61 6c 73 65 29 20 76 61 6c 75 65 2e 20 54 68 65  alse) value. The
18270 73 65 0a 63 6f 6e 74 65 78 74 73 20 61 72 65 3a  se.contexts are:
18280 0a 0a 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69  ..  <ul>.    <li
18290 3e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  > the WHERE clau
182a0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 2c 20  se of a SELECT, 
182b0 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
182c0 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20   statement,.    
182d0 3c 6c 69 3e 20 74 68 65 20 4f 4e 20 6f 72 20 55  <li> the ON or U
182e0 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
182f0 20 6a 6f 69 6e 20 69 6e 20 61 20 53 45 4c 45 43   join in a SELEC
18300 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20  T statement,.   
18310 20 3c 6c 69 3e 20 74 68 65 20 48 41 56 49 4e 47   <li> the HAVING
18320 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
18330 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20  ECT statement,. 
18340 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e     <li> the WHEN
18350 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20 53 51   clause of an SQ
18360 4c 20 74 72 69 67 67 65 72 2c 20 61 6e 64 0a 20  L trigger, and. 
18370 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e     <li> the WHEN
18380 20 63 6c 61 75 73 65 20 6f 72 20 63 6c 61 75 73   clause or claus
18390 65 73 20 6f 66 20 73 6f 6d 65 20 43 41 53 45 20  es of some CASE 
183a0 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 3c  expressions..  <
183b0 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f  /ul>..<p>^(To co
183c0 6e 76 65 72 74 20 74 68 65 20 72 65 73 75 6c 74  nvert the result
183d0 73 20 6f 66 20 61 6e 20 53 51 4c 20 65 78 70 72  s of an SQL expr
183e0 65 73 73 69 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c  ession to a bool
183f0 65 61 6e 20 76 61 6c 75 65 2c 20 53 51 4c 69 74  ean value, SQLit
18400 65 0a 66 69 72 73 74 20 63 61 73 74 73 20 74 68  e.first casts th
18410 65 20 72 65 73 75 6c 74 20 74 6f 20 61 20 4e 55  e result to a NU
18420 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74  MERIC value in t
18430 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61  he same way as a
18440 20 0a 5b 43 41 53 54 20 65 78 70 72 65 73 73 69   .[CAST expressi
18450 6f 6e 5d 2e 20 41 20 6e 75 6d 65 72 69 63 20 7a  on]. A numeric z
18460 65 72 6f 20 76 61 6c 75 65 20 28 69 6e 74 65 67  ero value (integ
18470 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65  er value 0 or re
18480 61 6c 20 0a 76 61 6c 75 65 20 30 2e 30 29 20 69  al .value 0.0) i
18490 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  s considered to 
184a0 62 65 20 66 61 6c 73 65 2e 20 20 41 20 4e 55 4c  be false.  A NUL
184b0 4c 20 76 61 6c 75 65 20 69 73 20 73 74 69 6c 6c  L value is still
184c0 20 4e 55 4c 4c 2e 0a 41 6c 6c 20 6f 74 68 65 72   NULL..All other
184d0 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
184e0 69 64 65 72 65 64 20 74 72 75 65 2e 29 5e 0a 0a  idered true.)^..
184f0 3c 70 3e 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65  <p>^(For example
18500 2c 20 74 68 65 20 76 61 6c 75 65 73 20 4e 55 4c  , the values NUL
18510 4c 2c 20 30 2e 30 2c 20 30 2c 20 27 65 6e 67 6c  L, 0.0, 0, 'engl
18520 69 73 68 27 20 61 6e 64 20 27 30 27 20 61 72 65  ish' and '0' are
18530 20 61 6c 6c 20 63 6f 6e 73 69 64 65 72 65 64 0a   all considered.
18540 74 6f 20 62 65 20 66 61 6c 73 65 2e 29 5e 20 5e  to be false.)^ ^
18550 28 56 61 6c 75 65 73 20 31 2c 20 31 2e 30 2c 20  (Values 1, 1.0, 
18560 30 2e 31 2c 20 2d 30 2e 31 20 61 6e 64 20 27 31  0.1, -0.1 and '1
18570 65 6e 67 6c 69 73 68 27 20 61 72 65 20 63 6f 6e  english' are con
18580 73 69 64 65 72 65 64 20 74 6f 20 0a 62 65 20 74  sidered to .be t
18590 72 75 65 2e 29 5e 0a 0a 3c 68 33 3e 46 75 6e 63  rue.)^..<h3>Func
185a0 74 69 6f 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 53 51  tions</h3>.<p>SQ
185b0 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61  Lite supports ma
185c0 6e 79 20 5b 63 6f 72 65 66 75 6e 63 7c 73 69 6d  ny [corefunc|sim
185d0 70 6c 65 5d 20 61 6e 64 20 5b 61 67 67 66 75 6e  ple] and [aggfun
185e0 63 7c 61 67 67 72 65 67 61 74 65 5d 0a 53 51 4c  c|aggregate].SQL
185f0 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 46 6f 72   functions.  For
18600 20 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70 75   presentation pu
18610 72 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20 66  rposes, simple f
18620 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 66 75 72  unctions are fur
18630 74 68 65 72 0a 73 75 62 64 69 76 69 64 65 64 20  ther.subdivided 
18640 69 6e 74 6f 20 5b 63 6f 72 65 66 75 6e 63 20 7c  into [corefunc |
18650 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 5d   core functions]
18660 20 61 6e 64 20 5b 64 61 74 65 66 75 6e 63 7c 64   and [datefunc|d
18670 61 74 65 2d 74 69 6d 65 20 66 75 6e 63 74 69 6f  ate-time functio
18680 6e 73 5d 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e  ns]..Application
18690 73 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75  s can add new fu
186a0 6e 63 74 69 6f 6e 73 2c 20 77 72 69 74 74 65 6e  nctions, written
186b0 20 69 6e 20 43 2f 43 2b 2b 2c 20 75 73 69 6e 67   in C/C++, using
186c0 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 63 72   the.[sqlite3_cr
186d0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
186e0 20 69 6e 74 65 72 66 61 63 65 2e 0a 3c 2f 70 3e   interface..</p>
186f0 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 70 6f 73 73  ..<p>^It is poss
18700 69 62 6c 65 20 74 6f 20 68 61 76 65 20 61 6e 20  ible to have an 
18710 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
18720 6f 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  on with the same
18730 20 6e 61 6d 65 20 61 73 20 61 0a 73 69 6d 70 6c   name as a.simpl
18740 65 20 66 75 6e 63 74 69 6f 6e 2c 20 61 73 20 6c  e function, as l
18750 6f 6e 67 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ong as the numbe
18760 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66  r of arguments f
18770 6f 72 20 74 68 65 20 74 77 6f 20 66 6f 72 6d 73  or the two forms
18780 20 6f 66 20 74 68 65 0a 66 75 6e 63 74 69 6f 6e   of the.function
18790 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 20   are different. 
187a0 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74   ^For example, t
187b0 68 65 20 5b 61 67 67 5f 6d 61 78 7c 6d 61 78 28  he [agg_max|max(
187c0 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  )] function with
187d0 20 61 0a 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a.single argume
187e0 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  nt is an aggrega
187f0 74 65 20 61 6e 64 20 74 68 65 20 5b 6d 61 78 28  te and the [max(
18800 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  )] function with
18810 20 74 77 6f 20 6f 72 20 6d 6f 72 65 0a 61 72 67   two or more.arg
18820 75 6d 65 6e 74 73 20 69 73 20 61 20 73 69 6d 70  uments is a simp
18830 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 3c 74  le function...<t
18840 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
18850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18890 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65  ##.Section {Core
188a0 20 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65   Functions} core
188b0 66 75 6e 63 20 7b 2a 63 6f 72 65 66 75 6e 63 7d  func {*corefunc}
188c0 0a 70 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73  .proc funcdef {s
188d0 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64  yntax keywords d
188e0 65 73 63 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73  esc} {.  hd_puts
188f0 20 7b 3c 74 72 3e 7d 0a 20 20 72 65 67 73 75 62   {<tr>}.  regsub
18900 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72   -all {\s+} [str
18910 69 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78  ing trim $syntax
18920 5d 20 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61  ] {<br />} synta
18930 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
18940 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24  {\(([^*)]+)\)} $
18950 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f  syntax {(<i>\1</
18960 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65  i>)} syntax.  re
18970 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73  gsub -all {,} $s
18980 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d  yntax {</i>,<i>}
18990 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
189a0 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e   -all {<i>\.\.\.
189b0 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e  </i>} $syntax {.
189c0 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20 68 64 5f  ..} syntax.  hd_
189d0 70 75 74 73 20 22 3c 74 64 20 76 61 6c 69 67 6e  puts "<td valign
189e0 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c  =\"top\" align=\
189f0 22 72 69 67 68 74 5c 22 20 77 69 64 74 68 3d 5c  "right\" width=\
18a00 22 31 32 30 5c 22 3e 22 0a 20 20 69 66 20 7b 5b  "120\">".  if {[
18a10 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64  llength $keyword
18a20 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65 67  s]==0} {.    reg
18a30 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73  exp {[a-z_]+} $s
18a40 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20 20 68  yntax name.    h
18a50 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d 65  d_fragment $name
18a60 20 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d 65 7d   *$name "${name}
18a70 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 22  () SQL function"
18a80 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
18a90 73 65 74 20 66 72 61 67 6e 61 6d 65 20 5b 6c 69  set fragname [li
18aa0 6e 64 65 78 20 24 6b 65 79 77 6f 72 64 73 20 30  ndex $keywords 0
18ab0 5d 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c  ].    regsub -al
18ac0 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72 61 67  l {[^a-z]} $frag
18ad0 6e 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61 6d 65  name {} fragname
18ae0 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74  .    hd_fragment
18af0 20 24 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 65   $fragname.    e
18b00 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
18b10 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c 6e 20  [string map {\n 
18b20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73 5d 0a  { }} $keywords].
18b30 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 24    }.  hd_puts "$
18b40 73 79 6e 74 61 78 3c 2f 74 64 3e 22 0a 20 20 68  syntax</td>".  h
18b50 64 5f 70 75 74 73 20 7b 3c 74 64 20 76 61 6c 69  d_puts {<td vali
18b60 67 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20 68 64 5f  gn="top">}.  hd_
18b70 72 65 73 6f 6c 76 65 20 24 64 65 73 63 0a 20 20  resolve $desc.  
18b80 68 64 5f 70 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f  hd_puts {</td></
18b90 74 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  tr>}.}.</tcl>..<
18ba0 70 3e 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74  p>The core funct
18bb0 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77  ions shown below
18bc0 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62   are available b
18bd0 79 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74  y default. .[dat
18be0 65 66 75 6e 63 20 7c 20 44 61 74 65 20 26 61 6d  efunc | Date &am
18bf0 70 3b 20 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e  p; Time function
18c00 73 5d 20 61 6e 64 0a 5b 61 67 67 66 75 6e 63 20  s] and.[aggfunc 
18c10 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  | aggregate func
18c20 74 69 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d  tions] are docum
18c30 65 6e 74 65 64 20 73 65 70 61 72 61 74 65 6c 79  ented separately
18c40 2e 20 20 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f  .  An.applicatio
18c50 6e 20 6d 61 79 20 64 65 66 69 6e 65 20 61 64 64  n may define add
18c60 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e  itional.function
18c70 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 61  s written in C a
18c80 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  nd added to the 
18c90 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20  database engine 
18ca0 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74  using.the [sqlit
18cb0 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
18cc0 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a  on()] API.</p>..
18cd0 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
18ce0 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a  cellpadding=10>.
18cf0 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61  <tcl>.funcdef {a
18d00 62 73 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  bs(X)} {} {.  ^T
18d10 68 65 20 61 62 73 28 58 29 20 66 75 6e 63 74 69  he abs(X) functi
18d20 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
18d30 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
18d40 20 74 68 65 20 6e 75 6d 65 72 69 63 0a 20 20 61   the numeric.  a
18d50 72 67 75 6d 65 6e 74 20 58 2e 20 20 5e 41 62 73  rgument X.  ^Abs
18d60 28 58 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  (X) returns NULL
18d70 20 69 66 20 58 20 69 73 20 4e 55 4c 4c 2e 20 0a   if X is NULL. .
18d80 20 20 5e 28 41 62 73 28 58 29 20 72 65 74 75 72    ^(Abs(X) retur
18d90 6e 73 20 30 2e 30 20 69 66 20 58 20 69 73 20 61  ns 0.0 if X is a
18da0 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a   string or blob.
18db0 20 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65    that cannot be
18dc0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20   converted to a 
18dd0 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2e 29 5e  numeric value.)^
18de0 20 20 5e 49 66 20 58 20 69 73 20 74 68 65 20 0a    ^If X is the .
18df0 20 20 69 6e 74 65 67 65 72 20 2d 39 32 32 33 33    integer -92233
18e00 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20 74  72036854775808 t
18e10 68 65 6e 20 61 62 73 28 58 29 20 74 68 72 6f 77  hen abs(X) throw
18e20 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65  s an integer ove
18e30 72 66 6c 6f 77 0a 20 20 65 72 72 6f 72 20 73 69  rflow.  error si
18e40 6e 63 65 20 74 68 65 72 65 20 69 73 20 6e 6f 20  nce there is no 
18e50 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 73 69 74  equivalent posit
18e60 69 76 65 20 36 34 2d 62 69 74 20 74 77 6f 20 63  ive 64-bit two c
18e70 6f 6d 70 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e  omplement value.
18e80 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68 61  .}..funcdef {cha
18e90 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  nges()} {} {.  ^
18ea0 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 66 75  The changes() fu
18eb0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
18ec0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 74  he number of dat
18ed0 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
18ee0 77 65 72 65 20 63 68 61 6e 67 65 64 0a 20 20 6f  were changed.  o
18ef0 72 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64 65  r inserted or de
18f00 6c 65 74 65 64 20 62 79 20 74 68 65 20 6d 6f 73  leted by the mos
18f10 74 20 72 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c  t recently compl
18f20 65 74 65 64 20 49 4e 53 45 52 54 2c 20 44 45 4c  eted INSERT, DEL
18f30 45 54 45 2c 0a 20 20 6f 72 20 55 50 44 41 54 45  ETE,.  or UPDATE
18f40 20 73 74 61 74 65 6d 65 6e 74 2c 20 65 78 63 6c   statement, excl
18f50 75 73 69 76 65 20 6f 66 20 73 74 61 74 65 6d 65  usive of stateme
18f60 6e 74 73 20 69 6e 20 6c 6f 77 65 72 2d 6c 65 76  nts in lower-lev
18f70 65 6c 20 74 72 69 67 67 65 72 73 2e 0a 20 20 5e  el triggers..  ^
18f80 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 53 51  The changes() SQ
18f90 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
18fa0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
18fb0 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e  he [sqlite3_chan
18fc0 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 66  ges()].  C/C++ f
18fd0 75 6e 63 74 69 6f 6e 20 61 6e 64 20 68 65 6e 63  unction and henc
18fe0 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61  e follows the sa
18ff0 6d 65 20 72 75 6c 65 73 20 66 6f 72 20 63 6f 75  me rules for cou
19000 6e 74 69 6e 67 20 63 68 61 6e 67 65 73 2e 0a 7d  nting changes..}
19010 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 72 28  ..funcdef {char(
19020 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b  X1,X2,...,XN)} {
19030 7d 20 7b 0a 20 20 5e 28 54 68 65 20 63 68 61 72  } {.  ^(The char
19040 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 20 66  (X1,X2,...,XN) f
19050 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
19060 61 20 73 74 72 69 6e 67 20 63 6f 6d 70 6f 73 65  a string compose
19070 64 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  d of characters 
19080 68 61 76 69 6e 67 20 74 68 65 0a 20 20 20 75 6e  having the.   un
19090 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74  icode code point
190a0 20 76 61 6c 75 65 73 20 6f 66 20 69 6e 74 65 67   values of integ
190b0 65 72 73 20 58 31 20 74 68 72 6f 75 67 68 20 58  ers X1 through X
190c0 4e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  N, respectively.
190d0 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63  )^.}..funcdef {c
190e0 6f 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29  oalesce(X,Y,...)
190f0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f  } {} {.  ^The co
19100 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74 69 6f  alesce() functio
19110 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
19120 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f   of its first no
19130 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c  n-NULL argument,
19140 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c   or.  NULL if al
19150 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  l arguments are 
19160 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65  NULL.  ^Coalesce
19170 28 29 20 6d 75 73 74 20 68 61 76 65 20 61 74 20  () must have at 
19180 6c 65 61 73 74 20 0a 20 20 32 20 61 72 67 75 6d  least .  2 argum
19190 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ents..}..funcdef
191a0 20 7b 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20   {glob(X,Y)} {} 
191b0 7b 0a 20 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c  {.  ^The glob(X,
191c0 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65  Y) function is e
191d0 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65  quivalent to the
191e0 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20 22 3c  .  expression "<
191f0 62 3e 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e  b>Y GLOB X</b>".
19200 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
19210 20 58 20 61 6e 64 20 59 20 61 72 67 75 6d 65 6e   X and Y argumen
19220 74 73 20 61 72 65 20 72 65 76 65 72 73 65 64 20  ts are reversed 
19230 69 6e 20 74 68 65 20 67 6c 6f 62 28 29 20 66 75  in the glob() fu
19240 6e 63 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76  nction.  relativ
19250 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
19260 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  GLOB] operator..
19270 20 20 5e 49 66 20 74 68 65 20 5b 73 71 6c 69 74    ^If the [sqlit
19280 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
19290 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  on()] interface 
192a0 69 73 20 75 73 65 64 20 74 6f 0a 20 20 6f 76 65  is used to.  ove
192b0 72 72 69 64 65 20 74 68 65 20 67 6c 6f 62 28 58  rride the glob(X
192c0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ,Y) function wit
192d0 68 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  h an alternative
192e0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
192f0 74 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42  then.  the [GLOB
19300 5d 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20  ] operator will 
19310 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74 65 72  invoke the alter
19320 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74  native implement
19330 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ation..}..funcde
19340 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20  f {ifnull(X,Y)} 
19350 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75  {} {.  ^The ifnu
19360 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ll() function re
19370 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
19380 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55  its first non-NU
19390 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a  LL argument, or.
193a0 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68 20 61    NULL if both a
193b0 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c  rguments are NUL
193c0 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75  L.  ^Ifnull() mu
193d0 73 74 20 68 61 76 65 20 65 78 61 63 74 6c 79 20  st have exactly 
193e0 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e  2 arguments..  ^
193f0 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e  The ifnull() fun
19400 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
19410 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65  ent to [coalesce
19420 28 29 5d 20 77 69 74 68 20 74 77 6f 20 61 72 67  ()] with two arg
19430 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64  uments..}..funcd
19440 65 66 20 7b 69 6e 73 74 72 28 58 2c 59 29 7d 20  ef {instr(X,Y)} 
19450 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 6e 73 74  {} {.  ^The inst
19460 72 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  r(X,Y) function 
19470 66 69 6e 64 73 20 74 68 65 20 66 69 72 73 74 20  finds the first 
19480 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74  occurrence of st
19490 72 69 6e 67 20 59 20 77 69 74 68 69 6e 20 0a 20  ring Y within . 
194a0 20 73 74 72 69 6e 67 20 58 20 61 6e 64 20 72 65   string X and re
194b0 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
194c0 20 6f 66 20 70 72 69 6f 72 20 63 68 61 72 61 63   of prior charac
194d0 74 65 72 73 20 70 6c 75 73 20 31 2c 20 6f 72 20  ters plus 1, or 
194e0 30 20 69 66 0a 20 20 59 20 69 73 20 6e 6f 77 68  0 if.  Y is nowh
194f0 65 72 65 20 66 6f 75 6e 64 20 77 69 74 68 69 6e  ere found within
19500 20 58 2e 0a 20 20 5e 4f 72 2c 20 69 66 20 58 20   X..  ^Or, if X 
19510 61 6e 64 20 59 20 61 72 65 20 62 6f 74 68 20 42  and Y are both B
19520 4c 4f 42 73 2c 20 74 68 65 6e 20 69 6e 73 74 72  LOBs, then instr
19530 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20 6f 6e  (X,Y) returns on
19540 65 0a 20 20 6d 6f 72 65 20 74 68 61 6e 20 74 68  e.  more than th
19550 65 20 6e 75 6d 62 65 72 20 62 79 74 65 73 20 70  e number bytes p
19560 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73  rior to the firs
19570 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20  t occurrence of 
19580 59 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20 64  Y, or 0 if.  Y d
19590 6f 65 73 20 6e 6f 74 20 6f 63 63 75 72 20 61 6e  oes not occur an
195a0 79 77 68 65 72 65 20 77 69 74 68 69 6e 20 58 2e  ywhere within X.
195b0 0a 20 20 5e 49 66 20 62 6f 74 68 20 61 72 67 75  .  ^If both argu
195c0 6d 65 6e 74 73 20 58 20 61 6e 64 20 59 20 74 6f  ments X and Y to
195d0 20 69 6e 73 74 72 28 58 2c 59 29 20 61 72 65 20   instr(X,Y) are 
195e0 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64 20 61 72 65  non-NULL and are
195f0 20 6e 6f 74 20 42 4c 4f 42 73 0a 20 20 74 68 65   not BLOBs.  the
19600 6e 20 62 6f 74 68 20 61 72 65 20 69 6e 74 65 72  n both are inter
19610 70 72 65 74 65 64 20 61 73 20 73 74 72 69 6e 67  preted as string
19620 73 2e 0a 20 20 5e 49 66 20 65 69 74 68 65 72 20  s..  ^If either 
19630 58 20 6f 72 20 59 20 61 72 65 20 4e 55 4c 4c 20  X or Y are NULL 
19640 69 6e 20 69 6e 73 74 72 28 58 2c 59 29 20 74 68  in instr(X,Y) th
19650 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
19660 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65   NULL..}..funcde
19670 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a  f {hex(X)} {} {.
19680 20 20 5e 54 68 65 20 68 65 78 28 29 20 66 75 6e    ^The hex() fun
19690 63 74 69 6f 6e 20 69 6e 74 65 72 70 72 65 74 73  ction interprets
196a0 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 61 73   its argument as
196b0 20 61 20 42 4c 4f 42 20 61 6e 64 20 72 65 74 75   a BLOB and retu
196c0 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77  rns.  a string w
196d0 68 69 63 68 20 69 73 20 74 68 65 20 75 70 70 65  hich is the uppe
196e0 72 2d 63 61 73 65 20 68 65 78 61 64 65 63 69 6d  r-case hexadecim
196f0 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f 66 20  al rendering of 
19700 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 20  the content of. 
19710 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66   that blob..}..f
19720 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73  uncdef {last_ins
19730 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20  ert_rowid()} {} 
19740 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e  {.  ^The last_in
19750 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
19760 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
19770 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74  e [ROWID].  of t
19780 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e 73 65  he last row inse
19790 72 74 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  rt from the data
197a0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
197b0 77 68 69 63 68 20 69 6e 76 6f 6b 65 64 20 74 68  which invoked th
197c0 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20  e.  function..  
197d0 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74  ^The last_insert
197e0 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66 75 6e  _rowid() SQL fun
197f0 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
19800 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20  er around the.  
19810 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  [sqlite3_last_in
19820 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20 43 2f  sert_rowid()] C/
19830 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 66 75  C++ interface fu
19840 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64  nction..}..funcd
19850 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20 7b  ef {length(X)} {
19860 7d 20 7b 0a 20 20 5e 46 6f 72 20 61 20 73 74 72  } {.  ^For a str
19870 69 6e 67 20 76 61 6c 75 65 20 58 2c 20 74 68 65  ing value X, the
19880 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74   length(X) funct
19890 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
198a0 6e 75 6d 62 65 72 20 6f 66 20 0a 20 20 63 68 61  number of .  cha
198b0 72 61 63 74 65 72 73 20 28 6e 6f 74 20 62 79 74  racters (not byt
198c0 65 73 29 20 69 6e 20 58 20 70 72 69 6f 72 20 74  es) in X prior t
198d0 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c 20  o the first NUL 
198e0 63 68 61 72 61 63 74 65 72 2e 0a 20 20 53 69 6e  character..  Sin
198f0 63 65 20 53 51 4c 69 74 65 20 73 74 72 69 6e 67  ce SQLite string
19900 73 20 64 6f 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c  s do not normall
19910 79 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 20 63 68  y contain NUL ch
19920 61 72 61 63 74 65 72 73 2c 20 74 68 65 20 6c 65  aracters, the le
19930 6e 67 74 68 28 58 29 0a 20 20 66 75 6e 63 74 69  ngth(X).  functi
19940 6f 6e 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20  on will usually 
19950 72 65 74 75 72 6e 20 74 68 65 20 74 6f 74 61 6c  return the total
19960 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   number of chara
19970 63 74 65 72 73 20 69 6e 20 74 68 65 20 73 74 72  cters in the str
19980 69 6e 67 20 58 2e 0a 20 20 5e 46 6f 72 20 61 20  ing X..  ^For a 
19990 62 6c 6f 62 20 76 61 6c 75 65 20 58 2c 20 6c 65  blob value X, le
199a0 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e 73 20  ngth(X) returns 
199b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
199c0 74 65 73 20 69 6e 20 74 68 65 20 62 6c 6f 62 2e  tes in the blob.
199d0 0a 20 20 5e 49 66 20 58 20 69 73 20 4e 55 4c 4c  .  ^If X is NULL
199e0 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20   then length(X) 
199f0 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66 20 58  is NULL..  ^If X
19a00 20 69 73 20 6e 75 6d 65 72 69 63 20 74 68 65 6e   is numeric then
19a10 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75 72   length(X) retur
19a20 6e 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  ns the length of
19a30 20 61 20 73 74 72 69 6e 67 0a 20 20 72 65 70 72   a string.  repr
19a40 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 58 2e  esentation of X.
19a50 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b  .}..funcdef {lik
19a60 65 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c 59 2c  e(X,Y) like(X,Y,
19a70 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Z)} {} {.  ^The 
19a80 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
19a90 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
19aa0 6d 65 6e 74 20 74 68 65 0a 20 20 22 3c 62 3e 59  ment the.  "<b>Y
19ab0 20 4c 49 4b 45 20 58 20 26 23 39 31 3b 45 53 43   LIKE X &#91;ESC
19ac0 41 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e 22 20  APE Z&#93;</b>" 
19ad0 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20 20 5e  expression. .  ^
19ae0 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
19af0 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73  ESCAPE clause is
19b00 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
19b10 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63  he.  like() func
19b20 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 64 20  tion is invoked 
19b30 77 69 74 68 20 74 68 72 65 65 20 61 72 67 75 6d  with three argum
19b40 65 6e 74 73 2e 20 20 5e 4f 74 68 65 72 77 69 73  ents.  ^Otherwis
19b50 65 2c 20 69 74 20 69 73 0a 20 20 69 6e 76 6f 6b  e, it is.  invok
19b60 65 64 20 77 69 74 68 20 74 77 6f 20 61 72 67 75  ed with two argu
19b70 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74 65  ments only. Note
19b80 20 74 68 61 74 20 74 68 65 20 58 20 61 6e 64 20   that the X and 
19b90 59 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  Y parameters are
19ba0 0a 20 20 72 65 76 65 72 73 65 64 20 69 6e 20 74  .  reversed in t
19bb0 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69  he like() functi
19bc0 6f 6e 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  on relative to t
19bd0 68 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45 5d 20  he infix [LIKE] 
19be0 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 54 68 65  operator..  ^The
19bf0 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
19c00 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74  _function()] int
19c10 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75 73  erface can be us
19c20 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74  ed to override t
19c30 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63  he.  like() func
19c40 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79  tion and thereby
19c50 20 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72   change the oper
19c60 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 5b  ation of the.  [
19c70 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 20  LIKE] operator. 
19c80 20 57 68 65 6e 20 6f 76 65 72 72 69 64 69 6e 67   When overriding
19c90 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63   the like() func
19ca0 74 69 6f 6e 2c 20 69 74 20 6d 61 79 20 62 65 20  tion, it may be 
19cb0 69 6d 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f  important.  to o
19cc0 76 65 72 72 69 64 65 20 62 6f 74 68 20 74 68 65  verride both the
19cd0 20 74 77 6f 20 61 6e 64 20 74 68 72 65 65 20 61   two and three a
19ce0 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73  rgument versions
19cf0 20 6f 66 20 74 68 65 20 6c 69 6b 65 28 29 20 0a   of the like() .
19d00 20 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65    function. Othe
19d10 72 77 69 73 65 2c 20 64 69 66 66 65 72 65 6e 74  rwise, different
19d20 20 63 6f 64 65 20 6d 61 79 20 62 65 20 63 61 6c   code may be cal
19d30 6c 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  led to implement
19d40 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70   the.  [LIKE] op
19d50 65 72 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67  erator depending
19d60 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
19d70 6f 74 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61  ot an ESCAPE cla
19d80 75 73 65 20 77 61 73 20 0a 20 20 73 70 65 63 69  use was .  speci
19d90 66 69 65 64 2e 0a 7d 0a 0a 0a 66 75 6e 63 64 65  fied..}...funcde
19da0 66 20 7b 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c  f {likelihood(X,
19db0 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
19dc0 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20  likelihood(X,Y) 
19dd0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19de0 20 61 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68   argument X unch
19df0 61 6e 67 65 64 2e 0a 20 20 5e 28 54 68 65 20 76  anged..  ^(The v
19e00 61 6c 75 65 20 59 20 69 6e 20 6c 69 6b 65 6c 69  alue Y in likeli
19e10 68 6f 6f 64 28 58 2c 59 29 20 6d 75 73 74 20 62  hood(X,Y) must b
19e20 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
19e30 6e 74 20 63 6f 6e 73 74 61 6e 74 0a 20 20 62 65  nt constant.  be
19e40 74 77 65 65 6e 20 30 2e 30 20 61 6e 64 20 31 2e  tween 0.0 and 1.
19e50 30 2c 20 69 6e 63 6c 75 73 69 76 65 2e 29 5e 0a  0, inclusive.)^.
19e60 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f    ^The likelihoo
19e70 64 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  d(X) function is
19e80 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68   a no-op that th
19e90 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
19ea0 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61  .  optimizes awa
19eb0 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e  y so that it con
19ec0 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63  sumes no CPU cyc
19ed0 6c 65 73 20 64 75 72 69 6e 67 20 72 75 6e 2d 74  les during run-t
19ee0 69 6d 65 0a 20 20 28 74 68 61 74 20 69 73 2c 20  ime.  (that is, 
19ef0 64 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20  during calls to 
19f00 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d  [sqlite3_step()]
19f10 29 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73  )..  ^The purpos
19f20 65 20 6f 66 20 74 68 65 20 6c 69 6b 65 6c 69 68  e of the likelih
19f30 6f 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  ood(X,Y) functio
19f40 6e 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20  n is to provide 
19f50 61 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65 20  a hint.  to the 
19f60 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 68  query planner th
19f70 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  at the argument 
19f80 58 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 74  X is a boolean t
19f90 68 61 74 20 69 73 0a 20 20 74 72 75 65 20 77 69  hat is.  true wi
19fa0 74 68 20 61 20 70 72 6f 62 61 62 69 6c 69 74 79  th a probability
19fb0 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
19fc0 79 20 59 2e 0a 20 20 5e 28 54 68 65 20 5b 75 6e  y Y..  ^(The [un
19fd0 6c 69 6b 65 6c 79 28 58 29 5d 20 66 75 6e 63 74  likely(X)] funct
19fe0 69 6f 6e 20 69 73 20 73 68 6f 72 74 2d 68 61 6e  ion is short-han
19ff0 64 20 66 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  d for likelihood
1a000 28 58 2c 30 2e 30 36 32 35 29 2e 29 5e 0a 20 20  (X,0.0625).)^.  
1a010 5e 28 54 68 65 20 5b 6c 69 6b 65 6c 79 28 58 29  ^(The [likely(X)
1a020 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68  ] function is sh
1a030 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b  ort-hand for lik
1a040 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 39 33 37 35  elihood(X,0.9375
1a050 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ).)^.}..funcdef 
1a060 7b 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b  {likely(X)} {} {
1a070 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79 28 58  .  ^The likely(X
1a080 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1a090 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  ns the argument 
1a0a0 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e  X unchanged..  ^
1a0b0 54 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75  The likely(X) fu
1a0c0 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  nction is a no-o
1a0d0 70 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  p that the code 
1a0e0 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69  generator.  opti
1a0f0 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68  mizes away so th
1a100 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e  at it consumes n
1a110 6f 20 43 50 55 20 63 79 63 6c 65 73 20 61 74 0a  o CPU cycles at.
1a120 20 20 72 75 6e 2d 74 69 6d 65 20 28 74 68 61 74    run-time (that
1a130 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c   is, during call
1a140 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74  s to [sqlite3_st
1a150 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70  ep()])..  ^The p
1a160 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c 69  urpose of the li
1a170 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
1a180 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61   is to provide a
1a190 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71   hint.  to the q
1a1a0 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61  uery planner tha
1a1b0 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58  t the argument X
1a1c0 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   is a boolean va
1a1d0 6c 75 65 0a 20 20 74 68 61 74 20 69 73 20 75 73  lue.  that is us
1a1e0 75 61 6c 6c 79 20 74 72 75 65 2e 20 5e 28 54 68  ually true. ^(Th
1a1f0 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63  e likely(X) func
1a200 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65  tion is equivale
1a210 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68  nt.  to [likelih
1a220 6f 6f 64 5d 28 58 2c 30 2e 39 33 37 35 29 2e 29  ood](X,0.9375).)
1a230 5e 20 53 65 65 20 61 6c 73 6f 3a 20 5b 75 6e 6c  ^ See also: [unl
1a240 69 6b 65 6c 79 28 58 29 5d 2e 0a 7d 0a 0a 66 75  ikely(X)]..}..fu
1a250 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65  ncdef {load_exte
1a260 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78  nsion(X) load_ex
1a270 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d  tension(X,Y)} {}
1a280 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65   {.  ^The load_e
1a290 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75  xtension(X,Y) fu
1a2a0 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 5b 53 51  nction loads [SQ
1a2b0 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 5d  Lite extensions]
1a2c0 20 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61 72   out of the shar
1a2d0 65 64 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c  ed.  library fil
1a2e0 65 20 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20  e named X using 
1a2f0 74 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20  the entry point 
1a300 59 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20  Y.  ^The result 
1a310 6f 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  of load_extensio
1a320 6e 28 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20  n().  is always 
1a330 61 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69  a NULL.  ^If Y i
1a340 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74  s omitted then t
1a350 68 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79  he default entry
1a360 20 70 6f 69 6e 74 20 6e 61 6d 65 20 69 73 20 75   point name is u
1a370 73 65 64 2e 0a 20 20 5e 54 68 65 20 6c 6f 61 64  sed..  ^The load
1a380 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e  _extension() fun
1a390 63 74 69 6f 6e 20 72 61 69 73 65 73 20 61 6e 20  ction raises an 
1a3a0 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65  exception if the
1a3b0 20 65 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73   extension fails
1a3c0 20 74 6f 0a 20 20 6c 6f 61 64 20 6f 72 20 69 6e   to.  load or in
1a3d0 69 74 69 61 6c 69 7a 65 20 63 6f 72 72 65 63 74  itialize correct
1a3e0 6c 79 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c  ly...  <p>^The l
1a3f0 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20  oad_extension() 
1a400 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61  function will fa
1a410 69 6c 20 69 66 20 74 68 65 20 65 78 74 65 6e 73  il if the extens
1a420 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
1a430 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c  .  modify or del
1a440 65 74 65 20 61 6e 20 53 51 4c 20 66 75 6e 63 74  ete an SQL funct
1a450 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67  ion or collating
1a460 20 73 65 71 75 65 6e 63 65 2e 20 20 5e 54 68 65   sequence.  ^The
1a470 0a 20 20 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e  .  extension can
1a480 20 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f   add new functio
1a490 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  ns or collating 
1a4a0 73 65 71 75 65 6e 63 65 73 2c 20 62 75 74 20 63  sequences, but c
1a4b0 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f  annot.  modify o
1a4c0 72 20 64 65 6c 65 74 65 20 65 78 69 73 74 69 6e  r delete existin
1a4d0 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63  g functions or c
1a4e0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1a4f0 65 73 20 62 65 63 61 75 73 65 0a 20 20 74 68 6f  es because.  tho
1a500 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64  se functions and
1a510 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  /or collating se
1a520 71 75 65 6e 63 65 73 20 6d 69 67 68 74 20 62 65  quences might be
1a530 20 75 73 65 64 20 65 6c 73 65 77 68 65 72 65 0a   used elsewhere.
1a540 20 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74    in the current
1a550 6c 79 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73  ly running SQL s
1a560 74 61 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f  tatement.  To lo
1a570 61 64 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ad an extension 
1a580 74 68 61 74 0a 20 20 63 68 61 6e 67 65 73 20 6f  that.  changes o
1a590 72 20 64 65 6c 65 74 65 73 20 66 75 6e 63 74 69  r deletes functi
1a5a0 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67  ons or collating
1a5b0 20 73 65 71 75 65 6e 63 65 73 2c 20 75 73 65 20   sequences, use 
1a5c0 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c  the.  [sqlite3_l
1a5d0 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d  oad_extension()]
1a5e0 20 43 2d 6c 61 6e 67 75 61 67 65 20 41 50 49 2e   C-language API.
1a5f0 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 46 6f 72 20 73  </p>..  <p>For s
1a600 65 63 75 72 69 74 79 20 72 65 61 73 6f 6e 73 2c  ecurity reasons,
1a610 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 65   extension loade
1a620 64 20 69 73 20 74 75 72 6e 65 64 20 6f 66 66 20  d is turned off 
1a630 62 79 20 64 65 66 61 75 6c 74 20 61 6e 64 20 6d  by default and m
1a640 75 73 74 0a 20 20 62 65 20 65 6e 61 62 6c 65 64  ust.  be enabled
1a650 20 62 79 20 61 20 70 72 69 6f 72 20 63 61 6c 6c   by a prior call
1a660 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 65 6e 61   to [sqlite3_ena
1a670 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
1a680 6f 6e 28 29 5d 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75  on()].</p>.}..fu
1a690 6e 63 64 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d  ncdef {lower(X)}
1a6a0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77   {} {.  ^The low
1a6b0 65 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  er(X) function r
1a6c0 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
1a6d0 20 73 74 72 69 6e 67 20 58 20 77 69 74 68 20 61   string X with a
1a6e0 6c 6c 20 41 53 43 49 49 20 63 68 61 72 61 63 74  ll ASCII charact
1a6f0 65 72 73 0a 20 20 63 6f 6e 76 65 72 74 65 64 20  ers.  converted 
1a700 74 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20  to lower case.  
1a710 5e 54 68 65 20 64 65 66 61 75 6c 74 20 62 75 69  ^The default bui
1a720 6c 74 2d 69 6e 20 6c 6f 77 65 72 28 29 20 66 75  lt-in lower() fu
1a730 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66  nction works.  f
1a740 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
1a750 65 72 73 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f  ers only.  To do
1a760 20 63 61 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e   case conversion
1a770 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20  s on non-ASCII. 
1a780 20 63 68 61 72 61 63 74 65 72 73 2c 20 6c 6f 61   characters, loa
1a790 64 20 74 68 65 20 49 43 55 20 65 78 74 65 6e 73  d the ICU extens
1a7a0 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ion..}..funcdef 
1a7b0 7b 6c 74 72 69 6d 28 58 29 20 6c 74 72 69 6d 28  {ltrim(X) ltrim(
1a7c0 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1a7d0 65 20 6c 74 72 69 6d 28 58 2c 59 29 20 66 75 6e  e ltrim(X,Y) fun
1a7e0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1a7f0 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
1a800 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e   removing any an
1a810 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65  d all.  characte
1a820 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  rs that appear i
1a830 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 6c 65 66  n Y from the lef
1a840 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e  t side of X..  ^
1a850 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
1a860 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74  t is omitted, lt
1a870 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73  rim(X) removes s
1a880 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 6c  paces from the l
1a890 65 66 74 20 73 69 64 65 0a 20 20 6f 66 20 58 2e  eft side.  of X.
1a8a0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78  .}..funcdef {max
1a8b0 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78  (X,Y,...)} {*max
1a8c0 43 6f 72 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d  CoreFunc *max {m
1a8d0 61 78 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  ax() SQL functio
1a8e0 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c  n}} {.  ^The mul
1a8f0 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28  ti-argument max(
1a900 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1a910 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  ns the argument 
1a920 77 69 74 68 20 74 68 65 20 0a 20 20 6d 61 78 69  with the .  maxi
1a930 6d 75 6d 20 76 61 6c 75 65 2c 20 6f 72 20 72 65  mum value, or re
1a940 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79  turn NULL if any
1a950 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c   argument is NUL
1a960 4c 2e 20 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69  L. .  ^The multi
1a970 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20  -argument max() 
1a980 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65  function searche
1a990 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20  s its arguments 
1a9a0 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
1a9b0 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75  ht.  for an argu
1a9c0 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
1a9d0 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
1a9e0 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20  nction and uses 
1a9f0 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20  that collating. 
1aa00 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
1aa10 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69  l string compari
1aa20 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20  sons.  ^If none 
1aa30 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  of the arguments
1aa40 20 74 6f 20 6d 61 78 28 29 0a 20 20 64 65 66 69   to max().  defi
1aa50 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ne a collating f
1aa60 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  unction, then th
1aa70 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  e BINARY collati
1aa80 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75  ng function is u
1aa90 73 65 64 2e 0a 20 20 5e 28 4e 6f 74 65 20 74 68  sed..  ^(Note th
1aaa0 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20  at <b>max()</b> 
1aab0 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63  is a simple func
1aac0 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68  tion when.  it h
1aad0 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67  as 2 or more arg
1aae0 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61  uments but opera
1aaf0 74 65 73 20 61 73 20 61 6e 0a 20 20 5b 6d 61 78  tes as an.  [max
1ab00 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67  AggFunc | aggreg
1ab10 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66  ate function] if
1ab20 20 67 69 76 65 6e 20 6f 6e 6c 79 20 61 20 73 69   given only a si
1ab30 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e  ngle argument.)^
1ab40 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e  .}..funcdef {min
1ab50 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e  (X,Y,...)} {*min
1ab60 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d  CoreFunc *min {m
1ab70 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  in() SQL functio
1ab80 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c  n}} {.  ^The mul
1ab90 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28  ti-argument min(
1aba0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1abb0 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  ns the argument 
1abc0 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d  with the.  minim
1abd0 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65  um value..  ^The
1abe0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
1abf0 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  min() function s
1ac00 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
1ac10 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
1ac20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
1ac30 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
1ac40 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
1ac50 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
1ac60 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
1ac70 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
1ac80 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
1ac90 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
1aca0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
1acb0 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a  uments to min().
1acc0 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
1acd0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
1ace0 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
1acf0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1ad00 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e  n is used..  ^(N
1ad10 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28  ote that <b>min(
1ad20 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
1ad30 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
1ad40 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
1ad50 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
1ad60 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 20   operates as an 
1ad70 0a 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c  .  [minAggFunc |
1ad80 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1ad90 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20  ion] if given.  
1ada0 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72  only a single ar
1adb0 67 75 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e  gument.)^.}..fun
1adc0 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59  cdef {nullif(X,Y
1add0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e  )} {} {.  ^The n
1ade0 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74  ullif(X,Y) funct
1adf0 69 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20  ion returns its 
1ae00 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
1ae10 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
1ae20 61 72 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20  are.  different 
1ae30 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20  and NULL if the 
1ae40 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68  arguments are th
1ae50 65 20 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75  e same.  ^The nu
1ae60 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69  llif(X,Y) functi
1ae70 6f 6e 0a 20 20 73 65 61 72 63 68 65 73 20 69 74  on.  searches it
1ae80 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  s arguments from
1ae90 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 66   left to right f
1aea0 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74  or an argument t
1aeb0 68 61 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20  hat defines a.  
1aec0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1aed0 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74  on and uses that
1aee0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1aef0 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
1af00 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73  ng.  comparisons
1af10 2e 20 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61  .  ^If neither a
1af20 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69  rgument to nulli
1af30 66 28 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f  f() defines a co
1af40 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1af50 0a 20 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41  .  then the BINA
1af60 52 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66  RY is used..}..f
1af70 75 6e 63 64 65 66 20 7b 70 72 69 6e 74 66 28 46  uncdef {printf(F
1af80 4f 52 4d 41 54 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b  ORMAT,...)} {} {
1af90 0a 20 20 5e 28 54 68 65 20 70 72 69 6e 74 66 28  .  ^(The printf(
1afa0 46 4f 52 4d 41 54 2c 2e 2e 2e 29 20 53 51 4c 20  FORMAT,...) SQL 
1afb0 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6c  function works l
1afc0 69 6b 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ike the [sqlite3
1afd0 5f 6d 70 72 69 6e 74 66 28 29 5d 20 43 2d 6c 61  _mprintf()] C-la
1afe0 6e 67 75 61 67 65 0a 20 20 66 75 6e 63 74 69 6f  nguage.  functio
1aff0 6e 20 61 6e 64 20 74 68 65 20 70 72 69 6e 74 66  n and the printf
1b000 28 29 20 66 75 6e 63 74 69 6f 6e 20 66 72 6f 6d  () function from
1b010 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
1b020 6c 69 62 72 61 72 79 2e 29 5e 0a 20 20 54 68 65  library.)^.  The
1b030 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
1b040 69 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69  is a format stri
1b050 6e 67 20 74 68 61 74 20 73 70 65 63 69 66 69 65  ng that specifie
1b060 73 20 68 6f 77 20 74 6f 20 63 6f 6e 73 74 72 75  s how to constru
1b070 63 74 20 74 68 65 20 6f 75 74 70 75 74 0a 20 20  ct the output.  
1b080 73 74 72 69 6e 67 20 75 73 69 6e 67 20 76 61 6c  string using val
1b090 75 65 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 73  ues taken from s
1b0a0 75 62 73 65 71 75 65 6e 74 20 61 72 67 75 6d 65  ubsequent argume
1b0b0 6e 74 73 2e 20 20 5e 49 66 20 74 68 65 20 46 4f  nts.  ^If the FO
1b0c0 52 4d 41 54 20 61 72 67 75 6d 65 6e 74 20 69 73  RMAT argument is
1b0d0 0a 20 20 6d 69 73 73 69 6e 67 20 6f 72 20 4e 55  .  missing or NU
1b0e0 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
1b0f0 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 20 5e 54 68  lt is NULL.  ^Th
1b100 65 20 25 6e 20 66 6f 72 6d 61 74 20 69 73 20 73  e %n format is s
1b110 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 20  ilently ignored 
1b120 61 6e 64 0a 20 20 64 6f 65 73 20 6e 6f 74 20 63  and.  does not c
1b130 6f 6e 73 75 6d 65 20 61 6e 20 61 72 67 75 6d 65  onsume an argume
1b140 6e 74 2e 20 20 5e 54 68 65 20 25 70 20 66 6f 72  nt.  ^The %p for
1b150 6d 61 74 20 69 73 20 61 6e 20 61 6c 69 61 73 20  mat is an alias 
1b160 66 6f 72 20 25 58 2e 20 20 5e 54 68 65 20 25 7a  for %X.  ^The %z
1b170 20 66 6f 72 6d 61 74 0a 20 20 69 73 20 69 6e 74   format.  is int
1b180 65 72 63 68 61 6e 67 65 61 62 6c 65 20 77 69 74  erchangeable wit
1b190 68 20 25 73 2e 20 20 5e 28 49 66 20 74 68 65 72  h %s.  ^(If ther
1b1a0 65 20 61 72 65 20 74 6f 6f 20 66 65 77 20 61 72  e are too few ar
1b1b0 67 75 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61  guments in the a
1b1c0 72 67 75 6d 65 6e 74 20 6c 69 73 74 2c 0a 20 20  rgument list,.  
1b1d0 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74  missing argument
1b1e0 73 20 61 72 65 20 61 73 73 75 6d 65 64 20 74 6f  s are assumed to
1b1f0 20 68 61 76 65 20 61 20 4e 55 4c 4c 20 76 61 6c   have a NULL val
1b200 75 65 2c 20 77 68 69 63 68 20 69 73 20 74 72 61  ue, which is tra
1b210 6e 73 6c 61 74 65 64 20 69 6e 74 6f 0a 20 20 30  nslated into.  0
1b220 20 6f 72 20 30 2e 30 20 66 6f 72 20 6e 75 6d 65   or 0.0 for nume
1b230 72 69 63 20 66 6f 72 6d 61 74 73 20 6f 72 20 61  ric formats or a
1b240 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 66  n empty string f
1b250 6f 72 20 25 73 2e 29 5e 0a 7d 0a 20 20 0a 0a 66  or %s.)^.}.  ..f
1b260 75 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29  uncdef {quote(X)
1b270 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75  } {} {.  ^The qu
1b280 6f 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ote(X) function 
1b290 72 65 74 75 72 6e 73 20 74 68 65 20 74 65 78 74  returns the text
1b2a0 20 6f 66 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   of an SQL liter
1b2b0 61 6c 20 77 68 69 63 68 0a 20 20 69 73 20 74 68  al which.  is th
1b2c0 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20 61  e value of its a
1b2d0 72 67 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65  rgument suitable
1b2e0 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69   for inclusion i
1b2f0 6e 74 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65  nto an SQL state
1b300 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73  ment..  ^Strings
1b310 20 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20   are surrounded 
1b320 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73  by single-quotes
1b330 20 77 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e   with escapes on
1b340 20 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73   interior quotes
1b350 0a 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e  .  as needed.  ^
1b360 42 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65  BLOBs are encode
1b370 64 20 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c  d as hexadecimal
1b380 20 6c 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74   literals..  ^St
1b390 72 69 6e 67 73 20 77 69 74 68 20 65 6d 62 65 64  rings with embed
1b3a0 64 65 64 20 4e 55 4c 20 63 68 61 72 61 63 74 65  ded NUL characte
1b3b0 72 73 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 70  rs cannot be rep
1b3c0 72 65 73 65 6e 74 65 64 20 61 73 20 73 74 72 69  resented as stri
1b3d0 6e 67 0a 20 20 6c 69 74 65 72 61 6c 73 20 69 6e  ng.  literals in
1b3e0 20 53 51 4c 20 61 6e 64 20 68 65 6e 63 65 20 74   SQL and hence t
1b3f0 68 65 20 72 65 74 75 72 6e 65 64 20 73 74 72 69  he returned stri
1b400 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 74 72  ng literal is tr
1b410 75 6e 63 61 74 65 64 20 70 72 69 6f 72 0a 20 20  uncated prior.  
1b420 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c  to the first NUL
1b430 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61  ..}..funcdef {ra
1b440 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ndom()} {} {.  ^
1b450 54 68 65 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e  The random() fun
1b460 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1b470 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e  pseudo-random in
1b480 74 65 67 65 72 0a 20 20 62 65 74 77 65 65 6e 20  teger.  between 
1b490 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
1b4a0 35 38 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37  5808 and +922337
1b4b0 32 30 33 36 38 35 34 37 37 35 38 30 37 2e 0a 7d  2036854775807..}
1b4c0 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f  ..funcdef {rando
1b4d0 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20  mblob(N)} {} {. 
1b4e0 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62   ^The randomblob
1b4f0 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (N) function ret
1b500 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c  urn an N-byte bl
1b510 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73  ob containing ps
1b520 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79  eudo-random.  by
1b530 74 65 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65  tes. ^If N is le
1b540 73 73 20 74 68 61 6e 20 31 20 74 68 65 6e 20 61  ss than 1 then a
1b550 20 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20 62   1-byte random b
1b560 6c 6f 62 20 69 73 20 72 65 74 75 72 6e 65 64 2e  lob is returned.
1b570 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70  ..  <p>Hint:  ap
1b580 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 67  plications can g
1b590 65 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79  enerate globally
1b5a0 20 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69   unique identifi
1b5b0 65 72 73 0a 20 20 75 73 69 6e 67 20 74 68 69 73  ers.  using this
1b5c0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68   function togeth
1b5d0 65 72 20 77 69 74 68 20 5b 68 65 78 28 29 5d 20  er with [hex()] 
1b5e0 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28  and/or.  [lower(
1b5f0 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70  )] like this:</p
1b600 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65  >..  <blockquote
1b610 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c  >.  hex(randombl
1b620 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e  ob(16))<br></br>
1b630 0a 20 20 6c 6f 77 65 72 28 68 65 78 28 72 61 6e  .  lower(hex(ran
1b640 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20 20  domblob(16))).  
1b650 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a  </blockquote>.}.
1b660 0a 66 75 6e 63 64 65 66 20 7b 72 65 70 6c 61 63  .funcdef {replac
1b670 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20  e(X,Y,Z)} {} {. 
1b680 20 5e 54 68 65 20 72 65 70 6c 61 63 65 28 58 2c   ^The replace(X,
1b690 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  Y,Z) function re
1b6a0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
1b6b0 6f 72 6d 65 64 20 62 79 20 73 75 62 73 74 69 74  ormed by substit
1b6c0 75 74 69 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a  uting.  string Z
1b6d0 20 66 6f 72 20 65 76 65 72 79 20 6f 63 63 75 72   for every occur
1b6e0 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20  rence of string 
1b6f0 59 20 69 6e 20 73 74 72 69 6e 67 20 58 2e 20 20  Y in string X.  
1b700 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20  ^The [BINARY].  
1b710 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
1b720 63 65 20 69 73 20 75 73 65 64 20 66 6f 72 20 63  ce is used for c
1b730 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
1b740 20 59 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 20   Y is an empty. 
1b750 20 73 74 72 69 6e 67 20 74 68 65 6e 20 72 65 74   string then ret
1b760 75 72 6e 20 58 20 75 6e 63 68 61 6e 67 65 64 2e  urn X unchanged.
1b770 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20 69    ^If Z is not i
1b780 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20 73 74 72  nitially.  a str
1b790 69 6e 67 2c 20 69 74 20 69 73 20 63 61 73 74 20  ing, it is cast 
1b7a0 74 6f 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e  to a UTF-8 strin
1b7b0 67 20 70 72 69 6f 72 20 74 6f 20 70 72 6f 63 65  g prior to proce
1b7c0 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ssing..}..funcde
1b7d0 66 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e  f {round(X) roun
1b7e0 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  d(X,Y)} {} {.  ^
1b7f0 54 68 65 20 72 6f 75 6e 64 28 58 2c 59 29 20 66  The round(X,Y) f
1b800 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1b810 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  a floating-point
1b820 0a 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e 64  .  value X round
1b830 65 64 20 74 6f 20 59 20 64 69 67 69 74 73 20 74  ed to Y digits t
1b840 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74  o the right of t
1b850 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
1b860 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
1b870 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
1b880 64 2c 20 69 74 20 69 73 20 61 73 73 75 6d 65 64  d, it is assumed
1b890 20 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e   to be 0..}..fun
1b8a0 63 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20 72  cdef {rtrim(X) r
1b8b0 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
1b8c0 20 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c 59    ^The rtrim(X,Y
1b8d0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1b8e0 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
1b8f0 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61  ed by removing a
1b900 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61  ny and all.  cha
1b910 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70  racters that app
1b920 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68  ear in Y from th
1b930 65 20 72 69 67 68 74 20 73 69 64 65 20 6f 66 20  e right side of 
1b940 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  X..  ^If the Y a
1b950 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
1b960 65 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65 6d  ed, rtrim(X) rem
1b970 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
1b980 20 74 68 65 20 72 69 67 68 74 0a 20 20 73 69 64   the right.  sid
1b990 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64  e of X..}..funcd
1b9a0 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20  ef {soundex(X)} 
1b9b0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e  {} {.  ^The soun
1b9c0 64 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  dex(X) function 
1b9d0 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
1b9e0 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75   that is the sou
1b9f0 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20  ndex encoding . 
1ba00 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
1ba10 2e 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20  ..  ^The string 
1ba20 22 3f 30 30 30 22 20 69 73 20 72 65 74 75 72 6e  "?000" is return
1ba30 65 64 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ed if the argume
1ba40 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f  nt is NULL or co
1ba50 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49  ntains.  no ASCI
1ba60 49 20 61 6c 70 68 61 62 65 74 69 63 20 63 68 61  I alphabetic cha
1ba70 72 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68 69  racters..  ^(Thi
1ba80 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d  s function is om
1ba90 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74  itted from SQLit
1baa0 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20  e by default..  
1bab0 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  It is only avail
1bac0 61 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51 4c  able if the [SQL
1bad0 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d  ITE_SOUNDEX] com
1bae0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
1baf0 0a 20 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  .  is used when 
1bb00 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e  SQLite is built.
1bb10 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  )^.}..funcdef {s
1bb20 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
1bb30 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b  ion_get(N)} {} {
1bb40 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63  .  ^The sqlite_c
1bb50 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
1bb60 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  () SQL function 
1bb70 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f  is a wrapper aro
1bb80 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  und the.  [sqlit
1bb90 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  e3_compileoption
1bba0 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75  _get()] C/C++ fu
1bbb0 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20  nction..  ^This 
1bbc0 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20  routine returns 
1bbd0 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65  the N-th compile
1bbe0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65  -time option use
1bbf0 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74  d to build SQLit
1bc00 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e  e.  or NULL if N
1bc10 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
1bc20 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20  .  See also the 
1bc30 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73  [compile_options
1bc40 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e   pragma]..}..fun
1bc50 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d  cdef {sqlite_com
1bc60 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
1bc70 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1bc80 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
1bc90 74 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c 20  tion_used() SQL 
1bca0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
1bcb0 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
1bcc0 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70  .  [sqlite3_comp
1bcd0 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29  ileoption_used()
1bce0 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e  ] C/C++ function
1bcf0 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61 72  ..  ^When the ar
1bd00 67 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c 69  gument X to sqli
1bd10 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
1bd20 5f 75 73 65 64 28 58 29 20 69 73 20 61 20 73 74  _used(X) is a st
1bd30 72 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73 20  ring which.  is 
1bd40 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f  the name of a co
1bd50 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
1bd60 6e 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  n, this routine 
1bd70 72 65 74 75 72 6e 73 20 74 72 75 65 20 28 31 29  returns true (1)
1bd80 20 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29 20   or.  false (0) 
1bd90 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
1bda0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74  ther or not that
1bdb0 20 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65 64   option was used
1bdc0 20 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62 75   during the.  bu
1bdd0 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ild..}..funcdef 
1bde0 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69  {sqlite_source_i
1bdf0 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  d()} {} {.  ^The
1be00 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69   sqlite_source_i
1be10 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  d() function ret
1be20 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68  urns a string th
1be30 61 74 20 69 64 65 6e 74 69 66 69 65 73 20 74 68  at identifies th
1be40 65 0a 20 20 73 70 65 63 69 66 69 63 20 76 65 72  e.  specific ver
1be50 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75 72  sion of the sour
1be60 63 65 20 63 6f 64 65 20 74 68 61 74 20 77 61 73  ce code that was
1be70 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74   used to build t
1be80 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72  he SQLite.  libr
1be90 61 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69 6e  ary.  ^The strin
1bea0 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  g returned by sq
1beb0 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29  lite_source_id()
1bec0 20 62 65 67 69 6e 73 20 77 69 74 68 0a 20 20 74   begins with.  t
1bed0 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
1bee0 20 74 68 61 74 20 74 68 65 20 73 6f 75 72 63 65   that the source
1bef0 20 63 6f 64 65 20 77 61 73 20 63 68 65 63 6b 65   code was checke
1bf00 64 20 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c 6c  d in and is foll
1bf10 6f 77 73 20 62 79 0a 20 20 61 6e 20 53 48 41 31  ows by.  an SHA1
1bf20 20 68 61 73 68 20 74 68 61 74 20 75 6e 69 71 75   hash that uniqu
1bf30 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20 74  ely identifies t
1bf40 68 65 20 73 6f 75 72 63 65 20 74 72 65 65 2e 20  he source tree. 
1bf50 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20   ^This function 
1bf60 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61 70  is.  an SQL wrap
1bf70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b  per around the [
1bf80 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64  sqlite3_sourceid
1bf90 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65 2e  ()] C interface.
1bfa0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c  .}..funcdef {sql
1bfb0 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b  ite_version()} {
1bfc0 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74  } {.  ^The sqlit
1bfd0 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63  e_version() func
1bfe0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1bff0 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20   version string 
1c000 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a 20  for the SQLite. 
1c010 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69 73   library that is
1c020 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73   running.  ^This
1c030 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20   function is an 
1c040 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61 72  SQL.  wrapper ar
1c050 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
1c060 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d 20  3_libversion()] 
1c070 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a  C-interface..}..
1c080 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28  funcdef {substr(
1c090 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c  X,Y,Z) substr(X,
1c0a0 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1c0b0 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66 75  substr(X,Y,Z) fu
1c0c0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1c0d0 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e   substring of in
1c0e0 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68 61  put string X tha
1c0f0 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20  t begins.  with 
1c100 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74  the Y-th charact
1c110 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73 20  er and which is 
1c120 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  Z characters lon
1c130 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d  g..  ^If Z is om
1c140 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73 74  itted then subst
1c150 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20 61  r(X,Y) returns a
1c160 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74 68  ll characters th
1c170 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20 20  rough the end.  
1c180 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 20  of the string X 
1c190 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74  beginning with t
1c1a0 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20  he Y-th..  ^The 
1c1b0 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63  left-most charac
1c1c0 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d 62  ter of X is numb
1c1d0 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73 20  er 1.  ^If Y is 
1c1e0 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e 20  negative.  then 
1c1f0 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63  the first charac
1c200 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73 74  ter of the subst
1c210 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79  ring is found by
1c220 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74   counting from t
1c230 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68 65  he.  right rathe
1c240 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e  r than the left.
1c250 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61 74    ^If Z is negat
1c260 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20 61  ive then.  the a
1c270 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72 73  bs(Z) characters
1c280 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20 59   preceding the Y
1c290 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61 72  -th character ar
1c2a0 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49  e returned..  ^I
1c2b0 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20  f X is a string 
1c2c0 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73 20  then characters 
1c2d0 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74 6f  indices refer to
1c2e0 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a 20   actual UTF-8 . 
1c2f0 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e 49   characters.  ^I
1c300 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74 68  f X is a BLOB th
1c310 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20 72  en the indices r
1c320 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d  efer to bytes..}
1c330 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c  ..funcdef {total
1c340 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b  _changes()} {} {
1c350 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68  .  ^The total_ch
1c360 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e  anges() function
1c370 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
1c380 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67  ber of row chang
1c390 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20 49  es.  caused by I
1c3a0 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
1c3b0 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d   DELETE.  statem
1c3c0 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20 63  ents since the c
1c3d0 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20  urrent database 
1c3e0 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f  connection was o
1c3f0 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20 66  pened..  ^This f
1c400 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
1c410 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
1c420 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63  [sqlite3_total_c
1c430 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b  hanges()].  C/C+
1c440 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a  + interface..}..
1c450 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29  funcdef {trim(X)
1c460 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b   trim(X,Y)} {} {
1c470 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c 59  .  ^The trim(X,Y
1c480 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1c490 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
1c4a0 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61  ed by removing a
1c4b0 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61  ny and all.  cha
1c4c0 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70  racters that app
1c4d0 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f  ear in Y from bo
1c4e0 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20  th ends of X..  
1c4f0 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65  ^If the Y argume
1c500 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74  nt is omitted, t
1c510 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73  rim(X) removes s
1c520 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68 20  paces from both 
1c530 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75  ends of X..}..fu
1c540 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29  ncdef {typeof(X)
1c550 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79  } {} {.  ^The ty
1c560 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f 6e  peof(X) function
1c570 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
1c580 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  g that indicates
1c590 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20   the [datatype] 
1c5a0 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73 73  of.  the express
1c5b0 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22  ion X: "null", "
1c5c0 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22  integer", "real"
1c5d0 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62 6c  , "text", or "bl
1c5e0 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ob"..}..funcdef 
1c5f0 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d  {unlikely(X)} {}
1c600 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65   {.  ^The unlike
1c610 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  ly(X) function r
1c620 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
1c630 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e  ent X unchanged.
1c640 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79  .  ^The unlikely
1c650 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
1c660 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65  a no-op that the
1c670 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a   code generator.
1c680 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79    optimizes away
1c690 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73   so that it cons
1c6a0 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c  umes no CPU cycl
1c6b0 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65  es at.  run-time
1c6c0 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e   (that is, durin
1c6d0 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69  g calls to [sqli
1c6e0 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20  te3_step()])..  
1c6f0 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20  ^The purpose of 
1c700 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  the unlikely(X) 
1c710 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70  function is to p
1c720 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20  rovide a hint.  
1c730 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  to the query pla
1c740 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72  nner that the ar
1c750 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f  gument X is a bo
1c760 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68  olean value.  th
1c770 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e 6f  at is usually no
1c780 74 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75 6e  t true. ^(The un
1c790 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69  likely(X) functi
1c7a0 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  on is equivalent
1c7b0 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f  .  to [likelihoo
1c7c0 64 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29 5e  d](X, 0.0625).)^
1c7d0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 69  .}..funcdef {uni
1c7e0 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  code(X)} {} {.  
1c7f0 5e 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29 20  ^The unicode(X) 
1c800 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1c810 20 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e 69   the numeric uni
1c820 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20  code code point 
1c830 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1c840 0a 20 20 74 68 65 20 66 69 72 73 74 20 63 68 61  .  the first cha
1c850 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 74  racter of the st
1c860 72 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65 20  ring X.  If the 
1c870 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69 63  argument to unic
1c880 6f 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61 20  ode(X) is not a 
1c890 73 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74 68  string.  then th
1c8a0 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65  e result is unde
1c8b0 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65  fined..}..funcde
1c8c0 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20  f {upper(X)} {} 
1c8d0 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58  {.  ^The upper(X
1c8e0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1c8f0 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70  ns a copy of inp
1c900 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77  ut string X in w
1c910 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65  hich all .  lowe
1c920 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61  r-case ASCII cha
1c930 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76  racters are conv
1c940 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75  erted to their u
1c950 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61  pper-case equiva
1c960 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lent..}..funcdef
1c970 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b   {zeroblob(N)} {
1c980 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62  } {.  ^The zerob
1c990 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20  lob(N) function 
1c9a0 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63  returns a BLOB c
1c9b0 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62  onsisting of N b
1c9c0 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20  ytes of 0x00..  
1c9d0 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74  SQLite manages t
1c9e0 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76  hese zeroblobs v
1c9f0 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e  ery efficiently.
1ca00 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20    Zeroblobs can 
1ca10 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73  be used to.  res
1ca20 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61  erve space for a
1ca30 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61   BLOB that is la
1ca40 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e  ter written usin
1ca50 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c  g .  [sqlite3_bl
1ca60 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72  ob_open() | incr
1ca70 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f  emental BLOB I/O
1ca80 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66  ]..  ^This SQL f
1ca90 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65  unction is imple
1caa0 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65  mented using the
1cab0 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74   [sqlite3_result
1cac0 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72  _zeroblob()].  r
1cad0 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20  outine from the 
1cae0 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e  C/C++ interface.
1caf0 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c  .}.</tcl>.</tabl
1cb00 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  e>..<tcl>.######
1cb10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb50 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1cb60 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20   {Date And Time 
1cb70 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66  Functions} datef
1cb80 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 20 7b  unc {*datefunc {
1cb90 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
1cba0 6e 63 74 69 6f 6e 73 7d 7d 0a 68 64 5f 6b 65 79  nctions}}.hd_key
1cbb0 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20 53 51  words {date() SQ
1cbc0 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74 69 6d  L function} {tim
1cbd0 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
1cbe0 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64  }.hd_keywords {d
1cbf0 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20 66 75  atetime() SQL fu
1cc00 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e 64  nction} {juliand
1cc10 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  ay() SQL functio
1cc20 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  n}.hd_keywords {
1cc30 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c 20 66  strftime() SQL f
1cc40 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e 0a  unction}.</tcl>.
1cc50 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75 70 70  .<p>.SQLite supp
1cc60 6f 72 74 73 20 66 69 76 65 20 64 61 74 65 20 61  orts five date a
1cc70 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1cc80 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f  s as follows:.</
1cc90 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69  p>..<p>.<ol>.<li
1cca0 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f 62 3e  > ^(<b>date(</b>
1ccb0 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
1ccc0 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1ccd0 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1cce0 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
1ccf0 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69  ^(<b>time(</b><i
1cd00 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
1cd10 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
1cd20 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
1cd30 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
1cd40 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e  <b>datetime(</b>
1cd50 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
1cd60 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1cd70 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1cd80 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
1cd90 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c  ^(<b>julianday(<
1cda0 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
1cdb0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
1cdc0 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
1cdd0 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
1cde0 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69 6d 65  i> ^(<b>strftime
1cdf0 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20  (</b><i>format, 
1ce00 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
1ce10 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
1ce20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
1ce30 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c  ^ </li>.</ol>..<
1ce40 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64 61 74  p>.^All five dat
1ce50 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1ce60 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69 6d 65  ions take a time
1ce70 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61 72   string as an ar
1ce80 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20 74 69  gument. .^The ti
1ce90 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66 6f 6c  me string is fol
1cea0 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
1ceb0 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 2e   more modifiers.
1cec0 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28   .^The strftime(
1ced0 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20  ) function also 
1cee0 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74 20 73  takes a format s
1cef0 74 72 69 6e 67 20 61 73 20 69 74 73 20 66 69 72  tring as its fir
1cf00 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70  st argument..</p
1cf10 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65 20  >..<p>.The date 
1cf20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1cf30 6e 73 20 75 73 65 20 61 20 73 75 62 73 65 74 20  ns use a subset 
1cf40 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  of.[http://en.wi
1cf50 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1cf60 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53 30 2d  /ISO_8601 | IS0-
1cf70 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64 20 74  8601] date and t
1cf80 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54 68  ime.formats..^Th
1cf90 65 20 64 61 74 65 28 29 20 66 75 6e 63 74 69 6f  e date() functio
1cfa0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61  n returns the da
1cfb0 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72 6d 61  te in this forma
1cfc0 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 0a  t: YYYY-MM-DD. .
1cfd0 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75 6e 63  ^The time() func
1cfe0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1cff0 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53   time as HH:MM:S
1d000 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74 69 6d  S. .^The datetim
1d010 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  e() function ret
1d020 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44  urns "YYYY-MM-DD
1d030 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28 54   HH:MM:SS". .^(T
1d040 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29 20 66  he julianday() f
1d050 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1d060 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  the .[http://en.
1d070 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1d080 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20  ki/Julian_day | 
1d090 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20 74 68  Julian day] - th
1d0a0 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73  e.number of days
1d0b0 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47   since noon in G
1d0c0 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65  reenwich on Nove
1d0d0 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20 42 2e  mber 24, 4714 B.
1d0e0 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e 2e  C. .([http://en.
1d0f0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1d100 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72 65  ki/Proleptic_Gre
1d110 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20  gorian_calendar 
1d120 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72 65 67  | Proleptic Greg
1d130 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 29  orian calendar])
1d140 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74 69 6d  .)^.^The strftim
1d150 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 74 75  e() routine retu
1d160 72 6e 73 20 74 68 65 20 64 61 74 65 20 66 6f 72  rns the date for
1d170 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69 6e 67  matted according
1d180 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74 20   to .the format 
1d190 73 74 72 69 6e 67 20 73 70 65 63 69 66 69 65 64  string specified
1d1a0 20 61 73 20 74 68 65 20 66 69 72 73 74 20 61 72   as the first ar
1d1b0 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66 6f 72  gument..^The for
1d1c0 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70 70 6f  mat string suppo
1d1d0 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d  rts the most com
1d1e0 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69 6f 6e  mon substitution
1d1f0 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 0a  s found in the .
1d200 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75  [http://opengrou
1d210 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73  p.org/onlinepubs
1d220 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68 2f 73  /007908799/xsh/s
1d230 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c 20 73  trftime.html | s
1d240 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69  trftime() functi
1d250 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73 74 61  on].from the sta
1d260 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 20  ndard C library 
1d270 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73 75 62  plus two new sub
1d280 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66 20 61  stitutions, %f a
1d290 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66 6f 6c  nd %J..^(The fol
1d2a0 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f 6d 70  lowing is a comp
1d2b0 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76 61 6c  lete list of val
1d2c0 69 64 20 73 74 72 66 74 69 6d 65 28 29 20 73 75  id strftime() su
1d2d0 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70  bstitutions:.</p
1d2e0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1d2f0 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30  <table border="0
1d300 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30  " cellpadding="0
1d310 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30  " cellspacing="0
1d320 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77  ">.<tr><td><td w
1d330 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f  idth="10"><td></
1d340 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64  tr>..<tr><td> %d
1d350 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66   <td><td> day of
1d360 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c   month: 00.<tr><
1d370 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20  td> %f <td><td> 
1d380 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e  fractional secon
1d390 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c  ds: SS.SSS.<tr><
1d3a0 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20  td> %H <td><td> 
1d3b0 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72  hour: 00-24 .<tr
1d3c0 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64  ><td> %j <td><td
1d3d0 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a 20 30  > day of year: 0
1d3e0 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20  01-366.<tr><td> 
1d3f0 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69  %J <td><td> Juli
1d400 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74  an day number.<t
1d410 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74  r><td> %m <td><t
1d420 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a  d> month: 01-12.
1d430 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e  <tr><td> %M <td>
1d440 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d  <td> minute: 00-
1d450 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c  59.<tr><td> %s <
1d460 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20  td><td> seconds 
1d470 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d 30 31  since 1970-01-01
1d480 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64  .<tr><td> %S <td
1d490 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30  ><td> seconds: 0
1d4a0 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77  0-59.<tr><td> %w
1d4b0 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66   <td><td> day of
1d4c0 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68 20 53   week 0-6 with S
1d4d0 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64  unday==0.<tr><td
1d4e0 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65  > %W <td><td> we
1d4f0 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30 2d 35  ek of year: 00-5
1d500 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74  3.<tr><td> %Y <t
1d510 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30 30 30  d><td> year: 000
1d520 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20  0-9999.<tr><td> 
1d530 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f  %% <td><td> %.</
1d540 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
1d550 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e 6f  ote>)^..<p>.^(No
1d560 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20 6f 74  tice that all ot
1d570 68 65 72 20 64 61 74 65 20 61 6e 64 20 74 69 6d  her date and tim
1d580 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20  e functions can 
1d590 62 65 20 65 78 70 72 65 73 73 65 64 0a 69 6e 20  be expressed.in 
1d5a0 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74 69 6d  terms of strftim
1d5b0 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  e():.</p>..<bloc
1d5c0 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62  kquote>.<table b
1d5d0 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61  order="0" cellpa
1d5e0 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70  dding="0" cellsp
1d5f0 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c  acing="0">.<tr><
1d600 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c 2f  td><b>Function</
1d610 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33 30 22  b><td width="30"
1d620 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c 65  ><td><b>Equivale
1d630 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c 2f 62  nt strftime()</b
1d640 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74  >.<tr><td>   dat
1d650 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e  e(...)      <td>
1d660 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
1d670 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29 0a  %Y-%m-%d', ...).
1d680 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65 28  <tr><td>   time(
1d690 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74  ...)      <td><t
1d6a0 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 48  d>  strftime('%H
1d6b0 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74  :%M:%S', ...).<t
1d6c0 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74 69 6d  r><td>   datetim
1d6d0 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64 3e  e(...)  <td><td>
1d6e0 20 20 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25    strftime('%Y-%
1d6f0 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20  m-%d %H:%M:%S', 
1d700 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
1d710 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20 3c  julianday(...) <
1d720 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
1d730 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f 74  e('%J', ...).</t
1d740 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  able>.</blockquo
1d750 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20 6f  te>)^..<p>.The o
1d760 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f 72 20  nly reasons for 
1d770 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63 74 69  providing functi
1d780 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e 20 73  ons other than s
1d790 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66 6f 72  trftime() is.for
1d7a0 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64   convenience and
1d7b0 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63 79 2e   for efficiency.
1d7c0 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20  .</p>..<h3>Time 
1d7d0 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70  Strings</h3>..<p
1d7e0 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69 6e 67  >^(A time string
1d7f0 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f   can be in any o
1d800 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1d810 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f  formats:</p>..<o
1d820 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  l>.<li> <i>YYYY-
1d830 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM-DD</i>.<li> <
1d840 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a  i>YYYY-MM-DD HH:
1d850 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  MM</i>.<li> <i>Y
1d860 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
1d870 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  SS</i>.<li> <i>Y
1d880 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
1d890 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
1d8a0 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
1d8b0 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
1d8c0 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  M</i>.<li> <i>YY
1d8d0 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54  YY-MM-DD</i><b>T
1d8e0 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c  </b><i>HH:MM:SS<
1d8f0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1d900 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
1d910 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53  b><i>HH:MM:SS.SS
1d920 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  S</i>.<li> <i>HH
1d930 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
1d940 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
1d950 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53  > <i>HH:MM:SS.SS
1d960 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f  S</i>.<li> <b>no
1d970 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44  w</b>.<li> <i>DD
1d980 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f  DDDDDDDD</i>.</o
1d990 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66 6f  l>)^..<p>.^In fo
1d9a0 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67 68 20  rmats 5 through 
1d9b0 37 2c 20 74 68 65 20 22 54 22 20 69 73 20 61 20  7, the "T" is a 
1d9c0 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63 74 65  literal characte
1d9d0 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a 74 68  r separating .th
1d9e0 65 20 64 61 74 65 20 61 6e 64 20 74 68 65 20 74  e date and the t
1d9f0 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72 65 64  ime, as required
1da00 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77 77 77   by .[http://www
1da10 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45  .w3c.org/TR/NOTE
1da20 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53 4f 2d  -datetime | ISO-
1da30 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74 73  8601]. .^Formats
1da40 20 38 20 74 68 72 6f 75 67 68 20 31 30 20 74 68   8 through 10 th
1da50 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c 79 20  at specify only 
1da60 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20 61 20  a time assume a 
1da70 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d 30 31  date of .2000-01
1da80 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20  -01. Format 11, 
1da90 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f 77 27  the string 'now'
1daa0 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69  , is converted i
1dab0 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65 6e 74  nto the .current
1dac0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 61   date and time a
1dad0 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  s obtained from 
1dae0 74 68 65 20 78 43 75 72 72 65 6e 74 54 69 6d 65  the xCurrentTime
1daf0 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b   method.of the [
1db00 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a  sqlite3_vfs] obj
1db10 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 54 68 65  ect in use..^The
1db20 20 27 6e 6f 77 27 20 61 72 67 75 6d 65 6e 74 20   'now' argument 
1db30 74 6f 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  to date and time
1db40 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 77 61 79   functions alway
1db50 73 20 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c  s returns exactl
1db60 79 20 74 68 65 0a 73 61 6d 65 20 76 61 6c 75 65  y the.same value
1db70 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 69 6e   for multiple in
1db80 76 6f 63 61 74 69 6f 6e 73 20 77 69 74 68 69 6e  vocations within
1db90 20 74 68 65 20 73 61 6d 65 20 5b 73 71 6c 69 74   the same [sqlit
1dba0 65 33 5f 73 74 65 70 28 29 5d 20 63 61 6c 6c 2e  e3_step()] call.
1dbb0 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  .^[http://en.wik
1dbc0 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
1dbd0 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76  Coordinated_Univ
1dbe0 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69  ersal_Time | Uni
1dbf0 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74  versal Coordinat
1dc00 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20 69  ed Time (UTC)] i
1dc10 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74  s used. .^Format
1dc20 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74 74   12 is the .[htt
1dc30 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1dc40 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e  .org/wiki/Julian
1dc50 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61  _day | Julian da
1dc60 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65 73  y number].expres
1dc70 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69 6e  sed as a floatin
1dc80 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c  g point value..<
1dc90 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d 61 74 73  /p>..<p>.Formats
1dca0 20 32 20 74 68 72 6f 75 67 68 20 31 30 20 6d 61   2 through 10 ma
1dcb0 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  y be optionally 
1dcc0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 74 69  followed by a ti
1dcd0 6d 65 7a 6f 6e 65 20 69 6e 64 69 63 61 74 6f 72  mezone indicator
1dce0 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a 22 3c 69   of the form."<i
1dcf0 3e 26 23 39 31 3b 2b 2d 26 23 39 33 3b 48 48 3a  >&#91;+-&#93;HH:
1dd00 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a 75 73 74 20  MM</i>" or just 
1dd10 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20 20 54 68 65  "<i>Z</i>".  The
1dd20 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
1dd30 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 55 54 43  unctions use UTC
1dd40 20 6f 72 20 22 7a 75 6c 75 22 0a 74 69 6d 65 20   or "zulu".time 
1dd50 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 61 6e 64 20  internally, and 
1dd60 73 6f 20 74 68 65 20 22 5a 22 20 73 75 66 66 69  so the "Z" suffi
1dd70 78 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 41  x is a no-op.  A
1dd80 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20 22 48 48 3a  ny non-zero "HH:
1dd90 4d 4d 22 20 73 75 66 66 69 78 20 69 73 0a 73 75  MM" suffix is.su
1dda0 62 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68  btracted from th
1ddb0 65 20 69 6e 64 69 63 61 74 65 64 20 64 61 74 65  e indicated date
1ddc0 20 61 6e 64 20 74 69 6d 65 20 69 6e 20 6f 72 64   and time in ord
1ddd0 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 20 7a 75  er to compute zu
1dde0 6c 75 20 74 69 6d 65 2e 0a 46 6f 72 20 65 78 61  lu time..For exa
1ddf0 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66 20 74 68 65  mple, all of the
1de00 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 69 6d 65 20   following time 
1de10 73 74 72 69 6e 67 73 20 61 72 65 20 65 71 75 69  strings are equi
1de20 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a 3c 62  valent:.</p>..<b
1de30 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32 30 31 33 2d  lockquote>.2013-
1de40 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39 2e 31  10-07 08:23:19.1
1de50 32 30 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30  20<br>.2013-10-0
1de60 37 54 30 38 3a 32 33 3a 31 39 2e 31 32 30 5a 3c  7T08:23:19.120Z<
1de70 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30  br>.2013-10-07 0
1de80 34 3a 32 33 3a 31 39 2e 31 32 30 2d 30 34 3a 30  4:23:19.120-04:0
1de90 30 3c 62 72 3e 0a 32 34 35 36 35 37 32 2e 38 34  0<br>.2456572.84
1dea0 39 35 32 36 38 35 0a 3c 2f 62 6c 6f 63 6b 71 75  952685.</blockqu
1deb0 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e 20 66  ote>..<p>.^(In f
1dec0 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20 61 6e 64  ormats 4, 7, and
1ded0 20 31 30 2c 20 74 68 65 20 66 72 61 63 74 69 6f   10, the fractio
1dee0 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76 61 6c 75  nal seconds valu
1def0 65 20 53 53 2e 53 53 53 20 63 61 6e 20 68 61 76  e SS.SSS can hav
1df00 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69  e.one or more di
1df10 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  gits following t
1df20 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
1df30 2e 20 20 45 78 61 63 74 6c 79 20 74 68 72 65 65  .  Exactly three
1df40 20 64 69 67 69 74 73 20 61 72 65 0a 73 68 6f 77   digits are.show
1df50 6e 20 69 6e 20 74 68 65 20 65 78 61 6d 70 6c 65  n in the example
1df60 73 20 62 65 63 61 75 73 65 20 6f 6e 6c 79 20 74  s because only t
1df70 68 65 20 66 69 72 73 74 20 74 68 72 65 65 20 64  he first three d
1df80 69 67 69 74 73 20 61 72 65 20 73 69 67 6e 69 66  igits are signif
1df90 69 63 61 6e 74 0a 74 6f 20 74 68 65 20 72 65 73  icant.to the res
1dfa0 75 6c 74 2c 20 62 75 74 20 74 68 65 20 69 6e 70  ult, but the inp
1dfb0 75 74 20 73 74 72 69 6e 67 20 63 61 6e 20 68 61  ut string can ha
1dfc0 76 65 20 66 65 77 65 72 20 6f 72 20 6d 6f 72 65  ve fewer or more
1dfd0 20 74 68 61 6e 20 74 68 72 65 65 20 64 69 67 69   than three digi
1dfe0 74 73 0a 61 6e 64 20 74 68 65 20 64 61 74 65 2f  ts.and the date/
1dff0 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 77  time functions w
1e000 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65 72 61 74  ill still operat
1e010 65 20 63 6f 72 72 65 63 74 6c 79 2e 29 5e 0a 53  e correctly.)^.S
1e020 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72 6d 61 74  imilarly, format
1e030 20 31 32 20 69 73 20 73 68 6f 77 6e 20 77 69 74   12 is shown wit
1e040 68 20 31 30 20 73 69 67 6e 69 66 69 63 61 6e 74  h 10 significant
1e050 20 64 69 67 69 74 73 2c 20 62 75 74 20 74 68 65   digits, but the
1e060 20 64 61 74 65 2f 74 69 6d 65 0a 66 75 6e 63 74   date/time.funct
1e070 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61 6c 6c 79  ions will really
1e080 20 61 63 63 65 70 74 20 61 73 20 6d 61 6e 79 20   accept as many 
1e090 6f 72 20 61 73 20 66 65 77 20 64 69 67 69 74 73  or as few digits
1e0a0 20 61 73 20 61 72 65 20 6e 65 63 65 73 73 61 72   as are necessar
1e0b0 79 20 74 6f 0a 72 65 70 72 65 73 65 6e 74 20 74  y to.represent t
1e0c0 68 65 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75  he Julian day nu
1e0d0 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e  mber..</p>..<h3>
1e0e0 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e 0a 0a  Modifiers</h3>..
1e0f0 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73 74 72  <p>^The time str
1e100 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f  ing can be follo
1e110 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d  wed by zero or m
1e120 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20 74 68  ore modifiers th
1e130 61 74 20 0a 61 6c 74 65 72 20 64 61 74 65 20 61  at .alter date a
1e140 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 45 61 63  nd/or time. ^Eac
1e150 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20 61 20  h modifier.is a 
1e160 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 74  transformation t
1e170 68 61 74 20 69 73 20 61 70 70 6c 69 65 64 20 74  hat is applied t
1e180 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c 75 65  o the time value
1e190 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e 4d   to its left..^M
1e1a0 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 70 70  odifiers are app
1e1b0 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  lied from left t
1e1c0 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72 20 69  o right; order i
1e1d0 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28 54  s important..^(T
1e1e0 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f 64  he available mod
1e1f0 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66 6f  ifiers are as fo
1e200 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows.</p>..<ol>
1e210 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c  .<li> NNN days.<
1e220 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c  li> NNN hours.<l
1e230 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c  i> NNN minutes.<
1e240 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63  li> NNN.NNNN sec
1e250 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f  onds.<li> NNN mo
1e260 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65  nths.<li> NNN ye
1e270 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  ars.<li> start o
1e280 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74 61  f month.<li> sta
1e290 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e 20  rt of year.<li> 
1e2a0 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c 69  start of day.<li
1e2b0 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e  > weekday N.<li>
1e2c0 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e 20   unixepoch.<li> 
1e2d0 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75  localtime.<li> u
1e2e0 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e  tc .</ol>)^..<p>
1e2f0 5e 54 68 65 20 66 69 72 73 74 20 73 69 78 20 6d  ^The first six m
1e300 6f 64 69 66 69 65 72 73 20 28 31 20 74 68 72 6f  odifiers (1 thro
1e310 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79 20 61  ugh 6) .simply a
1e320 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64  dd the specified
1e330 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
1e340 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  to the date and 
1e350 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65 64 20  time .specified 
1e360 62 79 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  by the preceding
1e370 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e 64 20   timestring and 
1e380 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 54 68 65 20  modifiers..^The 
1e390 27 73 27 20 63 68 61 72 61 63 74 65 72 20 61 74  's' character at
1e3a0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
1e3b0 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 20 69  modifier names i
1e3c0 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 4e 6f 74  s optional..^Not
1e3d0 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b  e that "&plusmn;
1e3e0 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b  NNN months" work
1e3f0 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20 74  s by rendering t
1e400 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65  he original date
1e410 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d   into.the YYYY-M
1e420 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64 64  M-DD format, add
1e430 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b  ing the &plusmn;
1e440 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f  NNN to the MM mo
1e450 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a  nth value, then.
1e460 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20  normalizing the 
1e470 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20  result.  ^Thus, 
1e480 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  for example, the
1e490 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33 31   data 2001-03-31
1e4a0 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b 31   modified.by '+1
1e4b0 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c   month' initiall
1e4c0 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30 34  y yields 2001-04
1e4d0 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20 6f  -31, but April o
1e4e0 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79 73 0a  nly has 30 days.
1e4f0 73 6f 20 74 68 65 20 64 61 74 65 20 69 73 20 6e  so the date is n
1e500 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30 30  ormalized to 200
1e510 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d  1-05-01.  ^A sim
1e520 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63 75  ilar effect occu
1e530 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69 67  rs when.the orig
1e540 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65 62  inal date is Feb
1e550 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c 65  ruary 29 of a le
1e560 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20 6d  apyear and the m
1e570 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75 73  odifier is.&plus
1e580 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72 65  mn;N years where
1e590 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74   N is not a mult
1e5a0 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70  iple of four.</p
1e5b0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61 72  >..<p>^The "star
1e5c0 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73 20  t of" modifiers 
1e5d0 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73 68  (7 through 9) sh
1e5e0 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61 63  ift the date bac
1e5f0 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20 62  kwards .to the b
1e600 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
1e610 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79  current month, y
1e620 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a  ear or day.</p>.
1e630 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b 64 61  .<p>^The "weekda
1e640 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76 61  y" modifier adva
1e650 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66 6f  nces the date fo
1e660 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65 78  rward to the nex
1e670 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74 68  t date .where th
1e680 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72  e weekday number
1e690 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73   is N. Sunday is
1e6a0 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c   0, Monday is 1,
1e6b0 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f   and so forth.</
1e6c0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e 69  p>..<p>^The "uni
1e6d0 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
1e6e0 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73   (11) only works
1e6f0 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65   if it immediate
1e700 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69  ly follows .a ti
1e710 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20  mestring in the 
1e720 44 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61  DDDDDDDDDD forma
1e730 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66 69  t. .^This modifi
1e740 65 72 20 63 61 75 73 65 73 20 74 68 65 20 44 44  er causes the DD
1e750 44 44 44 44 44 44 44 44 20 74 6f 20 62 65 20 69  DDDDDDDD to be i
1e760 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20 0a  nterpreted not .
1e770 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20  as a Julian day 
1e780 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f 72  number as it nor
1e790 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20  mally would be, 
1e7a0 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f 65  but as.[http://e
1e7b0 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1e7c0 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20 7c  wiki/Unix_time |
1e7d0 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74 68   Unix Time] - th
1e7e0 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65 63  e .number of sec
1e7f0 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2e  onds since 1970.
1e800 20 20 49 66 20 74 68 65 20 22 75 6e 69 78 65 70    If the "unixep
1e810 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64 6f  och" modifier do
1e820 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20  es not.follow a 
1e830 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74 68  timestring of th
1e840 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44 44  e form DDDDDDDDD
1e850 44 20 77 68 69 63 68 20 65 78 70 72 65 73 73 65  D which expresse
1e860 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  s the number.of 
1e870 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39  seconds since 19
1e880 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20 6d  70 or if other m
1e890 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72 61 74  odifiers.separat
1e8a0 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68  e the "unixepoch
1e8b0 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d 20  " modifier from 
1e8c0 70 72 69 6f 72 20 44 44 44 44 44 44 44 44 44 44  prior DDDDDDDDDD
1e8d0 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76 69   then the.behavi
1e8e0 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
1e8f0 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73 69 6f  .Due to precisio
1e900 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 69 6d  n limitations im
1e910 70 6f 73 65 64 20 62 79 20 74 68 65 20 69 6d 70  posed by the imp
1e920 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65  lementations use
1e930 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74 65 67  .of 64-bit integ
1e940 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78 65 70  ers, the "unixep
1e950 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e  och" modifier on
1e960 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74  ly works for.dat
1e970 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
1e980 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 61  01-01 00:00:00 a
1e990 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31 30  nd 5352-11-01 10
1e9a0 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69 6d  :52:47 (unix tim
1e9b0 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39 32  es.of -621672192
1e9c0 30 30 20 74 68 72 6f 75 67 68 20 31 30 36 37 35  00 through 10675
1e9d0 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c 74  199167).</p>..<t
1e9e0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c  cl>hd_fragment l
1e9f0 6f 63 61 6c 74 69 6d 65 20 7b 6c 6f 63 61 6c 74  ocaltime {localt
1ea00 69 6d 65 20 6d 6f 64 69 66 69 65 72 7d 3c 2f 74  ime modifier}</t
1ea10 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f 63  cl>.<p>^The "loc
1ea20 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72  altime" modifier
1ea30 20 28 31 32 29 20 61 73 73 75 6d 65 73 20 74 68   (12) assumes th
1ea40 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 74 6f  e time string to
1ea50 20 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 0a   its left is in.
1ea60 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69  Universal Coordi
1ea70 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29  nated Time (UTC)
1ea80 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65   and adjusts the
1ea90 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20   time.string so 
1eaa0 74 68 61 74 20 69 74 20 64 69 73 70 6c 61 79 73  that it displays
1eab0 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66 20   localtime.  If 
1eac0 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c  "localtime".foll
1ead0 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61 74 20  ows a time that 
1eae0 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e  is not UTC, then
1eaf0 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
1eb00 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54 68   undefined..^(Th
1eb10 65 20 22 75 74 63 22 20 69 73 20 74 68 65 20 6f  e "utc" is the o
1eb20 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f 63 61  pposite of "loca
1eb30 6c 74 69 6d 65 22 2e 20 20 22 75 74 63 22 20 61  ltime".  "utc" a
1eb40 73 73 75 6d 65 73 20 74 68 61 74 20 74 68 65 20  ssumes that the 
1eb50 73 74 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65  string.to its le
1eb60 66 74 20 69 73 20 69 6e 20 74 68 65 20 6c 6f 63  ft is in the loc
1eb70 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20  al timezone and 
1eb80 61 64 6a 75 73 74 73 20 74 68 61 74 20 73 74 72  adjusts that str
1eb90 69 6e 67 20 74 6f 20 62 65 20 69 6e 20 55 54 43  ing to be in UTC
1eba0 2e 29 5e 0a 49 66 20 74 68 65 20 70 72 69 6f 72  .)^.If the prior
1ebb0 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 69   string is not i
1ebc0 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65  n localtime, the
1ebd0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
1ebe0 22 75 74 63 22 20 69 73 0a 75 6e 64 65 66 69 6e  "utc" is.undefin
1ebf0 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61  ed.</p>..<h3>Exa
1ec00 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70  mples</h3>..^(<p
1ec10 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72  >Compute the cur
1ec20 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c  rent date.<p>..<
1ec30 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43  blockquote>SELEC
1ec40 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f  T date('now');</
1ec50 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1ec60 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1ec70 6c 61 73 74 20 64 61 79 20 6f 66 20 74 68 65 20  last day of the 
1ec80 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f  current month.</
1ec90 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1eca0 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77  SELECT date('now
1ecb0 27 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74  ','start of mont
1ecc0 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d  h','+1 month','-
1ecd0 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  1 day');.</block
1ece0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1ecf0 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20  ompute the date 
1ed00 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61  and time given a
1ed10 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20   unix timestamp 
1ed20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a  1092941466.</p>.
1ed30 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1ed40 20 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d    SELECT datetim
1ed50 65 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75  e(1092941466, 'u
1ed60 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c  nixepoch');.</bl
1ed70 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1ed80 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  p>Compute the da
1ed90 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65  te and time give
1eda0 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61  n a unix timesta
1edb0 6d 70 20 31 30 39 32 39 34 31 34 36 36 2c 20 61  mp 1092941466, a
1edc0 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66  nd .compensate f
1edd0 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69  or your local ti
1ede0 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c  mezone.</p>..<bl
1edf0 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1ee00 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32  CT datetime(1092
1ee10 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f  941466, 'unixepo
1ee20 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27  ch', 'localtime'
1ee30 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1ee40 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1ee50 20 74 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69   the current uni
1ee60 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e  x timestamp.</p>
1ee70 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1ee80 20 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65   SELECT strftime
1ee90 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f  ('%s','now');.</
1eea0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1eeb0 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1eec0 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73  number of days s
1eed0 69 6e 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67  ince the signing
1eee0 20 6f 66 20 74 68 65 20 55 53 20 44 65 63 6c 61   of the US Decla
1eef0 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65  ration.of Indepe
1ef00 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c  ndence.</p>..<bl
1ef10 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1ef20 43 54 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f  CT julianday('no
1ef30 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28  w') - julianday(
1ef40 27 31 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c  '1776-07-04');.<
1ef50 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1ef60 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1ef70 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e   number of secon
1ef80 64 73 20 73 69 6e 63 65 20 61 20 70 61 72 74 69  ds since a parti
1ef90 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20  cular moment in 
1efa0 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  2004:</p>..<bloc
1efb0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1efc0 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
1efd0 6e 6f 77 27 29 20 2d 20 73 74 72 66 74 69 6d 65  now') - strftime
1efe0 28 27 25 73 27 2c 27 32 30 30 34 2d 30 31 2d 30  ('%s','2004-01-0
1eff0 31 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f  1 02:34:56');.</
1f000 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1f010 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65  (<p>.Compute the
1f020 20 64 61 74 65 20 6f 66 20 74 68 65 20 66 69 72   date of the fir
1f030 73 74 20 54 75 65 73 64 61 79 20 69 6e 20 4f 63  st Tuesday in Oc
1f040 74 6f 62 65 72 0a 66 6f 72 20 74 68 65 20 63 75  tober.for the cu
1f050 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e  rrent year..</p>
1f060 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
1f070 20 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f   SELECT date('no
1f080 77 27 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61  w','start of yea
1f090 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27  r','+9 months','
1f0a0 77 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62  weekday 2');.</b
1f0b0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1f0c0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 74  <p>Compute the t
1f0d0 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20 75 6e  ime since the un
1f0e0 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f  ix epoch in seco
1f0f0 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72 66 74  nds .(like strft
1f100 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20  ime('%s','now') 
1f110 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65 73 20  except includes 
1f120 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 29  fractional part)
1f130 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
1f140 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a 75  te>.  SELECT (ju
1f150 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d  lianday('now') -
1f160 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36 34 30   2440587.5)*8640
1f170 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  0.0;.</blockquot
1f180 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76 65 61 74  e>)^..<h3>Caveat
1f190 73 20 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a  s And Bugs</h3>.
1f1a0 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74  .<p>The computat
1f1b0 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d  ion of local tim
1f1c0 65 20 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c  e depends heavil
1f1d0 79 20 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f  y on the whim .o
1f1e0 66 20 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e  f politicians an
1f1f0 64 20 69 73 20 74 68 75 73 20 64 69 66 66 69 63  d is thus diffic
1f200 75 6c 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65  ult to get corre
1f210 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61  ct for .all loca
1f220 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73 20 69 6d  les. ^In this im
1f230 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68  plementation, th
1f240 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
1f250 72 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c  rary .function l
1f260 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20  ocaltime_r() is 
1f270 75 73 65 64 20 74 6f 20 61 73 73 69 73 74 20 69  used to assist i
1f280 6e 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f  n the calculatio
1f290 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65  n of .local time
1f2a0 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63 61 6c 74  .  ^(The .localt
1f2b0 69 6d 65 5f 72 28 29 20 43 20 66 75 6e 63 74 69  ime_r() C functi
1f2c0 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79  on normally only
1f2d0 20 77 6f 72 6b 73 20 66 6f 72 20 79 65 61 72 73   works for years
1f2e0 0a 62 65 74 77 65 65 6e 20 31 39 37 30 20 61 6e  .between 1970 an
1f2f0 64 20 32 30 33 37 2e 20 46 6f 72 20 64 61 74 65  d 2037. For date
1f300 73 20 6f 75 74 73 69 64 65 20 74 68 69 73 20 72  s outside this r
1f310 61 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a 61 74  ange, SQLite .at
1f320 74 65 6d 70 74 73 20 74 6f 20 6d 61 70 20 74 68  tempts to map th
1f330 65 20 79 65 61 72 20 69 6e 74 6f 20 61 6e 20 65  e year into an e
1f340 71 75 69 76 61 6c 65 6e 74 20 79 65 61 72 20 77  quivalent year w
1f350 69 74 68 69 6e 20 0a 74 68 69 73 20 72 61 6e 67  ithin .this rang
1f360 65 2c 20 64 6f 20 74 68 65 20 63 61 6c 63 75 6c  e, do the calcul
1f370 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20  ation, then map 
1f380 74 68 65 20 79 65 61 72 20 62 61 63 6b 2e 29 5e  the year back.)^
1f390 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73  </p>...<p>^(Thes
1f3a0 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79  e functions only
1f3b0 20 77 6f 72 6b 20 66 6f 72 20 64 61 74 65 73 20   work for dates 
1f3c0 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d  between 0000-01-
1f3d0 30 31 20 30 30 3a 30 30 3a 30 30 0a 61 6e 64 20  01 00:00:00.and 
1f3e0 39 39 39 39 2d 31 32 2d 33 31 20 32 33 3a 35 39  9999-12-31 23:59
1f3f0 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20 64 61 79  :59 (julidan day
1f400 20 6e 75 6d 62 65 72 73 20 31 37 32 31 30 35 39   numbers 1721059
1f410 2e 35 20 74 68 72 6f 75 67 68 20 35 33 37 33 34  .5 through 53734
1f420 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64 61 74  84.5).)^.For dat
1f430 65 73 20 6f 75 74 73 69 64 65 20 74 68 61 74 20  es outside that 
1f440 72 61 6e 67 65 2c 20 74 68 65 20 72 65 73 75 6c  range, the resul
1f450 74 73 20 6f 66 20 74 68 65 73 65 0a 66 75 6e 63  ts of these.func
1f460 74 69 6f 6e 73 20 61 72 65 20 75 6e 64 65 66 69  tions are undefi
1f470 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e  ned.</p>..<p>Non
1f480 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70  -Vista Windows p
1f490 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75  latforms only su
1f4a0 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f 66  pport one set of
1f4b0 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56 69 73   DST rules. .Vis
1f4c0 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73  ta only supports
1f4d0 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c   two. Therefore,
1f4e0 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74 66 6f   on these platfo
1f4f0 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c  rms, .historical
1f500 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e   DST calculation
1f510 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72  s will be incorr
1f520 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c  ect. .For exampl
1f530 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20 69 6e  e, in the US, in
1f540 20 32 30 30 37 20 74 68 65 20 44 53 54 20 72 75   2007 the DST ru
1f550 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f  les changed. .No
1f560 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20  n-Vista Windows 
1f570 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c 79 20  platforms apply 
1f580 74 68 65 20 6e 65 77 20 32 30 30 37 20 44 53 54  the new 2007 DST
1f590 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70   rules .to all p
1f5a0 72 65 76 69 6f 75 73 20 79 65 61 72 73 20 61 73  revious years as
1f5b0 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65   well. Vista doe
1f5c0 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74 74 65  s somewhat bette
1f5d0 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75 6c 74  r.getting result
1f5e0 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b 20 74  s correct back t
1f5f0 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74 68 65  o 1986, when the
1f600 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c 73 6f   rules were also
1f610 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c   changed.</p>..<
1f620 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63  p>All internal c
1f630 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73 73 75  omputations assu
1f640 6d 65 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f  me the .[http://
1f650 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1f660 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f  /wiki/Gregorian_
1f670 63 61 6c 65 6e 64 61 72 20 7c 20 47 72 65 67 6f  calendar | Grego
1f680 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 0a 73  rian calendar].s
1f690 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c  ystem.  It is al
1f6a0 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61 74 20  so assumed that 
1f6b0 65 76 65 72 79 0a 64 61 79 20 69 73 20 65 78 61  every.day is exa
1f6c0 63 74 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e  ctly 86400 secon
1f6d0 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c  ds in duration.<
1f6e0 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
1f6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f730 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1f740 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e  n {Aggregate Fun
1f750 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20  ctions} aggfunc 
1f760 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c  {*aggfunc}.</tcl
1f770 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65  >..<p>.The aggre
1f780 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
1f790 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61  hown below are a
1f7a0 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
1f7b0 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  ult.  Additional
1f7c0 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74  .aggregate funct
1f7d0 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20  ions written in 
1f7e0 43 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 75  C may be added u
1f7f0 73 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74  sing the .[sqlit
1f800 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
1f810 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f  on()]</a>.API.</
1f820 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20  p>..<p>.^In any 
1f830 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1f840 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61 20  on that takes a 
1f850 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c  single argument,
1f860 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63   that argument.c
1f870 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62  an be preceded b
1f880 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49  y the keyword DI
1f890 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63  STINCT.  ^In suc
1f8a0 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61  h cases, duplica
1f8b0 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  te.elements are 
1f8c0 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20  filtered before 
1f8d0 62 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74  being passed int
1f8e0 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  o the aggregate 
1f8f0 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65  function..^For e
1f900 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63  xample, the func
1f910 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74  tion "count(dist
1f920 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65  inct X)" will re
1f930 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a  turn the number.
1f940 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75  of distinct valu
1f950 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69  es of column X i
1f960 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f  nstead of the to
1f970 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  tal number of no
1f980 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e  n-null.values in
1f990 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a   column X..</p>.
1f9a0 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30  .<table border=0
1f9b0 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e   cellpadding=10>
1f9c0 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b  .<tcl>.funcdef {
1f9d0 61 76 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61  avg(X)} {*avg {a
1f9e0 76 67 28 29 20 61 67 67 72 65 67 61 74 65 20 66  vg() aggregate f
1f9f0 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1fa00 68 65 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f  he avg() functio
1fa10 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20  n.  returns the 
1fa20 61 76 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66  average value of
1fa30 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69   all non-NULL <i
1fa40 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a  >X</i> within a.
1fa50 20 20 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e    group.  ^Strin
1fa60 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65  g and BLOB value
1fa70 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f  s that do not lo
1fa80 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20  ok like numbers 
1fa90 61 72 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65  are.  interprete
1faa0 64 20 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72  d as 0..  ^The r
1fab0 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69  esult of avg() i
1fac0 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74  s always a float
1fad0 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20  ing point value 
1fae0 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20  as long as.  at 
1faf0 74 68 65 72 65 20 69 73 20 61 74 20 6c 65 61 73  there is at leas
1fb00 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  t one non-NULL i
1fb10 6e 70 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c  nput even if all
1fb20 0a 20 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e  .  inputs are in
1fb30 74 65 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65  tegers.  ^The re
1fb40 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73  sult of avg() is
1fb50 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c   NULL if and onl
1fb60 79 20 69 66 0a 20 20 74 68 65 72 65 20 61 72 65  y if.  there are
1fb70 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70   no non-NULL inp
1fb80 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65  uts.  .}..funcde
1fb90 66 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e  f {count(X) coun
1fba0 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63  t(*)} {*count {c
1fbb0 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61 74 65  ount() aggregate
1fbc0 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1fbd0 5e 54 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75  ^The count(X) fu
1fbe0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20  nction returns. 
1fbf0 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20   a count of the 
1fc00 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a  number of times.
1fc10 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20    that <i>X</i> 
1fc20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61  is not NULL in a
1fc30 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f   group.  ^The co
1fc40 75 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a  unt(*) function.
1fc50 20 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d    (with no argum
1fc60 65 6e 74 73 29 20 72 65 74 75 72 6e 73 20 74 68  ents) returns th
1fc70 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
1fc80 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72  f rows in the gr
1fc90 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  oup..}..funcdef 
1fca0 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29  {group_concat(X)
1fcb0 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c   group_concat(X,
1fcc0 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63  Y)} {.  *group_c
1fcd0 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e  oncat {group_con
1fce0 63 61 74 28 29 20 61 67 67 72 65 67 61 74 65 20  cat() aggregate 
1fcf0 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20  function}.} {.  
1fd00 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61  ^The group_conca
1fd10 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  t() function ret
1fd20 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20  urns.  a string 
1fd30 77 68 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e  which is the con
1fd40 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20  catenation of.  
1fd50 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
1fd60 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ues of <i>X</i>.
1fd70 20 20 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20    ^If parameter 
1fd80 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73  <i>Y</i> is pres
1fd90 65 6e 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73  ent then.  it is
1fda0 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70   used as the sep
1fdb0 61 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e  arator.  between
1fdc0 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69   instances of <i
1fdd0 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d  >X</i>.  ^A comm
1fde0 61 20 28 22 2c 22 29 20 69 73 20 75 73 65 64 20  a (",") is used 
1fdf0 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72  as the separator
1fe00 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69  .  if <i>Y</i> i
1fe10 73 20 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20  s omitted.  The 
1fe20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e  order of the con
1fe30 63 61 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e  catenated elemen
1fe40 74 73 20 69 73 0a 20 20 61 72 62 69 74 72 61 72  ts is.  arbitrar
1fe50 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  y..}..funcdef {m
1fe60 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46  ax(X)} {*maxAggF
1fe70 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61  unc *agg_max {ma
1fe80 78 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  x() aggregate fu
1fe90 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
1fea0 65 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  e max() aggregat
1feb0 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  e function.  ret
1fec0 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  urns the maximum
1fed0 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61   value of all va
1fee0 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
1fef0 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75  p..  ^The maximu
1ff00 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 76  m value is the v
1ff10 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
1ff20 62 65 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74  be returned last
1ff30 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42   in an.  ORDER B
1ff40 59 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f  Y on the same co
1ff50 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74  lumn.  ^Aggregat
1ff60 65 20 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20  e max() returns 
1ff70 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f  NULL .  if and o
1ff80 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65  nly if there are
1ff90 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c   no non-NULL val
1ffa0 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
1ffb0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69  ..}..funcdef {mi
1ffc0 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75  n(X)} {*minAggFu
1ffd0 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e  nc *agg_min {min
1ffe0 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1fff0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
20000 20 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65   min() aggregate
20010 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75   function.  retu
20020 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  rns the minimum 
20030 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f  non-NULL value o
20040 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20  f all values in 
20050 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68  the group..  ^Th
20060 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20  e minimum value 
20070 69 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e  is the first non
20080 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74  -NULL value that
20090 20 77 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20   would appear.  
200a0 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f  in an ORDER BY o
200b0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20  f the column..  
200c0 5e 41 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29  ^Aggregate min()
200d0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66   returns NULL if
200e0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
200f0 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55  re are no non-NU
20100 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74  LL.  values in t
20110 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
20120 63 64 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74  cdef {sum(X) tot
20130 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46  al(X)} {.  *sumF
20140 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a  unc *sum *total.
20150 20 20 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61    {sum() aggrega
20160 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b  te function}.  {
20170 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74  total() aggregat
20180 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a  e function}.} {.
20190 20 20 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64    ^The sum() and
201a0 20 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61   total() aggrega
201b0 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72  te functions.  r
201c0 65 74 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c  eturn sum of all
201d0 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73   non-NULL values
201e0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
201f0 20 5e 49 66 20 74 68 65 72 65 20 61 72 65 20 6e   ^If there are n
20200 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  o non-NULL input
20210 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29   rows then sum()
20220 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20   returns.  NULL 
20230 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75  but total() retu
20240 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20  rns 0.0..  NULL 
20250 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20  is not normally 
20260 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74  a helpful result
20270 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20   for the sum of 
20280 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68  no rows.  but th
20290 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72  e SQL standard r
202a0 65 71 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d  equires it and m
202b0 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20  ost other.  SQL 
202c0 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
202d0 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29   implement sum()
202e0 20 74 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c   that way so SQL
202f0 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74  ite does it in t
20300 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e  he.  same way in
20310 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d   order to be com
20320 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e  patible.   The n
20330 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61  on-standard tota
20340 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69  l() function.  i
20350 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20  s provided as a 
20360 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74  convenient way t
20370 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68  o work around th
20380 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65  is design proble
20390 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  m.  in the SQL l
203a0 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20  anguage.</p>..  
203b0 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  <p>^The result o
203c0 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77  f total() is alw
203d0 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  ays a floating p
203e0 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54  oint value..  ^T
203f0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d  he result of sum
20400 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  () is an integer
20410 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f   value if all no
20420 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72  n-NULL inputs ar
20430 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49  e integers..  ^I
20440 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73  f any input to s
20450 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65 72 20  um() is neither 
20460 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20  an integer or a 
20470 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28  NULL.  then sum(
20480 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61  ) returns a floa
20490 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
204a0 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74 20 62  .  which might b
204b0 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69  e an approximati
204c0 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65 20 73  on to the true s
204d0 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53  um.</p>..  <p>^S
204e0 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20  um() will throw 
204f0 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72  an "integer over
20500 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20  flow" exception 
20510 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20  if all inputs.  
20520 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20  are integers or 
20530 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e  NULL.  and an in
20540 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f  teger overflow o
20550 63 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69  ccurs at any poi
20560 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f  nt during the co
20570 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f  mputation..  ^To
20580 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f  tal() never thro
20590 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76  ws an integer ov
205a0 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e  erflow..}.</tcl>
205b0 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e  .</table>..<tcl>
205c0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
205d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
205e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
205f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
20610 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69  Section INSERT i
20620 6e 73 65 72 74 20 7b 49 4e 53 45 52 54 20 2a 49  nsert {INSERT *I
20630 4e 53 45 52 54 73 7d 0a 0a 52 65 63 75 72 73 69  NSERTs}..Recursi
20640 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
20650 69 6e 73 65 72 74 2d 73 74 6d 74 0a 3c 2f 74 63  insert-stmt.</tc
20660 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52  l>..<p>The INSER
20670 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65  T statement come
20680 73 20 69 6e 20 74 68 72 65 65 20 62 61 73 69 63  s in three basic
20690 20 66 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c   forms.  .<ul>.<
206a0 6c 69 3e 3c 70 3e 5e 54 68 65 20 66 69 72 73 74  li><p>^The first
206b0 20 66 6f 72 6d 20 28 77 69 74 68 20 74 68 65 20   form (with the 
206c0 22 56 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64  "VALUES" keyword
206d0 29 20 63 72 65 61 74 65 73 20 6f 6e 65 20 6f 72  ) creates one or
206e0 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77 73 20 69   more.new rows i
206f0 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  n.an existing ta
20700 62 6c 65 2e 20 5e 49 66 20 6e 6f 20 63 6f 6c 75  ble. ^If no colu
20710 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69  mn-list is speci
20720 66 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75  fied then the nu
20730 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65 73 20 69  mber.of values i
20740 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 65 61 63  nserted into eac
20750 68 20 72 6f 77 0a 6d 75 73 74 20 62 65 20 74 68  h row.must be th
20760 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75  e same as the nu
20770 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
20780 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49  in the table. ^I
20790 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68 65 20  n this case.the 
207a0 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61  result of evalua
207b0 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f  ting the left-mo
207c0 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 66 72  st expression fr
207d0 6f 6d 20 65 61 63 68 20 74 65 72 6d 20 6f 66 0a  om each term of.
207e0 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74 20  the VALUES list 
207f0 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
20800 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63   the left-most c
20810 6f 6c 75 6d 6e 20 6f 66 20 65 61 63 68 20 6e 65  olumn of each ne
20820 77 20 72 6f 77 2c 0a 61 6e 64 20 73 6f 20 66 6f  w row,.and so fo
20830 72 74 68 20 66 6f 72 20 65 61 63 68 20 73 75 62  rth for each sub
20840 73 65 71 75 65 6e 74 20 65 78 70 72 65 73 73 69  sequent expressi
20850 6f 6e 2e 20 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e  on. ^If a.column
20860 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69  -list is specifi
20870 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  ed, then the num
20880 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  ber of values in
20890 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
208a0 65 0a 56 41 4c 55 45 20 6c 69 73 74 20 6d 75 73  e.VALUE list mus
208b0 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62  t match the numb
208c0 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20  er of.specified 
208d0 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f  columns. ^Each o
208e0 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75  f the named colu
208f0 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72  mns of the new r
20900 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a  ow is populated.
20910 77 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 73  with the results
20920 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74   of evaluating t
20930 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
20940 20 56 41 4c 55 45 53 20 65 78 70 72 65 73 73 69   VALUES expressi
20950 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d  on. ^Table.colum
20960 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61  ns that do not a
20970 70 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c  ppear in the col
20980 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70  umn list are pop
20990 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ulated with the 
209a0 64 65 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76  default.column v
209b0 61 6c 75 65 20 28 73 70 65 63 69 66 69 65 64 20  alue (specified 
209c0 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43  as part of the C
209d0 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
209e0 65 6d 65 6e 74 29 2c 20 6f 72 20 77 69 74 68 20  ement), or with 
209f0 4e 55 4c 4c 20 69 66 0a 6e 6f 20 64 65 66 61 75  NULL if.no defau
20a00 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63  lt value is spec
20a10 69 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54  ified...<li><p>T
20a20 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f  he second form o
20a30 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61  f the INSERT sta
20a40 74 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20  tement contains 
20a50 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
20a60 6e 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20  nt.instead of a 
20a70 56 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e  VALUES clause. ^
20a80 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69  A new entry is i
20a90 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
20aa0 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a   table for each.
20ab0 72 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74 75  row of data retu
20ac0 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e  rned by executin
20ad0 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  g the SELECT sta
20ae0 74 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f  tement. ^If a co
20af0 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65  lumn-list is.spe
20b00 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62  cified, the numb
20b10 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
20b20 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
20b30 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62  he SELECT must b
20b40 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68  e the same.as th
20b50 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d  e number of item
20b60 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  s in the column-
20b70 6c 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65  list. ^Otherwise
20b80 2c 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c  , if no column-l
20b90 69 73 74 20 69 73 0a 73 70 65 63 69 66 69 65 64  ist is.specified
20ba0 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  , the number of 
20bb0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
20bc0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c  esult of the SEL
20bd0 45 43 54 20 6d 75 73 74 20 62 65 20 74 68 65 20  ECT must be the 
20be0 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62  same.as the numb
20bf0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
20c00 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79   the table. ^Any
20c10 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
20c20 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f  t, including.[co
20c30 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 5d 20  mpound SELECTs] 
20c40 61 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65  and SELECT state
20c50 6d 65 6e 74 73 20 77 69 74 68 20 5b 4f 52 44 45  ments with [ORDE
20c60 52 20 42 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49  R BY] and/or [LI
20c70 4d 49 54 5d 20 63 6c 61 75 73 65 73 2c 20 0a 6d  MIT] clauses, .m
20c80 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e  ay be used in an
20c90 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
20ca0 74 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a  t of this form..
20cb0 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 74 68 69 72  .<li><p>The thir
20cc0 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53  d form of an INS
20cd0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ERT statement is
20ce0 20 77 69 74 68 20 44 45 46 41 55 4c 54 20 56 41   with DEFAULT VA
20cf0 4c 55 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45  LUES..^(The INSE
20d00 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56  RT ... DEFAULT V
20d10 41 4c 55 45 53 20 73 74 61 74 65 6d 65 6e 74 20  ALUES statement 
20d20 69 6e 73 65 72 74 73 20 61 20 73 69 6e 67 6c 65  inserts a single
20d30 20 6e 65 77 20 72 6f 77 20 69 6e 74 6f 20 74 68   new row into th
20d40 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e  e.named table.)^
20d50 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66   ^Each column of
20d60 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20   the new row is 
20d70 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 69  populated with i
20d80 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ts default value
20d90 2c 0a 6f 72 20 77 69 74 68 20 61 20 4e 55 4c 4c  ,.or with a NULL
20da0 20 69 66 20 6e 6f 20 64 65 66 61 75 6c 74 20 76   if no default v
20db0 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69 65  alue is specifie
20dc0 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
20dd0 20 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69   column.definiti
20de0 6f 6e 20 69 6e 20 74 68 65 20 43 52 45 41 54 45  on in the CREATE
20df0 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
20e00 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68  ...</ul>..<p>^Th
20e10 65 20 22 52 45 50 4c 41 43 45 22 20 61 6e 64 20  e "REPLACE" and 
20e20 22 49 4e 53 45 52 54 20 4f 52 20 3c 69 3e 61 63  "INSERT OR <i>ac
20e30 74 69 6f 6e 3c 2f 69 3e 22 20 66 6f 72 6d 73 20  tion</i>" forms 
20e40 73 70 65 63 69 66 79 20 61 6e 20 61 6c 74 65 72  specify an alter
20e50 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e  native.constrain
20e60 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
20e70 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
20e80 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
20e90 69 73 20 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f  is one INSERT co
20ea0 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73  mmand..See the s
20eb0 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 20 5b 4f  ection titled [O
20ec0 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20  N CONFLICT] for 
20ed0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
20ee0 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70  mation..For comp
20ef0 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d  atibility with M
20f00 79 53 51 4c 2c 20 5e 74 68 65 20 70 61 72 73 65  ySQL, ^the parse
20f10 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65  r allows the use
20f20 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b   of the.single k
20f30 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22  eyword <a href="
20f40 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d  lang_replace.htm
20f50 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61  l">REPLACE</a> a
20f60 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20  s an .alias for 
20f70 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41  "INSERT OR REPLA
20f80 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f  CE"...<p>^(The o
20f90 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 64 61 74 61  ptional "<i>data
20fa0 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  base-name</i><b>
20fb0 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78 20 6f 6e  .</b>" prefix on
20fc0 20 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61   the <i>table-na
20fd0 6d 65 3c 2f 69 3e 0a 69 73 20 73 75 70 70 6f 72  me</i>.is suppor
20fe0 74 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20  t for top-level 
20ff0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
21000 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20  s only.)^  ^The 
21010 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20  table name must 
21020 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64 20 66  be.unqualified f
21030 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  or INSERT statem
21040 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72 20  ents that occur 
21050 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45 20 54  within [CREATE T
21060 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
21070 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20  ts..^Similarly, 
21080 74 68 65 20 22 44 45 46 41 55 4c 54 20 56 41 4c  the "DEFAULT VAL
21090 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65  UES" form of the
210a0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
210b0 74 20 69 73 20 73 75 70 70 6f 72 74 65 64 20 66  t is supported f
210c0 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53  or.top-level INS
210d0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
210e0 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20  nly and not for 
210f0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
21100 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67 65 72  s within.trigger
21110 73 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  s..<p>..<tcl>.##
21120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21160 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
21170 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43  tion {ON CONFLIC
21180 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69  T clause} confli
21190 63 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c  ct {{conflict cl
211a0 61 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49  ause} {ON CONFLI
211b0 43 54 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  CT}}..RecursiveB
211c0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e  ubbleDiagram con
211d0 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74  flict-clause.</t
211e0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  cl>..<p>The ON C
211f0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
21200 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65  s not a separate
21210 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49   SQL command.  I
21220 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64  t is a.non-stand
21230 61 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20  ard clause that 
21240 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61  can appear in ma
21250 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d  ny other SQL com
21260 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76  mands..It is giv
21270 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69  en its own secti
21280 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d  on in this docum
21290 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69  ent because it i
212a0 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74  s not.part of st
212b0 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74  andard SQL and t
212c0 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e  herefore might n
212d0 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c  ot be familiar.<
212e0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e  /p>..<p>^The syn
212f0 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  tax for the ON C
21300 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
21310 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65  s as shown above
21320 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20   for.the CREATE 
21330 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  TABLE command.  
21340 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20  ^For the INSERT 
21350 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61  and.UPDATE comma
21360 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  nds, the keyword
21370 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20  s "ON CONFLICT" 
21380 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20  are replaced by 
21390 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65  "OR" so that.the
213a0 20 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f   syntax reads mo
213b0 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46  re naturally.  F
213c0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74  or example, inst
213d0 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f  ead of."INSERT O
213e0 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
213f0 45 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45  E" we have "INSE
21400 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54  RT OR IGNORE"..T
21410 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e  he keywords chan
21420 67 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69  ge but the meani
21430 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65  ng of the clause
21440 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74   is the same.eit
21450 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70  her way.</p>..<p
21460 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
21470 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
21480 74 6f 20 5b 55 4e 49 51 55 45 5d 2c 20 5b 4e 4f  to [UNIQUE], [NO
21490 54 20 4e 55 4c 4c 5d 2c 0a 5b 43 48 45 43 4b 5d  T NULL],.[CHECK]
214a0 2c 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b  , and [PRIMARY K
214b0 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  EY] constraints.
214c0 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  .The ON CONFLICT
214d0 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65 73 20   algorithm does 
214e0 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f  not.apply to [FO
214f0 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
21500 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20 61 72  aints]..There ar
21510 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63 74 20  e five conflict 
21520 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
21530 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f  ithm choices:.RO
21540 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46  LLBACK, ABORT, F
21550 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64  AIL, IGNORE, and
21560 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64   REPLACE..^The d
21570 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20  efault conflict 
21580 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
21590 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20  ithm is ABORT.  
215a0 54 68 69 73 0a 69 73 20 77 68 61 74 20 74 68 65  This.is what the
215b0 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c  y mean:</p>..<dl
215c0 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43  >.<dt><b>ROLLBAC
215d0 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  K</b></dt>.<dd><
215e0 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
215f0 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
21600 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
21610 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rs, the ROLLBACK
21620 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f  .resolution algo
21630 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65  rithm aborts the
21640 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61   current SQL sta
21650 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e 20 53  tement with.an S
21660 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
21670 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73   error and rolls
21680 20 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e   back the curren
21690 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  t transaction..^
216a0 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f  If no transactio
216b0 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74 68  n is.active (oth
216c0 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c  er than the impl
216d0 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ied transaction 
216e0 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
216f0 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64  on every.command
21700 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  ) then the ROLLB
21710 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ACK resolution a
21720 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20 74  lgorithm works t
21730 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 0a 41  he same as the.A
21740 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c  BORT algorithm.<
21750 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
21760 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a  >ABORT</b></dt>.
21770 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
21780 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
21790 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
217a0 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41 42 4f   occurs, the ABO
217b0 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  RT.resolution al
217c0 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74  gorithm aborts t
217d0 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73  he current SQL s
217e0 74 61 74 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e  tatement.with an
217f0 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
21800 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 62 61 63  NT error and bac
21810 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61 6e 67  ks out any chang
21820 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65 20 63  es.made by the c
21830 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
21840 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e 67 65  ment; but change
21850 73 20 63 61 75 73 65 64 0a 62 79 20 70 72 69 6f  s caused.by prio
21860 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  r SQL statements
21870 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
21880 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 72 65   transaction are
21890 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20 74   preserved and t
218a0 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 72  he.transaction r
218b0 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e 0a 54  emains active..T
218c0 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75  his is the defau
218d0 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20  lt behavior and 
218e0 74 68 65 20 62 65 68 61 76 69 6f 72 20 73 70 65  the behavior spe
218f0 63 69 66 69 65 64 20 62 79 20 74 68 65 20 53 51  cified by the SQ
21900 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c  L.standard.</p><
21910 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49  /dd>..<dt><b>FAI
21920 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  L</b></dt>.<dd><
21930 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
21940 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
21950 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
21960 72 73 2c 20 74 68 65 20 46 41 49 4c 0a 72 65 73  rs, the FAIL.res
21970 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
21980 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72  m aborts the cur
21990 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65  rent SQL stateme
219a0 6e 74 20 77 69 74 68 20 61 6e 0a 53 51 4c 49 54  nt with an.SQLIT
219b0 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72  E_CONSTRAINT err
219c0 6f 72 2e 20 20 5e 42 75 74 20 74 68 65 20 46 41  or.  ^But the FA
219d0 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f  IL resolution do
219e0 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20  es not.back out 
219f0 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 6f 66  prior changes of
21a00 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
21a10 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64 20 6e  nt that failed n
21a20 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e 64 20 74  or does.it end t
21a30 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  he transaction..
21a40 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66  ^For example, if
21a50 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65   an UPDATE.state
21a60 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64  ment encountered
21a70 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
21a80 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31  olation on the 1
21a90 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74  00th row that.it
21aa0 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64   attempts to upd
21ab0 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69  ate, then the fi
21ac0 72 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67  rst 99 row chang
21ad0 65 73 20 61 72 65 20 70 72 65 73 65 72 76 65 64  es are preserved
21ae0 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20  .but changes to 
21af0 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65 79  rows 100 and bey
21b00 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e  ond never occur.
21b10 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
21b20 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74  b>IGNORE</b></dt
21b30 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
21b40 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
21b50 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
21b60 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20  on occurs, .the 
21b70 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f  IGNORE resolutio
21b80 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70  n algorithm skip
21b90 73 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68  s the one row th
21ba0 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20  at contains.the 
21bb0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
21bc0 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75  tion and continu
21bd0 65 73 20 70 72 6f 63 65 73 73 69 6e 67 20 73 75  es processing su
21be0 62 73 65 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66  bsequent rows.of
21bf0 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
21c00 6e 74 20 61 73 20 69 66 20 6e 6f 74 68 69 6e 67  nt as if nothing
21c10 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68   went wrong..Oth
21c20 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61  er rows before a
21c30 6e 64 20 61 66 74 65 72 20 74 68 65 20 72 6f 77  nd after the row
21c40 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20   that.contained 
21c50 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
21c60 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69 6e 73  iolation are ins
21c70 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
21c80 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65  .normally. ^No e
21c90 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
21ca0 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45   when the IGNORE
21cb0 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
21cc0 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69  tion.algorithm i
21cd0 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e  s used.</p></dd>
21ce0 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45  ..<dt><b>REPLACE
21cf0 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
21d00 3e 20 5e 57 68 65 6e 20 61 20 5b 55 4e 49 51 55  > ^When a [UNIQU
21d10 45 5d 20 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b  E] or [PRIMARY K
21d20 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  EY] constraint v
21d30 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
21d40 20 0a 74 68 65 20 52 45 50 4c 41 43 45 20 61 6c   .the REPLACE al
21d50 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65 73 20  gorithm.deletes 
21d60 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77  pre-existing row
21d70 73 20 74 68 61 74 20 61 72 65 20 63 61 75 73 69  s that are causi
21d80 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ng the constrain
21d90 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f  t violation.prio
21da0 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f  r to inserting o
21db0 72 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 63  r updating the c
21dc0 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64 20 74  urrent row and t
21dd0 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69  he command conti
21de0 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e 67 20  nues .executing 
21df0 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20  normally..^If a 
21e00 5b 4e 4f 54 20 4e 55 4c 4c 5d 20 63 6f 6e 73 74  [NOT NULL] const
21e10 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
21e20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c  occurs, the REPL
21e30 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73  ACE conflict.res
21e40 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63 65 73  olution replaces
21e50 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20   the NULL value 
21e60 77 69 74 68 0a 74 68 65 20 64 65 66 61 75 6c 74  with.the default
21e70 20 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20   value for that 
21e80 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68  column, or if th
21e90 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20  e column has no 
21ea0 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74  default.value, t
21eb0 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61 6c  hen the ABORT al
21ec0 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e  gorithm is used.
21ed0 0a 5e 49 66 20 61 20 5b 43 48 45 43 4b 5d 20 63  .^If a [CHECK] c
21ee0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
21ef0 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
21f00 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
21f10 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f   resolution.algo
21f20 72 69 74 68 6d 20 61 6c 77 61 79 73 20 77 6f 72  rithm always wor
21f30 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f  ks like ABORT.</
21f40 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  p>..<p>^When the
21f50 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
21f60 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72  t resolution str
21f70 61 74 65 67 79 20 64 65 6c 65 74 65 73 20 72 6f  ategy deletes ro
21f80 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73  ws in order to.s
21f90 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72 61  atisfy a constra
21fa0 69 6e 74 2c 20 5b 43 52 45 41 54 45 20 54 52 49  int, [CREATE TRI
21fb0 47 47 45 52 20 7c 20 64 65 6c 65 74 65 20 74 72  GGER | delete tr
21fc0 69 67 67 65 72 73 5d 20 66 69 72 65 20 69 66 20  iggers] fire if 
21fd0 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63  and only if.[rec
21fe0 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 20  ursive_triggers 
21ff0 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72 73 69  pragma | recursi
22000 76 65 20 74 72 69 67 67 65 72 73 5d 20 61 72 65  ve triggers] are
22010 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c   enabled.</p>..<
22020 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  p>^The [sqlite3_
22030 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70  update_hook | up
22040 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f  date hook] is no
22050 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f  t invoked for ro
22060 77 73 20 74 68 61 74 0a 61 72 65 20 64 65 6c 65  ws that.are dele
22070 74 65 64 20 62 79 20 74 68 65 20 52 45 50 4c 41  ted by the REPLA
22080 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CE conflict reso
22090 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 2e  lution strategy.
220a0 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c    ^Nor does.REPL
220b0 41 43 45 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  ACE increment th
220c0 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
220d0 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e  es | change coun
220e0 74 65 72 5d 2e 0a 54 68 65 20 65 78 63 65 70 74  ter]..The except
220f0 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73 20  ional behaviors 
22100 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20  defined in this 
22110 70 61 72 61 67 72 61 70 68 20 6d 69 67 68 74 20  paragraph might 
22120 63 68 61 6e 67 65 20 0a 69 6e 20 61 20 66 75 74  change .in a fut
22130 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e  ure release.</p>
22140 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  .</dl>..<p>^The 
22150 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66  algorithm specif
22160 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c  ied in the OR cl
22170 61 75 73 65 20 6f 66 20 61 6e 20 49 4e 53 45 52  ause of an INSER
22180 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72  T or UPDATE.over
22190 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69  rides any algori
221a0 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
221b0 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e   a CREATE TABLE.
221c0 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68  .^If no algorith
221d0 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  m is specified a
221e0 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f  nywhere, the ABO
221f0 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  RT algorithm is 
22200 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  used.</p>..<tcl>
22210 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
22220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
22260 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20  Section REINDEX 
22270 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a  reindex REINDEX.
22280 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
22290 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d  Diagram reindex-
222a0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
222b0 5e 54 68 65 20 52 45 49 4e 44 45 58 20 63 6f 6d  ^The REINDEX com
222c0 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20  mand is used to 
222d0 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63 72 65  delete and recre
222e0 61 74 65 20 69 6e 64 69 63 65 73 20 66 72 6f 6d  ate indices from
222f0 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73 20 69   scratch..This i
22300 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20 74 68  s useful when th
22310 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
22320 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
22330 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67 65 64  ence has changed
22340 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  ..</p>..<p>^If t
22350 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f  he REINDEX keywo
22360 72 64 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  rd is not follow
22370 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f  ed by a collatio
22380 6e 2d 73 65 71 75 65 6e 63 65 20 6f 72 20 64 61  n-sequence or da
22390 74 61 62 61 73 65 20 0a 6f 62 6a 65 63 74 20 69  tabase .object i
223a0 64 65 6e 74 69 66 69 65 72 2c 20 74 68 65 6e 20  dentifier, then 
223b0 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
223c0 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
223d0 62 61 73 65 73 20 61 72 65 20 72 65 62 75 69 6c  bases are rebuil
223e0 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52  t...<p>^If the R
223f0 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69  EINDEX keyword i
22400 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
22410 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e  collation-sequen
22420 63 65 20 6e 61 6d 65 2c 20 74 68 65 6e 0a 61 6c  ce name, then.al
22430 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c  l indices in all
22440 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
22450 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ses that use the
22460 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e   named collation
22470 20 73 65 71 75 65 6e 63 65 73 0a 61 72 65 20 72   sequences.are r
22480 65 63 72 65 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e  ecreated. ..<p>^
22490 4f 72 2c 20 69 66 20 74 68 65 20 61 72 67 75 6d  Or, if the argum
224a0 65 6e 74 20 61 74 74 61 63 68 65 64 20 74 6f 20  ent attached to 
224b0 74 68 65 20 52 45 49 4e 44 45 58 20 69 64 65 6e  the REINDEX iden
224c0 74 69 66 69 65 73 20 61 20 73 70 65 63 69 66 69  tifies a specifi
224d0 63 20 0a 64 61 74 61 62 61 73 65 20 74 61 62 6c  c .database tabl
224e0 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69  e, then all indi
224f0 63 65 73 20 61 74 74 61 63 68 65 64 20 74 6f 20  ces attached to 
22500 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
22510 6c 65 20 61 72 65 20 72 65 62 75 69 6c 74 2e 20  le are rebuilt. 
22520 0a 5e 49 66 20 69 74 20 69 64 65 6e 74 69 66 69  .^If it identifi
22530 65 73 20 61 20 73 70 65 63 69 66 69 63 20 64 61  es a specific da
22540 74 61 62 61 73 65 20 69 6e 64 65 78 2c 20 74 68  tabase index, th
22550 65 6e 20 6a 75 73 74 20 74 68 61 74 20 69 6e 64  en just that ind
22560 65 78 20 69 73 20 72 65 63 72 65 61 74 65 64 2e  ex is recreated.
22570 0a 0a 3c 70 3e 5e 49 66 20 6e 6f 20 3c 69 3e 64  ..<p>^If no <i>d
22580 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
22590 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
225a0 64 20 74 68 65 72 65 20 65 78 69 73 74 73 20 62  d there exists b
225b0 6f 74 68 20 61 20 74 61 62 6c 65 20 6f 72 0a 69  oth a table or.i
225c0 6e 64 65 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61  ndex and a colla
225d0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 66  tion sequence of
225e0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e   the specified n
225f0 61 6d 65 2c 20 53 51 4c 69 74 65 20 69 6e 74 65  ame, SQLite inte
22600 72 70 72 65 74 73 0a 74 68 69 73 20 61 73 20 61  rprets.this as a
22610 20 72 65 71 75 65 73 74 20 74 6f 20 72 65 62 75   request to rebu
22620 69 6c 64 20 74 68 65 20 69 6e 64 69 63 65 73 20  ild the indices 
22630 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 61 6d  that use the nam
22640 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  ed collation seq
22650 75 65 6e 63 65 2e 0a 54 68 69 73 20 61 6d 62 69  uence..This ambi
22660 67 75 69 74 79 20 69 6e 20 74 68 65 20 73 79 6e  guity in the syn
22670 74 61 78 20 6d 61 79 20 62 65 20 61 76 6f 69 64  tax may be avoid
22680 65 64 20 62 79 20 61 6c 77 61 79 73 20 73 70 65  ed by always spe
22690 63 69 66 79 69 6e 67 20 61 0a 3c 69 3e 64 61 74  cifying a.<i>dat
226a0 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77  abase-name</i> w
226b0 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67 20 61  hen reindexing a
226c0 20 73 70 65 63 69 66 69 63 20 74 61 62 6c 65 20   specific table 
226d0 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e  or index...<tcl>
226e0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
226f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22730 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41 43 45  .Section REPLACE
22740 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41 43 45   replace REPLACE
22750 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  ..</tcl>..<p>^Th
22760 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e  e REPLACE comman
22770 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  d is an alias fo
22780 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c  r the "[ON CONFL
22790 49 43 54 20 7c 20 49 4e 53 45 52 54 20 4f 52 20  ICT | INSERT OR 
227a0 52 45 50 4c 41 43 45 5d 22 0a 76 61 72 69 61 6e  REPLACE]".varian
227b0 74 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52 54  t of the [INSERT
227c0 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69  ] command.  .Thi
227d0 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f 76 69  s alias is provi
227e0 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69 62  ded for compatib
227f0 69 6c 69 74 79 20 6f 74 68 65 72 20 53 51 4c 20  ility other SQL 
22800 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
22810 2e 20 20 53 65 65 20 74 68 65 20 0a 5b 49 4e 53  .  See the .[INS
22820 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 63  ERT] command doc
22830 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61  umentation for a
22840 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
22850 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74  ation.</p>  ..<t
22860 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
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 23 23 23 23 23 23 23 23  ################
22890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
228b0 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 57 49 54  ###.Section {WIT
228c0 48 20 63 6c 61 75 73 65 7d 20 77 69 74 68 20 7b  H clause} with {
228d0 7b 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  {common table ex
228e0 70 72 65 73 73 69 6f 6e 73 7d 20 57 49 54 48 7d  pressions} WITH}
228f0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
22900 65 44 69 61 67 72 61 6d 20 77 69 74 68 2d 63 6c  eDiagram with-cl
22910 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause.</tcl>..<p>
22920 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70  Common Table Exp
22930 72 65 73 73 69 6f 6e 73 20 6f 72 20 43 54 45 73  ressions or CTEs
22940 20 61 63 74 20 6c 69 6b 65 20 74 65 6d 70 6f 72   act like tempor
22950 61 72 79 20 5b 76 69 65 77 73 5d 20 74 68 61 74  ary [views] that
22960 20 65 78 69 73 74 0a 6f 6e 6c 79 20 66 6f 72 20   exist.only for 
22970 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f 66 20  the duration of 
22980 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
22990 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65 20 61  tement.  There a
229a0 72 65 20 74 77 6f 20 6b 69 6e 64 73 20 6f 66 0a  re two kinds of.
229b0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
229c0 72 65 73 73 69 6f 6e 73 3a 20 22 6f 72 64 69 6e  ressions: "ordin
229d0 61 72 79 22 20 61 6e 64 20 22 72 65 63 75 72 73  ary" and "recurs
229e0 69 76 65 22 2e 20 4f 72 64 69 6e 61 72 79 20 0a  ive". Ordinary .
229f0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
22a00 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 65 6c  ressions are hel
22a10 70 66 75 6c 20 66 6f 72 20 6d 61 6b 69 6e 67 0a  pful for making.
22a20 71 75 65 72 69 65 73 20 65 61 73 69 65 72 20 74  queries easier t
22a30 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 62 79 20  o understand by 
22a40 66 61 63 74 6f 72 69 6e 67 0a 73 75 62 71 75 65  factoring.subque
22a50 72 69 65 73 20 6f 75 74 20 6f 66 20 74 68 65 20  ries out of the 
22a60 6d 61 69 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  main SQL stateme
22a70 6e 74 2e 0a 52 65 63 75 72 73 69 76 65 20 63 6f  nt..Recursive co
22a80 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
22a90 73 73 69 6f 6e 73 0a 70 72 6f 76 69 64 65 20 74  ssions.provide t
22aa0 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 64 6f  he ability to do
22ab0 20 68 69 65 72 61 72 63 68 69 63 61 6c 20 6f 72   hierarchical or
22ac0 0a 72 65 63 75 72 73 69 76 65 20 71 75 65 72 69  .recursive queri
22ad0 65 73 20 6f 66 20 74 72 65 65 73 20 61 6e 64 20  es of trees and 
22ae0 67 72 61 70 68 73 2c 20 61 20 63 61 70 61 62 69  graphs, a capabi
22af0 6c 69 74 79 0a 74 68 61 74 20 69 73 20 6e 6f 74  lity.that is not
22b00 20 6f 74 68 65 72 77 69 73 65 20 61 76 61 69 6c   otherwise avail
22b10 61 62 6c 65 20 69 6e 20 74 68 65 20 53 51 4c 20  able in the SQL 
22b20 6c 61 6e 67 75 61 67 65 2e 0a 0a 3c 70 3e 41 6c  language...<p>Al
22b30 6c 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  l common table e
22b40 78 70 72 65 73 73 69 6f 6e 73 20 28 6f 72 64 69  xpressions (ordi
22b50 6e 61 72 79 20 61 6e 64 20 72 65 63 75 72 73 69  nary and recursi
22b60 76 65 29 20 61 72 65 20 0a 63 72 65 61 74 65 64  ve) are .created
22b70 20 62 79 20 70 72 65 70 65 6e 64 69 6e 67 20 61   by prepending a
22b80 20 57 49 54 48 20 63 6c 61 75 73 65 20 69 6e 20   WITH clause in 
22b90 66 72 6f 6e 74 20 6f 66 20 61 20 5b 53 45 4c 45  front of a [SELE
22ba0 43 54 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 5b  CT], [INSERT], [
22bb0 44 45 4c 45 54 45 5d 2c 0a 6f 72 20 5b 55 50 44  DELETE],.or [UPD
22bc0 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  ATE] statement. 
22bd0 20 41 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   A single WITH c
22be0 6c 61 75 73 65 20 63 61 6e 20 73 70 65 63 69 66  lause can specif
22bf0 79 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 63 6f  y one or more.co
22c00 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
22c10 73 73 69 6f 6e 73 2c 20 73 6f 6d 65 20 6f 66 20  ssions, some of 
22c20 77 68 69 63 68 20 61 72 65 20 6f 72 64 69 6e 61  which are ordina
22c30 72 79 20 61 6e 64 20 73 6f 6d 65 20 6f 66 20 77  ry and some of w
22c40 68 69 63 68 0a 61 72 65 20 72 65 63 75 72 73 69  hich.are recursi
22c50 76 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ve...<tcl>hd_fra
22c60 67 6d 65 6e 74 20 6f 72 64 69 6e 61 72 79 63 74  gment ordinaryct
22c70 65 20 7b 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  e {ordinary comm
22c80 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22c90 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ions}</tcl>.<h3>
22ca0 4f 72 64 69 6e 61 72 79 20 43 6f 6d 6d 6f 6e 20  Ordinary Common 
22cb0 54 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e  Table Expression
22cc0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6e 20 6f 72  s</h3>..<p>An or
22cd0 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
22ce0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 77  ble expression w
22cf0 6f 72 6b 73 20 61 73 20 69 66 20 69 74 20 77 65  orks as if it we
22d00 72 65 20 61 20 5b 76 69 65 77 5d 20 74 68 61 74  re a [view] that
22d10 0a 65 78 69 73 74 73 20 66 6f 72 20 74 68 65 20  .exists for the 
22d20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73 69  duration of a si
22d30 6e 67 6c 65 20 73 74 61 74 65 6d 65 6e 74 2e 20  ngle statement. 
22d40 20 4f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e   Ordinary common
22d50 20 74 61 62 6c 65 0a 65 78 70 72 65 73 73 69 6f   table.expressio
22d60 6e 73 20 61 72 65 20 75 73 65 66 75 6c 20 66 6f  ns are useful fo
22d70 72 20 66 61 63 74 6f 72 69 6e 67 20 6f 75 74 20  r factoring out 
22d80 73 75 62 71 75 65 72 69 65 73 20 61 6e 64 20 6d  subqueries and m
22d90 61 6b 69 6e 67 20 74 68 65 20 6f 76 65 72 61 6c  aking the overal
22da0 6c 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  l.SQL statement 
22db0 65 61 73 69 65 72 20 74 6f 20 72 65 61 64 20 61  easier to read a
22dc0 6e 64 20 75 6e 64 65 72 73 74 61 6e 64 2e 0a 0a  nd understand...
22dd0 3c 70 3e 41 20 57 49 54 48 20 63 6c 61 75 73 65  <p>A WITH clause
22de0 20 63 61 6e 20 63 6f 6e 74 61 69 6e 20 6f 72 64   can contain ord
22df0 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62  inary common tab
22e00 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65  le expressions e
22e10 76 65 6e 20 69 66 0a 69 74 20 69 6e 63 6c 75 64  ven if.it includ
22e20 65 73 20 74 68 65 20 52 45 43 55 52 53 49 56 45  es the RECURSIVE
22e30 20 6b 65 79 77 6f 72 64 2e 20 20 54 68 65 20 75   keyword.  The u
22e40 73 65 20 6f 66 20 52 45 43 55 52 53 49 56 45 20  se of RECURSIVE 
22e50 64 6f 65 73 20 6e 6f 74 20 66 6f 72 63 65 0a 63  does not force.c
22e60 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
22e70 65 73 73 69 6f 6e 73 20 74 6f 20 62 65 20 72 65  essions to be re
22e80 63 75 72 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 0a  cursive...<tcl>.
22e90 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 63 75  hd_fragment recu
22ea0 72 73 69 76 65 63 74 65 20 7b 72 65 63 75 72 73  rsivecte {recurs
22eb0 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ive common table
22ec0 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 5c 0a   expressions} \.
22ed0 7b 72 65 63 75 72 73 69 76 65 20 71 75 65 72 79  {recursive query
22ee0 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 65 63  }.</tcl>.<h3>Rec
22ef0 75 72 73 69 76 65 20 43 6f 6d 6d 6f 6e 20 54 61  ursive Common Ta
22f00 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c  ble Expressions<
22f10 2f 68 33 3e 0a 0a 3c 70 3e 41 20 72 65 63 75 72  /h3>..<p>A recur
22f20 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
22f30 65 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e  e expression can
22f40 20 62 65 20 75 73 65 64 20 74 6f 20 77 72 69 74   be used to writ
22f50 65 20 61 20 71 75 65 72 79 20 74 68 61 74 0a 77  e a query that.w
22f60 61 6c 6b 73 20 61 20 74 72 65 65 20 6f 72 20 67  alks a tree or g
22f70 72 61 70 68 2e 20 20 41 20 72 65 63 75 72 73 69  raph.  A recursi
22f80 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve common table 
22f90 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73 20 74  expression has t
22fa0 68 65 20 73 61 6d 65 0a 62 61 73 69 63 20 73 79  he same.basic sy
22fb0 6e 74 61 78 20 61 73 20 61 6e 20 6f 72 64 69 6e  ntax as an ordin
22fc0 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
22fd0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 62 75 74   expression, but
22fe0 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
22ff0 69 6e 67 0a 61 64 64 69 74 69 6f 6e 61 6c 20 66  ing.additional f
23000 65 61 74 75 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c  eatures:..<ol>.<
23010 6c 69 3e 20 54 68 65 20 22 5b 73 65 6c 65 63 74  li> The "[select
23020 2d 73 74 6d 74 5d 22 0a 20 20 20 20 20 6d 75 73  -stmt]".     mus
23030 74 20 62 65 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  t be a [compound
23040 20 73 65 6c 65 63 74 5d 20 77 68 65 72 65 20 74   select] where t
23050 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 63  he right-most [c
23060 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72  ompound-operator
23070 5d 20 69 73 0a 20 20 20 20 20 65 69 74 68 65 72  ] is.     either
23080 20 55 4e 49 4f 4e 20 6f 72 20 55 4e 49 4f 4e 20   UNION or UNION 
23090 41 4c 4c 2e 0a 3c 6c 69 3e 20 54 68 65 20 74 61  ALL..<li> The ta
230a0 62 6c 65 20 6e 61 6d 65 64 20 6f 6e 20 74 68 65  ble named on the
230b0 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20   left-hand side 
230c0 6f 66 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72  of the AS keywor
230d0 64 20 6d 75 73 74 20 61 70 70 65 61 72 0a 20 20  d must appear.  
230e0 20 20 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20     exactly once 
230f0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
23100 73 65 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d  se of the right-
23110 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74 61 74  most SELECT stat
23120 65 6d 65 6e 74 0a 20 20 20 20 20 6f 66 20 74 68  ement.     of th
23130 65 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63  e compound selec
23140 74 2c 20 61 6e 64 20 6e 6f 77 68 65 72 65 20 65  t, and nowhere e
23150 6c 73 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54  lse..</ol>..<p>T
23160 6f 20 70 75 74 20 69 74 20 61 6e 6f 74 68 65 72  o put it another
23170 20 77 61 79 2c 20 61 20 72 65 63 75 72 73 69 76   way, a recursiv
23180 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
23190 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 0a 6c  xpression must.l
231a0 6f 6f 6b 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c  ook like the fol
231b0 6c 6f 77 69 6e 67 3a 0a 0a 3c 74 63 6c 3e 52 65  lowing:..<tcl>Re
231c0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
231d0 67 72 61 6d 20 72 65 63 75 72 73 69 76 65 2d 63  gram recursive-c
231e0 74 65 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 65 20  te</tcl>..<p>We 
231f0 72 65 66 65 72 20 74 6f 20 74 68 65 20 74 61 62  refer to the tab
23200 6c 65 20 6e 61 6d 65 64 20 62 79 20 74 68 65 20  le named by the 
23210 63 74 65 2d 74 61 62 6c 65 2d 6e 61 6d 65 20 69  cte-table-name i
23220 6e 20 61 20 72 65 63 75 72 73 69 76 65 0a 63 6f  n a recursive.co
23230 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
23240 73 73 69 6f 6e 20 61 73 20 74 68 65 20 22 72 65  ssion as the "re
23250 63 75 72 73 69 76 65 20 74 61 62 6c 65 22 2e 0a  cursive table"..
23260 49 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  In the recursive
23270 2d 63 74 65 20 62 75 62 62 6c 65 20 64 69 61 67  -cte bubble diag
23280 72 61 6d 20 61 62 6f 76 65 2c 20 74 68 65 20 72  ram above, the r
23290 65 63 75 72 73 69 76 65 0a 74 61 62 6c 65 20 6d  ecursive.table m
232a0 75 73 74 20 61 70 70 65 61 72 20 65 78 61 63 74  ust appear exact
232b0 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 46  ly once in the F
232c0 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ROM clause of th
232d0 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
232e0 63 74 0a 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20  ct.and must not 
232f0 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20  appear anywhere 
23300 65 6c 73 65 20 69 6e 20 65 69 74 68 65 72 20 74  else in either t
23310 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  he initial-selec
23320 74 20 6f 72 20 74 68 65 0a 72 65 63 75 72 73 69  t or the.recursi
23330 76 65 2d 73 65 6c 65 63 74 2c 20 69 6e 63 6c 75  ve-select, inclu
23340 64 69 6e 67 20 73 75 62 71 75 65 72 69 65 73 2e  ding subqueries.
23350 20 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65    The initial-se
23360 6c 65 63 74 20 6d 61 79 20 62 65 0a 61 20 5b 63  lect may be.a [c
23370 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2c  ompound select],
23380 20 62 75 74 20 69 74 20 6d 61 79 20 6e 6f 74 20   but it may not 
23390 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45 52  include an ORDER
233a0 20 42 59 2c 20 4c 49 4d 49 54 2c 20 6f 72 20 4f   BY, LIMIT, or O
233b0 46 46 53 45 54 2e 0a 54 68 65 20 72 65 63 75 72  FFSET..The recur
233c0 73 69 76 65 2d 73 65 6c 65 63 74 20 6d 75 73 74  sive-select must
233d0 20 62 65 20 61 20 73 69 6d 70 6c 65 20 73 65 6c   be a simple sel
233e0 65 63 74 2c 20 6e 6f 74 20 61 20 63 6f 6d 70 6f  ect, not a compo
233f0 75 6e 64 2e 20 20 54 68 65 0a 72 65 63 75 72 73  und.  The.recurs
23400 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 61 6c  ive-select is al
23410 6c 6f 77 65 64 20 74 6f 20 69 6e 63 6c 75 64 65  lowed to include
23420 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c 49   an ORDER BY, LI
23430 4d 49 54 2c 20 61 6e 64 2f 6f 72 20 4f 46 46 53  MIT, and/or OFFS
23440 45 54 2e 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69  ET...<p>The basi
23450 63 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20  c algorithm for 
23460 63 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 63 6f  computing the co
23470 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63  ntent of the rec
23480 75 72 73 69 76 65 20 74 61 62 6c 65 0a 69 73 20  ursive table.is 
23490 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c  as follows:..<ol
234a0 3e 0a 3c 6c 69 3e 20 52 75 6e 20 74 68 65 20 69  >.<li> Run the i
234b0 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 61 6e  nitial-select an
234c0 64 20 61 64 64 20 74 68 65 20 72 65 73 75 6c 74  d add the result
234d0 73 20 74 6f 20 61 20 71 75 65 75 65 2e 0a 3c 6c  s to a queue..<l
234e0 69 3e 20 57 68 69 6c 65 20 74 68 65 20 71 75 65  i> While the que
234f0 75 65 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 3a  ue is not empty:
23500 0a 3c 6f 6c 20 74 79 70 65 3d 22 61 22 3e 0a 3c  .<ol type="a">.<
23510 6c 69 3e 20 45 78 74 72 61 63 74 20 61 20 73 69  li> Extract a si
23520 6e 67 6c 65 20 72 6f 77 20 66 72 6f 6d 20 74 68  ngle row from th
23530 65 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e  e queue..<li> In
23540 73 65 72 74 20 74 68 61 74 20 73 69 6e 67 6c 65  sert that single
23550 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 20 72 65   row into the re
23560 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a 3c 6c  cursive table.<l
23570 69 3e 20 50 72 65 74 65 6e 64 20 74 68 61 74 20  i> Pretend that 
23580 74 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6a  the single row j
23590 75 73 74 20 65 78 74 72 61 63 74 65 64 20 69 73  ust extracted is
235a0 20 74 68 65 20 6f 6e 6c 79 0a 20 20 20 20 20 72   the only.     r
235b0 6f 77 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ow in the recurs
235c0 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20 72 75  ive table and ru
235d0 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  n the recursive-
235e0 73 65 6c 65 63 74 2c 0a 20 20 20 20 20 61 64 64  select,.     add
235f0 69 6e 67 20 61 6c 6c 20 72 65 73 75 6c 74 73 20  ing all results 
23600 74 6f 20 74 68 65 20 71 75 65 75 65 2e 0a 3c 2f  to the queue..</
23610 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68  ol>.</ol>..<p>Th
23620 65 20 62 61 73 69 63 20 70 72 6f 63 65 64 75 72  e basic procedur
23630 65 20 61 62 6f 76 65 20 6d 61 79 20 6d 6f 64 69  e above may modi
23640 66 69 65 64 20 62 79 20 74 68 65 20 66 6f 6c 6c  fied by the foll
23650 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c  owing additional
23660 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c   rules:..<ul>.<l
23670 69 3e 3c 70 3e 0a 20 20 49 66 20 61 20 55 4e 49  i><p>.  If a UNI
23680 4f 4e 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 6e  ON operator conn
23690 65 63 74 73 20 74 68 65 20 69 6e 69 74 69 61 6c  ects the initial
236a0 2d 73 65 6c 65 63 74 20 77 69 74 68 20 74 68 65  -select with the
236b0 0a 20 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  .  recursive-sel
236c0 65 63 74 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61  ect, then only a
236d0 64 64 20 72 6f 77 73 20 74 6f 20 74 68 65 20 71  dd rows to the q
236e0 75 65 75 65 20 69 66 20 6e 6f 20 69 64 65 6e 74  ueue if no ident
236f0 69 63 61 6c 20 72 6f 77 20 68 61 73 0a 20 20 62  ical row has.  b
23700 65 65 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 61  een previously a
23710 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75  dded to the queu
23720 65 2e 20 20 52 65 70 65 61 74 65 64 20 72 6f 77  e.  Repeated row
23730 73 20 61 72 65 20 64 69 73 63 61 72 64 65 64 20  s are discarded 
23740 62 65 66 6f 72 65 20 62 65 69 6e 67 0a 20 20 61  before being.  a
23750 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75  dded to the queu
23760 65 20 65 76 65 6e 20 69 66 20 74 68 65 20 72 65  e even if the re
23770 70 65 61 74 65 64 20 72 6f 77 73 20 68 61 76 65  peated rows have
23780 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 65 78   already been ex
23790 74 72 61 63 74 65 64 0a 20 20 66 72 6f 6d 20 74  tracted.  from t
237a0 68 65 20 71 75 65 75 65 20 62 79 20 74 68 65 20  he queue by the 
237b0 72 65 63 75 72 73 69 6f 6e 20 73 74 65 70 2e 20  recursion step. 
237c0 20 49 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   If the operator
237d0 20 69 73 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20   is UNION ALL,. 
237e0 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 67   then all rows g
237f0 65 6e 65 72 61 74 65 64 20 62 79 20 62 6f 74 68  enerated by both
23800 20 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c   the initial-sel
23810 65 63 74 20 61 6e 64 20 74 68 65 0a 20 20 72 65  ect and the.  re
23820 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 61  cursive-select a
23830 72 65 20 61 6c 77 61 79 73 20 61 64 64 65 64 20  re always added 
23840 74 6f 20 74 68 65 20 71 75 65 75 65 20 65 76 65  to the queue eve
23850 6e 20 69 66 20 74 68 65 79 20 61 72 65 20 72 65  n if they are re
23860 70 65 61 74 73 2e 0a 20 20 57 68 65 6e 20 64 65  peats..  When de
23870 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 72  termining if a r
23880 6f 77 20 69 73 20 72 65 70 65 61 74 65 64 2c 20  ow is repeated, 
23890 4e 55 4c 4c 20 76 61 6c 75 65 73 20 63 6f 6d 70  NULL values comp
238a0 61 72 65 0a 20 20 65 71 75 61 6c 20 74 6f 20 6f  are.  equal to o
238b0 6e 65 20 61 6e 6f 74 68 65 72 20 61 6e 64 20 6e  ne another and n
238c0 6f 74 20 65 71 75 61 6c 20 74 6f 20 61 6e 79 20  ot equal to any 
238d0 6f 74 68 65 72 20 76 61 6c 75 65 2e 0a 3c 6c 69  other value..<li
238e0 3e 3c 70 3e 0a 20 20 54 68 65 20 4c 49 4d 49 54  ><p>.  The LIMIT
238f0 20 63 6c 61 75 73 65 2c 20 69 66 20 70 72 65 73   clause, if pres
23900 65 6e 74 2c 20 64 65 74 65 72 6d 69 6e 65 73 20  ent, determines 
23910 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
23920 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a  er of rows that.
23930 20 20 77 69 6c 6c 20 65 76 65 72 20 62 65 20 61    will ever be a
23940 64 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75  dded to the recu
23950 72 73 69 76 65 20 74 61 62 6c 65 20 69 6e 20 73  rsive table in s
23960 74 65 70 20 32 62 2e 0a 20 20 4f 6e 63 65 20 74  tep 2b..  Once t
23970 68 65 20 6c 69 6d 69 74 20 69 73 20 72 65 61 63  he limit is reac
23980 68 65 64 2c 20 74 68 65 20 72 65 63 75 72 73 69  hed, the recursi
23990 6f 6e 20 73 74 6f 70 73 2e 0a 20 20 41 20 6c 69  on stops..  A li
239a0 6d 69 74 20 6f 66 20 7a 65 72 6f 20 6d 65 61 6e  mit of zero mean
239b0 73 20 74 68 61 74 20 6e 6f 20 72 6f 77 73 20 61  s that no rows a
239c0 72 65 20 65 76 65 72 20 61 64 64 65 64 20 74 6f  re ever added to
239d0 20 74 68 65 0a 20 20 72 65 63 75 72 73 69 76 65   the.  recursive
239e0 20 74 61 62 6c 65 2c 20 61 6e 64 20 61 20 6e 65   table, and a ne
239f0 67 61 74 69 76 65 20 6c 69 6d 69 74 20 6d 65 61  gative limit mea
23a00 6e 73 20 61 6e 20 75 6e 6c 69 6d 69 74 65 64 20  ns an unlimited 
23a10 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 20  number of rows. 
23a20 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 74 6f   may be added to
23a30 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
23a40 61 62 6c 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  able..<li><p>.  
23a50 54 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73  The OFFSET claus
23a60 65 2c 20 69 66 20 69 74 20 69 73 20 70 72 65 73  e, if it is pres
23a70 65 6e 74 20 61 6e 64 20 68 61 73 20 61 20 70 6f  ent and has a po
23a80 73 69 74 69 76 65 20 76 61 6c 75 65 20 4e 2c 20  sitive value N, 
23a90 70 72 65 76 65 6e 74 73 20 74 68 65 0a 20 20 66  prevents the.  f
23aa0 69 72 73 74 20 4e 20 72 6f 77 73 20 66 72 6f 6d  irst N rows from
23ab0 20 62 65 69 6e 67 20 61 64 64 65 64 20 74 6f 20   being added to 
23ac0 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61  the recursive ta
23ad0 62 6c 65 2e 0a 20 20 54 68 65 20 66 69 72 73 74  ble..  The first
23ae0 20 4e 20 72 6f 77 73 20 61 72 65 20 73 74 69 6c   N rows are stil
23af0 6c 20 70 72 6f 63 65 73 73 65 64 20 62 79 20 74  l processed by t
23b00 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
23b10 65 63 74 3b 20 74 68 65 79 0a 20 20 6a 75 73 74  ect; they.  just
23b20 20 61 72 65 20 6e 6f 74 20 61 64 64 65 64 20 74   are not added t
23b30 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
23b40 74 61 62 6c 65 2e 20 20 52 6f 77 73 20 61 72 65  table.  Rows are
23b50 20 6e 6f 74 20 63 6f 75 6e 74 65 64 20 74 6f 77   not counted tow
23b60 61 72 64 0a 20 20 66 75 6c 66 69 6c 6c 69 6e 67  ard.  fulfilling
23b70 20 74 68 65 20 4c 49 4d 49 54 20 75 6e 74 69 6c   the LIMIT until
23b80 20 61 6c 6c 20 4f 46 46 53 45 54 20 72 6f 77 73   all OFFSET rows
23b90 20 68 61 76 65 20 62 65 65 6e 20 73 6b 69 70 70   have been skipp
23ba0 65 64 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66  ed..<li><p>.  If
23bb0 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61   an ORDER BY cla
23bc0 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
23bd0 69 74 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  it determines th
23be0 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
23bf0 20 72 6f 77 73 0a 20 20 61 72 65 20 65 78 74 72   rows.  are extr
23c00 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 71  acted from the q
23c10 75 65 75 65 20 69 6e 20 73 74 65 70 20 32 61 2e  ueue in step 2a.
23c20 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
23c30 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
23c40 2c 0a 20 20 74 68 65 6e 20 74 68 65 20 6f 72 64  ,.  then the ord
23c50 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
23c60 20 61 72 65 20 65 78 74 72 61 63 74 65 64 20 69   are extracted i
23c70 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 28 49  s undefined.  (I
23c80 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20  n the current.  
23c90 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
23ca0 74 68 65 20 71 75 65 75 65 20 62 65 63 6f 6d 65  the queue become
23cb0 73 20 61 20 46 49 46 4f 20 69 66 20 74 68 65 20  s a FIFO if the 
23cc0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
23cd0 69 73 20 6f 6d 69 74 74 65 64 2c 0a 20 20 62 75  is omitted,.  bu
23ce0 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 73  t applications s
23cf0 68 6f 75 6c 64 20 6e 6f 74 20 64 65 70 65 6e 64  hould not depend
23d00 20 6f 6e 20 74 68 61 74 20 66 61 63 74 20 73 69   on that fact si
23d10 6e 63 65 20 69 74 20 6d 69 67 68 74 20 63 68 61  nce it might cha
23d20 6e 67 65 2e 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63  nge.).</ul>..<tc
23d30 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63  l>hd_fragment rc
23d40 65 78 31 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65  ex1</tcl>.<h4>Re
23d50 63 75 72 73 69 76 65 20 51 75 65 72 79 20 45 78  cursive Query Ex
23d60 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e  amples</h4>..<p>
23d70 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75  The following qu
23d80 65 72 79 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  ery returns all 
23d90 69 6e 74 65 67 65 72 73 20 62 65 74 77 65 65 6e  integers between
23da0 20 31 20 61 6e 64 20 31 30 30 30 30 30 30 3a 0a   1 and 1000000:.
23db0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
23dc0 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56  e>.WITH RECURSIV
23dd0 45 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28 56  E.  cnt(x) AS (V
23de0 41 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e 20 41  ALUES(1) UNION A
23df0 4c 4c 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52  LL SELECT x+1 FR
23e00 4f 4d 20 63 6e 74 20 57 48 45 52 45 20 78 3c 31  OM cnt WHERE x<1
23e10 30 30 30 30 30 30 29 0a 53 45 4c 45 43 54 20 78  000000).SELECT x
23e20 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65   FROM cnt;.</pre
23e30 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
23e40 3c 70 3e 43 6f 6e 73 69 64 65 72 20 68 6f 77 20  <p>Consider how 
23e50 74 68 69 73 20 71 75 65 72 79 20 77 6f 72 6b 73  this query works
23e60 2e 20 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73  .  The initial-s
23e70 65 6c 65 63 74 0a 72 75 6e 73 20 66 69 72 73 74  elect.runs first
23e80 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 73   and returns a s
23e90 69 6e 67 6c 65 20 72 6f 77 0a 77 69 74 68 20 61  ingle row.with a
23ea0 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 22   single column "
23eb0 31 22 2e 20 20 54 68 69 73 20 6f 6e 65 20 72 6f  1".  This one ro
23ec0 77 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68  w is added to th
23ed0 65 20 71 75 65 75 65 2e 20 20 49 6e 0a 73 74 65  e queue.  In.ste
23ee0 70 20 32 61 2c 20 74 68 61 74 20 6f 6e 65 20 72  p 2a, that one r
23ef0 6f 77 20 69 73 20 65 78 74 72 61 63 74 65 64 20  ow is extracted 
23f00 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 61  from the queue a
23f10 6e 64 20 61 64 64 65 64 20 74 6f 20 22 63 6e 74  nd added to "cnt
23f20 22 2e 0a 54 68 65 6e 20 74 68 65 20 72 65 63 75  "..Then the recu
23f30 72 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20  rsive-select is 
23f40 72 75 6e 20 69 6e 20 61 63 63 6f 72 64 61 6e 63  run in accordanc
23f50 65 20 77 69 74 68 20 73 74 65 70 20 32 63 20 67  e with step 2c g
23f60 65 6e 65 72 61 74 69 6e 67 0a 61 20 73 69 6e 67  enerating.a sing
23f70 6c 65 20 6e 65 77 20 72 6f 77 20 77 69 74 68 20  le new row with 
23f80 76 61 6c 75 65 20 22 32 22 20 74 6f 20 61 64 64  value "2" to add
23f90 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20   to the queue.  
23fa0 54 68 65 20 71 75 65 75 65 20 73 74 69 6c 6c 0a  The queue still.
23fb0 68 61 73 20 6f 6e 65 20 72 6f 77 2c 20 73 6f 20  has one row, so 
23fc0 73 74 65 70 20 32 20 72 65 70 65 61 74 73 2e 20  step 2 repeats. 
23fd0 20 54 68 65 20 22 32 22 20 72 6f 77 20 69 73 20   The "2" row is 
23fe0 65 78 74 72 61 63 74 65 64 20 61 6e 64 20 61 64  extracted and ad
23ff0 64 65 64 20 74 6f 20 74 68 65 0a 72 65 63 75 72  ded to the.recur
24000 73 69 76 65 20 74 61 62 6c 65 20 62 79 20 73 74  sive table by st
24010 65 70 73 20 32 61 20 61 6e 64 20 32 62 2e 20 20  eps 2a and 2b.  
24020 54 68 65 6e 20 74 68 65 20 72 6f 77 20 63 6f 6e  Then the row con
24030 74 61 69 6e 69 6e 67 20 32 20 69 73 20 75 73 65  taining 2 is use
24040 64 20 0a 61 73 20 69 66 20 69 74 20 77 65 72 65  d .as if it were
24050 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f   the complete co
24060 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63  ntent of the rec
24070 75 72 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64  ursive table and
24080 20 74 68 65 20 0a 72 65 63 75 72 73 69 76 65 2d   the .recursive-
24090 73 65 6c 65 63 74 20 69 73 20 72 75 6e 20 61 67  select is run ag
240a0 61 69 6e 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  ain, resulting i
240b0 6e 20 61 20 72 6f 77 20 77 69 74 68 20 76 61 6c  n a row with val
240c0 75 65 20 22 33 22 20 62 65 69 6e 67 20 61 64 64  ue "3" being add
240d0 65 64 0a 74 6f 20 74 68 65 20 71 75 65 75 65 2e  ed.to the queue.
240e0 20 20 54 68 69 73 20 72 65 70 65 61 74 73 20 39    This repeats 9
240f0 39 39 39 39 39 20 74 69 6d 65 73 20 75 6e 74 69  99999 times unti
24100 6c 20 66 69 6e 61 6c 6c 79 20 61 74 20 73 74 65  l finally at ste
24110 70 20 32 61 20 74 68 65 0a 6f 6e 6c 79 20 76 61  p 2a the.only va
24120 6c 75 65 20 6f 6e 20 74 68 65 20 71 75 65 75 65  lue on the queue
24130 20 69 73 20 61 20 72 6f 77 20 63 6f 6e 74 61 69   is a row contai
24140 6e 69 6e 67 20 31 30 30 30 30 30 30 2e 20 20 54  ning 1000000.  T
24150 68 61 74 20 72 6f 77 20 69 73 0a 65 78 74 72 61  hat row is.extra
24160 63 74 65 64 20 61 6e 64 20 61 64 64 65 64 20 74  cted and added t
24170 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
24180 74 61 62 6c 65 2e 20 20 42 75 74 20 74 68 69 73  table.  But this
24190 20 74 69 6d 65 2c 20 74 68 65 0a 57 48 45 52 45   time, the.WHERE
241a0 20 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 74   clause causes t
241b0 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
241c0 65 63 74 20 74 6f 20 72 65 74 75 72 6e 20 6e 6f  ect to return no
241d0 20 72 6f 77 73 2c 20 73 6f 20 74 68 65 0a 71 75   rows, so the.qu
241e0 65 75 65 20 72 65 6d 61 69 6e 73 20 65 6d 70 74  eue remains empt
241f0 79 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73  y and the recurs
24200 69 6f 6e 20 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c  ion stops...<p><
24210 62 3e 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6e  b>Optimization n
24220 6f 74 65 3a 3c 2f 62 3e 0a 49 6e 20 74 68 65 20  ote:</b>.In the 
24230 64 69 73 63 75 73 73 69 6f 6e 20 61 62 6f 76 65  discussion above
24240 2c 20 73 74 61 74 65 6d 65 6e 74 73 20 6c 69 6b  , statements lik
24250 65 20 22 69 6e 73 65 72 74 20 74 68 65 20 72 6f  e "insert the ro
24260 77 20 69 6e 74 6f 0a 74 68 65 20 72 65 63 75 72  w into.the recur
24270 73 69 76 65 20 74 61 62 6c 65 22 20 73 68 6f 75  sive table" shou
24280 6c 64 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64  ld be understood
24290 20 63 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 6e   conceptually, n
242a0 6f 74 20 6c 69 74 65 72 61 6c 6c 79 2e 0a 49 74  ot literally..It
242b0 20 73 6f 75 6e 64 73 20 61 73 20 69 66 20 53 51   sounds as if SQ
242c0 4c 69 74 65 20 69 73 20 61 63 63 75 6d 75 6c 61  Lite is accumula
242d0 74 69 6e 67 20 61 20 68 75 67 65 20 74 61 62 6c  ting a huge tabl
242e0 65 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65  e.containing one
242f0 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2c 20 74   million rows, t
24300 68 65 6e 20 67 6f 69 6e 67 20 62 61 63 6b 20 61  hen going back a
24310 6e 64 20 73 63 61 6e 6e 69 6e 67 20 74 68 61 74  nd scanning that
24320 20 74 61 62 6c 65 0a 66 72 6f 6d 20 74 6f 70 20   table.from top 
24330 74 6f 20 62 6f 74 74 6f 6d 20 74 6f 20 67 65 6e  to bottom to gen
24340 65 72 61 74 65 20 74 68 65 20 72 65 73 75 6c 74  erate the result
24350 2e 20 20 57 68 61 74 20 72 65 61 6c 6c 79 20 68  .  What really h
24360 61 70 70 65 6e 73 0a 69 73 20 74 68 61 74 20 74  appens.is that t
24370 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
24380 65 72 20 73 65 65 73 20 74 68 61 74 20 76 61 6c  er sees that val
24390 75 65 73 20 69 6e 20 74 68 65 0a 22 63 6e 74 22  ues in the."cnt"
243a0 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
243b0 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 6f   are only used o
243c0 6e 63 65 2e 20 20 53 6f 20 61 73 20 65 61 63 68  nce.  So as each
243d0 20 72 6f 77 20 69 73 20 61 64 64 65 64 20 74 6f   row is added to
243e0 0a 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74  .the recursive t
243f0 61 62 6c 65 2c 20 74 68 61 74 20 72 6f 77 20 69  able, that row i
24400 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72 65  s immediately re
24410 74 75 72 6e 65 64 20 61 73 20 61 20 72 65 73 75  turned as a resu
24420 6c 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 53  lt of the main.S
24430 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
24440 61 6e 64 20 74 68 65 6e 20 64 69 73 63 61 72 64  and then discard
24450 65 64 2e 20 20 53 51 4c 69 74 65 20 64 6f 65 73  ed.  SQLite does
24460 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63   <em>not</em> ac
24470 63 75 6d 75 6c 61 74 65 0a 61 20 74 65 6d 70 6f  cumulate.a tempo
24480 72 61 72 79 20 74 61 62 6c 65 20 63 6f 6e 74 61  rary table conta
24490 69 6e 69 6e 67 20 61 20 6d 69 6c 6c 69 6f 6e 20  ining a million 
244a0 72 6f 77 73 2e 20 20 56 65 72 79 20 6c 69 74 74  rows.  Very litt
244b0 6c 65 20 6d 65 6d 6f 72 79 20 69 73 0a 6e 65 65  le memory is.nee
244c0 64 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 61  ded to run the a
244d0 62 6f 76 65 20 65 78 61 6d 70 6c 65 2e 20 20 48  bove example.  H
244e0 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 20 65  owever, if the e
244f0 78 61 6d 70 6c 65 20 68 61 64 20 75 73 65 64 0a  xample had used.
24500 55 4e 49 4f 4e 20 69 6e 73 74 65 61 64 20 6f 66  UNION instead of
24510 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e   UNION ALL, then
24520 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 68 61   SQLite would ha
24530 76 65 20 68 61 64 20 74 6f 20 6b 65 65 70 20 61  ve had to keep a
24540 72 6f 75 6e 64 0a 61 6c 6c 20 70 72 65 76 69 6f  round.all previo
24550 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 63  usly generated c
24560 6f 6e 74 65 6e 74 20 69 6e 20 6f 72 64 65 72 20  ontent in order 
24570 74 6f 20 63 68 65 63 6b 20 66 6f 72 20 64 75 70  to check for dup
24580 6c 69 63 61 74 65 73 2e 0a 46 6f 72 20 74 68 69  licates..For thi
24590 73 20 72 65 61 73 6f 6e 2c 20 70 72 6f 67 72 61  s reason, progra
245a0 6d 6d 65 72 73 20 73 68 6f 75 6c 64 20 73 74 72  mmers should str
245b0 69 76 65 20 74 6f 20 75 73 65 20 55 4e 49 4f 4e  ive to use UNION
245c0 20 41 4c 4c 20 69 6e 73 74 65 61 64 0a 6f 66 20   ALL instead.of 
245d0 55 4e 49 4f 4e 20 77 68 65 6e 20 66 65 61 73 69  UNION when feasi
245e0 62 6c 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73  ble...<p>Here is
245f0 20 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20   a variation on 
24600 74 68 65 20 70 72 65 76 69 6f 75 73 20 65 78 61  the previous exa
24610 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  mple:..<blockquo
24620 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
24630 43 55 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29  CURSIVE.  cnt(x)
24640 20 41 53 20 28 0a 20 20 20 20 20 53 45 4c 45 43   AS (.     SELEC
24650 54 20 31 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41  T 1.     UNION A
24660 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43 54 20 78  LL.     SELECT x
24670 2b 31 20 46 52 4f 4d 20 63 6e 74 0a 20 20 20 20  +1 FROM cnt.    
24680 20 20 4c 49 4d 49 54 20 31 30 30 30 30 30 30 0a    LIMIT 1000000.
24690 20 20 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f    ).SELECT x FRO
246a0 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  M cnt;.</pre></b
246b0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
246c0 68 65 72 65 20 61 72 65 20 74 77 6f 20 64 69 66  here are two dif
246d0 66 65 72 65 6e 63 65 73 20 69 6e 20 74 68 69 73  ferences in this
246e0 20 76 61 72 69 61 74 69 6f 6e 2e 20 20 54 68 65   variation.  The
246f0 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20   initial-select 
24700 69 73 0a 22 53 45 4c 45 43 54 20 31 22 20 69 6e  is."SELECT 1" in
24710 73 74 65 61 64 20 6f 66 20 22 56 41 4c 55 45 53  stead of "VALUES
24720 28 31 29 22 2e 20 20 42 75 74 20 74 68 6f 73 65  (1)".  But those
24730 20 61 72 65 20 6a 75 73 74 20 64 69 66 66 65 72   are just differ
24740 65 6e 74 0a 73 79 6e 74 61 78 65 73 20 66 6f 72  ent.syntaxes for
24750 20 73 61 79 69 6e 67 20 65 78 61 63 74 6c 79 20   saying exactly 
24760 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20  the same thing. 
24770 20 54 68 65 20 6f 74 68 65 72 20 63 68 61 6e 67   The other chang
24780 65 20 69 73 20 74 68 61 74 20 74 68 65 0a 72 65  e is that the.re
24790 63 75 72 73 69 6f 6e 20 69 73 20 73 74 6f 70 70  cursion is stopp
247a0 65 64 20 62 79 20 61 20 4c 49 4d 49 54 20 72 61  ed by a LIMIT ra
247b0 74 68 65 72 20 74 68 61 6e 20 61 20 57 48 45 52  ther than a WHER
247c0 45 20 63 6c 61 75 73 65 2e 20 20 54 68 65 20 75  E clause.  The u
247d0 73 65 20 6f 66 0a 4c 49 4d 49 54 20 6d 65 61 6e  se of.LIMIT mean
247e0 73 20 74 68 61 74 20 77 68 65 6e 20 74 68 65 20  s that when the 
247f0 6f 6e 65 2d 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f  one-millionth ro
24800 77 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68  w is added to th
24810 65 20 22 63 6e 74 22 20 74 61 62 6c 65 0a 28 61  e "cnt" table.(a
24820 6e 64 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  nd returned by t
24830 68 65 20 6d 61 69 6e 20 53 45 4c 45 43 54 2c 20  he main SELECT, 
24840 74 68 61 6e 6b 73 20 74 6f 20 74 68 65 20 71 75  thanks to the qu
24850 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 29 0a 74  ery optimizer).t
24860 68 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 6f  hen the recursio
24870 6e 20 73 74 6f 70 73 20 69 6d 6d 65 64 69 61 74  n stops immediat
24880 65 6c 79 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ely regardless o
24890 66 20 68 6f 77 20 6d 61 6e 79 20 72 6f 77 73 20  f how many rows 
248a0 6d 69 67 68 74 20 62 65 0a 6c 65 66 74 20 69 6e  might be.left in
248b0 20 74 68 65 20 71 75 65 75 65 2e 20 20 4f 6e 20   the queue.  On 
248c0 6d 6f 72 65 20 63 6f 6d 70 6c 65 78 20 71 75 65  more complex que
248d0 72 69 65 73 2c 20 69 74 20 63 61 6e 20 73 6f 6d  ries, it can som
248e0 65 74 69 6d 65 73 20 62 65 0a 64 69 66 66 69 63  etimes be.diffic
248f0 75 6c 74 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ult to ensure th
24900 61 74 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  at the WHERE cla
24910 75 73 65 20 77 69 6c 6c 20 65 76 65 6e 74 75 61  use will eventua
24920 6c 6c 79 20 63 61 75 73 65 20 74 68 65 0a 71 75  lly cause the.qu
24930 65 75 65 20 74 6f 20 64 72 61 69 6e 20 61 6e 64  eue to drain and
24940 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 74   the recursion t
24950 6f 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75  o terminate.  Bu
24960 74 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  t the LIMIT clau
24970 73 65 20 77 69 6c 6c 0a 61 6c 77 61 79 73 20 73  se will.always s
24980 74 6f 70 20 74 68 65 20 72 65 63 75 72 73 69 6f  top the recursio
24990 6e 2e 20 20 53 6f 20 69 74 20 69 73 20 67 6f 6f  n.  So it is goo
249a0 64 20 70 72 61 63 74 69 63 65 20 74 6f 20 61 6c  d practice to al
249b0 77 61 79 73 20 69 6e 63 6c 75 64 65 20 61 0a 4c  ways include a.L
249c0 49 4d 49 54 20 63 6c 61 75 73 65 20 61 73 20 61  IMIT clause as a
249d0 20 73 61 66 65 74 79 20 69 66 20 61 6e 20 75 70   safety if an up
249e0 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
249f0 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 63   size of the rec
24a00 75 72 73 69 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e  ursion .is known
24a10 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
24a20 65 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a  ent rcex2</tcl>.
24a30 3c 68 34 3e 48 69 65 72 61 72 63 68 69 63 61 6c  <h4>Hierarchical
24a40 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c   Query Examples<
24a50 2f 68 34 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65  /h4>..<p>Conside
24a60 72 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 64  r a table that d
24a70 65 73 63 72 69 62 65 73 20 74 68 65 20 6d 65 6d  escribes the mem
24a80 62 65 72 73 20 6f 66 20 61 6e 20 6f 72 67 61 6e  bers of an organ
24a90 69 7a 61 74 69 6f 6e 20 61 73 0a 77 65 6c 6c 20  ization as.well 
24aa0 61 73 20 74 68 65 20 63 68 61 69 6e 2d 6f 66 2d  as the chain-of-
24ab0 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 20 74  command within t
24ac0 68 61 74 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e  hat organization
24ad0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
24ae0 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
24af0 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45  E org(.  name TE
24b00 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  XT PRIMARY KEY,.
24b10 20 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45    boss TEXT REFE
24b20 52 45 4e 43 45 53 20 6f 72 67 2c 0a 20 20 68 65  RENCES org,.  he
24b30 69 67 68 74 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f  ight INT,.  -- o
24b40 74 68 65 72 20 63 6f 6e 74 65 6e 74 20 6f 6d 69  ther content omi
24b50 74 74 65 64 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  tted.);.</pre></
24b60 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
24b70 45 76 65 72 79 20 6d 65 6d 62 65 72 20 69 6e 20  Every member in 
24b80 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e  the organization
24b90 20 68 61 73 20 61 20 6e 61 6d 65 2c 20 61 6e 64   has a name, and
24ba0 20 6d 6f 73 74 20 6d 65 6d 62 65 72 73 20 68 61   most members ha
24bb0 76 65 0a 61 20 73 69 6e 67 6c 65 20 62 6f 73 73  ve.a single boss
24bc0 2e 20 20 28 54 68 65 20 68 65 61 64 20 6f 66 20  .  (The head of 
24bd0 74 68 65 20 77 68 6f 6c 65 20 6f 72 67 61 6e 69  the whole organi
24be0 7a 61 74 69 6f 6e 20 68 61 73 20 61 20 4e 55 4c  zation has a NUL
24bf0 4c 0a 22 62 6f 73 73 22 20 66 69 65 6c 64 2e 29  L."boss" field.)
24c00 20 54 68 65 20 72 6f 77 73 20 6f 66 20 74 68 65   The rows of the
24c10 20 22 6f 72 67 22 20 74 61 62 6c 65 20 66 6f 72   "org" table for
24c20 6d 20 61 20 74 72 65 65 2e 0a 0a 3c 70 3e 48 65  m a tree...<p>He
24c30 72 65 20 69 73 20 61 20 71 75 65 72 79 20 74 68  re is a query th
24c40 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  at computes the 
24c50 61 76 65 72 61 67 65 20 68 65 69 67 68 74 20 6f  average height o
24c60 76 65 72 20 65 76 65 72 79 6f 6e 65 0a 69 6e 20  ver everyone.in 
24c70 41 6c 69 63 65 27 73 20 6f 72 67 61 6e 69 7a 61  Alice's organiza
24c80 74 69 6f 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 20  tion, including 
24c90 41 6c 69 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  Alice:..<blockqu
24ca0 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
24cb0 45 43 55 52 53 49 56 45 0a 20 20 77 6f 72 6b 73  ECURSIVE.  works
24cc0 5f 66 6f 72 5f 61 6c 69 63 65 28 6e 29 20 41 53  _for_alice(n) AS
24cd0 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41   (.    VALUES('A
24ce0 6c 69 63 65 27 29 0a 20 20 20 20 55 4e 49 4f 4e  lice').    UNION
24cf0 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65  .    SELECT name
24d00 20 46 52 4f 4d 20 6f 72 67 2c 20 77 6f 72 6b 73   FROM org, works
24d10 5f 66 6f 72 5f 61 6c 69 63 65 0a 20 20 20 20 20  _for_alice.     
24d20 57 48 45 52 45 20 6f 72 67 2e 62 6f 73 73 3d 77  WHERE org.boss=w
24d30 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e  orks_for_alice.n
24d40 0a 20 20 29 0a 53 45 4c 45 43 54 20 61 76 67 28  .  ).SELECT avg(
24d50 68 65 69 67 68 74 29 20 46 52 4f 4d 20 6f 72 67  height) FROM org
24d60 0a 20 57 48 45 52 45 20 6f 72 67 2e 6e 61 6d 65  . WHERE org.name
24d70 20 49 4e 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c   IN works_for_al
24d80 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ice;.</pre></blo
24d90 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
24da0 20 6e 65 78 74 20 65 78 61 6d 70 6c 65 20 75 73   next example us
24db0 65 73 20 74 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74  es two .common t
24dc0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
24dd0 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 57 49 54   in a single WIT
24de0 48 20 63 6c 61 75 73 65 2e 20 20 0a 54 68 65 20  H clause.  .The 
24df0 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
24e00 72 65 63 6f 72 64 73 20 61 20 66 61 6d 69 6c 79  records a family
24e10 20 74 72 65 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75   tree:..<blockqu
24e20 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
24e30 20 54 41 42 4c 45 20 66 61 6d 69 6c 79 28 0a 20   TABLE family(. 
24e40 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41   name TEXT PRIMA
24e50 52 59 20 4b 45 59 2c 0a 20 20 6d 6f 6d 20 54 45  RY KEY,.  mom TE
24e60 58 54 20 52 45 46 45 52 45 4e 43 45 53 20 66 61  XT REFERENCES fa
24e70 6d 69 6c 79 2c 0a 20 20 64 61 64 20 54 45 58 54  mily,.  dad TEXT
24e80 20 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69   REFERENCES fami
24e90 6c 79 2c 0a 20 20 62 6f 72 6e 20 44 41 54 45 54  ly,.  born DATET
24ea0 49 4d 45 2c 0a 20 20 64 69 65 64 20 44 41 54 45  IME,.  died DATE
24eb0 54 49 4d 45 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66  TIME, -- NULL if
24ec0 20 73 74 69 6c 6c 20 61 6c 69 76 65 0a 20 20 2d   still alive.  -
24ed0 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e 74 0a  - other content.
24ee0 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
24ef0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22  quote>..<p>The "
24f00 66 61 6d 69 6c 79 22 20 74 61 62 6c 65 20 69 73  family" table is
24f10 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
24f20 65 61 72 6c 69 65 72 20 22 6f 72 67 22 20 74 61  earlier "org" ta
24f30 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ble except that 
24f40 0a 6e 6f 77 20 74 68 65 72 65 20 61 72 65 20 74  .now there are t
24f50 77 6f 20 70 61 72 65 6e 74 73 20 74 6f 20 65 61  wo parents to ea
24f60 63 68 20 6d 65 6d 62 65 72 2e 0a 57 65 20 77 61  ch member..We wa
24f70 6e 74 20 74 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c  nt to know all l
24f80 69 76 69 6e 67 20 61 6e 63 65 73 74 6f 72 73 20  iving ancestors 
24f90 6f 66 20 41 6c 69 63 65 2c 20 66 72 6f 6d 20 6f  of Alice, from o
24fa0 6c 64 65 73 74 20 74 6f 20 79 6f 75 6e 67 65 73  ldest to younges
24fb0 74 2e 0a 41 6e 20 6f 72 64 69 6e 61 72 79 20 63  t..An ordinary c
24fc0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
24fd0 65 73 73 69 6f 6e 2c 20 22 70 61 72 65 6e 74 5f  ession, "parent_
24fe0 6f 66 22 2c 20 69 73 20 64 65 66 69 6e 65 64 20  of", is defined 
24ff0 66 69 72 73 74 2e 20 20 54 68 61 74 0a 6f 72 64  first.  That.ord
25000 69 6e 61 72 79 20 43 54 45 20 69 73 20 61 20 76  inary CTE is a v
25010 69 65 77 20 74 68 61 74 20 63 61 6e 20 62 65 20  iew that can be 
25020 75 73 65 64 20 74 6f 20 66 69 6e 64 20 61 6c 6c  used to find all
25030 20 70 61 72 65 6e 74 73 20 6f 66 20 61 6e 79 0a   parents of any.
25040 69 6e 64 69 76 69 64 75 61 6c 2e 20 20 54 68 61  individual.  Tha
25050 74 20 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69  t ordinary CTE i
25060 73 20 74 68 65 6e 20 75 73 65 64 20 69 6e 20 74  s then used in t
25070 68 65 20 22 61 6e 63 65 73 74 6f 72 5f 6f 66 5f  he "ancestor_of_
25080 61 6c 69 63 65 22 0a 72 65 63 75 72 73 69 76 65  alice".recursive
25090 20 43 54 45 2e 20 20 54 68 65 20 72 65 63 75 72   CTE.  The recur
250a0 73 69 76 65 20 43 54 45 20 69 73 20 74 68 65 6e  sive CTE is then
250b0 20 75 73 65 64 20 69 6e 20 74 68 65 20 66 69 6e   used in the fin
250c0 61 6c 20 71 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63  al query:..<bloc
250d0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
250e0 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 70 61  H RECURSIVE.  pa
250f0 72 65 6e 74 5f 6f 66 28 6e 61 6d 65 2c 20 70 61  rent_of(name, pa
25100 72 65 6e 74 29 20 41 53 0a 20 20 20 20 28 53 45  rent) AS.    (SE
25110 4c 45 43 54 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46  LECT name, mom F
25120 52 4f 4d 20 66 61 6d 69 6c 79 20 55 4e 49 4f 4e  ROM family UNION
25130 20 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 64 61   SELECT name, da
25140 64 20 46 52 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a  d FROM family),.
25150 20 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c    ancestor_of_al
25160 69 63 65 28 6e 61 6d 65 29 20 41 53 0a 20 20 20  ice(name) AS.   
25170 20 28 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20   (SELECT parent 
25180 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 57  FROM parent_of W
25190 48 45 52 45 20 6e 61 6d 65 3d 27 41 6c 69 63 65  HERE name='Alice
251a0 27 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  '.     UNION ALL
251b0 0a 20 20 20 20 20 53 45 4c 45 43 54 20 70 61 72  .     SELECT par
251c0 65 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f  ent FROM parent_
251d0 6f 66 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72  of JOIN ancestor
251e0 5f 6f 66 5f 61 6c 69 63 65 20 55 53 49 4e 47 28  _of_alice USING(
251f0 6e 61 6d 65 29 29 0a 53 45 4c 45 43 54 20 66 61  name)).SELECT fa
25200 6d 69 6c 79 2e 6e 61 6d 65 20 46 52 4f 4d 20 61  mily.name FROM a
25210 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
25220 2c 20 66 61 6d 69 6c 79 0a 20 57 48 45 52 45 20  , family. WHERE 
25230 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63  ancestor_of_alic
25240 65 2e 6e 61 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61  e.name=family.na
25250 6d 65 0a 20 20 20 41 4e 44 20 64 69 65 64 20 49  me.   AND died I
25260 53 20 4e 55 4c 4c 0a 20 4f 52 44 45 52 20 42 59  S NULL. ORDER BY
25270 20 62 6f 72 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62   born;.</pre></b
25280 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c  lockquote>..<tcl
25290 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65  >hd_fragment rce
252a0 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 51 75 65  x2</tcl>.<h4>Que
252b0 72 69 65 73 20 41 67 61 69 6e 73 74 20 41 20 47  ries Against A G
252c0 72 61 70 68 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20  raph</h4>..<p>A 
252d0 76 65 72 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20  version control 
252e0 73 79 73 74 65 6d 20 28 56 43 53 29 20 77 69 6c  system (VCS) wil
252f0 6c 20 74 79 70 69 63 61 6c 6c 79 20 73 74 6f 72  l typically stor
25300 65 20 74 68 65 20 65 76 6f 6c 76 69 6e 67 0a 76  e the evolving.v
25310 65 72 73 69 6f 6e 73 20 6f 66 20 61 20 70 72 6f  ersions of a pro
25320 6a 65 63 74 20 61 73 20 61 20 64 69 72 65 63 74  ject as a direct
25330 65 64 20 61 63 79 63 6c 69 63 20 67 72 61 70 68  ed acyclic graph
25340 20 28 44 41 47 29 2e 20 20 43 61 6c 6c 20 65 61   (DAG).  Call ea
25350 63 68 0a 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ch.version of th
25360 65 20 70 72 6f 6a 65 63 74 20 61 20 22 63 68 65  e project a "che
25370 63 6b 69 6e 22 2e 20 20 41 20 73 69 6e 67 6c 65  ckin".  A single
25380 0a 63 68 65 63 6b 69 6e 20 63 61 6e 20 68 61 76  .checkin can hav
25390 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70  e zero or more p
253a0 61 72 65 6e 74 73 2e 20 20 4d 6f 73 74 20 63 68  arents.  Most ch
253b0 65 63 6b 69 6e 73 20 28 65 78 63 65 70 74 20 74  eckins (except t
253c0 68 65 0a 66 69 72 73 74 29 20 68 61 76 65 20 61  he.first) have a
253d0 20 73 69 6e 67 6c 65 20 70 61 72 65 6e 74 2c 20   single parent, 
253e0 62 75 74 20 69 6e 20 74 68 65 20 63 61 73 65 20  but in the case 
253f0 6f 66 20 61 20 6d 65 72 67 65 2c 20 61 20 63 68  of a merge, a ch
25400 65 63 6b 69 6e 0a 6d 69 67 68 74 20 68 61 76 65  eckin.might have
25410 20 74 77 6f 20 6f 72 20 74 68 72 65 65 20 6f 72   two or three or
25420 20 6d 6f 72 65 20 70 61 72 65 6e 74 73 2e 20 20   more parents.  
25430 41 20 73 63 68 65 6d 61 20 74 6f 20 6b 65 65 70  A schema to keep
25440 20 74 72 61 63 6b 20 6f 66 0a 63 68 65 63 6b 69   track of.checki
25450 6e 73 20 61 6e 64 20 74 68 65 20 6f 72 64 65 72  ns and the order
25460 20 69 6e 20 77 68 69 63 68 20 74 68 65 79 20 6f   in which they o
25470 63 63 75 72 20 6d 69 67 68 74 20 6c 6f 6f 6b 20  ccur might look 
25480 73 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65 0a 74  something like.t
25490 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  his:..<blockquot
254a0 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
254b0 41 42 4c 45 20 63 68 65 63 6b 69 6e 28 0a 20 20  ABLE checkin(.  
254c0 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  id INTEGER PRIMA
254d0 52 59 20 4b 45 59 2c 0a 20 20 6d 74 69 6d 65 20  RY KEY,.  mtime 
254e0 49 4e 54 45 47 45 52 20 2d 2d 20 74 69 6d 65 73  INTEGER -- times
254f0 74 61 6d 70 20 77 68 65 6e 20 74 68 69 73 20 63  tamp when this c
25500 68 65 63 6b 69 6e 20 6f 63 63 75 72 72 65 64 0a  heckin occurred.
25510 29 3b 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  );.CREATE TABLE 
25520 64 65 72 69 76 65 64 66 72 6f 6d 28 0a 20 20 78  derivedfrom(.  x
25530 66 72 6f 6d 20 49 4e 54 45 47 45 52 20 4e 4f 54  from INTEGER NOT
25540 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43 45 53   NULL REFERENCES
25550 20 63 68 65 63 6b 69 6e 2c 20 2d 2d 20 70 61 72   checkin, -- par
25560 65 6e 74 20 63 68 65 63 6b 69 6e 0a 20 20 78 74  ent checkin.  xt
25570 6f 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55  o INTEGER NOT NU
25580 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68  LL REFERENCES ch
25590 65 63 6b 69 6e 2c 20 20 20 2d 2d 20 64 65 72 69  eckin,   -- deri
255a0 76 65 64 20 63 68 65 63 6b 69 6e 0a 20 20 50 52  ved checkin.  PR
255b0 49 4d 41 52 59 20 4b 45 59 28 78 66 72 6f 6d 2c  IMARY KEY(xfrom,
255c0 78 74 6f 29 0a 29 3b 0a 43 52 45 41 54 45 20 49  xto).);.CREATE I
255d0 4e 44 45 58 20 64 65 72 69 76 65 64 66 72 6f 6d  NDEX derivedfrom
255e0 5f 62 61 63 6b 20 4f 4e 20 64 65 72 69 76 65 64  _back ON derived
255f0 66 72 6f 6d 28 78 74 6f 2c 78 66 72 6f 6d 29 3b  from(xto,xfrom);
25600 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
25610 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 67 72  ote>..<p>This gr
25620 61 70 68 20 69 73 20 61 63 79 63 6c 69 63 2e 20  aph is acyclic. 
25630 20 41 6e 64 20 77 65 20 61 73 73 75 6d 65 20 74   And we assume t
25640 68 61 74 20 74 68 65 20 6d 74 69 6d 65 20 6f 66  hat the mtime of
25650 20 65 76 65 72 79 0a 63 68 69 6c 64 20 63 68 65   every.child che
25660 63 6b 69 6e 20 69 73 20 6e 6f 20 6c 65 73 73 20  ckin is no less 
25670 74 68 61 6e 20 74 68 65 20 6d 74 69 6d 65 20 6f  than the mtime o
25680 66 20 61 6c 6c 20 69 74 73 20 70 61 72 65 6e 74  f all its parent
25690 73 2e 20 20 42 75 74 0a 75 6e 6c 69 6b 65 20 74  s.  But.unlike t
256a0 68 65 20 65 61 72 6c 69 65 72 20 65 78 61 6d 70  he earlier examp
256b0 6c 65 73 2c 20 74 68 69 73 20 67 72 61 70 68 20  les, this graph 
256c0 6d 69 67 68 74 20 68 61 76 65 20 6d 75 6c 74 69  might have multi
256d0 70 6c 65 20 70 61 74 68 73 20 6f 66 0a 64 69 66  ple paths of.dif
256e0 66 65 72 69 6e 67 20 6c 65 6e 67 74 68 73 20 62  fering lengths b
256f0 65 74 77 65 65 6e 20 61 6e 79 20 74 77 6f 20 63  etween any two c
25700 68 65 63 6b 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20  heckins...<p>We 
25710 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20 74 68 65  want to know the
25720 20 74 77 65 6e 74 79 20 6d 6f 73 74 20 72 65 63   twenty most rec
25730 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 69 6e  ent ancestors in
25740 20 74 69 6d 65 20 28 6f 75 74 20 6f 66 0a 74 68   time (out of.th
25750 65 20 74 68 6f 75 73 61 6e 64 73 20 61 6e 64 20  e thousands and 
25760 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e 63  thousands of anc
25770 65 73 74 6f 72 73 20 69 6e 20 74 68 65 20 77 68  estors in the wh
25780 6f 6c 65 20 44 41 47 29 20 66 6f 72 0a 63 68 65  ole DAG) for.che
25790 63 6b 69 6e 20 22 40 42 41 53 45 4c 49 4e 45 22  ckin "@BASELINE"
257a0 2e 20 20 28 41 20 71 75 65 72 79 20 73 69 6d 69  .  (A query simi
257b0 6c 61 72 20 74 6f 20 74 68 69 73 20 69 73 20 75  lar to this is u
257c0 73 65 64 0a 62 79 20 74 68 65 20 3c 61 20 68 72  sed.by the <a hr
257d0 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 66  ef="http://www.f
257e0 6f 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e  ossil-scm.org/">
257f0 46 6f 73 73 69 6c 3c 2f 61 3e 20 56 43 53 20 74  Fossil</a> VCS t
25800 6f 0a 73 68 6f 77 20 74 68 65 20 4e 20 6d 6f 73  o.show the N mos
25810 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f  t recent ancesto
25820 72 73 20 6f 66 20 61 20 63 68 65 63 6b 2e 20 20  rs of a check.  
25830 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 3c 61 20  For example:.<a 
25840 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77  href="http://www
25850 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f  .sqlite.org/src/
25860 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b  timeline?p=trunk
25870 26 6e 3d 33 30 22 3e 68 74 74 70 3a 2f 2f 77 77  &n=30">http://ww
25880 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63  w.sqlite.org/src
25890 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e  /timeline?p=trun
258a0 6b 26 6e 3d 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62  k&n=30</a>.)..<b
258b0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
258c0 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
258d0 20 61 6e 63 65 73 74 6f 72 28 69 64 2c 6d 74 69   ancestor(id,mti
258e0 6d 65 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c  me) AS (.    SEL
258f0 45 43 54 20 69 64 2c 20 6d 74 69 6d 65 20 46 52  ECT id, mtime FR
25900 4f 4d 20 63 68 65 63 6b 69 6e 20 57 48 45 52 45  OM checkin WHERE
25910 20 69 64 3d 40 42 41 53 45 4c 49 4e 45 0a 20 20   id=@BASELINE.  
25920 20 20 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45    UNION.    SELE
25930 43 54 20 64 65 72 69 76 65 64 66 72 6f 6d 2e 78  CT derivedfrom.x
25940 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 2e 6d 74  from, checkin.mt
25950 69 6d 65 0a 20 20 20 20 20 20 46 52 4f 4d 20 61  ime.      FROM a
25960 6e 63 65 73 74 6f 72 2c 20 64 65 72 69 76 65 64  ncestor, derived
25970 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 0a 20 20  from, checkin.  
25980 20 20 20 57 48 45 52 45 20 61 6e 63 65 73 74 6f     WHERE ancesto
25990 72 2e 69 64 3d 64 65 72 69 76 65 64 66 72 6f 6d  r.id=derivedfrom
259a0 2e 78 74 6f 0a 20 20 20 20 20 20 20 41 4e 44 20  .xto.       AND 
259b0 63 68 65 63 6b 69 6e 2e 69 64 3d 64 65 72 69 76  checkin.id=deriv
259c0 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20  edfrom.xfrom.   
259d0 20 20 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b    ORDER BY check
259e0 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43 0a 20 20  in.mtime DESC.  
259f0 20 20 20 4c 49 4d 49 54 20 32 30 0a 20 20 29 0a     LIMIT 20.  ).
25a00 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 68  SELECT * FROM ch
25a10 65 63 6b 69 6e 20 4a 4f 49 4e 20 61 6e 63 65 73  eckin JOIN ances
25a20 74 6f 72 20 55 53 49 4e 47 28 69 64 29 3b 0a 3c  tor USING(id);.<
25a30 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
25a40 65 3e 0a 0a 3c 70 3e 0a 54 68 65 20 22 4f 52 44  e>..<p>.The "ORD
25a50 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74  ER BY checkin.mt
25a60 69 6d 65 20 44 45 53 43 22 20 74 65 72 6d 20 69  ime DESC" term i
25a70 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  n the recursive-
25a80 73 65 6c 65 63 74 20 6d 61 6b 65 73 0a 74 68 65  select makes.the
25a90 20 71 75 65 72 79 20 72 75 6e 20 6d 75 63 68 20   query run much 
25aa0 66 61 73 74 65 72 20 62 79 20 70 72 65 76 65 6e  faster by preven
25ab0 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 66 6f 6c  ting it from fol
25ac0 6c 6f 77 69 6e 67 0a 62 72 61 6e 63 68 65 73 20  lowing.branches 
25ad0 74 68 61 74 20 6d 65 72 67 65 20 63 68 65 63 6b  that merge check
25ae0 69 6e 73 0a 66 72 6f 6d 20 6c 6f 6e 67 20 61 67  ins.from long ag
25af0 6f 2e 20 20 54 68 65 20 4f 52 44 45 52 20 42 59  o.  The ORDER BY
25b00 20 66 6f 72 63 65 73 20 74 68 65 20 72 65 63 75   forces the recu
25b10 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74 6f 20  rsive-select to 
25b20 66 6f 63 75 73 0a 6f 6e 20 74 68 65 20 6d 6f 73  focus.on the mos
25b30 74 20 72 65 63 65 6e 74 20 63 68 65 63 6b 69 6e  t recent checkin
25b40 73 2c 20 74 68 65 20 6f 6e 65 73 20 77 65 20 77  s, the ones we w
25b50 61 6e 74 2e 20 20 57 69 74 68 6f 75 74 20 74 68  ant.  Without th
25b60 65 20 4f 52 44 45 52 20 42 59 0a 6f 6e 20 74 68  e ORDER BY.on th
25b70 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
25b80 63 74 2c 20 6f 6e 65 20 77 6f 75 6c 64 20 62 65  ct, one would be
25b90 20 66 6f 72 63 65 64 20 74 6f 20 63 6f 6d 70 75   forced to compu
25ba0 74 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  te the complete 
25bb0 73 65 74 20 6f 66 0a 74 68 6f 75 73 61 6e 64 73  set of.thousands
25bc0 20 6f 66 20 61 6e 63 65 73 74 6f 72 73 2c 20 73   of ancestors, s
25bd0 6f 72 74 20 74 68 65 6d 20 61 6c 6c 20 62 79 20  ort them all by 
25be0 6d 74 69 6d 65 2c 20 74 68 65 6e 20 74 61 6b 65  mtime, then take
25bf0 20 74 68 65 20 74 6f 70 20 74 77 65 6e 74 79 2e   the top twenty.
25c00 0a 54 68 65 20 4f 52 44 45 52 20 42 59 20 65 73  .The ORDER BY es
25c10 73 65 6e 74 69 61 6c 6c 79 20 73 65 74 73 20 75  sentially sets u
25c20 70 20 61 20 70 72 69 6f 72 69 74 79 20 71 75 65  p a priority que
25c30 75 65 20 74 68 61 74 0a 66 6f 72 63 65 73 20 74  ue that.forces t
25c40 68 65 20 72 65 63 75 72 73 69 76 65 20 71 75 65  he recursive que
25c50 72 79 20 74 6f 20 6c 6f 6f 6b 20 61 74 20 74 68  ry to look at th
25c60 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e  e most recent an
25c70 63 65 73 74 6f 72 73 20 66 69 72 73 74 2c 0a 61  cestors first,.a
25c80 6c 6c 6f 77 69 6e 67 20 74 68 65 20 75 73 65 20  llowing the use 
25c90 6f 66 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  of a LIMIT claus
25ca0 65 20 74 6f 20 72 65 73 74 72 69 63 74 20 74 68  e to restrict th
25cb0 65 20 73 63 6f 70 65 20 6f 66 20 74 68 65 0a 71  e scope of the.q
25cc0 75 65 72 79 20 74 6f 20 6a 75 73 74 20 74 68 65  uery to just the
25cd0 20 63 68 65 63 6b 69 6e 73 20 6f 66 20 69 6e 74   checkins of int
25ce0 65 72 65 73 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  erest...<tcl>hd_
25cf0 66 72 61 67 6d 65 6e 74 20 77 69 74 68 6f 72 64  fragment withord
25d00 65 72 62 79 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43  erby</tcl>.<h4>C
25d10 6f 6e 74 72 6f 6c 6c 69 6e 67 20 44 65 70 74 68  ontrolling Depth
25d20 2d 46 69 72 73 74 20 56 65 72 73 75 73 20 42 72  -First Versus Br
25d30 65 61 64 74 68 2d 46 69 72 73 74 20 53 65 61 72  eadth-First Sear
25d40 63 68 20 4f 66 20 61 20 54 72 65 65 0a 55 73 69  ch Of a Tree.Usi
25d50 6e 67 20 4f 52 44 45 52 20 42 59 3c 2f 68 34 3e  ng ORDER BY</h4>
25d60 0a 0a 3c 70 3e 41 6e 20 4f 52 44 45 52 20 42 59  ..<p>An ORDER BY
25d70 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65 20 72   clause on the r
25d80 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
25d90 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63  can be used to c
25da0 6f 6e 74 72 6f 6c 0a 77 68 65 74 68 65 72 20 74  ontrol.whether t
25db0 68 65 20 73 65 61 72 63 68 20 6f 66 20 61 20 74  he search of a t
25dc0 72 65 65 20 69 73 20 64 65 70 74 68 2d 66 69 72  ree is depth-fir
25dd0 73 74 20 6f 72 20 62 72 65 61 64 74 68 2d 66 69  st or breadth-fi
25de0 72 73 74 2e 20 20 54 6f 0a 69 6c 6c 75 73 74 72  rst.  To.illustr
25df0 61 74 65 2c 20 77 65 20 77 69 6c 6c 20 75 73 65  ate, we will use
25e00 20 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20   a variation on 
25e10 74 68 65 20 22 6f 72 67 22 20 74 61 62 6c 65 20  the "org" table 
25e20 66 72 6f 6d 20 61 6e 20 65 78 61 6d 70 6c 65 0a  from an example.
25e30 61 62 6f 76 65 2c 20 77 69 74 68 6f 75 74 20 74  above, without t
25e40 68 65 20 22 68 65 69 67 68 74 22 20 63 6f 6c 75  he "height" colu
25e50 6d 6e 2c 20 61 6e 64 20 77 69 74 68 20 73 6f 6d  mn, and with som
25e60 65 20 72 65 61 6c 20 64 61 74 61 20 69 6e 73 65  e real data inse
25e70 72 74 65 64 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  rted:..<blockquo
25e80 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
25e90 54 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d  TABLE org(.  nam
25ea0 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b  e TEXT PRIMARY K
25eb0 45 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54 20  EY,.  boss TEXT 
25ec0 52 45 46 45 52 45 4e 43 45 53 20 6f 72 67 0a 29  REFERENCES org.)
25ed0 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a   WITHOUT ROWID;.
25ee0 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20  INSERT INTO org 
25ef0 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 4e  VALUES('Alice',N
25f00 55 4c 4c 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  ULL);.INSERT INT
25f10 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 42 6f  O org VALUES('Bo
25f20 62 27 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53  b','Alice');.INS
25f30 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
25f40 55 45 53 28 27 43 69 6e 64 79 27 2c 27 41 6c 69  UES('Cindy','Ali
25f50 63 65 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  ce');.INSERT INT
25f60 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 44 61  O org VALUES('Da
25f70 76 65 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45  ve','Bob');.INSE
25f80 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55  RT INTO org VALU
25f90 45 53 28 27 45 6d 6d 61 27 2c 27 42 6f 62 27 29  ES('Emma','Bob')
25fa0 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
25fb0 67 20 56 41 4c 55 45 53 28 27 46 72 65 64 27 2c  g VALUES('Fred',
25fc0 27 43 69 6e 64 79 27 29 3b 0a 49 4e 53 45 52 54  'Cindy');.INSERT
25fd0 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
25fe0 28 27 47 61 69 6c 27 2c 27 43 69 6e 64 79 27 29  ('Gail','Cindy')
25ff0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
26000 75 6f 74 65 3e 0a 0a 3c 70 3e 48 65 72 65 20 69  uote>..<p>Here i
26010 73 20 61 20 71 75 65 72 79 20 74 6f 20 73 68 6f  s a query to sho
26020 77 20 74 68 65 20 74 72 65 65 20 73 74 72 75 63  w the tree struc
26030 74 75 72 65 20 69 6e 20 61 20 62 72 65 61 64 74  ture in a breadt
26040 68 2d 66 69 72 73 74 20 70 61 74 74 65 72 6e 3a  h-first pattern:
26050 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
26060 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
26070 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c 69 63 65  VE.  under_alice
26080 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20  (name,level) AS 
26090 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c  (.    VALUES('Al
260a0 69 63 65 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f  ice',0).    UNIO
260b0 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
260c0 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72   org.name, under
260d0 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20  _alice.level+1. 
260e0 20 20 20 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f       FROM org JO
260f0 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f  IN under_alice O
26100 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72  N org.boss=under
26110 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20  _alice.name.    
26120 20 4f 52 44 45 52 20 42 59 20 32 0a 20 20 29 0a   ORDER BY 2.  ).
26130 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e  SELECT substr('.
26140 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76  .........',1,lev
26150 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52  el*3) || name FR
26160 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a  OM under_alice;.
26170 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
26180 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 4f 52 44  te>..<p>The "ORD
26190 45 52 20 42 59 20 32 22 20 28 77 68 69 63 68 20  ER BY 2" (which 
261a0 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61  means the same a
261b0 73 20 22 4f 52 44 45 52 20 42 59 20 75 6e 64 65  s "ORDER BY unde
261c0 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 22  r_alice.level+1"
261d0 29 0a 63 61 75 73 65 73 20 68 69 67 68 65 72 20  ).causes higher 
261e0 6c 65 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72  levels in the or
261f0 67 61 6e 69 7a 61 74 69 6f 6e 20 63 68 61 72 74  ganization chart
26200 20 28 77 69 74 68 20 73 6d 61 6c 6c 65 72 20 22   (with smaller "
26210 6c 65 76 65 6c 22 20 76 61 6c 75 65 73 29 0a 74  level" values).t
26220 6f 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 66  o be processed f
26230 69 72 73 74 2c 20 72 65 73 75 6c 74 69 6e 67 20  irst, resulting 
26240 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72  in a breadth-fir
26250 73 74 20 73 65 61 72 63 68 2e 20 20 54 68 65 20  st search.  The 
26260 6f 75 74 70 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f  output is:..<blo
26270 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c  ckquote><pre>.Al
26280 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69  ice....Bob....Ci
26290 6e 64 79 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e  ndy.......Dave..
262a0 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e  .....Emma.......
262b0 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a  Fred.......Gail.
262c0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
262d0 74 65 3e 0a 0a 3c 70 3e 42 75 74 20 69 66 20 77  te>..<p>But if w
262e0 65 20 63 68 61 6e 67 65 20 74 68 65 20 4f 52 44  e change the ORD
262f0 45 52 20 42 59 20 63 6c 61 75 73 65 20 74 6f 20  ER BY clause to 
26300 61 64 64 20 74 68 65 20 22 44 45 53 43 22 20 6d  add the "DESC" m
26310 6f 64 69 66 69 65 72 2c 20 74 68 61 74 20 77 69  odifier, that wi
26320 6c 6c 0a 63 61 75 73 65 20 6c 6f 77 65 72 20 6c  ll.cause lower l
26330 65 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67  evels in the org
26340 61 6e 69 7a 61 74 69 6f 6e 20 28 77 69 74 68 20  anization (with 
26350 6c 61 72 67 65 72 20 22 6c 65 76 65 6c 22 20 76  larger "level" v
26360 61 6c 75 65 73 29 20 74 6f 20 62 65 0a 70 72 6f  alues) to be.pro
26370 63 65 73 73 65 64 20 66 69 72 73 74 20 62 79 20  cessed first by 
26380 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
26390 6c 65 63 74 2c 20 72 65 73 75 6c 74 69 6e 67 20  lect, resulting 
263a0 69 6e 20 61 20 64 65 70 74 68 2d 66 69 72 73 74  in a depth-first
263b0 20 73 65 61 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b   search:..<block
263c0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
263d0 20 52 45 43 55 52 53 49 56 45 0a 20 20 75 6e 64   RECURSIVE.  und
263e0 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65  er_alice(name,le
263f0 76 65 6c 29 20 41 53 20 28 0a 20 20 20 20 56 41  vel) AS (.    VA
26400 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 30 29 0a  LUES('Alice',0).
26410 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
26420 20 20 53 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d    SELECT org.nam
26430 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c  e, under_alice.l
26440 65 76 65 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f  evel+1.      FRO
26450 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72  M org JOIN under
26460 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f  _alice ON org.bo
26470 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e  ss=under_alice.n
26480 61 6d 65 0a 20 20 20 20 20 4f 52 44 45 52 20 42  ame.     ORDER B
26490 59 20 32 20 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a  Y 2 <b>DESC</b>.
264a0 20 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73 74    ).SELECT subst
264b0 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31  r('..........',1
264c0 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d  ,level*3) || nam
264d0 65 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69  e FROM under_ali
264e0 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  ce;.</pre></bloc
264f0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
26500 6f 75 74 70 75 74 20 6f 66 20 74 68 69 73 20 72  output of this r
26510 65 76 69 73 65 64 20 71 75 65 72 79 20 69 73 3a  evised query is:
26520 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
26530 72 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62  re>.Alice....Bob
26540 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e  .......Dave.....
26550 2e 2e 45 6d 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a  ..Emma....Cindy.
26560 2e 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e  ......Fred......
26570 2e 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  .Gail.</pre></bl
26580 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68  ockquote>..<p>Wh
26590 65 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  en the ORDER BY 
265a0 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65  clause is omitte
265b0 64 20 66 72 6f 6d 20 74 68 65 20 72 65 63 75 72  d from the recur
265c0 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 74 68 65  sive-select, the
265d0 0a 71 75 65 75 65 20 62 65 68 61 76 65 73 20 61  .queue behaves a
265e0 73 20 61 20 46 49 46 4f 2c 20 77 68 69 63 68 20  s a FIFO, which 
265f0 72 65 73 75 6c 74 73 20 69 6e 20 61 20 62 72 65  results in a bre
26600 61 64 74 68 2d 66 69 72 73 74 20 73 65 61 72 63  adth-first searc
26610 68 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  h....<tcl>hd_fra
26620 67 6d 65 6e 74 20 6d 61 6e 64 65 6c 62 72 6f 74  gment mandelbrot
26630 20 7b 63 6f 6d 70 75 74 65 20 74 68 65 20 4d 61   {compute the Ma
26640 6e 64 65 6c 62 72 6f 74 20 73 65 74 7d 3c 2f 74  ndelbrot set}</t
26650 63 6c 3e 0a 3c 68 34 3e 4f 75 74 6c 61 6e 64 69  cl>.<h4>Outlandi
26660 73 68 20 52 65 63 75 72 73 69 76 65 20 51 75 65  sh Recursive Que
26670 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e  ry Examples</h4>
26680 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
26690 6e 67 20 71 75 65 72 79 20 63 6f 6d 70 75 74 65  ng query compute
266a0 73 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69  s an approximati
266b0 6f 6e 20 6f 66 20 74 68 65 20 4d 61 6e 64 65 6c  on of the Mandel
266c0 62 72 6f 74 20 53 65 74 0a 61 6e 64 20 6f 75 74  brot Set.and out
266d0 70 75 74 73 20 74 68 65 20 72 65 73 75 6c 74 20  puts the result 
266e0 61 73 20 41 53 43 49 49 2d 61 72 74 3a 0a 0a 3c  as ASCII-art:..<
266f0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
26700 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
26710 20 20 78 61 78 69 73 28 78 29 20 41 53 20 28 56    xaxis(x) AS (V
26720 41 4c 55 45 53 28 2d 32 2e 30 29 20 55 4e 49 4f  ALUES(-2.0) UNIO
26730 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b 30  N ALL SELECT x+0
26740 2e 30 35 20 46 52 4f 4d 20 78 61 78 69 73 20 57  .05 FROM xaxis W
26750 48 45 52 45 20 78 26 6c 74 3b 31 2e 32 29 2c 0a  HERE x&lt;1.2),.
26760 20 20 79 61 78 69 73 28 79 29 20 41 53 20 28 56    yaxis(y) AS (V
26770 41 4c 55 45 53 28 2d 31 2e 30 29 20 55 4e 49 4f  ALUES(-1.0) UNIO
26780 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 79 2b 30  N ALL SELECT y+0
26790 2e 31 20 46 52 4f 4d 20 79 61 78 69 73 20 57 48  .1 FROM yaxis WH
267a0 45 52 45 20 79 26 6c 74 3b 31 2e 30 29 2c 0a 20  ERE y&lt;1.0),. 
267b0 20 6d 28 69 74 65 72 2c 20 63 78 2c 20 63 79 2c   m(iter, cx, cy,
267c0 20 78 2c 20 79 29 20 41 53 20 28 0a 20 20 20 20   x, y) AS (.    
267d0 53 45 4c 45 43 54 20 30 2c 20 78 2c 20 79 2c 20  SELECT 0, x, y, 
267e0 30 2e 30 2c 20 30 2e 30 20 46 52 4f 4d 20 78 61  0.0, 0.0 FROM xa
267f0 78 69 73 2c 20 79 61 78 69 73 0a 20 20 20 20 55  xis, yaxis.    U
26800 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c  NION ALL.    SEL
26810 45 43 54 20 69 74 65 72 2b 31 2c 20 63 78 2c 20  ECT iter+1, cx, 
26820 63 79 2c 20 78 2a 78 2d 79 2a 79 20 2b 20 63 78  cy, x*x-y*y + cx
26830 2c 20 32 2e 30 2a 78 2a 79 20 2b 20 63 79 20 46  , 2.0*x*y + cy F
26840 52 4f 4d 20 6d 20 0a 20 20 20 20 20 57 48 45 52  ROM m .     WHER
26850 45 20 28 78 2a 78 20 2b 20 79 2a 79 29 20 26 6c  E (x*x + y*y) &l
26860 74 3b 20 34 2e 30 20 41 4e 44 20 69 74 65 72 26  t; 4.0 AND iter&
26870 6c 74 3b 32 38 0a 20 20 29 2c 0a 20 20 6d 32 28  lt;28.  ),.  m2(
26880 69 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41 53  iter, cx, cy) AS
26890 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61   (.    SELECT ma
268a0 78 28 69 74 65 72 29 2c 20 63 78 2c 20 63 79 20  x(iter), cx, cy 
268b0 46 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42 59 20  FROM m GROUP BY 
268c0 63 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20 61 28  cx, cy.  ),.  a(
268d0 74 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  t) AS (.    SELE
268e0 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  CT group_concat(
268f0 20 73 75 62 73 74 72 28 27 20 2e 2b 2a 23 27 2c   substr(' .+*#',
26900 20 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34 29   1+min(iter/7,4)
26910 2c 20 31 29 2c 20 27 27 29 20 0a 20 20 20 20 46  , 1), '') .    F
26920 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59 20  ROM m2 GROUP BY 
26930 63 79 0a 20 20 29 0a 53 45 4c 45 43 54 20 67 72  cy.  ).SELECT gr
26940 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69 6d  oup_concat(rtrim
26950 28 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d 20  (t),x'0a') FROM 
26960 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  a;.</pre></block
26970 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68  quote>..<p>In th
26980 69 73 20 71 75 65 72 79 2c 20 74 68 65 20 22 78  is query, the "x
26990 61 78 69 73 22 20 61 6e 64 20 22 79 61 78 69 73  axis" and "yaxis
269a0 22 20 43 54 45 73 20 64 65 66 69 6e 65 20 74 68  " CTEs define th
269b0 65 20 67 72 69 64 20 6f 66 20 70 6f 69 6e 74 73  e grid of points
269c0 20 66 6f 72 0a 77 68 69 63 68 20 74 68 65 20 4d   for.which the M
269d0 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 20 77 69  andelbrot Set wi
269e0 6c 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61 74  ll be approximat
269f0 65 64 2e 20 20 45 61 63 68 20 72 6f 77 20 69 6e  ed.  Each row in
26a00 20 74 68 65 0a 22 6d 28 69 74 65 72 2c 63 78 2c   the."m(iter,cx,
26a10 63 79 2c 78 2c 79 29 22 20 43 54 45 20 6d 65 61  cy,x,y)" CTE mea
26a20 6e 73 20 74 68 61 74 20 61 66 74 65 72 20 22 69  ns that after "i
26a30 74 65 72 22 20 69 74 65 72 61 74 69 6f 6e 73 2c  ter" iterations,
26a40 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 0a   the Mandelbrot.
26a50 69 74 65 72 61 74 69 6f 6e 20 73 74 61 72 74 69  iteration starti
26a60 6e 67 20 61 74 20 63 78 2c 63 79 20 68 61 73 20  ng at cx,cy has 
26a70 72 65 61 63 68 65 64 20 70 6f 69 6e 74 20 78 2c  reached point x,
26a80 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  y.  The number o
26a90 66 20 69 74 65 72 61 74 69 6f 6e 73 0a 69 6e 20  f iterations.in 
26aa0 74 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20  this example is 
26ab0 6c 69 6d 69 74 65 64 20 74 6f 20 32 38 20 28 77  limited to 28 (w
26ac0 68 69 63 68 20 73 65 76 65 72 65 6c 79 20 6c 69  hich severely li
26ad0 6d 69 74 73 20 74 68 65 20 72 65 73 6f 6c 75 74  mits the resolut
26ae0 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d 70 75  ion of.the compu
26af0 74 61 74 69 6f 6e 2c 20 62 75 74 20 69 73 20 73  tation, but is s
26b00 75 66 66 69 63 69 65 6e 74 20 66 6f 72 20 6c 6f  ufficient for lo
26b10 77 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 41 53 43  w-resolution ASC
26b20 49 49 2d 61 72 74 20 6f 75 74 70 75 74 29 2e 0a  II-art output)..
26b30 54 68 65 20 22 6d 32 28 69 74 65 72 2c 63 78 2c  The "m2(iter,cx,
26b40 63 79 29 22 20 43 54 45 20 68 6f 6c 64 73 20 74  cy)" CTE holds t
26b50 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
26b60 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
26b70 72 65 61 63 68 65 64 20 77 68 65 6e 0a 73 74 61  reached when.sta
26b80 72 74 69 6e 67 20 61 74 20 70 6f 69 6e 74 20 63  rting at point c
26b90 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65  x,cy..Finally, e
26ba0 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 22  ach row in the "
26bb0 61 28 74 29 22 20 43 54 45 20 68 6f 6c 64 73 20  a(t)" CTE holds 
26bc0 61 20 73 74 72 69 6e 67 20 0a 77 68 69 63 68 20  a string .which 
26bd0 69 73 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65  is a single line
26be0 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 41   of the output A
26bf0 53 43 49 49 2d 61 72 74 2e 0a 54 68 65 20 53 45  SCII-art..The SE
26c00 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61  LECT statement a
26c10 74 20 74 68 65 20 65 6e 64 20 6a 75 73 74 20 71  t the end just q
26c20 75 65 72 69 65 73 20 74 68 65 20 22 61 22 20 43  ueries the "a" C
26c30 54 45 20 74 6f 0a 72 65 74 72 69 65 76 65 20 61  TE to.retrieve a
26c40 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 41 53 43 49  ll lines of ASCI
26c50 49 2d 61 72 74 2c 20 6f 6e 65 20 62 79 20 6f 6e  I-art, one by on
26c60 65 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20 74  e...<p>Running t
26c70 68 65 20 71 75 65 72 79 20 61 62 6f 76 65 20 69  he query above i
26c80 6e 20 61 6e 20 53 51 4c 69 74 65 20 5b 63 6f 6d  n an SQLite [com
26c90 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d  mand-line shell]
26ca0 20 72 65 73 75 6c 74 73 0a 69 6e 20 74 68 65 20   results.in the 
26cb0 66 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74 70 75 74  following output
26cc0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
26cd0 70 72 65 3e 0a 20 20 20 20 20 20 20 20 20 20 20  pre>.           
26ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cf0 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20           ....#. 
26d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20    ..#*...       
26d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d40 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23            ..+###
26d50 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
26d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d70 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e  .......+####....
26d80 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20     +.           
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26da0 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23  ..##+*##########
26db0 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20  +.++++.         
26dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26dd0 20 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23   .+.############
26de0 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  ######+..       
26df0 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e         .........
26e00 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23 23  ....+###########
26e10 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20  ########+.+.    
26e20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e            ..++..
26e30 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23  #.....*#########
26e40 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20  ############+.. 
26e50 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b              ...+
26e60 23 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23  #######++#######
26e70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e80 2e 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e  ..          ....
26e90 2b 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +*##############
26ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26eb0 23 23 2e 0a 20 23 23 23 23 23 23 23 23 23 23 23  ##.. ###########
26ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26ee0 23 23 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20  ##....          
26ef0 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23  ....+*##########
26f00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f10 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20  ######..        
26f20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23       ...+#######
26f30 2b 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ++##############
26f40 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20  #########..     
26f50 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23           ..++..#
26f60 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23  .....*##########
26f70 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
26f80 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
26f90 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23  .........+######
26fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #############+.+
26fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26fc0 20 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23 23             .+.##
26fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26fe0 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
27000 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e  ##+*##########+.
27010 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20  ++++.           
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27030 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e   .......+####...
27040 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20  .   +.          
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e         ..+####+.
27070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27090 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20      ..#*...     
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
270c0 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20  ...#.           
270d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270e0 20 20 20 20 20 20 20 20 20 2b 2e 0a 3c 2f 70 72           +..</pr
270f0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
27100 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
27110 74 20 73 75 64 6f 6b 75 20 7b 73 6f 6c 76 65 20  t sudoku {solve 
27120 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d 20  Sudoku puzzles} 
27130 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e  </tcl>.<p>This n
27140 65 78 74 20 71 75 65 72 79 20 73 6f 6c 76 65 73  ext query solves
27150 20 61 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65   a Sudoku puzzle
27160 2e 20 20 54 68 65 20 73 74 61 74 65 20 6f 66 20  .  The state of 
27170 74 68 65 20 70 75 7a 7a 6c 65 20 69 73 0a 64 65  the puzzle is.de
27180 66 69 6e 65 64 20 62 79 20 61 6e 20 38 31 2d 63  fined by an 81-c
27190 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20  haracter string 
271a0 66 6f 72 6d 65 64 20 62 79 20 72 65 61 64 69 6e  formed by readin
271b0 67 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  g entries from t
271c0 68 65 0a 70 75 7a 7a 6c 65 20 62 6f 78 20 72 6f  he.puzzle box ro
271d0 77 20 62 79 20 72 6f 77 20 66 72 6f 6d 20 6c 65  w by row from le
271e0 66 74 20 74 6f 20 72 69 67 68 74 20 61 6e 64 20  ft to right and 
271f0 74 68 65 6e 20 66 72 6f 6d 20 74 6f 70 20 74 6f  then from top to
27200 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73   bottom..Blank s
27210 71 75 61 72 65 73 20 69 6e 20 74 68 65 20 70 75  quares in the pu
27220 7a 7a 6c 65 20 61 72 65 20 64 65 6e 6f 74 65 64  zzle are denoted
27230 20 62 79 20 61 20 22 2e 22 20 63 68 61 72 61 63   by a "." charac
27240 74 65 72 2e 20 20 0a 54 68 75 73 20 74 68 65 20  ter.  .Thus the 
27250 69 6e 70 75 74 20 73 74 72 69 6e 67 3a 0a 0a 3c  input string:..<
27260 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e  blockquote>.53..
27270 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39  7....6..195....9
27280 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33  8....6.8...6...3
27290 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e  4..8.3..17...2..
272a0 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31  .6.6....28....41
272b0 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f  9..5....8..79.</
272c0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
272d0 43 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61  Corresponds to a
272e0 20 70 75 7a 7a 6c 65 20 6c 69 6b 65 20 74 68 69   puzzle like thi
272f0 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
27300 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
27310 31 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  1" cellpadding="
27320 35 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74 64  5">.<tr><td>5<td
27330 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >3<td> <td> <td>
27340 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  7<td> <td> <td> 
27350 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74  <td>.<tr><td>6<t
27360 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 3c 74 64  d> <td> <td>1<td
27370 3e 39 3c 74 64 3e 35 3c 74 64 3e 20 3c 74 64 3e  >9<td>5<td> <td>
27380 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c   <td>.<tr><td> <
27390 74 64 3e 39 3c 74 64 3e 38 3c 74 64 3e 20 3c 74  td>9<td>8<td> <t
273a0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
273b0 3e 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38  >6<td>.<tr><td>8
273c0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
273d0 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>6<td> <td> <t
273e0 64 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74 64  d> <td>3.<tr><td
273f0 3e 34 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >4<td> <td> <td>
27400 38 3c 74 64 3e 20 3c 74 64 3e 33 3c 74 64 3e 20  8<td> <td>3<td> 
27410 3c 74 64 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c  <td> <td>1.<tr><
27420 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>7<td> <td> <t
27430 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 20 3c 74 64  d> <td>2<td> <td
27440 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 0a 3c 74 72  > <td> <td>6.<tr
27450 3e 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20  ><td> <td>6<td> 
27460 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
27470 74 64 3e 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74  td>2<td>8<td>.<t
27480 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  r><td> <td> <td>
27490 20 3c 74 64 3e 34 3c 74 64 3e 31 3c 74 64 3e 39   <td>4<td>1<td>9
274a0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 35 0a  <td> <td> <td>5.
274b0 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  <tr><td> <td> <t
274c0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64  d> <td> <td>8<td
274d0 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e  > <td> <td>7<td>
274e0 39 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  9.</table>.</blo
274f0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69  ckquote>..<p>Thi
27500 73 20 69 73 20 74 68 65 20 71 75 65 72 79 20 74  s is the query t
27510 68 61 74 20 73 6f 6c 76 65 73 20 74 68 65 20 70  hat solves the p
27520 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  uzzle:..<blockqu
27530 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
27540 45 43 55 52 53 49 56 45 0a 20 20 69 6e 70 75 74  ECURSIVE.  input
27550 28 73 75 64 29 20 41 53 20 28 0a 20 20 20 20 56  (sud) AS (.    V
27560 41 4c 55 45 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e  ALUES('53..7....
27570 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e  6..195....98....
27580 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e  6.8...6...34..8.
27590 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e  3..17...2...6.6.
275a0 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e  ...28....419..5.
275b0 2e 2e 2e 38 2e 2e 37 39 27 29 0a 20 20 29 2c 0a  ...8..79').  ),.
275c0 20 20 64 69 67 69 74 73 28 7a 2c 20 6c 70 29 20    digits(z, lp) 
275d0 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28  AS (.    VALUES(
275e0 27 31 27 2c 20 31 29 0a 20 20 20 20 55 4e 49 4f  '1', 1).    UNIO
275f0 4e 20 41 4c 4c 20 53 45 4c 45 43 54 0a 20 20 20  N ALL SELECT.   
27600 20 43 41 53 54 28 6c 70 2b 31 20 41 53 20 54 45   CAST(lp+1 AS TE
27610 58 54 29 2c 20 6c 70 2b 31 20 46 52 4f 4d 20 64  XT), lp+1 FROM d
27620 69 67 69 74 73 20 57 48 45 52 45 20 6c 70 26 6c  igits WHERE lp&l
27630 74 3b 39 0a 20 20 29 2c 0a 20 20 78 28 73 2c 20  t;9.  ),.  x(s, 
27640 69 6e 64 29 20 41 53 20 28 0a 20 20 20 20 53 45  ind) AS (.    SE
27650 4c 45 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28  LECT sud, instr(
27660 73 75 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69  sud, '.') FROM i
27670 6e 70 75 74 0a 20 20 20 20 55 4e 49 4f 4e 20 41  nput.    UNION A
27680 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 0a 20 20  LL.    SELECT.  
27690 20 20 20 20 73 75 62 73 74 72 28 73 2c 20 31 2c      substr(s, 1,
276a0 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20   ind-1) || z || 
276b0 73 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29  substr(s, ind+1)
276c0 2c 0a 20 20 20 20 20 20 69 6e 73 74 72 28 20 73  ,.      instr( s
276d0 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d  ubstr(s, 1, ind-
276e0 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74  1) || z || subst
276f0 72 28 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27  r(s, ind+1), '.'
27700 20 29 0a 20 20 20 20 20 46 52 4f 4d 20 78 2c 20   ).     FROM x, 
27710 64 69 67 69 74 73 20 41 53 20 7a 0a 20 20 20 20  digits AS z.    
27720 57 48 45 52 45 20 69 6e 64 3e 30 0a 20 20 20 20  WHERE ind>0.    
27730 20 20 41 4e 44 20 4e 4f 54 20 45 58 49 53 54 53    AND NOT EXISTS
27740 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 53   (.            S
27750 45 4c 45 43 54 20 31 0a 20 20 20 20 20 20 20 20  ELECT 1.        
27760 20 20 20 20 20 20 46 52 4f 4d 20 64 69 67 69 74        FROM digit
27770 73 20 41 53 20 6c 70 0a 20 20 20 20 20 20 20 20  s AS lp.        
27780 20 20 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d       WHERE z.z =
27790 20 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64   substr(s, ((ind
277a0 2d 31 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31  -1)/9)*9 + lp, 1
277b0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
277c0 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74    OR z.z = subst
277d0 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 25 39 29  r(s, ((ind-1)%9)
277e0 20 2b 20 28 6c 70 2d 31 29 2a 39 20 2b 20 31 2c   + (lp-1)*9 + 1,
277f0 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   1).            
27800 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62      OR z.z = sub
27810 73 74 72 28 73 2c 20 28 28 28 69 6e 64 2d 31 29  str(s, (((ind-1)
27820 2f 33 29 20 25 20 33 29 20 2a 20 33 0a 20 20 20  /3) % 3) * 3.   
27830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27840 20 20 20 20 20 2b 20 28 28 69 6e 64 2d 31 29 2f       + ((ind-1)/
27850 32 37 29 20 2a 20 32 37 20 2b 20 6c 70 0a 20 20  27) * 27 + lp.  
27860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27870 20 20 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20        + ((lp-1) 
27880 2f 20 33 29 20 2a 20 36 2c 20 31 29 0a 20 20 20  / 3) * 6, 1).   
27890 20 20 20 20 20 20 29 0a 20 20 29 0a 53 45 4c 45        ).  ).SELE
278a0 43 54 20 73 20 46 52 4f 4d 20 78 20 57 48 45 52  CT s FROM x WHER
278b0 45 20 69 6e 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c  E ind=0;.</pre><
278c0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
278d0 3e 54 68 65 20 22 69 6e 70 75 74 22 20 43 54 45  >The "input" CTE
278e0 20 64 65 66 69 6e 65 73 20 74 68 65 20 69 6e 70   defines the inp
278f0 75 74 20 70 75 7a 7a 6c 65 2e 0a 54 68 65 20 22  ut puzzle..The "
27900 64 69 67 69 74 73 22 20 43 54 45 20 64 65 66 69  digits" CTE defi
27910 6e 65 73 20 61 20 74 61 62 6c 65 20 74 68 61 74  nes a table that
27920 20 68 6f 6c 64 73 20 61 6c 6c 20 64 69 67 69 74   holds all digit
27930 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  s between 1 and 
27940 39 2e 0a 54 68 65 20 77 6f 72 6b 20 6f 66 20 73  9..The work of s
27950 6f 6c 76 69 6e 67 20 74 68 65 20 70 75 7a 7a 6c  olving the puzzl
27960 65 20 69 73 20 75 6e 64 65 72 74 61 6b 65 6e 20  e is undertaken 
27970 62 79 20 74 68 65 20 22 78 22 20 43 54 45 2e 0a  by the "x" CTE..
27980 41 6e 20 65 6e 74 72 79 20 69 6e 20 78 28 73 2c  An entry in x(s,
27990 69 6e 64 29 20 6d 65 61 6e 73 20 74 68 61 74 20  ind) means that 
279a0 74 68 65 20 38 31 2d 63 68 61 72 61 63 74 65 72  the 81-character
279b0 20 73 74 72 69 6e 67 20 22 73 22 20 69 73 20 61   string "s" is a
279c0 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75   valid.sudoku pu
279d0 7a 7a 6c 65 20 28 69 74 20 68 61 73 20 6e 6f 20  zzle (it has no 
279e0 63 6f 6e 66 6c 69 63 74 73 29 20 61 6e 64 20 74  conflicts) and t
279f0 68 61 74 20 74 68 65 20 66 69 72 73 74 20 75 6e  hat the first un
27a00 6b 6e 6f 77 6e 20 63 68 61 72 61 63 74 65 72 0a  known character.
27a10 69 73 20 61 74 20 70 6f 73 69 74 69 6f 6e 20 22  is at position "
27a20 69 6e 64 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20  ind", or ind==0 
27a30 69 66 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72  if all character
27a40 20 70 6f 73 69 74 69 6f 6e 73 20 61 72 65 20 66   positions are f
27a50 69 6c 6c 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f  illed in..The go
27a60 61 6c 2c 20 74 68 65 6e 2c 20 69 73 20 74 6f 20  al, then, is to 
27a70 63 6f 6d 70 75 74 65 20 65 6e 74 72 69 65 73 20  compute entries 
27a80 66 6f 72 20 22 78 22 20 77 69 74 68 20 61 6e 20  for "x" with an 
27a90 22 69 6e 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e  "ind" of 0...<p>
27aa0 54 68 65 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73  The solver works
27ab0 20 62 79 20 61 64 64 69 6e 67 20 6e 65 77 20 65   by adding new e
27ac0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 20 22 78  ntries to the "x
27ad0 22 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  " recursive tabl
27ae0 65 2e 0a 47 69 76 65 6e 20 70 72 69 6f 72 20 65  e..Given prior e
27af0 6e 74 72 69 65 73 2c 20 74 68 65 20 72 65 63 75  ntries, the recu
27b00 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74 72 69  rsive-select tri
27b10 65 73 20 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20  es to fill in a 
27b20 73 69 6e 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74  single new.posit
27b30 69 6f 6e 20 77 69 74 68 20 61 6c 6c 20 76 61 6c  ion with all val
27b40 75 65 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e  ues between 1 an
27b50 64 20 39 20 74 68 61 74 20 61 63 74 75 61 6c 6c  d 9 that actuall
27b60 79 20 77 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70  y work in that.p
27b70 6f 73 69 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f  osition.  The co
27b80 6d 70 6c 69 63 61 74 65 64 20 22 4e 4f 54 20 45  mplicated "NOT E
27b90 58 49 53 54 53 22 20 73 75 62 71 75 65 72 79 20  XISTS" subquery 
27ba0 69 73 20 74 68 65 20 6d 61 67 69 63 20 74 68 61  is the magic tha
27bb0 74 0a 66 69 67 75 72 65 73 20 6f 75 74 20 77 68  t.figures out wh
27bc0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
27bd0 68 20 63 61 6e 64 69 64 61 74 65 20 22 73 22 20  h candidate "s" 
27be0 73 74 72 69 6e 67 20 69 73 20 61 20 76 61 6c 69  string is a vali
27bf0 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20  d.sudoku puzzle 
27c00 6f 72 20 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20  or not...<p>The 
27c10 66 69 6e 61 6c 20 61 6e 73 77 65 72 20 69 73 20  final answer is 
27c20 66 6f 75 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67  found by looking
27c30 20 66 6f 72 20 61 20 73 74 72 69 6e 67 20 77 69   for a string wi
27c40 74 68 20 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68  th ind==0..If th
27c50 65 20 6f 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b  e original sudok
27c60 75 20 70 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f  u problem did no
27c70 74 20 68 61 76 65 20 61 20 75 6e 69 71 75 65 20  t have a unique 
27c80 73 6f 6c 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74  solution, then.t
27c90 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 72 65  he query will re
27ca0 74 75 72 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c  turn all possibl
27cb0 65 20 73 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66  e solutions.  If
27cc0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 70 72   the original pr
27cd0 6f 62 6c 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76  oblem.was unsolv
27ce0 61 62 6c 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f  able, then no ro
27cf0 77 73 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72  ws will be retur
27d00 6e 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  ned.  In this ca
27d10 73 65 2c 20 74 68 65 20 75 6e 69 71 75 65 0a 61  se, the unique.a
27d20 6e 73 77 65 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63  nswer is:..<bloc
27d30 6b 71 75 6f 74 65 3e 0a 35 33 34 36 37 38 39 31  kquote>.53467891
27d40 32 36 37 32 31 39 35 33 34 38 31 39 38 33 34 32  2672195348198342
27d50 35 36 37 38 35 39 37 36 31 34 32 33 34 32 36 38  5678597614234268
27d60 35 33 37 39 31 37 31 33 39 32 34 38 35 36 39 36  5379171392485696
27d70 31 35 33 37 32 38 34 32 38 37 34 31 39 36 33 35  1537284287419635
27d80 33 34 35 32 38 36 31 37 39 0a 3c 2f 62 6c 6f 63  345286179.</bloc
27d90 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
27da0 73 6f 6c 75 74 69 6f 6e 20 77 61 73 20 63 6f 6d  solution was com
27db0 70 75 74 65 64 20 69 6e 20 6c 65 73 73 20 74 68  puted in less th
27dc0 61 6e 20 33 30 30 20 6d 69 6c 6c 69 73 65 63 6f  an 300 milliseco
27dd0 6e 64 73 20 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a  nds on a modern.
27de0 77 6f 72 6b 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68  workstation...<h
27df0 33 3e 4c 69 6d 69 74 61 74 69 6f 6e 73 20 41 6e  3>Limitations An
27e00 64 20 43 61 76 65 61 74 73 3c 2f 68 33 3e 0a 0a  d Caveats</h3>..
27e10 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65  <ul>.<li><p>.The
27e20 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e   WITH clause can
27e30 6e 6f 74 20 62 65 20 75 73 65 64 20 77 69 74 68  not be used with
27e40 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 52 49  in a [CREATE TRI
27e50 47 47 45 52 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54  GGER]..<li><p>.T
27e60 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 6d  he WITH clause m
27e70 75 73 74 20 61 70 70 65 61 72 20 61 74 20 74 68  ust appear at th
27e80 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61  e beginning of a
27e90 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 53 45 4c 45   top-level [SELE
27ea0 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72  CT] statement.or
27eb0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
27ec0 67 20 6f 66 20 61 20 73 75 62 71 75 65 72 79 2e  g of a subquery.
27ed0 20 20 54 68 65 20 57 49 54 48 20 63 6c 61 75 73    The WITH claus
27ee0 65 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 70  e cannot be prep
27ef0 65 6e 64 65 64 20 74 6f 0a 74 68 65 20 73 65 63  ended to.the sec
27f00 6f 6e 64 20 6f 72 20 73 75 62 73 65 71 75 65 6e  ond or subsequen
27f10 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t SELECT stateme
27f20 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e  nt of a [compoun
27f30 64 20 73 65 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c  d select]..<li><
27f40 70 3e 0a 54 68 65 20 53 51 4c 3a 31 39 39 39 20  p>.The SQL:1999 
27f50 73 70 65 63 20 72 65 71 75 69 72 65 73 20 74 68  spec requires th
27f60 61 74 20 74 68 65 20 52 45 43 55 52 53 49 56 45  at the RECURSIVE
27f70 20 6b 65 79 77 6f 72 64 20 66 6f 6c 6c 6f 77 20   keyword follow 
27f80 57 49 54 48 20 69 6e 20 61 6e 79 0a 57 49 54 48  WITH in any.WITH
27f90 20 63 6c 61 75 73 65 20 74 68 61 74 20 69 6e 63   clause that inc
27fa0 6c 75 64 65 73 20 61 20 72 65 63 75 72 73 69 76  ludes a recursiv
27fb0 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
27fc0 78 70 72 65 73 73 69 6f 6e 2e 20 20 48 6f 77 65  xpression.  Howe
27fd0 76 65 72 2c 20 66 6f 72 0a 63 6f 6d 70 61 74 69  ver, for.compati
27fe0 62 69 6c 69 74 79 20 77 69 74 68 20 53 71 6c 53  bility with SqlS
27ff0 65 72 76 65 72 20 61 6e 64 20 4f 72 61 63 6c 65  erver and Oracle
28000 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
28010 74 20 65 6e 66 6f 72 63 65 20 74 68 69 73 20 72  t enforce this r
28020 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  ule..</ul>..<tcl
28030 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
28040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28080 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54  #.Section SELECT
28090 20 73 65 6c 65 63 74 20 7b 53 45 4c 45 43 54 20   select {SELECT 
280a0 71 75 65 72 79 7d 0a 0a 52 65 63 75 72 73 69 76  query}..Recursiv
280b0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  eBubbleDiagram s
280c0 65 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c  elect-stmt.</tcl
280d0 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  >...<p>The SELEC
280e0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  T statement is u
280f0 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  sed to query the
28100 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a   database.  The.
28110 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45  result of a SELE
28120 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  CT is zero or mo
28130 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20  re rows of data 
28140 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68  where each row.h
28150 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65  as a fixed numbe
28160 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 41  r of columns.  A
28170 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
28180 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 0a  t does not make.
28190 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74  any changes to t
281a0 68 65 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70  he database...<p
281b0 3e 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74  >The "[select-st
281c0 6d 74 5d 22 20 73 79 6e 74 61 78 20 64 69 61 67  mt]" syntax diag
281d0 72 61 6d 20 61 62 6f 76 65 20 61 74 74 65 6d 70  ram above attemp
281e0 74 73 20 74 6f 20 73 68 6f 77 20 61 73 20 6d 75  ts to show as mu
281f0 63 68 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54  ch of the.SELECT
28200 20 73 74 61 74 65 6d 65 6e 74 20 73 79 6e 74 61   statement synta
28210 78 20 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e  x as possible in
28220 20 61 20 73 69 6e 67 6c 65 20 64 69 61 67 72 61   a single diagra
28230 6d 2c 20 62 65 63 61 75 73 65 20 73 6f 6d 65 20  m, because some 
28240 72 65 61 64 65 72 73 0a 66 69 6e 64 20 74 68 61  readers.find tha
28250 74 20 68 65 6c 70 66 75 6c 2e 20 20 54 68 65 20  t helpful.  The 
28260 66 6f 6c 6c 6f 77 69 6e 67 20 22 5b 66 61 63 74  following "[fact
28270 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74  ored-select-stmt
28280 5d 22 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61  ]" is an alterna
28290 74 69 76 65 0a 73 79 6e 74 61 78 20 64 69 61 67  tive.syntax diag
282a0 72 61 6d 73 20 74 68 61 74 20 65 78 70 72 65 73  rams that expres
282b0 73 65 73 20 74 68 65 20 73 61 6d 65 20 73 79 6e  ses the same syn
282c0 74 61 78 20 62 75 74 20 74 72 69 65 73 20 74 6f  tax but tries to
282d0 20 62 72 65 61 6b 20 74 68 65 20 73 79 6e 74 61   break the synta
282e0 78 20 0a 64 6f 77 6e 20 69 6e 74 6f 20 73 6d 61  x .down into sma
282f0 6c 6c 65 72 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74  ller chunks...<t
28300 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62  cl>.RecursiveBub
28310 62 6c 65 44 69 61 67 72 61 6d 20 2d 2d 69 6e 69  bleDiagram --ini
28320 74 69 61 6c 6c 79 2d 68 69 64 64 65 6e 20 66 61  tially-hidden fa
28330 63 74 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74  ctored-select-st
28340 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c  mt select-core.<
28350 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74  /tcl>..<p>Note t
28360 68 61 74 20 74 68 65 72 65 20 61 72 65 20 70 61  hat there are pa
28370 74 68 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ths through the 
28380 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
28390 74 68 61 74 0a 61 72 65 20 6e 6f 74 20 61 6c 6c  that.are not all
283a0 6f 77 65 64 20 69 6e 20 70 72 61 63 74 69 63 65  owed in practice
283b0 2e 20 20 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73  .  Some examples
283c0 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41  :.<ul>.<li>A [VA
283d0 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e  LUES] clause can
283e0 20 62 65 20 74 68 65 20 66 69 72 73 74 20 65 6c   be the first el
283f0 65 6d 65 6e 74 20 69 6e 20 61 20 5b 63 6f 6d 70  ement in a [comp
28400 6f 75 6e 64 20 53 45 4c 45 43 54 5d 0a 20 20 20  ound SELECT].   
28410 20 74 68 61 74 20 75 73 65 73 20 61 20 5b 57 49   that uses a [WI
28420 54 48 5d 20 63 6c 61 75 73 65 2c 20 62 75 74 20  TH] clause, but 
28430 61 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  a [simple SELECT
28440 5d 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20  ] that consists 
28450 6f 66 0a 20 20 20 20 6a 75 73 74 20 61 20 5b 56  of.    just a [V
28460 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61  ALUES] clause ca
28470 6e 6e 6f 74 20 62 65 20 70 72 65 63 65 64 65 64  nnot be preceded
28480 20 62 79 20 61 20 5b 57 49 54 48 5d 20 63 6c 61   by a [WITH] cla
28490 75 73 65 2e 0a 3c 6c 69 3e 54 68 65 20 5b 57 49  use..<li>The [WI
284a0 54 48 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20  TH] clause must 
284b0 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 66 69 72  occur on the fir
284c0 73 74 20 53 45 4c 45 43 54 20 6f 66 20 61 20 5b  st SELECT of a [
284d0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
284e0 2e 0a 20 20 20 20 49 74 20 63 61 6e 6e 6f 74 20  ..    It cannot 
284f0 66 6f 6c 6c 6f 77 20 61 20 5b 63 6f 6d 70 6f 75  follow a [compou
28500 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f  nd-operator]..</
28510 75 6c 3e 0a 54 68 65 73 65 20 61 6e 64 20 6f 74  ul>.These and ot
28520 68 65 72 20 73 69 6d 69 6c 61 72 20 73 79 6e 74  her similar synt
28530 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  ax restrictions 
28540 61 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e  are described in
28550 20 74 68 65 20 74 65 78 74 2e 0a 0a 3c 70 3e 54   the text...<p>T
28560 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
28570 65 6e 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ent is the most 
28580 63 6f 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d  complicated comm
28590 61 6e 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  and in the SQL l
285a0 61 6e 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65  anguage..To make
285b0 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e   the description
285c0 20 65 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f   easier to follo
285d0 77 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70  w, some of the p
285e0 61 73 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65  assages below de
285f0 73 63 72 69 62 65 0a 74 68 65 20 77 61 79 20 74  scribe.the way t
28600 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  he data returned
28610 20 62 79 20 61 20 53 45 4c 45 43 54 20 73 74 61   by a SELECT sta
28620 74 65 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d  tement is determ
28630 69 6e 65 64 20 61 73 20 61 20 73 65 72 69 65 73  ined as a series
28640 20 6f 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73   of.steps. It is
28650 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65   important to ke
28660 65 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20  ep in mind that 
28670 74 68 69 73 20 69 73 20 70 75 72 65 6c 79 20 69  this is purely i
28680 6c 6c 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e  llustrative -.in
28690 20 70 72 61 63 74 69 63 65 20 6e 65 69 74 68 65   practice neithe
286a0 72 20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79  r SQLite nor any
286b0 20 6f 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e   other SQL engin
286c0 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  e is required to
286d0 20 66 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72   follow .this or
286e0 20 61 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69   any other speci
286f0 66 69 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 74  fic process...<t
28700 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
28710 69 6d 70 6c 65 73 65 6c 65 63 74 20 7b 73 69 6d  impleselect {sim
28720 70 6c 65 20 53 45 4c 45 43 54 7d 3c 2f 74 63 6c  ple SELECT}</tcl
28730 3e 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c  >.<h3>Simple Sel
28740 65 63 74 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f  ect Processing</
28750 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65  h3>..<p>The core
28760 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
28770 74 65 6d 65 6e 74 20 69 73 20 61 20 22 73 69 6d  tement is a "sim
28780 70 6c 65 20 53 45 4c 45 43 54 22 20 73 68 6f 77  ple SELECT" show
28790 6e 20 62 79 20 74 68 65 0a 5b 73 65 6c 65 63 74  n by the.[select
287a0 2d 63 6f 72 65 5d 20 61 6e 64 20 5b 73 69 6d 70  -core] and [simp
287b0 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 20  le-select-stmt] 
287c0 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
287d0 62 65 6c 6f 77 2e 20 20 0a 49 6e 20 70 72 61 63  below.  .In prac
287e0 74 69 63 65 2c 20 6d 6f 73 74 20 53 45 4c 45 43  tice, most SELEC
287f0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65  T statements are
28800 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
28810 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c  tatements...<tcl
28820 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  >.RecursiveBubbl
28830 65 44 69 61 67 72 61 6d 20 73 69 6d 70 6c 65 2d  eDiagram simple-
28840 73 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65  select-stmt sele
28850 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a  ct-core.</tcl>..
28860 3c 70 3e 47 65 6e 65 72 61 74 69 6e 67 20 74 68  <p>Generating th
28870 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73  e results of a s
28880 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73 74 61  imple SELECT.sta
28890 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e  tement is presen
288a0 74 65 64 20 61 73 20 61 20 66 6f 75 72 20 73 74  ted as a four st
288b0 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20 74 68  ep process in th
288c0 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62 65  e description be
288d0 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69  low:..<ol>.  <li
288e0 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73  > <p>[FROM claus
288f0 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54  e] processing: T
28900 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 6f  he input data fo
28910 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  r the simple SEL
28920 45 43 54 20 69 73 0a 20 20 20 20 20 20 20 64 65  ECT is.       de
28930 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e  termined. The in
28940 70 75 74 20 64 61 74 61 20 69 73 20 65 69 74 68  put data is eith
28950 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20  er implicitly a 
28960 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20  single row with 
28970 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73  0.       columns
28980 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f   (if there is no
28990 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72   FROM clause) or
289a0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
289b0 79 20 74 68 65 20 46 52 4f 4d 0a 20 20 20 20 20  y the FROM.     
289c0 20 20 63 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e    clause..  <li>
289d0 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c 61 75 73   <p>[WHERE claus
289e0 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54  e] processing: T
289f0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73  he input data is
28a00 20 66 69 6c 74 65 72 65 64 20 75 73 69 6e 67 20   filtered using 
28a10 74 68 65 20 57 48 45 52 45 0a 20 20 20 20 20 20  the WHERE.      
28a20 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
28a30 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e  on.  .  <li> <p>
28a40 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f 55 50 20  [GROUP BY|GROUP 
28a50 42 59 2c 20 48 41 56 49 4e 47 20 61 6e 64 20 72  BY, HAVING and r
28a60 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70  esult-column exp
28a70 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73  ression] process
28a80 69 6e 67 3a 20 0a 20 20 20 20 20 20 20 54 68 65  ing: .       The
28a90 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
28aa0 6f 77 73 20 69 73 20 63 6f 6d 70 75 74 65 64 20  ows is computed 
28ab0 62 79 20 61 67 67 72 65 67 61 74 69 6e 67 20 74  by aggregating t
28ac0 68 65 20 64 61 74 61 20 61 63 63 6f 72 64 69 6e  he data accordin
28ad0 67 20 74 6f 0a 20 20 20 20 20 20 20 61 6e 79 20  g to.       any 
28ae0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
28af0 61 6e 64 20 63 61 6c 63 75 6c 61 74 69 6e 67 20  and calculating 
28b00 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 65  the result-set e
28b10 78 70 72 65 73 73 69 6f 6e 73 20 66 6f 72 20 74  xpressions for t
28b20 68 65 0a 20 20 20 20 20 20 20 72 6f 77 73 20 6f  he.       rows o
28b30 66 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  f the filtered i
28b40 6e 70 75 74 20 64 61 74 61 73 65 74 2e 20 20 0a  nput dataset.  .
28b50 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49    <li> <p>[DISTI
28b60 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c  NCT|DISTINCT/ALL
28b70 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f 63 65 73   keyword] proces
28b80 73 69 6e 67 3a 20 49 66 20 74 68 65 20 71 75 65  sing: If the que
28b90 72 79 20 69 73 20 61 20 22 53 45 4c 45 43 54 0a  ry is a "SELECT.
28ba0 20 20 20 20 20 20 20 44 49 53 54 49 4e 43 54 22         DISTINCT"
28bb0 20 71 75 65 72 79 2c 20 64 75 70 6c 69 63 61 74   query, duplicat
28bc0 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76  e rows are remov
28bd0 65 64 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20  ed from the set 
28be0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a  of result rows..
28bf0 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  </ol>..<p>There 
28c00 61 72 65 20 74 77 6f 20 74 79 70 65 73 20 6f 66  are two types of
28c10 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
28c20 74 61 74 65 6d 65 6e 74 20 2d 20 61 67 67 72 65  tatement - aggre
28c30 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67  gate and .non-ag
28c40 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2e  gregate queries.
28c50 20 5e 41 20 73 69 6d 70 6c 65 20 53 45 4c 45 43   ^A simple SELEC
28c60 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  T statement is a
28c70 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
28c80 79 20 69 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73  y if.it contains
28c90 20 65 69 74 68 65 72 20 61 20 47 52 4f 55 50 20   either a GROUP 
28ca0 42 59 20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65  BY clause or one
28cb0 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
28cc0 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20  te functions.in 
28cd0 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2e 20  the result-set. 
28ce0 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 61  ^Otherwise, if a
28cf0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 63   simple SELECT c
28d00 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67 67 72 65  ontains no aggre
28d10 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f  gate.functions o
28d20 72 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  r a GROUP BY cla
28d30 75 73 65 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e  use, it is a non
28d40 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
28d50 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65  ...<p><b>1. Dete
28d60 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70  rmination of inp
28d70 75 74 20 64 61 74 61 20 28 46 52 4f 4d 20 63 6c  ut data (FROM cl
28d80 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 29  ause processing)
28d90 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72  .</b>.<tcl>hd_fr
28da0 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73  agment fromclaus
28db0 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  e</tcl>.<tcl>hd_
28dc0 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63  keywords {FROM c
28dd0 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  lause}</tcl>..<p
28de0 3e 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20  >The input data 
28df0 75 73 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65  used by a simple
28e00 20 53 45 4c 45 43 54 20 71 75 65 72 79 20 69 73   SELECT query is
28e10 20 61 20 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f   a set of <i>N</
28e20 69 3e 20 72 6f 77 73 20 0a 65 61 63 68 20 3c 69  i> rows .each <i
28e30 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77  >M</i> columns w
28e40 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68  ide...<p>^(If th
28e50 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
28e60 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20   omitted from a 
28e70 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
28e80 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
28e90 65 20 0a 69 6e 70 75 74 20 64 61 74 61 20 69 73  e .input data is
28ea0 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69   implicitly a si
28eb0 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f  ngle row zero co
28ec0 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20 28 69 2e  lumns wide)^ (i.
28ed0 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e  e. <i>N</i>=1 an
28ee0 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a  d.<i>M</i>=0)...
28ef0 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20 63 6c 61  <p>If a FROM cla
28f00 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
28f10 2c 20 74 68 65 20 64 61 74 61 20 6f 6e 20 77 68  , the data on wh
28f20 69 63 68 20 61 20 73 69 6d 70 6c 65 20 53 45 4c  ich a simple SEL
28f30 45 43 54 20 71 75 65 72 79 0a 6f 70 65 72 61 74  ECT query.operat
28f40 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68  es comes from th
28f50 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  e one or more ta
28f60 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
28f70 65 73 20 28 53 45 4c 45 43 54 20 73 74 61 74 65  es (SELECT state
28f80 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68  ments.in parenth
28f90 65 73 69 73 29 20 73 70 65 63 69 66 69 65 64 20  esis) specified 
28fa0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52  following the FR
28fb0 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73  OM keyword. ^A s
28fc0 75 62 71 75 65 72 79 20 73 70 65 63 69 66 69 65  ubquery specifie
28fd0 64 0a 69 6e 20 74 68 65 20 74 61 62 6c 65 2d 6f  d.in the table-o
28fe0 72 2d 73 75 62 71 75 65 72 79 20 66 6f 6c 6c 6f  r-subquery follo
28ff0 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c  wing the FROM cl
29000 61 75 73 65 20 69 6e 20 61 20 0a 73 69 6d 70 6c  ause in a .simpl
29010 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
29020 6e 74 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73  nt is.handled as
29030 20 69 66 20 69 74 20 77 61 73 20 61 20 74 61 62   if it was a tab
29040 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
29050 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20  e data returned 
29060 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  by executing the
29070 0a 73 75 62 71 75 65 72 79 20 73 74 61 74 65 6d  .subquery statem
29080 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d  ent. ^Each colum
29090 6e 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  n of the subquer
290a0 79 20 68 61 73 20 74 68 65 0a 5b 63 6f 6c 6c 61  y has the.[colla
290b0 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73  tion|collation s
290c0 65 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66  equence] and [af
290d0 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
290e0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70  orresponding exp
290f0 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73  ression.in the s
29100 75 62 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e  ubquery statemen
29110 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72 65  t...<p>^If there
29120 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c   is only a singl
29130 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  e table or subqu
29140 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 0a  ery in the FROM.
29150 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
29160 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
29170 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
29180 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
29190 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a  contents of the.
291a0 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66  named table. ^If
291b0 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74   there is more t
291c0 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 6f 72  han one table or
291d0 20 73 75 62 71 75 65 72 79 20 69 6e 20 46 52 4f   subquery in FRO
291e0 4d 20 63 6c 61 75 73 65 0a 74 68 65 6e 20 74 68  M clause.then th
291f0 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 6c  e contents of al
29200 6c 20 74 61 62 6c 65 73 20 61 6e 64 2f 6f 72 20  l tables and/or 
29210 73 75 62 71 75 65 72 69 65 73 0a 61 72 65 20 6a  subqueries.are j
29220 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  oined into a sin
29230 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f 72 20  gle dataset for 
29240 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  the simple SELEC
29250 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 6f  T statement to o
29260 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63 74  perate on..Exact
29270 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74 61 20  ly how the data 
29280 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65 70 65  is combined depe
29290 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69  nds on the speci
292a0 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74  fic [join-operat
292b0 6f 72 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f  or] and.[join-co
292c0 6e 73 74 72 61 69 6e 74 5d 20 75 73 65 64 20 74  nstraint] used t
292d0 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65 20 74 61  o connect the ta
292e0 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
292f0 65 73 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70  es together...<p
29300 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51  >All joins in SQ
29310 4c 69 74 65 20 61 72 65 20 62 61 73 65 64 20 6f  Lite are based o
29320 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
29330 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c  product of the l
29340 65 66 74 20 61 6e 64 0a 72 69 67 68 74 2d 68 61  eft and.right-ha
29350 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 54 68  nd datasets. ^Th
29360 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
29370 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
29380 63 74 20 64 61 74 61 73 65 74 20 61 72 65 2c 20  ct dataset are, 
29390 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74  in .order, all t
293a0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
293b0 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61  e left-hand data
293c0 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  set followed by 
293d0 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a  all the columns.
293e0 6f 66 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  of the right-han
293f0 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 72  d dataset. ^Ther
29400 65 20 69 73 20 61 20 72 6f 77 20 69 6e 20 74 68  e is a row in th
29410 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
29420 75 63 74 20 64 61 74 61 73 65 74 0a 66 6f 72 6d  uct dataset.form
29430 65 64 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20  ed by combining 
29440 65 61 63 68 20 75 6e 69 71 75 65 20 63 6f 6d 62  each unique comb
29450 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77  ination of a row
29460 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68   from the left-h
29470 61 6e 64 20 0a 61 6e 64 20 72 69 67 68 74 2d 68  and .and right-h
29480 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 28  and datasets. ^(
29490 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
294a0 69 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  if the left-hand
294b0 20 64 61 74 61 73 65 74 20 63 6f 6e 73 69 73 74   dataset consist
294c0 73 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73  s of.<i>N<sub><s
294d0 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
294e0 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73  ></sub></i> rows
294f0 20 6f 66 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73   of .<i>M<sub><s
29500 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
29510 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75  ></sub></i> colu
29520 6d 6e 73 2c 20 61 6e 64 20 74 68 65 20 72 69 67  mns, and the rig
29530 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ht-hand dataset 
29540 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61  of.<i>N<sub><sma
29550 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
29560 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20  </sub></i> rows 
29570 6f 66 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61  of.<i>M<sub><sma
29580 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
29590 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d  </sub></i> colum
295a0 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 63 61 72  ns, then the car
295b0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 69  tesian product i
295c0 73 20 61 0a 64 61 74 61 73 65 74 20 6f 66 20 0a  s a.dataset of .
295d0 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>N<sub><small>
295e0 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  left</small></su
295f0 62 3e 26 74 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c  b>&times;N<sub><
29600 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61  small>right</sma
29610 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f  ll></sub></i>.ro
29620 77 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e  ws, each contain
29630 69 6e 67 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73  ing .<i>M<sub><s
29640 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
29650 3e 3c 2f 73 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73  ></sub>+M<sub><s
29660 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c  mall>right</smal
29670 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c  l></sub></i> col
29680 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  umns.)^..<p>^If 
29690 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f  the join-operato
296a0 72 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e  r is "CROSS JOIN
296b0 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c  ", "INNER JOIN",
296c0 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d   "JOIN" or a com
296d0 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68 65  ma.(",") and the
296e0 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55  re is no ON or U
296f0 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65  SING clause, the
29700 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
29710 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70  the join is.simp
29720 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  ly the cartesian
29730 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20   product of the 
29740 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
29750 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a 49  and datasets. .I
29760 66 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  f join-operator 
29770 64 6f 65 73 20 68 61 76 65 20 4f 4e 20 6f 72 20  does have ON or 
29780 55 53 49 4e 47 20 63 6c 61 75 73 65 73 2c 20 74  USING clauses, t
29790 68 6f 73 65 20 61 72 65 20 68 61 6e 64 6c 65 64  hose are handled
297a0 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74 68   according to.th
297b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c  e following bull
297c0 65 74 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e  et points:..<ul>
297d0 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20  .  <li> <p>^(If 
297e0 74 68 65 72 65 20 69 73 20 61 6e 20 4f 4e 20 63  there is an ON c
297f0 6c 61 75 73 65 20 74 68 65 6e 20 74 68 65 20 4f  lause then the O
29800 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a  N expression is.
29810 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 65 64         evaluated
29820 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
29830 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
29840 72 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20 20  roduct as a .   
29850 20 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70      [boolean exp
29860 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72  ression]. Only r
29870 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
29880 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
29890 6c 75 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20  luates to .     
298a0 20 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75    true are inclu
298b0 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ded from the dat
298c0 61 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20  aset.)^..  <li> 
298d0 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
298e0 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 0a 20  a USING clause. 
298f0 20 20 20 20 20 20 74 68 65 6e 20 65 61 63 68 20        then each 
29900 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
29910 6d 65 73 20 73 70 65 63 69 66 69 65 64 20 6d 75  mes specified mu
29920 73 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 20  st exist in the 
29930 64 61 74 61 73 65 74 73 20 74 6f 20 0a 20 20 20  datasets to .   
29940 20 20 20 20 62 6f 74 68 20 74 68 65 20 6c 65 66      both the lef
29950 74 20 61 6e 64 20 72 69 67 68 74 20 6f 66 20 74  t and right of t
29960 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
29970 2e 20 5e 28 46 6f 72 20 65 61 63 68 20 70 61 69  . ^(For each pai
29980 72 20 6f 66 20 6e 61 6d 65 64 0a 20 20 20 20 20  r of named.     
29990 20 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65    columns, the e
299a0 78 70 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58  xpression "lhs.X
299b0 20 3d 20 72 68 73 2e 58 22 20 69 73 20 65 76 61   = rhs.X" is eva
299c0 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
299d0 72 6f 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68  row of.       th
299e0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
299f0 75 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61  uct as a [boolea
29a00 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f  n expression]. O
29a10 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69  nly rows for whi
29a20 63 68 0a 20 20 20 20 20 20 20 61 6c 6c 20 73 75  ch.       all su
29a30 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65  ch expressions e
29a40 76 61 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65  valuates to true
29a50 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72   are included fr
29a60 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20 72 65  om the.       re
29a70 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68 65  sult set.)^ ^Whe
29a80 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75  n comparing valu
29a90 65 73 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  es as a result o
29aa0 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  f a USING clause
29ab0 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e 6f 72  , the.       nor
29ac0 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 68 61  mal rules for ha
29ad0 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74 69 65  ndling affinitie
29ae0 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  s, collation seq
29af0 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a  uences and NULL.
29b00 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e         values in
29b10 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70 70   comparisons app
29b20 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20  ly. ^The column 
29b30 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
29b40 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 6c   on the.       l
29b50 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
29b60 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74   the join-operat
29b70 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  or is considered
29b80 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c 65   to be on the le
29b90 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 73  ft-hand.       s
29ba0 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ide of the compa
29bb0 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28  rison operator (
29bc0 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  =) for the purpo
29bd0 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ses of collation
29be0 20 0a 20 20 20 20 20 20 20 73 65 71 75 65 6e 63   .       sequenc
29bf0 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79 20 70  e and affinity p
29c00 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20  recedence...    
29c10 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20     <p>^For each 
29c20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  pair of columns 
29c30 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
29c40 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
29c50 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  e column.       
29c60 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
29c70 61 6e 64 20 64 61 74 61 73 65 74 20 69 73 20 6f  and dataset is o
29c80 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
29c90 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74 2e 20  joined dataset. 
29ca0 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20 69 73  ^This .       is
29cb0 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72   the only differ
29cc0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 55  ence between a U
29cd0 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e 64 20  SING clause and 
29ce0 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 4f  its equivalent O
29cf0 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61  N.       constra
29d00 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  int...  <li> <p>
29d10 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52 41 4c  ^(If the NATURAL
29d20 20 6b 65 79 77 6f 72 64 20 69 73 20 69 6e 20 74   keyword is in t
29d30 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
29d40 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20 20 20   then an.       
29d50 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47 20 63  implicit USING c
29d60 6c 61 75 73 65 20 69 73 20 61 64 64 65 64 20 74  lause is added t
29d70 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74  o the join-const
29d80 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c  raints. The impl
29d90 69 63 69 74 0a 20 20 20 20 20 20 20 55 53 49 4e  icit.       USIN
29da0 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e  G clause contain
29db0 73 20 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f  s each of the co
29dc0 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20  lumn names that 
29dd0 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68 0a 20  appear in both. 
29de0 20 20 20 20 20 20 74 68 65 20 6c 65 66 74 20 61        the left a
29df0 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e  nd right-hand in
29e00 70 75 74 20 64 61 74 61 73 65 74 73 2e 29 5e 20  put datasets.)^ 
29e10 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ^If the left and
29e20 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20 20 20   right-hand.    
29e30 20 20 20 69 6e 70 75 74 20 64 61 74 61 73 65 74     input dataset
29e40 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d  s feature no com
29e50 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  mon column names
29e60 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54 55 52  , then the NATUR
29e70 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20 20 20  AL keyword.     
29e80 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20    has no effect 
29e90 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
29ea0 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55  f the join. ^A U
29eb0 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73  SING or ON claus
29ec0 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f 74  e may.       not
29ed0 20 62 65 20 61 64 64 65 64 20 74 6f 20 61 20 6a   be added to a j
29ee0 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69 66 69  oin that specifi
29ef0 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  es the NATURAL k
29f00 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20  eyword...  <li> 
29f10 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e  <p>^(If the join
29f20 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 22  -operator is a "
29f30 4c 45 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c  LEFT JOIN" or "L
29f40 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c  EFT OUTER JOIN",
29f50 20 74 68 65 6e 0a 20 20 20 20 20 20 20 61 66 74   then.       aft
29f60 65 72 0a 20 20 20 20 20 20 20 74 68 65 20 4f 4e  er.       the ON
29f70 20 6f 72 20 55 53 49 4e 47 20 66 69 6c 74 65 72   or USING filter
29f80 69 6e 67 20 63 6c 61 75 73 65 73 20 68 61 76 65  ing clauses have
29f90 20 62 65 65 6e 20 61 70 70 6c 69 65 64 2c 20 61   been applied, a
29fa0 6e 20 65 78 74 72 61 20 72 6f 77 20 69 73 20 0a  n extra row is .
29fb0 20 20 20 20 20 20 20 61 64 64 65 64 20 74 6f 20         added to 
29fc0 74 68 65 20 6f 75 74 70 75 74 20 66 6f 72 20 65  the output for e
29fd0 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 6f  ach row in the o
29fe0 72 69 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e  riginal left-han
29ff0 64 20 69 6e 70 75 74 20 0a 20 20 20 20 20 20 20  d input .       
2a000 64 61 74 61 73 65 74 20 74 68 61 74 20 63 6f 72  dataset that cor
2a010 72 65 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72  responds to no r
2a020 6f 77 73 20 61 74 20 61 6c 6c 20 69 6e 20 74 68  ows at all in th
2a030 65 20 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20  e composite.    
2a040 20 20 20 64 61 74 61 73 65 74 20 28 69 66 20 61     dataset (if a
2a050 6e 79 29 2e 29 5e 20 5e 54 68 65 20 61 64 64 65  ny).)^ ^The adde
2a060 64 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e  d rows contain N
2a070 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  ULL values in th
2a080 65 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20  e columns.      
2a090 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
2a0a0 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c  ally contain val
2a0b0 75 65 73 20 63 6f 70 69 65 64 20 66 72 6f 6d 20  ues copied from 
2a0c0 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 69  the right-hand i
2a0d0 6e 70 75 74 0a 20 20 20 20 20 20 20 64 61 74 61  nput.       data
2a0e0 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70  set.  .</ul>..<p
2a0f0 3e 5e 28 57 68 65 6e 20 6d 6f 72 65 20 74 68 61  >^(When more tha
2a100 6e 20 74 77 6f 20 74 61 62 6c 65 73 20 61 72 65  n two tables are
2a110 20 6a 6f 69 6e 65 64 20 74 6f 67 65 74 68 65 72   joined together
2a120 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 46 52   as part of a FR
2a130 4f 4d 20 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a  OM clause,.the j
2a140 6f 69 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20 61  oin operations a
2a150 72 65 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20  re processed in 
2a160 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20  order from left 
2a170 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68  to right. In oth
2a180 65 72 20 0a 77 6f 72 64 73 2c 20 74 68 65 20 46  er .words, the F
2a190 52 4f 4d 20 63 6c 61 75 73 65 20 28 41 20 6a 6f  ROM clause (A jo
2a1a0 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f  in-op-1 B join-o
2a1b0 70 2d 32 20 43 29 20 69 73 20 63 6f 6d 70 75 74  p-2 C) is comput
2a1c0 65 64 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d  ed as .((A join-
2a1d0 6f 70 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d  op-1 B) join-op-
2a1e0 32 20 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  2 C).)^..<tcl>hd
2a1f0 5f 66 72 61 67 6d 65 6e 74 20 63 72 6f 73 73 6a  _fragment crossj
2a200 6f 69 6e 20 7b 74 72 65 61 74 73 20 74 68 65 20  oin {treats the 
2a210 43 52 4f 53 53 20 4a 4f 49 4e 20 6f 70 65 72 61  CROSS JOIN opera
2a220 74 6f 72 20 73 70 65 63 69 61 6c 6c 79 7d 3c 2f  tor specially}</
2a230 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20  tcl>.<p><b>Side 
2a240 6e 6f 74 65 3a 20 53 70 65 63 69 61 6c 20 68 61  note: Special ha
2a250 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20  ndling of CROSS 
2a260 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65  JOIN.</b>.^There
2a270 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63   is no differenc
2a280 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 22 49  e between the "I
2a290 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49  NNER JOIN", "JOI
2a2a0 4e 22 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a  N" and "," join.
2a2b0 6f 70 65 72 61 74 6f 72 73 2e 20 54 68 65 79 20  operators. They 
2a2c0 61 72 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69  are completely i
2a2d0 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20 69  nterchangeable i
2a2e0 6e 20 53 51 4c 69 74 65 2e 0a 5e 28 54 68 65 20  n SQLite..^(The 
2a2f0 22 43 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69  "CROSS JOIN" joi
2a300 6e 20 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75  n operator produ
2a310 63 65 73 20 74 68 65 20 73 61 6d 65 20 72 65 73  ces the same res
2a320 75 6c 74 20 61 73 20 74 68 65 20 0a 22 49 4e 4e  ult as the ."INN
2a330 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
2a340 20 61 6e 64 20 22 2c 22 20 6f 70 65 72 61 74 6f   and "," operato
2a350 72 73 29 5e 2c 20 62 75 74 20 69 73 20 0a 5b 43  rs)^, but is .[C
2a360 52 4f 53 53 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65  ROSS JOIN|handle
2a370 64 20 64 69 66 66 65 72 65 6e 74 6c 79 20 62 79  d differently by
2a380 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
2a390 69 7a 65 72 5d 0a 69 6e 20 74 68 61 74 20 69 74  izer].in that it
2a3a0 20 70 72 65 76 65 6e 74 73 20 74 68 65 20 71 75   prevents the qu
2a3b0 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 66 72  ery optimizer fr
2a3c0 6f 6d 20 72 65 6f 72 64 65 72 69 6e 67 0a 74 68  om reordering.th
2a3d0 65 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  e tables in the 
2a3e0 6a 6f 69 6e 2e 20 20 41 6e 20 61 70 70 6c 69 63  join.  An applic
2a3f0 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 72  ation programmer
2a400 20 63 61 6e 20 75 73 65 20 74 68 65 20 43 52 4f   can use the CRO
2a410 53 53 20 4a 4f 49 4e 20 0a 6f 70 65 72 61 74 6f  SS JOIN .operato
2a420 72 20 74 6f 20 64 69 72 65 63 74 6c 79 20 69 6e  r to directly in
2a430 66 6c 75 65 6e 63 65 20 74 68 65 20 61 6c 67 6f  fluence the algo
2a440 72 69 74 68 6d 20 74 68 61 74 20 69 73 20 63 68  rithm that is ch
2a450 6f 73 65 6e 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  osen to implemen
2a460 74 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  t.the SELECT sta
2a470 74 65 6d 65 6e 74 2e 20 20 41 76 6f 69 64 20 75  tement.  Avoid u
2a480 73 69 6e 67 20 43 52 4f 53 53 20 4a 4f 49 4e 20  sing CROSS JOIN 
2a490 65 78 63 65 70 74 20 69 6e 20 73 70 65 63 69 66  except in specif
2a4a0 69 63 20 73 69 74 75 61 74 69 6f 6e 73 20 0a 77  ic situations .w
2a4b0 68 65 72 65 20 6d 61 6e 75 61 6c 20 63 6f 6e 74  here manual cont
2a4c0 72 6f 6c 20 6f 66 20 74 68 65 20 71 75 65 72 79  rol of the query
2a4d0 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 64 65   optimizer is de
2a4e0 73 69 72 65 64 2e 20 20 41 76 6f 69 64 20 75 73  sired.  Avoid us
2a4f0 69 6e 67 0a 43 52 4f 53 53 20 4a 4f 49 4e 20 65  ing.CROSS JOIN e
2a500 61 72 6c 79 20 69 6e 20 74 68 65 20 64 65 76 65  arly in the deve
2a510 6c 6f 70 6d 65 6e 74 20 6f 66 20 61 6e 20 61 70  lopment of an ap
2a520 70 6c 69 63 61 74 69 6f 6e 20 61 73 20 64 6f 69  plication as doi
2a530 6e 67 20 73 6f 20 69 73 0a 61 20 3c 61 20 68 72  ng so is.a <a hr
2a540 65 66 3d 22 68 74 74 70 3a 2f 2f 63 32 2e 63 6f  ef="http://c2.co
2a550 6d 2f 63 67 69 2f 77 69 6b 69 3f 50 72 65 6d 61  m/cgi/wiki?Prema
2a560 74 75 72 65 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  tureOptimization
2a570 22 3e 70 72 65 6d 61 74 75 72 65 0a 6f 70 74 69  ">premature.opti
2a580 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54  mization</a>.  T
2a590 68 65 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c  he special handl
2a5a0 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49  ing of CROSS JOI
2a5b0 4e 20 69 73 20 61 6e 20 53 51 4c 69 74 65 2d 73  N is an SQLite-s
2a5c0 70 65 63 69 66 69 63 0a 66 65 61 74 75 72 65 20  pecific.feature 
2a5d0 61 6e 64 20 69 73 20 6e 6f 74 20 61 20 70 61 72  and is not a par
2a5e0 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51  t of standard SQ
2a5f0 4c 2e 0a 20 20 20 20 20 20 20 0a 0a 3c 74 63 6c  L..       ..<tcl
2a600 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65  >hd_fragment whe
2a610 72 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c  reclause</tcl>.<
2a620 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
2a630 7b 57 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f  {WHERE clause}</
2a640 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48  tcl>.<p><b>2. WH
2a650 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74 65  ERE clause filte
2a660 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28  ring.</b>..<p>^(
2a670 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
2a680 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
2a690 74 68 65 20 57 48 45 52 45 20 65 78 70 72 65 73  the WHERE expres
2a6a0 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
2a6b0 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f 77 20  d for .each row 
2a6c0 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  in the input dat
2a6d0 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20  a as a [boolean 
2a6e0 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c  expression]. Onl
2a6f0 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  y rows for which
2a700 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
2a710 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
2a720 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65 20 61  luates to true a
2a730 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d  re included from
2a740 20 74 68 65 20 64 61 74 61 73 65 74 20 62 65 66   the dataset bef
2a750 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e 29  ore.continuing.)
2a760 5e 20 20 52 6f 77 73 20 61 72 65 20 65 78 63 6c  ^  Rows are excl
2a770 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  uded from the re
2a780 73 75 6c 74 20 69 66 20 74 68 65 20 57 48 45 52  sult if the WHER
2a790 45 20 63 6c 61 75 73 65 0a 65 76 61 6c 75 61 74  E clause.evaluat
2a7a0 65 73 20 74 6f 20 65 69 74 68 65 72 20 66 61 6c  es to either fal
2a7b0 73 65 20 6f 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  se or NULL...<p>
2a7c0 46 6f 72 20 61 20 4a 4f 49 4e 20 6f 72 20 49 4e  For a JOIN or IN
2a7d0 4e 45 52 20 4a 4f 49 4e 20 6f 72 20 43 52 4f 53  NER JOIN or CROS
2a7e0 53 20 4a 4f 49 4e 2c 20 74 68 65 72 65 20 69 73  S JOIN, there is
2a7f0 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62   no difference b
2a800 65 74 77 65 65 6e 20 0a 61 20 63 6f 6e 73 74 72  etween .a constr
2a810 61 69 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  aint expression 
2a820 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  in the WHERE cla
2a830 75 73 65 20 61 6e 64 20 6f 6e 65 20 69 6e 20 74  use and one in t
2a840 68 65 20 4f 4e 20 63 6c 61 75 73 65 2e 20 20 48  he ON clause.  H
2a850 6f 77 65 76 65 72 2c 0a 66 6f 72 20 61 20 4c 45  owever,.for a LE
2a860 46 54 20 4a 4f 49 4e 20 6f 72 20 4c 45 46 54 20  FT JOIN or LEFT 
2a870 4f 55 54 45 52 20 4a 4f 49 4e 2c 20 74 68 65 20  OUTER JOIN, the 
2a880 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 76 65  difference is ve
2a890 72 79 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 0a  ry important.  .
2a8a0 49 6e 20 61 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a  In a LEFT JOIN,.
2a8b0 74 68 65 20 65 78 74 72 61 20 4e 55 4c 4c 20 72  the extra NULL r
2a8c0 6f 77 20 66 6f 72 20 74 68 65 20 72 69 67 68 74  ow for the right
2a8d0 2d 68 61 6e 64 20 74 61 62 6c 65 20 69 73 20 61  -hand table is a
2a8e0 64 64 65 64 20 61 66 74 65 72 20 4f 4e 20 63 6c  dded after ON cl
2a8f0 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 0a  ause processing.
2a900 62 75 74 20 62 65 66 6f 72 65 20 57 48 45 52 45  but before WHERE
2a910 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
2a920 6e 67 2e 20 20 41 20 63 6f 6e 73 74 72 61 69 6e  ng.  A constrain
2a930 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 6c  t of the form "l
2a940 65 66 74 2e 78 3d 72 69 67 68 74 2e 79 22 0a 69  eft.x=right.y".i
2a950 6e 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 77  n an ON clause w
2a960 69 6c 6c 20 74 68 65 72 65 66 6f 72 65 20 61 6c  ill therefore al
2a970 6c 6f 77 20 74 68 72 6f 75 67 68 20 74 68 65 20  low through the 
2a980 61 64 64 65 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72  added all-NULL r
2a990 6f 77 73 20 6f 66 20 74 68 65 0a 72 69 67 68 74  ows of the.right
2a9a0 20 74 61 62 6c 65 2e 20 20 42 75 74 20 69 66 20   table.  But if 
2a9b0 74 68 61 74 20 73 61 6d 65 20 63 6f 6e 73 74 72  that same constr
2a9c0 61 69 6e 74 20 69 73 20 69 6e 20 74 68 65 20 57  aint is in the W
2a9d0 48 45 52 45 20 63 6c 61 75 73 65 20 61 20 4e 55  HERE clause a NU
2a9e0 4c 4c 20 69 6e 0a 22 72 69 67 68 74 2e 79 22 20  LL in."right.y" 
2a9f0 77 69 6c 6c 20 70 72 65 76 65 6e 74 20 74 68 65  will prevent the
2aa00 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 65 66   expression "lef
2aa10 74 2e 78 3d 72 69 67 68 74 2e 79 22 20 66 72 6f  t.x=right.y" fro
2aa20 6d 20 62 65 69 6e 67 20 74 72 75 65 2c 20 61 6e  m being true, an
2aa30 64 0a 74 68 75 73 20 65 78 63 6c 75 64 65 20 74  d.thus exclude t
2aa40 68 61 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65  hat row from the
2aa50 20 6f 75 74 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e   output...<p><b>
2aa60 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66  3. Generation of
2aa70 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
2aa80 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63  lt rows.</b>.<tc
2aa90 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65  l>hd_fragment re
2aaa0 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74  sultset</tcl>.<t
2aab0 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
2aac0 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
2aad0 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42  ssions} {GROUP B
2aae0 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63  Y}</tcl>..<p>Onc
2aaf0 65 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  e the input data
2ab00 20 66 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63   from the FROM c
2ab10 6c 61 75 73 65 20 68 61 73 20 62 65 65 6e 20 66  lause has been f
2ab20 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 0a 57  iltered by the.W
2ab30 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
2ab40 65 73 73 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c  ession (if any),
2ab50 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
2ab60 6c 74 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20  lt rows for the 
2ab70 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 61  simple .SELECT a
2ab80 72 65 20 63 61 6c 63 75 6c 61 74 65 64 2e 20 45  re calculated. E
2ab90 78 61 63 74 6c 79 20 68 6f 77 20 74 68 69 73 20  xactly how this 
2aba0 69 73 20 64 6f 6e 65 20 64 65 70 65 6e 64 73 20  is done depends 
2abb0 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 73  on whether the s
2abc0 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 69 73  imple .SELECT is
2abd0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 6f 72   an aggregate or
2abe0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
2abf0 75 65 72 79 2c 20 61 6e 64 20 77 68 65 74 68 65  uery, and whethe
2ac00 72 20 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55 50  r or not a GROUP
2ac10 0a 42 59 20 63 6c 61 75 73 65 20 77 61 73 20 73  .BY clause was s
2ac20 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54  pecified...<p> T
2ac30 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65  he list of expre
2ac40 73 73 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 74  ssions between t
2ac50 68 65 20 53 45 4c 45 43 54 20 61 6e 64 20 46 52  he SELECT and FR
2ac60 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69 73 20 6b  OM keywords is k
2ac70 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72 65 73 75  nown as.the resu
2ac80 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
2ac90 73 74 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c  st.  ^If a resul
2aca0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
2acb0 74 68 65 20 73 70 65 63 69 61 6c 20 65 78 70 72  the special expr
2acc0 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20  ession."*" then 
2acd0 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  all columns in t
2ace0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 72  he input data ar
2acf0 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e substituted fo
2ad00 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65  r that one expre
2ad10 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20  ssion..^(If the 
2ad20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
2ad30 65 20 61 6c 69 61 73 20 6f 66 20 61 20 74 61 62  e alias of a tab
2ad40 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
2ad50 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
2ad60 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e  e.followed by ".
2ad70 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75  *" then all colu
2ad80 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d  mns from the nam
2ad90 65 64 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ed table or subq
2ada0 75 65 72 79 20 61 72 65 0a 73 75 62 73 74 69 74  uery are.substit
2adb0 75 74 65 64 20 66 6f 72 20 74 68 65 20 73 69 6e  uted for the sin
2adc0 67 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 29  gle expression.)
2add0 5e 20 5e 28 49 74 20 69 73 20 61 6e 20 65 72 72  ^ ^(It is an err
2ade0 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20  or to use a "*" 
2adf0 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78 70  or."alias.*" exp
2ae00 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63  ression in any c
2ae10 6f 6e 74 65 78 74 20 6f 74 68 65 72 20 74 68 61  ontext other tha
2ae20 6e 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65  n a result expre
2ae30 73 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28  ssion list.)^.^(
2ae40 49 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72  It is also an er
2ae50 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22  ror to use a "*"
2ae60 20 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78   or "alias.*" ex
2ae70 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69  pression in a si
2ae80 6d 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72  mple SELECT.quer
2ae90 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  y that does not 
2aea0 68 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75  have a FROM clau
2aeb0 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65  se.)^..<p> ^(The
2aec0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
2aed0 6e 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72  ns in the rows r
2aee0 65 74 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d  eturned by a sim
2aef0 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
2af00 6d 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f  ment.is equal to
2af10 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
2af20 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
2af30 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
2af40 69 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73  ion list after.s
2af50 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a  ubstitution of *
2af60 20 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70   and alias.* exp
2af70 72 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68  ressions.)^ Each
2af80 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63   result row is c
2af90 61 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61  alculated by.eva
2afa0 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72  luating the expr
2afb0 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72  essions in the r
2afc0 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
2afd0 20 6c 69 73 74 20 77 69 74 68 20 72 65 73 70 65   list with respe
2afe0 63 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72  ct to a.single r
2aff0 6f 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  ow of input data
2b000 20 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61   or, for aggrega
2b010 74 65 20 71 75 65 72 69 65 73 2c 20 77 69 74 68  te queries, with
2b020 20 72 65 73 70 65 63 74 20 74 6f 20 61 20 67 72   respect to a gr
2b030 6f 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75  oup.of rows...<u
2b040 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
2b050 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2b060 6d 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e  ment is <b>a non
2b070 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
2b080 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20  </b>, then .    
2b090 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
2b0a0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
2b0b0 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73  pression list is
2b0c0 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
2b0d0 61 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74  ach row in.    t
2b0e0 68 65 20 64 61 74 61 73 65 74 20 66 69 6c 74 65  he dataset filte
2b0f0 72 65 64 20 62 79 20 74 68 65 20 57 48 45 52 45  red by the WHERE
2b100 20 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e   clause...  <li>
2b110 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43  <p>^If the SELEC
2b120 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
2b130 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
2b140 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47  uery without a G
2b150 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20  ROUP.    BY</b> 
2b160 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63  clause, then eac
2b170 68 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  h aggregate expr
2b180 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
2b190 73 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20  sult-set is .   
2b1a0 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
2b1b0 61 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72  across the entir
2b1c0 65 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68  e dataset. ^Each
2b1d0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
2b1e0 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e  xpression.    in
2b1f0 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20   the result-set 
2b200 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  is evaluated onc
2b210 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61  e for an arbitra
2b220 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
2b230 77 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74  w of.    the dat
2b240 61 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20  aset. ^The same 
2b250 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65  arbitrarily sele
2b260 63 74 65 64 20 72 6f 77 20 69 73 20 75 73 65 64  cted row is used
2b270 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f   for each.    no
2b280 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
2b290 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20  ession. ^Or, if 
2b2a0 74 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74  the dataset cont
2b2b0 61 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20  ains zero rows, 
2b2c0 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e  then .    each n
2b2d0 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
2b2e0 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
2b2f0 61 74 65 64 20 61 67 61 69 6e 73 74 20 61 20 72  ated against a r
2b300 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20  ow consisting.  
2b310 20 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55    entirely of NU
2b320 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c  LL values...   <
2b330 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f  p>^The single ro
2b340 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  w of result-set 
2b350 64 61 74 61 20 63 72 65 61 74 65 64 20 62 79 20  data created by 
2b360 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
2b370 67 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64  ggregate.    and
2b380 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
2b390 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
2b3a0 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72  e result-set for
2b3b0 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ms the result of
2b3c0 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74   an.    aggregat
2b3d0 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20  e query without 
2b3e0 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
2b3f0 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65  e. ^An aggregate
2b400 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
2b410 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c  .    GROUP BY cl
2b420 61 75 73 65 20 61 6c 77 61 79 73 20 72 65 74 75  ause always retu
2b430 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  rns exactly one 
2b440 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65  row of data, eve
2b450 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 20  n if there are. 
2b460 20 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20     zero rows of 
2b470 69 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c  input data...  <
2b480 6c 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53  li><p>^(If the S
2b490 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2b4a0 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
2b4b0 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
2b4c0 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e  GROUP.    BY</b>
2b4d0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61   clause, then ea
2b4e0 63 68 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  ch of the expres
2b4f0 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20  sions specified 
2b500 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20  as part of the. 
2b510 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
2b520 73 65 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  se is evaluated 
2b530 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
2b540 74 68 65 20 64 61 74 61 73 65 74 2e 20 45 61 63  the dataset. Eac
2b550 68 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65  h row.    is the
2b560 6e 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20  n assigned to a 
2b570 22 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e  "group" based on
2b580 20 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f   the results; ro
2b590 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20  ws for which.   
2b5a0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
2b5b0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47  evaluating the G
2b5c0 52 4f 55 50 20 42 59 20 65 78 70 72 65 73 73 69  ROUP BY expressi
2b5d0 6f 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  ons are the same
2b5e0 20 67 65 74 0a 20 20 20 20 61 73 73 69 67 6e 65   get.    assigne
2b5f0 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72  d to the same gr
2b600 6f 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  oup.)^ ^For the 
2b610 70 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75  purposes of grou
2b620 70 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20  ping rows, NULL 
2b630 0a 20 20 20 20 76 61 6c 75 65 73 20 61 72 65 20  .    values are 
2b640 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c  considered equal
2b650 2e 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c  . ^The usual rul
2b660 65 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f  es for [collatio
2b670 6e 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20  n|selecting a.  
2b680 20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75    collation sequ
2b690 65 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63 68  ence] with which
2b6a0 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
2b6b0 20 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68   values apply wh
2b6c0 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20  en evaluating.  
2b6d0 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e    expressions in
2b6e0 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
2b6f0 73 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73  se.  ^The expres
2b700 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f  sions in the GRO
2b710 55 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20  UP BY clause.   
2b720 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   do <em>not</em>
2b730 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70 72   have to be expr
2b740 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70  essions that app
2b750 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ear in the resul
2b760 74 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72  t. ^The.    expr
2b770 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f  essions in a GRO
2b780 55 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79  UP BY clause may
2b790 20 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61 74   not be aggregat
2b7a0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a  e expressions...
2b7b0 20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41      <p>^(If a HA
2b7c0 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
2b7d0 70 65 63 69 66 69 65 64 2c 20 69 74 20 69 73 20  pecified, it is 
2b7e0 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
2b7f0 6f 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20  or each group . 
2b800 20 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20     of rows as a 
2b810 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
2b820 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73  ion]. If the res
2b830 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
2b840 67 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47  g the.    HAVING
2b850 20 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65   clause is false
2b860 2c 20 74 68 65 20 67 72 6f 75 70 20 69 73 20 64  , the group is d
2b870 69 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20  iscarded.)^ ^If 
2b880 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  the HAVING claus
2b890 65 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72  e is.    an aggr
2b8a0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
2b8b0 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
2b8c0 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77  d across all row
2b8d0 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  s in the group. 
2b8e0 5e 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47  ^If.    a HAVING
2b8f0 20 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e   clause is a non
2b900 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2b910 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
2b920 6c 75 61 74 65 64 20 77 69 74 68 20 72 65 73 70  luated with resp
2b930 65 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72  ect.    to an ar
2b940 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
2b950 65 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20  ed row from the 
2b960 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56  group.  ^The HAV
2b970 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ING expression m
2b980 61 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20  ay.    refer to 
2b990 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67  values, even agg
2b9a0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
2b9b0 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69  , that are not i
2b9c0 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70  n the result.</p
2b9d0 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  >..    <p>^Each 
2b9e0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
2b9f0 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
2ba00 74 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f  then evaluated o
2ba10 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20  nce for each.   
2ba20 20 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20   group of rows. 
2ba30 5e 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69  ^If the expressi
2ba40 6f 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  on is an aggrega
2ba50 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
2ba60 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61  t is .    evalua
2ba70 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ted across all r
2ba80 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
2ba90 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74  . ^Otherwise, it
2baa0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67   is evaluated ag
2bab0 61 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67  ainst.    a sing
2bac0 6c 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 63  le arbitrarily c
2bad0 68 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77  hosen row from w
2bae0 69 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ithin the group.
2baf0 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f   ^If there is mo
2bb00 72 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20  re.    than one 
2bb10 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
2bb20 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
2bb30 72 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e  result-set, then
2bb40 20 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78   all such.    ex
2bb50 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76  pressions are ev
2bb60 61 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65 20  aluated for the 
2bb70 73 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c  same row...    <
2bb80 70 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66  p>^Each group of
2bb90 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 20 72   input dataset r
2bba0 6f 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20  ows contributes 
2bbb0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20  a single row to 
2bbc0 74 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20  the .    set of 
2bbd0 72 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75  result rows. ^Su
2bbe0 62 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69  bject to filteri
2bbf0 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ng associated wi
2bc00 74 68 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a  th the DISTINCT.
2bc10 20 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65      keyword, the
2bc20 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2bc30 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61  returned by an a
2bc40 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
2bc50 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20  ith a GROUP.    
2bc60 42 59 20 63 6c 61 75 73 65 20 69 73 20 74 68 65  BY clause is the
2bc70 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d   same as the num
2bc80 62 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66  ber of groups of
2bc90 20 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62   rows produced b
2bca0 79 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74  y applying.    t
2bcb0 68 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20  he GROUP BY and 
2bcc0 48 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74  HAVING clauses t
2bcd0 6f 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  o the filtered i
2bce0 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f  nput dataset..</
2bcf0 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65  ul>..<p><b>4. Re
2bd00 6d 6f 76 61 6c 20 6f 66 20 64 75 70 6c 69 63 61  moval of duplica
2bd10 74 65 20 72 6f 77 73 20 28 44 49 53 54 49 4e 43  te rows (DISTINC
2bd20 54 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f  T processing).</
2bd30 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
2bd40 65 6e 74 20 64 69 73 74 69 6e 63 74 3c 2f 74 63  ent distinct</tc
2bd50 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
2bd60 72 64 73 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f  rds {DISTINCT}</
2bd70 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66  tcl>..<p>^One of
2bd80 20 74 68 65 20 41 4c 4c 20 6f 72 20 44 49 53 54   the ALL or DIST
2bd90 49 4e 43 54 20 6b 65 79 77 6f 72 64 73 20 6d 61  INCT keywords ma
2bda0 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c  y follow the SEL
2bdb0 45 43 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 61  ECT keyword in a
2bdc0 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20   .simple SELECT 
2bdd0 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74  statement. ^If t
2bde0 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  he simple SELECT
2bdf0 20 69 73 20 61 20 53 45 4c 45 43 54 20 41 4c 4c   is a SELECT ALL
2be00 2c 20 74 68 65 6e 20 74 68 65 0a 65 6e 74 69 72  , then the.entir
2be10 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
2be20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
2be30 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 2e  d by the SELECT.
2be40 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41 4c 4c   ^If neither ALL
2be50 20 6f 72 0a 44 49 53 54 49 4e 43 54 20 61 72 65   or.DISTINCT are
2be60 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
2be70 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 61  he behavior is a
2be80 73 20 69 66 20 41 4c 4c 20 77 65 72 65 20 73 70  s if ALL were sp
2be90 65 63 69 66 69 65 64 2e 20 0a 5e 49 66 20 74 68  ecified. .^If th
2bea0 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
2beb0 69 73 20 61 20 53 45 4c 45 43 54 20 44 49 53 54  is a SELECT DIST
2bec0 49 4e 43 54 2c 20 74 68 65 6e 20 64 75 70 6c 69  INCT, then dupli
2bed0 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
2bee0 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 73  moved.from the s
2bef0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
2bf00 73 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 72  s before it is r
2bf10 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72 20 74 68  eturned. ^For th
2bf20 65 20 70 75 72 70 6f 73 65 73 20 6f 66 0a 64 65  e purposes of.de
2bf30 74 65 63 74 69 6e 67 20 64 75 70 6c 69 63 61 74  tecting duplicat
2bf40 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e 55 4c 4c  e rows, two NULL
2bf50 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
2bf60 69 64 65 72 65 64 20 74 6f 20 62 65 20 65 71 75  idered to be equ
2bf70 61 6c 2e 20 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20  al. ^The.normal 
2bf80 72 75 6c 65 73 20 66 6f 72 20 73 65 6c 65 63 74  rules for select
2bf90 69 6e 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ing a collation 
2bfa0 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70  sequence to comp
2bfb0 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 20  are text values 
2bfc0 77 69 74 68 0a 61 70 70 6c 79 2e 0a 0a 3c 74 63  with.apply...<tc
2bfd0 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  l>.hd_fragment c
2bfe0 6f 6d 70 6f 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e  ompound {compoun
2bff0 64 20 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f  d select} {compo
2c000 75 6e 64 20 71 75 65 72 79 7d 20 7b 63 6f 6d 70  und query} {comp
2c010 6f 75 6e 64 20 53 45 4c 45 43 54 7d 20 7b 63 6f  ound SELECT} {co
2c020 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 7d 0a  mpound SELECTs}.
2c030 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f  </tcl>.<h3>Compo
2c040 75 6e 64 20 53 65 6c 65 63 74 20 53 74 61 74 65  und Select State
2c050 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  ments</h3>..<p>T
2c060 77 6f 20 6f 72 20 6d 6f 72 65 20 5b 73 69 6d 70  wo or more [simp
2c070 6c 65 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65  le SELECT] state
2c080 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e  ments may be con
2c090 6e 65 63 74 65 64 20 74 6f 67 65 74 68 65 72 20  nected together 
2c0a0 74 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75  to form.a compou
2c0b0 6e 64 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20  nd SELECT using 
2c0c0 74 68 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e  the UNION, UNION
2c0d0 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20   ALL, INTERSECT 
2c0e0 6f 72 20 45 58 43 45 50 54 20 6f 70 65 72 61 74  or EXCEPT operat
2c0f0 6f 72 2c 0a 61 73 20 73 68 6f 77 6e 20 62 79 20  or,.as shown by 
2c100 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69  the following di
2c110 61 67 72 61 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65  agram:..<tcl>.Re
2c120 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
2c130 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 73 65  gram compound-se
2c140 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  lect-stmt.</tcl>
2c150 0a 0a 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f  ..<p>^In a compo
2c160 75 6e 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20  und SELECT, all 
2c170 74 68 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20  the constituent 
2c180 53 45 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74  SELECTs must ret
2c190 75 72 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75  urn the same .nu
2c1a0 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63  mber of result c
2c1b0 6f 6c 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20  olumns. ^As the 
2c1c0 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20  components of a 
2c1d0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20  compound SELECT 
2c1e0 6d 75 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53  must.be simple S
2c1f0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
2c200 2c 20 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63  , they may not c
2c210 6f 6e 74 61 69 6e 20 5b 4f 52 44 45 52 20 42 59  ontain [ORDER BY
2c220 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61  ] or [LIMIT] cla
2c230 75 73 65 73 2e 0a 5e 5b 4f 52 44 45 52 20 42 59  uses..^[ORDER BY
2c240 5d 20 61 6e 64 20 5b 4c 49 4d 49 54 5d 20 63 6c  ] and [LIMIT] cl
2c250 61 75 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f  auses may only o
2c260 63 63 75 72 20 61 74 20 74 68 65 20 65 6e 64 20  ccur at the end 
2c270 6f 66 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f  of the entire co
2c280 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 2c 20 61  mpound.SELECT, a
2c290 6e 64 20 74 68 65 6e 20 6f 6e 6c 79 20 69 66 20  nd then only if 
2c2a0 74 68 65 20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e  the final elemen
2c2b0 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e  t of the compoun
2c2c0 64 20 69 73 20 6e 6f 74 20 61 20 5b 56 41 4c 55  d is not a [VALU
2c2d0 45 53 5d 20 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e  ES] clause...<p>
2c2e0 5e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  ^A compound SELE
2c2f0 43 54 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  CT created using
2c300 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61   UNION ALL opera
2c310 74 6f 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  tor returns all 
2c320 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68  the rows.from th
2c330 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  e SELECT to the 
2c340 6c 65 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f  left of the UNIO
2c350 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20  N ALL operator, 
2c360 61 6e 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73  and all the rows
2c370 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54  .from the SELECT
2c380 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66   to the right of
2c390 20 69 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20   it. ^The UNION 
2c3a0 6f 70 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74  operator works t
2c3b0 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55  he same way as.U
2c3c0 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74  NION ALL, except
2c3d0 20 74 68 61 74 20 64 75 70 6c 69 63 61 74 65 20   that duplicate 
2c3e0 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
2c3f0 20 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20   from the final 
2c400 72 65 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65  result set..^The
2c410 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61   INTERSECT opera
2c420 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65 20  tor returns the 
2c430 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20  intersection of 
2c440 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
2c450 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
2c460 74 20 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65  t SELECTs.  ^The
2c470 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
2c480 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 75 62   returns the sub
2c490 73 65 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75  set of rows retu
2c4a0 72 6e 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74  rned by the.left
2c4b0 20 53 45 4c 45 43 54 20 74 68 61 74 20 61 72 65   SELECT that are
2c4c0 20 6e 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e   not also return
2c4d0 65 64 20 62 79 20 74 68 65 20 72 69 67 68 74 2d  ed by the right-
2c4e0 68 61 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75  hand SELECT. ^Du
2c4f0 70 6c 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65  plicate.rows are
2c500 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
2c510 65 20 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54  e results of INT
2c520 45 52 53 45 43 54 20 61 6e 64 20 45 58 43 45 50  ERSECT and EXCEP
2c530 54 20 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f  T operators befo
2c540 72 65 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65  re the.result se
2c550 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a  t is returned...
2c560 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70  <p>^For the purp
2c570 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e  oses of determin
2c580 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
2c590 77 73 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ws for the resul
2c5a0 74 73 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53  ts of compound.S
2c5b0 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c  ELECT operators,
2c5c0 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
2c5d0 20 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61   considered equa
2c5e0 6c 20 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20  l to other NULL 
2c5f0 76 61 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69  values and.disti
2c600 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e  nct from all non
2c610 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54  -NULL values. ^T
2c620 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
2c630 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f  uence used to co
2c640 6d 70 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20  mpare .two text 
2c650 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d  values is determ
2c660 69 6e 65 64 20 61 73 20 69 66 20 74 68 65 20 63  ined as if the c
2c670 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
2c680 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
2c690 64 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d.SELECT stateme
2c6a0 6e 74 73 20 77 65 72 65 20 74 68 65 20 6c 65 66  nts were the lef
2c6b0 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
2c6c0 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65   operands of the
2c6d0 20 65 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72   equals (=).oper
2c6e0 61 74 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61  ator, except tha
2c6f0 74 20 67 72 65 61 74 65 72 20 70 72 65 63 65 64  t greater preced
2c700 65 6e 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69  ence is not assi
2c710 67 6e 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74  gned to a collat
2c720 69 6f 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70  ion .sequence sp
2c730 65 63 69 66 69 65 64 20 77 69 74 68 20 74 68 65  ecified with the
2c740 20 70 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45   postfix COLLATE
2c750 20 6f 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61   operator. ^No a
2c760 66 66 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72  ffinity.transfor
2c770 6d 61 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c  mations are appl
2c780 69 65 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65  ied to any value
2c790 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
2c7a0 20 72 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66   rows as part of
2c7b0 20 61 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a.compound SELE
2c7c0 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  CT. ..<p>^(When 
2c7d0 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69  three or more si
2c7e0 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65  mple SELECTs are
2c7f0 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20   connected into 
2c800 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
2c810 54 2c 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72  T,.they group fr
2c820 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
2c830 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
2c840 2c 20 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e  , if "A", "B" an
2c850 64 20 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69  d "C" are all.si
2c860 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
2c870 65 6d 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20  ements, (A op B 
2c880 6f 70 20 43 29 20 69 73 20 70 72 6f 63 65 73 73  op C) is process
2c890 65 64 20 61 73 20 28 28 41 20 6f 70 20 42 29 20  ed as ((A op B) 
2c8a0 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a  op C).)^..</p>..
2c8b0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2c8c0 20 6f 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20   orderby {order 
2c8d0 62 79 7d 20 7b 4f 52 44 45 52 20 42 59 7d 3c 2f  by} {ORDER BY}</
2c8e0 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4f 52 44  tcl>.<h3>The ORD
2c8f0 45 52 20 42 59 20 63 6c 61 75 73 65 3c 2f 68 33  ER BY clause</h3
2c900 3e 0a 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43  >..<p>If a SELEC
2c910 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  T statement that
2c920 20 72 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68   returns more th
2c930 61 6e 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20  an one row does 
2c940 6e 6f 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45  not have an.ORDE
2c950 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
2c960 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
2c970 74 68 65 20 72 6f 77 73 20 61 72 65 20 72 65 74  the rows are ret
2c980 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e  urned is undefin
2c990 65 64 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c  ed..Or, if a SEL
2c9a0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ECT statement do
2c9b0 65 73 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52  es have an ORDER
2c9c0 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
2c9d0 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70   the list of.exp
2c9e0 72 65 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65  ressions attache
2c9f0 64 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42  d to the ORDER B
2ca00 59 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  Y determine the 
2ca10 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
2ca20 6f 77 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64  ows.are returned
2ca30 20 74 6f 20 74 68 65 20 75 73 65 72 2e 0a 0a 3c   to the user...<
2ca40 70 3e 0a 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75  p>.^In a [compou
2ca50 6e 64 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65  nd SELECT] state
2ca60 6d 65 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 6c  ment, only the l
2ca70 61 73 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73  ast or right-mos
2ca80 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  t [simple SELECT
2ca90 5d 0a 6d 61 79 20 68 61 76 65 20 61 6e 20 4f 52  ].may have an OR
2caa0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 5e  DER BY clause. ^
2cab0 54 68 61 74 20 4f 52 44 45 52 20 42 59 20 63 6c  That ORDER BY cl
2cac0 61 75 73 65 20 77 69 6c 6c 20 61 70 70 6c 79 20  ause will apply 
2cad0 61 63 72 6f 73 73 20 61 6c 6c 20 65 6c 65 6d 65  across all eleme
2cae0 6e 74 73 20 6f 66 0a 74 68 65 20 63 6f 6d 70 6f  nts of.the compo
2caf0 75 6e 64 2e 20 5e 49 66 20 74 68 65 20 72 69 67  und. ^If the rig
2cb00 68 74 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 20  ht-most element 
2cb10 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  of a [compound S
2cb20 45 4c 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c  ELECT] is a [VAL
2cb30 55 45 53 5d 20 63 6c 61 75 73 65 2c 0a 74 68 65  UES] clause,.the
2cb40 6e 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c  n no ORDER BY cl
2cb50 61 75 73 65 20 69 73 20 61 6c 6c 6f 77 65 64 20  ause is allowed 
2cb60 6f 6e 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e  on that statemen
2cb70 74 2e 0a 0a 0a 3c 70 3e 5e 52 6f 77 73 20 61 72  t....<p>^Rows ar
2cb80 65 20 66 69 72 73 74 20 73 6f 72 74 65 64 20 62  e first sorted b
2cb90 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75  ased on the resu
2cba0 6c 74 73 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e  lts of.evaluatin
2cbb0 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  g the left-most 
2cbc0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
2cbd0 65 20 4f 52 44 45 52 20 42 59 20 6c 69 73 74 2c  e ORDER BY list,
2cbe0 20 74 68 65 6e 20 74 69 65 73 20 61 72 65 20 62   then ties are b
2cbf0 72 6f 6b 65 6e 0a 62 79 20 65 76 61 6c 75 61 74  roken.by evaluat
2cc00 69 6e 67 20 74 68 65 20 73 65 63 6f 6e 64 20 6c  ing the second l
2cc10 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73  eft-most express
2cc20 69 6f 6e 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54  ion and so on. T
2cc30 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
2cc40 68 0a 74 77 6f 20 72 6f 77 73 20 66 6f 72 20 77  h.two rows for w
2cc50 68 69 63 68 20 61 6c 6c 20 4f 52 44 45 52 20 42  hich all ORDER B
2cc60 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  Y expressions ev
2cc70 61 6c 75 61 74 65 20 74 6f 20 65 71 75 61 6c 20  aluate to equal 
2cc80 76 61 6c 75 65 73 20 61 72 65 0a 72 65 74 75 72  values are.retur
2cc90 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
2cca0 2e 20 5e 45 61 63 68 20 4f 52 44 45 52 20 42 59  . ^Each ORDER BY
2ccb0 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
2ccc0 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  be optionally fo
2ccd0 6c 6c 6f 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66  llowed.by one of
2cce0 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 41 53   the keywords AS
2ccf0 43 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65  C (smaller value
2cd00 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66  s are returned f
2cd10 69 72 73 74 29 20 6f 72 20 44 45 53 43 20 28 6c  irst) or DESC (l
2cd20 61 72 67 65 72 0a 76 61 6c 75 65 73 20 61 72 65  arger.values are
2cd30 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29   returned first)
2cd40 2e 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41 53  . ^If neither AS
2cd50 43 20 6f 72 20 44 45 53 43 20 61 72 65 20 73 70  C or DESC are sp
2cd60 65 63 69 66 69 65 64 2c 20 72 6f 77 73 0a 61 72  ecified, rows.ar
2cd70 65 20 73 6f 72 74 65 64 20 69 6e 20 61 73 63 65  e sorted in asce
2cd80 6e 64 69 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76  nding (smaller v
2cd90 61 6c 75 65 73 20 66 69 72 73 74 29 20 6f 72 64  alues first) ord
2cda0 65 72 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a  er by default...
2cdb0 3c 70 3e 45 61 63 68 20 4f 52 44 45 52 20 42 59  <p>Each ORDER BY
2cdc0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70   expression is p
2cdd0 72 6f 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c  rocessed as foll
2cde0 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ows:</p>..<ol>.<
2cdf0 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52  li><p>^If the OR
2ce00 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2ce10 6e 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  n is a constant 
2ce20 69 6e 74 65 67 65 72 20 4b 20 74 68 65 6e 20 74  integer K then t
2ce30 68 65 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he.expression is
2ce40 20 63 6f 6e 73 69 64 65 72 65 64 20 61 6e 20 61   considered an a
2ce50 6c 69 61 73 20 66 6f 72 20 74 68 65 20 4b 2d 74  lias for the K-t
2ce60 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
2ce70 72 65 73 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75  result set.(colu
2ce80 6d 6e 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64  mns are numbered
2ce90 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
2cea0 67 68 74 20 73 74 61 72 74 69 6e 67 20 77 69 74  ght starting wit
2ceb0 68 20 31 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49  h 1)...<li><p>^I
2cec0 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
2ced0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
2cee0 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20  identifier that 
2cef0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74  corresponds to.t
2cf00 68 65 20 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20  he alias of one 
2cf10 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f  of the output co
2cf20 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20  lumns, then the 
2cf30 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
2cf40 6e 73 69 64 65 72 65 64 0a 61 6e 20 61 6c 69 61  nsidered.an alia
2cf50 73 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  s for that colum
2cf60 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65  n...<li><p>^Othe
2cf70 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52  rwise, if the OR
2cf80 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2cf90 6e 20 69 73 20 61 6e 79 20 6f 74 68 65 72 20 65  n is any other e
2cfa0 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69  xpression, it .i
2cfb0 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  s evaluated and 
2cfc0 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c  the returned val
2cfd0 75 65 20 75 73 65 64 20 74 6f 20 6f 72 64 65 72  ue used to order
2cfe0 20 74 68 65 20 6f 75 74 70 75 74 20 72 6f 77 73   the output rows
2cff0 2e 20 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54  . ^If.the SELECT
2d000 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 20   statement is a 
2d010 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 74  simple SELECT, t
2d020 68 65 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20  hen an ORDER BY 
2d030 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a  may contain any.
2d040 61 72 62 69 74 72 61 72 79 20 65 78 70 72 65 73  arbitrary expres
2d050 73 69 6f 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c  sions. ^However,
2d060 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 20 69   if the SELECT i
2d070 73 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  s a compound SEL
2d080 45 43 54 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20  ECT, then.ORDER 
2d090 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  BY expressions t
2d0a0 68 61 74 20 61 72 65 20 6e 6f 74 20 61 6c 69 61  hat are not alia
2d0b0 73 65 73 20 74 6f 20 6f 75 74 70 75 74 20 63 6f  ses to output co
2d0c0 6c 75 6d 6e 73 20 6d 75 73 74 20 62 65 20 65 78  lumns must be ex
2d0d0 61 63 74 6c 79 0a 74 68 65 20 73 61 6d 65 20 61  actly.the same a
2d0e0 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
2d0f0 75 73 65 64 20 61 73 20 61 6e 20 6f 75 74 70 75  used as an outpu
2d100 74 20 63 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a  t column..</ol>.
2d110 0a 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72  .<p>^For the pur
2d120 70 6f 73 65 73 20 6f 66 20 73 6f 72 74 69 6e 67  poses of sorting
2d130 20 72 6f 77 73 2c 20 76 61 6c 75 65 73 20 61 72   rows, values ar
2d140 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 74 68  e compared in th
2d150 65 20 73 61 6d 65 20 77 61 79 0a 61 73 20 66 6f  e same way.as fo
2d160 72 20 5b 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78  r [comparison ex
2d170 70 72 65 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20  pressions]. The 
2d180 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
2d190 63 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  ce used to compa
2d1a0 72 65 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75  re.two text valu
2d1b0 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  es is determined
2d1c0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f   as follows:..<o
2d1d0 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
2d1e0 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
2d1f0 72 65 73 73 69 6f 6e 20 69 73 20 61 73 73 69 67  ression is assig
2d200 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ned a collation 
2d210 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 0a 20  sequence using. 
2d220 20 74 68 65 20 70 6f 73 74 66 69 78 20 5b 43 4f   the postfix [CO
2d230 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c  LLATE operator],
2d240 20 74 68 65 6e 20 74 68 65 20 73 70 65 63 69 66   then the specif
2d250 69 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ied collation se
2d260 71 75 65 6e 63 65 20 69 73 0a 20 20 75 73 65 64  quence is.  used
2d270 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65  ..  <li><p>^Othe
2d280 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52  rwise, if the OR
2d290 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2d2a0 6e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 74 6f  n is an alias to
2d2b0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a 20   an expression. 
2d2c0 20 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 61   that has been a
2d2d0 73 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74  ssigned a collat
2d2e0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69  ion sequence usi
2d2f0 6e 67 20 74 68 65 20 70 6f 73 74 66 69 78 20 0a  ng the postfix .
2d300 20 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61    [COLLATE opera
2d310 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 63  tor], then the c
2d320 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2d330 65 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68  e assigned to th
2d340 65 20 61 6c 69 61 73 65 64 0a 20 20 65 78 70 72  e aliased.  expr
2d350 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  ession is used..
2d360 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77    <li><p>^Otherw
2d370 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45  ise, if the ORDE
2d380 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
2d390 69 73 20 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61  is a column or a
2d3a0 6e 20 61 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20  n alias of.  an 
2d3b0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
2d3c0 69 73 20 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65  is a column, the
2d3d0 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f  n the default co
2d3e0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2d3f0 20 66 6f 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d   for.  the colum
2d400 6e 20 69 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c  n is used. .  <l
2d410 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
2d420 20 74 68 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f   the [BINARY] co
2d430 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2d440 20 69 73 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a   is used..</ol>.
2d450 0a 3c 70 3e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75  .<p>In a [compou
2d460 6e 64 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65  nd SELECT] state
2d470 6d 65 6e 74 2c 20 61 6c 6c 20 4f 52 44 45 52 20  ment, all ORDER 
2d480 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  BY expressions a
2d490 72 65 20 68 61 6e 64 6c 65 64 0a 61 73 20 61 6c  re handled.as al
2d4a0 69 61 73 65 73 20 66 6f 72 20 6f 6e 65 20 6f 66  iases for one of
2d4b0 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
2d4c0 6d 6e 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f  mns of the compo
2d4d0 75 6e 64 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44  und..^(If an ORD
2d4e0 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
2d4f0 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
2d500 65 72 20 61 6c 69 61 73 2c 20 74 68 65 6e 20 53  er alias, then S
2d510 51 4c 69 74 65 20 73 65 61 72 63 68 65 73 0a 74  QLite searches.t
2d520 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c  he left-most SEL
2d530 45 43 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  ECT in the compo
2d540 75 6e 64 20 66 6f 72 20 61 20 72 65 73 75 6c 74  und for a result
2d550 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74   column that mat
2d560 63 68 65 73 20 65 69 74 68 65 72 0a 74 68 65 20  ches either.the 
2d570 73 65 63 6f 6e 64 20 6f 72 20 74 68 69 72 64 20  second or third 
2d580 72 75 6c 65 73 20 61 62 6f 76 65 2e 20 49 66 20  rules above. If 
2d590 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
2d5a0 2c 20 74 68 65 20 73 65 61 72 63 68 20 73 74 6f  , the search sto
2d5b0 70 73 20 61 6e 64 0a 74 68 65 20 65 78 70 72 65  ps and.the expre
2d5c0 73 73 69 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64  ssion is handled
2d5d0 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
2d5e0 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
2d5f0 6d 6e 20 74 68 61 74 20 69 74 20 68 61 73 20 62  mn that it has b
2d600 65 65 6e 0a 6d 61 74 63 68 65 64 20 61 67 61 69  een.matched agai
2d610 6e 73 74 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  nst. Otherwise, 
2d620 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20  the next SELECT 
2d630 74 6f 20 74 68 65 20 72 69 67 68 74 20 69 73 20  to the right is 
2d640 74 72 69 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e  tried, and so on
2d650 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68  .)^.^If no match
2d660 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 63  ing expression c
2d670 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74  an be found in t
2d680 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
2d690 73 20 6f 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74  s of any.constit
2d6a0 75 65 6e 74 20 53 45 4c 45 43 54 2c 20 69 74 20  uent SELECT, it 
2d6b0 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61  is an error. ^Ea
2d6c0 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f  ch term of the O
2d6d0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
2d6e0 73 0a 70 72 6f 63 65 73 73 65 64 20 73 65 70 61  s.processed sepa
2d6f0 72 61 74 65 6c 79 20 61 6e 64 20 6d 61 79 20 62  rately and may b
2d700 65 20 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73  e matched agains
2d710 74 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  t result columns
2d720 20 66 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a   from different.
2d730 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2d740 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  s in the compoun
2d750 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  d.</p>..<tcl>hd_
2d760 66 72 61 67 6d 65 6e 74 20 6c 69 6d 69 74 6f 66  fragment limitof
2d770 66 73 65 74 20 7b 4c 49 4d 49 54 7d 20 7b 4f 46  fset {LIMIT} {OF
2d780 46 53 45 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  FSET}</tcl>.<h3>
2d790 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  The LIMIT clause
2d7a0 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c  </h3>..<p>^The L
2d7b0 49 4d 49 54 20 63 6c 61 75 73 65 20 69 73 20 75  IMIT clause is u
2d7c0 73 65 64 20 74 6f 20 70 6c 61 63 65 20 61 6e 20  sed to place an 
2d7d0 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74  upper bound on t
2d7e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
2d7f0 73 0a 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s.returned by th
2d800 65 20 65 6e 74 69 72 65 20 53 45 4c 45 43 54 20  e entire SELECT 
2d810 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e  statement...<p>^
2d820 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  In a [compound S
2d830 45 4c 45 43 54 5d 2c 20 6f 6e 6c 79 20 74 68 65  ELECT], only the
2d840 0a 6c 61 73 74 20 6f 72 20 72 69 67 68 74 2d 6d  .last or right-m
2d850 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45  ost [simple SELE
2d860 43 54 5d 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  CT] may contain 
2d870 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20  a LIMIT clause. 
2d880 20 0a 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e   .^In a [compoun
2d890 64 20 53 45 4c 45 43 54 5d 2c 20 0a 74 68 65 20  d SELECT], .the 
2d8a0 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 70 70  LIMIT clause app
2d8b0 6c 69 65 73 20 74 6f 20 74 68 65 20 65 6e 74 69  lies to the enti
2d8c0 72 65 20 63 6f 6d 70 6f 75 6e 64 2c 20 6e 6f 74  re compound, not
2d8d0 20 6a 75 73 74 20 74 68 65 20 66 69 6e 61 6c 20   just the final 
2d8e0 53 45 4c 45 43 54 2e 0a 5e 49 66 20 74 68 65 20  SELECT..^If the 
2d8f0 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70  right-most [simp
2d900 6c 65 20 53 45 4c 45 43 54 5d 20 69 73 20 61 20  le SELECT] is a 
2d910 5b 56 41 4c 55 45 53 20 63 6c 61 75 73 65 5d 20  [VALUES clause] 
2d920 74 68 65 6e 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  then no LIMIT cl
2d930 61 75 73 65 0a 69 73 20 61 6c 6c 6f 77 65 64 2e  ause.is allowed.
2d940 0a 0a 3c 70 3e 5e 41 6e 79 20 73 63 61 6c 61 72  ..<p>^Any scalar
2d950 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
2d960 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a  be used in the .
2d970 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f  LIMIT clause, so
2d980 20 6c 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c   long as it eval
2d990 75 61 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65  uates to an inte
2d9a0 67 65 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74  ger or a value t
2d9b0 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c  hat can be.lossl
2d9c0 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
2d9d0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e  to an integer. ^
2d9e0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
2d9f0 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  n evaluates to a
2da00 20 4e 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20   NULL .value or 
2da10 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20  any other value 
2da20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c  that cannot be l
2da30 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
2da40 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
2da50 72 2c 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72  r, an.error is r
2da60 65 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65  eturned. ^If the
2da70 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
2da80 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  n evaluates to a
2da90 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c   negative value,
2daa0 0a 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e  .then there is n
2dab0 6f 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  o upper bound on
2dac0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2dad0 6f 77 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f  ows returned. ^O
2dae0 74 68 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45  therwise, the.SE
2daf0 4c 45 43 54 20 72 65 74 75 72 6e 73 20 74 68 65  LECT returns the
2db00 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66   first N rows of
2db10 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
2db20 6f 6e 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73  only, where N is
2db30 20 74 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20   the value.that 
2db40 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
2db50 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2db60 6f 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53  o. ^Or, if the S
2db70 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2db80 77 6f 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73  would.return les
2db90 73 20 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69  s than N rows wi
2dba0 74 68 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c  thout a LIMIT cl
2dbb0 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65  ause, then the e
2dbc0 6e 74 69 72 65 20 72 65 73 75 6c 74 20 73 65 74  ntire result set
2dbd0 20 69 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a   is.returned. ..
2dbe0 3c 70 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69  <p>^The expressi
2dbf0 6f 6e 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  on attached to t
2dc00 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53  he optional OFFS
2dc10 45 54 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d  ET clause that m
2dc20 61 79 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49  ay follow a.LIMI
2dc30 54 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c  T clause must al
2dc40 73 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61  so evaluate to a
2dc50 6e 20 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20  n integer, or a 
2dc60 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
2dc70 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e.losslessly con
2dc80 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
2dc90 65 67 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70  eger. ^If an exp
2dca0 72 65 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f  ression has an O
2dcb0 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68  FFSET clause,.th
2dcc0 65 6e 20 74 68 65 20 66 69 72 73 74 20 4d 20 72  en the first M r
2dcd0 6f 77 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20  ows are omitted 
2dce0 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20  from the result 
2dcf0 73 65 74 20 72 65 74 75 72 6e 65 64 20 62 79 20  set returned by 
2dd00 74 68 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65  the SELECT.state
2dd10 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78  ment and the nex
2dd20 74 20 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74  t N rows are ret
2dd30 75 72 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61  urned, where M a
2dd40 6e 64 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c  nd N are the val
2dd50 75 65 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46  ues that.the OFF
2dd60 53 45 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c  SET and LIMIT cl
2dd70 61 75 73 65 73 20 65 76 61 6c 75 61 74 65 20 74  auses evaluate t
2dd80 6f 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  o, respectively.
2dd90 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c   ^Or, if the SEL
2dda0 45 43 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e  ECT.would return
2ddb0 20 6c 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72   less than M+N r
2ddc0 6f 77 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f  ows if it did no
2ddd0 74 20 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63  t have a LIMIT c
2dde0 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a  lause, then the.
2ddf0 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65  first M rows are
2de00 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65   skipped and the
2de10 20 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20   remaining rows 
2de20 28 69 66 20 61 6e 79 29 20 61 72 65 20 72 65 74  (if any) are ret
2de30 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f  urned. ^If the.O
2de40 46 46 53 45 54 20 63 6c 61 75 73 65 20 65 76 61  FFSET clause eva
2de50 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61  luates to a nega
2de60 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20  tive value, the 
2de70 72 65 73 75 6c 74 73 20 61 72 65 20 74 68 65 20  results are the 
2de80 73 61 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61  same as if it.ha
2de90 64 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a  d evaluated to z
2dea0 65 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61  ero...<p>^Instea
2deb0 64 20 6f 66 20 61 20 73 65 70 61 72 61 74 65 20  d of a separate 
2dec0 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74  OFFSET clause, t
2ded0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
2dee0 6d 61 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a  may specify two.
2def0 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
2df00 6e 73 20 73 65 70 61 72 61 74 65 64 20 62 79 20  ns separated by 
2df10 61 20 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69  a comma. ^In thi
2df20 73 20 63 61 73 65 2c 20 74 68 65 20 66 69 72 73  s case, the firs
2df30 74 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20  t expression.is 
2df40 75 73 65 64 20 61 73 20 74 68 65 20 4f 46 46 53  used as the OFFS
2df50 45 54 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  ET expression an
2df60 64 20 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20  d the second as 
2df70 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
2df80 73 69 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f  sion..This is co
2df90 75 6e 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c  unter-intuitive,
2dfa0 20 61 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74   as when using t
2dfb0 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
2dfc0 20 74 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74   the second of.t
2dfd0 68 65 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f  he two expressio
2dfe0 6e 73 20 69 73 20 74 68 65 20 4f 46 46 53 45 54  ns is the OFFSET
2dff0 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 20 74   and the first t
2e000 68 65 20 4c 49 4d 49 54 2e 20 0a 54 68 69 73 20  he LIMIT. .This 
2e010 72 65 76 65 72 73 61 6c 20 6f 66 20 74 68 65 20  reversal of the 
2e020 6f 66 66 73 65 74 20 61 6e 64 20 6c 69 6d 69 74  offset and limit
2e030 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a   is intentional.
2e040 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63  - it maximizes c
2e050 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
2e060 68 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61  h other SQL data
2e070 62 61 73 65 20 73 79 73 74 65 6d 73 2e 0a 48 6f  base systems..Ho
2e080 77 65 76 65 72 2c 20 74 6f 20 61 76 6f 69 64 20  wever, to avoid 
2e090 63 6f 6e 66 75 73 69 6f 6e 2c 20 70 72 6f 67 72  confusion, progr
2e0a0 61 6d 6d 65 72 73 20 61 72 65 20 73 74 72 6f 6e  ammers are stron
2e0b0 67 6c 79 20 65 6e 63 6f 75 72 61 67 65 64 20 74  gly encouraged t
2e0c0 6f 20 75 73 65 0a 74 68 65 20 66 6f 72 6d 20 6f  o use.the form o
2e0d0 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  f the LIMIT clau
2e0e0 73 65 20 74 68 61 74 20 75 73 65 73 20 74 68 65  se that uses the
2e0f0 20 22 4f 46 46 53 45 54 22 20 6b 65 79 77 6f 72   "OFFSET" keywor
2e100 64 20 61 6e 64 20 61 76 6f 69 64 0a 75 73 69 6e  d and avoid.usin
2e110 67 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  g a LIMIT clause
2e120 20 77 69 74 68 20 61 20 63 6f 6d 6d 61 2d 73 65   with a comma-se
2e130 70 61 72 61 74 65 64 20 6f 66 66 73 65 74 2e 0a  parated offset..
2e140 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2e150 74 20 76 61 6c 75 65 73 20 7b 56 41 4c 55 45 53  t values {VALUES
2e160 20 63 6c 61 75 73 65 7d 20 56 41 4c 55 45 53 3c   clause} VALUES<
2e170 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 56 41  /tcl>.<h3>The VA
2e180 4c 55 45 53 20 63 6c 61 75 73 65 3c 2f 68 33 3e  LUES clause</h3>
2e190 0a 0a 3c 70 3e 5e 28 54 68 65 20 70 68 72 61 73  ..<p>^(The phras
2e1a0 65 20 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70  e "VALUES(<i>exp
2e1b0 72 2d 6c 69 73 74 3c 2f 69 3e 29 22 20 6d 65 61  r-list</i>)" mea
2e1c0 6e 73 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ns the same thin
2e1d0 67 0a 61 73 20 22 53 45 4c 45 43 54 20 3c 69 3e  g.as "SELECT <i>
2e1e0 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 22 2e 29  expr-list</i>".)
2e1f0 5e 20 20 5e 28 54 68 65 20 70 68 72 61 73 65 0a  ^  ^(The phrase.
2e200 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d  "VALUES(<i>expr-
2e210 6c 69 73 74 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c  list-1</i>),...,
2e220 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c  (<i>expr-list-N<
2e230 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20  /i>)" means the 
2e240 73 61 6d 65 0a 74 68 69 6e 67 20 61 73 20 22 53  same.thing as "S
2e250 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69  ELECT <i>expr-li
2e260 73 74 2d 31 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41  st-1</i> UNION A
2e270 4c 4c 20 2e 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c  LL ... UNION ALL
2e280 0a 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d  .SELECT <i>expr-
2e290 6c 69 73 74 2d 4e 3c 2f 69 3e 22 2e 29 5e 20 20  list-N</i>".)^  
2e2a0 42 6f 74 68 20 66 6f 72 6d 73 20 61 72 65 20 74  Both forms are t
2e2b0 68 65 20 73 61 6d 65 2c 20 65 78 63 65 70 74 20  he same, except 
2e2c0 74 68 61 74 0a 74 68 65 20 6e 75 6d 62 65 72 20  that.the number 
2e2d0 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
2e2e0 65 6e 74 73 20 69 6e 20 61 20 63 6f 6d 70 6f 75  ents in a compou
2e2f0 6e 64 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79  nd is limited by
2e300 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43  .[SQLITE_LIMIT_C
2e310 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 5d 20  OMPOUND_SELECT] 
2e320 77 68 65 72 65 61 73 20 74 68 65 20 6e 75 6d 62  whereas the numb
2e330 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
2e340 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 68 61  VALUES clause ha
2e350 73 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c  s no arbitrary l
2e360 69 6d 69 74 2e 0a 0a 3c 70 3e 54 68 65 72 65 20  imit...<p>There 
2e370 61 72 65 20 73 6f 6d 65 20 72 65 73 74 72 69 63  are some restric
2e380 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 75 73 65  tions on the use
2e390 20 6f 66 20 61 20 56 41 4c 55 45 53 20 63 6c 61   of a VALUES cla
2e3a0 75 73 65 20 74 68 61 74 20 61 72 65 0a 6e 6f 74  use that are.not
2e3b0 20 73 68 6f 77 6e 20 6f 6e 20 74 68 65 20 73 79   shown on the sy
2e3c0 6e 74 61 78 20 64 69 61 67 72 61 6d 73 3a 0a 0a  ntax diagrams:..
2e3d0 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20  <ul>.<li><p>.^A 
2e3e0 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 63 61  VALUES clause ca
2e3f0 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  nnot be followed
2e400 20 62 79 20 5b 4f 52 44 45 52 20 42 59 5d 2e 0a   by [ORDER BY]..
2e410 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55  .<li><p>.^A VALU
2e420 45 53 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  ES clause cannot
2e430 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
2e440 5b 4c 49 4d 49 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a  [LIMIT]..</ul>..
2e450 0a 3c 68 33 3e 54 68 65 20 57 49 54 48 20 43 6c  .<h3>The WITH Cl
2e460 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 53  ause</h3>..<p>^S
2e470 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
2e480 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
2e490 6c 79 20 70 72 65 63 65 64 65 64 20 62 79 20 61  ly preceded by a
2e4a0 20 73 69 6e 67 6c 65 0a 5b 57 49 54 48 20 63 6c   single.[WITH cl
2e4b0 61 75 73 65 5d 20 74 68 61 74 20 64 65 66 69 6e  ause] that defin
2e4c0 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b  es one or more [
2e4d0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
2e4e0 72 65 73 73 69 6f 6e 73 5d 0a 66 6f 72 20 75 73  ressions].for us
2e4f0 65 20 77 69 74 68 69 6e 20 74 68 65 20 53 45 4c  e within the SEL
2e500 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ECT statement...
2e510 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
2e520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e560 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 55 50  #####.Section UP
2e570 44 41 54 45 20 75 70 64 61 74 65 20 7b 55 50 44  DATE update {UPD
2e580 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a 52  ATE *UPDATEs}..R
2e590 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
2e5a0 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
2e5b0 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e  t.</tcl>..<p>^An
2e5c0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2e5d0 74 20 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64  t is used to mod
2e5e0 69 66 79 20 61 20 73 75 62 73 65 74 20 6f 66 20  ify a subset of 
2e5f0 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65  the values store
2e600 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f  d in .zero or mo
2e610 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64  re rows of the d
2e620 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 64  atabase table id
2e630 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20  entified by the 
2e640 0a 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61  .<i>qualified-ta
2e650 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65  ble-name</i> spe
2e660 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
2e670 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
2e680 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20  tement...<p>^If 
2e690 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
2e6a0 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68 61  ment does not ha
2e6b0 76 65 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  ve a WHERE claus
2e6c0 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  e, all rows in t
2e6d0 68 65 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f 64  he.table are mod
2e6e0 69 66 69 65 64 20 62 79 20 74 68 65 20 55 50 44  ified by the UPD
2e6f0 41 54 45 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ATE. ^Otherwise,
2e700 20 74 68 65 20 55 50 44 41 54 45 20 61 66 66 65   the UPDATE affe
2e710 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72  cts only those.r
2e720 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
2e730 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
2e740 75 61 74 69 6e 67 20 74 68 65 20 57 48 45 52 45  uating the WHERE
2e750 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
2e760 6f 6e 20 61 73 20 61 20 0a 5b 62 6f 6f 6c 65 61  on as a .[boolea
2e770 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f  n expression|boo
2e780 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lean expression 
2e790 69 73 20 74 72 75 65 5d 2e 20 5e 49 74 20 69 73  is true]. ^It is
2e7a0 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 69 66   not an error if
2e7b0 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
2e7c0 65 20 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75  e does not evalu
2e7d0 61 74 65 20 74 6f 20 74 72 75 65 20 66 6f 72 20  ate to true for 
2e7e0 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74  any row in the t
2e7f0 61 62 6c 65 20 2d 20 74 68 69 73 20 6a 75 73 74  able - this just
2e800 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20  .means that the 
2e810 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
2e820 20 61 66 66 65 63 74 73 20 7a 65 72 6f 20 72 6f   affects zero ro
2e830 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69  ws...<p>The modi
2e840 66 69 63 61 74 69 6f 6e 73 20 6d 61 64 65 20 74  fications made t
2e850 6f 20 65 61 63 68 20 72 6f 77 20 61 66 66 65 63  o each row affec
2e860 74 65 64 20 62 79 20 61 6e 20 55 50 44 41 54 45  ted by an UPDATE
2e870 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65 0a 64   statement are.d
2e880 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
2e890 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d   list of assignm
2e8a0 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  ents following t
2e8b0 68 65 20 53 45 54 20 6b 65 79 77 6f 72 64 2e 20  he SET keyword. 
2e8c0 45 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20  Each.assignment 
2e8d0 73 70 65 63 69 66 69 65 73 20 61 20 63 6f 6c 75  specifies a colu
2e8e0 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c  mn name to the l
2e8f0 65 66 74 20 6f 66 20 74 68 65 20 65 71 75 61 6c  eft of the equal
2e900 73 20 73 69 67 6e 20 61 6e 64 20 61 0a 73 63 61  s sign and a.sca
2e910 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74  lar expression t
2e920 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e 46 6f  o the right. ^Fo
2e930 72 20 65 61 63 68 20 61 66 66 65 63 74 65 64 20  r each affected 
2e940 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63  row, the named c
2e950 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74  olumns.are set t
2e960 6f 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75  o the values fou
2e970 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67  nd by evaluating
2e980 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2e990 6e 67 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65  ng scalar .expre
2e9a0 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69  ssions. ^If a si
2e9b0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  ngle column-name
2e9c0 20 61 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68   appears more th
2e9d0 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c  an once in the l
2e9e0 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e  ist of.assignmen
2e9f0 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61  t expressions, a
2ea00 6c 6c 20 62 75 74 20 74 68 65 20 72 69 67 68 74  ll but the right
2ea10 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20  most occurrence 
2ea20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c  is ignored. ^Col
2ea30 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74  umns.that do not
2ea40 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c   appear in the l
2ea50 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e  ist of assignmen
2ea60 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f  ts are left unmo
2ea70 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61  dified. ^The sca
2ea80 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  lar.expressions 
2ea90 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c  may refer to col
2eaa0 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20  umns of the row 
2eab0 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e  being updated. ^
2eac0 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c  In this case all
2ead0 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69  .scalar expressi
2eae0 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ons are evaluate
2eaf0 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73  d before any ass
2eb00 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64  ignments are mad
2eb10 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69  e...<p>^The opti
2eb20 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  onal conflict-cl
2eb30 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  ause allows the 
2eb40 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65  user to nominate
2eb50 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e 73   a specific.cons
2eb60 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
2eb70 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
2eb80 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69  ithm to use duri
2eb90 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44 41  ng this one UPDA
2eba0 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65  TE command..Refe
2ebb0 72 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f 6e  r to the section
2ebc0 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f   entitled [ON CO
2ebd0 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
2ebe0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
2ebf0 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63  on...<h3>Restric
2ec00 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20  tions on UPDATE 
2ec10 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69  Statements Withi
2ec20 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  n CREATE TRIGGER
2ec30 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h3>..<p>The fo
2ec40 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e  llowing addition
2ec50 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72 69  al syntax restri
2ec60 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20  ctions apply to 
2ec70 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
2ec80 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74  s that.occur wit
2ec90 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
2eca0 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
2ecb0 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a  R] statement.  .
2ecc0 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  .<ul>.  <li><p>^
2ecd0 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d  The <i>table-nam
2ece0 65 3c 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20  e</i> specified 
2ecf0 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 55 50  as part of an UP
2ed00 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 77  DATE statement w
2ed10 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20 74 72  ithin.      a tr
2ed20 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20  igger body must 
2ed30 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20  be unqualified. 
2ed40 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  ^(In other words
2ed50 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69 3e 64  , the.      <i>d
2ed60 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
2ed70 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20  <b>.</b> prefix 
2ed80 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  on the table nam
2ed90 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
2eda0 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c  is.      not all
2edb0 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69 67  owed within trig
2edc0 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20  gers.)^ ^Unless 
2edd0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69  the table to whi
2ede0 63 68 20 74 68 65 20 74 72 69 67 67 65 72 0a 20  ch the trigger. 
2edf0 20 20 20 20 20 69 73 20 61 74 74 61 63 68 65 64       is attached
2ee00 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20   is in the TEMP 
2ee10 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 61  database, the ta
2ee20 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65  ble being update
2ee30 64 20 62 79 20 74 68 65 0a 20 20 20 20 20 20 74  d by the.      t
2ee40 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d  rigger program m
2ee50 75 73 74 20 72 65 73 69 64 65 20 69 6e 20 74 68  ust reside in th
2ee60 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
2ee70 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74  as it. ^If the t
2ee80 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68  able.      to wh
2ee90 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
2eea0 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69  is attached is i
2eeb0 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  n the TEMP datab
2eec0 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ase, then the.  
2eed0 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20      unqualified 
2eee0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
2eef0 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20  e being updated 
2ef00 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74  is resolved in t
2ef10 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20  he same way.    
2ef20 20 20 61 73 20 69 74 20 69 73 20 66 6f 72 20 61    as it is for a
2ef30 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
2ef40 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
2ef50 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
2ef60 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20  P database,.    
2ef70 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20    then the main 
2ef80 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61  database, then a
2ef90 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61 73  ny other databas
2efa0 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  es in the order 
2efb0 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 20 20  they were.      
2efc0 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c  attached)...  <l
2efd0 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
2efe0 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
2eff0 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
2f000 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
2f010 55 50 44 41 54 45 0a 20 20 20 20 20 20 73 74 61  UPDATE.      sta
2f020 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
2f030 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20  riggers.</p>..  
2f040 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49  <li><p>^The LIMI
2f050 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63  T and ORDER BY c
2f060 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44 41 54  lauses for UPDAT
2f070 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  E are unsupporte
2f080 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74  d within.      t
2f090 72 69 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c  riggers, regardl
2f0a0 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
2f0b0 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75  lation options u
2f0c0 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c  sed to build SQL
2f0d0 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e  ite..</ul>..<h3>
2f0e0 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61  Optional LIMIT a
2f0f0 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75  nd ORDER BY Clau
2f100 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49  ses</h3>..<p>^(I
2f110 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c  f SQLite is buil
2f120 74 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  t with the [SQLI
2f130 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
2f140 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63  _DELETE_LIMIT].c
2f150 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
2f160 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  on then the synt
2f170 61 78 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  ax of the UPDATE
2f180 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
2f190 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69  tended.with opti
2f1a0 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e  onal ORDER BY an
2f1b0 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29  d LIMIT clauses)
2f1c0 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  ^ as follows:</p
2f1d0 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
2f1e0 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
2f1f0 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a  t-limited</tcl>.
2f200 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54  .<p>^If an UPDAT
2f210 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
2f220 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
2f230 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
2f240 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a  er of rows that.
2f250 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20  will be updated 
2f260 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c  is found by eval
2f270 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d  uating the accom
2f280 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69  panying expressi
2f290 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69  on and casting.i
2f2a0 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
2f2b0 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69  value. ^A negati
2f2c0 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65  ve value is inte
2f2d0 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c  rpreted as "no l
2f2e0 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74  imit"...<p>^If t
2f2f0 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
2f300 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
2f310 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
2f320 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64  lue <i>N</i> and
2f330 20 74 68 65 0a 55 50 44 41 54 45 20 73 74 61 74   the.UPDATE stat
2f340 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44  ement has an ORD
2f350 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
2f360 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
2f370 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65   would be update
2f380 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65  d in.the absence
2f390 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c   of the LIMIT cl
2f3a0 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64 20  ause are sorted 
2f3b0 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
2f3c0 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 74 68   ORDER BY and th
2f3d0 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e  e.first <i>N</i>
2f3e0 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74   updated. ^(If t
2f3f0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
2f400 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20  ent also has an 
2f410 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74  OFFSET clause,.t
2f420 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61  hen it is simila
2f430 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e  rly evaluated an
2f440 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74  d cast to an int
2f450 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74  eger value. If t
2f460 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73  he OFFSET.expres
2f470 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2f480 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  o a non-negative
2f490 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c   value <i>M</i>,
2f4a0 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
2f4b0 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72  <i>M</i>.rows ar
2f4c0 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68  e skipped and th
2f4d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e  e following <i>N
2f4e0 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65  </i> rows update
2f4f0 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70  d instead.)^..<p
2f500 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45 20  >^If the UPDATE 
2f510 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f  statement has no
2f520 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2f530 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
2f540 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70  that.would be up
2f550 64 61 74 65 64 20 69 6e 20 74 68 65 20 61 62 73  dated in the abs
2f560 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49  ence of the LIMI
2f570 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73 73  T clause are ass
2f580 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62  embled in an.arb
2f590 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65 66  itrary order bef
2f5a0 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65  ore applying the
2f5b0 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
2f5c0 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74  T clauses to det
2f5d0 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72  ermine .which ar
2f5e0 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74  e actually updat
2f5f0 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
2f600 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
2f610 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
2f620 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c  ment is used onl
2f630 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  y to determine w
2f640 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77  hich.rows fall w
2f650 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e  ithin the LIMIT.
2f660 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   The order in wh
2f670 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64  ich rows are mod
2f680 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72 61  ified is arbitra
2f690 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e  ry.and is not in
2f6a0 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65 20  fluenced by the 
2f6b0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
2f6c0 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  )^..<tcl>.######
2f6d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f6e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f710 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
2f720 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56   VACUUM vacuum V
2f730 41 43 55 55 4d 0a 0a 52 65 63 75 72 73 69 76 65  ACUUM..Recursive
2f740 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61  BubbleDiagram va
2f750 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  cuum-stmt.</tcl>
2f760 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55  ..<p>.  The VACU
2f770 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69  UM command rebui
2f780 6c 64 73 20 74 68 65 20 65 6e 74 69 72 65 20 64  lds the entire d
2f790 61 74 61 62 61 73 65 2e 20 54 68 65 72 65 20 61  atabase. There a
2f7a0 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65  re several .  re
2f7b0 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61  asons an applica
2f7c0 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68  tion might do th
2f7d0 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  is:..<ul>.  <li>
2f7e0 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c   <p> ^Unless SQL
2f7f0 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69  ite is running i
2f800 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46  n "auto_vacuum=F
2f810 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20  ULL" mode, when 
2f820 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f  a large.     amo
2f830 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64  unt of data is d
2f840 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
2f850 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74  database file it
2f860 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65   leaves behind e
2f870 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c  mpty.     space,
2f880 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62   or "free" datab
2f890 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20  ase pages. This 
2f8a0 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
2f8b0 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20  se file might.  
2f8c0 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61     be larger tha
2f8d0 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73  n strictly neces
2f8e0 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  sary. ^Running V
2f8f0 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64  ACUUM to rebuild
2f900 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62   the .     datab
2f910 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69  ase reclaims thi
2f920 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75  s space and redu
2f930 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ces the size of 
2f940 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2f950 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  e...  <li> <p> ^
2f960 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73  Frequent inserts
2f970 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64  , updates, and d
2f980 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65  eletes can cause
2f990 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f9a0 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d  le.     to becom
2f9b0 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77  e fragmented - w
2f9c0 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20  here data for a 
2f9d0 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
2f9e0 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72  index is scatter
2f9f0 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20  ed .     around 
2fa00 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2fa10 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  e. ^Running VACU
2fa20 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  UM ensures that 
2fa30 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20  each table and. 
2fa40 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72      index is lar
2fa50 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74  gely stored cont
2fa60 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20  iguously within 
2fa70 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2fa80 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20  e. ^In some.    
2fa90 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d   cases, VACUUM m
2faa0 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74  ay also reduce t
2fab0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72  he number of par
2fac0 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
2fad0 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20  ges in.     the 
2fae0 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69  database, reduci
2faf0 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ng the size of t
2fb00 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2fb10 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69   further...  <li
2fb20 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c  > <p> ^Normally,
2fb30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70   the database [p
2fb40 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68  age_size] and wh
2fb50 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
2fb60 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73   database.     s
2fb70 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61  upports [auto_va
2fb80 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f  cuum] must be co
2fb90 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20  nfigured before 
2fba0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2fbb0 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c  e is.     actual
2fbc0 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77  ly created. ^How
2fbd0 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69  ever, when not i
2fbe0 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
2fbf0 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20  og] mode, the . 
2fc00 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20      [page_size] 
2fc10 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63  and/or [auto_vac
2fc20 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20  uum] properties 
2fc30 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  of an existing d
2fc40 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20  atabase may be. 
2fc50 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75      changed by u
2fc60 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73  sing the [page_s
2fc70 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f  ize pragma|page_
2fc80 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20  size]  and/or . 
2fc90 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d      [auto_vacuum
2fca0 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63  |pragma auto_vac
2fcb0 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64  uum] pragmas and
2fcc0 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c   then immediatel
2fcd0 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20  y VACUUMing.    
2fce0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e   the database. ^
2fcf0 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61  When in [write-a
2fd00 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20  head log] mode, 
2fd10 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76  only the [auto_v
2fd20 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70  acuum].     supp
2fd30 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e  ort property can
2fd40 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
2fd50 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a  g VACUUM..</ul>.
2fd60 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f 6e 6c  .<p>^(VACUUM onl
2fd70 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d  y works on the m
2fd80 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 74  ain database. It
2fd90 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
2fda0 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a 61 74   to VACUUM an.at
2fdb0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2fdc0 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  file.)^..<p>^The
2fdd0 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
2fde0 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69 6e 67  works by copying
2fdf0 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
2fe00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
2fe10 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 64  to.a temporary d
2fe20 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
2fe30 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e   then overwritin
2fe40 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  g the original w
2fe50 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65 6e 74  ith the .content
2fe60 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  s of the tempora
2fe70 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e 20 6f  ry file. ^When o
2fe80 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f  verwriting the o
2fe90 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62  riginal, a rollb
2fea0 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b  ack.journal or [
2feb0 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
2fec0 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75 73 65   WAL file is use
2fed0 64 20 6a 75 73 74 20 61 73 20 69 74 20 77 6f 75  d just as it wou
2fee0 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a 6f 74  ld be for any.ot
2fef0 68 65 72 20 64 61 74 61 62 61 73 65 20 74 72 61  her database tra
2ff00 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69 73 20  nsaction. ^This 
2ff10 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20  means that when 
2ff20 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61 74 61  VACUUMing a data
2ff30 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68 20 61  base, .as much a
2ff40 73 20 74 77 69 63 65 20 74 68 65 20 73 69 7a 65  s twice the size
2ff50 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
2ff60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2ff70 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 66 72  s required in fr
2ff80 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e 0a 0a  ee.disk space...
2ff90 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
2ffa0 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67  ommand may chang
2ffb0 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20 52  e the [ROWID | R
2ffc0 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69 65  OWIDs] of entrie
2ffd0 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73 20  s in any.tables 
2ffe0 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76 65  that do not have
2fff0 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e   an explicit [IN
30000 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
30010 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  Y]..</p>..<p>^A 
30020 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69 6c  VACUUM will fail
30030 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
30040 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
30050 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
30060 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61 63  e one or.more ac
30070 74 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d 65  tive SQL stateme
30080 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73 20 72  nts when it is r
30090 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20  un...<p>^(As of 
300a0 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
300b0 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  .1, an alternati
300c0 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20  ve to using the 
300d0 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74  VACUUM command t
300e0 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65 20  o.reclaim space 
300f0 61 66 74 65 72 20 64 61 74 61 20 68 61 73 20 62  after data has b
30100 65 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20 61  een deleted is a
30110 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c  uto-vacuum mode,
30120 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a 74   enabled using.t
30130 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  he [auto_vacuum]
30140 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e   pragma.)^ ^When
30150 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69   [auto_vacuum] i
30160 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
30170 64 61 74 61 62 61 73 65 0a 66 72 65 65 20 70 61  database.free pa
30180 67 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c 61  ges may be recla
30190 69 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65 74  imed after delet
301a0 69 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69 6e  ing data, causin
301b0 67 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 68  g the file to sh
301c0 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65  rink,.without re
301d0 62 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e 74  building the ent
301e0 69 72 65 20 64 61 74 61 62 61 73 65 20 75 73 69  ire database usi
301f0 6e 67 20 56 41 43 55 55 4d 2e 20 20 48 6f 77 65  ng VACUUM.  Howe
30200 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f  ver, using.[auto
30210 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61  _vacuum] can lea
30220 64 20 74 6f 20 65 78 74 72 61 20 64 61 74 61 62  d to extra datab
30230 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e  ase file fragmen
30240 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75  tation.  And [au
30250 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20  to_vacuum].does 
30260 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74  not compact part
30270 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67  ially filled pag
30280 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  es of the databa
30290 73 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65  se as VACUUM doe
302a0 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  s...</p>...<tcl>
302b0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
302c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
302d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
302e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
302f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
30300 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44  Section {INDEXED
30310 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b   BY} indexedby {
30320 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f  {INDEXED BY} {NO
30330 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74  T INDEXED}}..</t
30340 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45  cl>.<p>^The INDE
30350 58 45 44 20 42 59 20 70 68 72 61 73 65 20 66 6f  XED BY phrase fo
30360 72 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74 65  rces the [SQLite
30370 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20   query planner] 
30380 74 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63 75  to use a.particu
30390 6c 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78 20  lar named index 
303a0 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b  on a [DELETE], [
303b0 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44  SELECT], or [UPD
303c0 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ATE] statement..
303d0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  The INDEXED BY p
303e0 68 72 61 73 65 20 69 73 20 61 6e 20 53 51 4c 69  hrase is an SQLi
303f0 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 6e 64  te extension and
30400 0a 69 73 20 6e 6f 74 20 70 6f 72 74 61 62 6c 65  .is not portable
30410 20 74 6f 20 6f 74 68 65 72 20 53 51 4c 20 64 61   to other SQL da
30420 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 3c  tabase engines.<
30430 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72  /p>..<tcl>.Recur
30440 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
30450 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  m qualified-tabl
30460 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-name.</tcl>..<
30470 70 3e 5e 54 68 65 20 22 49 4e 44 45 58 45 44 20  p>^The "INDEXED 
30480 42 59 20 69 6e 64 65 78 2d 6e 61 6d 65 22 20 70  BY index-name" p
30490 68 72 61 73 65 20 73 70 65 63 69 66 69 65 73 20  hrase specifies 
304a0 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 69  that the named i
304b0 6e 64 65 78 0a 6d 75 73 74 20 62 65 20 75 73 65  ndex.must be use
304c0 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f  d in order to lo
304d0 6f 6b 20 75 70 20 76 61 6c 75 65 73 20 6f 6e 20  ok up values on 
304e0 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61  the preceding ta
304f0 62 6c 65 2e 0a 5e 49 66 20 69 6e 64 65 78 2d 6e  ble..^If index-n
30500 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ame does not exi
30510 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20  st or cannot be 
30520 75 73 65 64 20 66 6f 72 20 74 68 65 20 71 75 65  used for the que
30530 72 79 2c 20 74 68 65 6e 0a 74 68 65 20 70 72 65  ry, then.the pre
30540 70 61 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  paration of the 
30550 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61  SQL statement fa
30560 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20  ils..^(The "NOT 
30570 49 4e 44 45 58 45 44 22 20 63 6c 61 75 73 65 20  INDEXED" clause 
30580 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20 6e  specifies that n
30590 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c 20 62 65  o index shall be
305a0 20 75 73 65 64 20 77 68 65 6e 0a 61 63 63 65 73   used when.acces
305b0 73 69 6e 67 20 74 68 65 20 70 72 65 63 65 64 69  sing the precedi
305c0 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64  ng table, includ
305d0 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69  ing implied indi
305e0 63 65 73 20 63 72 65 61 74 65 20 62 79 0a 55 4e  ces create by.UN
305f0 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59  IQUE and PRIMARY
30600 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
30610 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20  .  However, the 
30620 5b 72 6f 77 69 64 5d 0a 63 61 6e 20 73 74 69 6c  [rowid].can stil
30630 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f  l be used to loo
30640 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65 76 65  k up entries eve
30650 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45  n when "NOT INDE
30660 58 45 44 22 20 69 73 20 73 70 65 63 69 66 69 65  XED" is specifie
30670 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d  d.)^</p>..<p>Som
30680 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  e SQL database e
30690 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e  ngines provide n
306a0 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e  on-standard "hin
306b0 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68  t" mechanisms wh
306c0 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20  ich.can be used 
306d0 74 6f 20 67 69 76 65 20 74 68 65 20 71 75 65 72  to give the quer
306e0 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65  y optimizer clue
306f0 73 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64  s about what ind
30700 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75  ices it should.u
30710 73 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75  se for a particu
30720 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  lar statement.  
30730 54 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61  The INDEX BY cla
30740 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73  use of SQLite is
30750 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61   .<em>not</em> a
30760 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69   hinting mechani
30770 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64  sm and it should
30780 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20   not be used as 
30790 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58  such..^The INDEX
307a0 45 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65  ED BY clause doe
307b0 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f  s not give the o
307c0 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61  ptimizer hints a
307d0 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65 78  bout which index
307e0 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65  .to use; it give
307f0 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  s the optimizer 
30800 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66  a requirement of
30810 20 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20   which index to 
30820 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65  use..^If the que
30830 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20  ry optimizer is 
30840 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68  unable to use th
30850 65 20 69 6e 64 65 78 20 73 70 65 63 69 66 69 65  e index specifie
30860 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42  d by the.INDEX B
30870 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
30880 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61  he query will fa
30890 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
308a0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  .</p>..<p>The IN
308b0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
308c0 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  is <em>not</em> 
308d0 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
308e0 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70   in tuning.the p
308f0 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20  erformance of a 
30900 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65  query.  The inte
30910 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45  nt of the INDEXE
30920 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74  D BY clause is.t
30930 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69  o raise a run-ti
30940 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20 73 63  me error if a sc
30950 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63  hema change, suc
30960 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72  h as dropping or
30970 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64  .creating an ind
30980 65 78 2c 20 63 61 75 73 65 73 20 74 68 65 20 71  ex, causes the q
30990 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20  uery plan for a 
309a0 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71  time-sensitive q
309b0 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20  uery.to change. 
309c0 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   The INDEXED BY 
309d0 63 6c 61 75 73 65 20 69 73 20 64 65 73 69 67 6e  clause is design
309e0 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63  ed to help detec
309f0 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75  t.undesirable qu
30a00 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73  ery plan changes
30a10 20 64 75 72 69 6e 67 20 72 65 67 72 65 73 73 69   during regressi
30a20 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65 76 65  on testing..Deve
30a30 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e  lopers are admon
30a40 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c  ished to omit al
30a50 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44  l use of INDEXED
30a60 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69   BY during.appli
30a70 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69  cation design, i
30a80 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
30a90 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69  esting, and tuni
30aa0 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20  ng.  If.INDEXED 
30ab0 42 59 20 69 73 20 74 6f 20 62 65 20 75 73 65 64  BY is to be used
30ac0 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75   at all, it shou
30ad0 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64 20 61  ld be inserted a
30ae0 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f  t the very.end o
30af0 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e  f the developmen
30b00 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22  t process when "
30b10 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20  locking down" a 
30b20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33  design.</p>..<h3
30b30 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a  >See Also:</h3>.
30b40 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65  .<ol>.<li><p>The
30b50 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20   [query planner 
30b60 63 68 65 63 6b 6c 69 73 74 5d 20 64 65 73 63 72  checklist] descr
30b70 69 62 65 73 20 73 74 65 70 73 20 74 68 61 74 20  ibes steps that 
30b80 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64 65 76 65  application.deve
30b90 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 66 6f  lopers should fo
30ba0 6c 6c 6f 77 69 6e 67 20 74 6f 20 68 65 6c 70 20  llowing to help 
30bb0 72 65 73 6f 6c 76 65 20 71 75 65 72 79 20 70 6c  resolve query pl
30bc0 61 6e 6e 65 72 20 70 72 6f 62 6c 65 6d 73 2e 0a  anner problems..
30bd0 4e 6f 74 69 63 65 20 74 68 65 20 74 68 61 74 20  Notice the that 
30be0 74 68 65 20 75 73 65 20 6f 66 20 49 4e 44 45 58  the use of INDEX
30bf0 45 44 20 42 59 20 69 73 20 61 20 6c 61 73 74 20  ED BY is a last 
30c00 72 65 73 6f 72 74 2c 20 74 6f 20 62 65 20 75 73  resort, to be us
30c10 65 64 20 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c 6c  ed only.when all
30c20 20 6f 74 68 65 72 20 6d 65 61 73 75 72 65 73 20   other measures 
30c30 66 61 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c  fail.</p>..<li><
30c40 70 3e 5b 75 70 6c 75 73 63 6f 6e 74 72 6f 6c 7c  p>[upluscontrol|
30c50 54 68 65 20 75 6e 61 72 79 20 22 2b 22 20 6f 70  The unary "+" op
30c60 65 72 61 74 6f 72 5d 0a 63 61 6e 20 62 65 20 75  erator].can be u
30c70 73 65 64 20 74 6f 20 64 69 73 71 75 61 6c 69 66  sed to disqualif
30c80 79 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 57  y terms in the W
30c90 48 45 52 45 20 63 6c 61 75 73 65 20 66 72 6f 6d  HERE clause from
30ca0 20 75 73 65 20 62 79 20 69 6e 64 69 63 65 73 2e   use by indices.
30cb0 0a 43 61 72 65 66 75 6c 20 75 73 65 20 6f 66 20  .Careful use of 
30cc0 75 6e 61 72 79 20 2b 20 63 61 6e 20 73 6f 6d 65  unary + can some
30cd0 74 69 6d 65 73 20 68 65 6c 70 20 70 72 65 76 65  times help preve
30ce0 6e 74 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  nt the query pla
30cf0 6e 6e 65 72 20 66 72 6f 6d 0a 63 68 6f 6f 73 69  nner from.choosi
30d00 6e 67 20 61 20 70 6f 6f 72 20 69 6e 64 65 78 20  ng a poor index 
30d10 77 69 74 68 6f 75 74 20 72 65 73 74 72 69 63 74  without restrict
30d20 69 6e 67 20 69 74 20 74 6f 20 75 73 69 6e 67 20  ing it to using 
30d30 6f 6e 65 20 73 70 65 63 69 66 69 63 20 69 6e 64  one specific ind
30d40 65 78 2e 0a 43 61 72 65 66 75 6c 20 70 6c 61 63  ex..Careful plac
30d50 65 6d 65 6e 74 20 6f 66 20 75 6e 61 72 79 20 2b  ement of unary +
30d60 20 6f 70 65 72 61 74 6f 72 73 20 69 73 20 61 20   operators is a 
30d70 62 65 74 74 65 72 20 6d 65 74 68 6f 64 20 66 6f  better method fo
30d80 72 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a 77  r controlling .w
30d90 68 69 63 68 20 69 6e 64 69 63 65 73 20 61 72 65  hich indices are
30da0 20 75 73 65 64 20 62 79 20 61 20 71 75 65 72 79   used by a query
30db0 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68  .</p>..<li><p>Th
30dc0 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  e [sqlite3_stmt_
30dd0 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20  status()] C/C++ 
30de0 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65 74 68  interface togeth
30df0 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c  er with the.[SQL
30e00 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46  ITE_STMTSTATUS_F
30e10 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e  ULLSCAN_STEP] an
30e20 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  d [SQLITE_STMTST
30e30 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72 62 73  ATUS_SORT] verbs
30e40 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
30e50 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d 74 69  detect at run-ti
30e60 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73  me when an SQL s
30e70 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a  tatement is not.
30e80 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69 76 65  making effective
30e90 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65 73 2e   use of indices.
30ea0 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61 74 69    Many applicati
30eb0 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72 20 74  ons may prefer t
30ec0 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c 69 74  o.use the [sqlit
30ed0 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29  e3_stmt_status()
30ee0 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 64  ] interface to d
30ef0 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69 73 75  etect index misu
30f00 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e 20 74  se.rather than t
30f10 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
30f20 72 61 73 65 20 64 65 73 63 72 69 62 65 64 20 68  rase described h
30f30 65 72 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a  ere.</p>.</ol>..
30f40 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
30f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f90 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f 66 20  ###.# A list of 
30fa0 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73 74  keywords.  A ast
30fb0 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66 74  erisk occurs aft
30fc0 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20 69  er the keyword i
30fd0 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68 65  f it is on.# the
30fe0 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a   fallback list..
30ff0 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69  #.set keyword_li
31000 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41  st [lsort {.   A
31010 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20  BORT.   ACTION. 
31020 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20    ADD.   AFTER. 
31030 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20    ALL.   ALTER. 
31040 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44    ANALYZE.   AND
31050 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20  .   AS.   ASC.  
31060 20 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49   ATTACH.   AUTOI
31070 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f  NCREMENT.   BEFO
31080 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42  RE.   BEGIN.   B
31090 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20  ETWEEN.   BY.   
310a0 43 41 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a  CASCADE.   CASE.
310b0 20 20 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b     CAST.   CHECK
310c0 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43  .   COLLATE.   C
310d0 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a  OLUMN.   COMMIT.
310e0 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43     CONFLICT.   C
310f0 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45  ONSTRAINT.   CRE
31100 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20  ATE.   CROSS.   
31110 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20  CURRENT_DATE.   
31120 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20  CURRENT_TIME.   
31130 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
31140 50 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20 20  P.   DATABASE.  
31150 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45   DEFAULT.   DEFE
31160 52 52 45 44 0a 20 20 20 44 45 46 45 52 52 41 42  RRED.   DEFERRAB
31170 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20  LE.   DELETE.   
31180 44 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20  DESC.   DETACH. 
31190 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52    DISTINCT.   DR
311a0 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43  OP.   END.   EAC
311b0 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43  H.   ELSE.   ESC
311c0 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20  APE.   EXCEPT.  
311d0 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58   EXCLUSIVE.   EX
311e0 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a  ISTS.   EXPLAIN.
311f0 20 20 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20     FAIL.   FOR. 
31200 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f    FOREIGN.   FRO
31210 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f  M.   FULL.   GLO
31220 42 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41  B.   GROUP.   HA
31230 56 49 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47  VING.   IF.   IG
31240 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54  NORE.   IMMEDIAT
31250 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58  E.   IN.   INDEX
31260 0a 20 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49  .   INDEXED.   I
31270 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45  NITIALLY.   INNE
31280 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49  R.   INSERT.   I
31290 4e 53 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53  NSTEAD.   INTERS
312a0 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49  ECT.   INTO.   I
312b0 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a  S.   ISNULL.   J
312c0 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45  OIN.   KEY.   LE
312d0 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49  FT.   LIKE.   LI
312e0 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20  MIT.   MATCH.   
312f0 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20  NATURAL.   NO.  
31300 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a   NOT.   NOTNULL.
31310 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20     NULL.   OF.  
31320 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20   OFFSET.   ON.  
31330 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20   OR.   ORDER.   
31340 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20  OUTER.   PLAN.  
31350 20 50 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41   PRAGMA.   PRIMA
31360 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52  RY.   QUERY.   R
31370 41 49 53 45 0a 20 20 20 52 45 43 55 52 53 49 56  AISE.   RECURSIV
31380 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a  E.   REFERENCES.
31390 20 20 20 52 45 47 45 58 50 0a 20 20 20 52 45 49     REGEXP.   REI
313a0 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53 45 0a  NDEX.   RELEASE.
313b0 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52 45 50     RENAME.   REP
313c0 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49 43 54  LACE.   RESTRICT
313d0 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52 4f 4c  .   RIGHT.   ROL
313e0 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20  LBACK.   ROW.   
313f0 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53 45 4c  SAVEPOINT.   SEL
31400 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54 41  ECT.   SET.   TA
31410 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20 20 54  BLE.   TEMP.   T
31420 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48 45 4e  EMPORARY.   THEN
31430 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e 53 41  .   TO.   TRANSA
31440 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47 45 52  CTION.   TRIGGER
31450 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49  .   UNION.   UNI
31460 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20  QUE.   UPDATE.  
31470 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d   USING.   VACUUM
31480 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49  .   VALUES.   VI
31490 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a 20 20  EW.   VIRTUAL.  
314a0 20 57 49 54 48 0a 20 20 20 57 49 54 48 4f 55 54   WITH.   WITHOUT
314b0 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52  .   WHEN.   WHER
314c0 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c  E.}]..hd_puts {<
314d0 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73  DIV class="pdf_s
314e0 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f  ection">}.Sectio
314f0 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72  n {SQLite Keywor
31500 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a  ds} keywords {{*
31510 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51  SQL keyword} {SQ
31520 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f  L keywords}}.hd_
31530 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f  puts {</DIV>}.</
31540 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c  tcl>..<p>The SQL
31550 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69 66   standard specif
31560 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65  ies a huge numbe
31570 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68  r of keywords wh
31580 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75  ich may not.be u
31590 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73  sed as the names
315a0 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69   of tables, indi
315b0 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61  ces, columns, da
315c0 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65  tabases, user-de
315d0 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c  fined.functions,
315e0 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72   collations, vir
315f0 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
31600 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  es, or any other
31610 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54   named object..T
31620 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f  he list of keywo
31630 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74  rds is so long t
31640 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63  hat few people c
31650 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d  an remember them
31660 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53   all..For most S
31670 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61  QL code, your sa
31680 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e  fest bet is to n
31690 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67  ever use any Eng
316a0 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f  lish language.wo
316b0 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f  rd as the name o
316c0 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  f a user-defined
316d0 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70   object.</p>..<p
316e0 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20  >If you want to 
316f0 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73  use a keyword as
31700 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65   a name, you nee
31710 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20  d to quote it.  
31720 54 68 65 72 65 0a 61 72 65 20 66 6f 75 72 20 77  There.are four w
31730 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b  ays of quoting k
31740 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74  eywords in SQLit
31750 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f  e:</p>..<p>.<blo
31760 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e  ckquote>.<table>
31770 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
31780 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f  ="top"><b>'keywo
31790 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20  rd'</b></td><td 
317a0 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
317b0 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
317c0 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
317d0 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69  s is a string li
317e0 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  teral.</td></tr>
317f0 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
31800 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77  n="top"><b>"keyw
31810 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord"</b></td><td
31820 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
31830 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65  eyword in double
31840 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64  -quotes is an id
31850 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f  entifier.</td></
31860 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61  tr>..<tr>.<td va
31870 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23  lign="top"><b>&#
31880 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c  91;keyword&#93;<
31890 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
318a0 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
318b0 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71  d enclosed in sq
318c0 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 69 73  uare brackets is
318d0 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65   .        an ide
318e0 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69  ntifier.  This i
318f0 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  s not standard S
31900 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e  QL.  This quotin
31910 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20  g mechanism.    
31920 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d      is used by M
31930 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c  S Access and SQL
31940 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20 69   Server and is i
31950 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74  ncluded in SQLit
31960 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f  e for.        co
31970 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64  mpatibility.</td
31980 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
31990 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
319a0 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39  >&#96;keyword&#9
319b0 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  6;</b></td><td><
319c0 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
319d0 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e  word enclosed in
319e0 20 67 72 61 76 65 20 61 63 63 65 6e 74 73 20 28   grave accents (
319f0 41 53 43 49 49 20 63 6f 64 65 20 39 36 29 20 69  ASCII code 96) i
31a00 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  s .        an id
31a10 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
31a20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
31a30 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
31a40 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
31a50 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
31a60 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e 63  MySQL and is inc
31a70 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  luded in SQLite 
31a80 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  for.        comp
31a90 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c  atibility.</td><
31aa0 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
31ab0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e  blockquote>.</p>
31ac0 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69 65  ..<p>For resilie
31ad0 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e  nce when confron
31ae0 74 65 64 20 77 69 74 68 20 68 69 73 74 6f 72 69  ted with histori
31af0 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  cal SQL statemen
31b00 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20  ts, SQLite.will 
31b10 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20 74  sometimes bend t
31b20 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73  he quoting rules
31b30 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c   above:</p>..<ul
31b40 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b  >.<li><p>^If a k
31b50 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
31b60 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e  .quotes (ex: <b>
31b70 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e  'key'</b> or <b>
31b80 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75  'glob'</b>) is u
31b90 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74  sed in a context
31ba0 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74 69   where.an identi
31bb0 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20  fier is allowed 
31bc0 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
31bd0 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f  ng literal is no
31be0 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a  t allowed, then.
31bf0 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64  the token is und
31c00 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e  erstood to be an
31c10 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73 74   identifier inst
31c20 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ead of a string 
31c30 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c  literal..</p></l
31c40 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61  i>..<li><p>^If a
31c50 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62   keyword in doub
31c60 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c  le.quotes (ex: <
31c70 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c  b>"key"</b> or <
31c80 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73  b>"glob"</b>) is
31c90 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65   used in a conte
31ca0 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e 6e  xt where.it cann
31cb0 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20 74  ot be resolved t
31cc0 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  o an identifier 
31cd0 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
31ce0 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c  ng literal.is al
31cf0 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65 20  lowed, then the 
31d00 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74  token is underst
31d10 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72 69  ood to be a stri
31d20 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74 65  ng literal inste
31d30 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69 66  ad.of an identif
31d40 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  ier.</p></li>.</
31d50 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d  ul>..<p>Programm
31d60 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e 65  ers are cautione
31d70 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68 65  d not to use the
31d80 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73 20   two exceptions 
31d90 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65  described in.the
31da0 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65 74   previous bullet
31db0 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a 65  s.  We emphasize
31dc0 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73 74   that they exist
31dd0 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c   only so that ol
31de0 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64  d.and ill-formed
31df0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
31e00 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63 74  will run correct
31e10 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  ly.  Future vers
31e20 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d  ions of.SQLite m
31e30 69 67 68 74 20 72 61 69 73 65 20 65 72 72 6f 72  ight raise error
31e40 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63  s instead of acc
31e50 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f  epting the malfo
31e60 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20  rmed.statements 
31e70 63 6f 76 65 72 65 64 20 62 79 20 74 68 65 20 65  covered by the e
31e80 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e  xceptions above.
31e90 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  </p>..<p>.SQLite
31ea0 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72   adds new keywor
31eb0 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20  ds from time to 
31ec0 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b  time when it tak
31ed0 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72  es on new featur
31ee0 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e  es..So to preven
31ef0 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d  t your code from
31f00 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79   being broken by
31f10 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d   future enhancem
31f20 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64  ents, you should
31f30 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20  .normally quote 
31f40 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74  any identifier t
31f50 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73  hat is an Englis
31f60 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c  h language word,
31f70 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20   even if.you do 
31f80 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70  not have to..</p
31f90 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20  >..<p>.The list 
31fa0 62 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20  below shows all 
31fb0 70 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64  possible keyword
31fc0 73 20 75 73 65 64 20 62 79 20 61 6e 79 20 62 75  s used by any bu
31fd0 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65  ild of.SQLite re
31fe0 67 61 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d  gardless of [com
31ff0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
32000 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f  s].  .Most reaso
32010 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74  nable configurat
32020 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f 72  ions use most or
32030 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65   all of these ke
32040 79 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65  ywords,.but some
32050 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65   keywords may be
32060 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51   omitted when SQ
32070 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75  L language featu
32080 72 65 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64  res are.disabled
32090 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73 73 20 6f  ..^(Regardless o
320a0 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  f the compile-ti
320b0 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
320c0 2c 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72  , any identifier
320d0 20 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a   that is not on.
320e0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74  the following <t
320f0 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e  cl>hd_puts [llen
32100 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  gth $keyword_lis
32110 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74  t]</tcl> element
32120 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20 61 20 6b  .list is not a k
32130 65 79 77 6f 72 64 20 74 6f 20 74 68 65 20 53 51  eyword to the SQ
32140 4c 20 70 61 72 73 65 72 20 69 6e 20 53 51 4c 69  L parser in SQLi
32150 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  te:.</p>..<block
32160 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77 69  quote>.<table wi
32170 64 74 68 3d 22 31 30 30 25 22 3e 3c 74 72 3e 0a  dth="100%"><tr>.
32180 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22  <td align="left"
32190 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77 69   valign="top" wi
321a0 64 74 68 3d 22 32 30 25 22 3e 0a 3c 74 63 6c 3e  dth="20%">.<tcl>
321b0 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20  .set n [llength 
321c0 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73  $keyword_list].s
321d0 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52  et nCol 5.set nR
321e0 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e  ow [expr {($n+$n
321f0 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73  Col-1)/$nCol}].s
32200 65 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77  et i 0.foreach w
32210 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  ord $keyword_lis
32220 74 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e  t {.  if {$i==$n
32230 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70 75  Row} {.    hd_pu
32240 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c  ts "</td><td val
32250 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67  ign=\"top\" alig
32260 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68  n=\"left\" width
32270 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73  =\"20%\">".    s
32280 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20  et i 1.  } else 
32290 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d  {.    incr i.  }
322a0 0a 20 20 68 64 5f 70 75 74 73 20 22 24 77 6f 72  .  hd_puts "$wor
322b0 64 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c  d<br>\n".}.</tcl
322c0 3e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61  >.</td></tr></ta
322d0 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ble></blockquote
322e0 3e 29 5e 0a                                      >)^.