Documentation Source Text

Hex Artifact Content
Login

Artifact f33a358424187bab0ec2cd65c1244276800f3a7a:


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 52 65 6d 65 6d 62 65 72  <li><p>.Remember
1c80: 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61   the format of a
1c90: 6c 6c 20 69 6e 64 65 78 65 73 20 61 6e 64 20 74  ll indexes and t
1ca0: 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
1cb0: 65 64 20 77 69 74 68 20 74 61 62 6c 65 20 58 2e  ed with table X.
1cc0: 0a 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f  .This informatio
1cd0: 6e 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64  n will be needed
1ce0: 20 69 6e 20 73 74 65 70 20 37 20 62 65 6c 6f 77   in step 7 below
1cf0: 2e 20 20 4f 6e 65 20 77 61 79 20 74 6f 20 64 6f  .  One way to do
1d00: 20 74 68 69 73 20 69 73 0a 74 6f 20 72 75 6e 20   this is.to run 
1d10: 61 20 71 75 65 72 79 20 6c 69 6b 65 20 74 68 65  a query like the
1d20: 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 53 45 4c 45   following:.SELE
1d30: 43 54 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f  CT type, sql FRO
1d40: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1d50: 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d 65 3d 27  WHERE tbl_name='
1d60: 58 27 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65  X'...<li><p>.Use
1d70: 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20   [CREATE TABLE] 
1d80: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 61 20 6e  to construct a n
1d90: 65 77 20 74 61 62 6c 65 20 22 6e 65 77 5f 58 22  ew table "new_X"
1da0: 20 74 68 61 74 20 69 73 20 69 6e 20 74 68 65 20   that is in the 
1db0: 64 65 73 69 72 65 64 0a 72 65 76 69 73 65 64 20  desired.revised 
1dc0: 66 6f 72 6d 61 74 20 6f 66 20 74 61 62 6c 65 20  format of table 
1dd0: 58 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  X.  Make sure th
1de0: 61 74 20 74 68 65 20 6e 61 6d 65 20 22 6e 65 77  at the name "new
1df0: 5f 58 22 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6c  _X" does not col
1e00: 6c 69 64 65 0a 77 69 74 68 20 61 6e 79 20 65 78  lide.with any ex
1e10: 69 73 74 69 6e 67 20 74 61 62 6c 65 20 6e 61 6d  isting table nam
1e20: 65 2c 20 6f 66 20 63 6f 75 72 73 65 2e 0a 0a 3c  e, of course...<
1e30: 6c 69 3e 3c 70 3e 0a 54 72 61 6e 73 66 65 72 20  li><p>.Transfer 
1e40: 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 58 20 69  content from X i
1e50: 6e 74 6f 20 6e 65 77 5f 58 20 75 73 69 6e 67 20  nto new_X using 
1e60: 61 20 73 74 61 74 65 6d 65 6e 74 0a 6c 69 6b 65  a statement.like
1e70: 3a 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e 65  : INSERT INTO ne
1e80: 77 5f 58 20 53 45 4c 45 43 54 20 2e 2e 2e 20 46  w_X SELECT ... F
1e90: 52 4f 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ROM X...<li><p>.
1ea0: 49 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  If foreign key c
1eb0: 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 65  onstraints are e
1ec0: 6e 61 62 6c 65 64 2c 0a 64 69 73 61 62 6c 65 20  nabled,.disable 
1ed0: 74 68 65 6d 20 75 73 69 6e 67 20 5b 50 52 41 47  them using [PRAG
1ee0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20  MA foreign_keys 
1ef0: 7c 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e  | PRAGMA foreign
1f00: 5f 6b 65 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69  _keys=OFF]...<li
1f10: 3e 3c 70 3e 0a 44 72 6f 70 20 74 68 65 20 6f 6c  ><p>.Drop the ol
1f20: 64 20 74 61 62 6c 65 20 58 3a 20 20 5b 44 52 4f  d table X:  [DRO
1f30: 50 20 54 41 42 4c 45 20 7c 20 44 52 4f 50 20 54  P TABLE | DROP T
1f40: 41 42 4c 45 20 58 5d 2e 0a 0a 3c 6c 69 3e 3c 70  ABLE X]...<li><p
1f50: 3e 0a 43 68 61 6e 67 65 20 74 68 65 20 6e 61 6d  >.Change the nam
1f60: 65 20 6f 66 20 6e 65 77 5f 58 20 74 6f 20 58 20  e of new_X to X 
1f70: 75 73 69 6e 67 3a 20 41 4c 54 45 52 20 54 41 42  using: ALTER TAB
1f80: 4c 45 20 6e 65 77 5f 58 20 52 45 4e 41 4d 45 20  LE new_X RENAME 
1f90: 54 4f 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55  TO X...<li><p>.U
1fa0: 73 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58  se [CREATE INDEX
1fb0: 5d 20 61 6e 64 20 5b 43 52 45 41 54 45 20 54 52  ] and [CREATE TR
1fc0: 49 47 47 45 52 5d 20 74 6f 20 72 65 63 6f 6e 73  IGGER] to recons
1fd0: 74 72 75 63 74 20 69 6e 64 65 78 65 73 20 61 6e  truct indexes an
1fe0: 64 20 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63  d triggers.assoc
1ff0: 69 61 74 65 64 20 77 69 74 68 20 74 61 62 6c 65  iated with table
2000: 20 58 2e 20 20 50 65 72 68 61 70 73 20 75 73 65   X.  Perhaps use
2010: 20 74 68 65 20 6f 6c 64 20 66 6f 72 6d 61 74 20   the old format 
2020: 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 73 20  of the triggers 
2030: 61 6e 64 0a 69 6e 64 65 78 65 73 20 73 61 76 65  and.indexes save
2040: 64 20 66 72 6f 6d 20 73 74 65 70 20 31 20 61 62  d from step 1 ab
2050: 6f 76 65 20 61 73 20 61 20 67 75 69 64 65 2c 20  ove as a guide, 
2060: 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 61  making changes a
2070: 73 20 61 70 70 72 6f 70 72 69 61 74 65 0a 66 6f  s appropriate.fo
2080: 72 20 74 68 65 20 61 6c 74 65 72 61 74 69 6f 6e  r the alteration
2090: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f  ...<li><p>.If fo
20a0: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
20b0: 61 69 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69  aints were origi
20c0: 6e 61 6c 6c 79 20 65 6e 61 62 6c 65 64 20 28 70  nally enabled (p
20d0: 72 69 6f 72 20 74 6f 0a 73 74 65 70 20 34 29 20  rior to.step 4) 
20e0: 74 68 65 6e 20 72 75 6e 20 5b 50 52 41 47 4d 41  then run [PRAGMA
20f0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
2100: 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74 68  ck] to verify th
2110: 61 74 20 74 68 65 20 73 63 68 65 6d 61 0a 63 68  at the schema.ch
2120: 61 6e 67 65 20 64 69 64 20 6e 6f 74 20 62 72 65  ange did not bre
2130: 61 6b 20 61 6e 79 20 66 6f 72 65 69 67 6e 20 6b  ak any foreign k
2140: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  ey constraints, 
2150: 61 6e 64 20 72 75 6e 0a 5b 50 52 41 47 4d 41 20  and run.[PRAGMA 
2160: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 7c 20 50  foreign_keys | P
2170: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
2180: 79 73 3d 4f 4e 5d 20 74 6f 20 72 65 2d 65 6e 61  ys=ON] to re-ena
2190: 62 6c 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a  ble foreign key.
21a0: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 3c 6c  constraints...<l
21b0: 69 3e 3c 70 3e 49 66 20 61 6e 79 20 76 69 65 77  i><p>If any view
21c0: 73 20 72 65 66 65 72 20 74 6f 20 74 61 62 6c 65  s refer to table
21d0: 20 58 20 69 6e 20 61 20 77 61 79 20 74 68 61 74   X in a way that
21e0: 20 69 73 20 61 66 66 65 63 74 65 64 20 62 79 20   is affected by 
21f0: 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67  the.schema chang
2200: 65 2c 20 74 68 65 6e 20 64 72 6f 70 20 74 68 6f  e, then drop tho
2210: 73 65 20 76 69 65 77 73 20 75 73 69 6e 67 20 5b  se views using [
2220: 44 52 4f 50 20 56 49 45 57 5d 20 61 6e 64 20 72  DROP VIEW] and r
2230: 65 63 72 65 61 74 65 20 74 68 65 6d 0a 77 69 74  ecreate them.wit
2240: 68 20 77 68 61 74 65 76 65 72 20 63 68 61 6e 67  h whatever chang
2250: 65 73 20 61 72 65 20 6e 65 63 65 73 73 61 72 79  es are necessary
2260: 20 74 6f 20 61 63 63 6f 6d 6d 6f 64 61 74 65 20   to accommodate 
2270: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
2280: 65 0a 75 73 69 6e 67 20 5b 43 52 45 41 54 45 20  e.using [CREATE 
2290: 56 49 45 57 5d 2e 0a 0a 3c 2f 6f 6c 3e 0a 0a 3c  VIEW]...</ol>..<
22a0: 70 3e 54 68 65 20 70 72 6f 63 65 64 75 72 65 20  p>The procedure 
22b0: 61 62 6f 76 65 20 69 73 20 63 6f 6d 70 6c 65 74  above is complet
22c0: 65 6c 79 20 67 65 6e 65 72 61 6c 20 61 6e 64 20  ely general and 
22d0: 77 69 6c 6c 20 77 6f 72 6b 20 65 76 65 6e 20 69  will work even i
22e0: 66 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61  f the.schema cha
22f0: 6e 67 65 20 63 61 75 73 65 73 20 74 68 65 20 69  nge causes the i
2300: 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 74 6f 72 65  nformation store
2310: 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74  d in the table t
2320: 6f 20 63 68 61 6e 67 65 2e 0a 53 6f 20 74 68 65  o change..So the
2330: 20 66 75 6c 6c 20 70 72 6f 63 65 64 75 72 65 20   full procedure 
2340: 61 62 6f 76 65 20 69 73 20 61 70 70 72 6f 70 72  above is appropr
2350: 69 61 74 65 20 66 6f 72 20 64 72 6f 70 70 69 6e  iate for droppin
2360: 67 20 61 20 63 6f 6c 75 6d 6e 2c 0a 63 68 61 6e  g a column,.chan
2370: 67 69 6e 67 20 74 68 65 20 6f 72 64 65 72 20 6f  ging the order o
2380: 66 20 63 6f 6c 75 6d 6e 73 2c 20 61 64 64 69 6e  f columns, addin
2390: 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20 61 20  g or removing a 
23a0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
23b0: 74 0a 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59  t.or PRIMARY KEY
23c0: 2c 20 61 64 64 69 6e 67 20 43 48 45 43 4b 20 6f  , adding CHECK o
23d0: 72 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72  r FOREIGN KEY or
23e0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
23f0: 61 69 6e 74 73 2c 0a 6f 72 20 63 68 61 6e 67 69  aints,.or changi
2400: 6e 67 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ng the datatype 
2410: 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 2c 20 66 6f  for a column, fo
2420: 72 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65  r example.  Howe
2430: 76 65 72 2c 20 61 20 73 69 6d 70 6c 65 72 0a 61  ver, a simpler.a
2440: 6e 64 20 66 61 73 74 65 72 20 70 72 6f 63 65 64  nd faster proced
2450: 75 72 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c  ure can optional
2460: 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 73  ly be used for.s
2470: 6f 6d 65 20 63 68 61 6e 67 65 73 20 74 68 61 74  ome changes that
2480: 20 64 6f 20 6e 6f 20 61 66 66 65 63 74 20 74 68   do no affect th
2490: 65 20 6f 6e 2d 64 69 73 6b 20 63 6f 6e 74 65 6e  e on-disk conten
24a0: 74 20 69 6e 20 61 6e 79 20 77 61 79 2e 0a 54 68  t in any way..Th
24b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 69 6d 70  e following simp
24c0: 6c 65 72 20 70 72 6f 63 65 64 75 72 65 20 69 73  ler procedure is
24d0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
24e0: 20 72 65 6d 6f 76 69 6e 67 0a 43 48 45 43 4b 20   removing.CHECK 
24f0: 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f  or FOREIGN KEY o
2500: 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  r NOT NULL const
2510: 72 61 69 6e 74 73 2c 0a 72 65 6e 61 6d 69 6e 67  raints,.renaming
2520: 20 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20 61 64 64   columns, or add
2530: 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20  ing or removing 
2540: 6f 72 20 63 68 61 6e 67 69 6e 67 20 64 65 66 61  or changing defa
2550: 75 6c 74 20 76 61 6c 75 65 73 20 6f 6e 0a 61 20  ult values on.a 
2560: 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c  column...<ol>.<l
2570: 69 3e 3c 70 3e 20 52 75 6e 20 5b 50 52 41 47 4d  i><p> Run [PRAGM
2580: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
2590: 5d 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  ] to determine t
25a0: 68 65 20 63 75 72 72 65 6e 74 20 73 63 68 65 6d  he current schem
25b0: 61 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a.version number
25c0: 2e 20 20 54 68 69 73 20 6e 75 6d 62 65 72 20 77  .  This number w
25d0: 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20 66 6f  ill be needed fo
25e0: 72 20 73 74 65 70 20 35 20 62 65 6c 6f 77 2e 0a  r step 5 below..
25f0: 0a 3c 6c 69 3e 3c 70 3e 20 41 63 74 69 76 61 74  .<li><p> Activat
2600: 65 20 73 63 68 65 6d 61 20 65 64 69 74 69 6e 67  e schema editing
2610: 20 75 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41 20   using .[PRAGMA 
2620: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 20  writable_schema 
2630: 7c 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c  | PRAGMA writabl
2640: 65 5f 73 63 68 65 6d 61 3d 4f 4e 5d 2e 0a 0a 3c  e_schema=ON]...<
2650: 6c 69 3e 3c 70 3e 20 52 75 6e 20 61 6e 20 5b 55  li><p> Run an [U
2660: 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  PDATE] statement
2670: 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20 64   to change the d
2680: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 61 62  efinition of tab
2690: 6c 65 20 58 0a 69 6e 20 74 68 65 20 5b 73 71 6c  le X.in the [sql
26a0: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
26b0: 5d 3a 20 0a 55 50 44 41 54 45 20 73 71 6c 69 74  ]: .UPDATE sqlit
26c0: 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71 6c  e_master SET sql
26d0: 3d 2e 2e 2e 20 57 48 45 52 45 20 74 79 70 65 3d  =... WHERE type=
26e0: 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65  'table' AND name
26f0: 3d 27 58 27 3b 0a 3c 70 3e 3c 65 6d 3e 43 61 75  ='X';.<p><em>Cau
2700: 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4d 61 6b 69  tion:</em>  Maki
2710: 6e 67 20 61 20 63 68 61 6e 67 65 20 74 6f 20 74  ng a change to t
2720: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
2730: 20 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73   table like this
2740: 20 77 69 6c 6c 0a 72 65 6e 64 65 72 20 74 68 65   will.render the
2750: 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
2760: 74 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65  t and unreadable
2770: 20 69 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   if the change c
2780: 6f 6e 74 61 69 6e 73 0a 61 20 73 79 6e 74 61 78  ontains.a syntax
2790: 20 65 72 72 6f 72 2e 20 20 49 74 20 69 73 20 73   error.  It is s
27a0: 75 67 67 65 73 74 65 64 20 74 68 61 74 20 63 61  uggested that ca
27b0: 72 65 66 75 6c 20 74 65 73 74 69 6e 67 20 6f 66  reful testing of
27c0: 20 74 68 65 20 55 50 44 41 54 45 0a 73 74 61 74   the UPDATE.stat
27d0: 65 6d 65 6e 74 20 62 65 20 64 6f 6e 65 20 6f 6e  ement be done on
27e0: 20 61 20 73 65 70 61 72 61 74 65 20 62 6c 61 6e   a separate blan
27f0: 6b 20 64 61 74 61 62 61 73 65 20 70 72 69 6f 72  k database prior
2800: 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e 0a   to using it on.
2810: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61  a database conta
2820: 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74 20  ining important 
2830: 64 61 74 61 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49  data...<li><p> I
2840: 66 20 74 68 65 20 63 68 61 6e 67 65 20 74 6f 20  f the change to 
2850: 74 61 62 6c 65 20 58 20 61 6c 73 6f 20 61 66 66  table X also aff
2860: 65 63 74 73 20 6f 74 68 65 72 20 74 61 62 6c 65  ects other table
2870: 73 20 6f 72 20 69 6e 64 65 78 65 73 20 6f 72 0a  s or indexes or.
2880: 74 72 69 67 67 65 72 73 20 61 72 65 20 76 69 65  triggers are vie
2890: 77 73 20 77 69 74 68 69 6e 20 73 63 68 65 6d 61  ws within schema
28a0: 2c 20 74 68 65 6e 20 72 75 6e 20 5b 55 50 44 41  , then run [UPDA
28b0: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 74  TE] statements t
28c0: 6f 20 6d 6f 64 69 66 79 0a 74 68 6f 73 65 20 6f  o modify.those o
28d0: 74 68 65 72 20 74 61 62 6c 65 73 20 69 6e 64 65  ther tables inde
28e0: 78 65 73 20 61 6e 64 20 76 69 65 77 73 20 74 6f  xes and views to
28f0: 6f 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  o.  For example,
2900: 20 69 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a   if the name of.
2910: 61 20 63 6f 6c 75 6d 6e 20 63 68 61 6e 67 65 73  a column changes
2920: 2c 20 61 6c 6c 20 46 4f 52 45 49 47 4e 20 4b 45  , all FOREIGN KE
2930: 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74  Y constraints, t
2940: 72 69 67 67 65 72 73 2c 20 69 6e 64 65 78 65 73  riggers, indexes
2950: 2c 20 61 6e 64 0a 76 69 65 77 73 20 74 68 61 74  , and.views that
2960: 20 72 65 66 65 72 20 74 6f 20 74 68 61 74 20 63   refer to that c
2970: 6f 6c 75 6d 6e 20 6d 75 73 74 20 62 65 20 6d 6f  olumn must be mo
2980: 64 69 66 69 65 64 2e 0a 3c 70 3e 3c 65 6d 3e 43  dified..<p><em>C
2990: 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4f 6e  aution:</em>  On
29a0: 63 65 20 61 67 61 69 6e 2c 20 6d 61 6b 69 6e 67  ce again, making
29b0: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
29c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a 74  sqlite_master .t
29d0: 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73 20 77  able like this w
29e0: 69 6c 6c 20 72 65 6e 64 65 72 20 74 68 65 20 64  ill render the d
29f0: 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 20  atabase corrupt 
2a00: 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65 20 69  and unreadable i
2a10: 66 20 74 68 65 20 0a 63 68 61 6e 67 65 20 63 6f  f the .change co
2a20: 6e 74 61 69 6e 73 20 61 6e 20 65 72 72 6f 72 2e  ntains an error.
2a30: 20 20 43 61 72 65 66 75 6c 6c 79 20 74 65 73 74    Carefully test
2a40: 20 6f 66 20 74 68 69 73 20 65 6e 74 69 72 65 20   of this entire 
2a50: 70 72 6f 63 65 64 75 72 65 0a 6f 6e 20 61 20 73  procedure.on a s
2a60: 65 70 61 72 61 74 65 20 74 65 73 74 20 64 61 74  eparate test dat
2a70: 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20 75  abase prior to u
2a80: 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61 74  sing it on.a dat
2a90: 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67  abase containing
2aa0: 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61 20   important data 
2ab0: 61 6e 64 2f 6f 72 20 6d 61 6b 65 20 62 61 63 6b  and/or make back
2ac0: 75 70 20 63 6f 70 69 65 73 20 6f 66 0a 69 6d 70  up copies of.imp
2ad0: 6f 72 74 61 6e 74 20 64 61 74 61 62 61 73 65 73  ortant databases
2ae0: 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e   prior to runnin
2af0: 67 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  g this procedure
2b00: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 6e 63 72 65  ...<li><p> Incre
2b10: 6d 65 6e 74 20 74 68 65 20 73 63 68 65 6d 61 20  ment the schema 
2b20: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 75  version number u
2b30: 73 69 6e 67 0a 5b 50 52 41 47 4d 41 20 73 63 68  sing.[PRAGMA sch
2b40: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7c 20 50 52  ema_version | PR
2b50: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
2b60: 69 6f 6e 3d 58 5d 20 77 68 65 72 65 20 58 20 69  ion=X] where X i
2b70: 73 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e 20  s one.more than 
2b80: 74 68 65 20 6f 6c 64 20 73 63 68 65 6d 61 20 76  the old schema v
2b90: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
2ba0: 75 6e 64 20 69 6e 20 73 74 65 70 20 32 20 61 62  und in step 2 ab
2bb0: 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 44 69  ove...<li><p> Di
2bc0: 73 61 62 6c 65 20 73 63 68 65 6d 61 20 65 64 69  sable schema edi
2bd0: 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52 41  ting using .[PRA
2be0: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
2bf0: 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72 69  ema | PRAGMA wri
2c00: 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46  table_schema=OFF
2c10: 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 28 4f 70 74  ]...<li><p> (Opt
2c20: 69 6f 6e 61 6c 29 20 52 75 6e 20 5b 50 52 41 47  ional) Run [PRAG
2c30: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2c40: 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74 68  ck] to verify th
2c50: 61 74 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68  at the.schema ch
2c60: 61 6e 67 65 73 20 64 69 64 20 6e 6f 74 20 64 61  anges did not da
2c70: 6d 61 67 65 20 74 68 65 20 64 61 74 61 62 61 73  mage the databas
2c80: 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 74 20  e..</ol>..<p>It 
2c90: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 68 61  is important tha
2ca0: 74 20 62 6f 74 68 20 6f 66 20 74 68 65 20 61 62  t both of the ab
2cb0: 6f 76 65 20 70 72 6f 63 65 64 75 72 65 73 20 62  ove procedures b
2cc0: 65 20 72 75 6e 20 66 72 6f 6d 20 77 69 74 68 69  e run from withi
2cd0: 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n.a transaction 
2ce0: 74 6f 20 70 72 65 76 65 6e 74 20 6f 74 68 65 72  to prevent other
2cf0: 20 70 72 6f 63 65 73 73 65 73 20 66 72 6f 6d 20   processes from 
2d00: 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 64 61  accessing the da
2d10: 74 61 62 61 73 65 20 66 69 6c 65 0a 77 68 69 6c  tabase file.whil
2d20: 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  e the schema cha
2d30: 6e 67 65 20 69 73 20 6f 6e 6c 79 20 70 61 72 74  nge is only part
2d40: 69 61 6c 6c 79 20 63 6f 6d 70 6c 65 74 65 2e 20  ially complete. 
2d50: 20 0a 0a 3c 70 3e 49 66 20 73 6f 6d 65 20 66 75   ..<p>If some fu
2d60: 74 75 72 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  ture version of 
2d70: 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20  SQLite adds new 
2d80: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61 70 61  ALTER TABLE capa
2d90: 62 69 6c 69 74 69 65 73 2c 20 0a 74 68 6f 73 65  bilities, .those
2da0: 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 77 69   capabilities wi
2db0: 6c 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79 20 75  ll very likely u
2dc0: 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77  se one of the tw
2dd0: 6f 20 70 72 6f 63 65 64 75 72 65 73 0a 6f 75 74  o procedures.out
2de0: 6c 69 6e 65 64 20 61 62 6f 76 65 2e 0a 0a 3c 74  lined above...<t
2df0: 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f 66 20 74 68  cl>.#  One of th
2e00: 65 20 72 65 61 73 6f 6e 73 20 74 68 61 74 0a 23  e reasons that.#
2e10: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
2e20: 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f   currently suppo
2e30: 72 74 20 6d 6f 72 65 20 41 4c 54 45 52 20 54 41  rt more ALTER TA
2e40: 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69 65 73  BLE capabilities
2e50: 20 69 73 20 74 68 61 74 0a 23 20 74 68 65 20 70   is that.# the p
2e60: 72 6f 63 65 64 75 72 65 20 73 68 6f 77 6e 20 61  rocedure shown a
2e70: 62 6f 76 65 20 69 73 20 64 69 66 66 69 63 75 6c  bove is difficul
2e80: 74 20 74 6f 20 61 75 74 6f 6d 61 74 65 20 66 6f  t to automate fo
2e90: 72 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73  r an arbitrary s
2ea0: 63 68 65 6d 61 2e 0a 23 20 50 61 72 74 69 63 75  chema..# Particu
2eb0: 6c 61 72 6c 79 20 74 72 6f 75 62 6c 65 73 6f 6d  larly troublesom
2ec0: 65 20 61 72 65 61 73 20 61 72 65 20 69 64 65 6e  e areas are iden
2ed0: 74 69 66 79 69 6e 67 20 61 6c 6c 20 76 69 65 77  tifying all view
2ee0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2ef0: 68 0a 23 20 74 61 62 6c 65 20 58 20 69 6e 20 73  h.# table X in s
2f00: 74 65 70 20 31 20 61 6e 64 20 63 72 65 61 74 69  tep 1 and creati
2f10: 6e 67 20 6e 65 77 20 76 69 65 77 73 20 61 6e 64  ng new views and
2f20: 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20 61   triggers that a
2f30: 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 0a 23 20  re compatible.# 
2f40: 77 69 74 68 20 74 68 65 20 61 6c 74 65 72 65 64  with the altered
2f50: 20 73 63 68 65 6d 61 20 66 6f 72 20 74 61 62 6c   schema for tabl
2f60: 65 20 58 20 69 6e 20 73 74 65 70 20 36 2e 20 20  e X in step 6.  
2f70: 49 74 20 69 73 20 61 20 74 72 69 63 6b 79 20 62  It is a tricky b
2f80: 75 74 20 73 6f 6c 76 61 62 6c 65 0a 23 20 70 72  ut solvable.# pr
2f90: 6f 62 6c 65 6d 20 74 6f 20 63 72 65 61 74 65 20  oblem to create 
2fa0: 63 6f 64 65 20 74 68 61 74 20 77 69 6c 6c 20 70  code that will p
2fb0: 65 72 66 6f 72 6d 20 74 68 65 20 73 74 65 70 73  erform the steps
2fc0: 20 61 62 6f 76 65 20 0a 23 20 66 6f 72 20 22 72   above .# for "r
2fd0: 65 61 73 6f 6e 61 62 6c 65 22 20 73 63 68 65 6d  easonable" schem
2fe0: 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75 6e  as commonly foun
2ff0: 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20  d in practice.  
3000: 0a 23 20 42 75 74 20 74 68 65 72 65 20 65 78 69  .# But there exi
3010: 73 74 20 6d 61 6c 65 76 6f 6c 65 6e 74 20 73 63  st malevolent sc
3020: 68 65 6d 61 73 20 66 6f 72 20 77 68 69 63 68 0a  hemas for which.
3030: 23 20 74 68 65 73 65 20 73 74 65 70 73 20 61 72  # these steps ar
3040: 65 20 6d 61 64 64 65 6e 69 6e 67 6c 79 20 64 69  e maddeningly di
3050: 66 66 69 63 75 6c 74 20 74 6f 20 64 6f 20 63 6f  fficult to do co
3060: 72 72 65 63 74 6c 79 2e 20 20 52 61 74 68 65 72  rrectly.  Rather
3070: 20 74 68 61 6e 20 63 72 65 61 74 65 0a 23 20 41   than create.# A
3080: 4c 54 45 52 20 54 41 42 4c 45 20 66 65 61 74 75  LTER TABLE featu
3090: 72 65 73 20 74 68 61 74 20 77 6f 72 6b 20 63 6f  res that work co
30a0: 72 72 65 63 74 6c 79 20 39 39 2e 39 25 20 6f 66  rrectly 99.9% of
30b0: 20 74 68 65 20 74 69 6d 65 20 62 75 74 20 70 6f   the time but po
30c0: 73 73 69 62 6c 79 0a 23 20 63 6f 72 72 75 70 74  ssibly.# corrupt
30d0: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 6e 20 74   the schema on t
30e0: 68 65 20 6f 74 68 65 72 20 30 2e 31 25 2c 20 74  he other 0.1%, t
30f0: 68 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f  he SQLite develo
3100: 70 65 72 73 20 68 61 76 65 20 64 65 63 69 64 65  pers have decide
3110: 64 0a 23 20 74 6f 20 70 75 73 68 20 74 68 65 20  d.# to push the 
3120: 70 72 6f 62 6c 65 6d 20 69 6e 74 6f 20 74 68 65  problem into the
3130: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d   application dom
3140: 61 69 6e 2c 20 77 68 65 72 65 20 69 74 20 69 73  ain, where it is
3150: 20 6d 75 63 68 20 65 61 73 69 65 72 0a 23 20 74   much easier.# t
3160: 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e 0a  o solve..</tcl>.
3170: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
3180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31c0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
31d0: 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65  ANALYZE} analyze
31e0: 20 41 4e 41 4c 59 5a 45 0a 0a 52 65 63 75 72 73   ANALYZE..Recurs
31f0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
3200: 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c 2f   analyze-stmt.</
3210: 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41  tcl>..<p> ^The A
3220: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67  NALYZE command g
3230: 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69 63  athers statistic
3240: 73 20 61 62 6f 75 74 20 74 61 62 6c 65 73 20 61  s about tables a
3250: 6e 64 0a 69 6e 64 69 63 65 73 20 61 6e 64 20 73  nd.indices and s
3260: 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 6c 65 63  tores the collec
3270: 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ted information.
3280: 69 6e 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62  in [internal tab
3290: 6c 65 73 5d 20 6f 66 20 74 68 65 20 64 61 74 61  les] of the data
32a0: 62 61 73 65 20 77 68 65 72 65 20 74 68 65 20 71  base where the q
32b0: 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63  uery optimizer c
32c0: 61 6e 0a 61 63 63 65 73 73 20 74 68 65 20 69 6e  an.access the in
32d0: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73  formation and us
32e0: 65 20 69 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b  e it to help mak
32f0: 65 20 62 65 74 74 65 72 20 71 75 65 72 79 20 70  e better query p
3300: 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e  lanning choices.
3310: 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74  .^If no argument
3320: 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c  s are given, all
3330: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
3340: 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64  ses are.analyzed
3350: 2e 20 20 5e 49 66 20 61 20 64 61 74 61 62 61 73  .  ^If a databas
3360: 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e 20  e name is given 
3370: 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2c  as the argument,
3380: 20 74 68 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73   then all tables
3390: 0a 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20  .and indices in 
33a0: 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61 73  that one databas
33b0: 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20  e are analyzed. 
33c0: 20 0a 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65   .^If the argume
33d0: 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61  nt is a table na
33e0: 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  me, then only th
33f0: 61 74 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  at table and the
3400: 0a 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61  .indices associa
3410: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61  ted with that ta
3420: 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64  ble are analyzed
3430: 2e 20 20 5e 49 66 20 74 68 65 20 61 72 67 75 6d  .  ^If the argum
3440: 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64 65 78 20  ent.is an index 
3450: 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  name, then only 
3460: 74 68 61 74 20 6f 6e 65 20 69 6e 64 65 78 20 69  that one index i
3470: 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a  s analyzed.</p>.
3480: 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61 75 6c  .<p> ^The defaul
3490: 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  t implementation
34a0: 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61 74   stores all stat
34b0: 69 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e 67  istics in a sing
34c0: 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  le.table named "
34d0: 5b 73 71 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e  [sqlite_stat1]".
34e0: 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20    ^If SQLite is 
34f0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
3500: 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e.[SQLITE_ENABLE
3510: 5f 53 54 41 54 33 5d 20 6f 70 74 69 6f 6e 20 61  _STAT3] option a
3520: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 5b  nd without the [
3530: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
3540: 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68 65  AT4].option, the
3550: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
3560: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
3570: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
3580: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
3590: 74 61 74 33 5d 2e 0a 20 5e 49 66 20 53 51 4c 69  tat3].. ^If SQLi
35a0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
35b0: 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
35c0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 6f 70  ENABLE_STAT4] op
35d0: 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74  tion, then addit
35e0: 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20  ional histogram 
35f0: 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65  data is.collecte
3600: 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20  d and stored in 
3610: 5b 73 71 6c 69 74 65 5f 73 74 61 74 34 5d 2e 0a  [sqlite_stat4]..
3620: 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Older versions o
3630: 66 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 6d  f SQLite would m
3640: 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65 20 5b  ake use of the [
3650: 73 71 6c 69 74 65 5f 73 74 61 74 32 5d 20 74 61  sqlite_stat2] ta
3660: 62 6c 65 0a 77 68 65 6e 20 63 6f 6d 70 69 6c 65  ble.when compile
3670: 64 20 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45  d with [SQLITE_E
3680: 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 62 75 74  NABLE_STAT2] but
3690: 20 61 6c 6c 20 72 65 63 65 6e 74 20 76 65 72 73   all recent vers
36a0: 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 69  ions of.SQLite i
36b0: 67 6e 6f 72 65 20 74 68 65 20 73 71 6c 69 74 65  gnore the sqlite
36c0: 5f 73 74 61 74 32 20 74 61 62 6c 65 2e 0a 46 75  _stat2 table..Fu
36d0: 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ture enhancement
36e0: 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64 64  s may create.add
36f0: 69 74 69 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e 61  itional [interna
3700: 6c 20 74 61 62 6c 65 73 5d 20 77 69 74 68 20 74  l tables] with t
3710: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61 74  he same name pat
3720: 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74 68  tern except with
3730: 0a 66 69 6e 61 6c 20 64 69 67 69 74 20 6c 61 72  .final digit lar
3740: 67 65 72 20 74 68 61 6e 20 22 34 22 2e 0a 41 6c  ger than "4"..Al
3750: 6c 20 6f 66 20 74 68 65 73 65 20 74 61 62 6c 65  l of these table
3760: 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65  s are collective
3770: 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61  ly referred to a
3780: 73 20 22 73 74 61 74 69 73 74 69 63 73 20 74 61  s "statistics ta
3790: 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  bles"..</p>..<p>
37a0: 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66   ^The content of
37b0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
37c0: 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75  tables can be qu
37d0: 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c  eried using [SEL
37e0: 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20  ECT].and can be 
37f0: 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 74 68  changed using th
3800: 65 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  e [DELETE], [INS
3810: 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41 54  ERT], and [UPDAT
3820: 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28 54  E] commands..^(T
3830: 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  he [DROP TABLE] 
3840: 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f 6e  command works on
3850: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
3860: 65 73 0a 61 73 20 6f 66 20 53 51 4c 69 74 65 20  es.as of SQLite 
3870: 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29 5e  version 3.7.9.)^
3880: 0a 5e 54 68 65 20 5b 41 4c 54 45 52 20 54 41 42  .^The [ALTER TAB
3890: 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73  LE] command does
38a0: 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 73 74 61   not work on sta
38b0: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 2e 0a  tistics tables..
38c0: 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72 65  Appropriate care
38d0: 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
38e0: 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74 68  when changing th
38f0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
3900: 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62 6c   statistics.tabl
3910: 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63 6f  es as invalid co
3920: 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65 20  ntent can cause 
3930: 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63 74  SQLite to select
3940: 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75 65   inefficient.que
3950: 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65 72  ry plans.  Gener
3960: 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20 6f  ally speaking, o
3970: 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f  ne should not mo
3980: 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e 74  dify the content
3990: 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74 69   of.the statisti
39a0: 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e 79  cs tables by any
39b0: 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65 72   mechanism other
39c0: 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20 74   than invoking t
39d0: 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61  he.ANALYZE comma
39e0: 6e 64 2e 20 20 0a 53 65 65 20 22 5b 4d 61 6e 75  nd.  .See "[Manu
39f0: 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66 20 51 75  al Control Of Qu
3a00: 65 72 79 20 50 6c 61 6e 73 20 55 73 69 6e 67 20  ery Plans Using 
3a10: 53 51 4c 49 54 45 5f 53 54 41 54 20 54 61 62 6c  SQLITE_STAT Tabl
3a20: 65 73 5d 22 20 66 6f 72 0a 66 75 72 74 68 65 72  es]" for.further
3a30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
3a40: 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74 69  >..<p> ^Statisti
3a50: 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20 41  cs gathered by A
3a60: 4e 41 4c 59 5a 45 20 61 72 65 20 6e 6f 74 20 61  NALYZE are not a
3a70: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64  utomatically upd
3a80: 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e 74  ated as.the cont
3a90: 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
3aa0: 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49 66  ase changes.  If
3ab0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
3ac0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68 61  the database.cha
3ad0: 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e 74  nges significant
3ae0: 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64 61  ly, or if the da
3af0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
3b00: 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20  anges, then one 
3b10: 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20  should.consider 
3b20: 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e  rerunning the AN
3b30: 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  ALYZE command in
3b40: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
3b50: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 2e   the statistics.
3b60: 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71 75  </p>..<p> The qu
3b70: 65 72 79 20 70 6c 61 6e 6e 65 72 20 6c 6f 61 64  ery planner load
3b80: 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  s the content of
3b90: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
3ba0: 74 61 62 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d 6f  tables.into memo
3bb0: 72 79 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  ry when the sche
3bc0: 6d 61 20 69 73 20 72 65 61 64 2e 20 20 5e 48 65  ma is read.  ^He
3bd0: 6e 63 65 2c 20 77 68 65 6e 20 61 6e 20 61 70 70  nce, when an app
3be0: 6c 69 63 61 74 69 6f 6e 0a 63 68 61 6e 67 65 73  lication.changes
3bf0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
3c00: 74 61 62 6c 65 73 20 64 69 72 65 63 74 6c 79 2c  tables directly,
3c10: 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74   SQLite will not
3c20: 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 6e 6f 74   immediately.not
3c30: 69 63 65 20 74 68 65 20 63 68 61 6e 67 65 73 2e  ice the changes.
3c40: 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e   ^An application
3c50: 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71  .can force the q
3c60: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20  uery planner to 
3c70: 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74 69  reread the stati
3c80: 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79 20  stics tables by 
3c90: 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59  running.<b>ANALY
3ca0: 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
3cb0: 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 20  </b>. </p>..<p> 
3cc0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
3cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d10: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
3d20: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d  ATTACH DATABASE}
3d30: 20 61 74 74 61 63 68 20 2a 41 54 54 41 43 48 0a   attach *ATTACH.
3d40: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
3d50: 44 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73  Diagram attach-s
3d60: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
3d70: 5e 54 68 65 20 41 54 54 41 43 48 20 44 41 54 41  ^The ATTACH DATA
3d80: 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61  BASE statement a
3d90: 64 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61  dds another data
3da0: 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68  base .file to th
3db0: 65 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61 62  e current [datab
3dc0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e  ase connection].
3dd0: 20 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20   .^The filename 
3de0: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
3df0: 20 74 6f 20 62 65 20 61 74 74 61 63 68 65 64 20   to be attached 
3e00: 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a  is the value of.
3e10: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
3e20: 68 61 74 20 6f 63 63 75 72 73 20 62 65 66 6f 72  hat occurs befor
3e30: 65 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64  e the AS keyword
3e40: 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20  ..^The filename 
3e50: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
3e60: 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d 65  follows the same
3e70: 20 73 65 6d 61 6e 74 69 63 73 20 61 73 20 74 68   semantics as th
3e80: 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d  e.filename argum
3e90: 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f  ent to [sqlite3_
3ea0: 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b 73 71 6c  open()] and [sql
3eb0: 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 3b  ite3_open_v2()];
3ec0: 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d   the.special nam
3ed0: 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 72  e "[:memory:]" r
3ee0: 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 5b 69 6e  esults in an [in
3ef0: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
3f00: 5d 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20 73  ] and an.empty s
3f10: 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69 6e  tring results in
3f20: 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72 79   a new temporary
3f30: 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65 20   database..^The 
3f40: 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e  filename argumen
3f50: 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49 20  t can be a [URI 
3f60: 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52 49  filename] if URI
3f70: 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65 73   filename proces
3f80: 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20 6f  sing.is enable o
3f90: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  n the database c
3fa0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
3fb0: 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
3fc0: 20 69 73 20 66 6f 72 0a 55 52 49 20 66 69 6c 65   is for.URI file
3fd0: 6e 61 6d 65 73 20 74 6f 20 62 65 20 64 69 73 61  names to be disa
3fe0: 62 6c 65 64 2c 20 68 6f 77 65 76 65 72 20 74 68  bled, however th
3ff0: 61 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  at might change 
4000: 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65  in a future rele
4010: 61 73 65 0a 6f 66 20 53 51 4c 69 74 65 2c 20 73  ase.of SQLite, s
4020: 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65  o application de
4030: 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64 76  velopers are adv
4040: 69 73 65 64 20 74 6f 20 70 6c 61 6e 20 61 63 63  ised to plan acc
4050: 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 54 68  ordingly...<p>Th
4060: 65 20 6e 61 6d 65 20 74 68 61 74 20 6f 63 63 75  e name that occu
4070: 72 73 20 61 66 74 65 72 20 74 68 65 20 41 53 20  rs after the AS 
4080: 6b 65 79 77 6f 72 64 20 69 73 20 74 68 65 20 6e  keyword is the n
4090: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
40a0: 61 73 65 0a 75 73 65 64 20 69 6e 74 65 72 6e 61  ase.used interna
40b0: 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 0a 5e  lly by SQLite..^
40c0: 54 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61 6d  The database-nam
40d0: 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27  es 'main' and .'
40e0: 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20 74  temp' refer to t
40f0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
4100: 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61 73   and the databas
4110: 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d 70  e used for .temp
4120: 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 5e  orary tables.  ^
4130: 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d  The main and tem
4140: 70 20 64 61 74 61 62 61 73 65 73 20 63 61 6e 6e  p databases cann
4150: 6f 74 20 62 65 20 61 74 74 61 63 68 65 64 20 6f  ot be attached o
4160: 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e 0a  r.detached.</p>.
4170: 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20 69 6e  .<p> ^(Tables in
4180: 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
4190: 61 62 61 73 65 20 63 61 6e 20 62 65 20 72 65 66  abase can be ref
41a0: 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20 74  erred to using t
41b0: 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64 61  he syntax .<i>da
41c0: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62 6c  tabase-name.tabl
41d0: 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e  e-name</i>.)^  ^
41e0: 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  If the name of t
41f0: 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71  he table is uniq
4200: 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74  ue.across all at
4210: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
4220: 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e   and the main an
4230: 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 73  d temp databases
4240: 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64 61  , then the.<i>da
4250: 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20  tabase-name</i> 
4260: 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65  prefix is not re
4270: 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74 77 6f  quired.  ^If two
4280: 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
4290: 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64 61 74  in.different dat
42a0: 61 62 61 73 65 73 20 68 61 76 65 20 74 68 65 20  abases have the 
42b0: 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74 68  same name and th
42c0: 65 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e  e .<i>database-n
42d0: 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69  ame</i> prefix i
42e0: 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61 20  s not used on a 
42f0: 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 2c  table reference,
4300: 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65 20   then the.table 
4310: 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f 6e  chosen is the on
4320: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
4330: 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73 74  e that was least
4340: 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63 68   recently attach
4350: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72  ed.</p>..<p>.^Tr
4360: 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c  ansactions invol
4370: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61 74  ving multiple at
4380: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
4390: 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73   are atomic,.ass
43a0: 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20 6d  uming that the m
43b0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
43c0: 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22  not "[:memory:]"
43d0: 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72 6e   and the .[journ
43e0: 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74 20  al_mode] is not 
43f0: 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68 65  [WAL].  ^(If the
4400: 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69   main.database i
4410: 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72 20  s ":memory:" or 
4420: 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d  if the journal_m
4430: 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65 6e  ode is WAL, then
4440: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63   .transactions c
4450: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74  ontinue to be at
4460: 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63 68  omic within each
4470: 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61   individual.data
4480: 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69  base file. But i
4490: 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75  f the host compu
44a0: 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20 74  ter crashes in t
44b0: 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b  he middle.of a [
44c0: 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77  COMMIT] where tw
44d0: 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61  o or more databa
44e0: 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70 64  se files are upd
44f0: 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68  ated,.some of th
4500: 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20  ose files might 
4510: 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73 20  get the changes 
4520: 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67  where others.mig
4530: 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a  ht not.)^.</p>..
4540: 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61 20  <p> ^There is a 
4550: 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67  limit, set using
4560: 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28   [sqlite3_limit(
4570: 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f  )] and .[SQLITE_
4580: 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c  LIMIT_ATTACHED],
4590: 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
45a0: 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  f databases that
45b0: 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e   can be.simultan
45c0: 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64 20  eously attached 
45d0: 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61  to a single data
45e0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
45f0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
4600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4640: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
4650: 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53  ion {BEGIN TRANS
4660: 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74  ACTION} transact
4670: 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d  ion {*BEGIN COMM
4680: 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 52 65  IT ROLLBACK}..Re
4690: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
46a0: 67 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74 0a  gram begin-stmt.
46b0: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
46c0: 69 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74  iagram commit-st
46d0: 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  mt.RecursiveBubb
46e0: 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61  leDiagram rollba
46f0: 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ck-stmt.</tcl>..
4700: 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73 20  <p>.^No changes 
4710: 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
4720: 68 65 20 64 61 74 61 62 61 73 65 20 65 78 63 65  he database exce
4730: 70 74 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  pt within a tran
4740: 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f  saction..^Any co
4750: 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e 67  mmand that chang
4760: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  es the database 
4770: 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20  (basically, any 
4780: 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65  SQL command.othe
4790: 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d 29  r than [SELECT])
47a0: 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
47b0: 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72 61 6e  lly start a tran
47c0: 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69  saction if.one i
47d0: 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e  s not already in
47e0: 20 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f 6d   effect.  ^Autom
47f0: 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64  atically started
4800: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72   transactions.ar
4810: 65 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65 6e  e committed when
4820: 20 74 68 65 20 6c 61 73 74 20 71 75 65 72 79 20   the last query 
4830: 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a  finishes..</p>..
4840: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
4850: 73 20 63 61 6e 20 62 65 20 73 74 61 72 74 65 64  s can be started
4860: 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20   manually using 
4870: 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e  the BEGIN.comman
4880: 64 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e 73  d.  ^(Such trans
4890: 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20  actions usually 
48a0: 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74 68  persist until th
48b0: 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f 72  e next.COMMIT or
48c0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
48d0: 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73 61  d.  But a transa
48e0: 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f 20  ction will also 
48f0: 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68 65  .ROLLBACK if the
4900: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   database is clo
4910: 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72 72  sed or if an err
4920: 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74 68  or occurs.and th
4930: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c  e ROLLBACK confl
4940: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
4950: 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63  lgorithm is spec
4960: 69 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68 65  ified.)^.See the
4970: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
4980: 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49  n the [ON CONFLI
4990: 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20 61  CT].clause for a
49a0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
49b0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
49c0: 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63  ROLLBACK.conflic
49d0: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
49e0: 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  orithm..</p>..<p
49f0: 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54 49  >.^END TRANSACTI
4a00: 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  ON is an alias f
4a10: 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a  or COMMIT..</p>.
4a20: 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74 69  .<p> ^(Transacti
4a30: 6f 6e 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  ons created usin
4a40: 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54  g BEGIN...COMMIT
4a50: 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a   do not nest.)^.
4a60: 5e 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61 6e  ^For nested tran
4a70: 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74 68  sactions, use th
4a80: 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61 6e  e [SAVEPOINT] an
4a90: 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d 6d  d [RELEASE] comm
4aa0: 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53 41  ands..The "TO SA
4ab0: 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61 6d 65 3c  VEPOINT <i>name<
4ac0: 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f 66 20 74  /i>" clause of t
4ad0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
4ae0: 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65  and shown.in the
4af0: 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20   syntax diagram 
4b00: 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61 70  above is only ap
4b10: 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53 41 56  plicable to [SAV
4b20: 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74  EPOINT].transact
4b30: 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d  ions.  ^An attem
4b40: 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65  pt to invoke the
4b50: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77   BEGIN command w
4b60: 69 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63 74  ithin.a transact
4b70: 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  ion will fail wi
4b80: 74 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 67  th an error, reg
4b90: 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
4ba0: 65 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69  er.the transacti
4bb0: 6f 6e 20 77 61 73 20 73 74 61 72 74 65 64 20 62  on was started b
4bc0: 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72  y [SAVEPOINT] or
4bd0: 20 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a   a prior BEGIN..
4be0: 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d  ^The COMMIT comm
4bf0: 61 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c  and and the ROLL
4c00: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74  BACK command wit
4c10: 68 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75  hout the TO clau
4c20: 73 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65  se.work the same
4c30: 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20   on [SAVEPOINT] 
4c40: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20  transactions as 
4c50: 74 68 65 79 20 64 6f 20 77 69 74 68 20 74 72 61  they do with tra
4c60: 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65  nsactions.starte
4c70: 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a  d by BEGIN.</p>.
4c80: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
4c90: 74 20 69 6d 6d 65 64 69 61 74 65 20 7b 42 45 47  t immediate {BEG
4ca0: 49 4e 20 49 4d 4d 45 44 49 41 54 45 7d 20 7b 42  IN IMMEDIATE} {B
4cb0: 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 7d 3c  EGIN EXCLUSIVE}<
4cc0: 2f 74 63 6c 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73  /tcl>.<p>.^Trans
4cd0: 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64  actions can be d
4ce0: 65 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61  eferred, immedia
4cf0: 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65  te, or exclusive
4d00: 2e 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  .  .^The default
4d10: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68   transaction beh
4d20: 61 76 69 6f 72 20 69 73 20 64 65 66 65 72 72 65  avior is deferre
4d30: 64 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61  d..^Deferred mea
4d40: 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73  ns that no locks
4d50: 20 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e   are acquired.on
4d60: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
4d70: 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73 65  til the database
4d80: 20 69 73 20 66 69 72 73 74 20 61 63 63 65 73 73   is first access
4d90: 65 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20  ed.  ^Thus with 
4da0: 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e 73  a.deferred trans
4db0: 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49  action, the BEGI
4dc0: 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65  N statement itse
4dd0: 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20  lf does nothing 
4de0: 74 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65  to the.filesyste
4df0: 6d 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e  m.  ^Locks.are n
4e00: 6f 74 20 61 63 71 75 69 72 65 64 20 75 6e 74 69  ot acquired unti
4e10: 6c 20 74 68 65 20 66 69 72 73 74 20 72 65 61 64  l the first read
4e20: 20 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61 74   or write operat
4e30: 69 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74  ion.  ^The first
4e40: 20 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20   read.operation 
4e50: 61 67 61 69 6e 73 74 20 61 20 64 61 74 61 62 61  against a databa
4e60: 73 65 20 63 72 65 61 74 65 73 20 61 20 5b 53 48  se creates a [SH
4e70: 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74  ARED] lock and t
4e80: 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f  he first.write o
4e90: 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73  peration creates
4ea0: 20 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f   a [RESERVED] lo
4eb0: 63 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74  ck.   ^Because t
4ec0: 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f  he acquisition o
4ed0: 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72  f.locks is defer
4ee0: 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61  red until they a
4ef0: 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73  re needed, it is
4f00: 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
4f10: 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72  nother.thread or
4f20: 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63   process could c
4f30: 72 65 61 74 65 20 61 20 73 65 70 61 72 61 74 65  reate a separate
4f40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
4f50: 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61   write to.the da
4f60: 74 61 62 61 73 65 20 61 66 74 65 72 20 74 68 65  tabase after the
4f70: 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75   BEGIN on the cu
4f80: 72 72 65 6e 74 20 74 68 72 65 61 64 20 68 61 73  rrent thread has
4f90: 20 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74   executed..^If t
4fa0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
4fb0: 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65  s immediate, the
4fc0: 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63  n [RESERVED] loc
4fd0: 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64 20  ks.are acquired 
4fe0: 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73  on all databases
4ff0: 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20   as soon as the 
5000: 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73  BEGIN command is
5010: 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f  .executed, witho
5020: 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74  ut waiting for t
5030: 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62  he.database to b
5040: 65 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20  e used.  ^After 
5050: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
5060: 45 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61  E, .no other [da
5070: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5080: 6e 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20  n] will be able 
5090: 74 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65 20  to write to the 
50a0: 64 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61  database or.do a
50b0: 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45   BEGIN IMMEDIATE
50c0: 20 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53   or BEGIN EXCLUS
50d0: 49 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f  IVE.  ^Other pro
50e0: 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69  cesses can conti
50f0: 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d  nue.to read from
5100: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 68   the database, h
5110: 6f 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63  owever.  ^An exc
5120: 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74 69  lusive transacti
5130: 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55  on causes.[EXCLU
5140: 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62  SIVE] locks to b
5150: 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c  e acquired on al
5160: 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41  l databases.  ^A
5170: 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43  fter a BEGIN.EXC
5180: 4c 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72  LUSIVE, no other
5190: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
51a0: 63 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f  ction] except fo
51b0: 72 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74  r [read_uncommit
51c0: 74 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73  ted].connections
51d0: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
51e0: 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
51f0: 73 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20  se and no other 
5200: 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f  connection witho
5210: 75 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c  ut.exception wil
5220: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69  l be able to wri
5230: 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  te the database 
5240: 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61  until the transa
5250: 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74  ction is.complet
5260: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41  e..</p>..<p>.^(A
5270: 6e 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73  n implicit trans
5280: 61 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61  action (a transa
5290: 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74  ction that is st
52a0: 61 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  arted automatica
52b0: 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73  lly,.not a trans
52c0: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62  action started b
52d0: 79 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d  y BEGIN) is comm
52e0: 69 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  itted automatica
52f0: 6c 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73  lly when.the las
5300: 74 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  t active stateme
5310: 6e 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20  nt finishes.  A 
5320: 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68  statement finish
5330: 65 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70  es when its.prep
5340: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
5350: 73 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74  s [sqlite3_reset
5360: 28 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b  () | reset] or.[
5370: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
5380: 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e  () | finalized].
5390: 20 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74    An open [sqlit
53a0: 65 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f  e3_blob] used fo
53b0: 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c  r.incremental BL
53c0: 4f 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73  OB I/O counts as
53d0: 20 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73   an unfinished s
53e0: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b  tatement.  The [
53f0: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69  sqlite3_blob].fi
5400: 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 20 69  nishes when it i
5410: 73 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f  s [sqlite3_blob_
5420: 63 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64  close() | closed
5430: 5d 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  ].)^.</p>..<p>.^
5440: 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d  The explicit COM
5450: 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  MIT command runs
5460: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76   immediately, ev
5470: 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  en if there are.
5480: 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d  pending [SELECT]
5490: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48   statements.  ^H
54a0: 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65  owever, if there
54b0: 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69   are pending.wri
54c0: 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74  te operations, t
54d0: 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  he COMMIT comman
54e0: 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d.will fail with
54f0: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b   an error code [
5500: 53 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f  SQLITE_BUSY]..</
5510: 70 3e 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65  p>..<p>.^An atte
5520: 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 43  mpt to execute C
5530: 4f 4d 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f  OMMIT might also
5540: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53   result in an [S
5550: 51 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75  QLITE_BUSY] retu
5560: 72 6e 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e  rn code.if an an
5570: 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f 72 20  other thread or 
5580: 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73  process has a [s
5590: 68 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74  hared lock] on t
55a0: 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61 74  he database.that
55b0: 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20 64   prevented the d
55c0: 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69  atabase from bei
55d0: 6e 67 20 75 70 64 61 74 65 64 2e 20 20 5e 57 68  ng updated.  ^Wh
55e0: 65 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20  en COMMIT fails 
55f0: 69 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65  in this.way, the
5600: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d   transaction rem
5610: 61 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20  ains active and 
5620: 74 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62  the COMMIT can b
5630: 65 20 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a  e retried later.
5640: 61 66 74 65 72 20 74 68 65 20 72 65 61 64 65 72  after the reader
5650: 20 68 61 73 20 68 61 64 20 61 20 63 68 61 6e 63   has had a chanc
5660: 65 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e  e to clear..</p>
5670: 0a 0a 3c 70 3e 0a 49 6e 20 76 65 72 79 20 6f 6c  ..<p>.In very ol
5680: 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  d versions of SQ
5690: 4c 69 74 65 20 28 62 65 66 6f 72 65 20 76 65 72  Lite (before ver
56a0: 73 69 6f 6e 20 33 2e 37 2e 31 31 20 63 69 72 63  sion 3.7.11 circ
56b0: 61 20 32 30 31 32 2d 30 33 2d 32 30 29 0a 74 68  a 2012-03-20).th
56c0: 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20  e ROLLBACK will 
56d0: 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72  fail with an err
56e0: 6f 72 20 63 6f 64 65 20 0a 5b 53 51 4c 49 54 45  or code .[SQLITE
56f0: 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72 65 20  _BUSY] if there 
5700: 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20  are any pending 
5710: 71 75 65 72 69 65 73 2e 20 20 5e 49 6e 20 6d 6f  queries.  ^In mo
5720: 72 65 20 72 65 63 65 6e 74 0a 76 65 72 73 69 6f  re recent.versio
5730: 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 74 68  ns of SQLite, th
5740: 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20  e ROLLBACK will 
5750: 70 72 6f 63 65 65 64 20 61 6e 64 20 70 65 6e 64  proceed and pend
5760: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a 77  ing statements.w
5770: 69 6c 6c 20 6f 66 74 65 6e 20 62 65 20 61 62 6f  ill often be abo
5780: 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68  rted, causing th
5790: 65 6d 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  em to return an 
57a0: 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5d 20 6f  [SQLITE_ABORT] o
57b0: 72 0a 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f  r.[SQLITE_ABORT_
57c0: 52 4f 4c 4c 42 41 43 4b 5d 20 65 72 72 6f 72 2e  ROLLBACK] error.
57d0: 0a 5e 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73  .^In SQLite vers
57e0: 69 6f 6e 20 33 2e 38 2e 38 20 61 6e 64 20 6c 61  ion 3.8.8 and la
57f0: 74 65 72 2c 20 61 20 70 65 6e 64 69 6e 67 20 72  ter, a pending r
5800: 65 61 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ead will continu
5810: 65 20 66 75 6e 63 74 69 6f 6e 69 6e 67 0a 61 66  e functioning.af
5820: 74 65 72 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  ter the ROLLBACK
5830: 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20   as long as the 
5840: 52 4f 4c 4c 42 41 43 4b 20 64 6f 65 73 20 6e 6f  ROLLBACK does no
5850: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74  t modify the dat
5860: 61 62 61 73 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f  abase.schema..</
5870: 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47  p>..<p>.If [PRAG
5880: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d  MA journal_mode]
5890: 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28   is set to OFF (
58a0: 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74  thus disabling t
58b0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
58c0: 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74  nal.file) then t
58d0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
58e0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
58f0: 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  and is undefined
5900: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70  ..</p>..<h3>Resp
5910: 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57  onse To Errors W
5920: 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74  ithin A Transact
5930: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28  ion</h3>..<p> ^(
5940: 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73  If certain kinds
5950: 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72   of errors occur
5960: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
5970: 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73  ction, the.trans
5980: 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61  action may or ma
5990: 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20  y not be rolled 
59a0: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
59b0: 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20  ly.  The.errors 
59c0: 74 68 61 74 20 63 61 6e 20 63 61 75 73 65 20 61  that can cause a
59d0: 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c 6c  n automatic roll
59e0: 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f 70  back include:</p
59f0: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51  >..<ul>.<li> [SQ
5a00: 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74 61  LITE_FULL]: data
5a10: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75 6c  base or disk ful
5a20: 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49  l.<li> [SQLITE_I
5a30: 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f 20  OERR]: disk I/O 
5a40: 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49  error.<li> [SQLI
5a50: 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62 61  TE_BUSY]: databa
5a60: 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e 6f  se in use by ano
5a70: 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c 69  ther process.<li
5a80: 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d  > [SQLITE_NOMEM]
5a90: 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79 0a  : out or memory.
5aa0: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4e 54  <li> [SQLITE_INT
5ab0: 45 52 52 55 50 54 5d 3a 20 70 72 6f 63 65 73 73  ERRUPT]: process
5ac0: 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69 6e 74  ing [sqlite3_int
5ad0: 65 72 72 75 70 74 7c 69 6e 74 65 72 72 75 70 74  errupt|interrupt
5ae0: 65 64 5d 0a 20 20 20 20 20 62 79 20 61 70 70 6c  ed].     by appl
5af0: 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 0a  ication request.
5b00: 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f  </ul>)^..<p>.^Fo
5b10: 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65  r all of these e
5b20: 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74  rrors, SQLite at
5b30: 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a  tempts to undo j
5b40: 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74  ust the one stat
5b50: 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72  ement.it was wor
5b60: 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76  king on and leav
5b70: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70  e changes from p
5b80: 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  rior statements 
5b90: 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20  within the.same 
5ba0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61  transaction inta
5bb0: 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  ct and continue 
5bc0: 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61 63  with the transac
5bd0: 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72 2c  tion.  ^However,
5be0: 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   .depending on t
5bf0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
5c00: 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  ng evaluated and
5c10: 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68   the point at wh
5c20: 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63  ich the.error oc
5c30: 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62  curs, it might b
5c40: 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20  e necessary for 
5c50: 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61  SQLite to rollba
5c60: 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68  ck and.cancel th
5c70: 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  e entire transac
5c80: 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c 69  tion.  ^An appli
5c90: 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20  cation can tell 
5ca0: 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20  which.course of 
5cb0: 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f  action SQLite to
5cc0: 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a  ok by using the.
5cd0: 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74  [sqlite3_get_aut
5ce0: 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e  ocommit()] C-lan
5cf0: 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e  guage interface.
5d00: 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72  </p>..<p>It is r
5d10: 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20  ecommended that 
5d20: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73  applications res
5d30: 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f  pond to the erro
5d40: 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20  rs.listed above 
5d50: 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73  by explicitly is
5d60: 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b  suing a ROLLBACK
5d70: 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20 74   command.  ^If t
5d80: 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  he .transaction 
5d90: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
5da0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74   rolled back aut
5db0: 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74 68  omatically.by th
5dc0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
5dd0: 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  , then the ROLLB
5de0: 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  ACK command will
5df0: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65 72   fail with an.er
5e00: 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d  ror, but no harm
5e10: 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74 68   is caused by th
5e20: 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75  is.</p>..<p>Futu
5e30: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
5e40: 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e 64  QLite may extend
5e50: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72 72   the list of err
5e60: 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74 20  ors which.might 
5e70: 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63 20  cause automatic 
5e80: 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c  transaction roll
5e90: 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76 65  back.  Future ve
5ea0: 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
5eb0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 68   might change th
5ec0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
5ed0: 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72  .  In particular
5ee0: 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20  , we may.choose 
5ef0: 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20  to simplify the 
5f00: 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75 74  interface in fut
5f10: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
5f20: 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69 6e  SQLite by.causin
5f30: 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62 6f  g the errors abo
5f40: 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20 75  ve to force an u
5f50: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c  nconditional rol
5f60: 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  lback.</p>..<tcl
5f70: 3e 0a 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 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5fc0: 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45 50  #.Section {SAVEP
5fd0: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
5fe0: 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45 41  {SAVEPOINT RELEA
5ff0: 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  SE}..RecursiveBu
6000: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65  bbleDiagram save
6010: 70 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75 72  point-stmt.Recur
6020: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
6030: 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 52  m release-stmt.R
6040: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
6050: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
6060: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
6070: 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20  ^SAVEPOINTs are 
6080: 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61  a method of crea
6090: 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e  ting transaction
60a0: 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42  s, similar to.[B
60b0: 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49  EGIN] and [COMMI
60c0: 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  T], except that 
60d0: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e  the SAVEPOINT an
60e0: 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  d RELEASE comman
60f0: 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64  ds.are named and
6100: 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c   may be nested.<
6110: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41  /p>..<p> ^The SA
6120: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20  VEPOINT command 
6130: 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72 61  starts a new tra
6140: 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20  nsaction with a 
6150: 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73  name..^The trans
6160: 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65  action names nee
6170: 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e  d not be unique.
6180: 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63  .^(A SAVEPOINT c
6190: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65 69  an be started ei
61a0: 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f  ther within or o
61b0: 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47  utside of.a [BEG
61c0: 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29  IN]...[COMMIT].)
61d0: 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45  ^  ^(When a SAVE
61e0: 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74  POINT is the out
61f0: 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  er-most savepoin
6200: 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20  t.and it is not 
6210: 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d  within a [BEGIN]
6220: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e  ...[COMMIT] then
6230: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
6240: 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47   the.same as BEG
6250: 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41 4e  IN DEFERRED TRAN
6260: 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a  SACTION.)^</p>..
6270: 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b  <p>^The ROLLBACK
6280: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65   TO command reve
6290: 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f 66  rts the state of
62a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 61   the database ba
62b0: 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61  ck to what.it wa
62c0: 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65  s just after the
62d0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53   corresponding S
62e0: 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65  AVEPOINT.  ^Note
62f0: 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61   that unlike tha
6300: 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43  t.plain [ROLLBAC
6310: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68  K] command (with
6320: 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f  out the TO keywo
6330: 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rd) the ROLLBACK
6340: 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73   TO command.does
6350: 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20   not cancel the 
6360: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49  transaction.  ^I
6370: 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c  nstead of cancel
6380: 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63  ling the transac
6390: 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41  tion,.the ROLLBA
63a0: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65  CK TO command re
63b0: 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e 73  starts the trans
63c0: 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20  action again at 
63d0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e  the beginning..^
63e0: 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20  All intervening 
63f0: 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63  SAVEPOINTs are c
6400: 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72  anceled, however
6410: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
6420: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69  ELEASE command i
6430: 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54  s like a [COMMIT
6440: 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  ] for a SAVEPOIN
6450: 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20  T..^The RELEASE 
6460: 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61  command causes a
6470: 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61  ll savepoints ba
6480: 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  ck to and includ
6490: 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65  ing the .most re
64a0: 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77  cent savepoint w
64b0: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
64c0: 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65  ame to be remove
64d0: 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e  d from the .tran
64e0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20  saction stack.  
64f0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20  ^The RELEASE of 
6500: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
6510: 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61  tion.does not ca
6520: 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  use any changes 
6530: 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f  to be written to
6540: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6550: 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65  le; it merely.re
6560: 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73  moves savepoints
6570: 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61   from the transa
6580: 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68  ction stack such
6590: 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c   that it is.no l
65a0: 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74  onger possible t
65b0: 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68  o ROLLBACK TO th
65c0: 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a  ose savepoints..
65d0: 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f  ^If a RELEASE co
65e0: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
65f0: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
6600: 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20  epoint, so.that 
6610: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6620: 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d  stack becomes em
6630: 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53  pty, then RELEAS
6640: 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73  E is the same.as
6650: 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20   [COMMIT]..^The 
6660: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
6670: 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20   may be used to 
6680: 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65  release all save
6690: 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69  points and.commi
66a0: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
66b0: 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74 72  n even if the tr
66c0: 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72  ansaction was or
66d0: 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64  iginally started
66e0: 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20  .by a SAVEPOINT 
66f0: 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20  command instead 
6700: 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  of a [BEGIN] com
6710: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  mand.</p>..<p>^I
6720: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
6730: 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53  name in a RELEAS
6740: 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  E command does n
6750: 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76  ot match any.sav
6760: 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  epoint currently
6770: 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74   in the transact
6780: 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20  ion stack, then 
6790: 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  no savepoints ar
67a0: 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20  e.released, the 
67b0: 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63 68  database is unch
67c0: 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52  anged, and the R
67d0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72  ELEASE command r
67e0: 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e  eturns.an error.
67f0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  </p>..<p>^Note t
6800: 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61  hat an inner tra
6810: 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63  nsaction might c
6820: 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65  ommit (using the
6830: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
6840: 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72  ).but then later
6850: 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75   have its work u
6860: 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42  ndone by a ROLLB
6870: 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20  ACK in an outer 
6880: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20  transaction..^A 
6890: 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72  power failure or
68a0: 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f   program crash o
68b0: 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20  r OS crash will 
68c0: 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d  cause the outer-
68d0: 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e  most.transaction
68e0: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e   to rollback, un
68f0: 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65  doing all change
6900: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
6910: 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74  rred within.that
6920: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
6930: 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73  on, even changes
6940: 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70 6f   that have suppo
6950: 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d  sedly been "comm
6960: 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52 45  itted".by the RE
6970: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  LEASE command.  
6980: 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20  ^Content is not 
6990: 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74  actually committ
69a0: 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a  ed on the disk .
69b0: 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d  until the outerm
69c0: 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost transaction 
69d0: 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  commits.</p>..<p
69e0: 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72  >There are sever
69f0: 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b  al ways of think
6a00: 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52 45  ing about the RE
6a10: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f  LEASE command:</
6a20: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ul>.<li><p>
6a30: 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65  .Some people vie
6a40: 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68 65  w RELEASE as the
6a50: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43   equivalent of C
6a60: 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45  OMMIT for a SAVE
6a70: 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61  POINT..This is a
6a80: 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69  n acceptable poi
6a90: 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f  nt of view as lo
6aa0: 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62  ng as one rememb
6ab0: 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68 61  ers that the.cha
6ac0: 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62  nges committed b
6ad0: 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  y an inner trans
6ae0: 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74  action might lat
6af0: 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20  er be undone by 
6b00: 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e  a.rollback in an
6b10: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
6b20: 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  on.</p></li>..<l
6b30: 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69  i><p>.Another vi
6b40: 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73  ew of RELEASE is
6b50: 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73 20   that it merges 
6b60: 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74  a named transact
6b70: 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72  ion into its.par
6b80: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ent transaction,
6b90: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d   so that the nam
6ba0: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  ed transaction a
6bb0: 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62 65  nd its parent be
6bc0: 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72  come.the same tr
6bd0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65  ansaction.  Afte
6be0: 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e  r RELEASE, the n
6bf0: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
6c00: 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a   and its parent.
6c10: 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72  will commit or r
6c20: 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72  ollback together
6c30: 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72  , whatever their
6c40: 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f   fate may be..</
6c50: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
6c60: 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68  .One can also th
6c70: 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ink of savepoint
6c80: 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20  s as."marks" in 
6c90: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6ca0: 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68  timeline.  In th
6cb0: 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41 56  is view, the SAV
6cc0: 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63  EPOINT command.c
6cd0: 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72  reates a new mar
6ce0: 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  k, the ROLLBACK 
6cf0: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e  TO command rewin
6d00: 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20  ds the timeline 
6d10: 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20  back.to a point 
6d20: 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20 6e  just after the n
6d30: 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74  amed mark, and t
6d40: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
6d50: 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20  nd.erases marks 
6d60: 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e  from the timelin
6d70: 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c  e without actual
6d80: 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68  ly making any.ch
6d90: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
6da0: 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  abase..</p></li>
6db0: 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72  .</ul>....<h3>Tr
6dc0: 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e  ansaction Nestin
6dd0: 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70  g Rules</h3>..<p
6de0: 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73  >^The last trans
6df0: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77  action started w
6e00: 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73 74  ill be the first
6e10: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d  .transaction com
6e20: 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64  mitted or rolled
6e30: 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   back.</p>..<p>^
6e40: 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  The [BEGIN] comm
6e50: 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69  and only works i
6e60: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
6e70: 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79  n stack is empty
6e80: 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f  , or.in other wo
6e90: 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72 65  rds if there are
6ea0: 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e   no pending tran
6eb0: 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74  sactions.  ^If t
6ec0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73  he transaction.s
6ed0: 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74  tack is not empt
6ee0: 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49  y when the [BEGI
6ef0: 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  N] command is in
6f00: 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20  voked, then the 
6f10: 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69  command.fails wi
6f20: 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  th an error.</p>
6f30: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49  ..<p>^The [COMMI
6f40: 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69  T] command commi
6f50: 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69  ts all outstandi
6f60: 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ng transactions 
6f70: 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74  and leaves.the t
6f80: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
6f90: 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e   empty.</p>..<p>
6fa0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
6fb0: 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74 68  mand starts with
6fc0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
6fd0: 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65   addition to the
6fe0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
6ff0: 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ck and releases 
7000: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77  savepoints backw
7010: 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e  ards .in time un
7020: 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20  til it releases 
7030: 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68  a savepoint with
7040: 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65   a matching save
7050: 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69  point-name..^Pri
7060: 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65  or savepoints, e
7070: 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77  ven savepoints w
7080: 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76  ith matching sav
7090: 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72  epoint-names, ar
70a0: 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66  e.unchanged..^If
70b0: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
70c0: 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a  mand causes the.
70d0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
70e0: 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74  k to become empt
70f0: 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41 53  y (if the RELEAS
7100: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73  E command releas
7110: 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74  es the.outermost
7120: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f   transaction fro
7130: 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68 65  m the stack) the
7140: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
7150: 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a  n commits.</p>..
7160: 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43  <p>^The [ROLLBAC
7170: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f  K] command witho
7180: 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72  ut a TO clause r
7190: 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74  olls backs all t
71a0: 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20  ransactions.and 
71b0: 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e 73  leaves the trans
71c0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70  action stack emp
71d0: 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ty.</p>..<p>^The
71e0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
71f0: 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75  d with a TO clau
7200: 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72  se rolls back tr
7210: 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67  ansactions going
7220: 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69  .backwards in ti
7230: 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d  me back to the m
7240: 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45 50  ost recent SAVEP
7250: 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63  OINT with a matc
7260: 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20  hing name..^The 
7270: 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74  SAVEPOINT with t
7280: 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65  he matching name
7290: 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20   remains on the 
72a0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
72b0: 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62  k,.but all datab
72c0: 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61 74  ase changes that
72d0: 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72 20   occurred after 
72e0: 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77  that SAVEPOINT w
72f0: 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20 72  as created.are r
7300: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66  olled back.  ^If
7310: 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e   the savepoint-n
7320: 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43  ame in a ROLLBAC
7330: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  K TO command doe
7340: 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20  s not.match any 
7350: 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65  SAVEPOINT on the
7360: 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65   stack, then the
7370: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
7380: 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a  d fails with an.
7390: 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73  error and leaves
73a0: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
73b0: 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68 61  e database uncha
73c0: 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  nged.</p>..<tcl>
73d0: 0a 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 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7420: 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74  .Section comment
7430: 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e   comment {commen
7440: 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65  t *comments}..Re
7450: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
7460: 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e  gram comment-syn
7470: 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tax.</tcl>..<p>^
7480: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74  Comments are not
7490: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62   SQL commands, b
74a0: 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74  ut can occur wit
74b0: 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a  hin the text of.
74c0: 53 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73  SQL queries pass
74d0: 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70  ed to [sqlite3_p
74e0: 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64  repare_v2()] and
74f0: 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61   related interfa
7500: 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61  ces..^Comments a
7510: 72 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68  re treated as wh
7520: 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20  itespace by the 
7530: 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74  parser..^Comment
7540: 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77  s can begin anyw
7550: 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20  here whitespace 
7560: 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69  .can be found, i
7570: 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20  ncluding inside 
7580: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
7590: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
75a0: 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines..</p>..<p>^
75b0: 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  SQL comments beg
75c0: 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73  in with two cons
75d0: 65 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72  ecutive "-" char
75e0: 61 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78  acters (ASCII 0x
75f0: 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75  2d).and extend u
7600: 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
7610: 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c  ng the next newl
7620: 69 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41  ine character (A
7630: 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e  SCII 0x0a).or un
7640: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
7650: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
7660: 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e  comes first.</p>
7670: 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f  ..<p>^C-style co
7680: 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74  mments begin.wit
7690: 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e  h "/*" and exten
76a0: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
76b0: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22  uding the next "
76c0: 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61  */" character pa
76d0: 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  ir.or until the 
76e0: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
76f0: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
7700: 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63  rst.  ^C-style c
7710: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
7720: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
7730: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65   </p>..<p>^Comme
7740: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
7750: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
7760: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
7770: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
7780: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
7790: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
77a0: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
77b0: 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  ents..^Comments 
77c0: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70  do not nest..</p
77d0: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
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 23 23 23 23 23 23 23  ################
7800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7820: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
7830: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20   {CREATE INDEX} 
7840: 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52  createindex {{CR
7850: 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52 65  EATE INDEX}}..Re
7860: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
7870: 67 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65  gram create-inde
7880: 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
7890: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e  p>^The CREATE IN
78a0: 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73  DEX command cons
78b0: 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77  ists of the keyw
78c0: 6f 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44  ords "CREATE IND
78d0: 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20  EX" followed.by 
78e0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
78f0: 6e 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b  new index, the k
7900: 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65  eyword "ON", the
7910: 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69   name of a previ
7920: 6f 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61  ously.created ta
7930: 62 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62  ble that is to b
7940: 65 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61  e indexed, and a
7950: 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
7960: 69 73 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66 0a  ist of names of.
7970: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
7980: 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 75 73  able that are us
7990: 65 64 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78  ed for the index
79a0: 20 6b 65 79 2e 0a 49 66 20 74 68 65 20 6f 70 74   key..If the opt
79b0: 69 6f 6e 61 6c 20 57 48 45 52 45 20 63 6c 61 75  ional WHERE clau
79c0: 73 65 20 69 73 20 69 6e 63 6c 75 64 65 64 2c 20  se is included, 
79d0: 74 68 65 6e 20 74 68 65 20 69 6e 64 65 78 20 69  then the index i
79e0: 73 20 61 20 22 5b 70 61 72 74 69 61 6c 20 69 6e  s a "[partial in
79f0: 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  dex]"..</p>..<tc
7a00: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 64  l>hd_fragment {d
7a10: 65 73 63 69 64 78 7d 20 7b 64 65 73 63 65 6e 64  escidx} {descend
7a20: 69 6e 67 20 69 6e 64 69 63 65 73 7d 20 7b 64 65  ing indices} {de
7a30: 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 7d 20  scending index} 
7a40: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65  {descending inde
7a50: 78 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45  xes}</tcl>.<p>^E
7a60: 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ach column name 
7a70: 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  can be followed 
7a80: 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 22 41  by one of the "A
7a90: 53 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65  SC" or "DESC" ke
7aa0: 79 77 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63 61  ywords.to indica
7ab0: 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20  te sort order.  
7ac0: 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20  ^The sort order 
7ad0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
7ae0: 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64  e ignored depend
7af0: 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62  ing.on the datab
7b00: 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c  ase file format,
7b10: 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63 75 6c   and in particul
7b20: 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61 20 66  ar the [schema f
7b30: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e  ormat number]..^
7b40: 54 68 65 20 22 6c 65 67 61 63 79 22 20 73 63 68  The "legacy" sch
7b50: 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29 20 69  ema format (1) i
7b60: 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72  gnores index.sor
7b70: 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 64  t order.  ^The d
7b80: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20  escending index 
7b90: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 34  schema format (4
7ba0: 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f  ) takes index so
7bb0: 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63  rt order.into ac
7bc0: 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65 72  count.  Only ver
7bd0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
7be0: 33 2e 33 2e 30 20 61 6e 64 20 6c 61 74 65 72 20  3.3.0 and later 
7bf0: 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65  are able to unde
7c00: 72 73 74 61 6e 64 0a 74 68 65 20 64 65 73 63 65  rstand.the desce
7c10: 6e 64 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 6d  nding index form
7c20: 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69 62  at. For compatib
7c30: 69 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20 6f  ility, version o
7c40: 66 20 53 51 4c 69 74 65 20 62 65 74 77 65 65 6e  f SQLite between
7c50: 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e 39   3.3.0.and 3.7.9
7c60: 20 75 73 65 20 74 68 65 20 6c 65 67 61 63 79 20   use the legacy 
7c70: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62 79  schema format by
7c80: 20 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20 6e   default.  The n
7c90: 65 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72 6d  ewer schema form
7ca0: 61 74 20 69 73 0a 75 73 65 64 20 62 79 20 64 65  at is.used by de
7cb0: 66 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f 6e  fault in version
7cc0: 20 33 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74 65   3.7.10 and late
7cd0: 72 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f  r..^The [legacy_
7ce0: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67  file_format prag
7cf0: 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20  ma] can be used 
7d00: 74 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74 68  to change set th
7d10: 65 20 73 70 65 63 69 66 69 63 0a 62 65 68 61 76  e specific.behav
7d20: 69 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72 73  ior for any vers
7d30: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ion of SQLite.</
7d40: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c  p>..<p>^The COLL
7d50: 41 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f  ATE clause optio
7d60: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20  nally following 
7d70: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  each column name
7d80: 20 64 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c 61   defines a.colla
7d90: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73  ting sequence us
7da0: 65 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74 72  ed for text entr
7db0: 69 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c 75  ies in that colu
7dc0: 6d 6e 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  mn..^The default
7dd0: 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65   collating.seque
7de0: 6e 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c 61  nce is the colla
7df0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65  ting sequence de
7e00: 66 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20 63  fined for that c
7e10: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43 52  olumn in the.[CR
7e20: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
7e30: 65 6d 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20 6e  ement.  ^Or if n
7e40: 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  o collating sequ
7e50: 65 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69 73  ence is otherwis
7e60: 65 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62  e defined,.the b
7e70: 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63  uilt-in BINARY c
7e80: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
7e90: 65 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  e is used.</p>..
7ea0: 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20  <p>There are no 
7eb0: 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73  arbitrary limits
7ec0: 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
7ed0: 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63  f indices that c
7ee0: 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74  an be.attached t
7ef0: 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
7f00: 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20  .  ^(The number 
7f10: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e  of columns in an
7f20: 20 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74   index is .limit
7f30: 65 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  ed to the value 
7f40: 73 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f  set by.[sqlite3_
7f50: 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c  limit]([SQLITE_L
7f60: 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e  IMIT_COLUMN],...
7f70: 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ).)^</p>..<tcl>h
7f80: 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75  d_fragment uniqu
7f90: 65 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64  eidx {unique ind
7fa0: 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66  ex}</tcl>.<p>^If
7fb0: 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77   the UNIQUE keyw
7fc0: 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77  ord appears betw
7fd0: 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49  een CREATE and I
7fe0: 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63  NDEX then duplic
7ff0: 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65  ate.index entrie
8000: 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  s are not allowe
8010: 64 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74  d.  ^Any attempt
8020: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70   to insert a dup
8030: 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c  licate entry.wil
8040: 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65  l result in an e
8050: 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20  rror.  ^For the 
8060: 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71  purposes of uniq
8070: 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20  ue indices, all 
8080: 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20  NULL values.are 
8090: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69  considered to di
80a0: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c  fferent from all
80b0: 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
80c0: 65 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20  es and are thus 
80d0: 75 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20  unique..This is 
80e0: 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70  one of the two p
80f0: 6f 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65  ossible interpre
8100: 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53  tations of the S
8110: 51 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28  QL-92 standard.(
8120: 74 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20  the language in 
8130: 74 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20  the standard is 
8140: 61 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69  ambiguous) and i
8150: 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 61  s the interpreta
8160: 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79  tion.followed by
8170: 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53   PostgreSQL, MyS
8180: 51 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e  QL, Firebird, an
8190: 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72  d Oracle.  Infor
81a0: 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66  mix and.Microsof
81b0: 74 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c  t SQL Server fol
81c0: 6c 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e  low the other in
81d0: 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
81e0: 74 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70  the standard.</p
81f0: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70  >..<p>^If the op
8200: 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58  tional IF NOT EX
8210: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
8220: 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68  resent and anoth
8230: 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68  er index.with th
8240: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65  e same name alre
8250: 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e  ady exists, then
8260: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65   this command be
8270: 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f  comes a no-op.</
8280: 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20  p>..<p>^Indexes 
8290: 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68  are removed with
82a0: 20 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58   the [DROP INDEX
82b0: 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a  ] command.</p>..
82c0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
82d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8310: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
8320: 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72  REATE TABLE} {cr
8330: 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45  eatetable} {{CRE
8340: 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ATE TABLE}}..Rec
8350: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
8360: 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65  ram create-table
8370: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
8380: 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41 42  >The "CREATE TAB
8390: 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  LE" command is u
83a0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
83b0: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20  new table in an 
83c0: 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65  SQLite .database
83d0: 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c 45  . A CREATE TABLE
83e0: 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69   command specifi
83f0: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
8400: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74   attributes of t
8410: 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c  he.new table:..<
8420: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65  ul>.  <li><p>The
8430: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77   name of the new
8440: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
8450: 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65 20  p> The database 
8460: 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65 77  in which the new
8470: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
8480: 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65  d. Tables may be
8490: 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64 20   .      created 
84a0: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
84b0: 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64  base, the temp d
84c0: 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61  atabase, or in a
84d0: 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20 20  ny attached.    
84e0: 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c    database...  <
84f0: 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20  li><p> The name 
8500: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
8510: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20  n the table...  
8520: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c  <li><p> The decl
8530: 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63  ared type of eac
8540: 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
8550: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
8560: 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75  > A default valu
8570: 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20  e or expression 
8580: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
8590: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
85a0: 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75   <li><p> A defau
85b0: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
85c0: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74  uence to use wit
85d0: 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a  h each column...
85e0: 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e    <li><p> Option
85f0: 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20  ally, a PRIMARY 
8600: 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
8610: 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63  e. Both single c
8620: 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20  olumn and.      
8630: 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74   composite (mult
8640: 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69  iple column) pri
8650: 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73 75  mary keys are su
8660: 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e  pported...  <li>
8670: 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c  <p> A set of SQL
8680: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72   constraints for
8690: 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c   each table. SQL
86a0: 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49  ite supports UNI
86b0: 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20  QUE, NOT.       
86c0: 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20  NULL, CHECK and 
86d0: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
86e0: 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e  traints...  <li>
86f0: 3c 70 3e 20 57 68 65 74 68 65 72 20 74 68 65 20  <p> Whether the 
8700: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
8710: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
8720: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72  ..</ul>..<p>Ever
8730: 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  y CREATE TABLE s
8740: 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70  tatement must sp
8750: 65 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72  ecify a name for
8760: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a   the new table..
8770: 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20    ^(Table names 
8780: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
8790: 22 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65  "sqlite_" are re
87a0: 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72  served for inter
87b0: 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73  nal use. It.  is
87c0: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74   an error to att
87d0: 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61  empt to create a
87e0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61   table with a na
87f0: 6d 65 20 74 68 61 74 20 73 74 61 72 74 73 20 77  me that starts w
8800: 69 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e  ith.  "sqlite_".
8810: 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c  )^..<p> ^If a &l
8820: 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26  t;database-name&
8830: 67 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64  gt; is specified
8840: 2c 20 69 74 20 6d 75 73 74 20 62 65 20 65 69 74  , it must be eit
8850: 68 65 72 20 22 6d 61 69 6e 22 2c 20 0a 20 20 22  her "main", .  "
8860: 74 65 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61  temp", or the na
8870: 6d 65 20 6f 66 20 61 6e 20 5b 41 54 54 41 43 48  me of an [ATTACH
8880: 20 44 41 54 41 42 41 53 45 7c 61 74 74 61 63 68   DATABASE|attach
8890: 65 64 20 64 61 74 61 62 61 73 65 5d 2e 20 5e 49  ed database]. ^I
88a0: 6e 20 74 68 69 73 20 63 61 73 65 0a 20 20 74 68  n this case.  th
88b0: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63  e new table is c
88c0: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6e 61  reated in the na
88d0: 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49  med database. ^I
88e0: 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20  f the "TEMP" or 
88f0: 22 54 45 4d 50 4f 52 41 52 59 22 0a 20 20 6b 65  "TEMPORARY".  ke
8900: 79 77 6f 72 64 20 6f 63 63 75 72 73 20 62 65 74  yword occurs bet
8910: 77 65 65 6e 20 74 68 65 20 22 43 52 45 41 54 45  ween the "CREATE
8920: 22 20 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68  " and "TABLE" th
8930: 65 6e 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  en the new table
8940: 20 69 73 0a 20 20 63 72 65 61 74 65 64 20 69 6e   is.  created in
8950: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
8960: 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72  se. ^It is an er
8970: 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62  ror to specify b
8980: 6f 74 68 20 61 20 0a 20 20 26 6c 74 3b 64 61 74  oth a .  &lt;dat
8990: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 61  abase-name&gt; a
89a0: 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54  nd the TEMP or T
89b0: 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64  EMPORARY keyword
89c0: 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20 26  , unless the.  &
89d0: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
89e0: 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20  &gt; is "temp". 
89f0: 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20  ^If no database 
8a00: 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
8a10: 64 20 61 6e 64 20 74 68 65 0a 20 20 54 45 4d 50  d and the.  TEMP
8a20: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
8a30: 70 72 65 73 65 6e 74 20 74 68 65 6e 20 74 68 65  present then the
8a40: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
8a50: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 0a 20 20  d in the main.  
8a60: 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 0a 20  database...<p>. 
8a70: 20 5e 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20   ^It is usually 
8a80: 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65  an error to atte
8a90: 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20  mpt to create a 
8aa0: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64  new table in a d
8ab0: 61 74 61 62 61 73 65 20 74 68 61 74 0a 20 20 61  atabase that.  a
8ac0: 6c 72 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20  lready contains 
8ad0: 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f  a table, index o
8ae0: 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  r view of the sa
8af0: 6d 65 20 6e 61 6d 65 2e 20 5e 48 6f 77 65 76 65  me name. ^Howeve
8b00: 72 2c 20 69 66 20 74 68 65 0a 20 20 22 49 46 20  r, if the.  "IF 
8b10: 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75  NOT EXISTS" clau
8b20: 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  se is specified 
8b30: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43  as part of the C
8b40: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
8b50: 65 6d 65 6e 74 20 61 6e 64 0a 20 20 61 20 74 61  ement and.  a ta
8b60: 62 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 20 74  ble or view of t
8b70: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72  he same name alr
8b80: 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65  eady exists, the
8b90: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
8ba0: 6d 6d 61 6e 64 0a 20 20 73 69 6d 70 6c 79 20 68  mmand.  simply h
8bb0: 61 73 20 6e 6f 20 65 66 66 65 63 74 20 28 61 6e  as no effect (an
8bc0: 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61  d no error messa
8bd0: 67 65 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e  ge is returned).
8be0: 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 73 74   ^An error is st
8bf0: 69 6c 6c 0a 20 20 72 65 74 75 72 6e 65 64 20 69  ill.  returned i
8c00: 66 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 6e  f the table cann
8c10: 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 62 65  ot be created be
8c20: 63 61 75 73 65 20 6f 66 20 61 6e 20 65 78 69 73  cause of an exis
8c30: 74 69 6e 67 20 69 6e 64 65 78 2c 20 65 76 65 6e  ting index, even
8c40: 20 0a 20 20 69 66 20 74 68 65 20 22 49 46 20 4e   .  if the "IF N
8c50: 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73  OT EXISTS" claus
8c60: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
8c70: 0a 3c 70 3e 5e 49 74 20 69 73 20 6e 6f 74 20 61  .<p>^It is not a
8c80: 6e 20 65 72 72 6f 72 20 74 6f 20 63 72 65 61 74  n error to creat
8c90: 65 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 68  e a table that h
8ca0: 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
8cb0: 20 61 73 20 61 6e 20 0a 20 20 65 78 69 73 74 69   as an .  existi
8cc0: 6e 67 20 5b 43 52 45 41 54 45 20 54 52 49 47 47  ng [CREATE TRIGG
8cd0: 45 52 7c 74 72 69 67 67 65 72 5d 2e 0a 0a 3c 70  ER|trigger]...<p
8ce0: 3e 5e 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d  >^Tables are rem
8cf0: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
8d00: 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74  DROP TABLE] stat
8d10: 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 68  ement.  </p>..<h
8d20: 33 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e  3>CREATE TABLE .
8d30: 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 53 74 61  .. AS SELECT Sta
8d40: 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70  tements</h3>..<p
8d50: 3e 5e 28 41 20 22 43 52 45 41 54 45 20 54 41 42  >^(A "CREATE TAB
8d60: 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54  LE ... AS SELECT
8d70: 22 20 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61  " statement crea
8d80: 74 65 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65  tes and populate
8d90: 73 20 61 20 64 61 74 61 62 61 73 65 0a 74 61 62  s a database.tab
8da0: 6c 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  le based on the 
8db0: 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
8dc0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e  ECT statement.)^
8dd0: 20 5e 28 54 68 65 20 74 61 62 6c 65 20 68 61 73   ^(The table has
8de0: 20 74 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72   the same.number
8df0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74   of columns as t
8e00: 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  he rows returned
8e10: 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
8e20: 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61  tatement. The na
8e30: 6d 65 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d  me of.each colum
8e40: 6e 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  n is the same as
8e50: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
8e60: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63   corresponding c
8e70: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73  olumn in the res
8e80: 75 6c 74 0a 73 65 74 20 6f 66 20 74 68 65 20 53  ult.set of the S
8e90: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
8ea0: 29 5e 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65  )^ ^(The declare
8eb0: 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  d type of each c
8ec0: 6f 6c 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69  olumn is determi
8ed0: 6e 65 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72  ned.by the [expr
8ee0: 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d  ession affinity]
8ef0: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
8f00: 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nding expression
8f10: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
8f20: 65 74 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et.of the SELECT
8f30: 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66   statement, as f
8f40: 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63  ollows:.</p>..<c
8f50: 65 6e 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72  enter><table bor
8f60: 64 65 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68  der=1>.  <tr><th
8f70: 3e 45 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69  >Expression Affi
8f80: 6e 69 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d  nity   <th>Colum
8f90: 6e 20 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a  n Declared Type.
8fa0: 20 20 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20    <tr><td>TEXT  
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fc0: 3c 74 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72  <td>"TEXT".  <tr
8fd0: 3e 3c 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20  ><td>NUMERIC    
8fe0: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
8ff0: 4e 55 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49  NUM".  <tr><td>I
9000: 4e 54 45 47 45 52 20 20 20 20 20 20 20 20 20 20  NTEGER          
9010: 20 20 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20       <td>"INT". 
9020: 20 3c 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20   <tr><td>REAL   
9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
9040: 74 64 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e  td>"REAL".  <tr>
9050: 3c 74 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20  <td>NONE        
9060: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22            <td>""
9070: 20 28 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a   (empty string).
9080: 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72  </table></center
9090: 3e 29 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c  >)^..<p>^(A tabl
90a0: 65 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  e created using 
90b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20  CREATE TABLE AS 
90c0: 68 61 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b  has no PRIMARY K
90d0: 45 59 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72  EY and no.constr
90e0: 61 69 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e  aints of any kin
90f0: 64 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  d. The default v
9100: 61 6c 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  alue of each col
9110: 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65  umn is NULL. The
9120: 20 64 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69   default.collati
9130: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  on sequence for 
9140: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  each column of t
9150: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20  he new table is 
9160: 42 49 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54  BINARY.)^..<p>^T
9170: 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73  ables created us
9180: 69 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45  ing CREATE TABLE
9190: 20 41 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c   AS are initiall
91a0: 79 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68  y populated with
91b0: 20 74 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74   the.rows of dat
91c0: 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  a returned by th
91d0: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
91e0: 6e 74 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73  nt. ^Rows are as
91f0: 73 69 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75  signed contiguou
9200: 73 6c 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72  sly.ascending [r
9210: 6f 77 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74  owid] values, st
9220: 61 72 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69  arting with 1, i
9230: 6e 20 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c  n the [order by|
9240: 6f 72 64 65 72 5d 20 74 68 61 74 20 74 68 65 79  order] that they
9250: 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79  .are returned by
9260: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
9270: 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ement...<tcl>hd_
9280: 66 72 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63  fragment {tablec
9290: 6f 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64  oldef} {column d
92a0: 65 66 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75  efinition} {colu
92b0: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c  mn definitions}<
92c0: 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e  /tcl>.<h3>Column
92d0: 20 44 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33   Definitions</h3
92e0: 3e 0a 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20  >..<p>Unless it 
92f0: 69 73 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  is a CREATE TABL
9300: 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20  E ... AS SELECT 
9310: 73 74 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45  statement, a CRE
9320: 41 54 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64  ATE TABLE includ
9330: 65 73 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b  es.one or more [
9340: 63 6f 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d  column-def|colum
9350: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20  n definitions], 
9360: 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
9370: 77 65 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66  wed by a list of
9380: 0a 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69  .[table-constrai
9390: 6e 74 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61  nt|table constra
93a0: 69 6e 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c  ints].  Each col
93b0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63  umn definition c
93c0: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e  onsists of the.n
93d0: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
93e0: 6e 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  n, optionally fo
93f0: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 64 65  llowed by the de
9400: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
9410: 68 65 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20  he column,.then 
9420: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69  one or more opti
9430: 6f 6e 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e  onal [column-con
9440: 73 74 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63  straint|column c
9450: 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63  onstraints]. Inc
9460: 6c 75 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66  luded in.the def
9470: 69 6e 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75  inition of "colu
9480: 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20  mn constraints" 
9490: 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
94a0: 20 6f 66 20 74 68 65 20 70 72 65 76 69 6f 75 73   of the previous
94b0: 0a 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74  .statement are t
94c0: 68 65 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44  he COLLATE and D
94d0: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20  EFAULT clauses, 
94e0: 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73  even though thes
94f0: 65 20 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79  e are not really
9500: 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20  .constraints in 
9510: 74 68 65 20 73 65 6e 73 65 20 74 68 61 74 20 74  the sense that t
9520: 68 65 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72  hey do not restr
9530: 69 63 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ict the data tha
9540: 74 20 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a  t the table may.
9550: 63 6f 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68  contain. The oth
9560: 65 72 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d  er constraints -
9570: 20 4e 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b   NOT NULL, CHECK
9580: 2c 20 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52  , UNIQUE, PRIMAR
9590: 59 20 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47  Y KEY and.FOREIG
95a0: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
95b0: 73 20 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72  s - impose restr
95c0: 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74  ictions on the t
95d0: 61 62 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20  ables data, and 
95e0: 61 72 65 20 61 72 65 0a 64 65 73 63 72 69 62 65  are are.describe
95f0: 64 20 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61  d under [constra
9600: 69 6e 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f  ints|SQL Data Co
9610: 6e 73 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77  nstraints] below
9620: 2e 0a 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f  ...<p>^Unlike mo
9630: 73 74 20 53 51 4c 20 64 61 74 61 62 61 73 65 73  st SQL databases
9640: 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
9650: 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20 74  t restrict the t
9660: 79 70 65 20 6f 66 20 64 61 74 61 20 74 68 61 74  ype of data that
9670: 0a 6d 61 79 20 62 65 20 69 6e 73 65 72 74 65 64  .may be inserted
9680: 20 69 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62   into a column b
9690: 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75  ased on the colu
96a0: 6d 6e 73 20 64 65 63 6c 61 72 65 64 20 74 79 70  mns declared typ
96b0: 65 2e 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69  e. Instead,.SQLi
96c0: 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63  te uses [dynamic
96d0: 20 74 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64   typing]. ^The d
96e0: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
96f0: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  a column is used
9700: 20 74 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68   to.determine th
9710: 65 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20  e [affinity] of 
9720: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e  the column only.
9730: 0a 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54  ..<p>The DEFAULT
9740: 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
9750: 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  s a default valu
9760: 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65  e to use for the
9770: 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61   column if no.va
9780: 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c  lue is explicitl
9790: 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  y provided by th
97a0: 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e  e user when doin
97b0: 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e  g an [INSERT]. ^
97c0: 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65  If there.is no e
97d0: 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20  xplicit DEFAULT 
97e0: 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
97f0: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
9800: 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nition, then the
9810: 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20   .default value 
9820: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  of the column is
9830: 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c   NULL. ^(An expl
9840: 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61  icit DEFAULT cla
9850: 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a  use may specify.
9860: 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  that the default
9870: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
9880: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  a string constan
9890: 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61  t, a blob consta
98a0: 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d  nt, a.signed-num
98b0: 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73  ber, or any cons
98c0: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
98d0: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65  enclosed in pare
98e0: 6e 74 68 65 73 65 73 2e 20 41 0a 64 65 66 61 75  ntheses. A.defau
98f0: 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73  lt value may als
9900: 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  o be one of the 
9910: 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64  special case-ind
9920: 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f 72 64  ependent keyword
9930: 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  s.CURRENT_TIME, 
9940: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20  CURRENT_DATE or 
9950: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
9960: 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75  P.)^ ^For the pu
9970: 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a 44 45  rposes of the.DE
9980: 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61 6e  FAULT clause, an
9990: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63   expression is c
99a0: 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73 74 61  onsidered consta
99b0: 6e 74 20 69 66 20 69 74 20 64 6f 65 73 0a 63 6f  nt if it does.co
99c0: 6e 74 61 69 6e 73 20 6e 6f 20 73 75 62 2d 71 75  ntains no sub-qu
99d0: 65 72 69 65 73 2c 20 63 6f 6c 75 6d 6e 20 6f 72  eries, column or
99e0: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
99f0: 73 2c 20 5b 62 6f 75 6e 64 20 70 61 72 61 6d 65  s, [bound parame
9a00: 74 65 72 73 5d 2c 0a 6f 72 20 73 74 72 69 6e 67  ters],.or string
9a10: 20 6c 69 74 65 72 61 6c 73 20 65 6e 63 6c 6f 73   literals enclos
9a20: 65 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f  ed in double-quo
9a30: 74 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20 73  tes instead of s
9a40: 69 6e 67 6c 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c  ingle-quotes...<
9a50: 70 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20  p>^(Each time a 
9a60: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
9a70: 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  into the table b
9a80: 79 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  y an INSERT stat
9a90: 65 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73  ement that .does
9aa0: 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70   not provide exp
9ab0: 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72  licit values for
9ac0: 20 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d   all table colum
9ad0: 6e 73 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  ns the values st
9ae0: 6f 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20  ored in.the new 
9af0: 72 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e  row are determin
9b00: 65 64 20 62 79 20 74 68 65 69 72 20 64 65 66 61  ed by their defa
9b10: 75 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73  ult values)^, as
9b20: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a   follows:..<ul>.
9b30: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9b40: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9b50: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  f the column is 
9b60: 61 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c  a constant NULL,
9b70: 20 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20   text, blob or. 
9b80: 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72     signed-number
9b90: 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61   value, then tha
9ba0: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
9bb0: 64 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20  directly in the 
9bc0: 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e  new row...  <li>
9bd0: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
9be0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f  lt value of a co
9bf0: 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
9c00: 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68  ssion in parenth
9c10: 65 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74  eses, then.    t
9c20: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
9c30: 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
9c40: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
9c50: 65 72 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  erted and the re
9c60: 73 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69  sults.    used i
9c70: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a  n the new row...
9c80: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9c90: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9ca0: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55  f a column is CU
9cb0: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
9cc0: 45 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20  ENT_DATE or.    
9cd0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
9ce0: 50 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  P, then the valu
9cf0: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65  e used in the ne
9d00: 77 20 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a  w row is a text.
9d10: 20 20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69      representati
9d20: 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  on of the curren
9d30: 74 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f  t UTC date and/o
9d40: 72 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52  r time. ^For CUR
9d50: 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20  RENT_TIME, the. 
9d60: 20 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65     format of the
9d70: 20 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d   value is "HH:MM
9d80: 3a 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45  :SS". ^For CURRE
9d90: 4e 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d  NT_DATE, "YYYY-M
9da0: 4d 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20  M-DD". ^The.    
9db0: 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45  format for CURRE
9dc0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20  NT_TIMESTAMP is 
9dd0: 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  "YYYY-MM-DD HH:M
9de0: 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  M:SS"..</ul>..<p
9df0: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
9e00: 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
9e10: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f  he name of a [co
9e20: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
9e30: 5d 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20  ] to use as.the 
9e40: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
9e50: 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74  n sequence for t
9e60: 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e  he column. ^If n
9e70: 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  o COLLATE clause
9e80: 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
9e90: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
9ea0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
9eb0: 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e   [BINARY]...<p>^
9ec0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
9ed0: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
9ee0: 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74   is limited by t
9ef0: 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43  he [SQLITE_MAX_C
9f00: 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74  OLUMN].compile-t
9f10: 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e  ime parameter. ^
9f20: 41 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  A single row of 
9f30: 61 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73  a table cannot s
9f40: 74 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b  tore more than.[
9f50: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
9f60: 48 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  H] bytes of data
9f70: 2e 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65  . ^Both of these
9f80: 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c   limits can be l
9f90: 6f 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d  owered at.runtim
9fa0: 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  e using the [sql
9fb0: 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f  ite3_limit()] C/
9fc0: 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  C++ interface.</
9fd0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
9fe0: 6d 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74  ment {constraint
9ff0: 73 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d  s} {constraints}
a000: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44  </tcl>.<h3>SQL D
a010: 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c  ata Constraints<
a020: 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /h3>..<tcl>hd_fr
a030: 61 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f  agment primkeyco
a040: 6e 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59  nst {PRIMARY KEY
a050: 7d 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63  } {PRIMARY KEY c
a060: 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e  onstraint}</tcl>
a070: 0a 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20  .<p>^Each table 
a080: 69 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61  in SQLite may ha
a090: 76 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c  ve at most one <
a0a0: 62 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62  b>PRIMARY KEY</b
a0b0: 3e 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79  >. ^If the.  key
a0c0: 77 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45  words PRIMARY KE
a0d0: 59 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  Y are added to a
a0e0: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
a0f0: 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69  on, then the pri
a100: 6d 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74  mary key.  for t
a110: 68 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74  he table consist
a120: 73 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65  s of that single
a130: 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66   column. ^Or, if
a140: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
a150: 6c 61 75 73 65 20 0a 20 20 69 73 20 73 70 65 63  lause .  is spec
a160: 69 66 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c  ified as a [tabl
a170: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74  e-constraint], t
a180: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
a190: 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
a1a0: 0a 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  .  consists of t
a1b0: 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  he list of colum
a1c0: 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ns specified as 
a1d0: 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d  part of the PRIM
a1e0: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a  ARY KEY clause..
a1f0: 20 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 72    ^An error is r
a200: 61 69 73 65 64 20 69 66 20 6d 6f 72 65 20 74 68  aised if more th
a210: 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b  an one PRIMARY K
a220: 45 59 20 63 6c 61 75 73 65 20 61 70 70 65 61 72  EY clause appear
a230: 73 20 69 6e 20 61 0a 20 20 43 52 45 41 54 45 20  s in a.  CREATE 
a240: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
a250: 20 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b    ^The PRIMARY K
a260: 45 59 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66  EY is optional f
a270: 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  or ordinary tabl
a280: 65 73 0a 20 20 62 75 74 20 69 73 20 72 65 71 75  es.  but is requ
a290: 69 72 65 64 20 66 6f 72 20 5b 57 49 54 48 4f 55  ired for [WITHOU
a2a0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e  T ROWID] tables.
a2b0: 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20  ..<p>If a table 
a2c0: 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  has a single col
a2d0: 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 20  umn primary key 
a2e0: 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64  and the declared
a2f0: 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20 20   type of that.  
a300: 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47  column is "INTEG
a310: 45 52 22 20 61 6e 64 20 74 68 65 20 74 61 62 6c  ER" and the tabl
a320: 65 20 69 73 20 6e 6f 74 20 61 20 5b 57 49 54 48  e is not a [WITH
a330: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
a340: 2c 0a 20 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  ,.  then the col
a350: 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20  umn is known as 
a360: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
a370: 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20  ARY KEY]..  See 
a380: 62 65 6c 6f 77 20 66 6f 72 20 61 20 64 65 73 63  below for a desc
a390: 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ription of the s
a3a0: 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74 69 65  pecial propertie
a3b0: 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72 73 0a  s and behaviors.
a3c0: 20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74    associated wit
a3d0: 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52  h an [INTEGER PR
a3e0: 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e  IMARY KEY]...<p>
a3f0: 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61 20 74  ^Each row in a t
a400: 61 62 6c 65 20 77 69 74 68 20 61 20 70 72 69 6d  able with a prim
a410: 61 72 79 20 6b 65 79 20 6d 75 73 74 20 68 61 76  ary key must hav
a420: 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69  e a unique combi
a430: 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75  nation.  of valu
a440: 65 73 20 69 6e 20 69 74 73 20 70 72 69 6d 61 72  es in its primar
a450: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e  y key columns. ^
a460: 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
a470: 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a   of determining.
a480: 20 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73    the uniqueness
a490: 20 6f 66 20 70 72 69 6d 61 72 79 20 6b 65 79 20   of primary key 
a4a0: 76 61 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61 6c  values, NULL val
a4b0: 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
a4c0: 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ed distinct from
a4d0: 0a 20 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c  .  all other val
a4e0: 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f  ues, including o
a4f0: 74 68 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66 20  ther NULLs. ^If 
a500: 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b  an [INSERT] or [
a510: 55 50 44 41 54 45 5d 0a 20 20 73 74 61 74 65 6d  UPDATE].  statem
a520: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
a530: 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65  modify the table
a540: 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74   content so that
a550: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77   two or more row
a560: 73 0a 20 20 68 61 76 65 20 69 64 65 6e 74 69 63  s.  have identic
a570: 61 6c 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76  al primary key v
a580: 61 6c 75 65 73 2c 20 74 68 61 74 20 69 73 20 61  alues, that is a
a590: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
a5a0: 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 20 41 63 63 6f  ation...<p> Acco
a5b0: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 53 51 4c  rding to the SQL
a5c0: 20 73 74 61 6e 64 61 72 64 2c 20 50 52 49 4d 41   standard, PRIMA
a5d0: 52 59 20 4b 45 59 20 73 68 6f 75 6c 64 20 61 6c  RY KEY should al
a5e0: 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f 54 20 4e  ways imply NOT N
a5f0: 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74 75 6e 61  ULL..  Unfortuna
a600: 74 65 6c 79 2c 20 64 75 65 20 74 6f 20 61 20 62  tely, due to a b
a610: 75 67 20 69 6e 20 73 6f 6d 65 20 65 61 72 6c 79  ug in some early
a620: 20 76 65 72 73 69 6f 6e 73 2c 20 74 68 69 73 20   versions, this 
a630: 69 73 20 6e 6f 74 20 74 68 65 0a 20 20 63 61 73  is not the.  cas
a640: 65 20 69 6e 20 53 51 4c 69 74 65 2e 20 5e 55 6e  e in SQLite. ^Un
a650: 6c 65 73 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  less the column 
a660: 69 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50  is an [INTEGER P
a670: 52 49 4d 41 52 59 20 4b 45 59 5d 20 6f 72 0a 20  RIMARY KEY] or. 
a680: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 61 20   the table is a 
a690: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
a6a0: 74 61 62 6c 65 20 6f 72 20 74 68 65 20 63 6f 6c  table or the col
a6b0: 75 6d 6e 20 69 73 20 64 65 63 6c 61 72 65 64 20  umn is declared 
a6c0: 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69  NOT NULL,.  SQLi
a6d0: 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76  te allows NULL v
a6e0: 61 6c 75 65 73 20 69 6e 20 61 20 50 52 49 4d 41  alues in a PRIMA
a6f0: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20  RY KEY column.  
a700: 53 51 4c 69 74 65 20 63 6f 75 6c 64 20 62 65 20  SQLite could be 
a710: 66 69 78 65 64 20 74 6f 0a 20 20 63 6f 6e 66 6f  fixed to.  confo
a720: 72 6d 20 74 6f 20 74 68 65 20 73 74 61 6e 64 61  rm to the standa
a730: 72 64 2c 20 62 75 74 20 64 6f 69 6e 67 20 73 6f  rd, but doing so
a740: 20 6d 69 67 68 74 20 62 72 65 61 6b 20 6c 65 67   might break leg
a750: 61 63 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  acy applications
a760: 2e 0a 20 20 48 65 6e 63 65 2c 20 69 74 20 68 61  ..  Hence, it ha
a770: 73 20 62 65 65 6e 20 64 65 63 69 64 65 64 20 74  s been decided t
a780: 6f 20 6d 65 72 65 6c 79 20 64 6f 63 75 6d 65 6e  o merely documen
a790: 74 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20  t the fact that 
a7a0: 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f 77 69 6e  SQLite.  allowin
a7b0: 67 20 4e 55 4c 4c 73 20 69 6e 20 6d 6f 73 74 20  g NULLs in most 
a7c0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
a7d0: 6d 6e 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  mns...<tcl>hd_fr
a7e0: 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e  agment uniquecon
a7f0: 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69  st {UNIQUE} {uni
a800: 71 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20  que constraint} 
a810: 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69  {UNIQUE constrai
a820: 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20  nt}</tcl>.<p>^A 
a830: 3c 62 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63 6f  <b>UNIQUE</b> co
a840: 6e 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d 69  nstraint is simi
a850: 6c 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52 59  lar to a PRIMARY
a860: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c   KEY constraint,
a870: 20 65 78 63 65 70 74 0a 20 20 74 68 61 74 20 61   except.  that a
a880: 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d 61   single table ma
a890: 79 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62 65  y have any numbe
a8a0: 72 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73  r of UNIQUE cons
a8b0: 74 72 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65 61  traints. ^For ea
a8c0: 63 68 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73  ch.  UNIQUE cons
a8d0: 74 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74 61  traint on the ta
a8e0: 62 6c 65 2c 20 65 61 63 68 20 72 6f 77 20 6d 75  ble, each row mu
a8f0: 73 74 20 63 6f 6e 74 61 69 6e 20 61 20 75 6e 69  st contain a uni
a900: 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a  que combination.
a910: 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74    of values in t
a920: 68 65 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74  he columns ident
a930: 69 66 69 65 64 20 62 79 20 74 68 65 20 55 4e 49  ified by the UNI
a940: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  QUE constraint. 
a950: 0a 20 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70  .  ^For the purp
a960: 6f 73 65 73 20 6f 66 20 55 4e 49 51 55 45 20 63  oses of UNIQUE c
a970: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 4e 55 4c 4c  onstraints, NULL
a980: 20 76 61 6c 75 65 73 0a 20 20 61 72 65 20 63 6f   values.  are co
a990: 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63  nsidered distinc
a9a0: 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72  t from all other
a9b0: 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69   values, includi
a9c0: 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 0a  ng other NULLs..
a9d0: 0a 3c 70 3e 5e 49 6e 20 6d 6f 73 74 20 63 61 73  .<p>^In most cas
a9e0: 65 73 2c 20 55 4e 49 51 55 45 20 61 6e 64 20 50  es, UNIQUE and P
a9f0: 52 49 4d 41 52 59 20 4b 45 59 0a 20 20 63 6f 6e  RIMARY KEY.  con
aa00: 73 74 72 61 69 6e 74 73 20 61 72 65 20 69 6d 70  straints are imp
aa10: 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 72 65 61  lemented by crea
aa20: 74 69 6e 67 20 61 20 75 6e 69 71 75 65 20 69 6e  ting a unique in
aa30: 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62  dex in the datab
aa40: 61 73 65 2e 0a 20 20 28 54 68 65 20 65 78 63 65  ase..  (The exce
aa50: 70 74 69 6f 6e 73 20 61 72 65 20 5b 49 4e 54 45  ptions are [INTE
aa60: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
aa70: 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59   and PRIMARY KEY
aa80: 73 20 6f 6e 20 0a 20 20 5b 57 49 54 48 4f 55 54  s on .  [WITHOUT
aa90: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 29   ROWID] tables.)
aaa0: 0a 20 20 48 65 6e 63 65 2c 20 74 68 65 20 66 6f  .  Hence, the fo
aab0: 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d 61 73 20  llowing schemas 
aac0: 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71  are logically eq
aad0: 75 69 76 61 6c 65 6e 74 3a 0a 0a 20 20 3c 6f 6c  uivalent:..  <ol
aae0: 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54  >.  <li><p>CREAT
aaf0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20  E TABLE t1(a, b 
ab00: 55 4e 49 51 55 45 29 3b 0a 20 20 3c 6c 69 3e 3c  UNIQUE);.  <li><
ab10: 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  p>CREATE TABLE t
ab20: 31 28 61 2c 20 62 20 50 52 49 4d 41 52 59 20 4b  1(a, b PRIMARY K
ab30: 45 59 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52  EY);.  <li><p>CR
ab40: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
ab50: 20 62 29 3b 3c 62 72 3e 0a 20 20 20 20 20 20 20   b);<br>.       
ab60: 20 20 43 52 45 41 54 45 20 55 4e 49 51 55 45 20    CREATE UNIQUE 
ab70: 49 4e 44 45 58 20 74 31 62 20 4f 4e 20 74 31 28  INDEX t1b ON t1(
ab80: 62 29 3b 0a 20 20 3c 2f 6f 6c 3e 0a 0a 3c 74 63  b);.  </ol>..<tc
ab90: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63  l>hd_fragment {c
aba0: 6b 63 6f 6e 73 74 7d 20 7b 43 48 45 43 4b 7d 20  kconst} {CHECK} 
abb0: 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  {CHECK constrain
abc0: 74 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72  t} {CHECK constr
abd0: 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  aints}</tcl>.<p>
abe0: 5e 28 41 20 3c 62 3e 43 48 45 43 4b 3c 2f 62 3e  ^(A <b>CHECK</b>
abf0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
ac00: 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  be attached to a
ac10: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
ac20: 6f 6e 20 6f 72 0a 20 20 73 70 65 63 69 66 69 65  on or.  specifie
ac30: 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e  d as a table con
ac40: 73 74 72 61 69 6e 74 2e 20 49 6e 20 70 72 61 63  straint. In prac
ac50: 74 69 63 65 20 69 74 20 6d 61 6b 65 73 20 6e 6f  tice it makes no
ac60: 20 64 69 66 66 65 72 65 6e 63 65 2e 29 5e 20 5e   difference.)^ ^
ac70: 28 45 61 63 68 0a 20 20 74 69 6d 65 20 61 20 6e  (Each.  time a n
ac80: 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74  ew row is insert
ac90: 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ed into the tabl
aca0: 65 20 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67  e or an existing
acb0: 20 72 6f 77 20 69 73 20 75 70 64 61 74 65 64 2c   row is updated,
acc0: 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  .  the expressio
acd0: 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
ace0: 68 20 65 61 63 68 20 43 48 45 43 4b 20 63 6f 6e  h each CHECK con
acf0: 73 74 72 61 69 6e 74 20 69 73 20 65 76 61 6c 75  straint is evalu
ad00: 61 74 65 64 20 61 6e 64 0a 20 20 63 61 73 74 20  ated and.  cast 
ad10: 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c  to a NUMERIC val
ad20: 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ue in the same w
ad30: 61 79 20 61 73 20 61 20 5b 43 41 53 54 20 65 78  ay as a [CAST ex
ad40: 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68  pression]. If th
ad50: 65 20 0a 20 20 72 65 73 75 6c 74 20 69 73 20 7a  e .  result is z
ad60: 65 72 6f 20 28 69 6e 74 65 67 65 72 20 76 61 6c  ero (integer val
ad70: 75 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c  ue 0 or real val
ad80: 75 65 20 30 2e 30 29 2c 20 74 68 65 6e 20 61 20  ue 0.0), then a 
ad90: 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 76 69 6f  constraint.  vio
ada0: 6c 61 74 69 6f 6e 20 68 61 73 20 6f 63 63 75 72  lation has occur
adb0: 72 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 43  red.)^ ^If the C
adc0: 48 45 43 4b 20 65 78 70 72 65 73 73 69 6f 6e 20  HECK expression 
add0: 65 76 61 6c 75 61 74 65 73 20 74 6f 20 4e 55 4c  evaluates to NUL
ade0: 4c 2c 20 6f 72 0a 20 20 61 6e 79 20 6f 74 68 65  L, or.  any othe
adf0: 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65  r non-zero value
ae00: 2c 20 69 74 20 69 73 20 6e 6f 74 20 61 20 63 6f  , it is not a co
ae10: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
ae20: 6f 6e 2e 0a 20 20 5e 54 68 65 20 65 78 70 72 65  on..  ^The expre
ae30: 73 73 69 6f 6e 20 6f 66 20 61 20 43 48 45 43 4b  ssion of a CHECK
ae40: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
ae50: 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 73 75  not contain a su
ae60: 62 71 75 65 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64  bquery...<tcl>hd
ae70: 5f 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75  _fragment {notnu
ae80: 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55  llconst} {NOT NU
ae90: 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f  LL} {NOT NULL co
aea0: 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a  nstraint}</tcl>.
aeb0: 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c  <p>^A <b>NOT NUL
aec0: 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74  L</b> constraint
aed0: 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61 74 74   may only be att
aee0: 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d  ached to a colum
aef0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20  n definition,.  
af00: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73  not specified as
af10: 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61   a table constra
af20: 69 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70 72 69  int.  Not surpri
af30: 73 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20  singly, ^(a NOT 
af40: 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e  NULL.  constrain
af50: 74 20 64 69 63 74 61 74 65 73 20 74 68 61 74 20  t dictates that 
af60: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 63  the associated c
af70: 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f  olumn may not co
af80: 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c  ntain a NULL val
af90: 75 65 2e 0a 20 20 41 74 74 65 6d 70 74 69 6e 67  ue..  Attempting
afa0: 20 74 6f 20 73 65 74 20 74 68 65 20 63 6f 6c 75   to set the colu
afb0: 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  mn value to NULL
afc0: 20 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20   when inserting 
afd0: 61 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20 20 75  a new row or.  u
afe0: 70 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74  pdating an exist
aff0: 69 6e 67 20 6f 6e 65 20 63 61 75 73 65 73 20 61  ing one causes a
b000: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
b010: 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61  ation.)^..<p>Exa
b020: 63 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e 73 74  ctly how a const
b030: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
b040: 69 73 20 64 65 61 6c 74 20 77 69 74 68 20 69 73  is dealt with is
b050: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
b060: 68 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63  he.  [conflict c
b070: 6c 61 75 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74  lause|constraint
b080: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
b090: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e  tion algorithm].
b0a0: 20 45 61 63 68 20 0a 20 20 50 52 49 4d 41 52 59   Each .  PRIMARY
b0b0: 20 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f   KEY, UNIQUE, NO
b0c0: 54 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b  T NULL and CHECK
b0d0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 68 61 73 20   constraint has 
b0e0: 61 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  a default confli
b0f0: 63 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20  ct.  resolution 
b100: 61 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d  algorithm. ^PRIM
b110: 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 20  ARY KEY, UNIQUE 
b120: 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  and NOT NULL con
b130: 73 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65 0a  straints may be.
b140: 20 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73 73    explicitly ass
b150: 69 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74 20  igned a default 
b160: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
b170: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 62 79  ion algorithm by
b180: 20 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b   including.  a [
b190: 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d  conflict-clause]
b1a0: 20 69 6e 20 74 68 65 69 72 20 64 65 66 69 6e 69   in their defini
b1b0: 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61  tions. ^Or, if a
b1c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66 69   constraint defi
b1d0: 6e 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f  nition.  does no
b1e0: 74 20 69 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e  t include a [con
b1f0: 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72  flict-clause] or
b200: 20 69 74 20 69 73 20 61 20 43 48 45 43 4b 20 63   it is a CHECK c
b210: 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64  onstraint, the d
b220: 65 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63  efault.  conflic
b230: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
b240: 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e  orithm is ABORT.
b250: 20 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73   ^Different cons
b260: 74 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74  traints within t
b270: 68 65 0a 20 20 73 61 6d 65 20 74 61 62 6c 65 20  he.  same table 
b280: 6d 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65  may have differe
b290: 6e 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c  nt default confl
b2a0: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
b2b0: 6c 67 6f 72 69 74 68 6d 73 2e 20 53 65 65 0a 20  lgorithms. See. 
b2c0: 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74   the section tit
b2d0: 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  led [ON CONFLICT
b2e0: 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  ] for additional
b2f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c   information...<
b300: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
b310: 72 6f 77 69 64 20 7b 49 4e 54 45 47 45 52 20 50  rowid {INTEGER P
b320: 52 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f 57 49  RIMARY KEY} ROWI
b330: 44 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68  D rowid</tcl>.<h
b340: 33 3e 52 4f 57 49 44 73 20 61 6e 64 20 74 68 65  3>ROWIDs and the
b350: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
b360: 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45   KEY</h3>..<p>^E
b370: 78 63 65 70 74 20 66 6f 72 20 5b 57 49 54 48 4f  xcept for [WITHO
b380: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
b390: 2c 20 61 6c 6c 20 72 6f 77 73 20 77 69 74 68 69  , all rows withi
b3a0: 6e 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 0a  n SQLite tables.
b3b0: 68 61 76 65 20 61 20 36 34 2d 62 69 74 20 73 69  have a 64-bit si
b3c0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65 79  gned integer key
b3d0: 20 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69   that uniquely i
b3e0: 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 72 6f  dentifies the ro
b3f0: 77 20 77 69 74 68 69 6e 20 69 74 73 20 74 61 62  w within its tab
b400: 6c 65 2e 0a 54 68 69 73 20 69 6e 74 65 67 65 72  le..This integer
b410: 20 69 73 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c   is usually.call
b420: 65 64 20 74 68 65 20 22 72 6f 77 69 64 22 2e 20  ed the "rowid". 
b430: 5e 54 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65  ^The rowid value
b440: 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
b450: 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68   using one of th
b460: 65 20 73 70 65 63 69 61 6c 0a 63 61 73 65 2d 69  e special.case-i
b470: 6e 64 65 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73  ndependent names
b480: 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c   "rowid", "oid",
b490: 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e   or "_rowid_" in
b4a0: 20 70 6c 61 63 65 20 6f 66 20 61 20 63 6f 6c 75   place of a colu
b4b0: 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74  mn name..^If a t
b4c0: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  able contains a 
b4d0: 75 73 65 72 20 64 65 66 69 6e 65 64 20 63 6f 6c  user defined col
b4e0: 75 6d 6e 20 6e 61 6d 65 64 20 22 72 6f 77 69 64  umn named "rowid
b4f0: 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f  ", "oid" or "_ro
b500: 77 69 64 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74  wid_",.then that
b510: 20 6e 61 6d 65 20 61 6c 77 61 79 73 20 72 65 66   name always ref
b520: 65 72 73 20 74 68 65 20 65 78 70 6c 69 63 69 74  ers the explicit
b530: 6c 79 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75  ly declared colu
b540: 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  mn and cannot be
b550: 20 75 73 65 64 0a 74 6f 20 72 65 74 72 69 65 76   used.to retriev
b560: 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 6f  e the integer ro
b570: 77 69 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54  wid value...<p>T
b580: 68 65 20 72 6f 77 69 64 20 28 61 6e 64 20 22 6f  he rowid (and "o
b590: 69 64 22 20 61 6e 64 20 22 5f 72 6f 77 69 64 5f  id" and "_rowid_
b5a0: 22 29 20 69 73 20 6f 6d 69 74 74 65 64 20 69 6e  ") is omitted in
b5b0: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
b5c0: 20 74 61 62 6c 65 73 2e 0a 57 49 54 48 4f 55 54   tables..WITHOUT
b5d0: 20 52 4f 57 49 44 20 74 61 62 6c 65 73 20 61 72   ROWID tables ar
b5e0: 65 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  e only available
b5f0: 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73   in SQLite [vers
b600: 69 6f 6e 20 33 2e 38 2e 32 5d 20 61 6e 64 20 6c  ion 3.8.2] and l
b610: 61 74 65 72 2e 0a 41 20 74 61 62 6c 65 20 74 68  ater..A table th
b620: 61 74 20 6c 61 63 6b 73 20 74 68 65 20 57 49 54  at lacks the WIT
b630: 48 4f 55 54 20 52 4f 57 49 44 20 63 6c 61 75 73  HOUT ROWID claus
b640: 65 20 69 73 20 63 61 6c 6c 65 64 20 61 20 22 72  e is called a "r
b650: 6f 77 69 64 20 74 61 62 6c 65 22 2e 0a 0a 3c 70  owid table"...<p
b660: 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20 72 6f  >The data for ro
b670: 77 69 64 20 74 61 62 6c 65 73 20 69 73 20 73 74  wid tables is st
b680: 6f 72 65 64 20 61 73 20 61 20 42 2d 54 72 65 65  ored as a B-Tree
b690: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
b6a0: 69 6e 69 6e 67 0a 6f 6e 65 20 65 6e 74 72 79 20  ining.one entry 
b6b0: 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 20 72  for each table r
b6c0: 6f 77 2c 20 75 73 69 6e 67 20 74 68 65 20 72 6f  ow, using the ro
b6d0: 77 69 64 20 76 61 6c 75 65 20 61 73 20 74 68 65  wid value as the
b6e0: 20 6b 65 79 2e 20 54 68 69 73 20 6d 65 61 6e 73   key. This means
b6f0: 20 74 68 61 74 0a 72 65 74 72 69 65 76 69 6e 67   that.retrieving
b700: 20 6f 72 20 73 6f 72 74 69 6e 67 20 72 65 63 6f   or sorting reco
b710: 72 64 73 20 62 79 20 72 6f 77 69 64 20 69 73 20  rds by rowid is 
b720: 66 61 73 74 2e 20 53 65 61 72 63 68 69 6e 67 20  fast. Searching 
b730: 66 6f 72 20 61 20 72 65 63 6f 72 64 20 77 69 74  for a record wit
b740: 68 20 61 0a 73 70 65 63 69 66 69 63 20 72 6f 77  h a.specific row
b750: 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c 6c 20 72  id, or for all r
b760: 65 63 6f 72 64 73 20 77 69 74 68 20 72 6f 77 69  ecords with rowi
b770: 64 73 20 77 69 74 68 69 6e 20 61 20 73 70 65 63  ds within a spec
b780: 69 66 69 65 64 20 72 61 6e 67 65 20 69 73 0a 61  ified range is.a
b790: 72 6f 75 6e 64 20 74 77 69 63 65 20 61 73 20 66  round twice as f
b7a0: 61 73 74 20 61 73 20 61 20 73 69 6d 69 6c 61 72  ast as a similar
b7b0: 20 73 65 61 72 63 68 20 6d 61 64 65 20 62 79 20   search made by 
b7c0: 73 70 65 63 69 66 79 69 6e 67 20 61 6e 79 20 6f  specifying any o
b7d0: 74 68 65 72 20 50 52 49 4d 41 52 59 0a 4b 45 59  ther PRIMARY.KEY
b7e0: 20 6f 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75   or indexed valu
b7f0: 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68 20 6f 6e  e...<p> ^With on
b800: 65 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 74 65  e exception note
b810: 64 20 62 65 6c 6f 77 2c 20 69 66 20 61 20 72 6f  d below, if a ro
b820: 77 69 64 20 74 61 62 6c 65 20 68 61 73 20 61 20  wid table has a 
b830: 70 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74  primary key that
b840: 20 63 6f 6e 73 69 73 74 73 0a 6f 66 20 61 20 73   consists.of a s
b850: 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64  ingle column and
b860: 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79   the declared ty
b870: 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d  pe of that colum
b880: 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22 20 69  n is "INTEGER" i
b890: 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20 6f 66  n any mixture of
b8a0: 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72  .upper and lower
b8b0: 20 63 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20   case, then the 
b8c0: 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73 20 61  column becomes a
b8d0: 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
b8e0: 72 6f 77 69 64 2e 20 53 75 63 68 20 61 0a 63 6f  rowid. Such a.co
b8f0: 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c 79 20  lumn is usually 
b900: 72 65 66 65 72 72 65 64 20 74 6f 20 61 73 20 61  referred to as a
b910: 6e 20 22 69 6e 74 65 67 65 72 20 70 72 69 6d 61  n "integer prima
b920: 72 79 20 6b 65 79 22 2e 20 41 20 50 52 49 4d 41  ry key". A PRIMA
b930: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a 6f 6e  RY KEY column.on
b940: 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e 20 69 6e  ly becomes an in
b950: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
b960: 79 20 69 66 20 74 68 65 20 64 65 63 6c 61 72 65  y if the declare
b970: 64 20 74 79 70 65 20 6e 61 6d 65 20 69 73 20 65  d type name is e
b980: 78 61 63 74 6c 79 0a 22 49 4e 54 45 47 45 52 22  xactly."INTEGER"
b990: 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65 67 65  .  ^Other intege
b9a0: 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c 69 6b  r type names lik
b9b0: 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49 47 49  e "INT" or "BIGI
b9c0: 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20 49 4e  NT" or "SHORT IN
b9d0: 54 45 47 45 52 22 0a 6f 72 20 22 55 4e 53 49 47  TEGER".or "UNSIG
b9e0: 4e 45 44 20 49 4e 54 45 47 45 52 22 20 63 61 75  NED INTEGER" cau
b9f0: 73 65 73 20 74 68 65 20 70 72 69 6d 61 72 79 20  ses the primary 
ba00: 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  key column to be
ba10: 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64 69 6e  have as an ordin
ba20: 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  ary.table column
ba30: 20 77 69 74 68 20 69 6e 74 65 67 65 72 20 5b 61   with integer [a
ba40: 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61 20 75  ffinity] and a u
ba50: 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74  nique index, not
ba60: 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
ba70: 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c 70 3e  .the rowid...<p>
ba80: 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6d   The exception m
ba90: 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65 20 69  entioned above i
baa0: 73 20 74 68 61 74 20 5e 69 66 20 74 68 65 20 64  s that ^if the d
bab0: 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61 20  eclaration of a 
bac0: 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65 63 6c  column with.decl
bad0: 61 72 65 64 20 74 79 70 65 20 22 49 4e 54 45 47  ared type "INTEG
bae0: 45 52 22 20 69 6e 63 6c 75 64 65 73 20 61 6e 20  ER" includes an 
baf0: 22 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53  "PRIMARY KEY DES
bb00: 43 22 20 63 6c 61 75 73 65 2c 20 69 74 20 64 6f  C" clause, it do
bb10: 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20 61 6e  es not.become an
bb20: 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72   alias for the r
bb30: 6f 77 69 64 20 61 6e 64 20 69 73 20 6e 6f 74 20  owid and is not 
bb40: 63 6c 61 73 73 69 66 69 65 64 20 61 73 20 61 6e  classified as an
bb50: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
bb60: 20 6b 65 79 2e 0a 54 68 69 73 20 71 75 69 72 6b   key..This quirk
bb70: 20 69 73 20 6e 6f 74 20 62 79 20 64 65 73 69 67   is not by desig
bb80: 6e 2e 20 49 74 20 69 73 20 64 75 65 20 74 6f 20  n. It is due to 
bb90: 61 20 62 75 67 20 69 6e 20 65 61 72 6c 79 20 76  a bug in early v
bba0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
bbb0: 65 2e 0a 42 75 74 20 66 69 78 69 6e 67 20 74 68  e..But fixing th
bbc0: 65 20 62 75 67 20 63 6f 75 6c 64 20 72 65 73 75  e bug could resu
bbd0: 6c 74 20 69 6e 20 62 61 63 6b 77 61 72 64 73 20  lt in backwards 
bbe0: 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65  incompatibilitie
bbf0: 73 2e 0a 48 65 6e 63 65 2c 20 74 68 65 20 6f 72  s..Hence, the or
bc00: 69 67 69 6e 61 6c 20 62 65 68 61 76 69 6f 72 20  iginal behavior 
bc10: 68 61 73 20 62 65 65 6e 20 72 65 74 61 69 6e 65  has been retaine
bc20: 64 20 28 61 6e 64 20 64 6f 63 75 6d 65 6e 74 65  d (and documente
bc30: 64 29 20 62 65 63 61 75 73 65 20 6f 64 64 0a 62  d) because odd.b
bc40: 65 68 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72  ehavior in a cor
bc50: 6e 65 72 20 63 61 73 65 20 69 73 20 66 61 72 20  ner case is far 
bc60: 62 65 74 74 65 72 20 74 68 61 6e 20 61 20 63 6f  better than a co
bc70: 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72 65 61  mpatibility brea
bc80: 6b 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 0a 74  k.  This means.t
bc90: 68 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77  hat ^(the follow
bca0: 69 6e 67 20 74 68 72 65 65 20 74 61 62 6c 65 20  ing three table 
bcb0: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c  declarations all
bcc0: 20 63 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d   cause the colum
bcd0: 6e 20 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61  n "x" to be an.a
bce0: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77  lias for the row
bcf0: 69 64 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70  id (an integer p
bd00: 72 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75  rimary key):..<u
bd10: 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  l>.<li><tt>CREAT
bd20: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
bd30: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
bd40: 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e  ASC, y, z);</tt>
bd50: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
bd60: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
bd70: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
bd80: 20 4b 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74   KEY(x ASC));</t
bd90: 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  t>.<li><tt>CREAT
bda0: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
bdb0: 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41  GER, y, z, PRIMA
bdc0: 52 59 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b  RY KEY(x DESC));
bdd0: 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  </tt>.</ul>)^..<
bde0: 70 3e 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c  p>But ^(the foll
bdf0: 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f  owing declaratio
be00: 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c  n does not resul
be10: 74 20 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61  t in "x" being a
be20: 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20  n alias for.the 
be30: 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  rowid:.<ul>.<li>
be40: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
be50: 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49   t(x INTEGER PRI
be60: 4d 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79  MARY KEY DESC, y
be70: 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e  , z);</tt>.</ul>
be80: 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61  )^..<p>^Rowid va
be90: 6c 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69  lues may be modi
bea0: 66 69 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50  fied using an UP
beb0: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
bec0: 6e 20 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61  n the same.way a
bed0: 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75  s any other colu
bee0: 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69  mn value can, ei
bef0: 74 68 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f  ther using one o
bf00: 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61  f the built-in a
bf10: 6c 69 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c  liases.("rowid",
bf20: 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69   "oid" or "_rowi
bf30: 64 5f 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67  d_") or by using
bf40: 20 61 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65   an alias create
bf50: 64 20 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a  d by an integer.
bf60: 70 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69  primary key. ^Si
bf70: 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45  milarly, an INSE
bf80: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  RT statement may
bf90: 20 70 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65   provide a value
bfa0: 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72   to use as the.r
bfb0: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
bfc0: 77 20 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e  w inserted. ^(Un
bfd0: 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69  like normal SQLi
bfe0: 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69  te columns, an i
bff0: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
c000: 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75  ey or rowid colu
c010: 6d 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  mn must contain 
c020: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20  integer values. 
c030: 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
c040: 6b 65 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c  key or rowid.col
c050: 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c  umns are not abl
c060: 65 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69  e to hold floati
c070: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c  ng point values,
c080: 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c   strings, BLOBs,
c090: 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70   or NULLs.)^..<p
c0a0: 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73  >^If an UPDATE s
c0b0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
c0c0: 73 20 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65  s to set an inte
c0d0: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
c0e0: 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a  or rowid column.
c0f0: 74 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f  to a NULL or blo
c100: 62 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61  b value, or to a
c110: 20 73 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20   string or real 
c120: 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
c130: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a  t be losslessly.
c140: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
c150: 69 6e 74 65 67 65 72 2c 20 61 20 22 64 61 74 61  integer, a "data
c160: 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65  type mismatch" e
c170: 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20  rror occurs and 
c180: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73  the statement.is
c190: 20 61 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e   aborted. ^If an
c1a0: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
c1b0: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  t attempts to in
c1c0: 73 65 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75  sert a blob valu
c1d0: 65 2c 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f  e, or a string.o
c1e0: 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61  r real value tha
c1f0: 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73  t cannot be loss
c200: 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
c210: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69   to an integer i
c220: 6e 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70  nto an.integer p
c230: 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f  rimary key or ro
c240: 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64  wid column, a "d
c250: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
c260: 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61  " error occurs a
c270: 6e 64 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74  nd the.statement
c280: 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70   is aborted...<p
c290: 3e 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73  >^If an INSERT s
c2a0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
c2b0: 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55  s to insert a NU
c2c0: 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  LL value into a 
c2d0: 72 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72  rowid or.integer
c2e0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
c2f0: 75 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20  umn, the system 
c300: 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67  chooses an integ
c310: 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20  er value to use 
c320: 61 73 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74  as the.rowid aut
c330: 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65  omatically. A de
c340: 74 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69  tailed descripti
c350: 6f 6e 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69  on of how this i
c360: 73 20 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64  s done is provid
c370: 65 64 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f  ed.<a href="auto
c380: 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61  inc.html">separa
c390: 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  tely</a>.</p>..<
c3a0: 70 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20  p>^(The [parent 
c3b0: 6b 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69  key] of a [forei
c3c0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
c3d0: 74 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  t] is not allowe
c3e0: 64 20 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77  d to.use the row
c3f0: 69 64 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20  id.  The parent 
c400: 6b 65 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61  key must used na
c410: 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79  med columns only
c420: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  .)^</p>..<tcl>.#
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 23 23  ################
c450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c470: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
c480: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52  ction {CREATE TR
c490: 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69  IGGER} createtri
c4a0: 67 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52  gger {{CREATE TR
c4b0: 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69  IGGER}}..Recursi
c4c0: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
c4d0: 63 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d 73  create-trigger-s
c4e0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
c4f0: 54 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  The CREATE TRIGG
c500: 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ER statement is 
c510: 75 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67  used to add trig
c520: 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74  gers to the .dat
c530: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 54  abase schema. ^T
c540: 72 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61  riggers are data
c550: 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20  base operations 
c560: 0a 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61  .that are automa
c570: 74 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65  tically performe
c580: 64 20 77 68 65 6e 20 61 20 73 70 65 63 69 66 69  d when a specifi
c590: 65 64 20 64 61 74 61 62 61 73 65 20 65 76 65 6e  ed database even
c5a0: 74 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a  t.occurs.  </p>.
c5b0: 0a 3c 70 3e 5e 41 20 74 72 69 67 67 65 72 20 6d  .<p>^A trigger m
c5c0: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
c5d0: 74 6f 20 66 69 72 65 20 77 68 65 6e 65 76 65 72  to fire whenever
c5e0: 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e   a [DELETE], [IN
c5f0: 53 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54  SERT],.or [UPDAT
c600: 45 5d 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c  E] of a.particul
c610: 61 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  ar database tabl
c620: 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65  e occurs, or whe
c630: 6e 65 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45  never an [UPDATE
c640: 5d 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f  ] occurs on.on o
c650: 6e 65 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69  ne or more speci
c660: 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  fied columns of 
c670: 61 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  a table.</p>..<p
c680: 3e 5e 41 74 20 74 68 69 73 20 74 69 6d 65 20 53  >^At this time S
c690: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f  QLite supports o
c6a0: 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57  nly FOR EACH ROW
c6b0: 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46   triggers, not F
c6c0: 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e  OR EACH.STATEMEN
c6d0: 54 20 74 72 69 67 67 65 72 73 2e 20 5e 48 65 6e  T triggers. ^Hen
c6e0: 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70  ce explicitly sp
c6f0: 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43  ecifying FOR EAC
c700: 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61  H ROW is optiona
c710: 6c 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f 57  l..^FOR EACH ROW
c720: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
c730: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
c740: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
c750: 65 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65  e trigger.may be
c760: 20 65 78 65 63 75 74 65 64 20 28 64 65 70 65 6e   executed (depen
c770: 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e  ding on the WHEN
c780: 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63   clause) for eac
c790: 68 20 64 61 74 61 62 61 73 65 20 72 6f 77 20 62  h database row b
c7a0: 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75  eing.inserted, u
c7b0: 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65  pdated or delete
c7c0: 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
c7d0: 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74  nt causing the t
c7e0: 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c  rigger to fire.<
c7f0: 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74  /p>..<p>^(Both t
c800: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61  he WHEN clause a
c810: 6e 64 20 74 68 65 20 74 72 69 67 67 65 72 20 61  nd the trigger a
c820: 63 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73  ctions may acces
c830: 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74  s elements of .t
c840: 68 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73  he row being ins
c850: 65 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f  erted, deleted o
c860: 72 20 75 70 64 61 74 65 64 20 75 73 69 6e 67 20  r updated using 
c870: 72 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68  references of th
c880: 65 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e  e form ."NEW.<i>
c890: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22  column-name</i>"
c8a0: 20 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c   and "OLD.<i>col
c8b0: 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77  umn-name</i>", w
c8c0: 68 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  here.<i>column-n
c8d0: 61 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e  ame</i> is the n
c8e0: 61 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ame of a column 
c8f0: 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74  from the table t
c900: 68 61 74 20 74 68 65 20 74 72 69 67 67 65 72 0a  hat the trigger.
c910: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
c920: 74 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20  th.)^ ^(OLD and 
c930: 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 6d  NEW references m
c940: 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
c950: 69 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a 65  in triggers on.e
c960: 76 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20  vents for which 
c970: 74 68 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e  they are relevan
c980: 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  t, as follows:</
c990: 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
c9a0: 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
c9b0: 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  10>.<tr>.<td val
c9c0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
c9d0: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
c9e0: 30 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c  0><i>INSERT</i><
c9f0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
ca00: 22 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65  "top">NEW refere
ca10: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
ca20: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
ca30: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
ca40: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
ca50: 64 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54  dth=120><i>UPDAT
ca60: 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  E</i></td>.<td v
ca70: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20  align="top">NEW 
ca80: 61 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63  and OLD referenc
ca90: 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64  es are valid</td
caa0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
cab0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
cac0: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
cad0: 68 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c  h=120><i>DELETE<
cae0: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
caf0: 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65  ign="top">OLD re
cb00: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
cb10: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f  id</td>.</tr>.</
cb20: 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c  table>.</p>)^..<
cb30: 70 3e 5e 49 66 20 61 20 57 48 45 4e 20 63 6c 61  p>^If a WHEN cla
cb40: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
cb50: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
cb60: 6e 74 73 20 73 70 65 63 69 66 69 65 64 0a 61 72  nts specified.ar
cb70: 65 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20  e only executed 
cb80: 66 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69  for rows for whi
cb90: 63 68 20 74 68 65 20 57 48 45 4e 0a 63 6c 61 75  ch the WHEN.clau
cba0: 73 65 20 69 73 20 74 72 75 65 2e 20 5e 49 66 20  se is true. ^If 
cbb0: 6e 6f 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69  no WHEN clause i
cbc0: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20  s supplied, the 
cbd0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 61  SQL statements.a
cbe0: 72 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  re executed for 
cbf0: 61 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c  all rows.</p>..<
cc00: 70 3e 5e 54 68 65 20 42 45 46 4f 52 45 20 6f 72  p>^The BEFORE or
cc10: 20 41 46 54 45 52 20 6b 65 79 77 6f 72 64 20 64   AFTER keyword d
cc20: 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74  etermines when t
cc30: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
cc40: 6e 73 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75  ns.will be execu
cc50: 74 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20  ted relative to 
cc60: 74 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d  the insertion, m
cc70: 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72  odification or r
cc80: 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73  emoval of the.as
cc90: 73 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70  sociated row.</p
cca0: 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f  >..<p>^An [ON CO
ccb0: 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d  NFLICT] clause m
ccc0: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
ccd0: 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55  as part of an [U
cce0: 50 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52  PDATE] or [INSER
ccf0: 54 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  T].action within
cd00: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 74 68 65   the body of the
cd10: 20 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76   trigger..^Howev
cd20: 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e  er if an [ON CON
cd30: 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73  FLICT] clause is
cd40: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
cd50: 72 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65  rt of .the state
cd60: 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65  ment causing the
cd70: 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65   trigger to fire
cd80: 2c 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20  , then conflict 
cd90: 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20  handling.policy 
cda0: 6f 66 20 74 68 65 20 6f 75 74 65 72 20 73 74 61  of the outer sta
cdb0: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 69  tement is used i
cdc0: 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  nstead.</p>..<p>
cdd0: 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 61 75  ^Triggers are au
cde0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f  tomatically [DRO
cdf0: 50 20 54 52 49 47 47 45 52 20 7c 20 64 72 6f 70  P TRIGGER | drop
ce00: 70 65 64 5d 0a 77 68 65 6e 20 74 68 65 20 74 61  ped].when the ta
ce10: 62 6c 65 20 74 68 61 74 20 74 68 65 79 20 61 72  ble that they ar
ce20: 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69  e .associated wi
ce30: 74 68 20 28 74 68 65 20 3c 69 3e 74 61 62 6c 65  th (the <i>table
ce40: 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29  -name</i> table)
ce50: 20 69 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45   is .[DROP TABLE
ce60: 20 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48   | dropped].  ^H
ce70: 6f 77 65 76 65 72 20 69 66 20 74 68 65 20 74 72  owever if the tr
ce80: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65  igger actions re
ce90: 66 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61  ference.other ta
cea0: 62 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67 65  bles, the trigge
ceb0: 72 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64  r is not dropped
cec0: 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20   or modified if 
ced0: 74 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c  those other.tabl
cee0: 65 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42  es are [DROP TAB
cef0: 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72  LE | dropped] or
cf00: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20   [ALTER TABLE | 
cf10: 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a  modified].</p>..
cf20: 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65  <p>^Triggers are
cf30: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
cf40: 68 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52  he [DROP TRIGGER
cf50: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  ] statement.</p>
cf60: 0a 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73  ..<h3>Syntax Res
cf70: 74 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44  trictions On UPD
cf80: 41 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64  ATE, DELETE, and
cf90: 20 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e   INSERT Statemen
cfa0: 74 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72  ts Within.    Tr
cfb0: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
cfc0: 5e 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b  ^The [UPDATE], [
cfd0: 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e  DELETE], and [IN
cfe0: 53 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73  SERT].statements
cff0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
d000: 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a   do not support.
d010: 74 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20  the full syntax 
d020: 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44  for [UPDATE], [D
d030: 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53  ELETE], and [INS
d040: 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  ERT] statements.
d050: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a    The following.
d060: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70  restrictions app
d070: 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  ly:</p>..<ul>.<l
d080: 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61  i><p>.  ^(The na
d090: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
d0a0: 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69  to be modified i
d0b0: 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b  n an [UPDATE], [
d0c0: 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53  DELETE], or [INS
d0d0: 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ERT].  statement
d0e0: 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75   must be an unqu
d0f0: 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61  alified table na
d100: 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  me.  In other wo
d110: 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20  rds, one must.  
d120: 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62  use just "<i>tab
d130: 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20  lename</i>" not 
d140: 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e  "<i>database</i>
d150: 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65  <b>.</b><i>table
d160: 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e  name</i>".  when
d170: 20 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20   specifying the 
d180: 74 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74  table.)^  ^The t
d190: 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66  able to be modif
d1a0: 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69  ied must exist i
d1b0: 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74  n the.  same dat
d1c0: 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
d1d0: 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
d1e0: 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
d1f0: 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c  is attached..  <
d200: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
d210: 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54  >.  ^The "INSERT
d220: 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f   INTO <i>table</
d230: 69 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  i> DEFAULT VALUE
d240: 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b  S" form of the [
d250: 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e  INSERT] statemen
d260: 74 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  t.  is not suppo
d270: 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  rted..  </p></li
d280: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
d290: 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
d2a0: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
d2b0: 75 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  uses are not sup
d2c0: 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41  ported for [UPDA
d2d0: 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54  TE] and.  [DELET
d2e0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  E] statements.. 
d2f0: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
d300: 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45  <p>.  ^(The ORDE
d310: 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
d320: 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54  lauses on [UPDAT
d330: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
d340: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e  statements are n
d350: 6f 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20  ot.  supported. 
d360: 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
d370: 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d  MIT are not norm
d380: 61 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66  ally supported f
d390: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20  or [UPDATE] or. 
d3a0: 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79   [DELETE] in any
d3b0: 20 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e   context but can
d3c0: 20 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20   be enabled for 
d3d0: 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
d3e0: 65 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65  ents.  using the
d3f0: 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
d400: 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
d410: 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  MIT] compile-tim
d420: 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76  e option.  Howev
d430: 65 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69  er,.  that compi
d440: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f  le-time option o
d450: 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74  nly applies to t
d460: 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45  op-level [UPDATE
d470: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20  ] and [DELETE]. 
d480: 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74   statements, not
d490: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
d4a0: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
d4b0: 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
d4c0: 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  s.)^.  </p></li>
d4d0: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 5b 63 6f  ..<li><p>.  ^[co
d4e0: 6d 6d 6f 6e 2d 74 61 62 6c 65 2d 65 78 70 72 65  mmon-table-expre
d4f0: 73 73 69 6f 6e 7c 43 6f 6d 6d 6f 6e 20 74 61 62  ssion|Common tab
d500: 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 61  le expression] a
d510: 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  re not supported
d520: 20 66 6f 72 0a 20 20 73 74 61 74 65 6d 65 6e 74   for.  statement
d530: 73 20 69 6e 73 69 64 65 20 6f 66 20 74 72 69 67  s inside of trig
d540: 67 65 72 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  gers..  </p></li
d550: 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64  >.</ul>..<tcl>hd
d560: 5f 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61  _fragment instea
d570: 64 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e  d_of_trigger {IN
d580: 53 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45  STEAD OF} {INSTE
d590: 41 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f  AD OF trigger}</
d5a0: 74 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44  tcl>.<h3>INSTEAD
d5b0: 20 4f 46 20 74 72 69 67 67 65 72 73 3c 2f 68 33   OF triggers</h3
d5c0: 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20  >..<p>^Triggers 
d5d0: 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 20 6f  may be created o
d5e0: 6e 20 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65  n [views], as we
d5f0: 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74  ll as ordinary t
d600: 61 62 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66  ables, by.specif
d610: 79 69 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20  ying INSTEAD OF 
d620: 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 52  in the CREATE TR
d630: 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e  IGGER statement.
d640: 20 0a 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72   .^If one or mor
d650: 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20  e ON INSERT, ON 
d660: 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44  DELETE.or ON UPD
d670: 41 54 45 20 74 72 69 67 67 65 72 73 20 61 72 65  ATE triggers are
d680: 20 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69   defined on a vi
d690: 65 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e  ew, then it is n
d6a0: 6f 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65  ot an.error to e
d6b0: 78 65 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54  xecute an INSERT
d6c0: 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  , DELETE or UPDA
d6d0: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20  TE statement on 
d6e0: 74 68 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65  the view, .respe
d6f0: 63 74 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65  ctively.  ^Inste
d700: 61 64 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e  ad,.executing an
d710: 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20   INSERT, DELETE 
d720: 6f 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65  or UPDATE on the
d730: 20 76 69 65 77 20 63 61 75 73 65 73 20 74 68 65   view causes the
d740: 20 61 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67   associated.trig
d750: 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54  gers to fire. ^T
d760: 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75  he real tables u
d770: 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69  nderlying the vi
d780: 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66  ew are not modif
d790: 69 65 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73  ied.(except poss
d7a0: 69 62 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c  ibly explicitly,
d7b0: 20 62 79 20 61 20 74 72 69 67 67 65 72 20 70 72   by a trigger pr
d7c0: 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ogram).</p>..<p>
d7d0: 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b  ^Note that the [
d7e0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
d7f0: 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f  )] and [sqlite3_
d800: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d  total_changes()]
d810: 20 69 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e   interfaces.do n
d820: 6f 74 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44  ot count INSTEAD
d830: 20 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69   OF trigger firi
d840: 6e 67 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f  ngs, but the.[co
d850: 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67  unt_changes prag
d860: 6d 61 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49  ma] does count I
d870: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
d880: 72 20 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c  r firing.</p>..<
d890: 68 33 3e 53 6f 6d 65 20 45 78 61 6d 70 6c 65 20  h3>Some Example 
d8a0: 54 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c  Triggers</h3>..<
d8b0: 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68 61  p>^(Assuming tha
d8c0: 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f 72  t customer recor
d8d0: 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ds are stored in
d8e0: 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73 22   the "customers"
d8f0: 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74   table, and.that
d900: 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20 61   order records a
d910: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
d920: 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65 2c   "orders" table,
d930: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 55   the following.U
d940: 50 44 41 54 45 20 74 72 69 67 67 65 72 0a 65 6e  PDATE trigger.en
d950: 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61  sures that all a
d960: 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73  ssociated orders
d970: 20 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20   are redirected 
d980: 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20  when a customer 
d990: 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68  changes.his or h
d9a0: 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a  er address:</p>.
d9b0: 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a  .<tcl>Example {.
d9c0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 75  CREATE TRIGGER u
d9d0: 70 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61  pdate_customer_a
d9e0: 64 64 72 65 73 73 20 55 50 44 41 54 45 20 4f 46  ddress UPDATE OF
d9f0: 20 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74   address ON cust
da00: 6f 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20  omers .  BEGIN. 
da10: 20 20 20 55 50 44 41 54 45 20 6f 72 64 65 72 73     UPDATE orders
da20: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e   SET address = n
da30: 65 77 2e 61 64 64 72 65 73 73 20 57 48 45 52 45  ew.address WHERE
da40: 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d   customer_name =
da50: 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44   old.name;.  END
da60: 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69  ;.}</tcl>..<p>Wi
da70: 74 68 20 74 68 69 73 20 74 72 69 67 67 65 72 20  th this trigger 
da80: 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75  installed, execu
da90: 74 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65  ting the stateme
daa0: 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78  nt:</p>..<tcl>Ex
dab0: 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63  ample {.UPDATE c
dac0: 75 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64 64  ustomers SET add
dad0: 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53  ress = '1 Main S
dae0: 74 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20 3d  t.' WHERE name =
daf0: 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d   'Jack Jones';.}
db00: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65  </tcl>..<p>cause
db10: 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  s the following 
db20: 74 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61  to be automatica
db30: 6c 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f 70  lly executed:</p
db40: 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20  >..<tcl>Example 
db50: 7b 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73 20  {.UPDATE orders 
db60: 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31  SET address = '1
db70: 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45   Main St.' WHERE
db80: 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d   customer_name =
db90: 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d   'Jack Jones';.}
dba0: 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 70 3e 46 6f 72  </tcl>)^..<p>For
dbb0: 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 61   an example of a
dbc0: 6e 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  n INSTEAD OF tri
dbd0: 67 67 65 72 2c 20 63 6f 6e 73 69 64 65 72 20 74  gger, consider t
dbe0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68  he following sch
dbf0: 65 6d 61 3a 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  ema:..<tcl>Examp
dc00: 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 41 42 4c  le {.CREATE TABL
dc10: 45 20 63 75 73 74 6f 6d 65 72 28 0a 20 20 63 75  E customer(.  cu
dc20: 73 74 5f 69 64 20 49 4e 54 45 47 45 52 20 50 52  st_id INTEGER PR
dc30: 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 63 75 73  IMARY KEY,.  cus
dc40: 74 5f 6e 61 6d 65 20 54 45 58 54 2c 0a 20 20 63  t_name TEXT,.  c
dc50: 75 73 74 5f 61 64 64 72 20 54 45 58 54 0a 29 3b  ust_addr TEXT.);
dc60: 0a 43 52 45 41 54 45 20 56 49 45 57 20 63 75 73  .CREATE VIEW cus
dc70: 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 41 53  tomer_address AS
dc80: 0a 20 20 20 53 45 4c 45 43 54 20 63 75 73 74 5f  .   SELECT cust_
dc90: 69 64 2c 20 63 75 73 74 5f 61 64 64 72 20 46 52  id, cust_addr FR
dca0: 4f 4d 20 63 75 73 74 6f 6d 65 72 3b 0a 43 52 45  OM customer;.CRE
dcb0: 41 54 45 20 54 52 49 47 47 45 52 20 63 75 73 74  ATE TRIGGER cust
dcc0: 5f 61 64 64 72 5f 63 68 6e 67 0a 49 4e 53 54 45  _addr_chng.INSTE
dcd0: 41 44 20 4f 46 20 55 50 44 41 54 45 20 4f 46 20  AD OF UPDATE OF 
dce0: 63 75 73 74 5f 61 64 64 72 20 4f 4e 20 63 75 73  cust_addr ON cus
dcf0: 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 0a 42 45  tomer_address.BE
dd00: 47 49 4e 0a 20 20 55 50 44 41 54 45 20 63 75 73  GIN.  UPDATE cus
dd10: 74 6f 6d 65 72 20 53 45 54 20 63 75 73 74 5f 61  tomer SET cust_a
dd20: 64 64 72 3d 4e 45 57 2e 63 75 73 74 5f 61 64 64  ddr=NEW.cust_add
dd30: 72 0a 20 20 20 57 48 45 52 45 20 63 75 73 74 5f  r.   WHERE cust_
dd40: 69 64 3d 4e 45 57 2e 63 75 73 74 5f 69 64 3b 0a  id=NEW.cust_id;.
dd50: 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  END;.}</tcl>..<p
dd60: 3e 57 69 74 68 20 74 68 65 20 73 63 68 65 6d 61  >With the schema
dd70: 20 61 62 6f 76 65 2c 20 61 20 73 74 61 74 65 6d   above, a statem
dd80: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a  ent of the form:
dd90: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
dda0: 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74  le {.UPDATE cust
ddb0: 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 53 45 54  omer_address SET
ddc0: 20 63 75 73 74 5f 61 64 64 72 3d 24 6e 65 77 5f   cust_addr=$new_
ddd0: 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63 75  address WHERE cu
dde0: 73 74 5f 69 64 3d 24 63 75 73 74 5f 69 64 3b 0a  st_id=$cust_id;.
ddf0: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 75 73  }</tcl>..<p>Caus
de00: 65 73 20 74 68 65 20 63 75 73 74 6f 6d 65 72 2e  es the customer.
de10: 63 75 73 74 5f 61 64 64 72 20 66 69 65 6c 64 20  cust_addr field 
de20: 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 66 6f  to be updated fo
de30: 72 20 61 20 73 70 65 63 69 66 69 63 0a 63 75 73  r a specific.cus
de40: 74 6f 6d 65 72 20 65 6e 74 72 79 20 74 68 61 74  tomer entry that
de50: 20 68 61 73 20 63 75 73 74 6f 6d 65 72 2e 63 75   has customer.cu
de60: 73 74 5f 69 64 20 65 71 75 61 6c 20 74 6f 20 74  st_id equal to t
de70: 68 65 20 24 63 75 73 74 5f 69 64 20 70 61 72 61  he $cust_id para
de80: 6d 65 74 65 72 2e 0a 4e 6f 74 65 20 68 6f 77 20  meter..Note how 
de90: 74 68 65 20 76 61 6c 75 65 73 20 61 73 73 69 67  the values assig
dea0: 6e 65 64 20 74 6f 20 74 68 65 20 76 69 65 77 20  ned to the view 
deb0: 61 72 65 20 6d 61 64 65 20 61 76 61 69 6c 61 62  are made availab
dec0: 6c 65 20 61 73 20 66 69 65 6c 64 0a 69 6e 20 74  le as field.in t
ded0: 68 65 20 73 70 65 63 69 61 6c 20 22 4e 45 57 22  he special "NEW"
dee0: 20 74 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68   table within th
def0: 65 20 74 72 69 67 67 65 72 20 62 6f 64 79 2e 3c  e trigger body.<
df00: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
df10: 67 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f  gment undef_befo
df20: 72 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45  re {undefined BE
df30: 46 4f 52 45 20 74 72 69 67 67 65 72 20 62 65 68  FORE trigger beh
df40: 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  avior}</tcl>.<h3
df50: 3e 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65  >Cautions On The
df60: 20 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74   Use Of BEFORE t
df70: 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  riggers</h3>..<p
df80: 3e 49 66 20 61 20 42 45 46 4f 52 45 20 55 50 44  >If a BEFORE UPD
df90: 41 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45  ATE or BEFORE DE
dfa0: 4c 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64  LETE trigger mod
dfb0: 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73  ifies or deletes
dfc0: 20 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20   a row.that was 
dfd0: 74 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70 64  to have been upd
dfe0: 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c  ated or deleted,
dff0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e000: 20 6f 66 20 74 68 65 20 73 75 62 73 65 71 75 65   of the subseque
e010: 6e 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c  nt.update or del
e020: 65 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  ete operation is
e030: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72   undefined.  Fur
e040: 74 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42  thermore, if a B
e050: 45 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f  EFORE trigger.mo
e060: 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65  difies or delete
e070: 73 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74  s a row, then it
e080: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68   is undefined wh
e090: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54  ether or not AFT
e0a0: 45 52 20 74 72 69 67 67 65 72 73 0a 74 68 61 74  ER triggers.that
e0b0: 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65   would have othe
e0c0: 72 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f  rwise run on tho
e0d0: 73 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20  se rows will in 
e0e0: 66 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a  fact run..</p>..
e0f0: 3c 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20  <p>The value of 
e100: 4e 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64  NEW.rowid is und
e110: 65 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f  efined in a BEFO
e120: 52 45 20 49 4e 53 45 52 54 20 74 72 69 67 67 65  RE INSERT trigge
e130: 72 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72  r in which.the r
e140: 6f 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c  owid is not expl
e150: 69 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e  icitly set to an
e160: 20 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c   integer.</p>..<
e170: 70 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68 65  p>Because of the
e180: 20 62 65 68 61 76 69 6f 72 73 20 64 65 73 63 72   behaviors descr
e190: 69 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67  ibed above, prog
e1a0: 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f  rammers are enco
e1b0: 75 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72  uraged to.prefer
e1c0: 20 41 46 54 45 52 20 74 72 69 67 67 65 72 73 20   AFTER triggers 
e1d0: 6f 76 65 72 20 42 45 46 4f 52 45 20 74 72 69 67  over BEFORE trig
e1e0: 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  gers.</p>..<tcl>
e1f0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 61 69 73  hd_fragment rais
e200: 65 20 7b 52 41 49 53 45 20 66 75 6e 63 74 69 6f  e {RAISE functio
e210: 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  n}</tcl>.<h3>The
e220: 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f   RAISE() functio
e230: 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73  n</h3>..<p>^(A s
e240: 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74  pecial SQL funct
e250: 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20  ion RAISE() may 
e260: 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  be used within a
e270: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
e280: 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f 6c  ,)^.with the fol
e290: 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70  lowing syntax</p
e2a0: 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  > ..<tcl>BubbleD
e2b0: 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e  iagram raise-fun
e2c0: 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ction</tcl>..<p>
e2d0: 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52 41  ^(When one of RA
e2e0: 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e  ISE(ROLLBACK,...
e2f0: 29 2c 20 52 41 49 53 45 28 41 42 4f 52 54 2c 2e  ), RAISE(ABORT,.
e300: 2e 2e 29 20 6f 72 20 52 41 49 53 45 28 46 41 49  ..) or RAISE(FAI
e310: 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65 64  L,...).is called
e320: 20 64 75 72 69 6e 67 20 74 72 69 67 67 65 72 2d   during trigger-
e330: 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69 6f  program.executio
e340: 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64  n, the specified
e350: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70   [ON CONFLICT] p
e360: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65 72  rocessing is per
e370: 66 6f 72 6d 65 64 0a 74 68 65 20 63 75 72 72 65  formed.the curre
e380: 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61  nt query termina
e390: 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72 20  tes.)^.An error 
e3a0: 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f  code of [SQLITE_
e3b0: 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72  CONSTRAINT] is r
e3c0: 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61  eturned to the a
e3d0: 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e  pplication,.alon
e3e0: 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  g with the speci
e3f0: 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61  fied error messa
e400: 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ge.</p>..<p>^Whe
e410: 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20  n RAISE(IGNORE) 
e420: 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72  is called, the r
e430: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20  emainder of the 
e440: 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20  current trigger 
e450: 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61  program,.the sta
e460: 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73  tement that caus
e470: 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ed the trigger p
e480: 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
e490: 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71  e and any subseq
e4a0: 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f  uent.trigger pro
e4b0: 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64  grams that would
e4c0: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
e4d0: 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65  ted are abandone
e4e0: 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a  d. ^No database.
e4f0: 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c  changes are roll
e500: 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68  ed back.  ^If th
e510: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  e statement that
e520: 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67   caused the trig
e530: 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65  ger program.to e
e540: 78 65 63 75 74 65 20 69 73 20 69 74 73 65 6c 66  xecute is itself
e550: 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
e560: 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e  er program, then
e570: 20 74 68 61 74 20 74 72 69 67 67 65 72 20 70 72   that trigger pr
e580: 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78  ogram.resumes ex
e590: 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62  ecution at the b
e5a0: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
e5b0: 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a  next step..</p>.
e5c0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
e5d0: 74 20 74 65 6d 70 74 72 69 67 20 7b 54 45 4d 50  t temptrig {TEMP
e5e0: 20 74 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f 6e   triggers on non
e5f0: 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f 74  -TEMP tables}</t
e600: 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72 69  cl>.<h3>TEMP Tri
e610: 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d  ggers on Non-TEM
e620: 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  P Tables</h3>..<
e630: 70 3e 5e 28 41 20 74 72 69 67 67 65 72 20 6e 6f  p>^(A trigger no
e640: 72 6d 61 6c 6c 79 20 65 78 69 73 74 73 20 69 6e  rmally exists in
e650: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
e660: 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  se as the table 
e670: 6e 61 6d 65 64 0a 61 66 74 65 72 20 74 68 65 20  named.after the 
e680: 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e 20  "ON" keyword in 
e690: 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  the CREATE TRIGG
e6a0: 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 45  ER statement.  E
e6b0: 78 63 65 70 74 2c 20 69 74 20 69 73 0a 70 6f 73  xcept, it is.pos
e6c0: 73 69 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20  sible to create 
e6d0: 61 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 6f  a TEMP TRIGGER o
e6e0: 6e 20 61 20 74 61 62 6c 65 20 69 6e 20 61 6e 6f  n a table in ano
e6f0: 74 68 65 72 20 64 61 74 61 62 61 73 65 2e 29 5e  ther database.)^
e700: 20 20 0a 53 75 63 68 20 61 20 74 72 69 67 67 65    .Such a trigge
e710: 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72 65  r will only fire
e720: 20 77 68 65 6e 20 63 68 61 6e 67 65 73 0a 61 72   when changes.ar
e730: 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 74 61  e made to the ta
e740: 72 67 65 74 20 74 61 62 6c 65 20 62 79 20 74 68  rget table by th
e750: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 68  e application th
e760: 61 74 20 64 65 66 69 6e 65 64 20 74 68 65 20 74  at defined the t
e770: 72 69 67 67 65 72 2e 0a 4f 74 68 65 72 20 61 70  rigger..Other ap
e780: 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20  plications that 
e790: 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61 62  modify the datab
e7a0: 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  ase will not be 
e7b0: 61 62 6c 65 20 74 6f 20 73 65 65 20 74 68 65 0a  able to see the.
e7c0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 61 6e 64  TEMP trigger and
e7d0: 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72 75   hence cannot ru
e7e0: 6e 20 74 68 65 20 74 72 69 67 67 65 72 2e 3c 2f  n the trigger.</
e7f0: 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66 69  p>..<p>When defi
e800: 6e 69 6e 67 20 61 20 54 45 4d 50 20 74 72 69 67  ning a TEMP trig
e810: 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d  ger on a non-TEM
e820: 50 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20 69  P table, it is i
e830: 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65 63  mportant to.spec
e840: 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65  ify the database
e850: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f 6e   holding the non
e860: 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20 20 46 6f  -TEMP table.  Fo
e870: 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74 68  r example,.in th
e880: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
e890: 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 69 6d 70  ement, it is imp
e8a0: 6f 72 74 61 6e 74 20 74 6f 20 73 61 79 20 22 6d  ortant to say "m
e8b0: 61 69 6e 2e 74 61 62 31 22 20 69 6e 73 74 65 61  ain.tab1" instea
e8c0: 64 0a 6f 66 20 6a 75 73 74 20 22 74 61 62 31 22  d.of just "tab1"
e8d0: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
e8e0: 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
e8f0: 54 45 4d 50 20 54 52 49 47 47 45 52 20 65 78 31  TEMP TRIGGER ex1
e900: 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e   AFTER INSERT ON
e910: 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62   <b>main.</b>tab
e920: 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72  1 BEGIN ....</pr
e930: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
e940: 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f 20 73  .<p>Failure to s
e950: 70 65 63 69 66 79 20 74 68 65 20 64 61 74 61 62  pecify the datab
e960: 61 73 65 20 6e 61 6d 65 20 6f 6e 20 74 68 65 20  ase name on the 
e970: 74 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f 75  target table cou
e980: 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68 65  ld result.in the
e990: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 62 65   TEMP trigger be
e9a0: 69 6e 67 20 72 65 61 74 74 61 63 68 65 64 20 74  ing reattached t
e9b0: 6f 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 74  o a table with t
e9c0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e 0a  he same name in.
e9d0: 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  another database
e9e0: 20 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73 63   whenever any sc
e9f0: 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63 75  hema change occu
ea00: 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  rs.</p>..<tcl>.#
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 23  ################
ea30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
ea60: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
ea70: 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77  IEW} {createview
ea80: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d  } {{CREATE VIEW}
ea90: 20 76 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 52   view *views}..R
eaa0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
eab0: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69 65  agram create-vie
eac0: 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  w-stmt.</tcl>..<
ead0: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56 49  p>^The CREATE VI
eae0: 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67  EW command assig
eaf0: 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70  ns a name to a p
eb00: 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53 45  re-packaged .[SE
eb10: 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2e  LECT] statement.
eb20: 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65 77   .^Once the view
eb30: 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74 20   is created, it 
eb40: 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74  can be used in t
eb50: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 6f  he FROM clause.o
eb60: 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45 43  f another [SELEC
eb70: 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  T] in place of a
eb80: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70   table name..</p
eb90: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54  >..<p>^If the "T
eba0: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
ebb0: 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  RY" keyword occu
ebc0: 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43  rs in between "C
ebd0: 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45 57  REATE".and "VIEW
ebe0: 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20  " then the view 
ebf0: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
ec00: 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20  is only visible 
ec10: 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20 74  to the.process t
ec20: 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20 64  hat opened the d
ec30: 61 74 61 62 61 73 65 20 61 6e 64 20 69 73 20 61  atabase and is a
ec40: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
ec50: 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61  eted when.the da
ec60: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
ec70: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61  .</p>..<p> ^If a
ec80: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
ec90: 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66  me&gt; is specif
eca0: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69  ied, then the vi
ecb0: 65 77 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  ew is created in
ecc0: 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61   .the named data
ecd0: 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20  base. ^It is an 
ece0: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
ecf0: 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61   both a &lt;data
ed00: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e  base-name&gt;.an
ed10: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
ed20: 72 64 20 6f 6e 20 61 20 56 49 45 57 2c 20 75 6e  rd on a VIEW, un
ed30: 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74  less the &lt;dat
ed40: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
ed50: 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f  s "temp"..^If no
ed60: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69   database name i
ed70: 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64  s specified, and
ed80: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
ed90: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
eda0: 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20 63 72  ,.the VIEW is cr
edb0: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69  eated in the mai
edc0: 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  n database.</p>.
edd0: 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20  .<p>^You cannot 
ede0: 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52  [DELETE], [INSER
edf0: 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
ee00: 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73 20  a view.  ^Views 
ee10: 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69  are read-only .i
ee20: 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65  n SQLite.  ^Howe
ee30: 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73  ver, in many cas
ee40: 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61  es you can use a
ee50: 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72  n.[INSTEAD OF tr
ee60: 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69  igger] on the vi
ee70: 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68  ew to accomplish
ee80: 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67   .the same thing
ee90: 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65  .  ^Views are re
eea0: 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65 20  moved .with the 
eeb0: 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d  [DROP VIEW] comm
eec0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<tcl>.
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 23  ################
ef00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
ef20: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
ef30: 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63  IRTUAL TABLE} {c
ef40: 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52 45  reatevtab} {{CRE
ef50: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
ef60: 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  E}}..RecursiveBu
ef70: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
ef80: 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  te-virtual-table
ef90: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
efa0: 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  >A [virtual tabl
efb0: 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61  e] is an interfa
efc0: 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61  ce to an externa
efd0: 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d  l storage or com
efe0: 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20  putation.engine 
eff0: 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20  that appears to 
f000: 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64  be a table but d
f010: 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  oes not actually
f020: 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69   store informati
f030: 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  on.in the databa
f040: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
f050: 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75  >In general, you
f060: 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67   can do anything
f070: 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61 6c   with a [virtual
f080: 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61 6e   table] that can
f090: 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e   be done.with an
f0a0: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c   ordinary table,
f0b0: 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79 6f   except that ^yo
f0c0: 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20  u cannot create 
f0d0: 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67 67  indices or trigg
f0e0: 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c  ers on a.virtual
f0f0: 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76   table.  ^Some v
f100: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
f110: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67  lementations mig
f120: 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69  ht impose additi
f130: 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e  onal.restriction
f140: 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  s.  For example,
f150: 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61   many virtual ta
f160: 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e  bles are read-on
f170: 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
f180: 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26  &lt;module-name&
f190: 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20  gt; is the name 
f1a0: 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  of an object tha
f1b0: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65  t implements.the
f1c0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
f1d0: 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65   ^The &lt;module
f1e0: 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62  -name&gt; must b
f1f0: 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74  e registered wit
f200: 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61 74  h.the SQLite dat
f210: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
f220: 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
f230: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d  create_module()]
f240: 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65   or [sqlite3_cre
f250: 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d  ate_module_v2()]
f260: 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e  .prior to issuin
f270: 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  g the CREATE VIR
f280: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
f290: 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c  ment..^The modul
f2a0: 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20  e takes zero or 
f2b0: 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72  more comma-separ
f2c0: 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a  ated arguments..
f2d0: 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63  ^The arguments c
f2e0: 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74  an be just about
f2f0: 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e   any text as lon
f300: 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c 61  g as it has bala
f310: 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73  nced.parentheses
f320: 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  .  The argument 
f330: 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69 63  syntax is suffic
f340: 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74  iently general t
f350: 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74  hat the.argument
f360: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
f370: 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75   appear as [colu
f380: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20  mn definitions] 
f390: 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c  in a traditional
f3a0: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
f3b0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51  statement.  .^SQ
f3c0: 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20  Lite passes the 
f3d0: 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73  module arguments
f3e0: 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65   directly.to the
f3f0: 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b   [xCreate] and [
f400: 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64  xConnect] method
f410: 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  s of the module 
f420: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77  implementation.w
f430: 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
f440: 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69  pretation.  It i
f450: 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69  s the responsibi
f460: 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75  lity.of the modu
f470: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
f480: 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69  n to parse and i
f490: 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e  nterpret its own
f4a0: 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a   arguments.</p>.
f4b0: 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74  .<p>^A virtual t
f4c0: 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65  able is destroye
f4d0: 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69  d using the ordi
f4e0: 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45  nary.[DROP TABLE
f4f0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
f500: 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56  ere is no.DROP V
f510: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
f520: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63  tement.</p>..<tc
f530: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
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 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f580: 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45  #.Section DELETE
f590: 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20   delete {DELETE 
f5a0: 2a 44 45 4c 45 54 45 73 7d 0a 0a 52 65 63 75 72  *DELETEs}..Recur
f5b0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
f5c0: 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 0a 3c 2f  m delete-stmt.</
f5d0: 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45 4c  tcl>..<p>The DEL
f5e0: 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f  ETE command remo
f5f0: 76 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f 6d  ves records from
f600: 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74   the table ident
f610: 69 66 69 65 64 20 62 79 20 74 68 65 0a 20 20 20  ified by the.   
f620: 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61 62  <i>qualified-tab
f630: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c  le-name</i>. ..<
f640: 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45 20  p>^If the WHERE 
f650: 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70 72  clause is not pr
f660: 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72  esent, all recor
f670: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
f680: 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20  are deleted..   
f690: 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75  ^If a WHERE clau
f6a0: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
f6b0: 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20  then only those 
f6c0: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
f6d0: 68 65 0a 20 20 20 72 65 73 75 6c 74 20 6f 66 20  he.   result of 
f6e0: 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57  evaluating the W
f6f0: 48 45 52 45 20 63 6c 61 75 73 65 20 61 73 20 61  HERE clause as a
f700: 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
f710: 73 69 6f 6e 7c 0a 20 20 20 62 6f 6f 6c 65 61 6e  sion|.   boolean
f720: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
f730: 72 75 65 5d 20 61 72 65 20 64 65 6c 65 74 65 64  rue] are deleted
f740: 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69  ...<h3>Restricti
f750: 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53 74  ons on DELETE St
f760: 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20  atements Within 
f770: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f  CREATE TRIGGER</
f780: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h3>..<p>The foll
f790: 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f  owing restrictio
f7a0: 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c 45  ns apply to DELE
f7b0: 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  TE statements th
f7c0: 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at occur within 
f7d0: 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20 61  the.   body of a
f7e0: 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
f7f0: 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75  ] statement:..<u
f800: 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  l>.  <li><p>^The
f810: 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
f820: 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20  i> specified as 
f830: 70 61 72 74 20 6f 66 20 61 20 44 45 4c 45 54 45  part of a DELETE
f840: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69   statement withi
f850: 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72 20  n.    a trigger 
f860: 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e 71  body must be unq
f870: 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e 20  ualified.  ^(In 
f880: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
f890: 0a 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73 65  .    <i>database
f8a0: 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  -name</i><b>.</b
f8b0: 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  > prefix on the 
f8c0: 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e 6f  table name is no
f8d0: 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20 77  t allowed .    w
f8e0: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29  ithin triggers.)
f8f0: 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20  ^ ^If the table 
f900: 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
f910: 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
f920: 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20 74   is.    not in t
f930: 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
f940: 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20 73 74  , then DELETE st
f950: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
f960: 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20 20  the trigger.    
f970: 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72 61 74  body must operat
f980: 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74 68  e on tables with
f990: 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  in the same data
f9a0: 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20  base as it. ^If 
f9b0: 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 74 6f  the table.    to
f9c0: 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
f9d0: 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69  er is attached i
f9e0: 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
f9f0: 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65  tabase, then the
fa00: 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64  .    unqualified
fa10: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
fa20: 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64  le being deleted
fa30: 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20   is resolved in 
fa40: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a  the same way as.
fa50: 20 20 20 20 69 74 20 69 73 20 66 6f 72 20 61 20      it is for a 
fa60: 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
fa70: 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69 6e  ent (by searchin
fa80: 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d 50  g first the TEMP
fa90: 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 0a   database, then.
faa0: 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64 61 74      the main dat
fab0: 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20  abase, then any 
fac0: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20  other databases 
fad0: 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65  in the order the
fae0: 79 20 77 65 72 65 0a 20 20 20 20 61 74 74 61 63  y were.    attac
faf0: 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c 69  hed)..    .  <li
fb00: 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44  ><p>^The INDEXED
fb10: 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45   BY and NOT INDE
fb20: 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20  XED clauses are 
fb30: 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 44  not allowed on D
fb40: 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74 65 6d  ELETE.    statem
fb50: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
fb60: 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69  gers.</p>..  <li
fb70: 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61  ><p>^The LIMIT a
fb80: 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  nd ORDER BY clau
fb90: 73 65 73 20 28 64 65 73 63 72 69 62 65 64 20 62  ses (described b
fba0: 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75 70 70  elow) are unsupp
fbb0: 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20 44 45  orted for.    DE
fbc0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  LETE statements 
fbd0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
fbe0: 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e  </p>.</ul>..<h3>
fbf0: 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61  Optional LIMIT a
fc00: 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  nd ORDER BY clau
fc10: 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49  ses</h3>..<p>^(I
fc20: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
fc30: 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b 53  iled with the [S
fc40: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
fc50: 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
fc60: 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ].compile-time o
fc70: 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ption, then the 
fc80: 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45  syntax of the DE
fc90: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
fca0: 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74 68  s.extended by th
fcb0: 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70  e addition of op
fcc0: 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20  tional ORDER BY 
fcd0: 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
fce0: 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  s:)^</p>..<tcl>B
fcf0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c  ubbleDiagram del
fd00: 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64  ete-stmt-limited
fd10: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61  </tcl>..<p>^If a
fd20: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
fd30: 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c  t has a LIMIT cl
fd40: 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75  ause, the maximu
fd50: 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  m number of rows
fd60: 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 64 65   that.will be de
fd70: 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62  leted is found b
fd80: 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
fd90: 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78   accompanying ex
fda0: 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73  pression and cas
fdb0: 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e  ting.it to an in
fdc0: 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 49 66  teger value. ^If
fdd0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
fde0: 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  he evaluating th
fdf0: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 63  e LIMIT clause.c
fe00: 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
fe10: 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
fe20: 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
fe30: 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  e, it is an erro
fe40: 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76 65 20  r. ^A .negative 
fe50: 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73 20 69  LIMIT value is i
fe60: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22 6e  nterpreted as "n
fe70: 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20 74  o limit". ^(If t
fe80: 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
fe90: 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20 61 6e  ent .also has an
fea0: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
feb0: 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c  then it is simil
fec0: 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61  arly evaluated a
fed0: 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a 69 6e  nd cast to an.in
fee0: 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41 67 61  teger value. Aga
fef0: 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  in, it is an err
ff00: 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  or if the value 
ff10: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
ff20: 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20 74  ssly.converted t
ff30: 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e 20  o an integer.)^ 
ff40: 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
ff50: 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 6f  OFFSET clause, o
ff60: 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65 64  r the calculated
ff70: 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69  .integer value i
ff80: 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 20  s negative, the 
ff90: 65 66 66 65 63 74 69 76 65 20 4f 46 46 53 45 54  effective OFFSET
ffa0: 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e 0a   value is zero..
ffb0: 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44 45 4c  .<p>^(If the DEL
ffc0: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
ffd0: 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  s an ORDER BY cl
ffe0: 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72  ause, then all r
fff0: 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20 0a  ows that would .
10000 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68  be deleted in th
10010 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
10020 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
10030 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69  e sorted accordi
10040 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44 45 52  ng to the .ORDER
10050 20 42 59 2e 20 54 68 65 20 66 69 72 73 74 20 3c   BY. The first <
10060 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77 68  i>M</i> rows, wh
10070 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20  ere <i>M</i> is 
10080 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20  the value found 
10090 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by.evaluating th
100a0 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  e OFFSET clause 
100b0 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20  expression, are 
100c0 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74 68 65  skipped, and the
100d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e   following .<i>N
100e0 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e 4e  </i>, where <i>N
100f0 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75  </i> is the valu
10100 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 65  e of the LIMIT e
10110 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 64  xpression, are d
10120 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74 68  eleted.)^.^If th
10130 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
10140 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20  n <i>N</i> rows 
10150 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65 72 20  remaining after 
10160 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46 53 45  taking the OFFSE
10170 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61 63  T clause.into ac
10180 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74 68 65  count, or if the
10190 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 65 76   LIMIT clause ev
101a0 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e 65 67  aluated to a neg
101b0 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65  ative value, the
101c0 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67 20  n all.remaining 
101d0 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65 64  rows are deleted
101e0 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44 45  ...<p>^If the DE
101f0 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  LETE statement h
10200 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  as no ORDER BY c
10210 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
10220 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20  rows that.would 
10230 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68  be deleted in th
10240 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
10250 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
10260 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61  e assembled in a
10270 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64 65  n.arbitrary orde
10280 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e  r before applyin
10290 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  g the LIMIT and 
102a0 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20 74  OFFSET clauses t
102b0 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74 68 65  o determine .the
102c0 20 73 75 62 73 65 74 20 74 68 61 74 20 61 72 65   subset that are
102d0 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65 74 65   actually delete
102e0 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44  d...<p>^(The ORD
102f0 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20  ER BY clause on 
10300 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  a DELETE stateme
10310 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  nt is used only 
10320 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
10330 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74  ch.rows fall wit
10340 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54  hin the LIMIT. T
10350 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
10360 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74  h rows are delet
10370 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a  ed is arbitrary.
10380 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75  and is not influ
10390 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52 44  enced by the ORD
103a0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a  ER BY clause.)^.
103b0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
103c0 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20 7b 74  t truncateopt {t
103d0 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
103e0 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  tion}</tcl>.<h3>
103f0 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70 74  The Truncate Opt
10400 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a  imization</h3>..
10410 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48 45  <p>^When the WHE
10420 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  RE is omitted fr
10430 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61 74  om a DELETE stat
10440 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74 61  ement and the ta
10450 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74 65  ble.being delete
10460 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65 72  d has no trigger
10470 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20 61  s,.SQLite uses a
10480 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74  n optimization t
10490 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e 74 69  o erase the enti
104a0 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74  re table content
104b0 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20  .without having 
104c0 74 6f 20 76 69 73 69 74 20 65 61 63 68 20 72 6f  to visit each ro
104d0 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  w of the table i
104e0 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68 69  ndividually..Thi
104f0 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70 74  s "truncate" opt
10500 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73 20  imization makes 
10510 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20 6d  the delete run m
10520 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69 6f  uch faster..Prio
10530 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65 72  r to SQLite [ver
10540 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68 65  sion 3.6.5], the
10550 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
10560 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e  zation.also mean
10570 74 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69  t that the [sqli
10580 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61  te3_changes()] a
10590 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61  nd.[sqlite3_tota
105a0 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74  l_changes()] int
105b0 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65 20  erfaces.and the 
105c0 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70  [count_changes p
105d0 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20  ragma].will not 
105e0 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20  actually return 
105f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
10600 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54 68  leted rows.  .Th
10610 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62  at problem has b
10620 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66 20  een fixed as of 
10630 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e  [version 3.6.5].
10640 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63 61  ..<p>^The trunca
10650 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
10660 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e 74  can be permanent
10670 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ly disabled for 
10680 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20 72  all queries.by r
10690 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69 74  ecompiling.SQLit
106a0 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  e with the [SQLI
106b0 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54 45  TE_OMIT_TRUNCATE
106c0 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20 63  _OPTIMIZATION] c
106d0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69 74  ompile-time swit
106e0 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ch.</p>..<p>The 
106f0 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
10700 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20 62  ation can also b
10710 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72 75  e disabled at ru
10720 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65 20  ntime using.the 
10730 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74  [sqlite3_set_aut
10740 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65 72  horizer()] inter
10750 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61 75  face.  ^If an au
10760 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61 63  thorizer callbac
10770 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49 54  k.returns [SQLIT
10780 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61 6e  E_IGNORE] for an
10790 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 5d   [SQLITE_DELETE]
107a0 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74 68   action code, th
107b0 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f 70  en.the DELETE op
107c0 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f  eration will pro
107d0 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72 75  ceed but the tru
107e0 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
107f0 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61 73  on will.be bypas
10800 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69 6c  sed and rows wil
10810 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e 65  l be deleted one
10820 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74   by one.</p>..<t
10830 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
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 23 23 23 23 23 23 23 23 23 23 23 23  ################
10870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10880 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45 54  ###.Section {DET
10890 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
108a0 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 52 65  tach *DETACH..Re
108b0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
108c0 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d 74  gram detach-stmt
108d0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69  .</tcl>..<p>^Thi
108e0 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61  s statement deta
108f0 63 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e  ches an addition
10900 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  al database conn
10910 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c  ection previousl
10920 79 20 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e  y .attached usin
10930 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73  g the [ATTACH] s
10940 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57 68 65  tatement.  .^Whe
10950 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72 65 64  n not in [shared
10960 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 0a 69   cache mode], .i
10970 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f  t is possible to
10980 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
10990 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74 74  atabase file att
109a0 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20 74  ached multiple t
109b0 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66 66  imes using .diff
109c0 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e 64  erent names, and
109d0 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20 63   detaching one c
109e0 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 66  onnection to a f
109f0 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20 74  ile will leave t
10a00 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61 63  he .others intac
10a10 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68 61 72  t.</p>.^In [shar
10a20 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20  ed cache mode], 
10a30 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61 74  attempting to at
10a40 74 61 63 68 20 74 68 65 20 73 61 6d 65 20 64 61  tach the same da
10a50 74 61 62 61 73 65 20 66 69 6c 65 20 6d 6f 72 65  tabase file more
10a60 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65 73 75 6c  .than once resul
10a70 74 73 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 0a  ts in an error..
10a80 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d  .<p>^This statem
10a90 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ent will fail if
10aa0 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68   SQLite is in th
10ab0 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72  e middle of a tr
10ac0 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  ansaction.</p>..
10ad0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
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 23 23 23 23 23 23 23 23 23 23  ################
10b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10b20 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
10b30 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69  ROP INDEX} dropi
10b40 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45  ndex {{DROP INDE
10b50 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  X}}..RecursiveBu
10b60 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
10b70 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63  -index-stmt.</tc
10b80 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
10b90 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
10ba0 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64 65   removes an inde
10bb0 78 20 61 64 64 65 64 0a 77 69 74 68 20 74 68 65  x added.with the
10bc0 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
10bd0 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
10be0 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65 74  index is complet
10bf0 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  ely removed from
10c00 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20  .the disk.  The 
10c10 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f  only way to reco
10c20 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69 73  ver the index is
10c30 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a   to reenter the.
10c40 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45  appropriate [CRE
10c50 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61  ATE INDEX] comma
10c60 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  nd.</p>..<tcl>.#
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 23 23  ################
10ca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
10cc0 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42 4c  ction {DROP TABL
10cd0 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b 44  E} droptable {{D
10ce0 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ROP TABLE}}..Rec
10cf0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
10d00 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73  ram drop-table-s
10d10 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
10d20 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73  The DROP TABLE s
10d30 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
10d40 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20 77   a table added w
10d50 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45 20  ith the.[CREATE 
10d60 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
10d70 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63  .  The name spec
10d80 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61 62  ified is the.tab
10d90 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20 64  le name.  ^The d
10da0 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73 20  ropped table is 
10db0 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76  completely remov
10dc0 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
10dd0 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e 64  base .schema and
10de0 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e 20   the disk file. 
10df0 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e   The table can n
10e00 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e  ot be recovered.
10e10 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73 20    .^All indices 
10e20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73 73  and triggers.ass
10e30 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
10e40 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20   table are also 
10e50 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  deleted.</p>..<p
10e60 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49  >^The optional I
10e70 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  F EXISTS clause 
10e80 73 75 70 70 72 65 73 73 65 73 20 74 68 65 20 65  suppresses the e
10e90 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64 20  rror that would 
10ea0 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74 20  normally.result 
10eb0 69 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f 65  if the table doe
10ec0 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70 3e  s not exist.</p>
10ed0 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67  ..<p>^If [foreig
10ee0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
10ef0 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 20  s] are enabled, 
10f00 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d  a DROP TABLE com
10f10 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61 6e  mand performs an
10f20 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45 54  .implicit [DELET
10f30 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  E | DELETE FROM 
10f40 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63 6f 6d  &lt;tbl&gt;] com
10f50 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d 6f  mand before remo
10f60 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20 66  ving the.table f
10f70 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
10f80 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74 72   schema. ^Any tr
10f90 69 67 67 65 72 73 20 61 74 74 61 63 68 65 64 20  iggers attached 
10fa0 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72 65  to the table are
10fb0 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68  .dropped from th
10fc0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
10fd0 61 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d 70  a before the imp
10fe0 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
10ff0 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 0a 69  M &lt;tbl&gt; .i
11000 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20 74  s executed, so t
11010 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65  his cannot cause
11020 20 61 6e 79 20 74 72 69 67 67 65 72 73 20 74 6f   any triggers to
11030 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72 61   fire. By contra
11040 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69 74  st, ^an.implicit
11050 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74   DELETE FROM &lt
11060 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20 63 61  ;tbl&gt; does ca
11070 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67 75 72  use any configur
11080 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  ed.[foreign key 
11090 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61 6b 65  actions] to take
110a0 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74 68 65   place. .^If the
110b0 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45   implicit DELETE
110c0 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74   FROM &lt;tbl&gt
110d0 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20 70 61  ; executed.as pa
110e0 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41 42  rt of a DROP TAB
110f0 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61  LE command viola
11100 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61 74  tes any immediat
11110 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
11120 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65 72  nstraints,.an er
11130 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
11140 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73  and the table is
11150 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e 49   not dropped. ^I
11160 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74 20  f .the implicit 
11170 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
11180 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73 20 61  tbl&gt; causes a
11190 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f 72  ny .deferred for
111a0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
111b0 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61  ints to be viola
111c0 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69 6f  ted, and the vio
111d0 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65 78  lations still.ex
111e0 69 73 74 20 77 68 65 6e 20 74 68 65 20 74 72 61  ist when the tra
111f0 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d 6d  nsaction is comm
11200 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72 20  itted, an error 
11210 69 73 20 72 65 74 75 72 6e 65 64 20 61 74 20 74  is returned at t
11220 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69  he time.of commi
11230 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  t...<tcl>.######
11240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11280 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
11290 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20   {DROP TRIGGER} 
112a0 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44 52  droptrigger {{DR
112b0 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65  OP TRIGGER}}..Re
112c0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
112d0 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67 65  gram drop-trigge
112e0 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  r-stmt.</tcl>..<
112f0 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47  p>^The DROP TRIG
11300 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65  GER statement re
11310 6d 6f 76 65 73 20 61 20 74 72 69 67 67 65 72 20  moves a trigger 
11320 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20 0a  created by the .
11330 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
11340 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63   statement. ^Onc
11350 65 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20 74  e removed, the t
11360 72 69 67 67 65 72 20 64 65 66 69 6e 69 74 69 6f  rigger definitio
11370 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70  n is no.longer p
11380 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 73 71  resent in the sq
11390 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 6f 72 20  lite_master (or 
113a0 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
113b0 65 72 29 20 74 61 62 6c 65 20 61 6e 64 20 69 73  er) table and is
113c0 0a 6e 6f 74 20 66 69 72 65 64 20 62 79 20 61 6e  .not fired by an
113d0 79 20 73 75 62 73 65 71 75 65 6e 74 20 49 4e 53  y subsequent INS
113e0 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
113f0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
11400 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  ...<p>^Note that
11410 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75   triggers are au
11420 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f 70  tomatically drop
11430 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73  ped when the ass
11440 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73  ociated table is
11450 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e  .dropped...<tcl>
11460 0a 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 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
114a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
114b0 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49  Section {DROP VI
114c0 45 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b 44  EW} dropview {{D
114d0 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63 75  ROP VIEW}}..Recu
114e0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
114f0 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d  am drop-view-stm
11500 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
11510 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74  e DROP VIEW stat
11520 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20  ement removes a 
11530 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79 20  view created by 
11540 74 68 65 20 5b 43 52 45 41 54 45 20 56 49 45 57  the [CREATE VIEW
11550 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20  ] .  statement. 
11560 5e 54 68 65 20 76 69 65 77 20 64 65 66 69 6e 69  ^The view defini
11570 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20  tion is removed 
11580 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
11590 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20  e schema, but . 
115a0 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20   no actual data 
115b0 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
115c0 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73  g base tables is
115d0 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e   modified...<p>^
115e0 28 54 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f  (The view to dro
115f0 70 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  p is identified 
11600 62 79 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65  by the view-name
11610 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20   and optional . 
11620 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 73   database-name s
11630 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
11640 20 6f 66 20 74 68 65 20 44 52 4f 50 20 56 49 45   of the DROP VIE
11650 57 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69  W statement. Thi
11660 73 20 0a 20 20 72 65 66 65 72 65 6e 63 65 20 69  s .  reference i
11670 73 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67  s resolved using
11680 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 70 72   the standard pr
11690 6f 63 65 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a  ocedure for [obj
116a0 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e  ect resolution].
116b0 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68  )^..<p>.  ^If th
116c0 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77  e specified view
116d0 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64   cannot be found
116e0 20 61 6e 64 20 74 68 65 20 49 46 20 45 58 49 53   and the IF EXIS
116f0 54 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  TS clause is not
11700 20 0a 20 20 70 72 65 73 65 6e 74 2c 20 69 74 20   .  present, it 
11710 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66  is an error. ^If
11720 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
11730 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f  iew cannot be fo
11740 75 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a 20 20  und and an IF.  
11750 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73  EXISTS clause is
11760 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
11770 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
11780 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74  ent, then the st
11790 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e  atement.  is a n
117a0 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  o-op....<tcl>.##
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 23 23 23  ################
117e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117f0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
11800 74 69 6f 6e 20 7b 44 61 74 61 62 61 73 65 20 4f  tion {Database O
11810 62 6a 65 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c  bject Name Resol
11820 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20  ution} {naming} 
11830 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74  {{object resolut
11840 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  ion}}.</tcl>..<p
11850 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 61  >.  In SQLite, a
11860 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   database object
11870 20 28 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78   (a table, index
11880 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76 69 65  , trigger or vie
11890 77 29 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  w) is identified
118a0 0a 20 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  .  by the name o
118b0 66 20 74 68 65 20 6f 62 6a 65 63 74 20 61 6e 64  f the object and
118c0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
118d0 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20 69   database that i
118e0 74 20 72 65 73 69 64 65 73 20 69 6e 2e 20 0a 20  t resides in. . 
118f0 20 44 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   Database object
11900 73 20 6d 61 79 20 72 65 73 69 64 65 20 69 6e 20  s may reside in 
11910 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
11920 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74 61  e, the temp data
11930 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e  base, or in.  an
11940 20 5b 41 54 54 41 43 48 7c 61 74 74 61 63 68 65   [ATTACH|attache
11950 64 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70  d database]...<p
11960 3e 0a 20 20 54 68 65 20 73 79 6e 74 61 78 20 6f  >.  The syntax o
11970 66 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c  f the [DROP TABL
11980 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d  E], [DROP INDEX]
11990 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b  , [DROP VIEW], [
119a0 44 52 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a 20  DROP TRIGGER],. 
119b0 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54   [REINDEX], [ALT
119c0 45 52 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61  ER TABLE] and ma
119d0 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64  ny other command
119e0 73 20 61 6c 6c 20 70 65 72 6d 69 74 20 74 68 65  s all permit the
119f0 20 75 73 65 72 20 74 6f 0a 20 20 73 70 65 63 69   user to.  speci
11a00 66 79 20 61 20 64 61 74 61 62 61 73 65 20 6f 62  fy a database ob
11a10 6a 65 63 74 20 65 69 74 68 65 72 20 62 79 20 69  ject either by i
11a20 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f  ts name alone, o
11a30 72 20 62 79 20 61 20 63 6f 6d 62 69 6e 61 74 69  r by a combinati
11a40 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65  on of.  its name
11a50 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   and the name of
11a60 20 69 74 73 20 64 61 74 61 62 61 73 65 2e 20 5e   its database. ^
11a70 28 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20  (If no database 
11a80 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  is specified as 
11a90 70 61 72 74 0a 20 20 6f 66 20 74 68 65 20 6f 62  part.  of the ob
11aa0 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20  ject reference, 
11ab0 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72  then SQLite sear
11ac0 63 68 65 73 20 74 68 65 20 6d 61 69 6e 2c 20 74  ches the main, t
11ad0 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74 74 61  emp and all atta
11ae0 63 68 65 64 0a 20 20 64 61 74 61 62 61 73 65 73  ched.  databases
11af0 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20 77   for an object w
11b00 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
11b10 61 6d 65 2e 20 54 68 65 20 74 65 6d 70 20 64 61  ame. The temp da
11b20 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63 68  tabase is search
11b30 65 64 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c  ed.  first, foll
11b40 6f 77 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e  owed by the main
11b50 20 64 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f   database, follo
11b60 77 65 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64  wed all attached
11b70 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68   databases in th
11b80 65 0a 20 20 6f 72 64 65 72 20 74 68 61 74 20 74  e.  order that t
11b90 68 65 79 20 77 65 72 65 20 61 74 74 61 63 68 65  hey were attache
11ba0 64 2e 20 54 68 65 20 72 65 66 65 72 65 6e 63 65  d. The reference
11bb0 20 72 65 73 6f 6c 76 65 73 20 74 6f 20 74 68 65   resolves to the
11bc0 20 66 69 72 73 74 20 6d 61 74 63 68 0a 20 20 66   first match.  f
11bd0 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d  ound.)^ For exam
11be0 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20  ple:..<pre>^(.  
11bf0 20 20 20 20 2f 2a 20 41 64 64 20 61 20 74 61 62      /* Add a tab
11c00 6c 65 20 6e 61 6d 65 64 20 27 74 31 27 20 74 6f  le named 't1' to
11c10 20 74 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20   the temp, main 
11c20 61 6e 64 20 61 6e 20 61 74 74 61 63 68 65 64 20  and an attached 
11c30 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20  database */.    
11c40 20 20 41 54 54 41 43 48 20 27 66 69 6c 65 2e 64    ATTACH 'file.d
11c50 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20  b' AS aux;.     
11c60 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
11c70 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52  (x, y);.      CR
11c80 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
11c90 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20  t1(x, y);.      
11ca0 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
11cb0 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20  .t1(x, y);..    
11cc0 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
11cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70           /* Drop
11ce0 20 74 61 62 6c 65 20 69 6e 20 74 65 6d 70 20 64   table in temp d
11cf0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20  atabase */.     
11d00 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20   DROP TABLE t1; 
11d10 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20          /* Drop 
11d20 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61  table in main da
11d30 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  tabase */.      
11d40 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20  DROP TABLE t1;  
11d50 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74         /* Drop t
11d60 61 62 6c 65 20 69 6e 20 61 75 78 20 64 61 74 61  able in aux data
11d70 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e  base */.)^</pre>
11d80 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64 61  ..<p>.  ^If a da
11d90 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73  tabase name is s
11da0 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
11db0 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 72 65   of an object re
11dc0 66 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74  ference, it must
11dd0 20 62 65 0a 20 20 65 69 74 68 65 72 20 22 6d 61   be.  either "ma
11de0 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f  in", or "temp" o
11df0 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e  r the name of an
11e00 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
11e10 73 65 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72 0a  se. ^Like other.
11e20 20 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72    SQL identifier
11e30 73 2c 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  s, database name
11e40 73 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e  s are case-insen
11e50 73 69 74 69 76 65 2e 20 5e 49 66 20 61 20 64 61  sitive. ^If a da
11e60 74 61 62 61 73 65 20 6e 61 6d 65 0a 20 20 69 73  tabase name.  is
11e70 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
11e80 20 6f 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64 20   only the named 
11e90 64 61 74 61 62 61 73 65 20 69 73 20 73 65 61 72  database is sear
11ea0 63 68 65 64 20 66 6f 72 20 74 68 65 20 6e 61 6d  ched for the nam
11eb0 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a  ed object...<p>.
11ec0 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72 65    Most object re
11ed0 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c  ferences may onl
11ee0 79 20 72 65 73 6f 6c 76 65 20 74 6f 20 61 20 73  y resolve to a s
11ef0 70 65 63 69 66 69 63 20 74 79 70 65 20 6f 66 20  pecific type of 
11f00 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20 20 65 78  object (for.  ex
11f10 61 6d 70 6c 65 20 61 20 72 65 66 65 72 65 6e 63  ample a referenc
11f20 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
11f30 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73  f a DROP TABLE s
11f40 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c  tatement may onl
11f50 79 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61  y resolve.  to a
11f60 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e   table object, n
11f70 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20 74 72 69  ot an index, tri
11f80 67 67 65 72 20 6f 72 20 76 69 65 77 29 2e 20 48  gger or view). H
11f90 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d 65 20 63  owever in some c
11fa0 6f 6e 74 65 78 74 73 20 0a 20 20 28 65 2e 67 2e  ontexts .  (e.g.
11fb0 20 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f   [REINDEX]) an o
11fc0 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 20  bject reference 
11fd0 6d 61 79 20 62 65 20 72 65 73 6f 6c 76 65 20 74  may be resolve t
11fe0 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  o more than one 
11ff0 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74  type.  of object
12000 2e 20 5e 57 68 65 6e 20 73 65 61 72 63 68 69 6e  . ^When searchin
12010 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
12020 61 73 20 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f  as for a named o
12030 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f  bject, objects o
12040 66 0a 20 20 74 79 70 65 73 20 74 68 61 74 20 63  f.  types that c
12050 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e  annot be used in
12060 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of 
12070 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 61 72  the reference ar
12080 65 20 61 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f  e always .  igno
12090 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  red...<tcl>.####
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 23 23 23 23 23  ################
120d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120e0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
120f0 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61  on EXPLAIN expla
12100 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62  in EXPLAIN..Bubb
12110 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74  leDiagram sql-st
12120 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41  mt.</tcl>..<p>^A
12130 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
12140 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20  can be preceded 
12150 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22  by the keyword "
12160 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74  EXPLAIN" or.by t
12170 68 65 20 70 68 72 61 73 65 20 22 45 58 50 4c 41  he phrase "EXPLA
12180 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20  IN QUERY PLAN". 
12190 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63   ^Either modific
121a0 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ation causes the
121b0 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74  .SQL statement t
121c0 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71 75  o behave as a qu
121d0 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72  ery and to retur
121e0 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
121f0 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20  out.how the SQL 
12200 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
12210 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69 66  have operated if
12220 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79   the EXPLAIN key
12230 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68  word or.phrase h
12240 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e  ad been omitted.
12250 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74  </p>..<p>The out
12260 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e  put from EXPLAIN
12270 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45   and EXPLAIN QUE
12280 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e  RY PLAN is inten
12290 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74  ded for.interact
122a0 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64  ive analysis and
122b0 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67   troubleshooting
122c0 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61   only.  The deta
122d0 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70  ils of the .outp
122e0 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75  ut format are su
122f0 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20  bject to change 
12300 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65  from one release
12310 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68   of SQLite to th
12320 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74  e next..Applicat
12330 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20  ions should not 
12340 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45  use EXPLAIN or E
12350 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
12360 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78  N since.their ex
12370 61 63 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  act behavior is 
12380 76 61 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c  variable and onl
12390 79 20 70 61 72 74 69 61 6c 6c 79 20 64 6f 63 75  y partially docu
123a0 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mented.</p>..<p>
123b0 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49  ^When the EXPLAI
123c0 4e 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72  N keyword appear
123d0 73 20 62 79 20 69 74 73 65 6c 66 20 69 74 20 63  s by itself it c
123e0 61 75 73 65 73 20 74 68 65 20 73 74 61 74 65 6d  auses the statem
123f0 65 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73  ent.to behave as
12400 20 61 20 71 75 65 72 79 20 74 68 61 74 20 72 65   a query that re
12410 74 75 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e  turns the sequen
12420 63 65 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20  ce of .[virtual 
12430 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74  machine instruct
12440 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20 68  ions] it would h
12450 61 76 65 20 75 73 65 64 20 74 6f 20 65 78 65 63  ave used to exec
12460 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  ute the command 
12470 68 61 64 0a 74 68 65 20 45 58 50 4c 41 49 4e 20  had.the EXPLAIN 
12480 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e  keyword not been
12490 20 70 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20   present. ^When 
124a0 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
124b0 59 20 50 4c 41 4e 20 70 68 72 61 73 65 0a 61 70  Y PLAN phrase.ap
124c0 70 65 61 72 73 2c 20 74 68 65 20 73 74 61 74 65  pears, the state
124d0 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 68 69 67  ment returns hig
124e0 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74  h-level informat
124f0 69 6f 6e 20 72 65 67 61 72 64 69 6e 67 20 74 68  ion regarding th
12500 65 20 71 75 65 72 79 0a 70 6c 61 6e 20 74 68 61  e query.plan tha
12510 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65  t would have bee
12520 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20 45 58 50  n used...The EXP
12530 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
12540 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73 63 72  command is descr
12550 69 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69  ibed in .[explai
12560 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72  n query plan|mor
12570 65 20 64 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a  e detail here]..
12580 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
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 23 23 23 23 23 23 23 23 23 23  ################
125c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125d0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78  #####.Section ex
125e0 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a  pression expr {*
125f0 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72  expression {expr
12600 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a  ession syntax}}.
12610 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
12620 44 69 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f 74  Diagram expr.</t
12630 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63  cl>..<p>This sec
12640 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e  tion is differen
12650 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72  t from the other
12660 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73  s.  Most other s
12670 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20  ections of.this 
12680 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61  document talks a
12690 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61  bout a particula
126a0 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20  r SQL command.  
126b0 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65  This section doe
126c0 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74  s.not talk about
126d0 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f   a standalone co
126e0 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20  mmand but about 
126f0 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68  "expressions" wh
12700 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70  ich are .subcomp
12710 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f  onents of most o
12720 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f  ther commands.</
12730 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
12740 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20 7b  ment binaryops {
12750 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73  binary operators
12760 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72  }</tcl>.<h3>Oper
12770 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28  ators</h3>.<p>^(
12780 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61 6e  SQLite understan
12790 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ds the following
127a0 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
127b0 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d  s, in order from
127c0 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77 65  .highest to lowe
127d0 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f  st precedence:</
127e0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
127f0 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
12800 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
12810 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a  >||.*    /    %.
12820 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20  +    -.&lt;&lt; 
12830 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61 6d    &gt;&gt;   &am
12840 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20  p;    |.&lt;    
12850 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20 20  &lt;=   &gt;    
12860 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20  &gt;=.=    ==   
12870 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20 20  !=   &lt;&gt;   
12880 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e 4f  </big>IS   IS NO
12890 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20 20  T   IN   LIKE   
128a0 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20 52  GLOB   MATCH   R
128b0 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c  EGEXP.AND   .OR<
128c0 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62  /font>.</pre></b
128d0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
128e0 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e 61  >^(Supported una
128f0 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74  ry prefix operat
12900 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f  ors are these:</
12910 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
12920 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
12930 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
12940 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20 20  >-    +    ~    
12950 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e  NOT</big></font>
12960 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
12970 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  ote>)^..<tcl>hd_
12980 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74 65  fragment collate
12990 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65 72  op {COLLATE oper
129a0 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  ator}</tcl>.<p>^
129b0 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  The COLLATE oper
129c0 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79 20  ator is a unary 
129d0 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72  postfix.operator
129e0 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61 20   that assigns a 
129f0 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  [collating seque
12a00 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72 65  nce] to an expre
12a10 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c  ssion..^The COLL
12a20 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61 73  ATE operator has
12a30 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65 64   a higher preced
12a40 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72 65  ence (binds more
12a50 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20 61   tightly) than a
12a60 6e 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ny.binary operat
12a70 6f 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72 79  or and any unary
12a80 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72   prefix operator
12a90 20 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43 4f   except "~"..(CO
12aa0 4c 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61 72  LLATE and "~" ar
12ab0 65 20 61 73 73 6f 63 69 61 74 69 76 65 20 73 6f  e associative so
12ac0 20 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20 6f   their binding o
12ad0 72 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61  rder does not ma
12ae0 74 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c  tter.).^The coll
12af0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 73  ating sequence s
12b00 65 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54  et by the COLLAT
12b10 45 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72 72  E operator overr
12b20 69 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74 69  ides the.collati
12b30 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 74 65  ng sequence dete
12b40 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43 4f  rmined by the CO
12b50 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
12b60 61 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20  a table.[column 
12b70 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65  definition]..See
12b80 20 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67 20   the [collating 
12b90 73 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69 6c  sequence| detail
12ba0 65 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f 6e  ed discussion on
12bb0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
12bc0 6e 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64 61  nces].in the [da
12bd0 74 61 74 79 70 65 20 7c 20 44 61 74 61 74 79 70  tatype | Datatyp
12be0 65 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64 6f  e In SQLite3] do
12bf0 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69 74  cument for addit
12c00 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
12c10 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  n..</p>..<tcl>hd
12c20 5f 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65 20  _puts ".<p>^The 
12c30 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 5b  unary operator [
12c40 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20 61  Operator +] is a
12c50 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61 6e   no-op.  ^It can
12c60 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20 73   be applied.to s
12c70 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73 2c  trings, numbers,
12c80 20 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20 61   blobs or NULL a
12c90 6e 64 20 69 74 20 61 6c 77 61 79 73 20 72 65 74  nd it always ret
12ca0 75 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77 69  urns a result.wi
12cb0 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  th the same valu
12cc0 65 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64  e as the operand
12cd0 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70  .</p>"</tcl>..<p
12ce0 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72 65  >Note that there
12cf0 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74 69   are two variati
12d00 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c  ons of the equal
12d10 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73  s and not equals
12d20 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45 71  .operators.  ^Eq
12d30 75 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74 68  uals can be eith
12d40 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75 74  er..<tcl>.hd_put
12d50 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20  s "[Operator =] 
12d60 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d  or [Operator ==]
12d70 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c  ..^The non-equal
12d80 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62  s operator can b
12d90 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61 74  e either.[Operat
12da0 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61  or !=] or [Opera
12db0 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e  tor {&lt;&gt;}].
12dc0 0a 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20  .^The [Operator 
12dd0 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ||] operator is 
12de0 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20  \"concatenate\" 
12df0 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74  - it joins toget
12e00 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72 69  her.the two stri
12e10 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72 61  ngs of its opera
12e20 6e 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61 74  nds..^The operat
12e30 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20  or [Operator %] 
12e40 6f 75 74 70 75 74 73 20 74 68 65 20 76 61 6c 75  outputs the valu
12e50 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a 6f  e of its left .o
12e60 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74  perand modulo it
12e70 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e  s right operand.
12e80 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65  </p>..<p>^The re
12e90 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61  sult of any bina
12ea0 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20 65  ry operator is e
12eb0 69 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63 20  ither a numeric 
12ec0 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20  value or .NULL, 
12ed0 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20 5b  except for the [
12ee0 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e  Operator ||] con
12ef0 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61  catenation opera
12f00 74 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79 73  tor which always
12f10 20 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65   .evaluates to e
12f20 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
12f30 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e 22  text value.</p>"
12f40 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 69  ..hd_fragment {i
12f50 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65 72  sisnot} {IS oper
12f60 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f 70  ator} {IS NOT op
12f70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74 73  erator}..hd_puts
12f80 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72 61   "<p>^The [Opera
12f90 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65  tor IS] and [Ope
12fa0 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20  rator {IS NOT}] 
12fb0 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a 6c  operators work.l
12fc0 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d  ike [Operator =]
12fd0 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 21   and [Operator !
12fe0 3d 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20 6f  =] except when o
12ff0 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74 68  ne or both of th
13000 65 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  e.operands are N
13010 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63 61  ULL. ^In this ca
13020 73 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65 72  se, if both oper
13030 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74  ands are NULL, t
13040 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61  hen the.IS opera
13050 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f  tor evaluates to
13060 20 31 20 28 74 72 75 65 29 20 61 6e 64 20 74 68   1 (true) and th
13070 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f  e IS NOT operato
13080 72 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20 30  r evaluates.to 0
13090 20 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f 6e   (false). ^If on
130a0 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  e operand is NUL
130b0 4c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72 20  L and the other 
130c0 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68 65  is not, then the
130d0 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61  .IS operator eva
130e0 6c 75 61 74 65 73 20 74 6f 20 30 20 28 66 61 6c  luates to 0 (fal
130f0 73 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e  se) and the IS N
13100 4f 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20 31  OT operator is 1
13110 20 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73 20   (true)..^It is 
13120 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f 72  not possible for
13130 20 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f 54   an IS or IS NOT
13140 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 65   expression to e
13150 76 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c 2e  valuate to NULL.
13160 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70 65  .^Operators [Ope
13170 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f  rator IS] and [O
13180 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d  perator {IS NOT}
13190 5d 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  ] have the same 
131a0 0a 70 72 65 63 65 64 65 6e 63 65 20 61 73 20 5b  .precedence as [
131b0 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c  Operator =]."..<
131c0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
131d0 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61  litvalue {litera
131e0 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c  l value}</tcl>.<
131f0 68 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65  h3>Literal Value
13200 73 20 28 43 6f 6e 73 74 61 6e 74 73 29 3c 2f 68  s (Constants)</h
13210 33 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c  3>.<p>.A literal
13220 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74   value represent
13230 73 20 61 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c  s a constant..^L
13240 69 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61  iteral values ma
13250 79 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66  y be integers, f
13260 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
13270 6d 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a  mbers, strings,.
13280 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
13290 0a 3c 70 3e 0a 54 68 65 20 73 79 6e 74 61 78 20  .<p>.The syntax 
132a0 66 6f 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20  for integer and 
132b0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
132c0 69 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74  iterals (collect
132d0 69 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c  ively."numeric l
132e0 69 74 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f  iterals") is sho
132f0 77 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77  wn by the follow
13300 69 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e  ing diagram:</p>
13310 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
13320 67 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74  gram numeric-lit
13330 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  eral</tcl>..<p>.
13340 5e 28 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c  ^(If a numeric l
13350 69 74 65 72 61 6c 20 68 61 73 20 61 20 64 65 63  iteral has a dec
13360 69 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e  imal point or an
13370 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a   exponentiation.
13380 63 6c 61 75 73 65 20 6f 72 20 69 66 20 69 74 73  clause or if its
13390 20 6d 61 67 6e 69 74 75 64 65 20 69 73 20 6c 65   magnitude is le
133a0 73 73 20 74 68 61 6e 20 2d 39 32 32 33 33 37 32  ss than -9223372
133b0 30 33 36 38 35 34 37 37 35 38 30 38 20 6f 72 0a  036854775808 or.
133c0 67 72 65 61 74 65 72 20 74 68 61 6e 20 39 32 32  greater than 922
133d0 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
133e0 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 66  , then it is a f
133f0 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
13400 74 65 72 61 6c 2e 0a 4f 74 68 65 72 77 69 73 65  teral..Otherwise
13410 20 69 73 20 69 74 20 69 73 20 61 6e 20 20 69 6e   is it is an  in
13420 74 65 67 65 72 20 6c 69 74 65 72 61 6c 2e 29 5e  teger literal.)^
13430 0a 5e 54 68 65 20 22 45 22 20 63 68 61 72 61 63  .^The "E" charac
13440 74 65 72 20 74 68 61 74 20 62 65 67 69 6e 73 20  ter that begins 
13450 74 68 65 20 65 78 70 6f 6e 65 6e 74 69 61 74 69  the exponentiati
13460 6f 6e 0a 63 6c 61 75 73 65 20 6f 66 20 61 20 66  on.clause of a f
13470 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
13480 74 65 72 61 6c 20 63 61 6e 20 62 65 20 65 69 74  teral can be eit
13490 68 65 72 20 75 70 70 65 72 20 6f 72 20 6c 6f 77  her upper or low
134a0 65 72 20 63 61 73 65 2e 0a 5e 28 54 68 65 20 22  er case..^(The "
134b0 2e 22 20 63 68 61 72 61 63 74 65 72 20 69 73 20  ." character is 
134c0 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73 20  always used .as 
134d0 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
134e0 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c 6f  t even if the lo
134f0 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70 65  cale setting spe
13500 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a 74  cifies "," for.t
13510 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20 75  his role - the u
13520 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74 68  se of "," for th
13530 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
13540 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a  would result in.
13550 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67 75  syntactic ambigu
13560 69 74 79 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  ity.)^..<tcl>hd_
13570 66 72 61 67 6d 65 6e 74 20 68 65 78 69 6e 74 20  fragment hexint 
13580 7b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  {hexadecimal int
13590 65 67 65 72 20 6c 69 74 65 72 61 6c 73 7d 20 7b  eger literals} {
135a0 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
135b0 67 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  gers}</tcl>.<p>^
135c0 48 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  Hexadecimal inte
135d0 67 65 72 20 6c 69 74 65 72 61 6c 73 20 66 6f 6c  ger literals fol
135e0 6c 6f 77 20 74 68 65 20 43 2d 6c 61 6e 67 75 61  low the C-langua
135f0 67 65 20 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a 22  ge notation of."
13600 30 78 22 20 6f 72 20 22 30 58 22 20 66 6f 6c 6c  0x" or "0X" foll
13610 6f 77 65 64 20 62 79 20 68 65 78 61 64 65 63 69  owed by hexadeci
13620 6d 61 6c 20 64 69 67 69 74 73 2e 0a 5e 46 6f 72  mal digits..^For
13630 20 65 78 61 6d 70 6c 65 2c 20 30 78 31 32 33 34   example, 0x1234
13640 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20   means the same 
13650 61 73 20 34 36 36 30 0a 61 6e 64 20 30 78 38 30  as 4660.and 0x80
13660 30 30 30 30 30 30 30 30 30 30 30 30 30 30 20 6d  00000000000000 m
13670 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73  eans the same as
13680 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
13690 37 35 38 30 38 2e 0a 20 5e 28 48 65 78 61 64 65  75808.. ^(Hexade
136a0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69  cimal integer li
136b0 74 65 72 61 6c 73 20 61 72 65 20 69 6e 74 65 72  terals are inter
136c0 70 72 65 74 65 64 20 61 73 20 36 34 2d 62 69 74  preted as 64-bit
136d0 0a 74 77 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e  .two's-complemen
136e0 74 20 69 6e 74 65 67 65 72 73 20 61 6e 64 20 61  t integers and a
136f0 72 65 20 74 68 75 73 20 6c 69 6d 69 74 65 64 0a  re thus limited.
13700 74 6f 20 73 69 78 74 65 65 6e 20 73 69 67 6e 69  to sixteen signi
13710 66 69 63 61 6e 74 20 64 69 67 69 74 73 20 6f 66  ficant digits of
13720 20 70 72 65 63 69 73 69 6f 6e 2e 29 5e 0a 53 75   precision.)^.Su
13730 70 70 6f 72 74 20 66 6f 72 20 68 65 78 61 64 65  pport for hexade
13740 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77  cimal integers w
13750 61 73 20 61 64 64 65 64 20 74 6f 20 53 51 4c 69  as added to SQLi
13760 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 36  te version 3.8.6
13770 2e 0a 5e 46 6f 72 20 62 61 63 6b 77 61 72 64 73  ..^For backwards
13780 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20   compatibility, 
13790 74 68 65 20 22 30 78 22 20 68 65 78 61 64 65 63  the "0x" hexadec
137a0 69 6d 61 6c 20 69 6e 74 65 67 65 72 0a 6e 6f 74  imal integer.not
137b0 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 6e  ation is only un
137c0 64 65 72 73 74 6f 6f 64 20 62 79 20 74 68 65 20  derstood by the 
137d0 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 70 61 72  SQL language par
137e0 73 65 72 2c 20 6e 6f 74 20 62 79 20 74 68 65 0a  ser, not by the.
137f0 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73  type conversions
13800 20 72 6f 75 74 69 6e 65 73 2e 0a 5e 28 53 74 72   routines..^(Str
13810 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 74 68  ing variables th
13820 61 74 0a 63 6f 6e 74 61 69 6e 20 74 65 78 74 20  at.contain text 
13830 66 6f 72 6d 61 74 74 65 64 20 6c 69 6b 65 20 68  formatted like h
13840 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
13850 65 72 73 20 61 72 65 20 6e 6f 74 0a 69 6e 74 65  ers are not.inte
13860 72 70 72 65 74 65 64 20 61 73 20 68 65 78 61 64  rpreted as hexad
13870 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20  ecimal integers 
13880 77 68 65 6e 20 63 6f 65 72 63 69 6e 67 20 74 68  when coercing th
13890 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0a 69  e string value.i
138a0 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 64  nto an integer d
138b0 75 65 20 74 6f 20 61 20 5b 43 41 53 54 20 65 78  ue to a [CAST ex
138c0 70 72 65 73 73 69 6f 6e 5d 20 6f 72 20 66 6f 72  pression] or for
138d0 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e   a [column affin
138e0 69 74 79 5d 0a 74 72 61 6e 73 66 6f 72 6d 61 74  ity].transformat
138f0 69 6f 6e 20 6f 72 20 70 72 69 6f 72 20 74 6f 20  ion or prior to 
13900 70 65 72 66 6f 72 6d 69 6e 67 20 61 20 6e 75 6d  performing a num
13910 65 72 69 63 20 6f 70 65 72 61 74 69 6f 6e 20 6f  eric operation o
13920 72 20 66 6f 72 0a 61 6e 79 20 6f 74 68 65 72 20  r for.any other 
13930 72 75 6e 2d 74 69 6d 65 20 63 6f 6e 76 65 72 73  run-time convers
13940 69 6f 6e 73 2e 29 5e 20 20 5e 28 57 68 65 6e 20  ions.)^  ^(When 
13950 63 6f 65 72 63 69 6e 67 20 61 0a 73 74 72 69 6e  coercing a.strin
13960 67 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66  g value in the f
13970 6f 72 6d 61 74 20 6f 66 20 61 20 68 65 78 61 64  ormat of a hexad
13980 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 69  ecimal integer i
13990 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 76  nto an integer.v
139a0 61 6c 75 65 2c 20 74 68 65 20 63 6f 6e 76 65 72  alue, the conver
139b0 73 69 6f 6e 20 70 72 6f 63 65 73 73 20 73 74 6f  sion process sto
139c0 70 73 20 77 68 65 6e 20 74 68 65 20 27 78 27 20  ps when the 'x' 
139d0 63 68 61 72 61 63 74 65 72 20 69 73 20 73 65 65  character is see
139e0 6e 0a 73 6f 20 74 68 65 20 72 65 73 75 6c 74 69  n.so the resulti
139f0 6e 67 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ng integer value
13a00 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e   is always zero.
13a10 29 5e 0a 5e 28 53 51 4c 69 74 65 20 6f 6e 6c 79  )^.^(SQLite only
13a20 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65   understands the
13a30 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74   hexadecimal int
13a40 65 67 65 72 20 6e 6f 74 61 74 69 6f 6e 20 77 68  eger notation wh
13a50 65 6e 20 69 74 0a 61 70 70 65 61 72 73 20 69 6e  en it.appears in
13a60 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
13a70 6e 74 20 74 65 78 74 2c 20 6e 6f 74 20 77 68 65  nt text, not whe
13a80 6e 20 69 74 20 61 70 70 65 61 72 73 20 61 73 0a  n it appears as.
13a90 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6e 74  part of the cont
13aa0 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
13ab0 61 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20 73  ase.)^..<p> ^A s
13ac0 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69  tring constant i
13ad0 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c  s formed by encl
13ae0 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67  osing the.string
13af0 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
13b00 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c  s (').  ^A singl
13b10 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74  e quote within t
13b20 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65  he string can.be
13b30 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74   encoded by putt
13b40 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71  ing two single q
13b50 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d  uotes in a row -
13b60 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43   as in Pascal..C
13b70 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73 20 75  -style escapes u
13b80 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61  sing the backsla
13b90 73 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65  sh character are
13ba0 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62   not supported b
13bb0 65 63 61 75 73 65 0a 74 68 65 79 20 61 72 65 20  ecause.they are 
13bc0 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
13bd0 2e 0a 0a 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69 74  ...<p> ^BLOB lit
13be0 65 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67  erals are string
13bf0 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69   literals contai
13c00 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c  ning hexadecimal
13c10 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64   data and.preced
13c20 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22  ed by a single "
13c30 78 22 20 6f 72 20 22 58 22 20 63 68 61 72 61 63  x" or "X" charac
13c40 74 65 72 2e 20 20 5e 28 45 78 61 6d 70 6c 65 3a  ter.  ^(Example:
13c50 20 58 27 35 33 35 31 34 43 36 39 37 34 36 35 27   X'53514C697465'
13c60 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72  )^..<p>.^A liter
13c70 61 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73  al value can als
13c80 6f 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22  o be the token "
13c90 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  NULL"..</p>..<tc
13ca0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61  l>hd_fragment va
13cb0 72 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65 72  rparam parameter
13cc0 20 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f 75   parameters {bou
13cd0 6e 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b 62  nd parameter} {b
13ce0 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 7d  ound parameters}
13cf0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d  </tcl>.<h3>Param
13d00 65 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41  eters</h3>.<p>.A
13d10 20 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20 22   "variable" or "
13d20 70 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e  parameter" token
13d30 0a 73 70 65 63 69 66 69 65 73 20 61 20 70 6c 61  .specifies a pla
13d40 63 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20  ceholder in the 
13d50 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61  expression for a
13d60 20 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73 20   .value that is 
13d70 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e  filled in at run
13d80 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  time using the.[
13d90 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
13da0 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69  b() | sqlite3_bi
13db0 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20  nd()] family of 
13dc0 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 73  C/C++ interfaces
13dd0 2e 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e  ..Parameters can
13de0 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f   take several fo
13df0 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  rms:.</p>..<bloc
13e00 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a  kquote>.<table>.
13e10 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
13e20 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
13e30 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e  op"><b>?</b><i>N
13e40 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  NN</i></td><td w
13e50 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
13e60 3c 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e  <td>^(A question
13e70 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62   mark followed b
13e80 79 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e  y a number <i>NN
13e90 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73 70  N</i> holds a sp
13ea0 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74  ot for the.NNN-t
13eb0 68 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e  h parameter.  NN
13ec0 4e 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65  N must be betwee
13ed0 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f  n 1 and [SQLITE_
13ee0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
13ef0 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f  BER].)^.</td>.</
13f00 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
13f10 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
13f20 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e  n="top"><b>?</b>
13f30 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
13f40 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41  20"></td>.<td>^A
13f50 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74   question mark t
13f60 68 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f  hat is not follo
13f70 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20  wed by a number 
13f80 63 72 65 61 74 65 73 20 61 20 70 61 72 61 6d 65  creates a parame
13f90 74 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62 65  ter.with a numbe
13fa0 72 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68  r one greater th
13fb0 61 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  an the largest p
13fc0 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
13fd0 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64  already assigned
13fe0 2e 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73  ..^If this means
13ff0 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 6e   the parameter n
14000 75 6d 62 65 72 20 69 73 20 67 72 65 61 74 65 72  umber is greater
14010 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41   than.[SQLITE_MA
14020 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
14030 52 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  R], it is an err
14040 6f 72 2e 0a 54 68 69 73 20 70 61 72 61 6d 65 74  or..This paramet
14050 65 72 20 66 6f 72 6d 61 74 20 69 73 20 70 72 6f  er format is pro
14060 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74  vided for compat
14070 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68  ibility with oth
14080 65 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67 69  er database.engi
14090 6e 65 73 2e 20 20 42 75 74 20 62 65 63 61 75 73  nes.  But becaus
140a0 65 20 69 74 20 69 73 20 65 61 73 79 20 74 6f 20  e it is easy to 
140b0 6d 69 73 63 6f 75 6e 74 20 74 68 65 20 71 75 65  miscount the que
140c0 73 74 69 6f 6e 20 6d 61 72 6b 73 2c 20 74 68 65  stion marks, the
140d0 0a 75 73 65 20 6f 66 20 74 68 69 73 20 70 61 72  .use of this par
140e0 61 6d 65 74 65 72 20 66 6f 72 6d 61 74 20 69 73  ameter format is
140f0 20 64 69 73 63 6f 75 72 61 67 65 64 2e 20 20 50   discouraged.  P
14100 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65  rogrammers are e
14110 6e 63 6f 75 72 61 67 65 64 0a 74 6f 20 75 73 65  ncouraged.to use
14120 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 79 6d 62   one of the symb
14130 6f 6c 69 63 20 66 6f 72 6d 61 74 73 20 62 65 6c  olic formats bel
14140 6f 77 20 6f 72 20 74 68 65 20 3f 4e 4e 4e 20 66  ow or the ?NNN f
14150 6f 72 6d 61 74 20 61 62 6f 76 65 20 69 6e 73 74  ormat above inst
14160 65 61 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ead..</td>.</tr>
14170 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
14180 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
14190 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e  top"><b>:</b><i>
141a0 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
141b0 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
141c0 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66  >.<td>^A colon f
141d0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64  ollowed by an id
141e0 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f  entifier name ho
141f0 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61  lds a spot for a
14200 20 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   .[sqlite3_bind_
14210 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e  parameter_name|n
14220 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20  amed parameter] 
14230 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41  with the name :A
14240 41 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70  AAA.  .^(Named p
14250 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c  arameters are al
14260 73 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65  so numbered. The
14270 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64   number assigned
14280 20 69 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20   is one greater 
14290 74 68 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74  than.the largest
142a0 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
142b0 72 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e  r already assign
142c0 65 64 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d  ed.)^ ^If this m
142d0 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74  eans the paramet
142e0 65 72 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69  er.would be assi
142f0 67 6e 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72  gned a number gr
14300 65 61 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49  eater than [SQLI
14310 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
14320 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61  NUMBER], it is.a
14330 6e 20 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69  n error. To avoi
14340 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20  d confusion, it 
14350 69 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64  is best to avoid
14360 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e   mixing named an
14370 64 20 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d  d numbered.param
14380 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  eters.</td>.</tr
14390 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
143a0 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
143b0 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69  "top"><b>@</b><i
143c0 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  >AAAA</i></td><t
143d0 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
143e0 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20  d>.<td>^An "at" 
143f0 73 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74  sign works exact
14400 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c  ly like a colon,
14410 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
14420 20 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72   name of.the par
14430 61 6d 65 74 65 72 20 63 72 65 61 74 65 64 20 69  ameter created i
14440 73 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f  s @AAAA.</td>.</
14450 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
14460 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
14470 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e  n="top"><b>$</b>
14480 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
14490 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
144a0 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c  /td>.<td>^A doll
144b0 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64  ar-sign followed
144c0 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
144d0 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64  r name also hold
144e0 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e  s a spot for a n
144f0 61 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77  amed.parameter w
14500 69 74 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41  ith the name $AA
14510 41 41 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74  AA.  ^(The ident
14520 69 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68  ifier name in th
14530 69 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c  is case can incl
14540 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ude.one or more 
14550 6f 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22  occurrences of "
14560 3a 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69 78  ::" and a suffix
14570 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e   enclosed in "(.
14580 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a  ..)" containing.
14590 61 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e  any text at all.
145a0 29 5e 20 20 54 68 69 73 20 73 79 6e 74 61 78 20  )^  This syntax 
145b0 69 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61  is the form of a
145c0 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69   variable name i
145d0 6e 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77  n the.[http://ww
145e0 77 2e 74 63 6c 2e 74 6b 2f 20 7c 20 54 63 6c 20  w.tcl.tk/ | Tcl 
145f0 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67  programming lang
14600 75 61 67 65 5d 2e 20 20 54 68 65 20 70 72 65 73  uage].  The pres
14610 65 6e 63 65 0a 6f 66 20 74 68 69 73 20 73 79 6e  ence.of this syn
14620 74 61 78 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  tax results from
14630 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53   the fact that S
14640 51 4c 69 74 65 20 69 73 20 72 65 61 6c 6c 79 20  QLite is really 
14650 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69 6f  a .[Tcl extensio
14660 6e 5d 20 74 68 61 74 20 68 61 73 20 65 73 63 61  n] that has esca
14670 70 65 64 20 69 6e 74 6f 20 74 68 65 20 77 69 6c  ped into the wil
14680 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f  d.</td>.</tr>.</
14690 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
146a0 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d 65  ote>..<p>^Parame
146b0 74 65 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f  ters that are no
146c0 74 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65  t assigned value
146d0 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33  s using.[sqlite3
146e0 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73  _bind_blob() | s
146f0 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61  qlite3_bind()] a
14700 72 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55  re treated.as NU
14710 4c 4c 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65  LL.  The [sqlite
14720 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
14730 5f 69 6e 64 65 78 28 29 5d 20 69 6e 74 65 72 66  _index()] interf
14740 61 63 65 20 63 61 6e 20 62 65 20 75 73 65 64 0a  ace can be used.
14750 74 6f 20 74 72 61 6e 73 6c 61 74 65 20 61 20 73  to translate a s
14760 79 6d 62 6f 6c 69 63 20 70 61 72 61 6d 65 74 65  ymbolic paramete
14770 72 20 6e 61 6d 65 20 69 6e 74 6f 20 69 74 73 20  r name into its 
14780 65 71 75 69 76 61 6c 65 6e 74 20 6e 75 6d 65 72  equivalent numer
14790 69 63 20 69 6e 64 65 78 2e 3c 2f 70 3e 0a 0a 3c  ic index.</p>..<
147a0 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 70  p>^The maximum p
147b0 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
147c0 69 73 20 73 65 74 20 61 74 20 63 6f 6d 70 69 6c  is set at compil
147d0 65 2d 74 69 6d 65 20 62 79 0a 74 68 65 20 5b 53  e-time by.the [S
147e0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
147f0 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72 6f  LE_NUMBER] macro
14800 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76 69 64 75  .  ^(An individu
14810 61 6c 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  al [database con
14820 6e 65 63 74 69 6f 6e 5d 0a 44 20 63 61 6e 20 72  nection].D can r
14830 65 64 75 63 65 20 69 74 73 20 6d 61 78 69 6d 75  educe its maximu
14840 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  m parameter numb
14850 65 72 20 62 65 6c 6f 77 20 74 68 65 20 63 6f 6d  er below the com
14860 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d 75  pile-time maximu
14870 6d 0a 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  m.using the [sql
14880 69 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20 5b  ite3_limit](D, [
14890 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52  SQLITE_LIMIT_VAR
148a0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e 2e  IABLE_NUMBER],..
148b0 2e 29 20 69 6e 74 65 72 66 61 63 65 2e 29 5e 0a  .) interface.)^.
148c0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
148d0 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b 45  agment like LIKE
148e0 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68   ESCAPE</tcl>.<h
148f0 33 3e 54 68 65 20 4c 49 4b 45 20 61 6e 64 20 47  3>The LIKE and G
14900 4c 4f 42 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68  LOB operators</h
14910 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20  3>.<p>^The LIKE 
14920 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20  operator does a 
14930 70 61 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67  pattern matching
14940 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54 68   comparison. ^Th
14950 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68 65  e operand.to the
14960 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 4c 49   right of the LI
14970 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74  KE operator cont
14980 61 69 6e 73 20 74 68 65 20 70 61 74 74 65 72 6e  ains the pattern
14990 20 61 6e 64 20 74 68 65 20 6c 65 66 74 20 68 61   and the left ha
149a0 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61  nd.operand conta
149b0 69 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 74  ins the string t
149c0 6f 20 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20  o match against 
149d0 74 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74  the pattern...<t
149e0 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41 20 70  cl>hd_puts "^A p
149f0 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c  ercent symbol (\
14a00 22 25 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b  "%\") in the LIK
14a10 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65  E pattern matche
14a20 73 20 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f  s any.sequence o
14a30 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63  f zero or more c
14a40 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
14a50 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75 6e   string.  ^An un
14a60 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22 29  derscore.(\"_\")
14a70 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74   in the LIKE pat
14a80 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79  tern matches any
14a90 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65   single characte
14aa0 72 20 69 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e  r in the.string.
14ab0 20 20 5e 28 41 6e 79 20 6f 74 68 65 72 20 63 68    ^(Any other ch
14ac0 61 72 61 63 74 65 72 20 6d 61 74 63 68 65 73 20  aracter matches 
14ad0 69 74 73 65 6c 66 20 6f 72 20 69 74 73 20 6c 6f  itself or its lo
14ae0 77 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65  wer/upper case.e
14af0 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20  quivalent (i.e. 
14b00 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65  case-insensitive
14b10 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20 20 28   matching).)^  (
14b20 41 20 62 75 67 3a 20 5e 53 51 4c 69 74 65 20 6f  A bug: ^SQLite o
14b30 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20  nly.understands 
14b40 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65  upper/lower case
14b50 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
14b60 63 74 65 72 73 20 62 79 20 64 65 66 61 75 6c 74  cters by default
14b70 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65  .  ^The.LIKE ope
14b80 72 61 74 6f 72 20 69 73 20 63 61 73 65 20 73 65  rator is case se
14b90 6e 73 69 74 69 76 65 20 62 79 20 64 65 66 61 75  nsitive by defau
14ba0 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 63  lt for unicode c
14bb0 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
14bc0 72 65 0a 62 65 79 6f 6e 64 20 74 68 65 20 41 53  re.beyond the AS
14bd0 43 49 49 20 72 61 6e 67 65 2e 20 20 46 6f 72 20  CII range.  For 
14be0 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78  example,.^the ex
14bf0 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26  pression <b>'a'&
14c00 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27  nbsp;LIKE&nbsp;'
14c10 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62  A'</b>.is TRUE b
14c20 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26  ut <b>'&aelig;'&
14c30 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27  nbsp;LIKE&nbsp;'
14c40 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20  &AElig;'</b> is 
14c50 46 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74 63 6c  FALSE.)<p>"</tcl
14c60 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70  >..<p>^If the op
14c70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c  tional ESCAPE cl
14c80 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c  ause is present,
14c90 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73   then the expres
14ca0 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74  sion.following t
14cb0 68 65 20 45 53 43 41 50 45 20 6b 65 79 77 6f 72  he ESCAPE keywor
14cc0 64 20 6d 75 73 74 20 65 76 61 6c 75 61 74 65 20  d must evaluate 
14cd0 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73  to a string cons
14ce0 69 73 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67  isting of.a sing
14cf0 6c 65 20 63 68 61 72 61 63 74 65 72 2e 20 5e 54  le character. ^T
14d00 68 69 73 20 63 68 61 72 61 63 74 65 72 20 6d 61  his character ma
14d10 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65  y be used in the
14d20 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74 6f   LIKE pattern.to
14d30 20 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61 6c   include literal
14d40 20 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64 65   percent or unde
14d50 72 73 63 6f 72 65 20 63 68 61 72 61 63 74 65 72  rscore character
14d60 73 2e 20 5e 54 68 65 20 65 73 63 61 70 65 0a 63  s. ^The escape.c
14d70 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65  haracter followe
14d80 64 20 62 79 20 61 20 70 65 72 63 65 6e 74 20 73  d by a percent s
14d90 79 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64 65 72  ymbol (%), under
14da0 73 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20 61 20  score (_), or a 
14db0 73 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63 65 20  second.instance 
14dc0 6f 66 20 74 68 65 20 65 73 63 61 70 65 20 63 68  of the escape ch
14dd0 61 72 61 63 74 65 72 20 69 74 73 65 6c 66 20 6d  aracter itself m
14de0 61 74 63 68 65 73 20 61 0a 6c 69 74 65 72 61 6c  atches a.literal
14df0 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c   percent symbol,
14e00 20 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f 72 20   underscore, or 
14e10 61 20 73 69 6e 67 6c 65 20 65 73 63 61 70 65 20  a single escape 
14e20 63 68 61 72 61 63 74 65 72 2c 0a 72 65 73 70 65  character,.respe
14e30 63 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54 68  ctively...<p>^Th
14e40 65 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70 65  e infix LIKE ope
14e50 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65  rator is impleme
14e60 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  nted by calling 
14e70 74 68 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d  the.application-
14e80 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63  defined SQL func
14e90 74 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e 59  tions [like(<i>Y
14ea0 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20  </i>,<i>X</i>)] 
14eb0 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69  or.[like(<i>Y</i
14ec0 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c  >,<i>X</i>,<i>Z<
14ed0 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a  /i>)]</a>.</p>..
14ee0 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65  <p>^The LIKE ope
14ef0 72 61 74 6f 72 20 63 61 6e 20 62 65 20 6d 61 64  rator can be mad
14f00 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  e case sensitive
14f10 20 75 73 69 6e 67 20 74 68 65 0a 5b 63 61 73 65   using the.[case
14f20 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65 20  _sensitive_like 
14f30 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74  pragma].</p>..<t
14f40 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 67  cl>hd_fragment g
14f50 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c  lob GLOB</tcl>.<
14f60 70 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72  p>^The GLOB oper
14f70 61 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20  ator is similar 
14f80 74 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73  to LIKE but uses
14f90 20 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67   the Unix.file g
14fa0 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66  lobbing syntax f
14fb0 6f 72 20 69 74 73 20 77 69 6c 64 63 61 72 64 73  or its wildcards
14fc0 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20 69  .  ^Also, GLOB i
14fd0 73 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76 65  s case.sensitive
14fe0 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20  , unlike LIKE.  
14ff0 5e 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20 4c  ^Both GLOB and L
15000 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63 65  IKE may be prece
15010 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20 6b  ded by.the NOT k
15020 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74  eyword to invert
15030 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68   the sense of th
15040 65 20 74 65 73 74 2e 20 20 5e 54 68 65 20 69 6e  e test.  ^The in
15050 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74  fix GLOB .operat
15060 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  or is implemente
15070 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65  d by calling the
15080 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62 28   function.[glob(
15090 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
150a0 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20 6d  >)] and can be m
150b0 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65 72 72  odified by overr
150c0 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63 74  iding.that funct
150d0 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ion.</p>..<tcl>h
150e0 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65 78  d_fragment regex
150f0 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a 3c  p REGEXP</tcl>.<
15100 70 3e 5e 54 68 65 20 52 45 47 45 58 50 20 6f 70  p>^The REGEXP op
15110 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63  erator is a spec
15120 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74  ial syntax for t
15130 68 65 20 72 65 67 65 78 70 28 29 0a 75 73 65 72  he regexp().user
15140 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f 20   function.  ^No 
15150 72 65 67 65 78 70 28 29 20 75 73 65 72 20 66 75  regexp() user fu
15160 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
15170 64 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64  d by default.and
15180 20 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52   so use of the R
15190 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77  EGEXP operator w
151a0 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73  ill normally res
151b0 75 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20  ult in an.error 
151c0 6d 65 73 73 61 67 65 2e 20 20 5e 49 66 20 61 6e  message.  ^If an
151d0 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65   [application-de
151e0 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69  fined SQL functi
151f0 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67 65 78  on] named "regex
15200 70 22 0a 69 73 20 61 64 64 65 64 20 61 74 20 72  p".is added at r
15210 75 6e 2d 74 69 6d 65 2c 20 74 68 65 6e 20 74 68  un-time, then th
15220 65 20 22 3c 69 3e 58 3c 2f 69 3e 20 52 45 47 45  e "<i>X</i> REGE
15230 58 50 20 3c 69 3e 59 3c 2f 69 3e 22 20 6f 70 65  XP <i>Y</i>" ope
15240 72 61 74 6f 72 20 77 69 6c 6c 0a 62 65 20 69 6d  rator will.be im
15250 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
15260 61 6c 6c 20 74 6f 20 22 72 65 67 65 78 70 28 3c  all to "regexp(<
15270 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
15280 29 22 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  )".</p>..<tcl>hd
15290 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20  _fragment match 
152a0 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  MATCH</tcl>.<p>^
152b0 54 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74  The MATCH operat
152c0 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  or is a special 
152d0 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d  syntax for the m
152e0 61 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69  atch().applicati
152f0 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  on-defined funct
15300 69 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ion.  ^The defau
15310 6c 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74  lt match() funct
15320 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
15330 6f 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63  on.raises an exc
15340 65 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f  eption and is no
15350 74 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20  t really useful 
15360 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42  for anything..^B
15370 75 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61  ut extensions ca
15380 6e 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d  n override the m
15390 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  atch() function 
153a0 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75  with more.helpfu
153b0 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74  l logic.</p>..<t
153c0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
153d0 65 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f  etween BETWEEN</
153e0 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54  tcl>.<h3>The BET
153f0 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68  WEEN operator</h
15400 33 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57  3>.<p>^(The BETW
15410 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20  EEN operator is 
15420 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61  logically equiva
15430 6c 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f  lent to a pair o
15440 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22  f comparisons.."
15450 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57  <i>x</i> <b>BETW
15460 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e  EEN</b> <i>y</i>
15470 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a   <b>AND</b> <i>z
15480 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61  </i>" is .equiva
15490 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f  lent to ."<i>x</
154a0 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69  i><b>&gt;=</b><i
154b0 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
154c0 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74  > <i>x</i><b>&lt
154d0 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20  ;=</b><i>z</i>" 
154e0 65 78 63 65 70 74 0a 74 68 61 74 20 77 69 74 68  except.that with
154f0 20 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69   BETWEEN, the <i
15500 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f  >x</i> expressio
15510 6e 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61  n is only evalua
15520 74 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65  ted once.)^.^The
15530 20 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74   precedence of t
15540 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
15550 74 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20  tor is the same 
15560 61 73 20 74 68 65 20 70 72 65 63 65 64 65 6e 63  as the precedenc
15570 65 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c  e.as operators <
15580 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e  b>==</b> and <b>
15590 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49  !=</b> and <b>LI
155a0 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70  KE</b> and group
155b0 73 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  s left to right.
155c0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
155d0 6e 74 20 63 61 73 65 20 7b 43 41 53 45 20 65 78  nt case {CASE ex
155e0 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  pression}</tcl>.
155f0 3c 68 33 3e 54 68 65 20 43 41 53 45 20 65 78 70  <h3>The CASE exp
15600 72 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e  ression</h3>.<p>
15610 41 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  A CASE expressio
15620 6e 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20  n serves a role 
15630 73 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48  similar to IF-TH
15640 45 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72  EN-ELSE in other
15650 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e  .programming lan
15660 67 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68  guages.  ..<p>Th
15670 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65  e optional expre
15680 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72  ssion that occur
15690 73 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  s in between the
156a0 20 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e   CASE keyword an
156b0 64 20 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e  d the.first WHEN
156c0 20 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c   keyword is call
156d0 65 64 20 74 68 65 20 22 62 61 73 65 22 20 65 78  ed the "base" ex
156e0 70 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65  pression. ^There
156f0 20 61 72 65 20 74 77 6f 20 62 61 73 69 63 20 66   are two basic f
15700 6f 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45  orms.of the CASE
15710 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f   expression: tho
15720 73 65 20 77 69 74 68 20 61 20 62 61 73 65 20 65  se with a base e
15730 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
15740 6f 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70  ose without...<p
15750 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68  >^In a CASE with
15760 6f 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65  out a base expre
15770 73 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e  ssion, each WHEN
15780 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
15790 76 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65  valuated.and the
157a0 20 72 65 73 75 6c 74 20 74 72 65 61 74 65 64 20   result treated 
157b0 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74  as a boolean, st
157c0 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20  arting with the 
157d0 6c 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e  leftmost and con
157e0 74 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72  tinuing.to the r
157f0 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
15800 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
15810 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
15820 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68  evaluation of th
15830 65 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  e THEN.expressio
15840 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  n that correspon
15850 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ds to the first 
15860 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
15870 74 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74  that evaluates t
15880 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20  o.true. ^Or, if 
15890 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
158a0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61   expressions eva
158b0 6c 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74  luate to true, t
158c0 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61  he result of.eva
158d0 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45  luating the ELSE
158e0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20   expression, if 
158f0 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69  any. ^If there i
15900 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73  s no ELSE expres
15910 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66  sion and.none of
15920 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73   the WHEN expres
15930 73 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20  sions are true, 
15940 74 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c  then the overall
15950 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
15960 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73  ..<p>^A NULL res
15970 75 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ult is considere
15980 64 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76  d untrue when ev
15990 61 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65  aluating WHEN te
159a0 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43  rms...<p>^In a C
159b0 41 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20  ASE with a base 
159c0 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
159d0 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
159e0 69 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73  is evaluated jus
159f0 74 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72  t.once and the r
15a00 65 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65  esult is compare
15a10 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 65 76  d against the ev
15a20 61 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68  aluation of each
15a30 20 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f   WHEN .expressio
15a40 6e 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  n from left to r
15a50 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
15a60 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
15a70 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
15a80 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74  .evaluation of t
15a90 68 65 20 54 48 45 4e 20 65 78 70 72 65 73 73 69  he THEN expressi
15aa0 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  on that correspo
15ab0 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nds to the first
15ac0 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   WHEN.expression
15ad0 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63   for which the c
15ae0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
15af0 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20  e. ^Or, if none 
15b00 6f 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72  of the WHEN.expr
15b10 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
15b20 20 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61   to a value equa
15b30 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78  l to the base ex
15b40 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65  pression, the re
15b50 73 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69  sult.of evaluati
15b60 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
15b70 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20  ession, if any. 
15b80 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
15b90 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
15ba0 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and.none of the 
15bb0 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
15bc0 20 70 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c   produce a resul
15bd0 74 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62  t equal to the b
15be0 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a  ase expression,.
15bf0 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75  the overall resu
15c00 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  lt is NULL...<p>
15c10 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20  ^When comparing 
15c20 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
15c30 6e 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e  n against a WHEN
15c40 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65   expression, the
15c50 20 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20   same.collating 
15c60 73 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69  sequence, affini
15c70 74 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e  ty, and NULL-han
15c80 64 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c  dling rules appl
15c90 79 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65  y as if the.base
15ca0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
15cb0 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
15cc0 61 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79  are respectively
15cd0 20 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72   the left- and.r
15ce0 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e  ight-hand operan
15cf0 64 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62  ds of an <big><b
15d00 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65  >=</b></big> ope
15d10 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74  rator.</p> ^If t
15d20 68 65 20 62 61 73 65 20 0a 65 78 70 72 65 73 73  he base .express
15d30 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  ion is NULL then
15d40 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
15d50 68 65 20 43 41 53 45 20 69 73 20 61 6c 77 61 79  he CASE is alway
15d60 73 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66  s the result .of
15d70 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
15d80 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
15d90 69 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72  if it exists, or
15da0 20 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73   NULL if it does
15db0 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20   not...<p>^Both 
15dc0 66 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53  forms of the CAS
15dd0 45 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  E expression use
15de0 20 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d   lazy, or short-
15df0 63 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61  circuit, .evalua
15e00 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  tion...<p>^(The 
15e10 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20  only difference 
15e20 62 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c  between the foll
15e30 6f 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65  owing two CASE e
15e40 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68  xpressions is th
15e50 61 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e  at .the <i>x</i>
15e60 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
15e70 76 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79  valuated exactly
15e80 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72   once in the fir
15e90 73 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a  st example but .
15ea0 6d 69 67 68 74 20 62 65 20 65 76 61 6c 75 61 74  might be evaluat
15eb0 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65  ed multiple time
15ec0 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a  s in the second:
15ed0 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e  ..<ul><pre>.<li>
15ee0 43 41 53 45 20 78 20 57 48 45 4e 20 77 31 20 54  CASE x WHEN w1 T
15ef0 48 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54  HEN r1 WHEN w2 T
15f00 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45  HEN r2 ELSE r3 E
15f10 4e 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e  ND.<li>CASE WHEN
15f20 20 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48   x=w1 THEN r1 WH
15f30 45 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20  EN x=w2 THEN r2 
15f40 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72  ELSE r3 END.</pr
15f50 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c  e></ul>)^...<tcl
15f60 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f  >hd_fragment in_
15f70 6f 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d  op {IN operator}
15f80 20 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f   {NOT IN operato
15f90 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  r}</tcl>.<h3>The
15fa0 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f   IN and NOT IN o
15fb0 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70  perators</h3>.<p
15fc0 3e 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54  >^The IN and NOT
15fd0 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61   IN operators ta
15fe0 6b 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c  ke a single scal
15ff0 61 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68  ar operand on th
16000 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63  e.left and a vec
16010 74 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74  tor operand on t
16020 68 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20  he right.formed 
16030 62 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c  by an explicit l
16040 69 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d  ist of zero or m
16050 6f 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62  ore scalars or b
16060 79 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71  y a .single subq
16070 75 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20  uery..^When the 
16080 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66  right operand of
16090 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
160a0 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
160b0 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62  ubquery, the.sub
160c0 71 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20  query must have 
160d0 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20  a single result 
160e0 63 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68  column..^When th
160f0 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  e right operand 
16100 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c  is an empty set,
16110 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49   the result of I
16120 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74  N is false and t
16130 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54  he.result of NOT
16140 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67   IN is true, reg
16150 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c  ardless of the l
16160 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20  eft operand and 
16170 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74  even if the.left
16180 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
16190 2e 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f  ..^(The result o
161a0 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
161b0 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65  N operator is de
161c0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
161d0 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78  following.matrix
161e0 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62  :..<center>.<tab
161f0 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  le border=1>.<tr
16200 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61  >.<th>Left opera
16210 6e 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c  nd <br>is NULL.<
16220 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64  th>Right operand
16230 20 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55   <br>contains NU
16240 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65  LL.<th>Right ope
16250 72 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65  rand <br>is an e
16260 6d 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66  mpty set.<th>Lef
16270 74 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20  t operand found 
16280 3c 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74  <br>within right
16290 20 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73   operand.<th>Res
162a0 75 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70  ult of <br>IN op
162b0 65 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c  erator.<th>Resul
162c0 74 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20  t of <br>NOT IN 
162d0 6f 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74  operator.<tr>.<t
162e0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
162f0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
16300 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
16310 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
16320 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16330 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16340 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
16350 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16360 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20  ">true.<tr>.<td 
16370 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
16380 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
16390 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
163a0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
163b0 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
163c0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
163d0 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
163e0 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61  ter">false.<td a
163f0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72  lign="center">tr
16400 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  ue.<tr>.<td alig
16410 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
16420 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16430 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
16440 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16450 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
16460 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
16470 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16480 3e 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d  >true.<td align=
16490 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
164a0 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
164b0 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
164c0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
164d0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
164e0 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
164f0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
16500 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16510 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  NULL.<td align="
16520 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72  center">NULL.<tr
16530 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
16540 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69  ter">yes.<td ali
16550 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73  gn="center">does
16560 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20   not matter.<td 
16570 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
16580 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
16590 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
165a0 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
165b0 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64  center">NULL.<td
165c0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
165d0 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  NULL.</table>.</
165e0 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e  center>)^..<p>^N
165f0 6f 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ote that SQLite 
16600 61 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e  allows the paren
16610 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
16620 20 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f   scalar values o
16630 6e 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  n.the right-hand
16640 20 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f   side of an IN o
16650 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r NOT IN operato
16660 72 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79  r to be an empty
16670 20 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f   list but.most o
16680 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
16690 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
166a0 65 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32  es and the SQL92
166b0 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72   standard requir
166c0 65 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f  e.the list to co
166d0 6e 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f  ntain at least o
166e0 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a  ne element.</p>.
166f0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
16700 74 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20  t in_op {EXISTS 
16710 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45  operator} {NOT E
16720 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c  XISTS operator}<
16730 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58  /tcl>.<h3>The EX
16740 49 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68  ISTS operator</h
16750 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53  3>..<p>^The EXIS
16760 54 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61  TS operator alwa
16770 79 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  ys evaluates to 
16780 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  one of the integ
16790 65 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64  er values 0 .and
167a0 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e   1. ^If executin
167b0 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  g the SELECT sta
167c0 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64  tement specified
167d0 20 61 73 20 74 68 65 20 72 69 67 68 74 2d 68 61   as the right-ha
167e0 6e 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74  nd .operand of t
167f0 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
16800 6f 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20  or would return 
16810 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  one or more rows
16820 2c 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54  , then the.EXIST
16830 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
16840 61 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65  ates to 1. ^If e
16850 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
16860 45 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e  ECT would return
16870 0a 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c  .no rows at all,
16880 20 74 68 65 6e 20 74 68 65 20 45 58 49 53 54 53   then the EXISTS
16890 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
168a0 74 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e  tes to 0. ..<p>^
168b0 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
168c0 6c 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f  lumns in each ro
168d0 77 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  w returned by th
168e0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
168f0 6e 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20  nt.(if any) and 
16900 74 68 65 20 73 70 65 63 69 66 69 63 20 76 61 6c  the specific val
16910 75 65 73 20 72 65 74 75 72 6e 65 64 20 68 61 76  ues returned hav
16920 65 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74  e no effect on t
16930 68 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68  he results.of th
16940 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
16950 72 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61  r. ^In particula
16960 72 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69  r, rows containi
16970 6e 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  ng NULL values a
16980 72 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61  re.not handled a
16990 6e 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66  ny differently f
169a0 72 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74  rom rows without
169b0 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c   NULL values...<
169c0 68 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65  h3>Scalar Subque
169d0 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41  ries</h3>..<p>^A
169e0 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
169f0 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ent enclosed in 
16a00 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20  parentheses may 
16a10 61 70 70 65 61 72 20 61 73 20 61 20 73 63 61 6c  appear as a scal
16a20 61 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20  ar.quantity. ^A 
16a30 5b 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73  [SELECT] used as
16a40 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69   a scalar quanti
16a50 74 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61  ty must return a
16a60 20 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68   result set.with
16a70 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
16a80 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  . ^The result of
16a90 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
16aa0 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  is the value of 
16ab0 74 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20  the.only column 
16ac0 69 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f 77  in the first row
16ad0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
16ae0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
16af0 74 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43  t. ^If the SELEC
16b00 54 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74  T .yields more t
16b10 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72  han one result r
16b20 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74  ow, all rows aft
16b30 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65  er the first are
16b40 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68   ignored. ^If.th
16b50 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20  e SELECT yields 
16b60 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68  no rows, then th
16b70 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65  e value of the e
16b80 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c  xpression is NUL
16b90 4c 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f  L..^(The LIMIT o
16ba0 66 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75  f a scalar subqu
16bb0 65 72 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e  ery is always 1.
16bc0 0a 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54  .Any other LIMIT
16bd0 20 76 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20   value given in 
16be0 74 68 65 20 53 51 4c 20 74 65 78 74 20 69 73 20  the SQL text is 
16bf0 69 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e  ignored.)^..<p>^
16c00 41 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45  All types of [SE
16c10 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
16c20 20 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65   including aggre
16c30 67 61 74 65 20 61 6e 64 20 5b 63 6f 6d 70 6f 75  gate and [compou
16c40 6e 64 20 53 45 4c 45 43 54 5d 0a 71 75 65 72 69  nd SELECT].queri
16c50 65 73 20 28 71 75 65 72 69 65 73 20 77 69 74 68  es (queries with
16c60 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55   keywords like U
16c70 4e 49 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20  NION or EXCEPT) 
16c80 61 72 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73  are allowed as s
16c90 63 61 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73  calar.subqueries
16ca0 2e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c  ...<h3>Table Col
16cb0 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a  umn Names</h3>..
16cc0 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d  <p>^A column nam
16cd0 65 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20  e can be any of 
16ce0 74 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65  the names define
16cf0 64 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45  d in the [CREATE
16d00 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e   TABLE].statemen
16d10 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20  t or one of the 
16d20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61  following specia
16d30 6c 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22  l identifiers: "
16d40 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22  <b>ROWID</b>",."
16d50 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20  <b>OID</b>", or 
16d60 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22  "<b>_ROWID_</b>"
16d70 2e 0a 5e 54 68 65 20 74 68 72 65 65 20 73 70 65  ..^The three spe
16d80 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
16d90 20 64 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e   describe the.un
16da0 69 71 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79  ique integer key
16db0 20 28 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61   (the [rowid]) a
16dc0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65  ssociated with e
16dd0 76 65 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65  very .row of eve
16de0 72 79 20 74 61 62 6c 65 20 61 6e 64 20 73 6f 20  ry table and so 
16df0 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c  are not availabl
16e00 65 20 6f 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f  e on [WITHOUT RO
16e10 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 5e 54 68  WID] tables..^Th
16e20 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
16e30 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72  fiers only refer
16e40 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20   to the row key 
16e50 69 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  if the [CREATE T
16e60 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
16e70 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
16e80 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69  a real column wi
16e90 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
16ea0 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61 6e  ..^The rowid can
16eb0 20 62 65 20 75 73 65 64 20 61 6e 79 77 68 65 72   be used anywher
16ec0 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75  e a regular.colu
16ed0 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e 3c  mn can be used.<
16ee0 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45  /p>..<p>^A [SELE
16ef0 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 75 73  CT] statement us
16f00 65 64 20 61 73 20 65 69 74 68 65 72 20 61 20 73  ed as either a s
16f10 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20 6f  calar subquery o
16f20 72 20 61 73 20 74 68 65 20 0a 72 69 67 68 74 2d  r as the .right-
16f30 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20  hand operand of 
16f40 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f 72  an IN, NOT IN or
16f50 20 45 58 49 53 54 53 20 65 78 70 72 65 73 73 69   EXISTS expressi
16f60 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 0a  on may contain .
16f70 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 63 6f  references to co
16f80 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f 75 74  lumns in the out
16f90 65 72 20 71 75 65 72 79 2e 20 53 75 63 68 20 61  er query. Such a
16fa0 20 73 75 62 71 75 65 72 79 20 69 73 20 6b 6e 6f   subquery is kno
16fb0 77 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c 61 74  wn as.a correlat
16fc0 65 64 20 73 75 62 71 75 65 72 79 2e 20 5e 41 20  ed subquery. ^A 
16fd0 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
16fe0 65 72 79 20 69 73 20 72 65 65 76 61 6c 75 61 74  ery is reevaluat
16ff0 65 64 20 65 61 63 68 20 74 69 6d 65 0a 69 74 73  ed each time.its
17000 20 72 65 73 75 6c 74 20 69 73 20 72 65 71 75 69   result is requi
17010 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72 72 65  red. ^An uncorre
17020 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
17030 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c 79  s evaluated only
17040 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20 72 65   once.and the re
17050 73 75 6c 74 20 72 65 75 73 65 64 20 61 73 20 6e  sult reused as n
17060 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63 6c 3e  ecessary...<tcl>
17070 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 74  hd_fragment cast
17080 65 78 70 72 20 7b 43 41 53 54 20 65 78 70 72 65  expr {CAST expre
17090 73 73 69 6f 6e 7d 20 7b 43 41 53 54 7d 20 7b 63  ssion} {CAST} {c
170a0 61 73 74 7d 20 7b 43 41 53 54 20 6f 70 65 72 61  ast} {CAST opera
170b0 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43  tor}</tcl>.<h3>C
170c0 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 73 3c  AST expressions<
170d0 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20  /h3>..<p>A CAST 
170e0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
170f0 65 20 66 6f 72 6d 20 22 43 41 53 54 28 26 6c 74  e form "CAST(&lt
17100 3b 65 78 70 72 26 67 74 3b 20 41 53 20 26 6c 74  ;expr&gt; AS &lt
17110 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 29 22  ;type-name&gt;)"
17120 0a 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 76  .is used to conv
17130 65 72 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ert the value of
17140 20 26 6c 74 3b 65 78 70 72 26 67 74 3b 20 74 6f   &lt;expr&gt; to
17150 20 0a 61 20 64 69 66 66 65 72 65 6e 74 20 5b 73   .a different [s
17160 74 6f 72 61 67 65 20 63 6c 61 73 73 5d 20 73 70  torage class] sp
17170 65 63 69 66 69 65 64 20 62 79 20 26 6c 74 3b 74  ecified by &lt;t
17180 79 70 65 2d 6e 61 6d 65 26 67 74 3b 2e 0a 5e 41  ype-name&gt;..^A
17190 20 43 41 53 54 20 63 6f 6e 76 65 72 73 69 6f 6e   CAST conversion
171a0 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74   is similar to t
171b0 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68  he conversion th
171c0 61 74 20 74 61 6b 65 73 0a 70 6c 61 63 65 20 77  at takes.place w
171d0 68 65 6e 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66  hen a [column af
171e0 66 69 6e 69 74 79 5d 20 69 73 20 61 70 70 6c 69  finity] is appli
171f0 65 64 20 74 6f 20 61 20 76 61 6c 75 65 20 65 78  ed to a value ex
17200 63 65 70 74 20 74 68 61 74 20 77 69 74 68 0a 74  cept that with.t
17210 68 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72  he CAST operator
17220 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
17230 61 6c 77 61 79 73 20 74 61 6b 65 73 20 70 6c 61  always takes pla
17240 63 65 20 65 76 65 6e 20 69 66 20 74 68 65 20 63  ce even if the c
17250 6f 6e 76 65 72 73 69 6f 6e 0a 6c 6f 73 73 79 20  onversion.lossy 
17260 61 6e 64 20 69 72 72 65 76 65 72 73 69 62 6c 65  and irreversible
17270 2c 20 77 68 65 72 65 61 73 20 63 6f 6c 75 6d 6e  , whereas column
17280 20 61 66 66 69 6e 69 74 79 20 6f 6e 6c 79 20 63   affinity only c
17290 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 20  hanges the data 
172a0 74 79 70 65 0a 6f 66 20 61 20 76 61 6c 75 65 20  type.of a value 
172b0 69 66 20 74 68 65 20 63 68 61 6e 67 65 20 69 73  if the change is
172c0 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72 65   lossless and re
172d0 76 65 72 73 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49  versible...<p>^I
172e0 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 26  f the value of &
172f0 6c 74 3b 65 78 70 72 26 67 74 3b 20 69 73 20 4e  lt;expr&gt; is N
17300 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ULL, then the re
17310 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 54  sult of the CAST
17320 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61  .expression is a
17330 6c 73 6f 20 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72  lso NULL. ^Other
17340 77 69 73 65 2c 20 74 68 65 20 73 74 6f 72 61 67  wise, the storag
17350 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 72  e class of the r
17360 65 73 75 6c 74 0a 69 73 20 64 65 74 65 72 6d 69  esult.is determi
17370 6e 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 20  ned by applying 
17380 74 68 65 20 5b 72 75 6c 65 73 20 66 6f 72 20 64  the [rules for d
17390 65 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d  etermining colum
173a0 6e 20 61 66 66 69 6e 69 74 79 5d 20 74 6f 0a 74  n affinity] to.t
173b0 68 65 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65  he &lt;type-name
173c0 26 67 74 3b 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f  &gt;...<table bo
173d0 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c  rder=1>.<tr>.  <
173e0 74 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66 20  th> Affinity of 
173f0 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74  &lt;type-name&gt
17400 3b 0a 20 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73  ;.  <th> Convers
17410 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c  ion Processing.<
17420 74 72 3e 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20  tr>.  <td> NONE 
17430 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67  .  <td> ^Casting
17440 20 61 20 76 61 6c 75 65 20 74 6f 20 61 20 26 6c   a value to a &l
17450 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 20  t;type-name&gt; 
17460 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74 79  with no affinity
17470 20 63 61 75 73 65 73 20 74 68 65 20 76 61 6c 75   causes the valu
17480 65 20 74 6f 0a 20 20 62 65 20 63 6f 6e 76 65 72  e to.  be conver
17490 74 65 64 20 69 6e 74 6f 20 61 20 42 4c 4f 42 2e  ted into a BLOB.
174a0 20 20 5e 43 61 73 74 69 6e 67 20 74 6f 20 61 20    ^Casting to a 
174b0 42 4c 4f 42 20 63 6f 6e 73 69 73 74 73 20 6f 66  BLOB consists of
174c0 20 66 69 72 73 74 20 63 61 73 74 69 6e 67 0a 20   first casting. 
174d0 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20 54 45   the value to TE
174e0 58 54 20 69 6e 20 74 68 65 20 5b 65 6e 63 6f 64  XT in the [encod
174f0 69 6e 67 5d 20 6f 66 20 74 68 65 20 64 61 74 61  ing] of the data
17500 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c  base connection,
17510 20 74 68 65 6e 0a 20 20 69 6e 74 65 72 70 72 65   then.  interpre
17520 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 69  ting the resulti
17530 6e 67 20 62 79 74 65 20 73 65 71 75 65 6e 63 65  ng byte sequence
17540 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65   as a BLOB inste
17550 61 64 20 6f 66 20 61 73 20 54 45 58 54 2e 0a 0a  ad of as TEXT...
17560 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 54 45 58 54  <tr>.  <td> TEXT
17570 0a 20 20 3c 74 64 3e 20 5e 54 6f 20 63 61 73 74  .  <td> ^To cast
17580 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
17590 20 54 45 58 54 2c 20 74 68 65 20 73 65 71 75 65   TEXT, the seque
175a0 6e 63 65 20 6f 66 20 62 79 74 65 73 20 74 68 61  nce of bytes tha
175b0 74 20 6d 61 6b 65 20 75 70 20 74 68 65 0a 20 20  t make up the.  
175c0 42 4c 4f 42 20 69 73 20 69 6e 74 65 72 70 72 65  BLOB is interpre
175d0 74 65 64 20 61 73 20 74 65 78 74 20 65 6e 63 6f  ted as text enco
175e0 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 64 61  ded using the da
175f0 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 2e  tabase encoding.
17600 0a 20 20 3c 70 3e 0a 20 20 20 5e 43 61 73 74 69  .  <p>.   ^Casti
17610 6e 67 20 61 6e 20 49 4e 54 45 47 45 52 20 6f 72  ng an INTEGER or
17620 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f   REAL value into
17630 20 54 45 58 54 20 72 65 6e 64 65 72 73 20 74 68   TEXT renders th
17640 65 20 76 61 6c 75 65 20 61 73 20 69 66 20 76 69  e value as if vi
17650 61 20 0a 20 20 20 20 5b 73 71 6c 69 74 65 33 5f  a .    [sqlite3_
17660 73 6e 70 72 69 6e 74 66 28 29 5d 20 65 78 63 65  snprintf()] exce
17670 70 74 20 74 68 61 74 20 74 68 65 20 72 65 73 75  pt that the resu
17680 6c 74 69 6e 67 20 54 45 58 54 20 75 73 65 73 20  lting TEXT uses 
17690 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f  the [encoding] o
176a0 66 0a 20 20 20 20 74 68 65 20 64 61 74 61 62 61  f.    the databa
176b0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a  se connection...
176c0 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 52 45 41 4c  <tr>.  <td> REAL
176d0 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61  .  <td> ^When ca
176e0 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c  sting a BLOB val
176f0 75 65 20 74 6f 20 61 20 52 45 41 4c 2c 20 74 68  ue to a REAL, th
17700 65 20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74  e value is first
17710 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20   converted to.  
17720 20 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20        TEXT..    
17730 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74     <p>^When cast
17740 69 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75 65  ing a TEXT value
17750 20 74 6f 20 52 45 41 4c 2c 20 74 68 65 20 6c 6f   to REAL, the lo
17760 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70  ngest possible p
17770 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20  refix of.       
17780 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
17790 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
177a0 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d  ed as a real num
177b0 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65 64  ber is extracted
177c0 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68   from.        th
177d0 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64  e TEXT value and
177e0 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69   the remainder i
177f0 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61  gnored. ^Any lea
17800 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74  ding spaces in t
17810 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54 20  he.        TEXT 
17820 76 61 6c 75 65 20 61 72 65 20 69 67 6e 6f 72 65  value are ignore
17830 64 20 77 68 65 6e 20 63 6f 6e 76 65 72 67 69 6e  d when convergin
17840 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 52  g from TEXT to R
17850 45 41 4c 2e 20 5e 28 49 66 20 74 68 65 72 65 20  EAL. ^(If there 
17860 69 73 0a 20 20 20 20 20 20 20 20 6e 6f 20 70 72  is.        no pr
17870 65 66 69 78 20 74 68 61 74 20 63 61 6e 20 62 65  efix that can be
17880 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
17890 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 74  a real number, t
178a0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
178b0 0a 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 73  .        convers
178c0 69 6f 6e 20 69 73 20 30 2e 30 2e 29 5e 0a 0a 3c  ion is 0.0.)^..<
178d0 74 72 3e 0a 20 20 3c 74 64 3e 20 49 4e 54 45 47  tr>.  <td> INTEG
178e0 45 52 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20  ER.  <td> ^When 
178f0 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76  casting a BLOB v
17900 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c  alue to INTEGER,
17910 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66 69   the value is fi
17920 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  rst converted to
17930 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a 20  .        TEXT.. 
17940 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63        <p>^When c
17950 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76 61  asting a TEXT va
17960 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c 20  lue to INTEGER, 
17970 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73  the longest poss
17980 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20  ible prefix of. 
17990 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75 65         the value
179a0 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
179b0 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
179c0 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 69 73  nteger number is
179d0 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a   extracted from.
179e0 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54          the TEXT
179f0 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72   value and the r
17a00 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64  emainder ignored
17a10 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73  . ^Any leading s
17a20 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20  paces in the.   
17a30 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20       TEXT value 
17a40 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20  when converting 
17a50 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 49 4e 54  from TEXT to INT
17a60 45 47 45 52 20 61 72 65 20 69 67 6e 6f 72 65 64  EGER are ignored
17a70 2e 20 5e 49 66 20 74 68 65 72 65 0a 20 20 20 20  . ^If there.    
17a80 20 20 20 20 69 73 20 6e 6f 20 70 72 65 66 69 78      is no prefix
17a90 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
17aa0 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
17ab0 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 2c 20 74  nteger number, t
17ac0 68 65 20 72 65 73 75 6c 74 0a 20 20 20 20 20 20  he result.      
17ad0 20 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73    of the convers
17ae0 69 6f 6e 20 69 73 20 30 2e 20 20 5e 28 54 68 65  ion is 0.  ^(The
17af0 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20 75   CAST operator u
17b00 6e 64 65 72 73 74 61 6e 64 73 20 64 65 63 69 6d  nderstands decim
17b10 61 6c 20 69 6e 74 65 67 65 72 73 0a 20 20 20 20  al integers.    
17b20 20 20 20 20 6f 6e 6c 79 20 26 6d 64 61 73 68 3b      only &mdash;
17b30 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f 66 20 5b   conversion of [
17b40 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
17b50 67 65 72 73 5d 20 73 74 6f 70 73 20 61 74 20 74  gers] stops at t
17b60 68 65 20 22 78 22 20 69 6e 20 74 68 65 0a 20 20  he "x" in the.  
17b70 20 20 20 20 20 20 22 30 78 22 20 70 72 65 66 69        "0x" prefi
17b80 78 20 6f 66 20 74 68 65 20 68 65 78 61 64 65 63  x of the hexadec
17b90 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 73 74 72  imal integer str
17ba0 69 6e 67 20 61 6e 64 20 74 68 75 73 20 72 65 73  ing and thus res
17bb0 75 6c 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20  ult of the .    
17bc0 20 20 20 20 43 41 53 54 20 69 73 20 61 6c 77 61      CAST is alwa
17bd0 79 73 20 7a 65 72 6f 2e 29 5e 0a 0a 20 20 20 20  ys zero.)^..    
17be0 20 20 3c 70 3e 5e 41 20 63 61 73 74 20 6f 66 20    <p>^A cast of 
17bf0 61 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74  a REAL value int
17c00 6f 20 61 6e 20 49 4e 54 45 47 45 52 20 72 65 73  o an INTEGER res
17c10 75 6c 74 73 20 69 6e 20 74 68 65 20 69 6e 74 65  ults in the inte
17c20 67 65 72 0a 20 20 20 20 20 20 62 65 74 77 65 65  ger.      betwee
17c30 6e 20 74 68 65 20 52 45 41 4c 20 76 61 6c 75 65  n the REAL value
17c40 20 61 6e 64 20 7a 65 72 6f 20 74 68 61 74 20 69   and zero that i
17c50 73 20 63 6c 6f 73 65 73 74 20 74 6f 20 74 68 65  s closest to the
17c60 20 52 45 41 4c 20 76 61 6c 75 65 2e 0a 20 20 20   REAL value..   
17c70 20 20 20 5e 49 66 20 61 20 52 45 41 4c 20 69 73     ^If a REAL is
17c80 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
17c90 65 20 67 72 65 61 74 65 73 74 20 70 6f 73 73 69  e greatest possi
17ca0 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20 20 20  ble signed.     
17cb0 20 69 6e 74 65 67 65 72 20 28 2b 39 32 32 33 33   integer (+92233
17cc0 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20  72036854775807) 
17cd0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
17ce0 69 73 20 74 68 65 20 67 72 65 61 74 65 73 74 20  is the greatest 
17cf0 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20 73  possible.      s
17d00 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 6e  igned integer an
17d10 64 20 69 66 20 74 68 65 20 52 45 41 4c 20 69 73  d if the REAL is
17d20 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6c   less than the l
17d30 65 61 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69  east possible si
17d40 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67  gned.      integ
17d50 65 72 20 28 2d 39 32 32 33 33 37 32 30 33 36 38  er (-92233720368
17d60 35 34 37 37 35 38 30 38 29 20 74 68 65 6e 20 74  54775808) then t
17d70 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
17d80 20 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65 0a   least possible.
17d90 20 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e 74        signed int
17da0 65 67 65 72 2e 0a 0a 20 20 20 20 20 20 3c 70 3e  eger...      <p>
17db0 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65 20  Prior to SQLite 
17dc0 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 2c 20 63  version 3.8.2, c
17dd0 61 73 74 69 6e 67 20 61 20 52 45 41 4c 20 76 61  asting a REAL va
17de0 6c 75 65 20 67 72 65 61 74 65 72 20 74 68 61 6e  lue greater than
17df0 0a 20 20 20 20 20 20 2b 39 32 32 33 33 37 32 30  .      +92233720
17e00 33 36 38 35 34 37 37 35 38 30 37 2e 30 20 69 6e  36854775807.0 in
17e10 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
17e20 73 75 6c 74 65 64 20 69 6e 20 74 68 65 20 6d 6f  sulted in the mo
17e30 73 74 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20  st negative.    
17e40 20 20 69 6e 74 65 67 65 72 2c 20 2d 39 32 32 33    integer, -9223
17e50 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e  372036854775808.
17e60 20 20 54 68 69 73 20 62 65 68 61 76 69 6f 72 20    This behavior 
17e70 77 61 73 20 6d 65 61 6e 74 20 74 6f 20 65 6d 75  was meant to emu
17e80 6c 61 74 65 20 74 68 65 0a 20 20 20 20 20 20 62  late the.      b
17e90 65 68 61 76 69 6f 72 20 6f 66 20 78 38 36 2f 78  ehavior of x86/x
17ea0 36 34 20 68 61 72 64 77 61 72 65 20 77 68 65 6e  64 hardware when
17eb0 20 64 6f 69 6e 67 20 74 68 65 20 65 71 75 69 76   doing the equiv
17ec0 61 6c 65 6e 74 20 63 61 73 74 2e 0a 0a 3c 74 72  alent cast...<tr
17ed0 3e 0a 20 20 3c 74 64 3e 20 4e 55 4d 45 52 49 43  >.  <td> NUMERIC
17ee0 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67  .  <td> ^Casting
17ef0 20 61 20 54 45 58 54 20 6f 72 20 42 4c 4f 42 20   a TEXT or BLOB 
17f00 76 61 6c 75 65 20 69 6e 74 6f 20 4e 55 4d 45 52  value into NUMER
17f10 49 43 20 66 69 72 73 74 20 64 6f 65 73 20 61 20  IC first does a 
17f20 66 6f 72 63 65 64 0a 20 20 20 63 6f 6e 76 65 72  forced.   conver
17f30 73 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c 20 62  sion into REAL b
17f40 75 74 20 74 68 65 6e 20 66 75 72 74 68 65 72 20  ut then further 
17f50 63 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65 73  converts the res
17f60 75 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45 52  ult into INTEGER
17f70 20 69 66 0a 20 20 20 61 6e 64 20 6f 6e 6c 79 20   if.   and only 
17f80 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  if the conversio
17f90 6e 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20 49  n from REAL to I
17fa0 4e 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c 65  NTEGER is lossle
17fb0 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c  ss and reversibl
17fc0 65 2e 0a 20 20 20 54 68 69 73 20 69 73 20 74 68  e..   This is th
17fd0 65 20 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20 69  e only context i
17fe0 6e 20 53 51 4c 69 74 65 20 77 68 65 72 65 20 74  n SQLite where t
17ff0 68 65 20 4e 55 4d 45 52 49 43 20 61 6e 64 20 49  he NUMERIC and I
18000 4e 54 45 47 45 52 20 5b 61 66 66 69 6e 69 74 69  NTEGER [affiniti
18010 65 73 5d 0a 20 20 20 62 65 68 61 76 65 20 64 69  es].   behave di
18020 66 66 65 72 65 6e 74 6c 79 2e 0a 20 20 20 3c 70  fferently..   <p
18030 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45 41  > ^Casting a REA
18040 4c 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61 6c  L or INTEGER val
18050 75 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69 73  ue to NUMERIC is
18060 20 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20 69   a no-op, even i
18070 66 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c 75  f a real.   valu
18080 65 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73 6c  e could be lossl
18090 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
180a0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 0a  to an integer...
180b0 3c 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a  </tr>..</table>.
180c0 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74  .<p>^Note that t
180d0 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 63  he result from c
180e0 61 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42  asting any non-B
180f0 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  LOB value into a
18100 20 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20 72   .BLOB and the r
18110 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69  esult from casti
18120 6e 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c 75  ng any BLOB valu
18130 65 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f  e into a non-BLO
18140 42 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20 64  B value.may be d
18150 69 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64 69  ifferent dependi
18160 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68  ng on whether th
18170 65 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63 6f  e database [enco
18180 64 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c 0a  ding] is UTF-8,.
18190 55 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54 46  UTF-16be, or UTF
181a0 2d 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68 64  -16le....<tcl>hd
181b0 5f 66 72 61 67 6d 65 6e 74 20 62 6f 6f 6c 65 61  _fragment boolea
181c0 6e 65 78 70 72 20 7b 62 6f 6f 6c 65 61 6e 20 65  nexpr {boolean e
181d0 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e  xpression}</tcl>
181e0 0a 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20 45 78 70  .<h3>Boolean Exp
181f0 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c  ressions</h3>..<
18200 70 3e 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61  p>The SQL langua
18210 67 65 20 66 65 61 74 75 72 65 73 20 73 65 76 65  ge features seve
18220 72 61 6c 20 63 6f 6e 74 65 78 74 73 20 77 68 65  ral contexts whe
18230 72 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  re an expression
18240 20 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20 61   is .evaluated a
18250 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  nd the result co
18260 6e 76 65 72 74 65 64 20 74 6f 20 61 20 62 6f 6f  nverted to a boo
18270 6c 65 61 6e 20 28 74 72 75 65 20 6f 72 20 66 61  lean (true or fa
18280 6c 73 65 29 20 76 61 6c 75 65 2e 20 54 68 65 73  lse) value. Thes
18290 65 0a 63 6f 6e 74 65 78 74 73 20 61 72 65 3a 0a  e.contexts are:.
182a0 0a 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e  .  <ul>.    <li>
182b0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
182c0 65 20 6f 66 20 61 20 53 45 4c 45 43 54 2c 20 55  e of a SELECT, U
182d0 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 20  PDATE or DELETE 
182e0 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c  statement,.    <
182f0 6c 69 3e 20 74 68 65 20 4f 4e 20 6f 72 20 55 53  li> the ON or US
18300 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
18310 6a 6f 69 6e 20 69 6e 20 61 20 53 45 4c 45 43 54  join in a SELECT
18320 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20   statement,.    
18330 3c 6c 69 3e 20 74 68 65 20 48 41 56 49 4e 47 20  <li> the HAVING 
18340 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
18350 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20  CT statement,.  
18360 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20    <li> the WHEN 
18370 63 6c 61 75 73 65 20 6f 66 20 61 6e 20 53 51 4c  clause of an SQL
18380 20 74 72 69 67 67 65 72 2c 20 61 6e 64 0a 20 20   trigger, and.  
18390 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20    <li> the WHEN 
183a0 63 6c 61 75 73 65 20 6f 72 20 63 6c 61 75 73 65  clause or clause
183b0 73 20 6f 66 20 73 6f 6d 65 20 43 41 53 45 20 65  s of some CASE e
183c0 78 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 3c 2f  xpressions..  </
183d0 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f 6e  ul>..<p>^(To con
183e0 76 65 72 74 20 74 68 65 20 72 65 73 75 6c 74 73  vert the results
183f0 20 6f 66 20 61 6e 20 53 51 4c 20 65 78 70 72 65   of an SQL expre
18400 73 73 69 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c 65  ssion to a boole
18410 61 6e 20 76 61 6c 75 65 2c 20 53 51 4c 69 74 65  an value, SQLite
18420 0a 66 69 72 73 74 20 63 61 73 74 73 20 74 68 65  .first casts the
18430 20 72 65 73 75 6c 74 20 74 6f 20 61 20 4e 55 4d   result to a NUM
18440 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68  ERIC value in th
18450 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20  e same way as a 
18460 0a 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  .[CAST expressio
18470 6e 5d 2e 20 41 20 6e 75 6d 65 72 69 63 20 7a 65  n]. A numeric ze
18480 72 6f 20 76 61 6c 75 65 20 28 69 6e 74 65 67 65  ro value (intege
18490 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61  r value 0 or rea
184a0 6c 20 0a 76 61 6c 75 65 20 30 2e 30 29 20 69 73  l .value 0.0) is
184b0 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
184c0 65 20 66 61 6c 73 65 2e 20 20 41 20 4e 55 4c 4c  e false.  A NULL
184d0 20 76 61 6c 75 65 20 69 73 20 73 74 69 6c 6c 20   value is still 
184e0 4e 55 4c 4c 2e 0a 41 6c 6c 20 6f 74 68 65 72 20  NULL..All other 
184f0 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
18500 64 65 72 65 64 20 74 72 75 65 2e 29 5e 0a 0a 3c  dered true.)^..<
18510 70 3e 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65 2c  p>^(For example,
18520 20 74 68 65 20 76 61 6c 75 65 73 20 4e 55 4c 4c   the values NULL
18530 2c 20 30 2e 30 2c 20 30 2c 20 27 65 6e 67 6c 69  , 0.0, 0, 'engli
18540 73 68 27 20 61 6e 64 20 27 30 27 20 61 72 65 20  sh' and '0' are 
18550 61 6c 6c 20 63 6f 6e 73 69 64 65 72 65 64 0a 74  all considered.t
18560 6f 20 62 65 20 66 61 6c 73 65 2e 29 5e 20 5e 28  o be false.)^ ^(
18570 56 61 6c 75 65 73 20 31 2c 20 31 2e 30 2c 20 30  Values 1, 1.0, 0
18580 2e 31 2c 20 2d 30 2e 31 20 61 6e 64 20 27 31 65  .1, -0.1 and '1e
18590 6e 67 6c 69 73 68 27 20 61 72 65 20 63 6f 6e 73  nglish' are cons
185a0 69 64 65 72 65 64 20 74 6f 20 0a 62 65 20 74 72  idered to .be tr
185b0 75 65 2e 29 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74  ue.)^..<h3>Funct
185c0 69 6f 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 53 51 4c  ions</h3>.<p>SQL
185d0 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
185e0 79 20 5b 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70  y [corefunc|simp
185f0 6c 65 5d 20 61 6e 64 20 5b 61 67 67 66 75 6e 63  le] and [aggfunc
18600 7c 61 67 67 72 65 67 61 74 65 5d 0a 53 51 4c 20  |aggregate].SQL 
18610 66 75 6e 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20  functions.  For 
18620 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70 75 72  presentation pur
18630 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20 66 75  poses, simple fu
18640 6e 63 74 69 6f 6e 73 20 61 72 65 20 66 75 72 74  nctions are furt
18650 68 65 72 0a 73 75 62 64 69 76 69 64 65 64 20 69  her.subdivided i
18660 6e 74 6f 20 5b 63 6f 72 65 66 75 6e 63 20 7c 20  nto [corefunc | 
18670 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20  core functions] 
18680 61 6e 64 20 5b 64 61 74 65 66 75 6e 63 7c 64 61  and [datefunc|da
18690 74 65 2d 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te-time function
186a0 73 5d 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73  s]..Applications
186b0 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75 6e   can add new fun
186c0 63 74 69 6f 6e 73 2c 20 77 72 69 74 74 65 6e 20  ctions, written 
186d0 69 6e 20 43 2f 43 2b 2b 2c 20 75 73 69 6e 67 20  in C/C++, using 
186e0 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65  the.[sqlite3_cre
186f0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20  ate_function()] 
18700 69 6e 74 65 72 66 61 63 65 2e 0a 3c 2f 70 3e 0a  interface..</p>.
18710 0a 3c 70 3e 5e 49 74 20 69 73 20 70 6f 73 73 69  .<p>^It is possi
18720 62 6c 65 20 74 6f 20 68 61 76 65 20 61 6e 20 61  ble to have an a
18730 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
18740 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  n with the same 
18750 6e 61 6d 65 20 61 73 20 61 0a 73 69 6d 70 6c 65  name as a.simple
18760 20 66 75 6e 63 74 69 6f 6e 2c 20 61 73 20 6c 6f   function, as lo
18770 6e 67 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72  ng as the number
18780 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66 6f   of arguments fo
18790 72 20 74 68 65 20 74 77 6f 20 66 6f 72 6d 73 20  r the two forms 
187a0 6f 66 20 74 68 65 0a 66 75 6e 63 74 69 6f 6e 20  of the.function 
187b0 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 20 20  are different.  
187c0 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68  ^For example, th
187d0 65 20 5b 61 67 67 5f 6d 61 78 7c 6d 61 78 28 29  e [agg_max|max()
187e0 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ] function with 
187f0 61 0a 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a.single argumen
18800 74 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74  t is an aggregat
18810 65 20 61 6e 64 20 74 68 65 20 5b 6d 61 78 28 29  e and the [max()
18820 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ] function with 
18830 74 77 6f 20 6f 72 20 6d 6f 72 65 0a 61 72 67 75  two or more.argu
18840 6d 65 6e 74 73 20 69 73 20 61 20 73 69 6d 70 6c  ments is a simpl
18850 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 3c 74 63  e function...<tc
18860 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
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 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
188a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
188b0 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65 20  #.Section {Core 
188c0 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66  Functions} coref
188d0 75 6e 63 20 7b 2a 63 6f 72 65 66 75 6e 63 7d 0a  unc {*corefunc}.
188e0 70 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73 79  proc funcdef {sy
188f0 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65  ntax keywords de
18900 73 63 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20  sc} {.  hd_puts 
18910 7b 3c 74 72 3e 7d 0a 20 20 72 65 67 73 75 62 20  {<tr>}.  regsub 
18920 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69  -all {\s+} [stri
18930 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d  ng trim $syntax]
18940 20 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78   {<br />} syntax
18950 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
18960 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73  \(([^*)]+)\)} $s
18970 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69  yntax {(<i>\1</i
18980 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  >)} syntax.  reg
18990 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79  sub -all {,} $sy
189a0 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20  ntax {</i>,<i>} 
189b0 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
189c0 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c  -all {<i>\.\.\.<
189d0 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e  /i>} $syntax {..
189e0 2e 7d 20 73 79 6e 74 61 78 0a 20 20 68 64 5f 70  .} syntax.  hd_p
189f0 75 74 73 20 22 3c 74 64 20 76 61 6c 69 67 6e 3d  uts "<td valign=
18a00 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22  \"top\" align=\"
18a10 72 69 67 68 74 5c 22 20 77 69 64 74 68 3d 5c 22  right\" width=\"
18a20 31 32 30 5c 22 3e 22 0a 20 20 69 66 20 7b 5b 6c  120\">".  if {[l
18a30 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 73  length $keywords
18a40 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65 67 65  ]==0} {.    rege
18a50 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79  xp {[a-z_]+} $sy
18a60 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20 20 68 64  ntax name.    hd
18a70 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d 65 20  _fragment $name 
18a80 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d 65 7d 28  *$name "${name}(
18a90 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 22 0a  ) SQL function".
18aa0 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73    } else {.    s
18ab0 65 74 20 66 72 61 67 6e 61 6d 65 20 5b 6c 69 6e  et fragname [lin
18ac0 64 65 78 20 24 6b 65 79 77 6f 72 64 73 20 30 5d  dex $keywords 0]
18ad0 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  .    regsub -all
18ae0 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72 61 67 6e   {[^a-z]} $fragn
18af0 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61 6d 65 0a  ame {} fragname.
18b00 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20      hd_fragment 
18b10 24 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 65 76  $fragname.    ev
18b20 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 5b  al hd_keywords [
18b30 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b  string map {\n {
18b40 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73 5d 0a 20   }} $keywords]. 
18b50 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 24 73   }.  hd_puts "$s
18b60 79 6e 74 61 78 3c 2f 74 64 3e 22 0a 20 20 68 64  yntax</td>".  hd
18b70 5f 70 75 74 73 20 7b 3c 74 64 20 76 61 6c 69 67  _puts {<td valig
18b80 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20 68 64 5f 72  n="top">}.  hd_r
18b90 65 73 6f 6c 76 65 20 24 64 65 73 63 0a 20 20 68  esolve $desc.  h
18ba0 64 5f 70 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74  d_puts {</td></t
18bb0 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  r>}.}.</tcl>..<p
18bc0 3e 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69  >The core functi
18bd0 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
18be0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
18bf0 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65   default. .[date
18c00 66 75 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70  func | Date &amp
18c10 3b 20 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  ; Time functions
18c20 5d 20 61 6e 64 0a 5b 61 67 67 66 75 6e 63 20 7c  ] and.[aggfunc |
18c30 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
18c40 69 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d 65  ions] are docume
18c50 6e 74 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e  nted separately.
18c60 20 20 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e    An.application
18c70 20 6d 61 79 20 64 65 66 69 6e 65 20 61 64 64 69   may define addi
18c80 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73  tional.functions
18c90 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 61 6e   written in C an
18ca0 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 64  d added to the d
18cb0 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 75  atabase engine u
18cc0 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65  sing.the [sqlite
18cd0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
18ce0 6e 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c  n()] API.</p>..<
18cf0 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63  table border=0 c
18d00 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c  ellpadding=10>.<
18d10 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62  tcl>.funcdef {ab
18d20 73 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  s(X)} {} {.  ^Th
18d30 65 20 61 62 73 28 58 29 20 66 75 6e 63 74 69 6f  e abs(X) functio
18d40 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 62  n returns the ab
18d50 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
18d60 74 68 65 20 6e 75 6d 65 72 69 63 0a 20 20 61 72  the numeric.  ar
18d70 67 75 6d 65 6e 74 20 58 2e 20 20 5e 41 62 73 28  gument X.  ^Abs(
18d80 58 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20  X) returns NULL 
18d90 69 66 20 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20  if X is NULL. . 
18da0 20 5e 28 41 62 73 28 58 29 20 72 65 74 75 72 6e   ^(Abs(X) return
18db0 20 30 2e 30 20 69 66 20 58 20 69 73 20 61 20 73   0.0 if X is a s
18dc0 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20  tring or blob.  
18dd0 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  that cannot be c
18de0 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20 6e 75  onverted to a nu
18df0 6d 65 72 69 63 20 76 61 6c 75 65 2e 29 5e 20 20  meric value.)^  
18e00 5e 49 66 20 58 20 69 73 20 74 68 65 20 0a 20 20  ^If X is the .  
18e10 69 6e 74 65 67 65 72 20 2d 39 32 32 33 33 37 32  integer -9223372
18e20 30 33 36 38 35 34 37 37 35 38 30 38 20 74 68 65  036854775808 the
18e30 6e 20 61 62 73 28 58 29 20 74 68 72 6f 77 73 20  n abs(X) throws 
18e40 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66  an integer overf
18e50 6c 6f 77 0a 20 20 65 72 72 6f 72 20 73 69 6e 63  low.  error sinc
18e60 65 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 71  e there is no eq
18e70 75 69 76 61 6c 65 6e 74 20 70 6f 73 69 74 69 76  uivalent positiv
18e80 65 20 36 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d  e 64-bit two com
18e90 70 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d  plement value..}
18ea0 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 6e 67  ..funcdef {chang
18eb0 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  es()} {} {.  ^Th
18ec0 65 20 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63  e changes() func
18ed0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
18ee0 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62   number of datab
18ef0 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 77 65  ase rows that we
18f00 72 65 20 63 68 61 6e 67 65 64 0a 20 20 6f 72 20  re changed.  or 
18f10 69 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c 65  inserted or dele
18f20 74 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20  ted by the most 
18f30 72 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74  recently complet
18f40 65 64 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  ed INSERT, DELET
18f50 45 2c 0a 20 20 6f 72 20 55 50 44 41 54 45 20 73  E,.  or UPDATE s
18f60 74 61 74 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73  tatement, exclus
18f70 69 76 65 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  ive of statement
18f80 73 20 69 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c  s in lower-level
18f90 20 74 72 69 67 67 65 72 73 2e 0a 20 20 5e 54 68   triggers..  ^Th
18fa0 65 20 63 68 61 6e 67 65 73 28 29 20 53 51 4c 20  e changes() SQL 
18fb0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
18fc0 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
18fd0 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   [sqlite3_change
18fe0 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e  s()].  C/C++ fun
18ff0 63 74 69 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20  ction and hence 
19000 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d 65  follows the same
19010 20 72 75 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74   rules for count
19020 69 6e 67 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a  ing changes..}..
19030 66 75 6e 63 64 65 66 20 7b 63 68 61 72 28 58 31  funcdef {char(X1
19040 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20  ,X2,...,XN)} {} 
19050 7b 0a 20 20 5e 28 54 68 65 20 63 68 61 72 28 58  {.  ^(The char(X
19060 31 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e  1,X2,...,XN) fun
19070 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
19080 73 74 72 69 6e 67 20 63 6f 6d 70 6f 73 65 64 20  string composed 
19090 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 68 61  of characters ha
190a0 76 69 6e 67 20 74 68 65 0a 20 20 20 75 6e 69 63  ving the.   unic
190b0 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 76  ode code point v
190c0 61 6c 75 65 73 20 6f 66 20 69 6e 74 65 67 65 72  alues of integer
190d0 73 20 58 31 20 74 68 72 6f 75 67 68 20 58 4e 2c  s X1 through XN,
190e0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 29 5e   respectively.)^
190f0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61  .}..funcdef {coa
19100 6c 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20  lesce(X,Y,...)} 
19110 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c  {} {.  ^The coal
19120 65 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  esce() function 
19130 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f  returns a copy o
19140 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d  f its first non-
19150 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f  NULL argument, o
19160 72 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20  r.  NULL if all 
19170 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55  arguments are NU
19180 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65 28 29  LL.  ^Coalesce()
19190 20 6d 75 73 74 20 68 61 76 65 20 61 74 20 6c 65   must have at le
191a0 61 73 74 20 0a 20 20 32 20 61 72 67 75 6d 65 6e  ast .  2 argumen
191b0 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ts..}..funcdef {
191c0 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  glob(X,Y)} {} {.
191d0 20 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c 59 29    ^The glob(X,Y)
191e0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75   function is equ
191f0 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20  ivalent to the. 
19200 20 65 78 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e   expression "<b>
19210 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20  Y GLOB X</b>".. 
19220 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58   Note that the X
19230 20 61 6e 64 20 59 20 61 72 67 75 6d 65 6e 74 73   and Y arguments
19240 20 61 72 65 20 72 65 76 65 72 73 65 64 20 69 6e   are reversed in
19250 20 74 68 65 20 67 6c 6f 62 28 29 20 66 75 6e 63   the glob() func
19260 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76 65 20  tion.  relative 
19270 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 47 4c  to the infix [GL
19280 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20  OB] operator..  
19290 5e 49 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ^If the [sqlite3
192a0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
192b0 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 69 73  ()] interface is
192c0 20 75 73 65 64 20 74 6f 0a 20 20 6f 76 65 72 72   used to.  overr
192d0 69 64 65 20 74 68 65 20 67 6c 6f 62 28 58 2c 59  ide the glob(X,Y
192e0 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ) function with 
192f0 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69  an alternative i
19300 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68  mplementation th
19310 65 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42 5d 20  en.  the [GLOB] 
19320 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 69 6e  operator will in
19330 76 6f 6b 65 20 74 68 65 20 61 6c 74 65 72 6e 61  voke the alterna
19340 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tive implementat
19350 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ion..}..funcdef 
19360 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d  {ifnull(X,Y)} {}
19370 20 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c   {.  ^The ifnull
19380 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
19390 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74  rns a copy of it
193a0 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c  s first non-NULL
193b0 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20   argument, or.  
193c0 4e 55 4c 4c 20 69 66 20 62 6f 74 68 20 61 72 67  NULL if both arg
193d0 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e  uments are NULL.
193e0 20 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75 73 74    ^Ifnull() must
193f0 20 68 61 76 65 20 65 78 61 63 74 6c 79 20 32 20   have exactly 2 
19400 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e 54 68  arguments..  ^Th
19410 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  e ifnull() funct
19420 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
19430 74 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65 28 29  t to [coalesce()
19440 5d 20 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d  ] with two argum
19450 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ents..}..funcdef
19460 20 7b 69 6e 73 74 72 28 58 2c 59 29 7d 20 7b 7d   {instr(X,Y)} {}
19470 20 7b 0a 20 20 5e 54 68 65 20 69 6e 73 74 72 28   {.  ^The instr(
19480 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 66 69  X,Y) function fi
19490 6e 64 73 20 74 68 65 20 66 69 72 73 74 20 6f 63  nds the first oc
194a0 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69  currence of stri
194b0 6e 67 20 59 20 77 69 74 68 69 6e 20 0a 20 20 73  ng Y within .  s
194c0 74 72 69 6e 67 20 58 20 61 6e 64 20 72 65 74 75  tring X and retu
194d0 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
194e0 66 20 70 72 69 6f 72 20 63 68 61 72 61 63 74 65  f prior characte
194f0 72 73 20 70 6c 75 73 20 31 2c 20 6f 72 20 30 20  rs plus 1, or 0 
19500 69 66 0a 20 20 59 20 69 73 20 6e 6f 77 68 65 72  if.  Y is nowher
19510 65 20 66 6f 75 6e 64 20 77 69 74 68 69 6e 20 58  e found within X
19520 2e 0a 20 20 5e 4f 72 2c 20 69 66 20 58 20 61 6e  ..  ^Or, if X an
19530 64 20 59 20 61 72 65 20 62 6f 74 68 20 42 4c 4f  d Y are both BLO
19540 42 73 2c 20 74 68 65 6e 20 69 6e 73 74 72 28 58  Bs, then instr(X
19550 2c 59 29 20 72 65 74 75 72 6e 73 20 6f 6e 65 0a  ,Y) returns one.
19560 20 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20    more than the 
19570 6e 75 6d 62 65 72 20 62 79 74 65 73 20 70 72 69  number bytes pri
19580 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  or to the first 
19590 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 59 2c  occurrence of Y,
195a0 20 6f 72 20 30 20 69 66 0a 20 20 59 20 64 6f 65   or 0 if.  Y doe
195b0 73 20 6e 6f 74 20 6f 63 63 75 72 20 61 6e 79 77  s not occur anyw
195c0 68 65 72 65 20 77 69 74 68 69 6e 20 58 2e 0a 20  here within X.. 
195d0 20 5e 49 66 20 62 6f 74 68 20 61 72 67 75 6d 65   ^If both argume
195e0 6e 74 73 20 58 20 61 6e 64 20 59 20 74 6f 20 69  nts X and Y to i
195f0 6e 73 74 72 28 58 2c 59 29 20 61 72 65 20 6e 6f  nstr(X,Y) are no
19600 6e 2d 4e 55 4c 4c 20 61 6e 64 20 61 72 65 20 6e  n-NULL and are n
19610 6f 74 20 42 4c 4f 42 73 0a 20 20 74 68 65 6e 20  ot BLOBs.  then 
19620 62 6f 74 68 20 61 72 65 20 69 6e 74 65 72 70 72  both are interpr
19630 65 74 65 64 20 61 73 20 73 74 72 69 6e 67 73 2e  eted as strings.
19640 0a 20 20 5e 49 66 20 65 69 74 68 65 72 20 58 20  .  ^If either X 
19650 6f 72 20 59 20 61 72 65 20 4e 55 4c 4c 20 69 6e  or Y are NULL in
19660 20 69 6e 73 74 72 28 58 2c 59 29 20 74 68 65 6e   instr(X,Y) then
19670 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
19680 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ULL..}..funcdef 
19690 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  {hex(X)} {} {.  
196a0 5e 54 68 65 20 68 65 78 28 29 20 66 75 6e 63 74  ^The hex() funct
196b0 69 6f 6e 20 69 6e 74 65 72 70 72 65 74 73 20 69  ion interprets i
196c0 74 73 20 61 72 67 75 6d 65 6e 74 20 61 73 20 61  ts argument as a
196d0 20 42 4c 4f 42 20 61 6e 64 20 72 65 74 75 72 6e   BLOB and return
196e0 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68 69  s.  a string whi
196f0 63 68 20 69 73 20 74 68 65 20 75 70 70 65 72 2d  ch is the upper-
19700 63 61 73 65 20 68 65 78 61 64 65 63 69 6d 61 6c  case hexadecimal
19710 20 72 65 6e 64 65 72 69 6e 67 20 6f 66 20 74 68   rendering of th
19720 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74  e content of.  t
19730 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e  hat blob..}..fun
19740 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72  cdef {last_inser
19750 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a  t_rowid()} {} {.
19760 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65    ^The last_inse
19770 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74  rt_rowid() funct
19780 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
19790 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74 68 65  [ROWID].  of the
197a0 20 6c 61 73 74 20 72 6f 77 20 69 6e 73 65 72 74   last row insert
197b0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
197c0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68  se connection wh
197d0 69 63 68 20 69 6e 76 6f 6b 65 64 20 74 68 65 0a  ich invoked the.
197e0 20 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54    function..  ^T
197f0 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  he last_insert_r
19800 6f 77 69 64 28 29 20 53 51 4c 20 66 75 6e 63 74  owid() SQL funct
19810 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72  ion is a wrapper
19820 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73   around the.  [s
19830 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
19840 72 74 5f 72 6f 77 69 64 28 29 5d 20 43 2f 43 2b  rt_rowid()] C/C+
19850 2b 20 69 6e 74 65 72 66 61 63 65 20 66 75 6e 63  + interface func
19860 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  tion..}..funcdef
19870 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20   {length(X)} {} 
19880 7b 0a 20 20 5e 46 6f 72 20 61 20 73 74 72 69 6e  {.  ^For a strin
19890 67 20 76 61 6c 75 65 20 58 2c 20 74 68 65 20 6c  g value X, the l
198a0 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f  ength(X) functio
198b0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
198c0 6d 62 65 72 20 6f 66 20 0a 20 20 63 68 61 72 61  mber of .  chara
198d0 63 74 65 72 73 20 28 6e 6f 74 20 62 79 74 65 73  cters (not bytes
198e0 29 20 69 6e 20 58 20 70 72 69 6f 72 20 74 6f 20  ) in X prior to 
198f0 74 68 65 20 66 69 72 73 74 20 4e 55 4c 20 63 68  the first NUL ch
19900 61 72 61 63 74 65 72 2e 0a 20 20 53 69 6e 63 65  aracter..  Since
19910 20 53 51 4c 69 74 65 20 73 74 72 69 6e 67 73 20   SQLite strings 
19920 64 6f 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20  do not normally 
19930 63 6f 6e 74 61 69 6e 20 4e 55 4c 20 63 68 61 72  contain NUL char
19940 61 63 74 65 72 73 2c 20 74 68 65 20 6c 65 6e 67  acters, the leng
19950 74 68 28 58 29 0a 20 20 66 75 6e 63 74 69 6f 6e  th(X).  function
19960 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 72 65   will usually re
19970 74 75 72 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e  turn the total n
19980 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
19990 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ers in the strin
199a0 67 20 58 2e 0a 20 20 5e 46 6f 72 20 61 20 62 6c  g X..  ^For a bl
199b0 6f 62 20 76 61 6c 75 65 20 58 2c 20 6c 65 6e 67  ob value X, leng
199c0 74 68 28 58 29 20 72 65 74 75 72 6e 73 20 74 68  th(X) returns th
199d0 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
199e0 73 20 69 6e 20 74 68 65 20 62 6c 6f 62 2e 0a 20  s in the blob.. 
199f0 20 5e 49 66 20 58 20 69 73 20 4e 55 4c 4c 20 74   ^If X is NULL t
19a00 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 69 73  hen length(X) is
19a10 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66 20 58 20 69   NULL..  ^If X i
19a20 73 20 6e 75 6d 65 72 69 63 20 74 68 65 6e 20 6c  s numeric then l
19a30 65 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e 73  ength(X) returns
19a40 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 61   the length of a
19a50 20 73 74 72 69 6e 67 0a 20 20 72 65 70 72 65 73   string.  repres
19a60 65 6e 74 61 74 69 6f 6e 20 6f 66 20 58 2e 0a 7d  entation of X..}
19a70 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 28  ..funcdef {like(
19a80 58 2c 59 29 20 6c 69 6b 65 28 58 2c 59 2c 5a 29  X,Y) like(X,Y,Z)
19a90 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69  } {} {.  ^The li
19aa0 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  ke() function is
19ab0 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
19ac0 6e 74 20 74 68 65 0a 20 20 22 3c 62 3e 59 20 4c  nt the.  "<b>Y L
19ad0 49 4b 45 20 58 20 26 23 39 31 3b 45 53 43 41 50  IKE X &#91;ESCAP
19ae0 45 20 5a 26 23 39 33 3b 3c 2f 62 3e 22 20 65 78  E Z&#93;</b>" ex
19af0 70 72 65 73 73 69 6f 6e 2e 20 0a 20 20 5e 49 66  pression. .  ^If
19b00 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53   the optional ES
19b10 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70  CAPE clause is p
19b20 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
19b30 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69  .  like() functi
19b40 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 69  on is invoked wi
19b50 74 68 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e  th three argumen
19b60 74 73 2e 20 20 5e 4f 74 68 65 72 77 69 73 65 2c  ts.  ^Otherwise,
19b70 20 69 74 20 69 73 0a 20 20 69 6e 76 6f 6b 65 64   it is.  invoked
19b80 20 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65   with two argume
19b90 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74  nts only. Note t
19ba0 68 61 74 20 74 68 65 20 58 20 61 6e 64 20 59 20  hat the X and Y 
19bb0 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 0a 20  parameters are. 
19bc0 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68 65   reversed in the
19bd0 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e   like() function
19be0 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65   relative to the
19bf0 20 69 6e 66 69 78 20 5b 4c 49 4b 45 5d 20 6f 70   infix [LIKE] op
19c00 65 72 61 74 6f 72 2e 0a 20 20 5e 54 68 65 20 5b  erator..  ^The [
19c10 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
19c20 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72  unction()] inter
19c30 66 61 63 65 20 63 61 6e 20 62 65 20 75 73 65 64  face can be used
19c40 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68 65   to override the
19c50 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69  .  like() functi
19c60 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79 20 63  on and thereby c
19c70 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72 61 74  hange the operat
19c80 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 5b 4c 49  ion of the.  [LI
19c90 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 20 20 57  KE] operator.  W
19ca0 68 65 6e 20 6f 76 65 72 72 69 64 69 6e 67 20 74  hen overriding t
19cb0 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69  he like() functi
19cc0 6f 6e 2c 20 69 74 20 6d 61 79 20 62 65 20 69 6d  on, it may be im
19cd0 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f 76 65  portant.  to ove
19ce0 72 72 69 64 65 20 62 6f 74 68 20 74 68 65 20 74  rride both the t
19cf0 77 6f 20 61 6e 64 20 74 68 72 65 65 20 61 72 67  wo and three arg
19d00 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f  ument versions o
19d10 66 20 74 68 65 20 6c 69 6b 65 28 29 20 0a 20 20  f the like() .  
19d20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77  function. Otherw
19d30 69 73 65 2c 20 64 69 66 66 65 72 65 6e 74 20 63  ise, different c
19d40 6f 64 65 20 6d 61 79 20 62 65 20 63 61 6c 6c 65  ode may be calle
19d50 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
19d60 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
19d70 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67 20 6f  ator depending o
19d80 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
19d90 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75 73   an ESCAPE claus
19da0 65 20 77 61 73 20 0a 20 20 73 70 65 63 69 66 69  e was .  specifi
19db0 65 64 2e 0a 7d 0a 0a 0a 66 75 6e 63 64 65 66 20  ed..}...funcdef 
19dc0 7b 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29  {likelihood(X,Y)
19dd0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69  } {} {.  ^The li
19de0 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66 75  kelihood(X,Y) fu
19df0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
19e00 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e  rgument X unchan
19e10 67 65 64 2e 0a 20 20 5e 28 54 68 65 20 76 61 6c  ged..  ^(The val
19e20 75 65 20 59 20 69 6e 20 6c 69 6b 65 6c 69 68 6f  ue Y in likeliho
19e30 6f 64 28 58 2c 59 29 20 6d 75 73 74 20 62 65 20  od(X,Y) must be 
19e40 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
19e50 20 63 6f 6e 73 74 61 6e 74 0a 20 20 62 65 74 77   constant.  betw
19e60 65 65 6e 20 30 2e 30 20 61 6e 64 20 31 2e 30 2c  een 0.0 and 1.0,
19e70 20 69 6e 63 6c 75 73 69 76 65 2e 29 5e 0a 20 20   inclusive.)^.  
19e80 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ^The likelihood(
19e90 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  X) function is a
19ea0 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20   no-op that the 
19eb0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20  code generator. 
19ec0 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20   optimizes away 
19ed0 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75  so that it consu
19ee0 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65  mes no CPU cycle
19ef0 73 20 64 75 72 69 6e 67 20 72 75 6e 2d 74 69 6d  s during run-tim
19f00 65 0a 20 20 28 74 68 61 74 20 69 73 2c 20 64 75  e.  (that is, du
19f10 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73  ring calls to [s
19f20 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e  qlite3_step()]).
19f30 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20  .  ^The purpose 
19f40 6f 66 20 74 68 65 20 6c 69 6b 65 6c 69 68 6f 6f  of the likelihoo
19f50 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  d(X,Y) function 
19f60 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20  is to provide a 
19f70 68 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71 75  hint.  to the qu
19f80 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61 74  ery planner that
19f90 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20   the argument X 
19fa0 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 74 68 61  is a boolean tha
19fb0 74 20 69 73 0a 20 20 74 72 75 65 20 77 69 74 68  t is.  true with
19fc0 20 61 20 70 72 6f 62 61 62 69 6c 69 74 79 20 6f   a probability o
19fd0 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20  f approximately 
19fe0 59 2e 0a 20 20 5e 28 54 68 65 20 5b 75 6e 6c 69  Y..  ^(The [unli
19ff0 6b 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69 6f  kely(X)] functio
1a000 6e 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64 20  n is short-hand 
1a010 66 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58  for likelihood(X
1a020 2c 30 2e 30 36 32 35 29 2e 29 5e 0a 20 20 5e 28  ,0.0625).)^.  ^(
1a030 54 68 65 20 5b 6c 69 6b 65 6c 79 28 58 29 5d 20  The [likely(X)] 
1a040 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f 72  function is shor
1a050 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65 6c  t-hand for likel
1a060 69 68 6f 6f 64 28 58 2c 30 2e 39 33 37 35 29 2e  ihood(X,0.9375).
1a070 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  )^.}..funcdef {l
1a080 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a 20  ikely(X)} {} {. 
1a090 20 5e 54 68 65 20 6c 69 6b 65 6c 79 28 58 29 20   ^The likely(X) 
1a0a0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1a0b0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20   the argument X 
1a0c0 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 54 68  unchanged..  ^Th
1a0d0 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63  e likely(X) func
1a0e0 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20  tion is a no-op 
1a0f0 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
1a100 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69  nerator.  optimi
1a110 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68 61 74  zes away so that
1a120 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20   it consumes no 
1a130 43 50 55 20 63 79 63 6c 65 73 20 61 74 0a 20 20  CPU cycles at.  
1a140 72 75 6e 2d 74 69 6d 65 20 28 74 68 61 74 20 69  run-time (that i
1a150 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c 73 20  s, during calls 
1a160 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70  to [sqlite3_step
1a170 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75 72  ()])..  ^The pur
1a180 70 6f 73 65 20 6f 66 20 74 68 65 20 6c 69 6b 65  pose of the like
1a190 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  ly(X) function i
1a1a0 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 68  s to provide a h
1a1b0 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71 75 65  int.  to the que
1a1c0 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61 74 20  ry planner that 
1a1d0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 69  the argument X i
1a1e0 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
1a1f0 65 0a 20 20 74 68 61 74 20 69 73 20 75 73 75 61  e.  that is usua
1a200 6c 6c 79 20 74 72 75 65 2e 20 5e 28 54 68 65 20  lly true. ^(The 
1a210 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69  likely(X) functi
1a220 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  on is equivalent
1a230 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f  .  to [likelihoo
1a240 64 5d 28 58 2c 30 2e 39 33 37 35 29 2e 29 5e 20  d](X,0.9375).)^ 
1a250 53 65 65 20 61 6c 73 6f 3a 20 5b 75 6e 6c 69 6b  See also: [unlik
1a260 65 6c 79 28 58 29 5d 2e 0a 7d 0a 0a 66 75 6e 63  ely(X)]..}..func
1a270 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73  def {load_extens
1a280 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74 65  ion(X) load_exte
1a290 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b  nsion(X,Y)} {} {
1a2a0 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74  .  ^The load_ext
1a2b0 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63  ension(X,Y) func
1a2c0 74 69 6f 6e 20 6c 6f 61 64 73 20 5b 53 51 4c 69  tion loads [SQLi
1a2d0 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 5d 20 6f  te extensions] o
1a2e0 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64  ut of the shared
1a2f0 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20  .  library file 
1a300 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74 68  named X using th
1a310 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e  e entry point Y.
1a320 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
1a330 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
1a340 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61 20  ).  is always a 
1a350 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73 20  NULL.  ^If Y is 
1a360 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65  omitted then the
1a370 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70   default entry p
1a380 6f 69 6e 74 20 6e 61 6d 65 20 69 73 20 75 73 65  oint name is use
1a390 64 2e 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65  d..  ^The load_e
1a3a0 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74  xtension() funct
1a3b0 69 6f 6e 20 72 61 69 73 65 73 20 61 6e 20 65 78  ion raises an ex
1a3c0 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65  ception if the e
1a3d0 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74  xtension fails t
1a3e0 6f 0a 20 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74  o.  load or init
1a3f0 69 61 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79  ialize correctly
1a400 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61  ...  <p>^The loa
1a410 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75  d_extension() fu
1a420 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c  nction will fail
1a430 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f   if the extensio
1a440 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20 0a 20  n attempts to . 
1a450 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74   modify or delet
1a460 65 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  e an SQL functio
1a470 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  n or collating s
1a480 65 71 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20  equence.  ^The. 
1a490 20 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61   extension can a
1a4a0 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73  dd new functions
1a4b0 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
1a4c0 71 75 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e  quences, but can
1a4d0 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20  not.  modify or 
1a4e0 64 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  delete existing 
1a4f0 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
1a500 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1a510 20 62 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65   because.  those
1a520 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f   functions and/o
1a530 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
1a540 65 6e 63 65 73 20 6d 69 67 68 74 20 62 65 20 75  ences might be u
1a550 73 65 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20  sed elsewhere.  
1a560 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  in the currently
1a570 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61   running SQL sta
1a580 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64  tement.  To load
1a590 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68   an extension th
1a5a0 61 74 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20  at.  changes or 
1a5b0 64 65 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e  deletes function
1a5c0 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  s or collating s
1a5d0 65 71 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68  equences, use th
1a5e0 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61  e.  [sqlite3_loa
1a5f0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43  d_extension()] C
1a600 2d 6c 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f  -language API.</
1a610 70 3e 0a 0a 20 20 3c 70 3e 46 6f 72 20 73 65 63  p>..  <p>For sec
1a620 75 72 69 74 79 20 72 65 61 73 6f 6e 73 2c 20 65  urity reasons, e
1a630 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 65 64 20  xtension loaded 
1a640 69 73 20 74 75 72 6e 65 64 20 6f 66 66 20 62 79  is turned off by
1a650 20 64 65 66 61 75 6c 74 20 61 6e 64 20 6d 75 73   default and mus
1a660 74 0a 20 20 62 65 20 65 6e 61 62 6c 65 64 20 62  t.  be enabled b
1a670 79 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74  y a prior call t
1a680 6f 20 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  o [sqlite3_enabl
1a690 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e_load_extension
1a6a0 28 29 5d 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63  ()].</p>.}..func
1a6b0 64 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b  def {lower(X)} {
1a6c0 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72  } {.  ^The lower
1a6d0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1a6e0 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 73  urns a copy of s
1a6f0 74 72 69 6e 67 20 58 20 77 69 74 68 20 61 6c 6c  tring X with all
1a700 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
1a710 73 0a 20 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  s.  converted to
1a720 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20 5e 54   lower case.  ^T
1a730 68 65 20 64 65 66 61 75 6c 74 20 62 75 69 6c 74  he default built
1a740 2d 69 6e 20 6c 6f 77 65 72 28 29 20 66 75 6e 63  -in lower() func
1a750 74 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72  tion works.  for
1a760 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
1a770 73 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63  s only.  To do c
1a780 61 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ase conversions 
1a790 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63  on non-ASCII.  c
1a7a0 68 61 72 61 63 74 65 72 73 2c 20 6c 6f 61 64 20  haracters, load 
1a7b0 74 68 65 20 49 43 55 20 65 78 74 65 6e 73 69 6f  the ICU extensio
1a7c0 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  n..}..funcdef {l
1a7d0 74 72 69 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c  trim(X) ltrim(X,
1a7e0 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1a7f0 6c 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74  ltrim(X,Y) funct
1a800 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
1a810 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72  ring formed by r
1a820 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20  emoving any and 
1a830 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73  all.  characters
1a840 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
1a850 59 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20  Y from the left 
1a860 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66  side of X..  ^If
1a870 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20   the Y argument 
1a880 69 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69  is omitted, ltri
1a890 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61  m(X) removes spa
1a8a0 63 65 73 20 66 72 6f 6d 20 74 68 65 20 6c 65 66  ces from the lef
1a8b0 74 20 73 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d  t side.  of X..}
1a8c0 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58  ..funcdef {max(X
1a8d0 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f  ,Y,...)} {*maxCo
1a8e0 72 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78  reFunc *max {max
1a8f0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1a900 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69  } {.  ^The multi
1a910 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20  -argument max() 
1a920 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1a930 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69   the argument wi
1a940 74 68 20 74 68 65 20 0a 20 20 6d 61 78 69 6d 75  th the .  maximu
1a950 6d 20 76 61 6c 75 65 2c 20 6f 72 20 72 65 74 75  m value, or retu
1a960 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61  rn NULL if any a
1a970 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e  rgument is NULL.
1a980 20 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61   .  ^The multi-a
1a990 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75  rgument max() fu
1a9a0 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20  nction searches 
1a9b0 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72  its arguments fr
1a9c0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
1a9d0 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65  .  for an argume
1a9e0 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  nt that defines 
1a9f0 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
1aa00 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68  tion and uses th
1aa10 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66  at collating.  f
1aa20 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20  unction for all 
1aa30 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f  string compariso
1aa40 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66  ns.  ^If none of
1aa50 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74   the arguments t
1aa60 6f 20 6d 61 78 28 29 0a 20 20 64 65 66 69 6e 65  o max().  define
1aa70 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
1aa80 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ction, then the 
1aa90 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67  BINARY collating
1aaa0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
1aab0 64 2e 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61 74  d..  ^(Note that
1aac0 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73   <b>max()</b> is
1aad0 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69   a simple functi
1aae0 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73  on when.  it has
1aaf0 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d   2 or more argum
1ab00 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74 65  ents but operate
1ab10 73 20 61 73 20 61 6e 0a 20 20 5b 6d 61 78 41 67  s as an.  [maxAg
1ab20 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74  gFunc | aggregat
1ab30 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67  e function] if g
1ab40 69 76 65 6e 20 6f 6e 6c 79 20 61 20 73 69 6e 67  iven only a sing
1ab50 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d  le argument.)^.}
1ab60 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58  ..funcdef {min(X
1ab70 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e 43 6f  ,Y,...)} {*minCo
1ab80 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d 69 6e  reFunc *min {min
1ab90 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1aba0 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69  } {.  ^The multi
1abb0 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20  -argument min() 
1abc0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1abd0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69   the argument wi
1abe0 74 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d 75 6d  th the.  minimum
1abf0 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 6d   value..  ^The m
1ac00 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69  ulti-argument mi
1ac10 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61  n() function sea
1ac20 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65  rches its argume
1ac30 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  nts from left to
1ac40 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20   right.  for an 
1ac50 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65  argument that de
1ac60 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e  fines a collatin
1ac70 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75  g function and u
1ac80 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69  ses that collati
1ac90 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f  ng.  function fo
1aca0 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d  r all string com
1acb0 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e  parisons.  ^If n
1acc0 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d  one of the argum
1acd0 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a 20 20  ents to min().  
1ace0 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69  define a collati
1acf0 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65  ng function, the
1ad00 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c  n the BINARY col
1ad10 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
1ad20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e 6f 74  is used..  ^(Not
1ad30 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c  e that <b>min()<
1ad40 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20  /b> is a simple 
1ad50 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20  function when.  
1ad60 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
1ad70 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f   arguments but o
1ad80 70 65 72 61 74 65 73 20 61 73 20 61 6e 20 0a 20  perates as an . 
1ad90 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20 61   [minAggFunc | a
1ada0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1adb0 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e  n] if given.  on
1adc0 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ly a single argu
1add0 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64  ment.)^.}..funcd
1ade0 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d  ef {nullif(X,Y)}
1adf0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c   {} {.  ^The nul
1ae00 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lif(X,Y) functio
1ae10 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20 66 69  n returns its fi
1ae20 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20  rst argument if 
1ae30 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72  the arguments ar
1ae40 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61 6e  e.  different an
1ae50 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61 72  d NULL if the ar
1ae60 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20  guments are the 
1ae70 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c  same.  ^The null
1ae80 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  if(X,Y) function
1ae90 0a 20 20 73 65 61 72 63 68 65 73 20 69 74 73 20  .  searches its 
1aea0 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c  arguments from l
1aeb0 65 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f 72  eft to right for
1aec0 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
1aed0 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63 6f  t defines a.  co
1aee0 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1aef0 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63   and uses that c
1af00 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1af10 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
1af20 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  .  comparisons. 
1af30 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72 67   ^If neither arg
1af40 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28  ument to nullif(
1af50 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  ) defines a coll
1af60 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20  ating function. 
1af70 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
1af80 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e   is used..}..fun
1af90 63 64 65 66 20 7b 70 72 69 6e 74 66 28 46 4f 52  cdef {printf(FOR
1afa0 4d 41 54 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20  MAT,...)} {} {. 
1afb0 20 5e 28 54 68 65 20 70 72 69 6e 74 66 28 46 4f   ^(The printf(FO
1afc0 52 4d 41 54 2c 2e 2e 2e 29 20 53 51 4c 20 66 75  RMAT,...) SQL fu
1afd0 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b  nction works lik
1afe0 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6d  e the [sqlite3_m
1aff0 70 72 69 6e 74 66 28 29 5d 20 43 2d 6c 61 6e 67  printf()] C-lang
1b000 75 61 67 65 0a 20 20 66 75 6e 63 74 69 6f 6e 20  uage.  function 
1b010 61 6e 64 20 74 68 65 20 70 72 69 6e 74 66 28 29  and the printf()
1b020 20 66 75 6e 63 74 69 6f 6e 20 66 72 6f 6d 20 74   function from t
1b030 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69  he standard C li
1b040 62 72 61 72 79 2e 29 5e 0a 20 20 54 68 65 20 66  brary.)^.  The f
1b050 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 73  irst argument is
1b060 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67   a format string
1b070 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
1b080 68 6f 77 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  how to construct
1b090 20 74 68 65 20 6f 75 74 70 75 74 0a 20 20 73 74   the output.  st
1b0a0 72 69 6e 67 20 75 73 69 6e 67 20 76 61 6c 75 65  ring using value
1b0b0 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 73 75 62  s taken from sub
1b0c0 73 65 71 75 65 6e 74 20 61 72 67 75 6d 65 6e 74  sequent argument
1b0d0 73 2e 20 20 5e 49 66 20 74 68 65 20 46 4f 52 4d  s.  ^If the FORM
1b0e0 41 54 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 20  AT argument is. 
1b0f0 20 6d 69 73 73 69 6e 67 20 6f 72 20 4e 55 4c 4c   missing or NULL
1b100 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
1b110 20 69 73 20 4e 55 4c 4c 2e 20 20 5e 54 68 65 20   is NULL.  ^The 
1b120 25 6e 20 66 6f 72 6d 61 74 20 69 73 20 73 69 6c  %n format is sil
1b130 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 20 61 6e  ently ignored an
1b140 64 0a 20 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  d.  does not con
1b150 73 75 6d 65 20 61 6e 20 61 72 67 75 6d 65 6e 74  sume an argument
1b160 2e 20 20 5e 54 68 65 20 25 70 20 66 6f 72 6d 61  .  ^The %p forma
1b170 74 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  t is an alias fo
1b180 72 20 25 58 2e 20 20 5e 54 68 65 20 25 7a 20 66  r %X.  ^The %z f
1b190 6f 72 6d 61 74 0a 20 20 69 73 20 69 6e 74 65 72  ormat.  is inter
1b1a0 63 68 61 6e 67 65 61 62 6c 65 20 77 69 74 68 20  changeable with 
1b1b0 25 73 2e 20 20 5e 28 49 66 20 74 68 65 72 65 20  %s.  ^(If there 
1b1c0 61 72 65 20 74 6f 6f 20 66 65 77 20 61 72 67 75  are too few argu
1b1d0 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 67  ments in the arg
1b1e0 75 6d 65 6e 74 20 6c 69 73 74 2c 0a 20 20 6d 69  ument list,.  mi
1b1f0 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  ssing arguments 
1b200 61 72 65 20 61 73 73 75 6d 65 64 20 74 6f 20 68  are assumed to h
1b210 61 76 65 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65  ave a NULL value
1b220 2c 20 77 68 69 63 68 20 69 73 20 74 72 61 6e 73  , which is trans
1b230 6c 61 74 65 64 20 69 6e 74 6f 0a 20 20 30 20 6f  lated into.  0 o
1b240 72 20 30 2e 30 20 66 6f 72 20 6e 75 6d 65 72 69  r 0.0 for numeri
1b250 63 20 66 6f 72 6d 61 74 73 20 6f 72 20 61 6e 20  c formats or an 
1b260 65 6d 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72  empty string for
1b270 20 25 73 2e 29 5e 0a 7d 0a 20 20 0a 0a 66 75 6e   %s.)^.}.  ..fun
1b280 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20  cdef {quote(X)} 
1b290 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74  {} {.  ^The quot
1b2a0 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  e(X) function re
1b2b0 74 75 72 6e 73 20 74 68 65 20 74 65 78 74 20 6f  turns the text o
1b2c0 66 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  f an SQL literal
1b2d0 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65 20   which.  is the 
1b2e0 76 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72 67  value of its arg
1b2f0 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66  ument suitable f
1b300 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74  or inclusion int
1b310 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  o an SQL stateme
1b320 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 61  nt..  ^Strings a
1b330 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79  re surrounded by
1b340 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77   single-quotes w
1b350 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69  ith escapes on i
1b360 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20  nterior quotes. 
1b370 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c   as needed.  ^BL
1b380 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64 20  OBs are encoded 
1b390 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c  as hexadecimal l
1b3a0 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72 69  iterals..  ^Stri
1b3b0 6e 67 73 20 77 69 74 68 20 65 6d 62 65 64 64 65  ngs with embedde
1b3c0 64 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73  d NUL characters
1b3d0 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72 65   cannot be repre
1b3e0 73 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e 67  sented as string
1b3f0 0a 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20 53  .  literals in S
1b400 51 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65  QL and hence the
1b410 20 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e 67   returned string
1b420 20 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75 6e   literal is trun
1b430 63 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74 6f  cated prior.  to
1b440 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e 0a   the first NUL..
1b450 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64  }..funcdef {rand
1b460 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  om()} {} {.  ^Th
1b470 65 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74  e random() funct
1b480 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70 73  ion returns a ps
1b490 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65  eudo-random inte
1b4a0 67 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39  ger.  between -9
1b4b0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
1b4c0 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30  08 and +92233720
1b4d0 33 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a  36854775807..}..
1b4e0 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62  funcdef {randomb
1b4f0 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e  lob(N)} {} {.  ^
1b500 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e  The randomblob(N
1b510 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1b520 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62  n an N-byte blob
1b530 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65 75   containing pseu
1b540 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65  do-random.  byte
1b550 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73 73  s. ^If N is less
1b560 20 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20 31   than 1 then a 1
1b570 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f  -byte random blo
1b580 62 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a  b is returned...
1b590 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c    <p>Hint:  appl
1b5a0 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e  ications can gen
1b5b0 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75  erate globally u
1b5c0 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72  nique identifier
1b5d0 73 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20 66  s.  using this f
1b5e0 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72  unction together
1b5f0 20 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e   with [hex()] an
1b600 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d  d/or.  [lower()]
1b610 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a   like this:</p>.
1b620 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  .  <blockquote>.
1b630 20 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62    hex(randomblob
1b640 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20  (16))<br></br>. 
1b650 20 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f   lower(hex(rando
1b660 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f  mblob(16))).  </
1b670 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66  blockquote>.}..f
1b680 75 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28  uncdef {replace(
1b690 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e  X,Y,Z)} {} {.  ^
1b6a0 54 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59 2c  The replace(X,Y,
1b6b0 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Z) function retu
1b6c0 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
1b6d0 6d 65 64 20 62 79 20 73 75 62 73 74 69 74 75 74  med by substitut
1b6e0 69 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20 66  ing.  string Z f
1b6f0 6f 72 20 65 76 65 72 79 20 6f 63 63 75 72 72 65  or every occurre
1b700 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20  nce of string Y 
1b710 69 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e 54  in string X.  ^T
1b720 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f  he [BINARY].  co
1b730 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1b740 20 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d   is used for com
1b750 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59  parisons.  ^If Y
1b760 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20 73   is an empty.  s
1b770 74 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75 72  tring then retur
1b780 6e 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20 20  n X unchanged.  
1b790 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69  ^If Z is not ini
1b7a0 74 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e  tially.  a strin
1b7b0 67 2c 20 69 74 20 69 73 20 63 61 73 74 20 74 6f  g, it is cast to
1b7c0 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20   a UTF-8 string 
1b7d0 70 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73 73  prior to process
1b7e0 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ing..}..funcdef 
1b7f0 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64 28  {round(X) round(
1b800 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1b810 65 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e  e round(X,Y) fun
1b820 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1b830 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20  floating-point. 
1b840 20 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65 64   value X rounded
1b850 20 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f 20   to Y digits to 
1b860 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65  the right of the
1b870 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a   decimal point..
1b880 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
1b890 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
1b8a0 20 69 74 20 69 73 20 61 73 73 75 6d 65 64 20 74   it is assumed t
1b8b0 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64  o be 0..}..funcd
1b8c0 65 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74 72  ef {rtrim(X) rtr
1b8d0 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  im(X,Y)} {} {.  
1b8e0 5e 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29 20  ^The rtrim(X,Y) 
1b8f0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1b900 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
1b910 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
1b920 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61   and all.  chara
1b930 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61  cters that appea
1b940 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20  r in Y from the 
1b950 72 69 67 68 74 20 73 69 64 65 20 6f 66 20 58 2e  right side of X.
1b960 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
1b970 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
1b980 2c 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f 76  , rtrim(X) remov
1b990 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74  es spaces from t
1b9a0 68 65 20 72 69 67 68 74 0a 20 20 73 69 64 65 20  he right.  side 
1b9b0 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
1b9c0 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b 7d   {soundex(X)} {}
1b9d0 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64 65   {.  ^The sounde
1b9e0 78 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  x(X) function re
1b9f0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
1ba00 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e 64  hat is the sound
1ba10 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20 6f  ex encoding .  o
1ba20 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a  f the string X..
1ba30 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22 3f    ^The string "?
1ba40 30 30 30 22 20 69 73 20 72 65 74 75 72 6e 65 64  000" is returned
1ba50 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
1ba60 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74   is NULL or cont
1ba70 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49 20  ains.  no ASCII 
1ba80 61 6c 70 68 61 62 65 74 69 63 20 63 68 61 72 61  alphabetic chara
1ba90 63 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73 20  cters..  ^(This 
1baa0 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74  function is omit
1bab0 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20  ted from SQLite 
1bac0 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49 74  by default..  It
1bad0 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
1bae0 6c 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49 54  le if the [SQLIT
1baf0 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70 69  E_SOUNDEX] compi
1bb00 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20  le-time option. 
1bb10 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51   is used when SQ
1bb20 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29 5e  Lite is built.)^
1bb30 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c  .}..funcdef {sql
1bb40 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
1bb50 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20  n_get(N)} {} {. 
1bb60 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d   ^The sqlite_com
1bb70 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29  pileoption_get()
1bb80 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
1bb90 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
1bba0 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  d the.  [sqlite3
1bbb0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
1bbc0 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63  et()] C/C++ func
1bbd0 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72 6f  tion..  ^This ro
1bbe0 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68  utine returns th
1bbf0 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74  e N-th compile-t
1bc00 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20  ime option used 
1bc10 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 0a  to build SQLite.
1bc20 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20 69    or NULL if N i
1bc30 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 20  s out of range. 
1bc40 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b 63   See also the [c
1bc50 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70  ompile_options p
1bc60 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64  ragma]..}..funcd
1bc70 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69  ef {sqlite_compi
1bc80 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29  leoption_used(X)
1bc90 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
1bca0 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
1bcb0 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66 75  on_used() SQL fu
1bcc0 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
1bcd0 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20  per around the. 
1bce0 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c   [sqlite3_compil
1bcf0 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d 20  eoption_used()] 
1bd00 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a  C/C++ function..
1bd10 20 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67 75    ^When the argu
1bd20 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74 65  ment X to sqlite
1bd30 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
1bd40 73 65 64 28 58 29 20 69 73 20 61 20 73 74 72 69  sed(X) is a stri
1bd50 6e 67 20 77 68 69 63 68 0a 20 20 69 73 20 74 68  ng which.  is th
1bd60 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d 70  e name of a comp
1bd70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c  ile-time option,
1bd80 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65   this routine re
1bd90 74 75 72 6e 73 20 74 72 75 65 20 28 31 29 20 6f  turns true (1) o
1bda0 72 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64 65  r.  false (0) de
1bdb0 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
1bdc0 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 6f  er or not that o
1bdd0 70 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20 64  ption was used d
1bde0 75 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69 6c  uring the.  buil
1bdf0 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  d..}..funcdef {s
1be00 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
1be10 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
1be20 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
1be30 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1be40 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  ns a string that
1be50 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 0a   identifies the.
1be60 20 20 73 70 65 63 69 66 69 63 20 76 65 72 73 69    specific versi
1be70 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  on of the source
1be80 20 63 6f 64 65 20 74 68 61 74 20 77 61 73 20 75   code that was u
1be90 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74 68 65  sed to build the
1bea0 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61 72   SQLite.  librar
1beb0 79 2e 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20  y.  ^The string 
1bec0 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
1bed0 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 62  te_source_id() b
1bee0 65 67 69 6e 73 20 77 69 74 68 0a 20 20 74 68 65  egins with.  the
1bef0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74   date and time t
1bf00 68 61 74 20 74 68 65 20 73 6f 75 72 63 65 20 63  hat the source c
1bf10 6f 64 65 20 77 61 73 20 63 68 65 63 6b 65 64 20  ode was checked 
1bf20 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c 6c 6f 77  in and is follow
1bf30 73 20 62 79 0a 20 20 61 6e 20 53 48 41 31 20 68  s by.  an SHA1 h
1bf40 61 73 68 20 74 68 61 74 20 75 6e 69 71 75 65 6c  ash that uniquel
1bf50 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  y identifies the
1bf60 20 73 6f 75 72 63 65 20 74 72 65 65 2e 20 20 5e   source tree.  ^
1bf70 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
1bf80 0a 20 20 61 6e 20 53 51 4c 20 77 72 61 70 70 65  .  an SQL wrappe
1bf90 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
1bfa0 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
1bfb0 5d 20 43 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d  ] C interface..}
1bfc0 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74  ..funcdef {sqlit
1bfd0 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d 20  e_version()} {} 
1bfe0 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
1bff0 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74 69  version() functi
1c000 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 76  on returns the v
1c010 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f  ersion string fo
1c020 72 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c  r the SQLite.  l
1c030 69 62 72 61 72 79 20 74 68 61 74 20 69 73 20 72  ibrary that is r
1c040 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20 66  unning.  ^This f
1c050 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20 53 51  unction is an SQ
1c060 4c 0a 20 20 77 72 61 70 70 65 72 20 61 72 6f 75  L.  wrapper arou
1c070 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nd the [sqlite3_
1c080 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d 20 43 2d  libversion()] C-
1c090 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
1c0a0 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28 58 2c  ncdef {substr(X,
1c0b0 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59 29  Y,Z) substr(X,Y)
1c0c0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75  } {} {.  ^The su
1c0d0 62 73 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e 63  bstr(X,Y,Z) func
1c0e0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1c0f0 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75  ubstring of inpu
1c100 74 20 73 74 72 69 6e 67 20 58 20 74 68 61 74 20  t string X that 
1c110 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74 68  begins.  with th
1c120 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72  e Y-th character
1c130 20 61 6e 64 20 77 68 69 63 68 20 69 73 20 5a 20   and which is Z 
1c140 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
1c150 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69 74  .  ^If Z is omit
1c160 74 65 64 20 74 68 65 6e 20 73 75 62 73 74 72 28  ted then substr(
1c170 58 2c 59 29 20 72 65 74 75 72 6e 73 20 61 6c 6c  X,Y) returns all
1c180 20 63 68 61 72 61 63 74 65 72 73 20 74 68 72 6f   characters thro
1c190 75 67 68 20 74 68 65 20 65 6e 64 0a 20 20 6f 66  ugh the end.  of
1c1a0 20 74 68 65 20 73 74 72 69 6e 67 20 58 20 62 65   the string X be
1c1b0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68 65  ginning with the
1c1c0 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c 65   Y-th..  ^The le
1c1d0 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74 65  ft-most characte
1c1e0 72 20 6f 66 20 58 20 69 73 20 6e 75 6d 62 65 72  r of X is number
1c1f0 20 31 2e 20 20 5e 49 66 20 59 20 69 73 20 6e 65   1.  ^If Y is ne
1c200 67 61 74 69 76 65 0a 20 20 74 68 65 6e 20 74 68  gative.  then th
1c210 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65  e first characte
1c220 72 20 6f 66 20 74 68 65 20 73 75 62 73 74 72 69  r of the substri
1c230 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63  ng is found by c
1c240 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65  ounting from the
1c250 0a 20 20 72 69 67 68 74 20 72 61 74 68 65 72 20  .  right rather 
1c260 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20  than the left.  
1c270 5e 49 66 20 5a 20 69 73 20 6e 65 67 61 74 69 76  ^If Z is negativ
1c280 65 20 74 68 65 6e 0a 20 20 74 68 65 20 61 62 73  e then.  the abs
1c290 28 5a 29 20 63 68 61 72 61 63 74 65 72 73 20 70  (Z) characters p
1c2a0 72 65 63 65 64 69 6e 67 20 74 68 65 20 59 2d 74  receding the Y-t
1c2b0 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20  h character are 
1c2c0 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66 20  returned..  ^If 
1c2d0 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68  X is a string th
1c2e0 65 6e 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  en characters in
1c2f0 64 69 63 65 73 20 72 65 66 65 72 20 74 6f 20 61  dices refer to a
1c300 63 74 75 61 6c 20 55 54 46 2d 38 20 0a 20 20 63  ctual UTF-8 .  c
1c310 68 61 72 61 63 74 65 72 73 2e 20 20 5e 49 66 20  haracters.  ^If 
1c320 58 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65 6e  X is a BLOB then
1c330 20 74 68 65 20 69 6e 64 69 63 65 73 20 72 65 66   the indices ref
1c340 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a  er to bytes..}..
1c350 66 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f 63  funcdef {total_c
1c360 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20  hanges()} {} {. 
1c370 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68 61 6e   ^The total_chan
1c380 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ges() function r
1c390 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
1c3a0 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65 73  r of row changes
1c3b0 0a 20 20 63 61 75 73 65 64 20 62 79 20 49 4e 53  .  caused by INS
1c3c0 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
1c3d0 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d 65 6e  ELETE.  statemen
1c3e0 74 73 20 73 69 6e 63 65 20 74 68 65 20 63 75 72  ts since the cur
1c3f0 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f  rent database co
1c400 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70 65  nnection was ope
1c410 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20 66 75 6e  ned..  ^This fun
1c420 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
1c430 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
1c440 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
1c450 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20  nges()].  C/C++ 
1c460 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
1c470 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20 74  ncdef {trim(X) t
1c480 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
1c490 20 5e 54 68 65 20 74 72 69 6d 28 58 2c 59 29 20   ^The trim(X,Y) 
1c4a0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1c4b0 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
1c4c0 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
1c4d0 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61   and all.  chara
1c4e0 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61  cters that appea
1c4f0 72 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74 68  r in Y from both
1c500 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e 49   ends of X..  ^I
1c510 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74  f the Y argument
1c520 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 72 69   is omitted, tri
1c530 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61  m(X) removes spa
1c540 63 65 73 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e  ces from both en
1c550 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  ds of X..}..func
1c560 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d 20  def {typeof(X)} 
1c570 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79 70 65  {} {.  ^The type
1c580 6f 66 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  of(X) function r
1c590 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
1c5a0 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
1c5b0 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f 66  he [datatype] of
1c5c0 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  .  the expressio
1c5d0 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69 6e  n X: "null", "in
1c5e0 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c 20  teger", "real", 
1c5f0 22 74 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f 62  "text", or "blob
1c600 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75  "..}..funcdef {u
1c610 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b  nlikely(X)} {} {
1c620 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79  .  ^The unlikely
1c630 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1c640 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e  urns the argumen
1c650 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20  t X unchanged.. 
1c660 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58   ^The unlikely(X
1c670 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  ) function is a 
1c680 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63  no-op that the c
1c690 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20  ode generator.  
1c6a0 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73  optimizes away s
1c6b0 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d  o that it consum
1c6c0 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73  es no CPU cycles
1c6d0 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20 28   at.  run-time (
1c6e0 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20  that is, during 
1c6f0 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65  calls to [sqlite
1c700 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54  3_step()])..  ^T
1c710 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68  he purpose of th
1c720 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75  e unlikely(X) fu
1c730 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f  nction is to pro
1c740 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f  vide a hint.  to
1c750 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
1c760 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75  er that the argu
1c770 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c  ment X is a bool
1c780 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74  ean value.  that
1c790 20 69 73 20 75 73 75 61 6c 6c 79 20 6e 6f 74 20   is usually not 
1c7a0 74 72 75 65 2e 20 5e 28 54 68 65 20 75 6e 6c 69  true. ^(The unli
1c7b0 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
1c7c0 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20   is equivalent. 
1c7d0 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d   to [likelihood]
1c7e0 28 58 2c 20 30 2e 30 36 32 35 29 2e 29 5e 0a 7d  (X, 0.0625).)^.}
1c7f0 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 69 63 6f  ..funcdef {unico
1c800 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  de(X)} {} {.  ^T
1c810 68 65 20 75 6e 69 63 6f 64 65 28 58 29 20 66 75  he unicode(X) fu
1c820 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1c830 68 65 20 6e 75 6d 65 72 69 63 20 75 6e 69 63 6f  he numeric unico
1c840 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 63 6f  de code point co
1c850 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0a 20  rresponding to. 
1c860 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
1c870 63 74 65 72 20 6f 66 20 74 68 65 20 73 74 72 69  cter of the stri
1c880 6e 67 20 58 2e 20 20 49 66 20 74 68 65 20 61 72  ng X.  If the ar
1c890 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69 63 6f 64  gument to unicod
1c8a0 65 28 58 29 20 69 73 20 6e 6f 74 20 61 20 73 74  e(X) is not a st
1c8b0 72 69 6e 67 0a 20 20 74 68 65 6e 20 74 68 65 20  ring.  then the 
1c8c0 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65 66 69  result is undefi
1c8d0 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ned..}..funcdef 
1c8e0 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a  {upper(X)} {} {.
1c8f0 20 20 5e 54 68 65 20 75 70 70 65 72 28 58 29 20    ^The upper(X) 
1c900 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1c910 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74   a copy of input
1c920 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77 68 69   string X in whi
1c930 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d  ch all .  lower-
1c940 63 61 73 65 20 41 53 43 49 49 20 63 68 61 72 61  case ASCII chara
1c950 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76 65 72  cters are conver
1c960 74 65 64 20 74 6f 20 74 68 65 69 72 20 75 70 70  ted to their upp
1c970 65 72 2d 63 61 73 65 20 65 71 75 69 76 61 6c 65  er-case equivale
1c980 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  nt..}..funcdef {
1c990 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20  zeroblob(N)} {} 
1c9a0 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c 6f  {.  ^The zeroblo
1c9b0 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  b(N) function re
1c9c0 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f 6e  turns a BLOB con
1c9d0 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79 74  sisting of N byt
1c9e0 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20 53 51  es of 0x00..  SQ
1c9f0 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74 68 65  Lite manages the
1ca00 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72  se zeroblobs ver
1ca10 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20 20  y efficiently.  
1ca20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65  Zeroblobs can be
1ca30 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65 72   used to.  reser
1ca40 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20 42  ve space for a B
1ca50 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74 65  LOB that is late
1ca60 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67 20  r written using 
1ca70 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  .  [sqlite3_blob
1ca80 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d  _open() | increm
1ca90 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e  ental BLOB I/O].
1caa0 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66 75 6e  .  ^This SQL fun
1cab0 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65  ction is impleme
1cac0 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  nted using the [
1cad0 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a  sqlite3_result_z
1cae0 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75  eroblob()].  rou
1caf0 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43 2f  tine from the C/
1cb00 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d  C++ interface..}
1cb10 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e  .</tcl>.</table>
1cb20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
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 23 23 23 23 23 23 23 23  ################
1cb60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb70 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
1cb80 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75  Date And Time Fu
1cb90 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e  nctions} datefun
1cba0 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d 0a 68 64  c {*datefunc}.hd
1cbb0 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65 28  _keywords {date(
1cbc0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20  ) SQL function} 
1cbd0 7b 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63  {time() SQL func
1cbe0 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64  tion}.hd_keyword
1cbf0 73 20 7b 64 61 74 65 74 69 6d 65 28 29 20 53 51  s {datetime() SQ
1cc00 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c  L function} {jul
1cc10 69 61 6e 64 61 79 28 29 20 53 51 4c 20 66 75 6e  ianday() SQL fun
1cc20 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72  ction}.hd_keywor
1cc30 64 73 20 7b 73 74 72 66 74 69 6d 65 28 29 20 53  ds {strftime() S
1cc40 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74  QL function}.</t
1cc50 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20  cl>..<p>.SQLite 
1cc60 73 75 70 70 6f 72 74 73 20 66 69 76 65 20 64 61  supports five da
1cc70 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1cc80 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73  tions as follows
1cc90 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e  :.</p>..<p>.<ol>
1cca0 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28  .<li> ^(<b>date(
1ccb0 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
1ccc0 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
1ccd0 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
1cce0 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
1ccf0 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f  li> ^(<b>time(</
1cd00 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
1cd10 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
1cd20 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
1cd30 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
1cd40 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65 28  > ^(<b>datetime(
1cd50 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
1cd60 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
1cd70 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
1cd80 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
1cd90 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64  li> ^(<b>juliand
1cda0 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  ay(</b><i>timest
1cdb0 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1cdc0 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1cdd0 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1cde0 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66  >.<li> ^(<b>strf
1cdf0 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d  time(</b><i>form
1ce00 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c 20  at, timestring, 
1ce10 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
1ce20 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
1ce30 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c  /b>)^ </li>.</ol
1ce40 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65  >..<p>.^All five
1ce50 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
1ce60 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20  unctions take a 
1ce70 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61  time string as a
1ce80 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68  n argument. .^Th
1ce90 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 69 73  e time string is
1cea0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72   followed by zer
1ceb0 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69  o or more modifi
1cec0 65 72 73 2e 20 0a 5e 54 68 65 20 73 74 72 66 74  ers. .^The strft
1ced0 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61  ime() function a
1cee0 6c 73 6f 20 74 61 6b 65 73 20 61 20 66 6f 72 6d  lso takes a form
1cef0 61 74 20 73 74 72 69 6e 67 20 61 73 20 69 74 73  at string as its
1cf00 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
1cf10 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64  .</p>..<p>.The d
1cf20 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
1cf30 63 74 69 6f 6e 73 20 75 73 65 20 61 20 73 75 62  ctions use a sub
1cf40 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65  set of.[http://e
1cf50 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1cf60 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20  wiki/ISO_8601 | 
1cf70 49 53 30 2d 38 36 30 31 5d 20 64 61 74 65 20 61  IS0-8601] date a
1cf80 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e  nd time.formats.
1cf90 0a 5e 54 68 65 20 64 61 74 65 28 29 20 66 75 6e  .^The date() fun
1cfa0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1cfb0 65 20 64 61 74 65 20 69 6e 20 74 68 69 73 20 66  e date in this f
1cfc0 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44  ormat: YYYY-MM-D
1cfd0 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28 29 20  D. .^The time() 
1cfe0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1cff0 20 74 68 65 20 74 69 6d 65 20 61 73 20 48 48 3a   the time as HH:
1d000 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61 74  MM:SS. .^The dat
1d010 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  etime() function
1d020 20 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d   returns "YYYY-M
1d030 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20  M-DD HH:MM:SS". 
1d040 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64 61 79  .^(The julianday
1d050 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1d060 72 6e 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f  rns the .[http:/
1d070 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1d080 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61  g/wiki/Julian_da
1d090 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20  y | Julian day] 
1d0a0 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20  - the.number of 
1d0b0 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20  days since noon 
1d0c0 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20  in Greenwich on 
1d0d0 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31  November 24, 471
1d0e0 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f  4 B.C. .([http:/
1d0f0 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1d100 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63  g/wiki/Proleptic
1d110 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e  _Gregorian_calen
1d120 64 61 72 20 7c 20 50 72 6f 6c 65 70 74 69 63 20  dar | Proleptic 
1d130 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64  Gregorian calend
1d140 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72  ar]).)^.^The str
1d150 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65 20  ftime() routine 
1d160 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65  returns the date
1d170 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f 72   formatted accor
1d180 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f 72  ding to .the for
1d190 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65 63 69  mat string speci
1d1a0 66 69 65 64 20 61 73 20 74 68 65 20 66 69 72 73  fied as the firs
1d1b0 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65  t argument..^The
1d1c0 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73   format string s
1d1d0 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74  upports the most
1d1e0 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75   common substitu
1d1f0 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74  tions found in t
1d200 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e  he .[http://open
1d210 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65  group.org/online
1d220 70 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78  pubs/007908799/x
1d230 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c  sh/strftime.html
1d240 20 7c 20 73 74 72 66 74 69 6d 65 28 29 20 66 75   | strftime() fu
1d250 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65  nction].from the
1d260 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72   standard C libr
1d270 61 72 79 20 70 6c 75 73 20 74 77 6f 20 6e 65 77  ary plus two new
1d280 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2c 20   substitutions, 
1d290 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65  %f and %J..^(The
1d2a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20   following is a 
1d2b0 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f 66  complete list of
1d2c0 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d 65 28   valid strftime(
1d2d0 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 3a  ) substitutions:
1d2e0 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1d2f0 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  te>.<table borde
1d300 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e  r="0" cellpaddin
1d310 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e  g="0" cellspacin
1d320 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c  g="0">.<tr><td><
1d330 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e 3c 74  td width="10"><t
1d340 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64  d></tr>..<tr><td
1d350 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61  > %d <td><td> da
1d360 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c  y of month: 00.<
1d370 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c  tr><td> %f <td><
1d380 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20 73  td> fractional s
1d390 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c  econds: SS.SSS.<
1d3a0 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c  tr><td> %H <td><
1d3b0 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34 20  td> hour: 00-24 
1d3c0 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64  .<tr><td> %j <td
1d3d0 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79 65 61  ><td> day of yea
1d3e0 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c  r: 001-366.<tr><
1d3f0 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20  td> %J <td><td> 
1d400 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
1d410 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74  r.<tr><td> %m <t
1d420 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31  d><td> month: 01
1d430 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20  -12.<tr><td> %M 
1d440 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a  <td><td> minute:
1d450 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20   00-59.<tr><td> 
1d460 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f  %s <td><td> seco
1d470 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2d 30  nds since 1970-0
1d480 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53  1-01.<tr><td> %S
1d490 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64   <td><td> second
1d4a0 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64  s: 00-59.<tr><td
1d4b0 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61  > %w <td><td> da
1d4c0 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20 77 69  y of week 0-6 wi
1d4d0 74 68 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72  th Sunday==0.<tr
1d4e0 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64  ><td> %W <td><td
1d4f0 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72 3a 20  > week of year: 
1d500 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25  00-53.<tr><td> %
1d510 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a  Y <td><td> year:
1d520 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c   0000-9999.<tr><
1d530 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20  td> %% <td><td> 
1d540 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  %.</table>.</blo
1d550 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a  ckquote>)^..<p>.
1d560 5e 28 4e 6f 74 69 63 65 20 74 68 61 74 20 61 6c  ^(Notice that al
1d570 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61 6e 64  l other date and
1d580 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
1d590 63 61 6e 20 62 65 20 65 78 70 72 65 73 73 65 64  can be expressed
1d5a0 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73 74 72  .in terms of str
1d5b0 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c  ftime():.</p>..<
1d5c0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
1d5d0 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65  le border="0" ce
1d5e0 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65  llpadding="0" ce
1d5f0 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c  llspacing="0">.<
1d600 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69  tr><td><b>Functi
1d610 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d  on</b><td width=
1d620 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69  "30"><td><b>Equi
1d630 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d 65 28  valent strftime(
1d640 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20  )</b>.<tr><td>  
1d650 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20 20 20   date(...)      
1d660 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
1d670 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e  me('%Y-%m-%d', .
1d680 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74  ..).<tr><td>   t
1d690 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74  ime(...)      <t
1d6a0 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
1d6b0 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e  ('%H:%M:%S', ...
1d6c0 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74  ).<tr><td>   dat
1d6d0 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e  etime(...)  <td>
1d6e0 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
1d6f0 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25  %Y-%m-%d %H:%M:%
1d700 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64  S', ...).<tr><td
1d710 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e  >   julianday(..
1d720 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72  .) <td><td>  str
1d730 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29  ftime('%J', ...)
1d740 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
1d750 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54  kquote>)^..<p>.T
1d760 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20  he only reasons 
1d770 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20 66 75  for providing fu
1d780 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20 74 68  nctions other th
1d790 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20 69 73  an strftime() is
1d7a0 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65  .for convenience
1d7b0 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63 69 65   and for efficie
1d7c0 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54  ncy..</p>..<h3>T
1d7d0 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e  ime Strings</h3>
1d7e0 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73 74  ..<p>^(A time st
1d7f0 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e 20 61  ring can be in a
1d800 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ny of the follow
1d810 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e  ing formats:</p>
1d820 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  ..<ol>.<li> <i>Y
1d830 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c  YYY-MM-DD</i>.<l
1d840 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1d850 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20   HH:MM</i>.<li> 
1d860 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  <i>YYYY-MM-DD HH
1d870 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
1d880 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  <i>YYYY-MM-DD HH
1d890 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
1d8a0 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1d8b0 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e  D</i><b>T</b><i>
1d8c0 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  HH:MM</i>.<li> <
1d8d0 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
1d8e0 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d  <b>T</b><i>HH:MM
1d8f0 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :SS</i>.<li> <i>
1d900 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
1d910 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53  >T</b><i>HH:MM:S
1d920 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  S.SSS</i>.<li> <
1d930 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  i>HH:MM</i>.<li>
1d940 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e   <i>HH:MM:SS</i>
1d950 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53  .<li> <i>HH:MM:S
1d960 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  S.SSS</i>.<li> <
1d970 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c  b>now</b>.<li> <
1d980 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f 69 3e  i>DDDDDDDDDD</i>
1d990 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49  .</ol>)^..<p>.^I
1d9a0 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f  n formats 5 thro
1d9b0 75 67 68 20 37 2c 20 74 68 65 20 22 54 22 20 69  ugh 7, the "T" i
1d9c0 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72  s a literal char
1d9d0 61 63 74 65 72 20 73 65 70 61 72 61 74 69 6e 67  acter separating
1d9e0 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20 74   .the date and t
1d9f0 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75  he time, as requ
1da00 69 72 65 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f  ired by .[http:/
1da10 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f  /www.w3c.org/TR/
1da20 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65 20 7c 20  NOTE-datetime | 
1da30 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72  ISO-8601]. .^For
1da40 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68 20 31  mats 8 through 1
1da50 30 20 74 68 61 74 20 73 70 65 63 69 66 79 20 6f  0 that specify o
1da60 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d  nly a time assum
1da70 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30  e a date of .200
1da80 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20  0-01-01. Format 
1da90 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27  11, the string '
1daa0 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74  now', is convert
1dab0 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72  ed into the .cur
1dac0 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69  rent date and ti
1dad0 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66  me as obtained f
1dae0 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74  rom the xCurrent
1daf0 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74  Time method.of t
1db00 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d  he [sqlite3_vfs]
1db10 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a   object in use..
1db20 5e 54 68 65 20 27 6e 6f 77 27 20 61 72 67 75 6d  ^The 'now' argum
1db30 65 6e 74 20 74 6f 20 64 61 74 65 20 61 6e 64 20  ent to date and 
1db40 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  time functions a
1db50 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 65 78  lways returns ex
1db60 61 63 74 6c 79 20 74 68 65 0a 73 61 6d 65 20 76  actly the.same v
1db70 61 6c 75 65 20 66 6f 72 20 6d 75 6c 74 69 70 6c  alue for multipl
1db80 65 20 69 6e 76 6f 63 61 74 69 6f 6e 73 20 77 69  e invocations wi
1db90 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 5b 73  thin the same [s
1dba0 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20 63  qlite3_step()] c
1dbb0 61 6c 6c 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e  all..^[http://en
1dbc0 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1dbd0 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f  iki/Coordinated_
1dbe0 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c  Universal_Time |
1dbf0 20 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64   Universal Coord
1dc00 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54 43  inated Time (UTC
1dc10 29 5d 20 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f  )] is used. .^Fo
1dc20 72 6d 61 74 20 31 32 20 69 73 20 74 68 65 20 0a  rmat 12 is the .
1dc30 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1dc40 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75  edia.org/wiki/Ju
1dc50 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61  lian_day | Julia
1dc60 6e 20 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78  n day number].ex
1dc70 70 72 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f  pressed as a flo
1dc80 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
1dc90 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72  e..</p>..<p>.For
1dca0 6d 61 74 73 20 32 20 74 68 72 6f 75 67 68 20 31  mats 2 through 1
1dcb0 30 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61  0 may be optiona
1dcc0 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  lly followed by 
1dcd0 61 20 74 69 6d 65 7a 6f 6e 65 20 69 6e 64 69 63  a timezone indic
1dce0 61 74 6f 72 20 6f 66 20 74 68 65 20 66 6f 72 6d  ator of the form
1dcf0 0a 22 3c 69 3e 26 23 39 31 3b 2b 2d 26 23 39 33  ."<i>&#91;+-&#93
1dd00 3b 48 48 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a  ;HH:MM</i>" or j
1dd10 75 73 74 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20  ust "<i>Z</i>". 
1dd20 20 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   The date and ti
1dd30 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65  me functions use
1dd40 20 55 54 43 20 6f 72 20 22 7a 75 6c 75 22 0a 74   UTC or "zulu".t
1dd50 69 6d 65 20 69 6e 74 65 72 6e 61 6c 6c 79 2c 20  ime internally, 
1dd60 61 6e 64 20 73 6f 20 74 68 65 20 22 5a 22 20 73  and so the "Z" s
1dd70 75 66 66 69 78 20 69 73 20 61 20 6e 6f 2d 6f 70  uffix is a no-op
1dd80 2e 20 20 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20  .  Any non-zero 
1dd90 22 48 48 3a 4d 4d 22 20 73 75 66 66 69 78 20 69  "HH:MM" suffix i
1dda0 73 0a 73 75 62 74 72 61 63 74 65 64 20 66 72 6f  s.subtracted fro
1ddb0 6d 20 74 68 65 20 69 6e 64 69 63 61 74 65 64 20  m the indicated 
1ddc0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 69 6e  date and time in
1ddd0 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74   order to comput
1dde0 65 20 7a 75 6c 75 20 74 69 6d 65 2e 0a 46 6f 72  e zulu time..For
1ddf0 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66   example, all of
1de00 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
1de10 69 6d 65 20 73 74 72 69 6e 67 73 20 61 72 65 20  ime strings are 
1de20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e  equivalent:.</p>
1de30 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32  ..<blockquote>.2
1de40 30 31 33 2d 31 30 2d 30 37 20 30 38 3a 32 33 3a  013-10-07 08:23:
1de50 31 39 2e 31 32 30 3c 62 72 3e 0a 32 30 31 33 2d  19.120<br>.2013-
1de60 31 30 2d 30 37 54 30 38 3a 32 33 3a 31 39 2e 31  10-07T08:23:19.1
1de70 32 30 5a 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d  20Z<br>.2013-10-
1de80 30 37 20 30 34 3a 32 33 3a 31 39 2e 31 32 30 2d  07 04:23:19.120-
1de90 30 34 3a 30 30 3c 62 72 3e 0a 32 34 35 36 35 37  04:00<br>.245657
1dea0 32 2e 38 34 39 35 32 36 38 35 0a 3c 2f 62 6c 6f  2.84952685.</blo
1deb0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28  ckquote>..<p>.^(
1dec0 49 6e 20 66 6f 72 6d 61 74 73 20 34 2c 20 37 2c  In formats 4, 7,
1ded0 20 61 6e 64 20 31 30 2c 20 74 68 65 20 66 72 61   and 10, the fra
1dee0 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 20  ctional seconds 
1def0 76 61 6c 75 65 20 53 53 2e 53 53 53 20 63 61 6e  value SS.SSS can
1df00 20 68 61 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72   have.one or mor
1df10 65 20 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 69  e digits followi
1df20 6e 67 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70  ng the decimal p
1df30 6f 69 6e 74 2e 20 20 45 78 61 63 74 6c 79 20 74  oint.  Exactly t
1df40 68 72 65 65 20 64 69 67 69 74 73 20 61 72 65 0a  hree digits are.
1df50 73 68 6f 77 6e 20 69 6e 20 74 68 65 20 65 78 61  shown in the exa
1df60 6d 70 6c 65 73 20 62 65 63 61 75 73 65 20 6f 6e  mples because on
1df70 6c 79 20 74 68 65 20 66 69 72 73 74 20 74 68 72  ly the first thr
1df80 65 65 20 64 69 67 69 74 73 20 61 72 65 20 73 69  ee digits are si
1df90 67 6e 69 66 69 63 61 6e 74 0a 74 6f 20 74 68 65  gnificant.to the
1dfa0 20 72 65 73 75 6c 74 2c 20 62 75 74 20 74 68 65   result, but the
1dfb0 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63 61   input string ca
1dfc0 6e 20 68 61 76 65 20 66 65 77 65 72 20 6f 72 20  n have fewer or 
1dfd0 6d 6f 72 65 20 74 68 61 6e 20 74 68 72 65 65 20  more than three 
1dfe0 64 69 67 69 74 73 0a 61 6e 64 20 74 68 65 20 64  digits.and the d
1dff0 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f  ate/time functio
1e000 6e 73 20 77 69 6c 6c 20 73 74 69 6c 6c 20 6f 70  ns will still op
1e010 65 72 61 74 65 20 63 6f 72 72 65 63 74 6c 79 2e  erate correctly.
1e020 29 5e 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 66 6f  )^.Similarly, fo
1e030 72 6d 61 74 20 31 32 20 69 73 20 73 68 6f 77 6e  rmat 12 is shown
1e040 20 77 69 74 68 20 31 30 20 73 69 67 6e 69 66 69   with 10 signifi
1e050 63 61 6e 74 20 64 69 67 69 74 73 2c 20 62 75 74  cant digits, but
1e060 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65 0a 66   the date/time.f
1e070 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 72 65  unctions will re
1e080 61 6c 6c 79 20 61 63 63 65 70 74 20 61 73 20 6d  ally accept as m
1e090 61 6e 79 20 6f 72 20 61 73 20 66 65 77 20 64 69  any or as few di
1e0a0 67 69 74 73 20 61 73 20 61 72 65 20 6e 65 63 65  gits as are nece
1e0b0 73 73 61 72 79 20 74 6f 0a 72 65 70 72 65 73 65  ssary to.represe
1e0c0 6e 74 20 74 68 65 20 4a 75 6c 69 61 6e 20 64 61  nt the Julian da
1e0d0 79 20 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a  y number..</p>..
1e0e0 3c 68 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68  <h3>Modifiers</h
1e0f0 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65  3>..<p>^The time
1e100 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66   string can be f
1e110 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
1e120 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72  or more modifier
1e130 73 20 74 68 61 74 20 0a 61 6c 74 65 72 20 64 61  s that .alter da
1e140 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20  te and/or time. 
1e150 5e 45 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69  ^Each modifier.i
1e160 73 20 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69  s a transformati
1e170 6f 6e 20 74 68 61 74 20 69 73 20 61 70 70 6c 69  on that is appli
1e180 65 64 20 74 6f 20 74 68 65 20 74 69 6d 65 20 76  ed to the time v
1e190 61 6c 75 65 20 74 6f 20 69 74 73 20 6c 65 66 74  alue to its left
1e1a0 2e 0a 5e 4d 6f 64 69 66 69 65 72 73 20 61 72 65  ..^Modifiers are
1e1b0 20 61 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65   applied from le
1e1c0 66 74 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64  ft to right; ord
1e1d0 65 72 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e  er is important.
1e1e0 0a 5e 28 54 68 65 20 61 76 61 69 6c 61 62 6c 65  .^(The available
1e1f0 20 6d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61   modifiers are a
1e200 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a  s follows.</p>..
1e210 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61  <ol>.<li> NNN da
1e220 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72  ys.<li> NNN hour
1e230 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74  s.<li> NNN minut
1e240 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e  es.<li> NNN.NNNN
1e250 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e   seconds.<li> NN
1e260 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e  N months.<li> NN
1e270 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61  N years.<li> sta
1e280 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e  rt of month.<li>
1e290 20 73 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c   start of year.<
1e2a0 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79  li> start of day
1e2b0 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a  .<li> weekday N.
1e2c0 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c  <li> unixepoch.<
1e2d0 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c  li> localtime.<l
1e2e0 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a  i> utc .</ol>)^.
1e2f0 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 73  .<p>^The first s
1e300 69 78 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20  ix modifiers (1 
1e310 74 68 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70  through 6) .simp
1e320 6c 79 20 61 64 64 20 74 68 65 20 73 70 65 63 69  ly add the speci
1e330 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74  fied amount of t
1e340 69 6d 65 20 74 6f 20 74 68 65 20 64 61 74 65 20  ime to the date 
1e350 61 6e 64 20 74 69 6d 65 20 0a 73 70 65 63 69 66  and time .specif
1e360 69 65 64 20 62 79 20 74 68 65 20 70 72 65 63 65  ied by the prece
1e370 64 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 20  ding timestring 
1e380 61 6e 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e  and modifiers..^
1e390 4e 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75 73  Note that "&plus
1e3a0 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77  mn;NNN months" w
1e3b0 6f 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e  orks by renderin
1e3c0 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64  g the original d
1e3d0 61 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59  ate into.the YYY
1e3e0 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20  Y-MM-DD format, 
1e3f0 61 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73  adding the &plus
1e400 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d  mn;NNN to the MM
1e410 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68   month value, th
1e420 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74  en.normalizing t
1e430 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75  he result.  ^Thu
1e440 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20  s, for example, 
1e450 74 68 65 20 64 61 74 61 20 32 30 30 31 2d 30 33  the data 2001-03
1e460 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20  -31 modified.by 
1e470 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69  '+1 month' initi
1e480 61 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31  ally yields 2001
1e490 2d 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69  -04-31, but Apri
1e4a0 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61  l only has 30 da
1e4b0 79 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69  ys.so the date i
1e4c0 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20  s normalized to 
1e4d0 32 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20  2001-05-01.  ^A 
1e4e0 73 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f  similar effect o
1e4f0 63 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f  ccurs when.the o
1e500 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20  riginal date is 
1e510 46 65 62 72 75 61 72 79 20 32 39 20 6f 66 20 61  February 29 of a
1e520 20 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74 68   leapyear and th
1e530 65 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70  e modifier is.&p
1e540 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68  lusmn;N years wh
1e550 65 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d  ere N is not a m
1e560 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e  ultiple of four.
1e570 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73  </p>..<p>^The "s
1e580 74 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65  tart of" modifie
1e590 72 73 20 28 37 20 74 68 72 6f 75 67 68 20 39 29  rs (7 through 9)
1e5a0 20 73 68 69 66 74 20 74 68 65 20 64 61 74 65 20   shift the date 
1e5b0 62 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68  backwards .to th
1e5c0 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
1e5d0 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68  he current month
1e5e0 2c 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f  , year or day.</
1e5f0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65  p>..<p>^The "wee
1e600 6b 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61  kday" modifier a
1e610 64 76 61 6e 63 65 73 20 74 68 65 20 64 61 74 65  dvances the date
1e620 20 66 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20   forward to the 
1e630 6e 65 78 74 20 64 61 74 65 20 0a 77 68 65 72 65  next date .where
1e640 20 74 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d   the weekday num
1e650 62 65 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79  ber is N. Sunday
1e660 20 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73   is 0, Monday is
1e670 20 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68   1, and so forth
1e680 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  .</p>..<p>^The "
1e690 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
1e6a0 69 65 72 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f  ier (11) only wo
1e6b0 72 6b 73 20 69 66 20 69 74 20 69 6d 6d 65 64 69  rks if it immedi
1e6c0 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61  ately follows .a
1e6d0 20 74 69 6d 65 73 74 72 69 6e 67 20 69 6e 20 74   timestring in t
1e6e0 68 65 20 44 44 44 44 44 44 44 44 44 44 20 66 6f  he DDDDDDDDDD fo
1e6f0 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64  rmat. .^This mod
1e700 69 66 69 65 72 20 63 61 75 73 65 73 20 74 68 65  ifier causes the
1e710 20 44 44 44 44 44 44 44 44 44 44 20 74 6f 20 62   DDDDDDDDDD to b
1e720 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 6e 6f  e interpreted no
1e730 74 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20 64  t .as a Julian d
1e740 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69 74 20  ay number as it 
1e750 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62  normally would b
1e760 65 2c 20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a  e, but as.[http:
1e770 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1e780 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d  rg/wiki/Unix_tim
1e790 65 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d  e | Unix Time] -
1e7a0 20 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20   the .number of 
1e7b0 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39  seconds since 19
1e7c0 37 30 2e 20 20 49 66 20 74 68 65 20 22 75 6e 69  70.  If the "uni
1e7d0 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
1e7e0 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77   does not.follow
1e7f0 20 61 20 74 69 6d 65 73 74 72 69 6e 67 20 6f 66   a timestring of
1e800 20 74 68 65 20 66 6f 72 6d 20 44 44 44 44 44 44   the form DDDDDD
1e810 44 44 44 44 20 77 68 69 63 68 20 65 78 70 72 65  DDDD which expre
1e820 73 73 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a  sses the number.
1e830 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65  of seconds since
1e840 20 31 39 37 30 20 6f 72 20 69 66 20 6f 74 68 65   1970 or if othe
1e850 72 20 6d 6f 64 69 66 69 65 72 73 0a 73 65 70 61  r modifiers.sepa
1e860 72 61 74 65 20 74 68 65 20 22 75 6e 69 78 65 70  rate the "unixep
1e870 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 66 72  och" modifier fr
1e880 6f 6d 20 70 72 69 6f 72 20 44 44 44 44 44 44 44  om prior DDDDDDD
1e890 44 44 44 20 74 68 65 6e 20 74 68 65 0a 62 65 68  DDD then the.beh
1e8a0 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
1e8b0 65 64 2e 0a 44 75 65 20 74 6f 20 70 72 65 63 69  ed..Due to preci
1e8c0 73 69 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73  sion limitations
1e8d0 20 69 6d 70 6f 73 65 64 20 62 79 20 74 68 65 20   imposed by the 
1e8e0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
1e8f0 75 73 65 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e  use.of 64-bit in
1e900 74 65 67 65 72 73 2c 20 74 68 65 20 22 75 6e 69  tegers, the "uni
1e910 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
1e920 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a   only works for.
1e930 64 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30  dates between 00
1e940 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30  00-01-01 00:00:0
1e950 30 20 61 6e 64 20 35 33 35 32 2d 31 31 2d 30 31  0 and 5352-11-01
1e960 20 31 30 3a 35 32 3a 34 37 20 28 75 6e 69 78 20   10:52:47 (unix 
1e970 74 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37 32  times.of -621672
1e980 31 39 32 30 30 20 74 68 72 6f 75 67 68 20 31 30  19200 through 10
1e990 36 37 35 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a  675199167).</p>.
1e9a0 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74  .<p>^The "localt
1e9b0 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20 28 31  ime" modifier (1
1e9c0 32 29 20 61 73 73 75 6d 65 73 20 74 68 65 20 74  2) assumes the t
1e9d0 69 6d 65 20 73 74 72 69 6e 67 20 74 6f 20 69 74  ime string to it
1e9e0 73 20 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e 69  s left is in.Uni
1e9f0 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74  versal Coordinat
1ea00 65 64 20 54 69 6d 65 20 28 55 54 43 29 20 61 6e  ed Time (UTC) an
1ea10 64 20 61 64 6a 75 73 74 73 20 74 68 65 20 74 69  d adjusts the ti
1ea20 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20 74 68 61  me.string so tha
1ea30 74 20 69 74 20 64 69 73 70 6c 61 79 73 20 6c 6f  t it displays lo
1ea40 63 61 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f  caltime.  If "lo
1ea50 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73  caltime".follows
1ea60 20 61 20 74 69 6d 65 20 74 68 61 74 20 69 73 20   a time that is 
1ea70 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e 20 74 68  not UTC, then th
1ea80 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
1ea90 64 65 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22  defined..^(The "
1eaa0 75 74 63 22 20 69 73 20 74 68 65 20 6f 70 70 6f  utc" is the oppo
1eab0 73 69 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69  site of "localti
1eac0 6d 65 22 2e 20 20 22 75 74 63 22 20 61 73 73 75  me".  "utc" assu
1ead0 6d 65 73 20 74 68 61 74 20 74 68 65 20 73 74 72  mes that the str
1eae0 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66 74 20  ing.to its left 
1eaf0 69 73 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20  is in the local 
1eb00 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a  timezone and adj
1eb10 75 73 74 73 20 74 68 61 74 20 73 74 72 69 6e 67  usts that string
1eb20 20 74 6f 20 62 65 20 69 6e 20 55 54 43 2e 29 5e   to be in UTC.)^
1eb30 0a 49 66 20 74 68 65 20 70 72 69 6f 72 20 73 74  .If the prior st
1eb40 72 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c  ring is not in l
1eb50 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74  ocaltime, then t
1eb60 68 65 20 72 65 73 75 6c 74 20 6f 66 20 22 75 74  he result of "ut
1eb70 63 22 20 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e  c" is.undefined.
1eb80 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c  </p>..<h3>Exampl
1eb90 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f  es</h3>..^(<p>Co
1eba0 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e  mpute the curren
1ebb0 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f  t date.<p>..<blo
1ebc0 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64  ckquote>SELECT d
1ebd0 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f  ate('now');</blo
1ebe0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1ebf0 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61 73  >Compute the las
1ec00 74 20 64 61 79 20 6f 66 20 74 68 65 20 63 75 72  t day of the cur
1ec10 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a  rent month.</p>.
1ec20 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c  .<blockquote>SEL
1ec30 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27  ECT date('now','
1ec40 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c  start of month',
1ec50 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64  '+1 month','-1 d
1ec60 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  ay');.</blockquo
1ec70 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
1ec80 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64  ute the date and
1ec90 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e   time given a un
1eca0 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39  ix timestamp 109
1ecb0 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62  2941466.</p>..<b
1ecc0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53  lockquote>.    S
1ecd0 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31  ELECT datetime(1
1ece0 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78  092941466, 'unix
1ecf0 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  epoch');.</block
1ed00 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1ed10 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20  ompute the date 
1ed20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61  and time given a
1ed30 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20   unix timestamp 
1ed40 31 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64 20  1092941466, and 
1ed50 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20  .compensate for 
1ed60 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a  your local timez
1ed70 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  one.</p>..<block
1ed80 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
1ed90 64 61 74 65 74 69 6d 65 28 31 30 39 32 39 34 31  datetime(1092941
1eda0 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27  466, 'unixepoch'
1edb0 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a  , 'localtime');.
1edc0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1edd0 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1ede0 65 20 63 75 72 72 65 6e 74 20 75 6e 69 78 20 74  e current unix t
1edf0 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c  imestamp.</p>..<
1ee00 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1ee10 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25  LECT strftime('%
1ee20 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f  s','now');.</blo
1ee30 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1ee40 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d  >Compute the num
1ee50 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63  ber of days sinc
1ee60 65 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f 66  e the signing of
1ee70 20 74 68 65 20 55 53 20 44 65 63 6c 61 72 61 74   the US Declarat
1ee80 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65  ion.of Independe
1ee90 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  nce.</p>..<block
1eea0 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
1eeb0 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29  julianday('now')
1eec0 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37   - julianday('17
1eed0 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c  76-07-04');.</bl
1eee0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1eef0 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  p>Compute the nu
1ef00 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20  mber of seconds 
1ef10 73 69 6e 63 65 20 61 20 70 61 72 74 69 63 75 6c  since a particul
1ef20 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30  ar moment in 200
1ef30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  4:</p>..<blockqu
1ef40 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74  ote>.  SELECT st
1ef50 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77  rftime('%s','now
1ef60 27 29 20 2d 20 73 74 72 66 74 69 6d 65 28 27 25  ') - strftime('%
1ef70 73 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 20 30  s','2004-01-01 0
1ef80 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f  2:34:56');.</blo
1ef90 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1efa0 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  >.Compute the da
1efb0 74 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  te of the first 
1efc0 54 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f 62  Tuesday in Octob
1efd0 65 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72 65  er.for the curre
1efe0 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c  nt year..</p>..<
1eff0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1f000 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c  LECT date('now',
1f010 27 73 74 61 72 74 20 6f 66 20 79 65 61 72 27 2c  'start of year',
1f020 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65  '+9 months','wee
1f030 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63  kday 2');.</bloc
1f040 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1f050 43 6f 6d 70 75 74 65 20 74 68 65 20 74 69 6d 65  Compute the time
1f060 20 73 69 6e 63 65 20 74 68 65 20 75 6e 69 78 20   since the unix 
1f070 65 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64 73  epoch in seconds
1f080 20 0a 28 6c 69 6b 65 20 73 74 72 66 74 69 6d 65   .(like strftime
1f090 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 65 78 63  ('%s','now') exc
1f0a0 65 70 74 20 69 6e 63 6c 75 64 65 73 20 66 72 61  ept includes fra
1f0b0 63 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f  ctional part):</
1f0c0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1f0d0 0a 20 20 53 45 4c 45 43 54 20 28 6a 75 6c 69 61  .  SELECT (julia
1f0e0 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 32 34  nday('now') - 24
1f0f0 34 30 35 38 37 2e 35 29 2a 38 36 34 30 30 2e 30  40587.5)*86400.0
1f100 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1f110 5e 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73 20 41  ^..<h3>Caveats A
1f120 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70  nd Bugs</h3>..<p
1f130 3e 54 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e  >The computation
1f140 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64   of local time d
1f150 65 70 65 6e 64 73 20 68 65 61 76 69 6c 79 20 6f  epends heavily o
1f160 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f 66 20 70  n the whim .of p
1f170 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e 64 20 69  oliticians and i
1f180 73 20 74 68 75 73 20 64 69 66 66 69 63 75 6c 74  s thus difficult
1f190 20 74 6f 20 67 65 74 20 63 6f 72 72 65 63 74 20   to get correct 
1f1a0 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73  for .all locales
1f1b0 2e 20 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c 65  . ^In this imple
1f1c0 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 73  mentation, the s
1f1d0 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
1f1e0 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61  y .function loca
1f1f0 6c 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73 65  ltime_r() is use
1f200 64 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20 74  d to assist in t
1f210 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f  he calculation o
1f220 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20  f .local time.  
1f230 5e 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65  ^(The .localtime
1f240 5f 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20  _r() C function 
1f250 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f  normally only wo
1f260 72 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65  rks for years.be
1f270 74 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32  tween 1970 and 2
1f280 30 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f  037. For dates o
1f290 75 74 73 69 64 65 20 74 68 69 73 20 72 61 6e 67  utside this rang
1f2a0 65 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d  e, SQLite .attem
1f2b0 70 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79  pts to map the y
1f2c0 65 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69  ear into an equi
1f2d0 76 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68  valent year with
1f2e0 69 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20  in .this range, 
1f2f0 64 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69  do the calculati
1f300 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65  on, then map the
1f310 20 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70   year back.)^</p
1f320 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66  >...<p>^(These f
1f330 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f  unctions only wo
1f340 72 6b 20 66 6f 72 20 64 61 74 65 73 20 62 65 74  rk for dates bet
1f350 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20  ween 0000-01-01 
1f360 30 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39 39  00:00:00.and 999
1f370 39 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39  9-12-31 23:59:59
1f380 20 28 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e 75   (julidan day nu
1f390 6d 62 65 72 73 20 31 37 32 31 30 35 39 2e 35 20  mbers 1721059.5 
1f3a0 74 68 72 6f 75 67 68 20 35 33 37 33 34 38 34 2e  through 5373484.
1f3b0 35 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73 20  5).)^.For dates 
1f3c0 6f 75 74 73 69 64 65 20 74 68 61 74 20 72 61 6e  outside that ran
1f3d0 67 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20  ge, the results 
1f3e0 6f 66 20 74 68 65 73 65 0a 66 75 6e 63 74 69 6f  of these.functio
1f3f0 6e 73 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  ns are undefined
1f400 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69  .</p>..<p>Non-Vi
1f410 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74  sta Windows plat
1f420 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f  forms only suppo
1f430 72 74 20 6f 6e 65 20 73 65 74 20 6f 66 20 44 53  rt one set of DS
1f440 54 20 72 75 6c 65 73 2e 20 0a 56 69 73 74 61 20  T rules. .Vista 
1f450 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 74 77  only supports tw
1f460 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e  o. Therefore, on
1f470 20 74 68 65 73 65 20 70 6c 61 74 66 6f 72 6d 73   these platforms
1f480 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c 20 44 53  , .historical DS
1f490 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77  T calculations w
1f4a0 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65 63 74  ill be incorrect
1f4b0 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  . .For example, 
1f4c0 69 6e 20 74 68 65 20 55 53 2c 20 69 6e 20 32 30  in the US, in 20
1f4d0 30 37 20 74 68 65 20 44 53 54 20 72 75 6c 65 73  07 the DST rules
1f4e0 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56   changed. .Non-V
1f4f0 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61  ista Windows pla
1f500 74 66 6f 72 6d 73 20 61 70 70 6c 79 20 74 68 65  tforms apply the
1f510 20 6e 65 77 20 32 30 30 37 20 44 53 54 20 72 75   new 2007 DST ru
1f520 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76  les .to all prev
1f530 69 6f 75 73 20 79 65 61 72 73 20 61 73 20 77 65  ious years as we
1f540 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65 73 20 73  ll. Vista does s
1f550 6f 6d 65 77 68 61 74 20 62 65 74 74 65 72 0a 67  omewhat better.g
1f560 65 74 74 69 6e 67 20 72 65 73 75 6c 74 73 20 63  etting results c
1f570 6f 72 72 65 63 74 20 62 61 63 6b 20 74 6f 20 31  orrect back to 1
1f580 39 38 36 2c 20 77 68 65 6e 20 74 68 65 20 72 75  986, when the ru
1f590 6c 65 73 20 77 65 72 65 20 61 6c 73 6f 20 63 68  les were also ch
1f5a0 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41  anged.</p>..<p>A
1f5b0 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70  ll internal comp
1f5c0 75 74 61 74 69 6f 6e 73 20 61 73 73 75 6d 65 20  utations assume 
1f5d0 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  the .[http://en.
1f5e0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1f5f0 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c  ki/Gregorian_cal
1f600 65 6e 64 61 72 20 7c 20 47 72 65 67 6f 72 69 61  endar | Gregoria
1f610 6e 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74  n calendar].syst
1f620 65 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20  em.  It is also 
1f630 61 73 73 75 6d 65 64 20 74 68 61 74 20 65 76 65  assumed that eve
1f640 72 79 0a 64 61 79 20 69 73 20 65 78 61 63 74 6c  ry.day is exactl
1f650 79 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73 20  y 86400 seconds 
1f660 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e  in duration.</p>
1f670 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
1f680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f6a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f6b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f6c0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
1f6d0 41 67 67 72 65 67 61 74 65 20 46 75 6e 63 74 69  Aggregate Functi
1f6e0 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61  ons} aggfunc {*a
1f6f0 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a  ggfunc}.</tcl>..
1f700 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74  <p>.The aggregat
1f710 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77  e functions show
1f720 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69  n below are avai
1f730 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74  lable by default
1f740 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67  .  Additional.ag
1f750 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1f760 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d  s written in C m
1f770 61 79 20 62 65 20 61 64 64 65 64 20 75 73 69 6e  ay be added usin
1f780 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f  g the .[sqlite3_
1f790 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
1f7a0 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a  )]</a>.API.</p>.
1f7b0 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61 67 67  .<p>.^In any agg
1f7c0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
1f7d0 74 68 61 74 20 74 61 6b 65 73 20 61 20 73 69 6e  that takes a sin
1f7e0 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68  gle argument, th
1f7f0 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20  at argument.can 
1f800 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74  be preceded by t
1f810 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53 54 49  he keyword DISTI
1f820 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63 68 20 63  NCT.  ^In such c
1f830 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65 0a  ases, duplicate.
1f840 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69 6c  elements are fil
1f850 74 65 72 65 64 20 62 65 66 6f 72 65 20 62 65 69  tered before bei
1f860 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20 74  ng passed into t
1f870 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
1f880 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d  ction..^For exam
1f890 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f  ple, the functio
1f8a0 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  n "count(distinc
1f8b0 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74 75 72  t X)" will retur
1f8c0 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  n the number.of 
1f8d0 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65 73 20  distinct values 
1f8e0 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74  of column X inst
1f8f0 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74 61 6c  ead of the total
1f900 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e   number of non-n
1f910 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f  ull.values in co
1f920 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74  lumn X..</p>..<t
1f930 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
1f940 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74  llpadding=10>.<t
1f950 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76 67  cl>.funcdef {avg
1f960 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76 67 28  (X)} {*avg {avg(
1f970 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
1f980 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
1f990 61 76 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  avg() function. 
1f9a0 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 76 65   returns the ave
1f9b0 72 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61 6c  rage value of al
1f9c0 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c  l non-NULL <i>X<
1f9d0 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20 67  /i> within a.  g
1f9e0 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67 20 61  roup.  ^String a
1f9f0 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 20 74  nd BLOB values t
1fa00 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20  hat do not look 
1fa10 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20 61 72 65  like numbers are
1fa20 0a 20 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  .  interpreted a
1fa30 73 20 30 2e 0a 20 20 5e 54 68 65 20 72 65 73 75  s 0..  ^The resu
1fa40 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20 61  lt of avg() is a
1fa50 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67  lways a floating
1fa60 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 61 73 20   point value as 
1fa70 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20 74 68 65  long as.  at the
1fa80 72 65 20 69 73 20 61 74 20 6c 65 61 73 74 20 6f  re is at least o
1fa90 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  ne non-NULL inpu
1faa0 74 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20 20  t even if all.  
1fab0 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67  inputs are integ
1fac0 65 72 73 2e 20 20 5e 54 68 65 20 72 65 73 75 6c  ers.  ^The resul
1fad0 74 20 6f 66 20 61 76 67 28 29 20 69 73 20 4e 55  t of avg() is NU
1fae0 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  LL if and only i
1faf0 66 0a 20 20 74 68 65 72 65 20 61 72 65 20 6e 6f  f.  there are no
1fb00 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73   non-NULL inputs
1fb10 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .  .}..funcdef {
1fb20 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74 28 2a  count(X) count(*
1fb30 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e  )} {*count {coun
1fb40 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  t() aggregate fu
1fb50 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
1fb60 65 20 63 6f 75 6e 74 28 58 29 20 66 75 6e 63 74  e count(X) funct
1fb70 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20  ion returns.  a 
1fb80 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d  count of the num
1fb90 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 20 20 74  ber of times.  t
1fba0 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20  hat <i>X</i> is 
1fbb0 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72  not NULL in a gr
1fbc0 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f 75 6e 74  oup.  ^The count
1fbd0 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 28  (*) function.  (
1fbe0 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74  with no argument
1fbf0 73 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 74  s) returns the t
1fc00 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72  otal number of r
1fc10 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
1fc20 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 72  ..}..funcdef {gr
1fc30 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29 20 67 72  oup_concat(X) gr
1fc40 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29 7d  oup_concat(X,Y)}
1fc50 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f 6e 63   {.  *group_conc
1fc60 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74  at {group_concat
1fc70 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
1fc80 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68  ction}.} {.  ^Th
1fc90 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29  e group_concat()
1fca0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1fcb0 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68 69  s.  a string whi
1fcc0 63 68 20 69 73 20 74 68 65 20 63 6f 6e 63 61 74  ch is the concat
1fcd0 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c  enation of.  all
1fce0 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73   non-NULL values
1fcf0 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e   of <i>X</i>.  ^
1fd00 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c 69 3e  If parameter <i>
1fd10 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65 6e 74  Y</i> is present
1fd20 20 74 68 65 6e 0a 20 20 69 74 20 69 73 20 75 73   then.  it is us
1fd30 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61  ed as the separa
1fd40 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20 69 6e  tor.  between in
1fd50 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58 3c  stances of <i>X<
1fd60 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61 20 28  /i>.  ^A comma (
1fd70 22 2c 22 29 20 69 73 20 75 73 65 64 20 61 73 20  ",") is used as 
1fd80 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20  the separator.  
1fd90 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f  if <i>Y</i> is o
1fda0 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f 72 64  mitted.  The ord
1fdb0 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63 61 74  er of the concat
1fdc0 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73 20  enated elements 
1fdd0 69 73 0a 20 20 61 72 62 69 74 72 61 72 79 2e 0a  is.  arbitrary..
1fde0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28  }..funcdef {max(
1fdf0 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75 6e 63  X)} {*maxAggFunc
1fe00 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78 28 29   *agg_max {max()
1fe10 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1fe20 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d  ion}} {.  ^The m
1fe30 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 66  ax() aggregate f
1fe40 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e  unction.  return
1fe50 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61  s the maximum va
1fe60 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65  lue of all value
1fe70 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
1fe80 20 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 76    ^The maximum v
1fe90 61 6c 75 65 20 69 73 20 74 68 65 20 76 61 6c 75  alue is the valu
1fea0 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20  e that would be 
1feb0 72 65 74 75 72 6e 65 64 20 6c 61 73 74 20 69 6e  returned last in
1fec0 20 61 6e 0a 20 20 4f 52 44 45 52 20 42 59 20 6f   an.  ORDER BY o
1fed0 6e 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d  n the same colum
1fee0 6e 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d  n.  ^Aggregate m
1fef0 61 78 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c  ax() returns NUL
1ff00 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e 6c 79  L .  if and only
1ff10 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
1ff20 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73   non-NULL values
1ff30 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d   in the group..}
1ff40 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58  ..funcdef {min(X
1ff50 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e 63 20  )} {*minAggFunc 
1ff60 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20  *agg_min {min() 
1ff70 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1ff80 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 69  on}} {.  ^The mi
1ff90 6e 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  n() aggregate fu
1ffa0 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73  nction.  returns
1ffb0 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e   the minimum non
1ffc0 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61  -NULL value of a
1ffd0 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ll values in the
1ffe0 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d   group..  ^The m
1fff0 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20  inimum value is 
20000 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55  the first non-NU
20010 4c 4c 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f  LL value that wo
20020 75 6c 64 20 61 70 70 65 61 72 0a 20 20 69 6e 20  uld appear.  in 
20030 61 6e 20 4f 52 44 45 52 20 42 59 20 6f 66 20 74  an ORDER BY of t
20040 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67  he column..  ^Ag
20050 67 72 65 67 61 74 65 20 6d 69 6e 28 29 20 72 65  gregate min() re
20060 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 61 6e  turns NULL if an
20070 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20  d only if there 
20080 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a  are no non-NULL.
20090 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20    values in the 
200a0 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65  group..}..funcde
200b0 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c 28  f {sum(X) total(
200c0 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75 6e 63  X)} {.  *sumFunc
200d0 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b   *sum *total.  {
200e0 73 75 6d 28 29 20 61 67 67 72 65 67 61 74 65 20  sum() aggregate 
200f0 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74  function}.  {tot
20100 61 6c 28 29 20 61 67 67 72 65 67 61 74 65 20 66  al() aggregate f
20110 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e  unction}.} {.  ^
20120 54 68 65 20 73 75 6d 28 29 20 61 6e 64 20 74 6f  The sum() and to
20130 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65 20  tal() aggregate 
20140 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65 74 75  functions.  retu
20150 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f  rn sum of all no
20160 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e  n-NULL values in
20170 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 49   the group..  ^I
20180 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e  f there are no n
20190 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f  on-NULL input ro
201a0 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65  ws then sum() re
201b0 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75 74  turns.  NULL but
201c0 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e 73   total() returns
201d0 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69 73 20   0.0..  NULL is 
201e0 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68  not normally a h
201f0 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66 6f  elpful result fo
20200 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20  r the sum of no 
20210 72 6f 77 73 0a 20 20 62 75 74 20 74 68 65 20 53  rows.  but the S
20220 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71 75  QL standard requ
20230 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73 74  ires it and most
20240 20 6f 74 68 65 72 0a 20 20 53 51 4c 20 64 61 74   other.  SQL dat
20250 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69 6d  abase engines im
20260 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20 74 68  plement sum() th
20270 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69 74 65  at way so SQLite
20280 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68 65 0a   does it in the.
20290 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20 6f 72    same way in or
202a0 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70 61 74  der to be compat
202b0 69 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f 6e 2d  ible.   The non-
202c0 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c 28 29  standard total()
202d0 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20 70   function.  is p
202e0 72 6f 76 69 64 65 64 20 61 73 20 61 20 63 6f 6e  rovided as a con
202f0 76 65 6e 69 65 6e 74 20 77 61 79 20 74 6f 20 77  venient way to w
20300 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68 69 73 20  ork around this 
20310 64 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a 20  design problem. 
20320 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67   in the SQL lang
20330 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e  uage.</p>..  <p>
20340 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74  ^The result of t
20350 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61 79 73  otal() is always
20360 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
20370 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20  t value..  ^The 
20380 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29 20  result of sum() 
20390 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  is an integer va
203a0 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e  lue if all non-N
203b0 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20 69  ULL inputs are i
203c0 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49 66 20 61  ntegers..  ^If a
203d0 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d 28  ny input to sum(
203e0 29 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e 20  ) is neither an 
203f0 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55 4c  integer or a NUL
20400 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20 72  L.  then sum() r
20410 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e  eturns a floatin
20420 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20  g point value.  
20430 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 61  which might be a
20440 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  n approximation 
20450 74 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d 2e  to the true sum.
20460 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28  </p>..  <p>^Sum(
20470 29 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20  ) will throw an 
20480 22 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f  "integer overflo
20490 77 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20  w" exception if 
204a0 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72 65  all inputs.  are
204b0 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55 4c   integers or NUL
204c0 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65 67  L.  and an integ
204d0 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75  er overflow occu
204e0 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74 20  rs at any point 
204f0 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70 75  during the compu
20500 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c  tation..  ^Total
20510 28 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73 20  () never throws 
20520 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66  an integer overf
20530 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f  low..}.</tcl>.</
20540 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  table>..<tcl>.##
20550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20590 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
205a0 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65  tion INSERT inse
205b0 72 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45  rt {INSERT *INSE
205c0 52 54 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  RTs}..RecursiveB
205d0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 73  ubbleDiagram ins
205e0 65 72 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ert-stmt.</tcl>.
205f0 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73  .<p>The INSERT s
20600 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69  tatement comes i
20610 6e 20 74 68 72 65 65 20 62 61 73 69 63 20 66 6f  n three basic fo
20620 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e  rms.  .<ul>.<li>
20630 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66 6f  <p>^The first fo
20640 72 6d 20 28 77 69 74 68 20 74 68 65 20 22 56 41  rm (with the "VA
20650 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63  LUES" keyword) c
20660 72 65 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d 6f  reates one or mo
20670 72 65 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a 61  re.new rows in.a
20680 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
20690 2e 20 5e 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d  . ^If no column-
206a0 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
206b0 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  d then the numbe
206c0 72 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e 73 65  r.of values inse
206d0 72 74 65 64 20 69 6e 74 6f 20 65 61 63 68 20 72  rted into each r
206e0 6f 77 0a 6d 75 73 74 20 62 65 20 74 68 65 20 73  ow.must be the s
206f0 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ame as the numbe
20700 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
20710 74 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20 74  the table. ^In t
20720 68 69 73 20 63 61 73 65 0a 74 68 65 20 72 65 73  his case.the res
20730 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
20740 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  g the left-most 
20750 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20  expression from 
20760 65 61 63 68 20 74 65 72 6d 20 6f 66 0a 74 68 65  each term of.the
20770 20 56 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20   VALUES list is 
20780 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
20790 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  e left-most colu
207a0 6d 6e 20 6f 66 20 65 61 63 68 20 6e 65 77 20 72  mn of each new r
207b0 6f 77 2c 0a 61 6e 64 20 73 6f 20 66 6f 72 74 68  ow,.and so forth
207c0 20 66 6f 72 20 65 61 63 68 20 73 75 62 73 65 71   for each subseq
207d0 75 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 2e  uent expression.
207e0 20 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d 6c 69   ^If a.column-li
207f0 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  st is specified,
20800 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72   then the number
20810 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 65 61   of values in ea
20820 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 0a 56  ch term of the.V
20830 41 4c 55 45 20 6c 69 73 74 20 6d 75 73 74 20 6d  ALUE list must m
20840 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20  atch the number 
20850 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c  of.specified col
20860 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20 74  umns. ^Each of t
20870 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73  he named columns
20880 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20   of the new row 
20890 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77 69 74  is populated.wit
208a0 68 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  h the results of
208b0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
208c0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 56 41  corresponding VA
208d0 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f 6e 2e  LUES expression.
208e0 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73 20   ^Table.columns 
208f0 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65  that do not appe
20900 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ar in the column
20910 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75 6c 61   list are popula
20920 74 65 64 20 77 69 74 68 20 74 68 65 20 64 65 66  ted with the def
20930 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61 6c 75  ault.column valu
20940 65 20 28 73 70 65 63 69 66 69 65 64 20 61 73 20  e (specified as 
20950 70 61 72 74 20 6f 66 20 74 68 65 20 43 52 45 41  part of the CREA
20960 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
20970 6e 74 29 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c  nt), or with NUL
20980 4c 20 69 66 0a 6e 6f 20 64 65 66 61 75 6c 74 20  L if.no default 
20990 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69  value is specifi
209a0 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  ed...<li><p>The 
209b0 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74  second form of t
209c0 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
209d0 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 53  ent contains a S
209e0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a  ELECT statement.
209f0 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c  instead of a VAL
20a00 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e  UES clause. ^A n
20a10 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65  ew entry is inse
20a20 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61  rted into the ta
20a30 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77  ble for each.row
20a40 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65   of data returne
20a50 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74  d by executing t
20a60 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
20a70 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d  ent. ^If a colum
20a80 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66  n-list is.specif
20a90 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  ied, the number 
20aa0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
20ab0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
20ac0 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74  SELECT must be t
20ad0 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e  he same.as the n
20ae0 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69  umber of items i
20af0 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73  n the column-lis
20b00 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  t. ^Otherwise, i
20b10 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  f no column-list
20b20 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
20b30 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
20b40 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
20b50 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  lt of the SELECT
20b60 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
20b70 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e.as the number 
20b80 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
20b90 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45  e table. ^Any SE
20ba0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20  LECT statement, 
20bb0 69 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d 70 6f  including.[compo
20bc0 75 6e 64 20 53 45 4c 45 43 54 73 5d 20 61 6e 64  und SELECTs] and
20bd0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
20be0 74 73 20 77 69 74 68 20 5b 4f 52 44 45 52 20 42  ts with [ORDER B
20bf0 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d 49 54  Y] and/or [LIMIT
20c00 5d 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20  ] clauses, .may 
20c10 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49 4e  be used in an IN
20c20 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  SERT statement o
20c30 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c  f this form...<l
20c40 69 3e 3c 70 3e 54 68 65 20 74 68 69 72 64 20 66  i><p>The third f
20c50 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  orm of an INSERT
20c60 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77 69   statement is wi
20c70 74 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  th DEFAULT VALUE
20c80 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54 20  S..^(The INSERT 
20c90 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c 55  ... DEFAULT VALU
20ca0 45 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 73  ES statement ins
20cb0 65 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e 65  erts a single ne
20cc0 77 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6e  w row into the.n
20cd0 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e 45  amed table.)^ ^E
20ce0 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
20cf0 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70  e new row is pop
20d00 75 6c 61 74 65 64 20 77 69 74 68 20 69 74 73 20  ulated with its 
20d10 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 0a 6f  default value,.o
20d20 72 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 69 66  r with a NULL if
20d30 20 6e 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75   no default valu
20d40 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  e is specified a
20d50 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f  s part of the co
20d60 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 20  lumn.definition 
20d70 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 41  in the CREATE TA
20d80 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  BLE statement...
20d90 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  </ul>..<p>^The o
20da0 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74  ptional conflict
20db0 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74  -clause allows t
20dc0 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e  he specification
20dd0 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69   of an alternati
20de0 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  ve.constraint co
20df0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
20e00 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75  n algorithm to u
20e10 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f  se during this o
20e20 6e 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e  ne INSERT comman
20e30 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69  d..See the secti
20e40 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f  on titled.[ON CO
20e50 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
20e60 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
20e70 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62  on..For compatib
20e80 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c  ility with MySQL
20e90 2c 20 5e 74 68 65 20 70 61 72 73 65 72 20 61 6c  , ^the parser al
20ea0 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66 20  lows the use of 
20eb0 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f  the.single keywo
20ec0 72 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67  rd <a href="lang
20ed0 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52  _replace.html">R
20ee0 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e  EPLACE</a> as an
20ef0 20 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53   .alias for "INS
20f00 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e  ERT OR REPLACE".
20f10 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f  ..<p>^(The optio
20f20 6e 61 6c 20 22 3c 69 3e 64 61 74 61 62 61 73 65  nal "<i>database
20f30 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  -name</i><b>.</b
20f40 3e 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  >" prefix on the
20f50 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
20f60 69 3e 0a 69 73 20 73 75 70 70 6f 72 74 20 66 6f  i>.is support fo
20f70 72 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45  r top-level INSE
20f80 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e  RT statements on
20f90 6c 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c  ly.)^  ^The tabl
20fa0 65 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a 75  e name must be.u
20fb0 6e 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20 49  nqualified for I
20fc0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73  NSERT statements
20fd0 20 74 68 61 74 20 6f 63 63 75 72 20 77 69 74 68   that occur with
20fe0 69 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47 47  in [CREATE TRIGG
20ff0 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ER] statements..
21000 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20  ^Similarly, the 
21010 22 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22  "DEFAULT VALUES"
21020 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53   form of the INS
21030 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ERT statement is
21040 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 74   supported for.t
21050 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20  op-level INSERT 
21060 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20  statements only 
21070 61 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45  and not for INSE
21080 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  RT statements wi
21090 74 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c  thin.triggers..<
210a0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
210b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
210f0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
21100 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c   {ON CONFLICT cl
21110 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b  ause} conflict {
21120 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65  {conflict clause
21130 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d  } {ON CONFLICT}}
21140 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
21150 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63  eDiagram conflic
21160 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a  t-clause.</tcl>.
21170 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  .<p>The ON CONFL
21180 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  ICT clause is no
21190 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c  t a separate SQL
211a0 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73   command.  It is
211b0 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20   a.non-standard 
211c0 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20  clause that can 
211d0 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f  appear in many o
211e0 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ther SQL command
211f0 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69  s..It is given i
21200 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69  ts own section i
21210 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  n this document 
21220 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f  because it is no
21230 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61  t.part of standa
21240 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65  rd SQL and there
21250 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62  fore might not b
21260 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a  e familiar.</p>.
21270 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78 20  .<p>^The syntax 
21280 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  for the ON CONFL
21290 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73  ICT clause is as
212a0 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72   shown above for
212b0 0a 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c  .the CREATE TABL
212c0 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72  E command.  ^For
212d0 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a   the INSERT and.
212e0 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c  UPDATE commands,
212f0 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f   the keywords "O
21300 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20  N CONFLICT" are 
21310 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22  replaced by "OR"
21320 20 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79 6e   so that.the syn
21330 74 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20 6e  tax reads more n
21340 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65  aturally.  For e
21350 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20  xample, instead 
21360 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f  of."INSERT ON CO
21370 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77  NFLICT IGNORE" w
21380 65 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f  e have "INSERT O
21390 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b  R IGNORE"..The k
213a0 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62  eywords change b
213b0 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f  ut the meaning o
213c0 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20  f the clause is 
213d0 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20  the same.either 
213e0 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  way.</p>..<p>The
213f0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
21400 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 5b  use applies to [
21410 55 4e 49 51 55 45 5d 2c 20 5b 4e 4f 54 20 4e 55  UNIQUE], [NOT NU
21420 4c 4c 5d 2c 0a 5b 43 48 45 43 4b 5d 2c 20 61 6e  LL],.[CHECK], an
21430 64 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  d [PRIMARY KEY] 
21440 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 54 68 65  constraints..The
21450 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
21460 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74 0a  orithm does not.
21470 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49 47  apply to [FOREIG
21480 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
21490 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66 69  s]..There are fi
214a0 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ve conflict reso
214b0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
214c0 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42 41   choices:.ROLLBA
214d0 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c 2c  CK, ABORT, FAIL,
214e0 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50   IGNORE, and REP
214f0 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61 75  LACE..^The defau
21500 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
21510 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
21520 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73   is ABORT.  This
21530 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d 65  .is what they me
21540 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64  an:</p>..<dl>.<d
21550 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62  t><b>ROLLBACK</b
21560 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
21570 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
21580 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
21590 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
215a0 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65 73  the ROLLBACK.res
215b0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
215c0 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72  m aborts the cur
215d0 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65  rent SQL stateme
215e0 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49 54  nt with.an SQLIT
215f0 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72  E_CONSTRAINT err
21600 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61 63  or and rolls bac
21610 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
21620 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e  ansaction..^If n
21630 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
21640 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20 74  .active (other t
21650 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20  han the implied 
21660 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
21670 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65   is created on e
21680 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68  very.command) th
21690 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
216a0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
216b0 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73  ithm works the s
216c0 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52 54  ame as the.ABORT
216d0 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c   algorithm.</p><
216e0 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f  /dd>..<dt><b>ABO
216f0 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RT</b></dt>.<dd>
21700 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
21710 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
21720 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
21730 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a 72  urs, the ABORT.r
21740 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
21750 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63  thm aborts the c
21760 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
21770 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51 4c  ment.with an SQL
21780 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65  ITE_CONSTRAINT e
21790 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f  rror and backs o
217a0 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d  ut any changes.m
217b0 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65  ade by the curre
217c0 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
217d0 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61  ; but changes ca
217e0 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51  used.by prior SQ
217f0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  L statements wit
21800 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61  hin the same tra
21810 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65  nsaction are pre
21820 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74  served and the.t
21830 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
21840 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20  ns active..This 
21850 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  is the default b
21860 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20  ehavior and the 
21870 62 65 68 61 76 69 6f 72 20 73 70 65 63 69 66 69  behavior specifi
21880 65 64 20 62 79 20 74 68 65 20 53 51 4c 0a 73 74  ed by the SQL.st
21890 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e  andard.</p></dd>
218a0 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62  ..<dt><b>FAIL</b
218b0 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
218c0 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
218d0 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
218e0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
218f0 74 68 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74  the FAIL.resolut
21900 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62  ion algorithm ab
21910 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
21920 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
21930 69 74 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f  ith an.SQLITE_CO
21940 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 2e 20  NSTRAINT error. 
21950 20 5e 42 75 74 20 74 68 65 20 46 41 49 4c 20 72   ^But the FAIL r
21960 65 73 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e  esolution does n
21970 6f 74 0a 62 61 63 6b 20 6f 75 74 20 70 72 69 6f  ot.back out prio
21980 72 20 63 68 61 6e 67 65 73 20 6f 66 20 74 68 65  r changes of the
21990 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74   SQL statement t
219a0 68 61 74 20 66 61 69 6c 65 64 20 6e 6f 72 20 64  hat failed nor d
219b0 6f 65 73 0a 69 74 20 65 6e 64 20 74 68 65 20 74  oes.it end the t
219c0 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72  ransaction..^For
219d0 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20   example, if an 
219e0 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74  UPDATE.statement
219f0 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63   encountered a c
21a00 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
21a10 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68  ion on the 100th
21a20 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74   row that.it att
21a30 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c  empts to update,
21a40 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
21a50 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61  99 row changes a
21a60 72 65 20 70 72 65 73 65 72 76 65 64 0a 62 75 74  re preserved.but
21a70 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73   changes to rows
21a80 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20   100 and beyond 
21a90 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e  never occur.</p>
21aa0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47  </dd>..<dt><b>IG
21ab0 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  NORE</b></dt>.<d
21ac0 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61  d><p> ^When an a
21ad0 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72  pplicable constr
21ae0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
21af0 63 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f  ccurs, .the IGNO
21b00 52 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  RE resolution al
21b10 67 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74 68  gorithm skips th
21b20 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63  e one row that c
21b30 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73  ontains.the cons
21b40 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
21b50 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 70   and continues p
21b60 72 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65 71  rocessing subseq
21b70 75 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68 65  uent rows.of the
21b80 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61   SQL statement a
21b90 73 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e  s if nothing wen
21ba0 74 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72  t wrong..Other r
21bb0 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61  ows before and a
21bc0 66 74 65 72 20 74 68 65 20 72 6f 77 20 74 68 61  fter the row tha
21bd0 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20  t.contained the 
21be0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
21bf0 74 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74 65  tion are inserte
21c00 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72  d or updated.nor
21c10 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72  mally. ^No error
21c20 20 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65   is returned whe
21c30 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e  n the IGNORE con
21c40 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
21c50 0a 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73  .algorithm is us
21c60 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ed.</p></dd>..<d
21c70 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e  t><b>REPLACE</b>
21c80 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
21c90 68 65 6e 20 61 20 5b 55 4e 49 51 55 45 5d 20 6f  hen a [UNIQUE] o
21ca0 72 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  r [PRIMARY KEY] 
21cb0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
21cc0 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68  tion occurs, .th
21cd0 65 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72 69  e REPLACE algori
21ce0 74 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65 2d  thm.deletes pre-
21cf0 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74 68  existing rows th
21d00 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20 74  at are causing t
21d10 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
21d20 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74 6f  olation.prior to
21d30 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75 70   inserting or up
21d40 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72 65  dating the curre
21d50 6e 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20 63  nt row and the c
21d60 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73  ommand continues
21d70 20 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d   .executing norm
21d80 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 5b 4e 4f 54  ally..^If a [NOT
21d90 20 4e 55 4c 4c 5d 20 63 6f 6e 73 74 72 61 69 6e   NULL] constrain
21da0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
21db0 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20  rs, the REPLACE 
21dc0 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74  conflict.resolut
21dd0 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65  ion replaces the
21de0 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74 68   NULL value with
21df0 0a 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c  .the default val
21e00 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75  ue for that colu
21e10 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63 6f  mn, or if the co
21e20 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61  lumn has no defa
21e30 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20  ult.value, then 
21e40 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69  the ABORT algori
21e50 74 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49 66  thm is used..^If
21e60 20 61 20 5b 43 48 45 43 4b 5d 20 63 6f 6e 73 74   a [CHECK] const
21e70 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
21e80 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c  occurs, the REPL
21e90 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACE conflict res
21ea0 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68  olution.algorith
21eb0 6d 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c  m always works l
21ec0 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a  ike ABORT.</p>..
21ed0 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45 50  <p>^When the REP
21ee0 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
21ef0 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67  solution strateg
21f00 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69  y deletes rows i
21f10 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73  n order to.satis
21f20 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c  fy a constraint,
21f30 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
21f40 20 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67 65   | delete trigge
21f50 72 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64 20  rs] fire if and 
21f60 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73 69  only if.[recursi
21f70 76 65 5f 74 72 69 67 67 65 72 73 20 70 72 61 67  ve_triggers prag
21f80 6d 61 20 7c 20 72 65 63 75 72 73 69 76 65 20 74  ma | recursive t
21f90 72 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e 61  riggers] are ena
21fa0 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  bled.</p>..<p>^T
21fb0 68 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61  he [sqlite3_upda
21fc0 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65  te_hook | update
21fd0 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e   hook] is not in
21fe0 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20 74  voked for rows t
21ff0 68 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64 20  hat.are deleted 
22000 62 79 20 74 68 65 20 52 45 50 4c 41 43 45 20 63  by the REPLACE c
22010 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
22020 6f 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e 4e  on strategy.  ^N
22030 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45 20  or does.REPLACE 
22040 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b 73  increment the [s
22050 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 7c  qlite3_changes |
22060 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d   change counter]
22070 2e 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e 61  ..The exceptiona
22080 6c 20 62 65 68 61 76 69 6f 72 73 20 64 65 66 69  l behaviors defi
22090 6e 65 64 20 69 6e 20 74 68 69 73 20 70 61 72 61  ned in this para
220a0 67 72 61 70 68 20 6d 69 67 68 74 20 63 68 61 6e  graph might chan
220b0 67 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65 20  ge .in a future 
220c0 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64  release.</p>.</d
220d0 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f  l>..<p>^The algo
220e0 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20  rithm specified 
220f0 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65  in the OR clause
22100 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   of an INSERT or
22110 20 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65   UPDATE.override
22120 73 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20  s any algorithm 
22130 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 43  specified in a C
22140 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66  REATE TABLE..^If
22150 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73   no algorithm is
22160 20 73 70 65 63 69 66 69 65 64 20 61 6e 79 77 68   specified anywh
22170 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61  ere, the ABORT a
22180 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
22190 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
221a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
221e0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
221f0 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e  ion REINDEX rein
22200 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 52 65 63  dex REINDEX..Rec
22210 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
22220 72 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d 74  ram reindex-stmt
22230 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
22240 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64   REINDEX command
22250 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65   is used to dele
22260 74 65 20 61 6e 64 20 72 65 63 72 65 61 74 65 20  te and recreate 
22270 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72  indices from scr
22280 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75 73  atch..This is us
22290 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64 65  eful when the de
222a0 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f  finition of a co
222b0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
222c0 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f   has changed..</
222d0 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52  p>..<p>^If the R
222e0 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69  EINDEX keyword i
222f0 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62  s not followed b
22300 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65  y a collation-se
22310 71 75 65 6e 63 65 20 6f 72 20 64 61 74 61 62 61  quence or databa
22320 73 65 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74  se .object ident
22330 69 66 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20  ifier, then all 
22340 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61  indices in all a
22350 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
22360 73 20 61 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a  s are rebuilt...
22370 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44  <p>^If the REIND
22380 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 66 6f  EX keyword is fo
22390 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c  llowed by a coll
223a0 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e  ation-sequence n
223b0 61 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e  ame, then.all in
223c0 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74  dices in all att
223d0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
223e0 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 61 6d  that use the nam
223f0 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  ed collation seq
22400 75 65 6e 63 65 73 0a 61 72 65 20 72 65 63 72 65  uences.are recre
22410 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20  ated. ..<p>^Or, 
22420 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
22430 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
22440 52 45 49 4e 44 45 58 20 69 64 65 6e 74 69 66 69  REINDEX identifi
22450 65 73 20 61 20 73 70 65 63 69 66 69 63 20 0a 64  es a specific .d
22460 61 74 61 62 61 73 65 20 74 61 62 6c 65 2c 20 74  atabase table, t
22470 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20  hen all indices 
22480 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
22490 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 61  database table a
224a0 72 65 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66  re rebuilt. .^If
224b0 20 69 74 20 69 64 65 6e 74 69 66 69 65 73 20 61   it identifies a
224c0 20 73 70 65 63 69 66 69 63 20 64 61 74 61 62 61   specific databa
224d0 73 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a  se index, then j
224e0 75 73 74 20 74 68 61 74 20 69 6e 64 65 78 20 69  ust that index i
224f0 73 20 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70  s recreated...<p
22500 3e 5e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62  >^If no <i>datab
22510 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20  ase-name</i> is 
22520 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68  specified and th
22530 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68 20  ere exists both 
22540 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78  a table or.index
22550 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e   and a collation
22560 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
22570 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65 2c   specified name,
22580 20 53 51 4c 69 74 65 20 69 6e 74 65 72 70 72 65   SQLite interpre
22590 74 73 0a 74 68 69 73 20 61 73 20 61 20 72 65 71  ts.this as a req
225a0 75 65 73 74 20 74 6f 20 72 65 62 75 69 6c 64 20  uest to rebuild 
225b0 74 68 65 20 69 6e 64 69 63 65 73 20 74 68 61 74  the indices that
225c0 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20 63   use the named c
225d0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
225e0 65 2e 0a 54 68 69 73 20 61 6d 62 69 67 75 69 74  e..This ambiguit
225f0 79 20 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20  y in the syntax 
22600 6d 61 79 20 62 65 20 61 76 6f 69 64 65 64 20 62  may be avoided b
22610 79 20 61 6c 77 61 79 73 20 73 70 65 63 69 66 79  y always specify
22620 69 6e 67 20 61 0a 3c 69 3e 64 61 74 61 62 61 73  ing a.<i>databas
22630 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20  e-name</i> when 
22640 72 65 69 6e 64 65 78 69 6e 67 20 61 20 73 70 65  reindexing a spe
22650 63 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69  cific table or i
22660 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ndex...<tcl>.###
22670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
226a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
226b0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
226c0 74 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70  tion REPLACE rep
226d0 6c 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f  lace REPLACE..</
226e0 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45  tcl>..<p>^The RE
226f0 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73  PLACE command is
22700 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
22710 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  e "[ON CONFLICT 
22720 7c 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c  | INSERT OR REPL
22730 41 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66  ACE]".variant of
22740 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f   the [INSERT] co
22750 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c  mmand.  .This al
22760 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64 20  ias is provided 
22770 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  for compatibilit
22780 79 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61  y other SQL data
22790 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53  base engines.  S
227a0 65 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d  ee the .[INSERT]
227b0 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e   command documen
227c0 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74  tation for addit
227d0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
227e0 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a  n.</p>  ..<tcl>.
227f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
22840 53 65 63 74 69 6f 6e 20 7b 57 49 54 48 20 63 6c  Section {WITH cl
22850 61 75 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f 6d  ause} with {{com
22860 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
22870 73 69 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52 65  sions} WITH}..Re
22880 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
22890 67 72 61 6d 20 77 69 74 68 2d 63 6c 61 75 73 65  gram with-clause
228a0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d  .</tcl>..<p>Comm
228b0 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73 73  on Table Express
228c0 69 6f 6e 73 20 6f 72 20 43 54 45 73 20 61 63 74  ions or CTEs act
228d0 20 6c 69 6b 65 20 74 65 6d 70 6f 72 61 72 79 20   like temporary 
228e0 5b 76 69 65 77 73 5d 20 74 68 61 74 20 65 78 69  [views] that exi
228f0 73 74 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20  st.only for the 
22900 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73 69  duration of a si
22910 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
22920 6e 74 2e 20 20 54 68 65 72 65 20 61 72 65 20 74  nt.  There are t
22930 77 6f 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d 6d  wo kinds of.comm
22940 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22950 69 6f 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79 22  ions: "ordinary"
22960 20 61 6e 64 20 22 72 65 63 75 72 73 69 76 65 22   and "recursive"
22970 2e 20 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d 6d  . Ordinary .comm
22980 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22990 69 6f 6e 73 20 61 72 65 20 68 65 6c 70 66 75 6c  ions are helpful
229a0 20 66 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65 72   for making.quer
229b0 69 65 73 20 65 61 73 69 65 72 20 74 6f 20 75 6e  ies easier to un
229c0 64 65 72 73 74 61 6e 64 20 62 79 20 66 61 63 74  derstand by fact
229d0 6f 72 69 6e 67 0a 73 75 62 71 75 65 72 69 65 73  oring.subqueries
229e0 20 6f 75 74 20 6f 66 20 74 68 65 20 6d 61 69 6e   out of the main
229f0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a   SQL statement..
22a00 52 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  Recursive common
22a10 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
22a20 6e 73 0a 70 72 6f 76 69 64 65 20 74 68 65 20 61  ns.provide the a
22a30 62 69 6c 69 74 79 20 74 6f 20 64 6f 20 68 69 65  bility to do hie
22a40 72 61 72 63 68 69 63 61 6c 20 6f 72 0a 72 65 63  rarchical or.rec
22a50 75 72 73 69 76 65 20 71 75 65 72 69 65 73 20 6f  ursive queries o
22a60 66 20 74 72 65 65 73 20 61 6e 64 20 67 72 61 70  f trees and grap
22a70 68 73 2c 20 61 20 63 61 70 61 62 69 6c 69 74 79  hs, a capability
22a80 0a 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 74 68  .that is not oth
22a90 65 72 77 69 73 65 20 61 76 61 69 6c 61 62 6c 65  erwise available
22aa0 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67   in the SQL lang
22ab0 75 61 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63 6f  uage...<p>All co
22ac0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
22ad0 73 73 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72 79  ssions (ordinary
22ae0 20 61 6e 64 20 72 65 63 75 72 73 69 76 65 29 20   and recursive) 
22af0 61 72 65 20 0a 63 72 65 61 74 65 64 20 62 79 20  are .created by 
22b00 70 72 65 70 65 6e 64 69 6e 67 20 61 20 57 49 54  prepending a WIT
22b10 48 20 63 6c 61 75 73 65 20 69 6e 20 66 72 6f 6e  H clause in fron
22b20 74 20 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d 2c  t of a [SELECT],
22b30 20 5b 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c 45   [INSERT], [DELE
22b40 54 45 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d  TE],.or [UPDATE]
22b50 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 20 73   statement.  A s
22b60 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
22b70 65 20 63 61 6e 20 73 70 65 63 69 66 79 20 6f 6e  e can specify on
22b80 65 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e  e or more.common
22b90 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
22ba0 6e 73 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69 63  ns, some of whic
22bb0 68 20 61 72 65 20 6f 72 64 69 6e 61 72 79 20 61  h are ordinary a
22bc0 6e 64 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68  nd some of which
22bd0 0a 61 72 65 20 72 65 63 75 72 73 69 76 65 2e 0a  .are recursive..
22be0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
22bf0 74 20 6f 72 64 69 6e 61 72 79 63 74 65 20 7b 6f  t ordinarycte {o
22c00 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74  rdinary common t
22c10 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
22c20 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64 69  }</tcl>.<h3>Ordi
22c30 6e 61 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c  nary Common Tabl
22c40 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68  e Expressions</h
22c50 33 3e 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e 61  3>..<p>An ordina
22c60 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ry common table 
22c70 65 78 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b 73  expression works
22c80 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20 61   as if it were a
22c90 20 5b 76 69 65 77 5d 20 74 68 61 74 0a 65 78 69   [view] that.exi
22ca0 73 74 73 20 66 6f 72 20 74 68 65 20 64 75 72 61  sts for the dura
22cb0 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65  tion of a single
22cc0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72 64   statement.  Ord
22cd0 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62  inary common tab
22ce0 6c 65 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61  le.expressions a
22cf0 72 65 20 75 73 65 66 75 6c 20 66 6f 72 20 66 61  re useful for fa
22d00 63 74 6f 72 69 6e 67 20 6f 75 74 20 73 75 62 71  ctoring out subq
22d10 75 65 72 69 65 73 20 61 6e 64 20 6d 61 6b 69 6e  ueries and makin
22d20 67 20 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53 51  g the overall.SQ
22d30 4c 20 73 74 61 74 65 6d 65 6e 74 20 65 61 73 69  L statement easi
22d40 65 72 20 74 6f 20 72 65 61 64 20 61 6e 64 20 75  er to read and u
22d50 6e 64 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e 41  nderstand...<p>A
22d60 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e   WITH clause can
22d70 20 63 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61 72   contain ordinar
22d80 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  y common table e
22d90 78 70 72 65 73 73 69 6f 6e 73 20 65 76 65 6e 20  xpressions even 
22da0 69 66 0a 69 74 20 69 6e 63 6c 75 64 65 73 20 74  if.it includes t
22db0 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65 79  he RECURSIVE key
22dc0 77 6f 72 64 2e 20 20 54 68 65 20 75 73 65 20 6f  word.  The use o
22dd0 66 20 52 45 43 55 52 53 49 56 45 20 64 6f 65 73  f RECURSIVE does
22de0 20 6e 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d 6f   not force.commo
22df0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
22e00 6f 6e 73 20 74 6f 20 62 65 20 72 65 63 75 72 73  ons to be recurs
22e10 69 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66  ive...<tcl>.hd_f
22e20 72 61 67 6d 65 6e 74 20 72 65 63 75 72 73 69 76  ragment recursiv
22e30 65 63 74 65 20 7b 72 65 63 75 72 73 69 76 65 20  ecte {recursive 
22e40 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
22e50 72 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65 63  ressions} \.{rec
22e60 75 72 73 69 76 65 20 71 75 65 72 79 7d 0a 3c 2f  ursive query}.</
22e70 74 63 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73 69  tcl>.<h3>Recursi
22e80 76 65 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20  ve Common Table 
22e90 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  Expressions</h3>
22ea0 0a 0a 3c 70 3e 41 20 72 65 63 75 72 73 69 76 65  ..<p>A recursive
22eb0 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
22ec0 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20  pression can be 
22ed0 75 73 65 64 20 74 6f 20 77 72 69 74 65 20 61 20  used to write a 
22ee0 71 75 65 72 79 20 74 68 61 74 0a 77 61 6c 6b 73  query that.walks
22ef0 20 61 20 74 72 65 65 20 6f 72 20 67 72 61 70 68   a tree or graph
22f00 2e 20 20 41 20 72 65 63 75 72 73 69 76 65 20 63  .  A recursive c
22f10 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
22f20 65 73 73 69 6f 6e 20 68 61 73 20 74 68 65 20 73  ession has the s
22f30 61 6d 65 0a 62 61 73 69 63 20 73 79 6e 74 61 78  ame.basic syntax
22f40 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20   as an ordinary 
22f50 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
22f60 72 65 73 73 69 6f 6e 2c 20 62 75 74 20 77 69 74  ression, but wit
22f70 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  h the following.
22f80 61 64 64 69 74 69 6f 6e 61 6c 20 66 65 61 74 75  additional featu
22f90 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  res:..<ol>.<li> 
22fa0 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d  The "[select-stm
22fb0 74 5d 22 0a 20 20 20 20 20 6d 75 73 74 20 62 65  t]".     must be
22fc0 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c   a [compound sel
22fd0 65 63 74 5d 20 77 68 65 72 65 20 74 68 65 20 72  ect] where the r
22fe0 69 67 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70 6f  ight-most [compo
22ff0 75 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 20 69 73  und-operator] is
23000 0a 20 20 20 20 20 65 69 74 68 65 72 20 55 4e 49  .     either UNI
23010 4f 4e 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e  ON or UNION ALL.
23020 0a 3c 6c 69 3e 20 54 68 65 20 74 61 62 6c 65 20  .<li> The table 
23030 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65 66  named on the lef
23040 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74  t-hand side of t
23050 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20 6d 75  he AS keyword mu
23060 73 74 20 61 70 70 65 61 72 0a 20 20 20 20 20 65  st appear.     e
23070 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74  xactly once in t
23080 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
23090 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  f the right-most
230a0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
230b0 74 0a 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f  t.     of the co
230c0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20 61  mpound select, a
230d0 6e 64 20 6e 6f 77 68 65 72 65 20 65 6c 73 65 2e  nd nowhere else.
230e0 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70 75  .</ol>..<p>To pu
230f0 74 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61 79  t it another way
23100 2c 20 61 20 72 65 63 75 72 73 69 76 65 20 63 6f  , a recursive co
23110 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
23120 73 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b 20  ssion must.look 
23130 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  like the followi
23140 6e 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72 73  ng:..<tcl>Recurs
23150 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
23160 20 72 65 63 75 72 73 69 76 65 2d 63 74 65 3c 2f   recursive-cte</
23170 74 63 6c 3e 0a 0a 3c 70 3e 57 65 20 72 65 66 65  tcl>..<p>We refe
23180 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6e  r to the table n
23190 61 6d 65 64 20 62 79 20 74 68 65 20 63 74 65 2d  amed by the cte-
231a0 74 61 62 6c 65 2d 6e 61 6d 65 20 69 6e 20 61 20  table-name in a 
231b0 72 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d 6f 6e  recursive.common
231c0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
231d0 6e 20 61 73 20 74 68 65 20 22 72 65 63 75 72 73  n as the "recurs
231e0 69 76 65 20 74 61 62 6c 65 22 2e 0a 49 6e 20 74  ive table"..In t
231f0 68 65 20 72 65 63 75 72 73 69 76 65 2d 63 74 65  he recursive-cte
23200 20 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d 20   bubble diagram 
23210 61 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75 72  above, the recur
23220 73 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74 20  sive.table must 
23230 61 70 70 65 61 72 20 65 78 61 63 74 6c 79 20 6f  appear exactly o
23240 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  nce in the FROM 
23250 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 72 65  clause of the re
23260 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 0a 61  cursive-select.a
23270 6e 64 20 6d 75 73 74 20 6e 6f 74 20 61 70 70 65  nd must not appe
23280 61 72 20 61 6e 79 77 68 65 72 65 20 65 6c 73 65  ar anywhere else
23290 20 69 6e 20 65 69 74 68 65 72 20 74 68 65 20 69   in either the i
232a0 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 6f 72  nitial-select or
232b0 20 74 68 65 0a 72 65 63 75 72 73 69 76 65 2d 73   the.recursive-s
232c0 65 6c 65 63 74 2c 20 69 6e 63 6c 75 64 69 6e 67  elect, including
232d0 20 73 75 62 71 75 65 72 69 65 73 2e 20 20 54 68   subqueries.  Th
232e0 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  e initial-select
232f0 20 6d 61 79 20 62 65 0a 61 20 5b 63 6f 6d 70 6f   may be.a [compo
23300 75 6e 64 20 73 65 6c 65 63 74 5d 2c 20 62 75 74  und select], but
23310 20 69 74 20 6d 61 79 20 6e 6f 74 20 69 6e 63 6c   it may not incl
23320 75 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c  ude an ORDER BY,
23330 20 4c 49 4d 49 54 2c 20 6f 72 20 4f 46 46 53 45   LIMIT, or OFFSE
23340 54 2e 0a 54 68 65 20 72 65 63 75 72 73 69 76 65  T..The recursive
23350 2d 73 65 6c 65 63 74 20 6d 75 73 74 20 62 65 20  -select must be 
23360 61 20 73 69 6d 70 6c 65 20 73 65 6c 65 63 74 2c  a simple select,
23370 20 6e 6f 74 20 61 20 63 6f 6d 70 6f 75 6e 64 2e   not a compound.
23380 20 20 54 68 65 0a 72 65 63 75 72 73 69 76 65 2d    The.recursive-
23390 73 65 6c 65 63 74 20 69 73 20 61 6c 6c 6f 77 65  select is allowe
233a0 64 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 6e 20  d to include an 
233b0 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c  ORDER BY, LIMIT,
233c0 20 61 6e 64 2f 6f 72 20 4f 46 46 53 45 54 2e 0a   and/or OFFSET..
233d0 0a 3c 70 3e 54 68 65 20 62 61 73 69 63 20 61 6c  .<p>The basic al
233e0 67 6f 72 69 74 68 6d 20 66 6f 72 20 63 6f 6d 70  gorithm for comp
233f0 75 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  uting the conten
23400 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  t of the recursi
23410 76 65 20 74 61 62 6c 65 0a 69 73 20 61 73 20 66  ve table.is as f
23420 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c  ollows:..<ol>.<l
23430 69 3e 20 52 75 6e 20 74 68 65 20 69 6e 69 74 69  i> Run the initi
23440 61 6c 2d 73 65 6c 65 63 74 20 61 6e 64 20 61 64  al-select and ad
23450 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 74 6f  d the results to
23460 20 61 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 57   a queue..<li> W
23470 68 69 6c 65 20 74 68 65 20 71 75 65 75 65 20 69  hile the queue i
23480 73 20 6e 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f 6c  s not empty:.<ol
23490 20 74 79 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e 20   type="a">.<li> 
234a0 45 78 74 72 61 63 74 20 61 20 73 69 6e 67 6c 65  Extract a single
234b0 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 71 75   row from the qu
234c0 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72 74  eue..<li> Insert
234d0 20 74 68 61 74 20 73 69 6e 67 6c 65 20 72 6f 77   that single row
234e0 20 69 6e 74 6f 20 74 68 65 20 72 65 63 75 72 73   into the recurs
234f0 69 76 65 20 74 61 62 6c 65 0a 3c 6c 69 3e 20 50  ive table.<li> P
23500 72 65 74 65 6e 64 20 74 68 61 74 20 74 68 65 20  retend that the 
23510 73 69 6e 67 6c 65 20 72 6f 77 20 6a 75 73 74 20  single row just 
23520 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68 65  extracted is the
23530 20 6f 6e 6c 79 0a 20 20 20 20 20 72 6f 77 20 69   only.     row i
23540 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  n the recursive 
23550 74 61 62 6c 65 20 61 6e 64 20 72 75 6e 20 74 68  table and run th
23560 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
23570 63 74 2c 0a 20 20 20 20 20 61 64 64 69 6e 67 20  ct,.     adding 
23580 61 6c 6c 20 72 65 73 75 6c 74 73 20 74 6f 20 74  all results to t
23590 68 65 20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a  he queue..</ol>.
235a0 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62 61  </ol>..<p>The ba
235b0 73 69 63 20 70 72 6f 63 65 64 75 72 65 20 61 62  sic procedure ab
235c0 6f 76 65 20 6d 61 79 20 6d 6f 64 69 66 69 65 64  ove may modified
235d0 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   by the followin
235e0 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 72 75 6c  g additional rul
235f0 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  es:..<ul>.<li><p
23600 3e 0a 20 20 49 66 20 61 20 55 4e 49 4f 4e 20 6f  >.  If a UNION o
23610 70 65 72 61 74 6f 72 20 63 6f 6e 6e 65 63 74 73  perator connects
23620 20 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c   the initial-sel
23630 65 63 74 20 77 69 74 68 20 74 68 65 0a 20 20 72  ect with the.  r
23640 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
23650 20 74 68 65 6e 20 6f 6e 6c 79 20 61 64 64 20 72   then only add r
23660 6f 77 73 20 74 6f 20 74 68 65 20 71 75 65 75 65  ows to the queue
23670 20 69 66 20 6e 6f 20 69 64 65 6e 74 69 63 61 6c   if no identical
23680 20 72 6f 77 20 68 61 73 0a 20 20 62 65 65 6e 20   row has.  been 
23690 70 72 65 76 69 6f 75 73 6c 79 20 61 64 64 65 64  previously added
236a0 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20   to the queue.  
236b0 52 65 70 65 61 74 65 64 20 72 6f 77 73 20 61 72  Repeated rows ar
236c0 65 20 64 69 73 63 61 72 64 65 64 20 62 65 66 6f  e discarded befo
236d0 72 65 20 62 65 69 6e 67 0a 20 20 61 64 64 65 64  re being.  added
236e0 20 74 6f 20 74 68 65 20 71 75 65 75 65 20 65 76   to the queue ev
236f0 65 6e 20 69 66 20 74 68 65 20 72 65 70 65 61 74  en if the repeat
23700 65 64 20 72 6f 77 73 20 68 61 76 65 20 61 6c 72  ed rows have alr
23710 65 61 64 79 20 62 65 65 6e 20 65 78 74 72 61 63  eady been extrac
23720 74 65 64 0a 20 20 66 72 6f 6d 20 74 68 65 20 71  ted.  from the q
23730 75 65 75 65 20 62 79 20 74 68 65 20 72 65 63 75  ueue by the recu
23740 72 73 69 6f 6e 20 73 74 65 70 2e 20 20 49 66 20  rsion step.  If 
23750 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 20  the operator is 
23760 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74 68 65  UNION ALL,.  the
23770 6e 20 61 6c 6c 20 72 6f 77 73 20 67 65 6e 65 72  n all rows gener
23780 61 74 65 64 20 62 79 20 62 6f 74 68 20 74 68 65  ated by both the
23790 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20   initial-select 
237a0 61 6e 64 20 74 68 65 0a 20 20 72 65 63 75 72 73  and the.  recurs
237b0 69 76 65 2d 73 65 6c 65 63 74 20 61 72 65 20 61  ive-select are a
237c0 6c 77 61 79 73 20 61 64 64 65 64 20 74 6f 20 74  lways added to t
237d0 68 65 20 71 75 65 75 65 20 65 76 65 6e 20 69 66  he queue even if
237e0 20 74 68 65 79 20 61 72 65 20 72 65 70 65 61 74   they are repeat
237f0 73 2e 0a 20 20 57 68 65 6e 20 64 65 74 65 72 6d  s..  When determ
23800 69 6e 69 6e 67 20 69 66 20 61 20 72 6f 77 20 69  ining if a row i
23810 73 20 72 65 70 65 61 74 65 64 2c 20 4e 55 4c 4c  s repeated, NULL
23820 20 76 61 6c 75 65 73 20 63 6f 6d 70 61 72 65 0a   values compare.
23830 20 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61    equal to one a
23840 6e 6f 74 68 65 72 20 61 6e 64 20 6e 6f 74 20 65  nother and not e
23850 71 75 61 6c 20 74 6f 20 61 6e 79 20 6f 74 68 65  qual to any othe
23860 72 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70 3e  r value..<li><p>
23870 0a 20 20 54 68 65 20 4c 49 4d 49 54 20 63 6c 61  .  The LIMIT cla
23880 75 73 65 2c 20 69 66 20 70 72 65 73 65 6e 74 2c  use, if present,
23890 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
238a0 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
238b0 66 20 72 6f 77 73 20 74 68 61 74 0a 20 20 77 69  f rows that.  wi
238c0 6c 6c 20 65 76 65 72 20 62 65 20 61 64 64 65 64  ll ever be added
238d0 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76   to the recursiv
238e0 65 20 74 61 62 6c 65 20 69 6e 20 73 74 65 70 20  e table in step 
238f0 32 62 2e 0a 20 20 4f 6e 63 65 20 74 68 65 20 6c  2b..  Once the l
23900 69 6d 69 74 20 69 73 20 72 65 61 63 68 65 64 2c  imit is reached,
23910 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73   the recursion s
23920 74 6f 70 73 2e 0a 20 20 41 20 6c 69 6d 69 74 20  tops..  A limit 
23930 6f 66 20 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68  of zero means th
23940 61 74 20 6e 6f 20 72 6f 77 73 20 61 72 65 20 65  at no rows are e
23950 76 65 72 20 61 64 64 65 64 20 74 6f 20 74 68 65  ver added to the
23960 0a 20 20 72 65 63 75 72 73 69 76 65 20 74 61 62  .  recursive tab
23970 6c 65 2c 20 61 6e 64 20 61 20 6e 65 67 61 74 69  le, and a negati
23980 76 65 20 6c 69 6d 69 74 20 6d 65 61 6e 73 20 61  ve limit means a
23990 6e 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75 6d 62  n unlimited numb
239a0 65 72 20 6f 66 20 72 6f 77 73 0a 20 20 6d 61 79  er of rows.  may
239b0 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
239c0 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
239d0 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20  ..<li><p>.  The 
239e0 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 69  OFFSET clause, i
239f0 66 20 69 74 20 69 73 20 70 72 65 73 65 6e 74 20  f it is present 
23a00 61 6e 64 20 68 61 73 20 61 20 70 6f 73 69 74 69  and has a positi
23a10 76 65 20 76 61 6c 75 65 20 4e 2c 20 70 72 65 76  ve value N, prev
23a20 65 6e 74 73 20 74 68 65 0a 20 20 66 69 72 73 74  ents the.  first
23a30 20 4e 20 72 6f 77 73 20 66 72 6f 6d 20 62 65 69   N rows from bei
23a40 6e 67 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  ng added to the 
23a50 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e  recursive table.
23a60 0a 20 20 54 68 65 20 66 69 72 73 74 20 4e 20 72  .  The first N r
23a70 6f 77 73 20 61 72 65 20 73 74 69 6c 6c 20 70 72  ows are still pr
23a80 6f 63 65 73 73 65 64 20 62 79 20 74 68 65 20 72  ocessed by the r
23a90 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3b  ecursive-select;
23aa0 20 74 68 65 79 0a 20 20 6a 75 73 74 20 61 72 65   they.  just are
23ab0 20 6e 6f 74 20 61 64 64 65 64 20 74 6f 20 74 68   not added to th
23ac0 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
23ad0 65 2e 20 20 52 6f 77 73 20 61 72 65 20 6e 6f 74  e.  Rows are not
23ae0 20 63 6f 75 6e 74 65 64 20 74 6f 77 61 72 64 0a   counted toward.
23af0 20 20 66 75 6c 66 69 6c 6c 69 6e 67 20 74 68 65    fulfilling the
23b00 20 4c 49 4d 49 54 20 75 6e 74 69 6c 20 61 6c 6c   LIMIT until all
23b10 20 4f 46 46 53 45 54 20 72 6f 77 73 20 68 61 76   OFFSET rows hav
23b20 65 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e 0a  e been skipped..
23b30 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 6e 20  <li><p>.  If an 
23b40 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
23b50 69 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20 64  is present, it d
23b60 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6f 72  etermines the or
23b70 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
23b80 73 0a 20 20 61 72 65 20 65 78 74 72 61 63 74 65  s.  are extracte
23b90 64 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65  d from the queue
23ba0 20 69 6e 20 73 74 65 70 20 32 61 2e 20 20 49 66   in step 2a.  If
23bb0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 52 44   there is no ORD
23bc0 45 52 20 42 59 20 63 6c 61 75 73 65 2c 0a 20 20  ER BY clause,.  
23bd0 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 69  then the order i
23be0 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65  n which rows are
23bf0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 75 6e   extracted is un
23c00 64 65 66 69 6e 65 64 2e 20 20 28 49 6e 20 74 68  defined.  (In th
23c10 65 20 63 75 72 72 65 6e 74 0a 20 20 69 6d 70 6c  e current.  impl
23c20 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
23c30 71 75 65 75 65 20 62 65 63 6f 6d 65 73 20 61 20  queue becomes a 
23c40 46 49 46 4f 20 69 66 20 74 68 65 20 4f 52 44 45  FIFO if the ORDE
23c50 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f  R BY clause is o
23c60 6d 69 74 74 65 64 2c 0a 20 20 62 75 74 20 61 70  mitted,.  but ap
23c70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c  plications shoul
23c80 64 20 6e 6f 74 20 64 65 70 65 6e 64 20 6f 6e 20  d not depend on 
23c90 74 68 61 74 20 66 61 63 74 20 73 69 6e 63 65 20  that fact since 
23ca0 69 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65 2e  it might change.
23cb0 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64  ).</ul>..<tcl>hd
23cc0 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78 31 3c  _fragment rcex1<
23cd0 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65 63 75 72 73  /tcl>.<h4>Recurs
23ce0 69 76 65 20 51 75 65 72 79 20 45 78 61 6d 70 6c  ive Query Exampl
23cf0 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20  es</h4>..<p>The 
23d00 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20  following query 
23d10 72 65 74 75 72 6e 73 20 61 6c 6c 20 69 6e 74 65  returns all inte
23d20 67 65 72 73 20 62 65 74 77 65 65 6e 20 31 20 61  gers between 1 a
23d30 6e 64 20 31 30 30 30 30 30 30 3a 0a 0a 3c 62 6c  nd 1000000:..<bl
23d40 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
23d50 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
23d60 63 6e 74 28 78 29 20 41 53 20 28 56 41 4c 55 45  cnt(x) AS (VALUE
23d70 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53  S(1) UNION ALL S
23d80 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63  ELECT x+1 FROM c
23d90 6e 74 20 57 48 45 52 45 20 78 3c 31 30 30 30 30  nt WHERE x<10000
23da0 30 30 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f  00).SELECT x FRO
23db0 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  M cnt;.</pre></b
23dc0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43  lockquote>..<p>C
23dd0 6f 6e 73 69 64 65 72 20 68 6f 77 20 74 68 69 73  onsider how this
23de0 20 71 75 65 72 79 20 77 6f 72 6b 73 2e 20 20 54   query works.  T
23df0 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  he initial-selec
23e00 74 0a 72 75 6e 73 20 66 69 72 73 74 20 61 6e 64  t.runs first and
23e10 20 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c   returns a singl
23e20 65 20 72 6f 77 0a 77 69 74 68 20 61 20 73 69 6e  e row.with a sin
23e30 67 6c 65 20 63 6f 6c 75 6d 6e 20 22 31 22 2e 20  gle column "1". 
23e40 20 54 68 69 73 20 6f 6e 65 20 72 6f 77 20 69 73   This one row is
23e50 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75   added to the qu
23e60 65 75 65 2e 20 20 49 6e 0a 73 74 65 70 20 32 61  eue.  In.step 2a
23e70 2c 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69  , that one row i
23e80 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
23e90 20 74 68 65 20 71 75 65 75 65 20 61 6e 64 20 61   the queue and a
23ea0 64 64 65 64 20 74 6f 20 22 63 6e 74 22 2e 0a 54  dded to "cnt"..T
23eb0 68 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 76  hen the recursiv
23ec0 65 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e 20  e-select is run 
23ed0 69 6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77 69  in accordance wi
23ee0 74 68 20 73 74 65 70 20 32 63 20 67 65 6e 65 72  th step 2c gener
23ef0 61 74 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20 6e  ating.a single n
23f00 65 77 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75  ew row with valu
23f10 65 20 22 32 22 20 74 6f 20 61 64 64 20 74 6f 20  e "2" to add to 
23f20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 65 20  the queue.  The 
23f30 71 75 65 75 65 20 73 74 69 6c 6c 0a 68 61 73 20  queue still.has 
23f40 6f 6e 65 20 72 6f 77 2c 20 73 6f 20 73 74 65 70  one row, so step
23f50 20 32 20 72 65 70 65 61 74 73 2e 20 20 54 68 65   2 repeats.  The
23f60 20 22 32 22 20 72 6f 77 20 69 73 20 65 78 74 72   "2" row is extr
23f70 61 63 74 65 64 20 61 6e 64 20 61 64 64 65 64 20  acted and added 
23f80 74 6f 20 74 68 65 0a 72 65 63 75 72 73 69 76 65  to the.recursive
23f90 20 74 61 62 6c 65 20 62 79 20 73 74 65 70 73 20   table by steps 
23fa0 32 61 20 61 6e 64 20 32 62 2e 20 20 54 68 65 6e  2a and 2b.  Then
23fb0 20 74 68 65 20 72 6f 77 20 63 6f 6e 74 61 69 6e   the row contain
23fc0 69 6e 67 20 32 20 69 73 20 75 73 65 64 20 0a 61  ing 2 is used .a
23fd0 73 20 69 66 20 69 74 20 77 65 72 65 20 74 68 65  s if it were the
23fe0 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65 6e   complete conten
23ff0 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  t of the recursi
24000 76 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  ve table and the
24010 20 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65   .recursive-sele
24020 63 74 20 69 73 20 72 75 6e 20 61 67 61 69 6e 2c  ct is run again,
24030 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20   resulting in a 
24040 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20 22  row with value "
24050 33 22 20 62 65 69 6e 67 20 61 64 64 65 64 0a 74  3" being added.t
24060 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68  o the queue.  Th
24070 69 73 20 72 65 70 65 61 74 73 20 39 39 39 39 39  is repeats 99999
24080 39 20 74 69 6d 65 73 20 75 6e 74 69 6c 20 66 69  9 times until fi
24090 6e 61 6c 6c 79 20 61 74 20 73 74 65 70 20 32 61  nally at step 2a
240a0 20 74 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65 20   the.only value 
240b0 6f 6e 20 74 68 65 20 71 75 65 75 65 20 69 73 20  on the queue is 
240c0 61 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67  a row containing
240d0 20 31 30 30 30 30 30 30 2e 20 20 54 68 61 74 20   1000000.  That 
240e0 72 6f 77 20 69 73 0a 65 78 74 72 61 63 74 65 64  row is.extracted
240f0 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68   and added to th
24100 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
24110 65 2e 20 20 42 75 74 20 74 68 69 73 20 74 69 6d  e.  But this tim
24120 65 2c 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61  e, the.WHERE cla
24130 75 73 65 20 63 61 75 73 65 73 20 74 68 65 20 72  use causes the r
24140 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
24150 74 6f 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f 77  to return no row
24160 73 2c 20 73 6f 20 74 68 65 0a 71 75 65 75 65 20  s, so the.queue 
24170 72 65 6d 61 69 6e 73 20 65 6d 70 74 79 20 61 6e  remains empty an
24180 64 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20  d the recursion 
24190 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70  stops...<p><b>Op
241a0 74 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65 3a  timization note:
241b0 3c 2f 62 3e 0a 49 6e 20 74 68 65 20 64 69 73 63  </b>.In the disc
241c0 75 73 73 69 6f 6e 20 61 62 6f 76 65 2c 20 73 74  ussion above, st
241d0 61 74 65 6d 65 6e 74 73 20 6c 69 6b 65 20 22 69  atements like "i
241e0 6e 73 65 72 74 20 74 68 65 20 72 6f 77 20 69 6e  nsert the row in
241f0 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76 65  to.the recursive
24200 20 74 61 62 6c 65 22 20 73 68 6f 75 6c 64 20 62   table" should b
24210 65 20 75 6e 64 65 72 73 74 6f 6f 64 20 63 6f 6e  e understood con
24220 63 65 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20 6c  ceptually, not l
24230 69 74 65 72 61 6c 6c 79 2e 0a 49 74 20 73 6f 75  iterally..It sou
24240 6e 64 73 20 61 73 20 69 66 20 53 51 4c 69 74 65  nds as if SQLite
24250 20 69 73 20 61 63 63 75 6d 75 6c 61 74 69 6e 67   is accumulating
24260 20 61 20 68 75 67 65 20 74 61 62 6c 65 0a 63 6f   a huge table.co
24270 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c  ntaining one mil
24280 6c 69 6f 6e 20 72 6f 77 73 2c 20 74 68 65 6e 20  lion rows, then 
24290 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64 20 73  going back and s
242a0 63 61 6e 6e 69 6e 67 20 74 68 61 74 20 74 61 62  canning that tab
242b0 6c 65 0a 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62  le.from top to b
242c0 6f 74 74 6f 6d 20 74 6f 20 67 65 6e 65 72 61 74  ottom to generat
242d0 65 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 57  e the result.  W
242e0 68 61 74 20 72 65 61 6c 6c 79 20 68 61 70 70 65  hat really happe
242f0 6e 73 0a 69 73 20 74 68 61 74 20 74 68 65 20 71  ns.is that the q
24300 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 73  uery optimizer s
24310 65 65 73 20 74 68 61 74 20 76 61 6c 75 65 73 20  ees that values 
24320 69 6e 20 74 68 65 0a 22 63 6e 74 22 20 72 65 63  in the."cnt" rec
24330 75 72 73 69 76 65 20 74 61 62 6c 65 20 61 72 65  ursive table are
24340 20 6f 6e 6c 79 20 75 73 65 64 20 6f 6e 63 65 2e   only used once.
24350 20 20 53 6f 20 61 73 20 65 61 63 68 20 72 6f 77    So as each row
24360 20 69 73 20 61 64 64 65 64 20 74 6f 0a 74 68 65   is added to.the
24370 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
24380 2c 20 74 68 61 74 20 72 6f 77 20 69 73 20 69 6d  , that row is im
24390 6d 65 64 69 61 74 65 6c 79 20 72 65 74 75 72 6e  mediately return
243a0 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
243b0 66 20 74 68 65 20 6d 61 69 6e 0a 53 45 4c 45 43  f the main.SELEC
243c0 54 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  T statement and 
243d0 74 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e 20  then discarded. 
243e0 20 53 51 4c 69 74 65 20 64 6f 65 73 20 3c 65 6d   SQLite does <em
243f0 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d 75  >not</em> accumu
24400 6c 61 74 65 0a 61 20 74 65 6d 70 6f 72 61 72 79  late.a temporary
24410 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   table containin
24420 67 20 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73  g a million rows
24430 2e 20 20 56 65 72 79 20 6c 69 74 74 6c 65 20 6d  .  Very little m
24440 65 6d 6f 72 79 20 69 73 0a 6e 65 65 64 65 64 20  emory is.needed 
24450 74 6f 20 72 75 6e 20 74 68 65 20 61 62 6f 76 65  to run the above
24460 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76   example.  Howev
24470 65 72 2c 20 69 66 20 74 68 65 20 65 78 61 6d 70  er, if the examp
24480 6c 65 20 68 61 64 20 75 73 65 64 0a 55 4e 49 4f  le had used.UNIO
24490 4e 20 69 6e 73 74 65 61 64 20 6f 66 20 55 4e 49  N instead of UNI
244a0 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51 4c  ON ALL, then SQL
244b0 69 74 65 20 77 6f 75 6c 64 20 68 61 76 65 20 68  ite would have h
244c0 61 64 20 74 6f 20 6b 65 65 70 20 61 72 6f 75 6e  ad to keep aroun
244d0 64 0a 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c 79  d.all previously
244e0 20 67 65 6e 65 72 61 74 65 64 20 63 6f 6e 74 65   generated conte
244f0 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  nt in order to c
24500 68 65 63 6b 20 66 6f 72 20 64 75 70 6c 69 63 61  heck for duplica
24510 74 65 73 2e 0a 46 6f 72 20 74 68 69 73 20 72 65  tes..For this re
24520 61 73 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72  ason, programmer
24530 73 20 73 68 6f 75 6c 64 20 73 74 72 69 76 65 20  s should strive 
24540 74 6f 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c 4c  to use UNION ALL
24550 20 69 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49 4f   instead.of UNIO
24560 4e 20 77 68 65 6e 20 66 65 61 73 69 62 6c 65 2e  N when feasible.
24570 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20 76  ..<p>Here is a v
24580 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20  ariation on the 
24590 70 72 65 76 69 6f 75 73 20 65 78 61 6d 70 6c 65  previous example
245a0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
245b0 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
245c0 49 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53 20  IVE.  cnt(x) AS 
245d0 28 0a 20 20 20 20 20 53 45 4c 45 43 54 20 31 0a  (.     SELECT 1.
245e0 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20       UNION ALL. 
245f0 20 20 20 20 53 45 4c 45 43 54 20 78 2b 31 20 46      SELECT x+1 F
24600 52 4f 4d 20 63 6e 74 0a 20 20 20 20 20 20 4c 49  ROM cnt.      LI
24610 4d 49 54 20 31 30 30 30 30 30 30 0a 20 20 29 0a  MIT 1000000.  ).
24620 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 6e  SELECT x FROM cn
24630 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t;.</pre></block
24640 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72 65  quote>..<p>There
24650 20 61 72 65 20 74 77 6f 20 64 69 66 66 65 72 65   are two differe
24660 6e 63 65 73 20 69 6e 20 74 68 69 73 20 76 61 72  nces in this var
24670 69 61 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e 69  iation.  The ini
24680 74 69 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a 22  tial-select is."
24690 53 45 4c 45 43 54 20 31 22 20 69 6e 73 74 65 61  SELECT 1" instea
246a0 64 20 6f 66 20 22 56 41 4c 55 45 53 28 31 29 22  d of "VALUES(1)"
246b0 2e 20 20 42 75 74 20 74 68 6f 73 65 20 61 72 65  .  But those are
246c0 20 6a 75 73 74 20 64 69 66 66 65 72 65 6e 74 0a   just different.
246d0 73 79 6e 74 61 78 65 73 20 66 6f 72 20 73 61 79  syntaxes for say
246e0 69 6e 67 20 65 78 61 63 74 6c 79 20 74 68 65 20  ing exactly the 
246f0 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 54 68 65  same thing.  The
24700 20 6f 74 68 65 72 20 63 68 61 6e 67 65 20 69 73   other change is
24710 20 74 68 61 74 20 74 68 65 0a 72 65 63 75 72 73   that the.recurs
24720 69 6f 6e 20 69 73 20 73 74 6f 70 70 65 64 20 62  ion is stopped b
24730 79 20 61 20 4c 49 4d 49 54 20 72 61 74 68 65 72  y a LIMIT rather
24740 20 74 68 61 6e 20 61 20 57 48 45 52 45 20 63 6c   than a WHERE cl
24750 61 75 73 65 2e 20 20 54 68 65 20 75 73 65 20 6f  ause.  The use o
24760 66 0a 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74 68  f.LIMIT means th
24770 61 74 20 77 68 65 6e 20 74 68 65 20 6f 6e 65 2d  at when the one-
24780 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69 73  millionth row is
24790 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 22 63   added to the "c
247a0 6e 74 22 20 74 61 62 6c 65 0a 28 61 6e 64 20 72  nt" table.(and r
247b0 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 6d  eturned by the m
247c0 61 69 6e 20 53 45 4c 45 43 54 2c 20 74 68 61 6e  ain SELECT, than
247d0 6b 73 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  ks to the query 
247e0 6f 70 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e 20  optimizer).then 
247f0 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74  the recursion st
24800 6f 70 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ops immediately 
24810 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f  regardless of ho
24820 77 20 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67 68  w many rows migh
24830 74 20 62 65 0a 6c 65 66 74 20 69 6e 20 74 68 65  t be.left in the
24840 20 71 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72 65   queue.  On more
24850 20 63 6f 6d 70 6c 65 78 20 71 75 65 72 69 65 73   complex queries
24860 2c 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d  , it can sometim
24870 65 73 20 62 65 0a 64 69 66 66 69 63 75 6c 74 20  es be.difficult 
24880 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
24890 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
248a0 77 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20  will eventually 
248b0 63 61 75 73 65 20 74 68 65 0a 71 75 65 75 65 20  cause the.queue 
248c0 74 6f 20 64 72 61 69 6e 20 61 6e 64 20 74 68 65  to drain and the
248d0 20 72 65 63 75 72 73 69 6f 6e 20 74 6f 20 74 65   recursion to te
248e0 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 74 68  rminate.  But th
248f0 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77  e LIMIT clause w
24900 69 6c 6c 0a 61 6c 77 61 79 73 20 73 74 6f 70 20  ill.always stop 
24910 74 68 65 20 72 65 63 75 72 73 69 6f 6e 2e 20 20  the recursion.  
24920 53 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 70 72  So it is good pr
24930 61 63 74 69 63 65 20 74 6f 20 61 6c 77 61 79 73  actice to always
24940 20 69 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49 54   include a.LIMIT
24950 20 63 6c 61 75 73 65 20 61 73 20 61 20 73 61 66   clause as a saf
24960 65 74 79 20 69 66 20 61 6e 20 75 70 70 65 72 20  ety if an upper 
24970 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 73 69 7a  bound on the siz
24980 65 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  e of the recursi
24990 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 3c  on .is known...<
249a0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
249b0 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  rcex2</tcl>.<h4>
249c0 48 69 65 72 61 72 63 68 69 63 61 6c 20 51 75 65  Hierarchical Que
249d0 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e  ry Examples</h4>
249e0 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 61 20  ..<p>Consider a 
249f0 74 61 62 6c 65 20 74 68 61 74 20 64 65 73 63 72  table that descr
24a00 69 62 65 73 20 74 68 65 20 6d 65 6d 62 65 72 73  ibes the members
24a10 20 6f 66 20 61 6e 20 6f 72 67 61 6e 69 7a 61 74   of an organizat
24a20 69 6f 6e 20 61 73 0a 77 65 6c 6c 20 61 73 20 74  ion as.well as t
24a30 68 65 20 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d 6d  he chain-of-comm
24a40 61 6e 64 20 77 69 74 68 69 6e 20 74 68 61 74 20  and within that 
24a50 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a 3c  organization:..<
24a60 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
24a70 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72  .CREATE TABLE or
24a80 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50  g(.  name TEXT P
24a90 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f  RIMARY KEY,.  bo
24aa0 73 73 20 54 45 58 54 20 52 45 46 45 52 45 4e 43  ss TEXT REFERENC
24ab0 45 53 20 6f 72 67 2c 0a 20 20 68 65 69 67 68 74  ES org,.  height
24ac0 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74 68 65 72   INT,.  -- other
24ad0 20 63 6f 6e 74 65 6e 74 20 6f 6d 69 74 74 65 64   content omitted
24ae0 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  .);.</pre></bloc
24af0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65 72  kquote>..<p>Ever
24b00 79 20 6d 65 6d 62 65 72 20 69 6e 20 74 68 65 20  y member in the 
24b10 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73  organization has
24b20 20 61 20 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f 73   a name, and mos
24b30 74 20 6d 65 6d 62 65 72 73 20 68 61 76 65 0a 61  t members have.a
24b40 20 73 69 6e 67 6c 65 20 62 6f 73 73 2e 20 20 28   single boss.  (
24b50 54 68 65 20 68 65 61 64 20 6f 66 20 74 68 65 20  The head of the 
24b60 77 68 6f 6c 65 20 6f 72 67 61 6e 69 7a 61 74 69  whole organizati
24b70 6f 6e 20 68 61 73 20 61 20 4e 55 4c 4c 0a 22 62  on has a NULL."b
24b80 6f 73 73 22 20 66 69 65 6c 64 2e 29 20 54 68 65  oss" field.) The
24b90 20 72 6f 77 73 20 6f 66 20 74 68 65 20 22 6f 72   rows of the "or
24ba0 67 22 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  g" table form a 
24bb0 74 72 65 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69  tree...<p>Here i
24bc0 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20 63  s a query that c
24bd0 6f 6d 70 75 74 65 73 20 74 68 65 20 61 76 65 72  omputes the aver
24be0 61 67 65 20 68 65 69 67 68 74 20 6f 76 65 72 20  age height over 
24bf0 65 76 65 72 79 6f 6e 65 0a 69 6e 20 41 6c 69 63  everyone.in Alic
24c00 65 27 73 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e  e's organization
24c10 2c 20 69 6e 63 6c 75 64 69 6e 67 20 41 6c 69 63  , including Alic
24c20 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
24c30 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
24c40 53 49 56 45 0a 20 20 77 6f 72 6b 73 5f 66 6f 72  SIVE.  works_for
24c50 5f 61 6c 69 63 65 28 6e 29 20 41 53 20 28 0a 20  _alice(n) AS (. 
24c60 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65     VALUES('Alice
24c70 27 29 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20  ').    UNION.   
24c80 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
24c90 4d 20 6f 72 67 2c 20 77 6f 72 6b 73 5f 66 6f 72  M org, works_for
24ca0 5f 61 6c 69 63 65 0a 20 20 20 20 20 57 48 45 52  _alice.     WHER
24cb0 45 20 6f 72 67 2e 62 6f 73 73 3d 77 6f 72 6b 73  E org.boss=works
24cc0 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a 20 20 29  _for_alice.n.  )
24cd0 0a 53 45 4c 45 43 54 20 61 76 67 28 68 65 69 67  .SELECT avg(heig
24ce0 68 74 29 20 46 52 4f 4d 20 6f 72 67 0a 20 57 48  ht) FROM org. WH
24cf0 45 52 45 20 6f 72 67 2e 6e 61 6d 65 20 49 4e 20  ERE org.name IN 
24d00 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 3b  works_for_alice;
24d10 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
24d20 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65 78  ote>..<p>The nex
24d30 74 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20 74  t example uses t
24d40 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  wo .common table
24d50 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
24d60 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
24d70 61 75 73 65 2e 20 20 0a 54 68 65 20 66 6f 6c 6c  ause.  .The foll
24d80 6f 77 69 6e 67 20 74 61 62 6c 65 20 72 65 63 6f  owing table reco
24d90 72 64 73 20 61 20 66 61 6d 69 6c 79 20 74 72 65  rds a family tre
24da0 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
24db0 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
24dc0 4c 45 20 66 61 6d 69 6c 79 28 0a 20 20 6e 61 6d  LE family(.  nam
24dd0 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b  e TEXT PRIMARY K
24de0 45 59 2c 0a 20 20 6d 6f 6d 20 54 45 58 54 20 52  EY,.  mom TEXT R
24df0 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79  EFERENCES family
24e00 2c 0a 20 20 64 61 64 20 54 45 58 54 20 52 45 46  ,.  dad TEXT REF
24e10 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a  ERENCES family,.
24e20 20 20 62 6f 72 6e 20 44 41 54 45 54 49 4d 45 2c    born DATETIME,
24e30 0a 20 20 64 69 65 64 20 44 41 54 45 54 49 4d 45  .  died DATETIME
24e40 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66 20 73 74 69  , -- NULL if sti
24e50 6c 6c 20 61 6c 69 76 65 0a 20 20 2d 2d 20 6f 74  ll alive.  -- ot
24e60 68 65 72 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a 3c  her content.);.<
24e70 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
24e80 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 66 61 6d 69  e>..<p>The "fami
24e90 6c 79 22 20 74 61 62 6c 65 20 69 73 20 73 69 6d  ly" table is sim
24ea0 69 6c 61 72 20 74 6f 20 74 68 65 20 65 61 72 6c  ilar to the earl
24eb0 69 65 72 20 22 6f 72 67 22 20 74 61 62 6c 65 20  ier "org" table 
24ec0 65 78 63 65 70 74 20 74 68 61 74 20 0a 6e 6f 77  except that .now
24ed0 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 70   there are two p
24ee0 61 72 65 6e 74 73 20 74 6f 20 65 61 63 68 20 6d  arents to each m
24ef0 65 6d 62 65 72 2e 0a 57 65 20 77 61 6e 74 20 74  ember..We want t
24f00 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69 76 69 6e  o know all livin
24f10 67 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20 41  g ancestors of A
24f20 6c 69 63 65 2c 20 66 72 6f 6d 20 6f 6c 64 65 73  lice, from oldes
24f30 74 20 74 6f 20 79 6f 75 6e 67 65 73 74 2e 0a 41  t to youngest..A
24f40 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f  n ordinary commo
24f50 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
24f60 6f 6e 2c 20 22 70 61 72 65 6e 74 5f 6f 66 22 2c  on, "parent_of",
24f70 20 69 73 20 64 65 66 69 6e 65 64 20 66 69 72 73   is defined firs
24f80 74 2e 20 20 54 68 61 74 0a 6f 72 64 69 6e 61 72  t.  That.ordinar
24f90 79 20 43 54 45 20 69 73 20 61 20 76 69 65 77 20  y CTE is a view 
24fa0 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
24fb0 20 74 6f 20 66 69 6e 64 20 61 6c 6c 20 70 61 72   to find all par
24fc0 65 6e 74 73 20 6f 66 20 61 6e 79 0a 69 6e 64 69  ents of any.indi
24fd0 76 69 64 75 61 6c 2e 20 20 54 68 61 74 20 6f 72  vidual.  That or
24fe0 64 69 6e 61 72 79 20 43 54 45 20 69 73 20 74 68  dinary CTE is th
24ff0 65 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20 22  en used in the "
25000 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63  ancestor_of_alic
25010 65 22 0a 72 65 63 75 72 73 69 76 65 20 43 54 45  e".recursive CTE
25020 2e 20 20 54 68 65 20 72 65 63 75 72 73 69 76 65  .  The recursive
25030 20 43 54 45 20 69 73 20 74 68 65 6e 20 75 73 65   CTE is then use
25040 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20 71  d in the final q
25050 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  uery:..<blockquo
25060 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
25070 43 55 52 53 49 56 45 0a 20 20 70 61 72 65 6e 74  CURSIVE.  parent
25080 5f 6f 66 28 6e 61 6d 65 2c 20 70 61 72 65 6e 74  _of(name, parent
25090 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43 54  ) AS.    (SELECT
250a0 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20   name, mom FROM 
250b0 66 61 6d 69 6c 79 20 55 4e 49 4f 4e 20 53 45 4c  family UNION SEL
250c0 45 43 54 20 6e 61 6d 65 2c 20 64 61 64 20 46 52  ECT name, dad FR
250d0 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a 20 20 61 6e  OM family),.  an
250e0 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 28  cestor_of_alice(
250f0 6e 61 6d 65 29 20 41 53 0a 20 20 20 20 28 53 45  name) AS.    (SE
25100 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f 4d  LECT parent FROM
25110 20 70 61 72 65 6e 74 5f 6f 66 20 57 48 45 52 45   parent_of WHERE
25120 20 6e 61 6d 65 3d 27 41 6c 69 63 65 27 0a 20 20   name='Alice'.  
25130 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20     UNION ALL.   
25140 20 20 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20    SELECT parent 
25150 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 4a  FROM parent_of J
25160 4f 49 4e 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f  OIN ancestor_of_
25170 61 6c 69 63 65 20 55 53 49 4e 47 28 6e 61 6d 65  alice USING(name
25180 29 29 0a 53 45 4c 45 43 54 20 66 61 6d 69 6c 79  )).SELECT family
25190 2e 6e 61 6d 65 20 46 52 4f 4d 20 61 6e 63 65 73  .name FROM ances
251a0 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c 20 66 61  tor_of_alice, fa
251b0 6d 69 6c 79 0a 20 57 48 45 52 45 20 61 6e 63 65  mily. WHERE ance
251c0 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61  stor_of_alice.na
251d0 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20  me=family.name. 
251e0 20 20 41 4e 44 20 64 69 65 64 20 49 53 20 4e 55    AND died IS NU
251f0 4c 4c 0a 20 4f 52 44 45 52 20 42 59 20 62 6f 72  LL. ORDER BY bor
25200 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  n;.</pre></block
25210 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  quote>..<tcl>hd_
25220 66 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f  fragment rcex2</
25230 74 63 6c 3e 0a 3c 68 34 3e 51 75 65 72 69 65 73  tcl>.<h4>Queries
25240 20 41 67 61 69 6e 73 74 20 41 20 47 72 61 70 68   Against A Graph
25250 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76 65 72 73  </h4>..<p>A vers
25260 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73 74  ion control syst
25270 65 6d 20 28 56 43 53 29 20 77 69 6c 6c 20 74 79  em (VCS) will ty
25280 70 69 63 61 6c 6c 79 20 73 74 6f 72 65 20 74 68  pically store th
25290 65 20 65 76 6f 6c 76 69 6e 67 0a 76 65 72 73 69  e evolving.versi
252a0 6f 6e 73 20 6f 66 20 61 20 70 72 6f 6a 65 63 74  ons of a project
252b0 20 61 73 20 61 20 64 69 72 65 63 74 65 64 20 61   as a directed a
252c0 63 79 63 6c 69 63 20 67 72 61 70 68 20 28 44 41  cyclic graph (DA
252d0 47 29 2e 20 20 43 61 6c 6c 20 65 61 63 68 0a 76  G).  Call each.v
252e0 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 70 72  ersion of the pr
252f0 6f 6a 65 63 74 20 61 20 22 63 68 65 63 6b 69 6e  oject a "checkin
25300 22 2e 20 20 41 20 73 69 6e 67 6c 65 0a 63 68 65  ".  A single.che
25310 63 6b 69 6e 20 63 61 6e 20 68 61 76 65 20 7a 65  ckin can have ze
25320 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e  ro or more paren
25330 74 73 2e 20 20 4d 6f 73 74 20 63 68 65 63 6b 69  ts.  Most checki
25340 6e 73 20 28 65 78 63 65 70 74 20 74 68 65 0a 66  ns (except the.f
25350 69 72 73 74 29 20 68 61 76 65 20 61 20 73 69 6e  irst) have a sin
25360 67 6c 65 20 70 61 72 65 6e 74 2c 20 62 75 74 20  gle parent, but 
25370 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61  in the case of a
25380 20 6d 65 72 67 65 2c 20 61 20 63 68 65 63 6b 69   merge, a checki
25390 6e 0a 6d 69 67 68 74 20 68 61 76 65 20 74 77 6f  n.might have two
253a0 20 6f 72 20 74 68 72 65 65 20 6f 72 20 6d 6f 72   or three or mor
253b0 65 20 70 61 72 65 6e 74 73 2e 20 20 41 20 73 63  e parents.  A sc
253c0 68 65 6d 61 20 74 6f 20 6b 65 65 70 20 74 72 61  hema to keep tra
253d0 63 6b 20 6f 66 0a 63 68 65 63 6b 69 6e 73 20 61  ck of.checkins a
253e0 6e 64 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  nd the order in 
253f0 77 68 69 63 68 20 74 68 65 79 20 6f 63 63 75 72  which they occur
25400 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65   might look some
25410 74 68 69 6e 67 20 6c 69 6b 65 0a 74 68 69 73 3a  thing like.this:
25420 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
25430 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
25440 20 63 68 65 63 6b 69 6e 28 0a 20 20 69 64 20 49   checkin(.  id I
25450 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
25460 45 59 2c 0a 20 20 6d 74 69 6d 65 20 49 4e 54 45  EY,.  mtime INTE
25470 47 45 52 20 2d 2d 20 74 69 6d 65 73 74 61 6d 70  GER -- timestamp
25480 20 77 68 65 6e 20 74 68 69 73 20 63 68 65 63 6b   when this check
25490 69 6e 20 6f 63 63 75 72 72 65 64 0a 29 3b 0a 43  in occurred.);.C
254a0 52 45 41 54 45 20 54 41 42 4c 45 20 64 65 72 69  REATE TABLE deri
254b0 76 65 64 66 72 6f 6d 28 0a 20 20 78 66 72 6f 6d  vedfrom(.  xfrom
254c0 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c   INTEGER NOT NUL
254d0 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68 65  L REFERENCES che
254e0 63 6b 69 6e 2c 20 2d 2d 20 70 61 72 65 6e 74 20  ckin, -- parent 
254f0 63 68 65 63 6b 69 6e 0a 20 20 78 74 6f 20 49 4e  checkin.  xto IN
25500 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52  TEGER NOT NULL R
25510 45 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69  EFERENCES checki
25520 6e 2c 20 20 20 2d 2d 20 64 65 72 69 76 65 64 20  n,   -- derived 
25530 63 68 65 63 6b 69 6e 0a 20 20 50 52 49 4d 41 52  checkin.  PRIMAR
25540 59 20 4b 45 59 28 78 66 72 6f 6d 2c 78 74 6f 29  Y KEY(xfrom,xto)
25550 0a 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58  .);.CREATE INDEX
25560 20 64 65 72 69 76 65 64 66 72 6f 6d 5f 62 61 63   derivedfrom_bac
25570 6b 20 4f 4e 20 64 65 72 69 76 65 64 66 72 6f 6d  k ON derivedfrom
25580 28 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70  (xto,xfrom);.</p
25590 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
255a0 0a 0a 3c 70 3e 54 68 69 73 20 67 72 61 70 68 20  ..<p>This graph 
255b0 69 73 20 61 63 79 63 6c 69 63 2e 20 20 41 6e 64  is acyclic.  And
255c0 20 77 65 20 61 73 73 75 6d 65 20 74 68 61 74 20   we assume that 
255d0 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 65 76 65  the mtime of eve
255e0 72 79 0a 63 68 69 6c 64 20 63 68 65 63 6b 69 6e  ry.child checkin
255f0 20 69 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e   is no less than
25600 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 61 6c   the mtime of al
25610 6c 20 69 74 73 20 70 61 72 65 6e 74 73 2e 20 20  l its parents.  
25620 42 75 74 0a 75 6e 6c 69 6b 65 20 74 68 65 20 65  But.unlike the e
25630 61 72 6c 69 65 72 20 65 78 61 6d 70 6c 65 73 2c  arlier examples,
25640 20 74 68 69 73 20 67 72 61 70 68 20 6d 69 67 68   this graph migh
25650 74 20 68 61 76 65 20 6d 75 6c 74 69 70 6c 65 20  t have multiple 
25660 70 61 74 68 73 20 6f 66 0a 64 69 66 66 65 72 69  paths of.differi
25670 6e 67 20 6c 65 6e 67 74 68 73 20 62 65 74 77 65  ng lengths betwe
25680 65 6e 20 61 6e 79 20 74 77 6f 20 63 68 65 63 6b  en any two check
25690 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e 74  ins...<p>We want
256a0 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20 74 77 65   to know the twe
256b0 6e 74 79 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  nty most recent 
256c0 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 69 6d  ancestors in tim
256d0 65 20 28 6f 75 74 20 6f 66 0a 74 68 65 20 74 68  e (out of.the th
256e0 6f 75 73 61 6e 64 73 20 61 6e 64 20 74 68 6f 75  ousands and thou
256f0 73 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f  sands of ancesto
25700 72 73 20 69 6e 20 74 68 65 20 77 68 6f 6c 65 20  rs in the whole 
25710 44 41 47 29 20 66 6f 72 0a 63 68 65 63 6b 69 6e  DAG) for.checkin
25720 20 22 40 42 41 53 45 4c 49 4e 45 22 2e 20 20 28   "@BASELINE".  (
25730 41 20 71 75 65 72 79 20 73 69 6d 69 6c 61 72 20  A query similar 
25740 74 6f 20 74 68 69 73 20 69 73 20 75 73 65 64 0a  to this is used.
25750 62 79 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22  by the <a href="
25760 68 74 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73 69  http://www.fossi
25770 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73 73  l-scm.org/">Foss
25780 69 6c 3c 2f 61 3e 20 56 43 53 20 74 6f 0a 73 68  il</a> VCS to.sh
25790 6f 77 20 74 68 65 20 4e 20 6d 6f 73 74 20 72 65  ow the N most re
257a0 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 6f  cent ancestors o
257b0 66 20 61 20 63 68 65 63 6b 2e 20 20 46 6f 72 20  f a check.  For 
257c0 65 78 61 6d 70 6c 65 3a 0a 3c 61 20 68 72 65 66  example:.<a href
257d0 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c  ="http://www.sql
257e0 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65  ite.org/src/time
257f0 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33  line?p=trunk&n=3
25800 30 22 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71  0">http://www.sq
25810 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d  lite.org/src/tim
25820 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d  eline?p=trunk&n=
25830 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63 6b  30</a>.)..<block
25840 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
25850 20 52 45 43 55 52 53 49 56 45 0a 20 20 61 6e 63   RECURSIVE.  anc
25860 65 73 74 6f 72 28 69 64 2c 6d 74 69 6d 65 29 20  estor(id,mtime) 
25870 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20  AS (.    SELECT 
25880 69 64 2c 20 6d 74 69 6d 65 20 46 52 4f 4d 20 63  id, mtime FROM c
25890 68 65 63 6b 69 6e 20 57 48 45 52 45 20 69 64 3d  heckin WHERE id=
258a0 40 42 41 53 45 4c 49 4e 45 0a 20 20 20 20 55 4e  @BASELINE.    UN
258b0 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 64  ION.    SELECT d
258c0 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d  erivedfrom.xfrom
258d0 2c 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 0a  , checkin.mtime.
258e0 20 20 20 20 20 20 46 52 4f 4d 20 61 6e 63 65 73        FROM ances
258f0 74 6f 72 2c 20 64 65 72 69 76 65 64 66 72 6f 6d  tor, derivedfrom
25900 2c 20 63 68 65 63 6b 69 6e 0a 20 20 20 20 20 57  , checkin.     W
25910 48 45 52 45 20 61 6e 63 65 73 74 6f 72 2e 69 64  HERE ancestor.id
25920 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 74 6f  =derivedfrom.xto
25930 0a 20 20 20 20 20 20 20 41 4e 44 20 63 68 65 63  .       AND chec
25940 6b 69 6e 2e 69 64 3d 64 65 72 69 76 65 64 66 72  kin.id=derivedfr
25950 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20 20 20 4f 52  om.xfrom.     OR
25960 44 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d  DER BY checkin.m
25970 74 69 6d 65 20 44 45 53 43 0a 20 20 20 20 20 4c  time DESC.     L
25980 49 4d 49 54 20 32 30 0a 20 20 29 0a 53 45 4c 45  IMIT 20.  ).SELE
25990 43 54 20 2a 20 46 52 4f 4d 20 63 68 65 63 6b 69  CT * FROM checki
259a0 6e 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 20  n JOIN ancestor 
259b0 55 53 49 4e 47 28 69 64 29 3b 0a 3c 2f 70 72 65  USING(id);.</pre
259c0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
259d0 3c 70 3e 0a 54 68 65 20 22 4f 52 44 45 52 20 42  <p>.The "ORDER B
259e0 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20  Y checkin.mtime 
259f0 44 45 53 43 22 20 74 65 72 6d 20 69 6e 20 74 68  DESC" term in th
25a00 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
25a10 63 74 20 6d 61 6b 65 73 0a 74 68 65 20 71 75 65  ct makes.the que
25a20 72 79 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74  ry run much fast
25a30 65 72 20 62 79 20 70 72 65 76 65 6e 74 69 6e 67  er by preventing
25a40 20 69 74 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77 69   it from followi
25a50 6e 67 0a 62 72 61 6e 63 68 65 73 20 74 68 61 74  ng.branches that
25a60 20 6d 65 72 67 65 20 63 68 65 63 6b 69 6e 73 0a   merge checkins.
25a70 66 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20 20  from long ago.  
25a80 54 68 65 20 4f 52 44 45 52 20 42 59 20 66 6f 72  The ORDER BY for
25a90 63 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76  ces the recursiv
25aa0 65 2d 73 65 6c 65 63 74 20 74 6f 20 66 6f 63 75  e-select to focu
25ab0 73 0a 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  s.on the most re
25ac0 63 65 6e 74 20 63 68 65 63 6b 69 6e 73 2c 20 74  cent checkins, t
25ad0 68 65 20 6f 6e 65 73 20 77 65 20 77 61 6e 74 2e  he ones we want.
25ae0 20 20 57 69 74 68 6f 75 74 20 74 68 65 20 4f 52    Without the OR
25af0 44 45 52 20 42 59 0a 6f 6e 20 74 68 65 20 72 65  DER BY.on the re
25b00 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20  cursive-select, 
25b10 6f 6e 65 20 77 6f 75 6c 64 20 62 65 20 66 6f 72  one would be for
25b20 63 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 20 74  ced to compute t
25b30 68 65 20 63 6f 6d 70 6c 65 74 65 20 73 65 74 20  he complete set 
25b40 6f 66 0a 74 68 6f 75 73 61 6e 64 73 20 6f 66 20  of.thousands of 
25b50 61 6e 63 65 73 74 6f 72 73 2c 20 73 6f 72 74 20  ancestors, sort 
25b60 74 68 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69 6d  them all by mtim
25b70 65 2c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  e, then take the
25b80 20 74 6f 70 20 74 77 65 6e 74 79 2e 0a 54 68 65   top twenty..The
25b90 20 4f 52 44 45 52 20 42 59 20 65 73 73 65 6e 74   ORDER BY essent
25ba0 69 61 6c 6c 79 20 73 65 74 73 20 75 70 20 61 20  ially sets up a 
25bb0 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 74  priority queue t
25bc0 68 61 74 0a 66 6f 72 63 65 73 20 74 68 65 20 72  hat.forces the r
25bd0 65 63 75 72 73 69 76 65 20 71 75 65 72 79 20 74  ecursive query t
25be0 6f 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d 6f  o look at the mo
25bf0 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74  st recent ancest
25c00 6f 72 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f 77  ors first,.allow
25c10 69 6e 67 20 74 68 65 20 75 73 65 20 6f 66 20 61  ing the use of a
25c20 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74 6f   LIMIT clause to
25c30 20 72 65 73 74 72 69 63 74 20 74 68 65 20 73 63   restrict the sc
25c40 6f 70 65 20 6f 66 20 74 68 65 0a 71 75 65 72 79  ope of the.query
25c50 20 74 6f 20 6a 75 73 74 20 74 68 65 20 63 68 65   to just the che
25c60 63 6b 69 6e 73 20 6f 66 20 69 6e 74 65 72 65 73  ckins of interes
25c70 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  t...<tcl>hd_frag
25c80 6d 65 6e 74 20 77 69 74 68 6f 72 64 65 72 62 79  ment withorderby
25c90 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74 72  </tcl>.<h4>Contr
25ca0 6f 6c 6c 69 6e 67 20 44 65 70 74 68 2d 46 69 72  olling Depth-Fir
25cb0 73 74 20 56 65 72 73 75 73 20 42 72 65 61 64 74  st Versus Breadt
25cc0 68 2d 46 69 72 73 74 20 53 65 61 72 63 68 20 4f  h-First Search O
25cd0 66 20 61 20 54 72 65 65 0a 55 73 69 6e 67 20 4f  f a Tree.Using O
25ce0 52 44 45 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c 70  RDER BY</h4>..<p
25cf0 3e 41 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61  >An ORDER BY cla
25d00 75 73 65 20 6f 6e 20 74 68 65 20 72 65 63 75 72  use on the recur
25d10 73 69 76 65 2d 73 65 6c 65 63 74 20 63 61 6e 20  sive-select can 
25d20 62 65 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  be used to contr
25d30 6f 6c 0a 77 68 65 74 68 65 72 20 74 68 65 20 73  ol.whether the s
25d40 65 61 72 63 68 20 6f 66 20 61 20 74 72 65 65 20  earch of a tree 
25d50 69 73 20 64 65 70 74 68 2d 66 69 72 73 74 20 6f  is depth-first o
25d60 72 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 2e  r breadth-first.
25d70 20 20 54 6f 0a 69 6c 6c 75 73 74 72 61 74 65 2c    To.illustrate,
25d80 20 77 65 20 77 69 6c 6c 20 75 73 65 20 61 20 76   we will use a v
25d90 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20  ariation on the 
25da0 22 6f 72 67 22 20 74 61 62 6c 65 20 66 72 6f 6d  "org" table from
25db0 20 61 6e 20 65 78 61 6d 70 6c 65 0a 61 62 6f 76   an example.abov
25dc0 65 2c 20 77 69 74 68 6f 75 74 20 74 68 65 20 22  e, without the "
25dd0 68 65 69 67 68 74 22 20 63 6f 6c 75 6d 6e 2c 20  height" column, 
25de0 61 6e 64 20 77 69 74 68 20 73 6f 6d 65 20 72 65  and with some re
25df0 61 6c 20 64 61 74 61 20 69 6e 73 65 72 74 65 64  al data inserted
25e00 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
25e10 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
25e20 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45  E org(.  name TE
25e30 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  XT PRIMARY KEY,.
25e40 20 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45    boss TEXT REFE
25e50 52 45 4e 43 45 53 20 6f 72 67 0a 29 20 57 49 54  RENCES org.) WIT
25e60 48 4f 55 54 20 52 4f 57 49 44 3b 0a 49 4e 53 45  HOUT ROWID;.INSE
25e70 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55  RT INTO org VALU
25e80 45 53 28 27 41 6c 69 63 65 27 2c 4e 55 4c 4c 29  ES('Alice',NULL)
25e90 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
25ea0 67 20 56 41 4c 55 45 53 28 27 42 6f 62 27 2c 27  g VALUES('Bob','
25eb0 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54 20  Alice');.INSERT 
25ec0 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
25ed0 27 43 69 6e 64 79 27 2c 27 41 6c 69 63 65 27 29  'Cindy','Alice')
25ee0 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
25ef0 67 20 56 41 4c 55 45 53 28 27 44 61 76 65 27 2c  g VALUES('Dave',
25f00 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49  'Bob');.INSERT I
25f10 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27  NTO org VALUES('
25f20 45 6d 6d 61 27 2c 27 42 6f 62 27 29 3b 0a 49 4e  Emma','Bob');.IN
25f30 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41  SERT INTO org VA
25f40 4c 55 45 53 28 27 46 72 65 64 27 2c 27 43 69 6e  LUES('Fred','Cin
25f50 64 79 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  dy');.INSERT INT
25f60 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 47 61  O org VALUES('Ga
25f70 69 6c 27 2c 27 43 69 6e 64 79 27 29 3b 0a 3c 2f  il','Cindy');.</
25f80 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
25f90 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20  >..<p>Here is a 
25fa0 71 75 65 72 79 20 74 6f 20 73 68 6f 77 20 74 68  query to show th
25fb0 65 20 74 72 65 65 20 73 74 72 75 63 74 75 72 65  e tree structure
25fc0 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69   in a breadth-fi
25fd0 72 73 74 20 70 61 74 74 65 72 6e 3a 0a 0a 3c 62  rst pattern:..<b
25fe0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
25ff0 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
26000 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61 6d   under_alice(nam
26010 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20 20  e,level) AS (.  
26020 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27    VALUES('Alice'
26030 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c  ,0).    UNION AL
26040 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72 67  L.    SELECT org
26050 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c 69  .name, under_ali
26060 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20 20  ce.level+1.     
26070 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20 75   FROM org JOIN u
26080 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f 72  nder_alice ON or
26090 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c 69  g.boss=under_ali
260a0 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52 44  ce.name.     ORD
260b0 45 52 20 42 59 20 32 0a 20 20 29 0a 53 45 4c 45  ER BY 2.  ).SELE
260c0 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e  CT substr('.....
260d0 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33  .....',1,level*3
260e0 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75  ) || name FROM u
260f0 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72  nder_alice;.</pr
26100 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
26110 0a 3c 70 3e 54 68 65 20 22 4f 52 44 45 52 20 42  .<p>The "ORDER B
26120 59 20 32 22 20 28 77 68 69 63 68 20 6d 65 61 6e  Y 2" (which mean
26130 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 22 4f  s the same as "O
26140 52 44 45 52 20 42 59 20 75 6e 64 65 72 5f 61 6c  RDER BY under_al
26150 69 63 65 2e 6c 65 76 65 6c 2b 31 22 29 0a 63 61  ice.level+1").ca
26160 75 73 65 73 20 68 69 67 68 65 72 20 6c 65 76 65  uses higher leve
26170 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69  ls in the organi
26180 7a 61 74 69 6f 6e 20 63 68 61 72 74 20 28 77 69  zation chart (wi
26190 74 68 20 73 6d 61 6c 6c 65 72 20 22 6c 65 76 65  th smaller "leve
261a0 6c 22 20 76 61 6c 75 65 73 29 0a 74 6f 20 62 65  l" values).to be
261b0 20 70 72 6f 63 65 73 73 65 64 20 66 69 72 73 74   processed first
261c0 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  , resulting in a
261d0 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20 73   breadth-first s
261e0 65 61 72 63 68 2e 20 20 54 68 65 20 6f 75 74 70  earch.  The outp
261f0 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  ut is:..<blockqu
26200 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a  ote><pre>.Alice.
26210 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79 0a  ...Bob....Cindy.
26220 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e  ......Dave......
26230 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65 64  .Emma.......Fred
26240 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72  .......Gail.</pr
26250 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
26260 0a 3c 70 3e 42 75 74 20 69 66 20 77 65 20 63 68  .<p>But if we ch
26270 61 6e 67 65 20 74 68 65 20 4f 52 44 45 52 20 42  ange the ORDER B
26280 59 20 63 6c 61 75 73 65 20 74 6f 20 61 64 64 20  Y clause to add 
26290 74 68 65 20 22 44 45 53 43 22 20 6d 6f 64 69 66  the "DESC" modif
262a0 69 65 72 2c 20 74 68 61 74 20 77 69 6c 6c 0a 63  ier, that will.c
262b0 61 75 73 65 20 6c 6f 77 65 72 20 6c 65 76 65 6c  ause lower level
262c0 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a  s in the organiz
262d0 61 74 69 6f 6e 20 28 77 69 74 68 20 6c 61 72 67  ation (with larg
262e0 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75 65  er "level" value
262f0 73 29 20 74 6f 20 62 65 0a 70 72 6f 63 65 73 73  s) to be.process
26300 65 64 20 66 69 72 73 74 20 62 79 20 74 68 65 20  ed first by the 
26310 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
26320 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  , resulting in a
26330 20 64 65 70 74 68 2d 66 69 72 73 74 20 73 65 61   depth-first sea
26340 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  rch:..<blockquot
26350 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
26360 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f 61  URSIVE.  under_a
26370 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c 29  lice(name,level)
26380 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53   AS (.    VALUES
26390 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20 20  ('Alice',0).    
263a0 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45  UNION ALL.    SE
263b0 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20 75  LECT org.name, u
263c0 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c  nder_alice.level
263d0 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f 72  +1.      FROM or
263e0 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c 69  g JOIN under_ali
263f0 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d 75  ce ON org.boss=u
26400 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a  nder_alice.name.
26410 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32 20       ORDER BY 2 
26420 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a 20 20 29 0a  <b>DESC</b>.  ).
26430 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e  SELECT substr('.
26440 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76  .........',1,lev
26450 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52  el*3) || name FR
26460 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a  OM under_alice;.
26470 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
26480 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70  te>..<p>The outp
26490 75 74 20 6f 66 20 74 68 69 73 20 72 65 76 69 73  ut of this revis
264a0 65 64 20 71 75 65 72 79 20 69 73 3a 0a 0a 3c 62  ed query is:..<b
264b0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
264c0 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e  Alice....Bob....
264d0 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d  ...Dave.......Em
264e0 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e  ma....Cindy.....
264f0 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69  ..Fred.......Gai
26500 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  l.</pre></blockq
26510 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74  uote>..<p>When t
26520 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
26530 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  se is omitted fr
26540 6f 6d 20 74 68 65 20 72 65 63 75 72 73 69 76 65  om the recursive
26550 2d 73 65 6c 65 63 74 2c 20 74 68 65 0a 71 75 65  -select, the.que
26560 75 65 20 62 65 68 61 76 65 73 20 61 73 20 61 20  ue behaves as a 
26570 46 49 46 4f 2c 20 77 68 69 63 68 20 72 65 73 75  FIFO, which resu
26580 6c 74 73 20 69 6e 20 61 20 62 72 65 61 64 74 68  lts in a breadth
26590 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 0a 0a  -first search...
265a0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
265b0 74 20 6d 61 6e 64 65 6c 62 72 6f 74 20 7b 63 6f  t mandelbrot {co
265c0 6d 70 75 74 65 20 74 68 65 20 4d 61 6e 64 65 6c  mpute the Mandel
265d0 62 72 6f 74 20 73 65 74 7d 3c 2f 74 63 6c 3e 0a  brot set}</tcl>.
265e0 3c 68 34 3e 4f 75 74 6c 61 6e 64 69 73 68 20 52  <h4>Outlandish R
265f0 65 63 75 72 73 69 76 65 20 51 75 65 72 79 20 45  ecursive Query E
26600 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70  xamples</h4>..<p
26610 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71  >The following q
26620 75 65 72 79 20 63 6f 6d 70 75 74 65 73 20 61 6e  uery computes an
26630 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 6f   approximation o
26640 66 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74  f the Mandelbrot
26650 20 53 65 74 0a 61 6e 64 20 6f 75 74 70 75 74 73   Set.and outputs
26660 20 74 68 65 20 72 65 73 75 6c 74 20 61 73 20 41   the result as A
26670 53 43 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f 63  SCII-art:..<bloc
26680 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
26690 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 78 61  H RECURSIVE.  xa
266a0 78 69 73 28 78 29 20 41 53 20 28 56 41 4c 55 45  xis(x) AS (VALUE
266b0 53 28 2d 32 2e 30 29 20 55 4e 49 4f 4e 20 41 4c  S(-2.0) UNION AL
266c0 4c 20 53 45 4c 45 43 54 20 78 2b 30 2e 30 35 20  L SELECT x+0.05 
266d0 46 52 4f 4d 20 78 61 78 69 73 20 57 48 45 52 45  FROM xaxis WHERE
266e0 20 78 3c 31 2e 32 29 2c 0a 20 20 79 61 78 69 73   x<1.2),.  yaxis
266f0 28 79 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d  (y) AS (VALUES(-
26700 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53  1.0) UNION ALL S
26710 45 4c 45 43 54 20 79 2b 30 2e 31 20 46 52 4f 4d  ELECT y+0.1 FROM
26720 20 79 61 78 69 73 20 57 48 45 52 45 20 79 3c 31   yaxis WHERE y<1
26730 2e 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c 20 63  .0),.  m(iter, c
26740 78 2c 20 63 79 2c 20 78 2c 20 79 29 20 41 53 20  x, cy, x, y) AS 
26750 28 0a 20 20 20 20 53 45 4c 45 43 54 20 30 2c 20  (.    SELECT 0, 
26760 78 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46  x, y, 0.0, 0.0 F
26770 52 4f 4d 20 78 61 78 69 73 2c 20 79 61 78 69 73  ROM xaxis, yaxis
26780 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  .    UNION ALL. 
26790 20 20 20 53 45 4c 45 43 54 20 69 74 65 72 2b 31     SELECT iter+1
267a0 2c 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a  , cx, cy, x*x-y*
267b0 79 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20  y + cx, 2.0*x*y 
267c0 2b 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20 20 20  + cy FROM m .   
267d0 20 20 57 48 45 52 45 20 28 78 2a 78 20 2b 20 79    WHERE (x*x + y
267e0 2a 79 29 20 3c 20 34 2e 30 20 41 4e 44 20 69 74  *y) < 4.0 AND it
267f0 65 72 3c 32 38 0a 20 20 29 2c 0a 20 20 6d 32 28  er<28.  ),.  m2(
26800 69 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41 53  iter, cx, cy) AS
26810 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61   (.    SELECT ma
26820 78 28 69 74 65 72 29 2c 20 63 78 2c 20 63 79 20  x(iter), cx, cy 
26830 46 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42 59 20  FROM m GROUP BY 
26840 63 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20 61 28  cx, cy.  ),.  a(
26850 74 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  t) AS (.    SELE
26860 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  CT group_concat(
26870 20 73 75 62 73 74 72 28 27 20 2e 2b 2a 23 27 2c   substr(' .+*#',
26880 20 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34 29   1+min(iter/7,4)
26890 2c 20 31 29 2c 20 27 27 29 20 0a 20 20 20 20 46  , 1), '') .    F
268a0 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59 20  ROM m2 GROUP BY 
268b0 63 79 0a 20 20 29 0a 53 45 4c 45 43 54 20 67 72  cy.  ).SELECT gr
268c0 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69 6d  oup_concat(rtrim
268d0 28 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d 20  (t),x'0a') FROM 
268e0 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  a;.</pre></block
268f0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68  quote>..<p>In th
26900 69 73 20 71 75 65 72 79 2c 20 74 68 65 20 22 78  is query, the "x
26910 61 78 69 73 22 20 61 6e 64 20 22 79 61 78 69 73  axis" and "yaxis
26920 22 20 43 54 45 73 20 64 65 66 69 6e 65 20 74 68  " CTEs define th
26930 65 20 67 72 69 64 20 6f 66 20 70 6f 69 6e 74 73  e grid of points
26940 20 66 6f 72 0a 77 68 69 63 68 20 74 68 65 20 4d   for.which the M
26950 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 20 77 69  andelbrot Set wi
26960 6c 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61 74  ll be approximat
26970 65 64 2e 20 20 45 61 63 68 20 72 6f 77 20 69 6e  ed.  Each row in
26980 20 74 68 65 0a 22 6d 28 69 74 65 72 2c 63 78 2c   the."m(iter,cx,
26990 63 79 2c 78 2c 79 29 22 20 43 54 45 20 6d 65 61  cy,x,y)" CTE mea
269a0 6e 73 20 74 68 61 74 20 61 66 74 65 72 20 22 69  ns that after "i
269b0 74 65 72 22 20 69 74 65 72 61 74 69 6f 6e 73 2c  ter" iterations,
269c0 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 0a   the Mandelbrot.
269d0 69 74 65 72 61 74 69 6f 6e 20 73 74 61 72 74 69  iteration starti
269e0 6e 67 20 61 74 20 63 78 2c 63 79 20 68 61 73 20  ng at cx,cy has 
269f0 72 65 61 63 68 65 64 20 70 6f 69 6e 74 20 78 2c  reached point x,
26a00 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  y.  The number o
26a10 66 20 69 74 65 72 61 74 69 6f 6e 73 0a 69 6e 20  f iterations.in 
26a20 74 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20  this example is 
26a30 6c 69 6d 69 74 65 64 20 74 6f 20 32 38 20 28 77  limited to 28 (w
26a40 68 69 63 68 20 73 65 76 65 72 65 6c 79 20 6c 69  hich severely li
26a50 6d 69 74 73 20 74 68 65 20 72 65 73 6f 6c 75 74  mits the resolut
26a60 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d 70 75  ion of.the compu
26a70 74 61 74 69 6f 6e 2c 20 62 75 74 20 69 73 20 73  tation, but is s
26a80 75 66 66 69 63 69 65 6e 74 20 66 6f 72 20 6c 6f  ufficient for lo
26a90 77 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 41 53 43  w-resolution ASC
26aa0 49 49 2d 61 72 74 20 6f 75 74 70 75 74 29 2e 0a  II-art output)..
26ab0 54 68 65 20 22 6d 32 28 69 74 65 72 2c 63 78 2c  The "m2(iter,cx,
26ac0 63 79 29 22 20 43 54 45 20 68 6f 6c 64 73 20 74  cy)" CTE holds t
26ad0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
26ae0 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
26af0 72 65 61 63 68 65 64 20 77 68 65 6e 0a 73 74 61  reached when.sta
26b00 72 74 69 6e 67 20 61 74 20 70 6f 69 6e 74 20 63  rting at point c
26b10 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65  x,cy..Finally, e
26b20 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 22  ach row in the "
26b30 61 28 74 29 22 20 43 54 45 20 68 6f 6c 64 73 20  a(t)" CTE holds 
26b40 61 20 73 74 72 69 6e 67 20 0a 77 68 69 63 68 20  a string .which 
26b50 69 73 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65  is a single line
26b60 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 41   of the output A
26b70 53 43 49 49 2d 61 72 74 2e 0a 54 68 65 20 53 45  SCII-art..The SE
26b80 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61  LECT statement a
26b90 74 20 74 68 65 20 65 6e 64 20 6a 75 73 74 20 71  t the end just q
26ba0 75 65 72 69 65 73 20 74 68 65 20 22 61 22 20 43  ueries the "a" C
26bb0 54 45 20 74 6f 0a 72 65 74 72 69 65 76 65 20 61  TE to.retrieve a
26bc0 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 41 53 43 49  ll lines of ASCI
26bd0 49 2d 61 72 74 2c 20 6f 6e 65 20 62 79 20 6f 6e  I-art, one by on
26be0 65 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20 74  e...<p>Running t
26bf0 68 65 20 71 75 65 72 79 20 61 62 6f 76 65 20 69  he query above i
26c00 6e 20 61 6e 20 53 51 4c 69 74 65 20 5b 63 6f 6d  n an SQLite [com
26c10 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d  mand-line shell]
26c20 20 72 65 73 75 6c 74 73 0a 69 6e 20 74 68 65 20   results.in the 
26c30 66 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74 70 75 74  following output
26c40 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
26c50 70 72 65 3e 0a 20 20 20 20 20 20 20 20 20 20 20  pre>.           
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c70 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20           ....#. 
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ca0 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20    ..#*...       
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cc0 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23            ..+###
26cd0 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
26ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cf0 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e  .......+####....
26d00 20 20 20 2b 0a 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 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23  ..##+*##########
26d30 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20  +.++++.         
26d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d50 20 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23   .+.############
26d60 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  ######+..       
26d70 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e         .........
26d80 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23 23  ....+###########
26d90 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20  ########+.+.    
26da0 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e            ..++..
26db0 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23  #.....*#########
26dc0 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20  ############+.. 
26dd0 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b              ...+
26de0 23 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23  #######++#######
26df0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e00 2e 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e  ..          ....
26e10 2b 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +*##############
26e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e30 23 23 2e 0a 20 23 23 23 23 23 23 23 23 23 23 23  ##.. ###########
26e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e60 23 23 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20  ##....          
26e70 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23  ....+*##########
26e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e90 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20  ######..        
26ea0 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23       ...+#######
26eb0 2b 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ++##############
26ec0 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20  #########..     
26ed0 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23           ..++..#
26ee0 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23  .....*##########
26ef0 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
26f00 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
26f10 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23  .........+######
26f20 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #############+.+
26f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26f40 20 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23 23             .+.##
26f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f60 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
26f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
26f80 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e  ##+*##########+.
26f90 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20  ++++.           
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fb0 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e   .......+####...
26fc0 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20  .   +.          
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fe0 20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e         ..+####+.
26ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20      ..#*...     
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
27040 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20  ...#.           
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 20 20 20 20 20 20 20 2b 2e 0a 3c 2f 70 72           +..</pr
27070 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
27080 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
27090 74 20 73 75 64 6f 6b 75 20 7b 73 6f 6c 76 65 20  t sudoku {solve 
270a0 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d 20  Sudoku puzzles} 
270b0 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e  </tcl>.<p>This n
270c0 65 78 74 20 71 75 65 72 79 20 73 6f 6c 76 65 73  ext query solves
270d0 20 61 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65   a Sudoku puzzle
270e0 2e 20 20 54 68 65 20 73 74 61 74 65 20 6f 66 20  .  The state of 
270f0 74 68 65 20 70 75 7a 7a 6c 65 20 69 73 0a 64 65  the puzzle is.de
27100 66 69 6e 65 64 20 62 79 20 61 6e 20 38 31 2d 63  fined by an 81-c
27110 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20  haracter string 
27120 66 6f 72 6d 65 64 20 62 79 20 72 65 61 64 69 6e  formed by readin
27130 67 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  g entries from t
27140 68 65 0a 70 75 7a 7a 6c 65 20 62 6f 78 20 72 6f  he.puzzle box ro
27150 77 20 62 79 20 72 6f 77 20 66 72 6f 6d 20 6c 65  w by row from le
27160 66 74 20 74 6f 20 72 69 67 68 74 20 61 6e 64 20  ft to right and 
27170 74 68 65 6e 20 66 72 6f 6d 20 74 6f 70 20 74 6f  then from top to
27180 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73   bottom..Blank s
27190 71 75 61 72 65 73 20 69 6e 20 74 68 65 20 70 75  quares in the pu
271a0 7a 7a 6c 65 20 61 72 65 20 64 65 6e 6f 74 65 64  zzle are denoted
271b0 20 62 79 20 61 20 22 2e 22 20 63 68 61 72 61 63   by a "." charac
271c0 74 65 72 2e 20 20 0a 54 68 75 73 20 74 68 65 20  ter.  .Thus the 
271d0 69 6e 70 75 74 20 73 74 72 69 6e 67 3a 0a 0a 3c  input string:..<
271e0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e  blockquote>.53..
271f0 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39  7....6..195....9
27200 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33  8....6.8...6...3
27210 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e  4..8.3..17...2..
27220 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31  .6.6....28....41
27230 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f  9..5....8..79.</
27240 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
27250 43 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61  Corresponds to a
27260 20 70 75 7a 7a 6c 65 20 6c 69 6b 65 20 74 68 69   puzzle like thi
27270 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
27280 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
27290 31 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  1" cellpadding="
272a0 35 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74 64  5">.<tr><td>5<td
272b0 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >3<td> <td> <td>
272c0 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  7<td> <td> <td> 
272d0 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74  <td>.<tr><td>6<t
272e0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 3c 74 64  d> <td> <td>1<td
272f0 3e 39 3c 74 64 3e 35 3c 74 64 3e 20 3c 74 64 3e  >9<td>5<td> <td>
27300 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c   <td>.<tr><td> <
27310 74 64 3e 39 3c 74 64 3e 38 3c 74 64 3e 20 3c 74  td>9<td>8<td> <t
27320 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
27330 3e 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38  >6<td>.<tr><td>8
27340 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
27350 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>6<td> <td> <t
27360 64 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74 64  d> <td>3.<tr><td
27370 3e 34 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >4<td> <td> <td>
27380 38 3c 74 64 3e 20 3c 74 64 3e 33 3c 74 64 3e 20  8<td> <td>3<td> 
27390 3c 74 64 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c  <td> <td>1.<tr><
273a0 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>7<td> <td> <t
273b0 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 20 3c 74 64  d> <td>2<td> <td
273c0 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 0a 3c 74 72  > <td> <td>6.<tr
273d0 3e 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20  ><td> <td>6<td> 
273e0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
273f0 74 64 3e 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74  td>2<td>8<td>.<t
27400 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  r><td> <td> <td>
27410 20 3c 74 64 3e 34 3c 74 64 3e 31 3c 74 64 3e 39   <td>4<td>1<td>9
27420 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 35 0a  <td> <td> <td>5.
27430 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  <tr><td> <td> <t
27440 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64  d> <td> <td>8<td
27450 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e  > <td> <td>7<td>
27460 39 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  9.</table>.</blo
27470 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69  ckquote>..<p>Thi
27480 73 20 69 73 20 74 68 65 20 71 75 65 72 79 20 74  s is the query t
27490 68 61 74 20 73 6f 6c 76 65 73 20 74 68 65 20 70  hat solves the p
274a0 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  uzzle:..<blockqu
274b0 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
274c0 45 43 55 52 53 49 56 45 0a 20 20 69 6e 70 75 74  ECURSIVE.  input
274d0 28 73 75 64 29 20 41 53 20 28 0a 20 20 20 20 56  (sud) AS (.    V
274e0 41 4c 55 45 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e  ALUES('53..7....
274f0 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e  6..195....98....
27500 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e  6.8...6...34..8.
27510 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e  3..17...2...6.6.
27520 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e  ...28....419..5.
27530 2e 2e 2e 38 2e 2e 37 39 27 29 0a 20 20 29 2c 0a  ...8..79').  ),.
27540 20 20 64 69 67 69 74 73 28 7a 2c 20 6c 70 29 20    digits(z, lp) 
27550 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28  AS (.    VALUES(
27560 27 31 27 2c 20 31 29 0a 20 20 20 20 55 4e 49 4f  '1', 1).    UNIO
27570 4e 20 41 4c 4c 20 53 45 4c 45 43 54 0a 20 20 20  N ALL SELECT.   
27580 20 43 41 53 54 28 6c 70 2b 31 20 41 53 20 54 45   CAST(lp+1 AS TE
27590 58 54 29 2c 20 6c 70 2b 31 20 46 52 4f 4d 20 64  XT), lp+1 FROM d
275a0 69 67 69 74 73 20 57 48 45 52 45 20 6c 70 3c 39  igits WHERE lp<9
275b0 0a 20 20 29 2c 0a 20 20 78 28 73 2c 20 69 6e 64  .  ),.  x(s, ind
275c0 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43  ) AS (.    SELEC
275d0 54 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75 64  T sud, instr(sud
275e0 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70 75  , '.') FROM inpu
275f0 74 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  t.    UNION ALL.
27600 20 20 20 20 53 45 4c 45 43 54 0a 20 20 20 20 20      SELECT.     
27610 20 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e   substr(s, 1, in
27620 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62  d-1) || z || sub
27630 73 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 0a 20  str(s, ind+1),. 
27640 20 20 20 20 20 69 6e 73 74 72 28 20 73 75 62 73       instr( subs
27650 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20  tr(s, 1, ind-1) 
27660 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73  || z || substr(s
27670 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29 0a  , ind+1), '.' ).
27680 20 20 20 20 20 46 52 4f 4d 20 78 2c 20 64 69 67       FROM x, dig
27690 69 74 73 20 41 53 20 7a 0a 20 20 20 20 57 48 45  its AS z.    WHE
276a0 52 45 20 69 6e 64 3e 30 0a 20 20 20 20 20 20 41  RE ind>0.      A
276b0 4e 44 20 4e 4f 54 20 45 58 49 53 54 53 20 28 0a  ND NOT EXISTS (.
276c0 20 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45              SELE
276d0 43 54 20 31 0a 20 20 20 20 20 20 20 20 20 20 20  CT 1.           
276e0 20 20 20 46 52 4f 4d 20 64 69 67 69 74 73 20 41     FROM digits A
276f0 53 20 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20  S lp.           
27700 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73 75    WHERE z.z = su
27710 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31 29  bstr(s, ((ind-1)
27720 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 0a 20  /9)*9 + lp, 1). 
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f                 O
27740 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73  R z.z = substr(s
27750 2c 20 28 28 69 6e 64 2d 31 29 25 39 29 20 2b 20  , ((ind-1)%9) + 
27760 28 6c 70 2d 31 29 2a 39 20 2b 20 31 2c 20 31 29  (lp-1)*9 + 1, 1)
27770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27780 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72   OR z.z = substr
27790 28 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f 33 29  (s, (((ind-1)/3)
277a0 20 25 20 33 29 20 2a 20 33 0a 20 20 20 20 20 20   % 3) * 3.      
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277c0 20 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32 37 29    + ((ind-1)/27)
277d0 20 2a 20 32 37 20 2b 20 6c 70 0a 20 20 20 20 20   * 27 + lp.     
277e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277f0 20 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f 20 33     + ((lp-1) / 3
27800 29 20 2a 20 36 2c 20 31 29 0a 20 20 20 20 20 20  ) * 6, 1).      
27810 20 20 20 29 0a 20 20 29 0a 53 45 4c 45 43 54 20     ).  ).SELECT 
27820 73 20 46 52 4f 4d 20 78 20 57 48 45 52 45 20 69  s FROM x WHERE i
27830 6e 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  nd=0;.</pre></bl
27840 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
27850 65 20 22 69 6e 70 75 74 22 20 43 54 45 20 64 65  e "input" CTE de
27860 66 69 6e 65 73 20 74 68 65 20 69 6e 70 75 74 20  fines the input 
27870 70 75 7a 7a 6c 65 2e 0a 54 68 65 20 22 64 69 67  puzzle..The "dig
27880 69 74 73 22 20 43 54 45 20 64 65 66 69 6e 65 73  its" CTE defines
27890 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f   a table that ho
278a0 6c 64 73 20 61 6c 6c 20 64 69 67 69 74 73 20 62  lds all digits b
278b0 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 2e 0a  etween 1 and 9..
278c0 54 68 65 20 77 6f 72 6b 20 6f 66 20 73 6f 6c 76  The work of solv
278d0 69 6e 67 20 74 68 65 20 70 75 7a 7a 6c 65 20 69  ing the puzzle i
278e0 73 20 75 6e 64 65 72 74 61 6b 65 6e 20 62 79 20  s undertaken by 
278f0 74 68 65 20 22 78 22 20 43 54 45 2e 0a 41 6e 20  the "x" CTE..An 
27900 65 6e 74 72 79 20 69 6e 20 78 28 73 2c 69 6e 64  entry in x(s,ind
27910 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  ) means that the
27920 20 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74   81-character st
27930 72 69 6e 67 20 22 73 22 20 69 73 20 61 20 76 61  ring "s" is a va
27940 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c  lid.sudoku puzzl
27950 65 20 28 69 74 20 68 61 73 20 6e 6f 20 63 6f 6e  e (it has no con
27960 66 6c 69 63 74 73 29 20 61 6e 64 20 74 68 61 74  flicts) and that
27970 20 74 68 65 20 66 69 72 73 74 20 75 6e 6b 6e 6f   the first unkno
27980 77 6e 20 63 68 61 72 61 63 74 65 72 0a 69 73 20  wn character.is 
27990 61 74 20 70 6f 73 69 74 69 6f 6e 20 22 69 6e 64  at position "ind
279a0 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20 69 66 20  ", or ind==0 if 
279b0 61 6c 6c 20 63 68 61 72 61 63 74 65 72 20 70 6f  all character po
279c0 73 69 74 69 6f 6e 73 20 61 72 65 20 66 69 6c 6c  sitions are fill
279d0 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f 61 6c 2c  ed in..The goal,
279e0 20 74 68 65 6e 2c 20 69 73 20 74 6f 20 63 6f 6d   then, is to com
279f0 70 75 74 65 20 65 6e 74 72 69 65 73 20 66 6f 72  pute entries for
27a00 20 22 78 22 20 77 69 74 68 20 61 6e 20 22 69 6e   "x" with an "in
27a10 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68 65  d" of 0...<p>The
27a20 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73 20 62 79   solver works by
27a30 20 61 64 64 69 6e 67 20 6e 65 77 20 65 6e 74 72   adding new entr
27a40 69 65 73 20 74 6f 20 74 68 65 20 22 78 22 20 72  ies to the "x" r
27a50 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a  ecursive table..
27a60 47 69 76 65 6e 20 70 72 69 6f 72 20 65 6e 74 72  Given prior entr
27a70 69 65 73 2c 20 74 68 65 20 72 65 63 75 72 73 69  ies, the recursi
27a80 76 65 2d 73 65 6c 65 63 74 20 74 72 69 65 73 20  ve-select tries 
27a90 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20 73 69 6e  to fill in a sin
27aa0 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74 69 6f 6e  gle new.position
27ab0 20 77 69 74 68 20 61 6c 6c 20 76 61 6c 75 65 73   with all values
27ac0 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39   between 1 and 9
27ad0 20 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20 77   that actually w
27ae0 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70 6f 73 69  ork in that.posi
27af0 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 70 6c  tion.  The compl
27b00 69 63 61 74 65 64 20 22 4e 4f 54 20 45 58 49 53  icated "NOT EXIS
27b10 54 53 22 20 73 75 62 71 75 65 72 79 20 69 73 20  TS" subquery is 
27b20 74 68 65 20 6d 61 67 69 63 20 74 68 61 74 0a 66  the magic that.f
27b30 69 67 75 72 65 73 20 6f 75 74 20 77 68 65 74 68  igures out wheth
27b40 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 63  er or not each c
27b50 61 6e 64 69 64 61 74 65 20 22 73 22 20 73 74 72  andidate "s" str
27b60 69 6e 67 20 69 73 20 61 20 76 61 6c 69 64 0a 73  ing is a valid.s
27b70 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f 72 20  udoku puzzle or 
27b80 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 69 6e  not...<p>The fin
27b90 61 6c 20 61 6e 73 77 65 72 20 69 73 20 66 6f 75  al answer is fou
27ba0 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 66 6f  nd by looking fo
27bb0 72 20 61 20 73 74 72 69 6e 67 20 77 69 74 68 20  r a string with 
27bc0 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68 65 20 6f  ind==0..If the o
27bd0 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b 75 20 70  riginal sudoku p
27be0 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f 74 20 68  roblem did not h
27bf0 61 76 65 20 61 20 75 6e 69 71 75 65 20 73 6f 6c  ave a unique sol
27c00 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74 68 65 20  ution, then.the 
27c10 71 75 65 72 79 20 77 69 6c 6c 20 72 65 74 75 72  query will retur
27c20 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 73  n all possible s
27c30 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66 20 74 68  olutions.  If th
27c40 65 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f 62 6c  e original probl
27c50 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76 61 62 6c  em.was unsolvabl
27c60 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f 77 73 20  e, then no rows 
27c70 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64  will be returned
27c80 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
27c90 20 74 68 65 20 75 6e 69 71 75 65 0a 61 6e 73 77   the unique.answ
27ca0 65 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  er is:..<blockqu
27cb0 6f 74 65 3e 0a 35 33 34 36 37 38 39 31 32 36 37  ote>.53467891267
27cc0 32 31 39 35 33 34 38 31 39 38 33 34 32 35 36 37  2195348198342567
27cd0 38 35 39 37 36 31 34 32 33 34 32 36 38 35 33 37  8597614234268537
27ce0 39 31 37 31 33 39 32 34 38 35 36 39 36 31 35 33  9171392485696153
27cf0 37 32 38 34 32 38 37 34 31 39 36 33 35 33 34 35  7284287419635345
27d00 32 38 36 31 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75  286179.</blockqu
27d10 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c  ote>..<p>The sol
27d20 75 74 69 6f 6e 20 77 61 73 20 63 6f 6d 70 75 74  ution was comput
27d30 65 64 20 69 6e 20 6c 65 73 73 20 74 68 61 6e 20  ed in less than 
27d40 33 30 30 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73  300 milliseconds
27d50 20 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a 77 6f 72   on a modern.wor
27d60 6b 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c  kstation...<h3>L
27d70 69 6d 69 74 61 74 69 6f 6e 73 20 41 6e 64 20 43  imitations And C
27d80 61 76 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75 6c  aveats</h3>..<ul
27d90 3e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49  >.<li><p>.The WI
27da0 54 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  TH clause cannot
27db0 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
27dc0 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
27dd0 52 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20  R]..<li><p>.The 
27de0 57 49 54 48 20 63 6c 61 75 73 65 20 6d 75 73 74  WITH clause must
27df0 20 61 70 70 65 61 72 20 61 74 20 74 68 65 20 62   appear at the b
27e00 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 74 6f  eginning of a to
27e10 70 2d 6c 65 76 65 6c 20 5b 53 45 4c 45 43 54 5d  p-level [SELECT]
27e20 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 61 74   statement.or at
27e30 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
27e40 66 20 61 20 73 75 62 71 75 65 72 79 2e 20 20 54  f a subquery.  T
27e50 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 63  he WITH clause c
27e60 61 6e 6e 6f 74 20 62 65 20 70 72 65 70 65 6e 64  annot be prepend
27e70 65 64 20 74 6f 0a 74 68 65 20 73 65 63 6f 6e 64  ed to.the second
27e80 20 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 53   or subsequent S
27e90 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
27ea0 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73  of a [compound s
27eb0 65 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a  elect]..<li><p>.
27ec0 54 68 65 20 53 51 4c 3a 31 39 39 39 20 73 70 65  The SQL:1999 spe
27ed0 63 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20  c requires that 
27ee0 74 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65  the RECURSIVE ke
27ef0 79 77 6f 72 64 20 66 6f 6c 6c 6f 77 20 57 49 54  yword follow WIT
27f00 48 20 69 6e 20 61 6e 79 0a 57 49 54 48 20 63 6c  H in any.WITH cl
27f10 61 75 73 65 20 74 68 61 74 20 69 6e 63 6c 75 64  ause that includ
27f20 65 73 20 61 20 72 65 63 75 72 73 69 76 65 20 63  es a recursive c
27f30 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
27f40 65 73 73 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72  ession.  However
27f50 2c 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c  , for.compatibil
27f60 69 74 79 20 77 69 74 68 20 53 71 6c 53 65 72 76  ity with SqlServ
27f70 65 72 20 61 6e 64 20 4f 72 61 63 6c 65 2c 20 53  er and Oracle, S
27f80 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 65  QLite does not e
27f90 6e 66 6f 72 63 65 20 74 68 69 73 20 72 75 6c 65  nforce this rule
27fa0 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23  ..</ul>..<tcl>.#
27fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
28000 65 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65  ection SELECT se
28010 6c 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65  lect {SELECT que
28020 72 79 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  ry}..RecursiveBu
28030 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65  bbleDiagram sele
28040 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ct-stmt.</tcl>..
28050 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73  .<p>The SELECT s
28060 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
28070 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61   to query the da
28080 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73  tabase.  The.res
28090 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  ult of a SELECT 
280a0 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  is zero or more 
280b0 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65  rows of data whe
280c0 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20  re each row.has 
280d0 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f  a fixed number o
280e0 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20 53 45  f columns.  A SE
280f0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64  LECT statement d
28100 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 0a 61 6e 79  oes not make.any
28110 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
28120 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 54 68  database...<p>Th
28130 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d  e "[select-stmt]
28140 22 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  " syntax diagram
28150 20 61 62 6f 76 65 20 61 74 74 65 6d 70 74 73 20   above attempts 
28160 74 6f 20 73 68 6f 77 20 61 73 20 6d 75 63 68 20  to show as much 
28170 6f 66 20 74 68 65 0a 53 45 4c 45 43 54 20 73 74  of the.SELECT st
28180 61 74 65 6d 65 6e 74 20 73 79 6e 74 61 78 20 61  atement syntax a
28190 73 20 70 6f 73 73 69 62 6c 65 20 69 6e 20 61 20  s possible in a 
281a0 73 69 6e 67 6c 65 20 64 69 61 67 72 61 6d 2c 20  single diagram, 
281b0 62 65 63 61 75 73 65 20 73 6f 6d 65 20 72 65 61  because some rea
281c0 64 65 72 73 0a 66 69 6e 64 20 74 68 61 74 20 68  ders.find that h
281d0 65 6c 70 66 75 6c 2e 20 20 54 68 65 20 66 6f 6c  elpful.  The fol
281e0 6c 6f 77 69 6e 67 20 22 5b 66 61 63 74 6f 72 65  lowing "[factore
281f0 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20  d-select-stmt]" 
28200 69 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  is an alternativ
28210 65 0a 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  e.syntax diagram
28220 73 20 74 68 61 74 20 65 78 70 72 65 73 73 65 73  s that expresses
28230 20 74 68 65 20 73 61 6d 65 20 73 79 6e 74 61 78   the same syntax
28240 20 62 75 74 20 74 72 69 65 73 20 74 6f 20 62 72   but tries to br
28250 65 61 6b 20 74 68 65 20 73 79 6e 74 61 78 20 0a  eak the syntax .
28260 64 6f 77 6e 20 69 6e 74 6f 20 73 6d 61 6c 6c 65  down into smalle
28270 72 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e  r chunks...<tcl>
28280 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
28290 44 69 61 67 72 61 6d 20 2d 2d 69 6e 69 74 69 61  Diagram --initia
282a0 6c 6c 79 2d 68 69 64 64 65 6e 20 66 61 63 74 6f  lly-hidden facto
282b0 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20  red-select-stmt 
282c0 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63  select-core.</tc
282d0 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74  l>..<p>Note that
282e0 20 74 68 65 72 65 20 61 72 65 20 70 61 74 68 73   there are paths
282f0 20 74 68 72 6f 75 67 68 20 74 68 65 20 73 79 6e   through the syn
28300 74 61 78 20 64 69 61 67 72 61 6d 73 20 74 68 61  tax diagrams tha
28310 74 0a 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  t.are not allowe
28320 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20  d in practice.  
28330 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73 3a 0a 3c  Some examples:.<
28340 75 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41 4c 55 45  ul>.<li>A [VALUE
28350 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65  S] clause can be
28360 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
28370 6e 74 20 69 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e  nt in a [compoun
28380 64 20 53 45 4c 45 43 54 5d 0a 20 20 20 20 74 68  d SELECT].    th
28390 61 74 20 75 73 65 73 20 61 20 5b 57 49 54 48 5d  at uses a [WITH]
283a0 20 63 6c 61 75 73 65 2c 20 62 75 74 20 61 20 5b   clause, but a [
283b0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 74  simple SELECT] t
283c0 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a  hat consists of.
283d0 20 20 20 20 6a 75 73 74 20 61 20 5b 56 41 4c 55      just a [VALU
283e0 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f  ES] clause canno
283f0 74 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  t be preceded by
28400 20 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65   a [WITH] clause
28410 2e 0a 3c 6c 69 3e 54 68 65 20 5b 57 49 54 48 5d  ..<li>The [WITH]
28420 20 63 6c 61 75 73 65 20 6d 75 73 74 20 6f 63 63   clause must occ
28430 75 72 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  ur on the first 
28440 53 45 4c 45 43 54 20 6f 66 20 61 20 5b 63 6f 6d  SELECT of a [com
28450 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2e 0a 20  pound SELECT].. 
28460 20 20 20 49 74 20 63 61 6e 6e 6f 74 20 66 6f 6c     It cannot fol
28470 6c 6f 77 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 2d  low a [compound-
28480 6f 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e  operator]..</ul>
28490 0a 54 68 65 73 65 20 61 6e 64 20 6f 74 68 65 72  .These and other
284a0 20 73 69 6d 69 6c 61 72 20 73 79 6e 74 61 78 20   similar syntax 
284b0 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 72 65  restrictions are
284c0 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68   described in th
284d0 65 20 74 65 78 74 2e 0a 0a 3c 70 3e 54 68 65 20  e text...<p>The 
284e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
284f0 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d   is the most com
28500 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e 64  plicated command
28510 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67   in the SQL lang
28520 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74 68  uage..To make th
28530 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65 61  e description ea
28540 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20  sier to follow, 
28550 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73 73  some of the pass
28560 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63 72  ages below descr
28570 69 62 65 0a 74 68 65 20 77 61 79 20 74 68 65 20  ibe.the way the 
28580 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
28590 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
285a0 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ent is determine
285b0 64 20 61 73 20 61 20 73 65 72 69 65 73 20 6f 66  d as a series of
285c0 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20 69 6d  .steps. It is im
285d0 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70 20  portant to keep 
285e0 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68 69  in mind that thi
285f0 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c 75  s is purely illu
28600 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70 72  strative -.in pr
28610 61 63 74 69 63 65 20 6e 65 69 74 68 65 72 20 53  actice neither S
28620 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f 74  QLite nor any ot
28630 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20 69  her SQL engine i
28640 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 66 6f  s required to fo
28650 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61 6e  llow .this or an
28660 79 20 6f 74 68 65 72 20 73 70 65 63 69 66 69 63  y other specific
28670 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 74 63 6c 3e   process...<tcl>
28680 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 69 6d 70  hd_fragment simp
28690 6c 65 73 65 6c 65 63 74 20 7b 73 69 6d 70 6c 65  leselect {simple
286a0 20 53 45 4c 45 43 54 7d 3c 2f 74 63 6c 3e 0a 3c   SELECT}</tcl>.<
286b0 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63 74  h3>Simple Select
286c0 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e   Processing</h3>
286d0 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 6f 66  ..<p>The core of
286e0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
286f0 65 6e 74 20 69 73 20 61 20 22 73 69 6d 70 6c 65  ent is a "simple
28700 20 53 45 4c 45 43 54 22 20 73 68 6f 77 6e 20 62   SELECT" shown b
28710 79 20 74 68 65 0a 5b 73 65 6c 65 63 74 2d 63 6f  y the.[select-co
28720 72 65 5d 20 61 6e 64 20 5b 73 69 6d 70 6c 65 2d  re] and [simple-
28730 73 65 6c 65 63 74 2d 73 74 6d 74 5d 20 73 79 6e  select-stmt] syn
28740 74 61 78 20 64 69 61 67 72 61 6d 73 20 62 65 6c  tax diagrams bel
28750 6f 77 2e 20 20 0a 49 6e 20 70 72 61 63 74 69 63  ow.  .In practic
28760 65 2c 20 6d 6f 73 74 20 53 45 4c 45 43 54 20 73  e, most SELECT s
28770 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 73 69  tatements are si
28780 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
28790 65 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c 3e 0a 52  ements...<tcl>.R
287a0 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
287b0 61 67 72 61 6d 20 73 69 6d 70 6c 65 2d 73 65 6c  agram simple-sel
287c0 65 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d  ect-stmt select-
287d0 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  core.</tcl>..<p>
287e0 47 65 6e 65 72 61 74 69 6e 67 20 74 68 65 20 72  Generating the r
287f0 65 73 75 6c 74 73 20 6f 66 20 61 20 73 69 6d 70  esults of a simp
28800 6c 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d  le SELECT.statem
28810 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74 65 64  ent is presented
28820 20 61 73 20 61 20 66 6f 75 72 20 73 74 65 70 20   as a four step 
28830 70 72 6f 63 65 73 73 20 69 6e 20 74 68 65 20 64  process in the d
28840 65 73 63 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77  escription below
28850 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c  :..<ol>.  <li> <
28860 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20  p>[FROM clause] 
28870 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20  processing: The 
28880 69 6e 70 75 74 20 64 61 74 61 20 66 6f 72 20 74  input data for t
28890 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  he simple SELECT
288a0 20 69 73 0a 20 20 20 20 20 20 20 64 65 74 65 72   is.       deter
288b0 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e 70 75 74  mined. The input
288c0 20 64 61 74 61 20 69 73 20 65 69 74 68 65 72 20   data is either 
288d0 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e  implicitly a sin
288e0 67 6c 65 20 72 6f 77 20 77 69 74 68 20 30 0a 20  gle row with 0. 
288f0 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69        columns (i
28900 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 46 52  f there is no FR
28910 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72 20 69 73  OM clause) or is
28920 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
28930 68 65 20 46 52 4f 4d 0a 20 20 20 20 20 20 20 63  he FROM.       c
28940 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70  lause..  <li> <p
28950 3e 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20  >[WHERE clause] 
28960 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20  processing: The 
28970 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 66 69  input data is fi
28980 6c 74 65 72 65 64 20 75 73 69 6e 67 20 74 68 65  ltered using the
28990 20 57 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c   WHERE.       cl
289a0 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e  ause expression.
289b0 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52    .  <li> <p>[GR
289c0 4f 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c  OUP BY|GROUP BY,
289d0 20 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75   HAVING and resu
289e0 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73  lt-column expres
289f0 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67  sion] processing
28a00 3a 20 0a 20 20 20 20 20 20 20 54 68 65 20 73 65  : .       The se
28a10 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
28a20 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20   is computed by 
28a30 61 67 67 72 65 67 61 74 69 6e 67 20 74 68 65 20  aggregating the 
28a40 64 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74  data according t
28a50 6f 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f  o.       any GRO
28a60 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64  UP BY clause and
28a70 20 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65   calculating the
28a80 20 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72   result-set expr
28a90 65 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a  essions for the.
28aa0 20 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74         rows of t
28ab0 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75  he filtered inpu
28ac0 74 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c  t dataset.  .  <
28ad0 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54  li> <p>[DISTINCT
28ae0 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65  |DISTINCT/ALL ke
28af0 79 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e  yword] processin
28b00 67 3a 20 49 66 20 74 68 65 20 71 75 65 72 79 20  g: If the query 
28b10 69 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20  is a "SELECT.   
28b20 20 20 20 20 44 49 53 54 49 4e 43 54 22 20 71 75      DISTINCT" qu
28b30 65 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72  ery, duplicate r
28b40 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ows are removed 
28b50 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20  from the set of 
28b60 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f  result rows..</o
28b70 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  l>..<p>There are
28b80 20 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69   two types of si
28b90 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
28ba0 65 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74  ement - aggregat
28bb0 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65  e and .non-aggre
28bc0 67 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41  gate queries. ^A
28bd0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
28be0 74 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61  tatement is an a
28bf0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 69  ggregate query i
28c00 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69  f.it contains ei
28c10 74 68 65 72 20 61 20 47 52 4f 55 50 20 42 59 20  ther a GROUP BY 
28c20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72  clause or one or
28c30 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
28c40 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65  functions.in the
28c50 20 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74   result-set. ^Ot
28c60 68 65 72 77 69 73 65 2c 20 69 66 20 61 20 73 69  herwise, if a si
28c70 6d 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74  mple SELECT cont
28c80 61 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74  ains no aggregat
28c90 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61  e.functions or a
28ca0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
28cb0 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67  , it is a non-ag
28cc0 67 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a  gregate query...
28cd0 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69  <p><b>1. Determi
28ce0 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20  nation of input 
28cf0 64 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73  data (FROM claus
28d00 65 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f  e processing).</
28d10 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
28d20 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f  ent fromclause</
28d30 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
28d40 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75  words {FROM clau
28d50 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  se}</tcl>..<p>Th
28d60 65 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65  e input data use
28d70 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45  d by a simple SE
28d80 4c 45 43 54 20 71 75 65 72 79 20 69 73 20 61 20  LECT query is a 
28d90 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20  set of <i>N</i> 
28da0 72 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c  rows .each <i>M<
28db0 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65  /i> columns wide
28dc0 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46  ...<p>^(If the F
28dd0 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d  ROM clause is om
28de0 69 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d  itted from a sim
28df0 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
28e00 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a  ment, then the .
28e10 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 69 6d  input data is im
28e20 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c  plicitly a singl
28e30 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d  e row zero colum
28e40 6e 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20  ns wide)^ (i.e. 
28e50 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c  <i>N</i>=1 and.<
28e60 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e  i>M</i>=0)...<p>
28e70 49 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65  If a FROM clause
28e80 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74   is specified, t
28e90 68 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68  he data on which
28ea0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
28eb0 20 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20   query.operates 
28ec0 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f  comes from the o
28ed0 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
28ee0 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
28ef0 28 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e  (SELECT statemen
28f00 74 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69  ts.in parenthesi
28f10 73 29 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c  s) specified fol
28f20 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20  lowing the FROM 
28f30 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 71  keyword. ^A subq
28f40 75 65 72 79 20 73 70 65 63 69 66 69 65 64 0a 69  uery specified.i
28f50 6e 20 74 68 65 20 74 61 62 6c 65 2d 6f 72 2d 73  n the table-or-s
28f60 75 62 71 75 65 72 79 20 66 6f 6c 6c 6f 77 69 6e  ubquery followin
28f70 67 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  g the FROM claus
28f80 65 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53  e in a .simple S
28f90 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
28fa0 69 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69 66  is.handled as if
28fb0 20 69 74 20 77 61 73 20 61 20 74 61 62 6c 65 20   it was a table 
28fc0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64  containing the d
28fd0 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20  ata returned by 
28fe0 65 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73 75  executing the.su
28ff0 62 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74  bquery statement
29000 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  . ^Each column o
29010 66 20 74 68 65 20 73 75 62 71 75 65 72 79 20 68  f the subquery h
29020 61 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f  as the.[collatio
29030 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  n|collation sequ
29040 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66 69 6e  ence] and [affin
29050 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 72 72  ity] of the corr
29060 65 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73  esponding expres
29070 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62 71  sion.in the subq
29080 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 0a  uery statement..
29090 0a 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73  .<p>^If there is
290a0 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 74   only a single t
290b0 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
290c0 20 69 6e 20 74 68 65 20 46 52 4f 4d 0a 63 6c 61   in the FROM.cla
290d0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 69 6e  use, then the in
290e0 70 75 74 20 64 61 74 61 20 75 73 65 64 20 62 79  put data used by
290f0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
29100 65 6d 65 6e 74 20 69 73 20 74 68 65 20 63 6f 6e  ement is the con
29110 74 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d  tents of the.nam
29120 65 64 20 74 61 62 6c 65 2e 20 5e 49 66 20 74 68  ed table. ^If th
29130 65 72 65 20 69 73 20 6d 6f 72 65 20 74 68 61 6e  ere is more than
29140 20 6f 6e 65 20 74 61 62 6c 65 20 6f 72 20 73 75   one table or su
29150 62 71 75 65 72 79 20 69 6e 20 46 52 4f 4d 20 63  bquery in FROM c
29160 6c 61 75 73 65 0a 74 68 65 6e 20 74 68 65 20 63  lause.then the c
29170 6f 6e 74 65 6e 74 73 20 6f 66 20 61 6c 6c 20 74  ontents of all t
29180 61 62 6c 65 73 20 61 6e 64 2f 6f 72 20 73 75 62  ables and/or sub
29190 71 75 65 72 69 65 73 0a 61 72 65 20 6a 6f 69 6e  queries.are join
291a0 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65  ed into a single
291b0 20 64 61 74 61 73 65 74 20 66 6f 72 20 74 68 65   dataset for the
291c0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
291d0 74 61 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72  tatement to oper
291e0 61 74 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20  ate on..Exactly 
291f0 68 6f 77 20 74 68 65 20 64 61 74 61 20 69 73 20  how the data is 
29200 63 6f 6d 62 69 6e 65 64 20 64 65 70 65 6e 64 73  combined depends
29210 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 63   on the specific
29220 20 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 5d   [join-operator]
29230 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74   and.[join-const
29240 72 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63  raint] used to c
29250 6f 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65  onnect the table
29260 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
29270 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c  together...<p>Al
29280 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74  l joins in SQLit
29290 65 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74  e are based on t
292a0 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
292b0 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74  duct of the left
292c0 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20   and.right-hand 
292d0 64 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63  datasets. ^The c
292e0 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61  olumns of the ca
292f0 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
29300 64 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20  dataset are, in 
29310 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20  .order, all the 
29320 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c  columns of the l
29330 65 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  eft-hand dataset
29340 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c   followed by all
29350 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20   the columns.of 
29360 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64  the right-hand d
29370 61 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69  ataset. ^There i
29380 73 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63  s a row in the c
29390 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
293a0 20 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20   dataset.formed 
293b0 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63  by combining eac
293c0 68 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61  h unique combina
293d0 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72  tion of a row fr
293e0 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  om the left-hand
293f0 20 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64   .and right-hand
29400 20 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20   datasets. ^(In 
29410 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
29420 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61  the left-hand da
29430 74 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f  taset consists o
29440 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c  f.<i>N<sub><smal
29450 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  l>left</small></
29460 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66  sub></i> rows of
29470 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c   .<i>M<sub><smal
29480 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  l>left</small></
29490 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  sub></i> columns
294a0 2c 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d  , and the right-
294b0 68 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a  hand dataset of.
294c0 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>N<sub><small>
294d0 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  right</small></s
294e0 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 0a  ub></i> rows of.
294f0 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>M<sub><small>
29500 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  right</small></s
29510 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  ub></i> columns,
29520 20 74 68 65 6e 20 74 68 65 20 63 61 72 74 65 73   then the cartes
29530 69 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61  ian product is a
29540 0a 64 61 74 61 73 65 74 20 6f 66 20 0a 3c 69 3e  .dataset of .<i>
29550 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66  N<sub><small>lef
29560 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 26  t</small></sub>&
29570 74 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c 73 6d 61  times;N<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 0a 72 6f 77 73 2c  </sub></i>.rows,
295a0 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67   each containing
295b0 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c   .<i>M<sub><smal
295c0 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  l>left</small></
295d0 73 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73 6d 61 6c  sub>+M<sub><smal
295e0 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c  l>right</small><
295f0 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e  /sub></i> column
29600 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  s.)^..<p>^If the
29610 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69   join-operator i
29620 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c 20  s "CROSS JOIN", 
29630 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a  "INNER JOIN", "J
29640 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61 0a  OIN" or a comma.
29650 28 22 2c 22 29 20 61 6e 64 20 74 68 65 72 65 20  (",") and there 
29660 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49 4e  is no ON or USIN
29670 47 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  G clause, then t
29680 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
29690 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79 20   join is.simply 
296a0 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
296b0 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66  oduct of the lef
296c0 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
296d0 20 64 61 74 61 73 65 74 73 2e 20 0a 49 66 20 6a   datasets. .If j
296e0 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 64 6f 65  oin-operator doe
296f0 73 20 68 61 76 65 20 4f 4e 20 6f 72 20 55 53 49  s have ON or USI
29700 4e 47 20 63 6c 61 75 73 65 73 2c 20 74 68 6f 73  NG clauses, thos
29710 65 20 61 72 65 20 68 61 6e 64 6c 65 64 20 61 63  e are handled ac
29720 63 6f 72 64 69 6e 67 20 74 6f 0a 74 68 65 20 66  cording to.the f
29730 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20  ollowing bullet 
29740 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20  points:..<ul>.  
29750 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
29760 72 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75  re is an ON clau
29770 73 65 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 65  se then the ON e
29780 78 70 72 65 73 73 69 6f 6e 20 69 73 0a 20 20 20  xpression is.   
29790 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 66 6f      evaluated fo
297a0 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  r each row of th
297b0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
297c0 75 63 74 20 61 73 20 61 20 0a 20 20 20 20 20 20  uct as a .      
297d0 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
297e0 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73  sion]. Only rows
297f0 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 65   for which the e
29800 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
29810 74 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20 74  tes to .       t
29820 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64  rue are included
29830 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65   from the datase
29840 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  t.)^..  <li> <p>
29850 5e 49 66 20 74 68 65 72 65 20 69 73 20 61 20 55  ^If there is a U
29860 53 49 4e 47 20 63 6c 61 75 73 65 0a 20 20 20 20  SING clause.    
29870 20 20 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20     then each of 
29880 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  the column names
29890 20 73 70 65 63 69 66 69 65 64 20 6d 75 73 74 20   specified must 
298a0 65 78 69 73 74 20 69 6e 20 74 68 65 20 64 61 74  exist in the dat
298b0 61 73 65 74 73 20 74 6f 20 0a 20 20 20 20 20 20  asets to .      
298c0 20 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61   both the left a
298d0 6e 64 20 72 69 67 68 74 20 6f 66 20 74 68 65 20  nd right of the 
298e0 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 2e 20 5e  join-operator. ^
298f0 28 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f  (For each pair o
29900 66 20 6e 61 6d 65 64 0a 20 20 20 20 20 20 20 63  f named.       c
29910 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78 70 72  olumns, the expr
29920 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20  ession "lhs.X = 
29930 72 68 73 2e 58 22 20 69 73 20 65 76 61 6c 75 61  rhs.X" is evalua
29940 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
29950 20 6f 66 0a 20 20 20 20 20 20 20 74 68 65 20 63   of.       the c
29960 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
29970 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65   as a [boolean e
29980 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79  xpression]. Only
29990 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 0a   rows for which.
299a0 20 20 20 20 20 20 20 61 6c 6c 20 73 75 63 68 20         all such 
299b0 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
299c0 75 61 74 65 73 20 74 6f 20 74 72 75 65 20 61 72  uates to true ar
299d0 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20  e included from 
299e0 74 68 65 0a 20 20 20 20 20 20 20 72 65 73 75 6c  the.       resul
299f0 74 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63  t set.)^ ^When c
29a00 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73 20  omparing values 
29a10 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61  as a result of a
29a20 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74   USING clause, t
29a30 68 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c  he.       normal
29a40 20 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c   rules for handl
29a50 69 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c 20  ing affinities, 
29a60 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
29a70 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20  ces and NULL.   
29a80 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63 6f      values in co
29a90 6d 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e  mparisons apply.
29aa0 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f   ^The column fro
29ab0 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 6f 6e  m the dataset on
29ac0 20 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66 74   the.       left
29ad0 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68  -hand side of th
29ae0 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  e join-operator 
29af0 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  is considered to
29b00 20 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d   be on the left-
29b10 68 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64 65  hand.       side
29b20 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
29b30 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29 20  on operator (=) 
29b40 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
29b50 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20   of collation . 
29b60 20 20 20 20 20 20 73 65 71 75 65 6e 63 65 20 61        sequence a
29b70 6e 64 20 61 66 66 69 6e 69 74 79 20 70 72 65 63  nd affinity prec
29b80 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20  edence...       
29b90 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61 69  <p>^For each pai
29ba0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65  r of columns ide
29bb0 6e 74 69 66 69 65 64 20 62 79 20 61 20 55 53 49  ntified by a USI
29bc0 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20 63  NG clause, the c
29bd0 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f  olumn.       fro
29be0 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  m the right-hand
29bf0 20 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69 74   dataset is omit
29c00 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69  ted from the joi
29c10 6e 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68  ned dataset. ^Th
29c20 69 73 20 0a 20 20 20 20 20 20 20 69 73 20 74 68  is .       is th
29c30 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63  e only differenc
29c40 65 20 62 65 74 77 65 65 6e 20 61 20 55 53 49 4e  e between a USIN
29c50 47 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74 73  G clause and its
29c60 20 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20   equivalent ON. 
29c70 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74        constraint
29c80 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49  ...  <li> <p>^(I
29c90 66 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65  f the NATURAL ke
29ca0 79 77 6f 72 64 20 69 73 20 69 6e 20 74 68 65 20  yword is in the 
29cb0 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74 68  join-operator th
29cc0 65 6e 20 61 6e 0a 20 20 20 20 20 20 20 69 6d 70  en an.       imp
29cd0 6c 69 63 69 74 20 55 53 49 4e 47 20 63 6c 61 75  licit USING clau
29ce0 73 65 20 69 73 20 61 64 64 65 64 20 74 6f 20 74  se is added to t
29cf0 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69  he join-constrai
29d00 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c 69 63 69  nts. The implici
29d10 74 0a 20 20 20 20 20 20 20 55 53 49 4e 47 20 63  t.       USING c
29d20 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 65  lause contains e
29d30 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ach of the colum
29d40 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 61 70 70  n names that app
29d50 65 61 72 20 69 6e 20 62 6f 74 68 0a 20 20 20 20  ear in both.    
29d60 20 20 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20     the left and 
29d70 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74  right-hand input
29d80 20 64 61 74 61 73 65 74 73 2e 29 5e 20 5e 49 66   datasets.)^ ^If
29d90 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
29da0 67 68 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20  ght-hand.       
29db0 69 6e 70 75 74 20 64 61 74 61 73 65 74 73 20 66  input datasets f
29dc0 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e  eature no common
29dd0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74   column names, t
29de0 68 65 6e 20 74 68 65 20 4e 41 54 55 52 41 4c 20  hen the NATURAL 
29df0 6b 65 79 77 6f 72 64 0a 20 20 20 20 20 20 20 68  keyword.       h
29e00 61 73 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20  as no effect on 
29e10 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
29e20 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e  he join. ^A USIN
29e30 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d  G or ON clause m
29e40 61 79 0a 20 20 20 20 20 20 20 6e 6f 74 20 62 65  ay.       not be
29e50 20 61 64 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e   added to a join
29e60 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
29e70 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77  the NATURAL keyw
29e80 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ord...  <li> <p>
29e90 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  ^(If the join-op
29ea0 65 72 61 74 6f 72 20 69 73 20 61 20 22 4c 45 46  erator is a "LEF
29eb0 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54  T JOIN" or "LEFT
29ec0 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68   OUTER JOIN", th
29ed0 65 6e 0a 20 20 20 20 20 20 20 61 66 74 65 72 0a  en.       after.
29ee0 20 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72         the ON or
29ef0 20 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67   USING filtering
29f00 20 63 6c 61 75 73 65 73 20 68 61 76 65 20 62 65   clauses have be
29f10 65 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65  en applied, an e
29f20 78 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20  xtra row is .   
29f30 20 20 20 20 61 64 64 65 64 20 74 6f 20 74 68 65      added to the
29f40 20 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63 68   output for each
29f50 20 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67   row in the orig
29f60 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69  inal left-hand i
29f70 6e 70 75 74 20 0a 20 20 20 20 20 20 20 64 61 74  nput .       dat
29f80 61 73 65 74 20 74 68 61 74 20 63 6f 72 72 65 73  aset that corres
29f90 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73  ponds to no rows
29fa0 20 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63   at all in the c
29fb0 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20  omposite.       
29fc0 64 61 74 61 73 65 74 20 28 69 66 20 61 6e 79 29  dataset (if any)
29fd0 2e 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72  .)^ ^The added r
29fe0 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c  ows contain NULL
29ff0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
2a000 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68  olumns.       th
2a010 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  at would normall
2a020 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73  y contain values
2a030 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
2a040 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75   right-hand inpu
2a050 74 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74  t.       dataset
2a060 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28  .  .</ul>..<p>^(
2a070 57 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74  When more than t
2a080 77 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f  wo tables are jo
2a090 69 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61 73  ined together as
2a0a0 20 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20   part of a FROM 
2a0b0 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e  clause,.the join
2a0c0 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20   operations are 
2a0d0 70 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64  processed in ord
2a0e0 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  er from left to 
2a0f0 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20  right. In other 
2a100 0a 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d  .words, the FROM
2a110 20 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d   clause (A join-
2a120 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32  op-1 B join-op-2
2a130 20 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20   C) is computed 
2a140 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d  as .((A join-op-
2a150 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43  1 B) join-op-2 C
2a160 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ).)^..<tcl>hd_fr
2a170 61 67 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69 6e  agment crossjoin
2a180 20 7b 74 72 65 61 74 73 20 74 68 65 20 43 52 4f   {treats the CRO
2a190 53 53 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f 72  SS JOIN operator
2a1a0 20 73 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c   specially}</tcl
2a1b0 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74  >.<p><b>Side not
2a1c0 65 3a 20 53 70 65 63 69 61 6c 20 68 61 6e 64 6c  e: Special handl
2a1d0 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49  ing of CROSS JOI
2a1e0 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69 73  N.</b>.^There is
2a1f0 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62   no difference b
2a200 65 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e 45  etween the "INNE
2a210 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20  R JOIN", "JOIN" 
2a220 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65  and "," join.ope
2a230 72 61 74 6f 72 73 2e 20 54 68 65 79 20 61 72 65  rators. They are
2a240 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74 65   completely inte
2a250 72 63 68 61 6e 67 65 61 62 6c 65 20 69 6e 20 53  rchangeable in S
2a260 51 4c 69 74 65 2e 0a 5e 28 54 68 65 20 22 43 52  QLite..^(The "CR
2a270 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f  OSS JOIN" join o
2a280 70 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65 73  perator produces
2a290 20 74 68 65 20 73 61 6d 65 20 72 65 73 75 6c 74   the same result
2a2a0 20 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20   as the ."INNER 
2a2b0 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e  JOIN", "JOIN" an
2a2c0 64 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29  d "," operators)
2a2d0 5e 2c 20 62 75 74 20 69 73 20 0a 5b 43 52 4f 53  ^, but is .[CROS
2a2e0 53 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65 64 20 64  S JOIN|handled d
2a2f0 69 66 66 65 72 65 6e 74 6c 79 20 62 79 20 74 68  ifferently by th
2a300 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
2a310 72 5d 0a 69 6e 20 74 68 61 74 20 69 74 20 70 72  r].in that it pr
2a320 65 76 65 6e 74 73 20 74 68 65 20 71 75 65 72 79  events the query
2a330 20 6f 70 74 69 6d 69 7a 65 72 20 66 72 6f 6d 20   optimizer from 
2a340 72 65 6f 72 64 65 72 69 6e 67 0a 74 68 65 20 74  reordering.the t
2a350 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69  ables in the joi
2a360 6e 2e 20 20 41 6e 20 61 70 70 6c 69 63 61 74 69  n.  An applicati
2a370 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 72 20 63 61  on programmer ca
2a380 6e 20 75 73 65 20 74 68 65 20 43 52 4f 53 53 20  n use the CROSS 
2a390 4a 4f 49 4e 20 0a 6f 70 65 72 61 74 6f 72 20 74  JOIN .operator t
2a3a0 6f 20 64 69 72 65 63 74 6c 79 20 69 6e 66 6c 75  o directly influ
2a3b0 65 6e 63 65 20 74 68 65 20 61 6c 67 6f 72 69 74  ence the algorit
2a3c0 68 6d 20 74 68 61 74 20 69 73 20 63 68 6f 73 65  hm that is chose
2a3d0 6e 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a 74  n to implement.t
2a3e0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2a3f0 65 6e 74 2e 20 20 41 76 6f 69 64 20 75 73 69 6e  ent.  Avoid usin
2a400 67 20 43 52 4f 53 53 20 4a 4f 49 4e 20 65 78 63  g CROSS JOIN exc
2a410 65 70 74 20 69 6e 20 73 70 65 63 69 66 69 63 20  ept in specific 
2a420 73 69 74 75 61 74 69 6f 6e 73 20 0a 77 68 65 72  situations .wher
2a430 65 20 6d 61 6e 75 61 6c 20 63 6f 6e 74 72 6f 6c  e manual control
2a440 20 6f 66 20 74 68 65 20 71 75 65 72 79 20 6f 70   of the query op
2a450 74 69 6d 69 7a 65 72 20 69 73 20 64 65 73 69 72  timizer is desir
2a460 65 64 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67  ed.  Avoid using
2a470 0a 43 52 4f 53 53 20 4a 4f 49 4e 20 65 61 72 6c  .CROSS JOIN earl
2a480 79 20 69 6e 20 74 68 65 20 64 65 76 65 6c 6f 70  y in the develop
2a490 6d 65 6e 74 20 6f 66 20 61 6e 20 61 70 70 6c 69  ment of an appli
2a4a0 63 61 74 69 6f 6e 20 61 73 20 64 6f 69 6e 67 20  cation as doing 
2a4b0 73 6f 20 69 73 0a 61 20 3c 61 20 68 72 65 66 3d  so is.a <a href=
2a4c0 22 68 74 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f 63  "http://c2.com/c
2a4d0 67 69 2f 77 69 6b 69 3f 50 72 65 6d 61 74 75 72  gi/wiki?Prematur
2a4e0 65 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 22 3e 70  eOptimization">p
2a4f0 72 65 6d 61 74 75 72 65 0a 6f 70 74 69 6d 69 7a  remature.optimiz
2a500 61 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65 20  ation</a>.  The 
2a510 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  special handling
2a520 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 20 69   of CROSS JOIN i
2a530 73 20 61 6e 20 53 51 4c 69 74 65 2d 73 70 65 63  s an SQLite-spec
2a540 69 66 69 63 0a 66 65 61 74 75 72 65 20 61 6e 64  ific.feature and
2a550 20 69 73 20 6e 6f 74 20 61 20 70 61 72 74 20 6f   is not a part o
2a560 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a  f standard SQL..
2a570 20 20 20 20 20 20 20 0a 0a 3c 74 63 6c 3e 68 64         ..<tcl>hd
2a580 5f 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65 63  _fragment wherec
2a590 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  lause</tcl>.<tcl
2a5a0 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57 48  >hd_keywords {WH
2a5b0 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c  ERE clause}</tcl
2a5c0 3e 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48 45 52 45  >.<p><b>2. WHERE
2a5d0 20 63 6c 61 75 73 65 20 66 69 6c 74 65 72 69 6e   clause filterin
2a5e0 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66 20  g.</b>..<p>^(If 
2a5f0 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
2a600 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
2a610 20 57 48 45 52 45 20 65 78 70 72 65 73 73 69 6f   WHERE expressio
2a620 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66  n is evaluated f
2a630 6f 72 20 0a 65 61 63 68 20 72 6f 77 20 69 6e 20  or .each row in 
2a640 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61  the input data a
2a650 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70  s a [boolean exp
2a660 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72  ression]. Only r
2a670 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
2a680 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 65  e.WHERE clause e
2a690 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
2a6a0 74 65 73 20 74 6f 20 74 72 75 65 20 61 72 65 20  tes to true are 
2a6b0 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68  included from th
2a6c0 65 20 64 61 74 61 73 65 74 20 62 65 66 6f 72 65  e dataset before
2a6d0 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 20 20  .continuing.)^  
2a6e0 52 6f 77 73 20 61 72 65 20 65 78 63 6c 75 64 65  Rows are exclude
2a6f0 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c  d from the resul
2a700 74 20 69 66 20 74 68 65 20 57 48 45 52 45 20 63  t if the WHERE c
2a710 6c 61 75 73 65 0a 65 76 61 6c 75 61 74 65 73 20  lause.evaluates 
2a720 74 6f 20 65 69 74 68 65 72 20 66 61 6c 73 65 20  to either false 
2a730 6f 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f 72  or NULL...<p>For
2a740 20 61 20 4a 4f 49 4e 20 6f 72 20 49 4e 4e 45 52   a JOIN or INNER
2a750 20 4a 4f 49 4e 20 6f 72 20 43 52 4f 53 53 20 4a   JOIN or CROSS J
2a760 4f 49 4e 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  OIN, there is no
2a770 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
2a780 65 65 6e 20 0a 61 20 63 6f 6e 73 74 72 61 69 6e  een .a constrain
2a790 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  t expression in 
2a7a0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
2a7b0 20 61 6e 64 20 6f 6e 65 20 69 6e 20 74 68 65 20   and one in the 
2a7c0 4f 4e 20 63 6c 61 75 73 65 2e 20 20 48 6f 77 65  ON clause.  Howe
2a7d0 76 65 72 2c 0a 66 6f 72 20 61 20 4c 45 46 54 20  ver,.for a LEFT 
2a7e0 4a 4f 49 4e 20 6f 72 20 4c 45 46 54 20 4f 55 54  JOIN or LEFT OUT
2a7f0 45 52 20 4a 4f 49 4e 2c 20 74 68 65 20 64 69 66  ER JOIN, the dif
2a800 66 65 72 65 6e 63 65 20 69 73 20 76 65 72 79 20  ference is very 
2a810 69 6d 70 6f 72 74 61 6e 74 2e 20 20 0a 49 6e 20  important.  .In 
2a820 61 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a 74 68 65  a LEFT JOIN,.the
2a830 20 65 78 74 72 61 20 4e 55 4c 4c 20 72 6f 77 20   extra NULL row 
2a840 66 6f 72 20 74 68 65 20 72 69 67 68 74 2d 68 61  for the right-ha
2a850 6e 64 20 74 61 62 6c 65 20 69 73 20 61 64 64 65  nd table is adde
2a860 64 20 61 66 74 65 72 20 4f 4e 20 63 6c 61 75 73  d after ON claus
2a870 65 20 70 72 6f 63 65 73 73 69 6e 67 0a 62 75 74  e processing.but
2a880 20 62 65 66 6f 72 65 20 57 48 45 52 45 20 63 6c   before WHERE cl
2a890 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 2e  ause processing.
2a8a0 20 20 41 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f    A constraint o
2a8b0 66 20 74 68 65 20 66 6f 72 6d 20 22 6c 65 66 74  f the form "left
2a8c0 2e 78 3d 72 69 67 68 74 2e 79 22 0a 69 6e 20 61  .x=right.y".in a
2a8d0 6e 20 4f 4e 20 63 6c 61 75 73 65 20 77 69 6c 6c  n ON clause will
2a8e0 20 74 68 65 72 65 66 6f 72 65 20 61 6c 6c 6f 77   therefore allow
2a8f0 20 74 68 72 6f 75 67 68 20 74 68 65 20 61 64 64   through the add
2a900 65 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72 6f 77 73  ed all-NULL rows
2a910 20 6f 66 20 74 68 65 0a 72 69 67 68 74 20 74 61   of the.right ta
2a920 62 6c 65 2e 20 20 42 75 74 20 69 66 20 74 68 61  ble.  But if tha
2a930 74 20 73 61 6d 65 20 63 6f 6e 73 74 72 61 69 6e  t same constrain
2a940 74 20 69 73 20 69 6e 20 74 68 65 20 57 48 45 52  t is in the WHER
2a950 45 20 63 6c 61 75 73 65 20 61 20 4e 55 4c 4c 20  E clause a NULL 
2a960 69 6e 0a 22 72 69 67 68 74 2e 79 22 20 77 69 6c  in."right.y" wil
2a970 6c 20 70 72 65 76 65 6e 74 20 74 68 65 20 65 78  l prevent the ex
2a980 70 72 65 73 73 69 6f 6e 20 22 6c 65 66 74 2e 78  pression "left.x
2a990 3d 72 69 67 68 74 2e 79 22 20 66 72 6f 6d 20 62  =right.y" from b
2a9a0 65 69 6e 67 20 74 72 75 65 2c 20 61 6e 64 0a 74  eing true, and.t
2a9b0 68 75 73 20 65 78 63 6c 75 64 65 20 74 68 61 74  hus exclude that
2a9c0 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6f 75   row from the ou
2a9d0 74 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20  tput...<p><b>3. 
2a9e0 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68  Generation of th
2a9f0 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
2aa00 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68  rows.</b>.<tcl>h
2aa10 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 73 75 6c  d_fragment resul
2aa20 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  tset</tcl>.<tcl>
2aa30 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65 73  hd_keywords {res
2aa40 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73 69  ult-set expressi
2aa50 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c  ons} {GROUP BY}<
2aa60 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74  /tcl>..<p>Once t
2aa70 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 72  he input data fr
2aa80 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  om the FROM clau
2aa90 73 65 20 68 61 73 20 62 65 65 6e 20 66 69 6c 74  se has been filt
2aaa0 65 72 65 64 20 62 79 20 74 68 65 0a 57 48 45 52  ered by the.WHER
2aab0 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73  E clause express
2aac0 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c 20 74 68  ion (if any), th
2aad0 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
2aae0 72 6f 77 73 20 66 6f 72 20 74 68 65 20 73 69 6d  rows for the sim
2aaf0 70 6c 65 20 0a 53 45 4c 45 43 54 20 61 72 65 20  ple .SELECT are 
2ab00 63 61 6c 63 75 6c 61 74 65 64 2e 20 45 78 61 63  calculated. Exac
2ab10 74 6c 79 20 68 6f 77 20 74 68 69 73 20 69 73 20  tly how this is 
2ab20 64 6f 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e 20  done depends on 
2ab30 77 68 65 74 68 65 72 20 74 68 65 20 73 69 6d 70  whether the simp
2ab40 6c 65 20 0a 53 45 4c 45 43 54 20 69 73 20 61 6e  le .SELECT is an
2ab50 20 61 67 67 72 65 67 61 74 65 20 6f 72 20 6e 6f   aggregate or no
2ab60 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n-aggregate quer
2ab70 79 2c 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  y, and whether o
2ab80 72 20 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42 59  r not a GROUP.BY
2ab90 20 63 6c 61 75 73 65 20 77 61 73 20 73 70 65 63   clause was spec
2aba0 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20  ified...<p> The 
2abb0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
2abc0 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  ons between the 
2abd0 53 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20  SELECT and FROM 
2abe0 6b 65 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77  keywords is know
2abf0 6e 20 61 73 0a 74 68 65 20 72 65 73 75 6c 74 20  n as.the result 
2ac00 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e  expression list.
2ac10 20 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65    ^If a result e
2ac20 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65  xpression is the
2ac30 20 73 70 65 63 69 61 6c 20 65 78 70 72 65 73 73   special express
2ac40 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c  ion."*" then all
2ac50 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
2ac60 69 6e 70 75 74 20 64 61 74 61 20 61 72 65 20 73  input data are s
2ac70 75 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74  ubstituted for t
2ac80 68 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69  hat one expressi
2ac90 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20 65 78 70  on..^(If the exp
2aca0 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 61  ression is the a
2acb0 6c 69 61 73 20 6f 66 20 61 20 74 61 62 6c 65 20  lias of a table 
2acc0 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
2acd0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66  he FROM clause.f
2ace0 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22 20  ollowed by ".*" 
2acf0 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73  then all columns
2ad00 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20   from the named 
2ad10 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
2ad20 79 20 61 72 65 0a 73 75 62 73 74 69 74 75 74 65  y are.substitute
2ad30 64 20 66 6f 72 20 74 68 65 20 73 69 6e 67 6c 65  d for the single
2ad40 20 65 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e   expression.)^ ^
2ad50 28 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20  (It is an error 
2ad60 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 0a  to use a "*" or.
2ad70 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73  "alias.*" expres
2ad80 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74  sion in any cont
2ad90 65 78 74 20 6f 74 68 65 72 20 74 68 61 6e 20 61  ext other than a
2ada0 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
2adb0 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28 49 74 20  on list.)^.^(It 
2adc0 69 73 20 61 6c 73 6f 20 61 6e 20 65 72 72 6f 72  is also an error
2add0 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72   to use a "*" or
2ade0 20 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65   "alias.*" expre
2adf0 73 73 69 6f 6e 20 69 6e 20 61 20 73 69 6d 70 6c  ssion in a simpl
2ae00 65 20 53 45 4c 45 43 54 0a 71 75 65 72 79 20 74  e SELECT.query t
2ae10 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  hat does not hav
2ae20 65 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e  e a FROM clause.
2ae30 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 6e 75  )^..<p> ^(The nu
2ae40 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
2ae50 69 6e 20 74 68 65 20 72 6f 77 73 20 72 65 74 75  in the rows retu
2ae60 72 6e 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65  rned by a simple
2ae70 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2ae80 74 0a 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68  t.is equal to th
2ae90 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  e number of expr
2aea0 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72  essions in the r
2aeb0 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
2aec0 20 6c 69 73 74 20 61 66 74 65 72 0a 73 75 62 73   list after.subs
2aed0 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a 20 61 6e  titution of * an
2aee0 64 20 61 6c 69 61 73 2e 2a 20 65 78 70 72 65 73  d alias.* expres
2aef0 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68 20 72 65  sions.)^ Each re
2af00 73 75 6c 74 20 72 6f 77 20 69 73 20 63 61 6c 63  sult row is calc
2af10 75 6c 61 74 65 64 20 62 79 0a 65 76 61 6c 75 61  ulated by.evalua
2af20 74 69 6e 67 20 74 68 65 20 65 78 70 72 65 73 73  ting the express
2af30 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  ions in the resu
2af40 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
2af50 73 74 20 77 69 74 68 20 72 65 73 70 65 63 74 20  st with respect 
2af60 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20  to a.single row 
2af70 6f 66 20 69 6e 70 75 74 20 64 61 74 61 20 6f 72  of input data or
2af80 2c 20 66 6f 72 20 61 67 67 72 65 67 61 74 65 20  , for aggregate 
2af90 71 75 65 72 69 65 73 2c 20 77 69 74 68 20 72 65  queries, with re
2afa0 73 70 65 63 74 20 74 6f 20 61 20 67 72 6f 75 70  spect to a group
2afb0 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a  .of rows...<ul>.
2afc0 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
2afd0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2afe0 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67  t is <b>a non-ag
2aff0 67 72 65 67 61 74 65 20 71 75 65 72 79 3c 2f 62  gregate query</b
2b000 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61 63  >, then .    eac
2b010 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
2b020 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65  the result expre
2b030 73 73 69 6f 6e 20 6c 69 73 74 20 69 73 20 65 76  ssion list is ev
2b040 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68  aluated for each
2b050 20 72 6f 77 20 69 6e 0a 20 20 20 20 74 68 65 20   row in.    the 
2b060 64 61 74 61 73 65 74 20 66 69 6c 74 65 72 65 64  dataset filtered
2b070 20 62 79 20 74 68 65 20 57 48 45 52 45 20 63 6c   by the WHERE cl
2b080 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  ause...  <li><p>
2b090 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  ^If the SELECT s
2b0a0 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61  tatement is <b>a
2b0b0 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
2b0c0 79 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55  y without a GROU
2b0d0 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61  P.    BY</b> cla
2b0e0 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 61  use, then each a
2b0f0 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
2b100 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
2b110 74 2d 73 65 74 20 69 73 20 0a 20 20 20 20 65 76  t-set is .    ev
2b120 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 61 63 72  aluated once acr
2b130 6f 73 73 20 74 68 65 20 65 6e 74 69 72 65 20 64  oss the entire d
2b140 61 74 61 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f  ataset. ^Each no
2b150 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
2b160 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68  ession.    in th
2b170 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
2b180 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
2b190 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c  or an arbitraril
2b1a0 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 6f  y selected row o
2b1b0 66 0a 20 20 20 20 74 68 65 20 64 61 74 61 73 65  f.    the datase
2b1c0 74 2e 20 5e 54 68 65 20 73 61 6d 65 20 61 72 62  t. ^The same arb
2b1d0 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65  itrarily selecte
2b1e0 64 20 72 6f 77 20 69 73 20 75 73 65 64 20 66 6f  d row is used fo
2b1f0 72 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61  r each.    non-a
2b200 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
2b210 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65  ion. ^Or, if the
2b220 20 64 61 74 61 73 65 74 20 63 6f 6e 74 61 69 6e   dataset contain
2b230 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20 74 68 65  s zero rows, the
2b240 6e 20 0a 20 20 20 20 65 61 63 68 20 6e 6f 6e 2d  n .    each non-
2b250 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2b260 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
2b270 64 20 61 67 61 69 6e 73 74 20 61 20 72 6f 77 20  d against a row 
2b280 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20 20 20 65  consisting.    e
2b290 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55 4c 4c 20  ntirely of NULL 
2b2a0 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e  values...   <p>^
2b2b0 54 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  The single row o
2b2c0 66 20 72 65 73 75 6c 74 2d 73 65 74 20 64 61 74  f result-set dat
2b2d0 61 20 63 72 65 61 74 65 64 20 62 79 20 65 76 61  a created by eva
2b2e0 6c 75 61 74 69 6e 67 20 74 68 65 20 61 67 67 72  luating the aggr
2b2f0 65 67 61 74 65 0a 20 20 20 20 61 6e 64 20 6e 6f  egate.    and no
2b300 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
2b310 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72  essions in the r
2b320 65 73 75 6c 74 2d 73 65 74 20 66 6f 72 6d 73 20  esult-set forms 
2b330 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e  the result of an
2b340 0a 20 20 20 20 61 67 67 72 65 67 61 74 65 20 71  .    aggregate q
2b350 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47  uery without a G
2b360 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20  ROUP BY clause. 
2b370 5e 41 6e 20 61 67 67 72 65 67 61 74 65 20 71 75  ^An aggregate qu
2b380 65 72 79 20 77 69 74 68 6f 75 74 20 61 0a 20 20  ery without a.  
2b390 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73    GROUP BY claus
2b3a0 65 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73  e always returns
2b3b0 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 72 6f 77   exactly one row
2b3c0 20 6f 66 20 64 61 74 61 2c 20 65 76 65 6e 20 69   of data, even i
2b3d0 66 20 74 68 65 72 65 20 61 72 65 0a 20 20 20 20  f there are.    
2b3e0 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20 69 6e 70  zero rows of inp
2b3f0 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e  ut data...  <li>
2b400 3c 70 3e 5e 28 49 66 20 74 68 65 20 53 45 4c 45  <p>^(If the SELE
2b410 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
2b420 3c 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20  <b>an aggregate 
2b430 71 75 65 72 79 20 77 69 74 68 20 61 20 47 52 4f  query with a GRO
2b440 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c  UP.    BY</b> cl
2b450 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20  ause, then each 
2b460 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
2b470 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ns specified as 
2b480 70 61 72 74 20 6f 66 20 74 68 65 0a 20 20 20 20  part of the.    
2b490 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
2b4a0 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  is evaluated for
2b4b0 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
2b4c0 20 64 61 74 61 73 65 74 2e 20 45 61 63 68 20 72   dataset. Each r
2b4d0 6f 77 0a 20 20 20 20 69 73 20 74 68 65 6e 20 61  ow.    is then a
2b4e0 73 73 69 67 6e 65 64 20 74 6f 20 61 20 22 67 72  ssigned to a "gr
2b4f0 6f 75 70 22 20 62 61 73 65 64 20 6f 6e 20 74 68  oup" based on th
2b500 65 20 72 65 73 75 6c 74 73 3b 20 72 6f 77 73 20  e results; rows 
2b510 66 6f 72 20 77 68 69 63 68 0a 20 20 20 20 74 68  for which.    th
2b520 65 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61  e results of eva
2b530 6c 75 61 74 69 6e 67 20 74 68 65 20 47 52 4f 55  luating the GROU
2b540 50 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73  P BY expressions
2b550 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 67 65   are the same ge
2b560 74 0a 20 20 20 20 61 73 73 69 67 6e 65 64 20 74  t.    assigned t
2b570 6f 20 74 68 65 20 73 61 6d 65 20 67 72 6f 75 70  o the same group
2b580 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75 72  .)^ ^For the pur
2b590 70 6f 73 65 73 20 6f 66 20 67 72 6f 75 70 69 6e  poses of groupin
2b5a0 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20 20  g rows, NULL .  
2b5b0 20 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e    values are con
2b5c0 73 69 64 65 72 65 64 20 65 71 75 61 6c 2e 20 5e  sidered equal. ^
2b5d0 54 68 65 20 75 73 75 61 6c 20 72 75 6c 65 73 20  The usual rules 
2b5e0 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73  for [collation|s
2b5f0 65 6c 65 63 74 69 6e 67 20 61 0a 20 20 20 20 63  electing a.    c
2b600 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2b610 65 5d 20 77 69 74 68 20 77 68 69 63 68 20 74 6f  e] with which to
2b620 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61   compare text va
2b630 6c 75 65 73 20 61 70 70 6c 79 20 77 68 65 6e 20  lues apply when 
2b640 65 76 61 6c 75 61 74 69 6e 67 0a 20 20 20 20 65  evaluating.    e
2b650 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20  xpressions in a 
2b660 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e  GROUP BY clause.
2b670 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f    ^The expressio
2b680 6e 73 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20  ns in the GROUP 
2b690 42 59 20 63 6c 61 75 73 65 0a 20 20 20 20 64 6f  BY clause.    do
2b6a0 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61   <em>not</em> ha
2b6b0 76 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73  ve to be express
2b6c0 69 6f 6e 73 20 74 68 61 74 20 61 70 70 65 61 72  ions that appear
2b6d0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20   in the result. 
2b6e0 5e 54 68 65 0a 20 20 20 20 65 78 70 72 65 73 73  ^The.    express
2b6f0 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20  ions in a GROUP 
2b700 42 59 20 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f  BY clause may no
2b710 74 20 62 65 20 61 67 67 72 65 67 61 74 65 20 65  t be aggregate e
2b720 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20  xpressions...   
2b730 20 3c 70 3e 5e 28 49 66 20 61 20 48 41 56 49 4e   <p>^(If a HAVIN
2b740 47 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  G clause is spec
2b750 69 66 69 65 64 2c 20 69 74 20 69 73 20 65 76 61  ified, it is eva
2b760 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20  luated once for 
2b770 65 61 63 68 20 67 72 6f 75 70 20 0a 20 20 20 20  each group .    
2b780 6f 66 20 72 6f 77 73 20 61 73 20 61 20 5b 62 6f  of rows as a [bo
2b790 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
2b7a0 5d 2e 20 49 66 20 74 68 65 20 72 65 73 75 6c 74  ]. If the result
2b7b0 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74   of evaluating t
2b7c0 68 65 0a 20 20 20 20 48 41 56 49 4e 47 20 63 6c  he.    HAVING cl
2b7d0 61 75 73 65 20 69 73 20 66 61 6c 73 65 2c 20 74  ause is false, t
2b7e0 68 65 20 67 72 6f 75 70 20 69 73 20 64 69 73 63  he group is disc
2b7f0 61 72 64 65 64 2e 29 5e 20 5e 49 66 20 74 68 65  arded.)^ ^If the
2b800 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69   HAVING clause i
2b810 73 0a 20 20 20 20 61 6e 20 61 67 67 72 65 67 61  s.    an aggrega
2b820 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
2b830 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61  t is evaluated a
2b840 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69  cross all rows i
2b850 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66  n the group. ^If
2b860 0a 20 20 20 20 61 20 48 41 56 49 4e 47 20 63 6c  .    a HAVING cl
2b870 61 75 73 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67  ause is a non-ag
2b880 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2b890 6f 6e 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61  on, it is evalua
2b8a0 74 65 64 20 77 69 74 68 20 72 65 73 70 65 63 74  ted with respect
2b8b0 0a 20 20 20 20 74 6f 20 61 6e 20 61 72 62 69 74  .    to an arbit
2b8c0 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20  rarily selected 
2b8d0 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 67 72 6f  row from the gro
2b8e0 75 70 2e 20 20 5e 54 68 65 20 48 41 56 49 4e 47  up.  ^The HAVING
2b8f0 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 0a   expression may.
2b900 20 20 20 20 72 65 66 65 72 20 74 6f 20 76 61 6c      refer to val
2b910 75 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67  ues, even aggreg
2b920 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74  ate functions, t
2b930 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74  hat are not in t
2b940 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a  he result.</p>..
2b950 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 65 78 70      <p>^Each exp
2b960 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72  ression in the r
2b970 65 73 75 6c 74 2d 73 65 74 20 69 73 20 74 68 65  esult-set is the
2b980 6e 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65  n evaluated once
2b990 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 67 72   for each.    gr
2b9a0 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66  oup of rows. ^If
2b9b0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
2b9c0 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  is an aggregate 
2b9d0 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69  expression, it i
2b9e0 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64  s .    evaluated
2b9f0 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73   across all rows
2ba00 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e   in the group. ^
2ba10 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73  Otherwise, it is
2ba20 20 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e   evaluated again
2ba30 73 74 0a 20 20 20 20 61 20 73 69 6e 67 6c 65 20  st.    a single 
2ba40 61 72 62 69 74 72 61 72 69 6c 79 20 63 68 6f 73  arbitrarily chos
2ba50 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77 69 74 68  en row from with
2ba60 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49  in the group. ^I
2ba70 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 0a  f there is more.
2ba80 20 20 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e      than one non
2ba90 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2baa0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73  ssion in the res
2bab0 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c  ult-set, then al
2bac0 6c 20 73 75 63 68 0a 20 20 20 20 65 78 70 72 65  l such.    expre
2bad0 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75  ssions are evalu
2bae0 61 74 65 64 20 66 6f 72 20 74 68 65 20 73 61 6d  ated for the sam
2baf0 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e  e row...    <p>^
2bb00 45 61 63 68 20 67 72 6f 75 70 20 6f 66 20 69 6e  Each group of in
2bb10 70 75 74 20 64 61 74 61 73 65 74 20 72 6f 77 73  put dataset rows
2bb20 20 63 6f 6e 74 72 69 62 75 74 65 73 20 61 20 73   contributes a s
2bb30 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20 74 68 65  ingle row to the
2bb40 20 0a 20 20 20 20 73 65 74 20 6f 66 20 72 65 73   .    set of res
2bb50 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65  ult rows. ^Subje
2bb60 63 74 20 74 6f 20 66 69 6c 74 65 72 69 6e 67 20  ct to filtering 
2bb70 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2bb80 74 68 65 20 44 49 53 54 49 4e 43 54 0a 20 20 20  the DISTINCT.   
2bb90 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 20 6e 75   keyword, the nu
2bba0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74  mber of rows ret
2bbb0 75 72 6e 65 64 20 62 79 20 61 6e 20 61 67 67 72  urned by an aggr
2bbc0 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68  egate query with
2bbd0 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59 20   a GROUP.    BY 
2bbe0 63 6c 61 75 73 65 20 69 73 20 74 68 65 20 73 61  clause is the sa
2bbf0 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72  me as the number
2bc00 20 6f 66 20 67 72 6f 75 70 73 20 6f 66 20 72 6f   of groups of ro
2bc10 77 73 20 70 72 6f 64 75 63 65 64 20 62 79 20 61  ws produced by a
2bc20 70 70 6c 79 69 6e 67 0a 20 20 20 20 74 68 65 20  pplying.    the 
2bc30 47 52 4f 55 50 20 42 59 20 61 6e 64 20 48 41 56  GROUP BY and HAV
2bc40 49 4e 47 20 63 6c 61 75 73 65 73 20 74 6f 20 74  ING clauses to t
2bc50 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75  he filtered inpu
2bc60 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e  t dataset..</ul>
2bc70 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76  ..<p><b>4. Remov
2bc80 61 6c 20 6f 66 20 64 75 70 6c 69 63 61 74 65 20  al of duplicate 
2bc90 72 6f 77 73 20 28 44 49 53 54 49 4e 43 54 20 70  rows (DISTINCT p
2bca0 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a  rocessing).</b>.
2bcb0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2bcc0 20 64 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a   distinct</tcl>.
2bcd0 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
2bce0 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c   {DISTINCT}</tcl
2bcf0 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68  >..<p>^One of th
2bd00 65 20 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43  e ALL or DISTINC
2bd10 54 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 66  T keywords may f
2bd20 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c 45 43 54  ollow the SELECT
2bd30 20 6b 65 79 77 6f 72 64 20 69 6e 20 61 20 0a 73   keyword in a .s
2bd40 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
2bd50 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20  tement. ^If the 
2bd60 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73  simple SELECT is
2bd70 20 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74   a SELECT ALL, t
2bd80 68 65 6e 20 74 68 65 0a 65 6e 74 69 72 65 20 73  hen the.entire s
2bd90 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
2bda0 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 62  s are returned b
2bdb0 79 20 74 68 65 20 53 45 4c 45 43 54 2e 20 5e 49  y the SELECT. ^I
2bdc0 66 20 6e 65 69 74 68 65 72 20 41 4c 4c 20 6f 72  f neither ALL or
2bdd0 0a 44 49 53 54 49 4e 43 54 20 61 72 65 20 70 72  .DISTINCT are pr
2bde0 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  esent, then the 
2bdf0 62 65 68 61 76 69 6f 72 20 69 73 20 61 73 20 69  behavior is as i
2be00 66 20 41 4c 4c 20 77 65 72 65 20 73 70 65 63 69  f ALL were speci
2be10 66 69 65 64 2e 20 0a 5e 49 66 20 74 68 65 20 73  fied. .^If the s
2be20 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20  imple SELECT is 
2be30 61 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43  a SELECT DISTINC
2be40 54 2c 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74  T, then duplicat
2be50 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76  e rows are remov
2be60 65 64 0a 66 72 6f 6d 20 74 68 65 20 73 65 74 20  ed.from the set 
2be70 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 62  of result rows b
2be80 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 74 75  efore it is retu
2be90 72 6e 65 64 2e 20 5e 46 6f 72 20 74 68 65 20 70  rned. ^For the p
2bea0 75 72 70 6f 73 65 73 20 6f 66 0a 64 65 74 65 63  urposes of.detec
2beb0 74 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72  ting duplicate r
2bec0 6f 77 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61  ows, two NULL va
2bed0 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
2bee0 72 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e  red to be equal.
2bef0 20 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c   ^The.normal rul
2bf00 65 73 20 66 6f 72 20 73 65 6c 65 63 74 69 6e 67  es for selecting
2bf10 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
2bf20 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65  uence to compare
2bf30 20 74 65 78 74 20 76 61 6c 75 65 73 20 77 69 74   text values wit
2bf40 68 0a 61 70 70 6c 79 2e 0a 0a 3c 74 63 6c 3e 0a  h.apply...<tcl>.
2bf50 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70  hd_fragment comp
2bf60 6f 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20 73  ound {compound s
2bf70 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64  elect} {compound
2bf80 20 71 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e   query} {compoun
2bf90 64 20 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f  d SELECT} {compo
2bfa0 75 6e 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f 74  und SELECTs}.</t
2bfb0 63 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64  cl>.<h3>Compound
2bfc0 20 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65 6e   Select Statemen
2bfd0 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20  ts</h3>..<p>Two 
2bfe0 6f 72 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65 20  or more [simple 
2bff0 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
2c000 74 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63  ts may be connec
2c010 74 65 64 20 74 6f 67 65 74 68 65 72 20 74 6f 20  ted together to 
2c020 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20  form.a compound 
2c030 53 45 4c 45 43 54 20 75 73 69 6e 67 20 74 68 65  SELECT using the
2c040 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c   UNION, UNION AL
2c050 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72 20  L, INTERSECT or 
2c060 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 2c  EXCEPT operator,
2c070 0a 61 73 20 73 68 6f 77 6e 20 62 79 20 74 68 65  .as shown by the
2c080 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72   following diagr
2c090 61 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72  am:..<tcl>.Recur
2c0a0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
2c0b0 6d 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63  m compound-selec
2c0c0 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  t-stmt.</tcl>..<
2c0d0 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  p>^In a compound
2c0e0 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65   SELECT, all the
2c0f0 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c   constituent SEL
2c100 45 43 54 73 20 6d 75 73 74 20 72 65 74 75 72 6e  ECTs must return
2c110 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65   the same .numbe
2c120 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75  r of result colu
2c130 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d  mns. ^As the com
2c140 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d  ponents of a com
2c150 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75 73  pound SELECT mus
2c160 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c 45  t.be simple SELE
2c170 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 74  CT statements, t
2c180 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74  hey may not cont
2c190 61 69 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f  ain [ORDER BY] o
2c1a0 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65  r [LIMIT] clause
2c1b0 73 2e 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20 61  s..^[ORDER BY] a
2c1c0 6e 64 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73  nd [LIMIT] claus
2c1d0 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75  es may only occu
2c1e0 72 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  r at the end of 
2c1f0 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f  the entire compo
2c200 75 6e 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64 20  und.SELECT, and 
2c210 74 68 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68 65  then only if the
2c220 20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20 6f   final element o
2c230 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 69  f the compound i
2c240 73 20 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53 5d  s not a [VALUES]
2c250 20 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20   clause...<p>^A 
2c260 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20  compound SELECT 
2c270 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e  created using UN
2c280 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72  ION ALL operator
2c290 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65   returns all the
2c2a0 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53   rows.from the S
2c2b0 45 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66  ELECT to the lef
2c2c0 74 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41  t of the UNION A
2c2d0 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64  LL operator, and
2c2e0 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72   all the rows.fr
2c2f0 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f  om the SELECT to
2c300 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 69 74   the right of it
2c310 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65  . ^The UNION ope
2c320 72 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20  rator works the 
2c330 73 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f  same way as.UNIO
2c340 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68  N ALL, except th
2c350 61 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  at duplicate row
2c360 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72  s are removed fr
2c370 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73  om the final res
2c380 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e  ult set..^The IN
2c390 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72  TERSECT operator
2c3a0 20 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74   returns the int
2c3b0 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65  ersection of the
2c3c0 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
2c3d0 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53  left and.right S
2c3e0 45 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58  ELECTs.  ^The EX
2c3f0 43 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65  CEPT operator re
2c400 74 75 72 6e 73 20 74 68 65 20 73 75 62 73 65 74  turns the subset
2c410 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65   of rows returne
2c420 64 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45  d by the.left SE
2c430 4c 45 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f  LECT that are no
2c440 74 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20  t also returned 
2c450 62 79 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  by the right-han
2c460 64 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69  d SELECT. ^Dupli
2c470 63 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65  cate.rows are re
2c480 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72  moved from the r
2c490 65 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53  esults of INTERS
2c4a0 45 43 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f  ECT and EXCEPT o
2c4b0 70 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20  perators before 
2c4c0 74 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69  the.result set i
2c4d0 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e  s returned...<p>
2c4e0 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
2c4f0 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67  s of determining
2c500 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
2c510 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73 20  for the results 
2c520 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45  of compound.SELE
2c530 43 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55  CT operators, NU
2c540 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
2c550 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 20 74  nsidered equal t
2c560 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c  o other NULL val
2c570 75 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74  ues and.distinct
2c580 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55   from all non-NU
2c590 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20  LL values. ^The 
2c5a0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
2c5b0 63 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  ce used to compa
2c5c0 72 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c  re .two text val
2c5d0 75 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ues is determine
2c5e0 64 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75  d as if the colu
2c5f0 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20  mns of the left 
2c600 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53  and right-hand.S
2c610 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
2c620 20 77 65 72 65 20 74 68 65 20 6c 65 66 74 20 61   were the left a
2c630 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70  nd right-hand op
2c640 65 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71  erands of the eq
2c650 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f  uals (=).operato
2c660 72 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 67  r, except that g
2c670 72 65 61 74 65 72 20 70 72 65 63 65 64 65 6e 63  reater precedenc
2c680 65 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65  e is not assigne
2c690 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  d to a collation
2c6a0 20 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63 69   .sequence speci
2c6b0 66 69 65 64 20 77 69 74 68 20 74 68 65 20 70 6f  fied with the po
2c6c0 73 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70  stfix COLLATE op
2c6d0 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69  erator. ^No affi
2c6e0 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74  nity.transformat
2c6f0 69 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64  ions are applied
2c700 20 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77   to any values w
2c710 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f  hen comparing ro
2c720 77 73 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a  ws as part of a.
2c730 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e  compound SELECT.
2c740 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72   ..<p>^(When thr
2c750 65 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c  ee or more simpl
2c760 65 20 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f  e SELECTs are co
2c770 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63  nnected into a c
2c780 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a  ompound SELECT,.
2c790 74 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20  they group from 
2c7a0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49  left to right. I
2c7b0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
2c7c0 66 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22  f "A", "B" and "
2c7d0 43 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c  C" are all.simpl
2c7e0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2c7f0 6e 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20  nts, (A op B op 
2c800 43 29 20 69 73 20 70 72 6f 63 65 73 73 65 64 20  C) is processed 
2c810 61 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20  as ((A op B) op 
2c820 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63  C).)^..</p>..<tc
2c830 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72  l>hd_fragment or
2c840 64 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d  derby {order by}
2c850 20 7b 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63 6c   {ORDER BY}</tcl
2c860 3e 0a 3c 68 33 3e 54 68 65 20 4f 52 44 45 52 20  >.<h3>The ORDER 
2c870 42 59 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a  BY clause</h3>..
2c880 3c 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20 73  <p>If a SELECT s
2c890 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72 65  tatement that re
2c8a0 74 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20  turns more than 
2c8b0 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74  one row does not
2c8c0 20 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20 42   have an.ORDER B
2c8d0 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f 72  Y clause, the or
2c8e0 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68 65  der in which the
2c8f0 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e   rows are return
2c900 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ed is undefined.
2c910 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43 54  .Or, if a SELECT
2c920 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20   statement does 
2c930 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59  have an ORDER BY
2c940 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
2c950 65 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65 73  e list of.expres
2c960 73 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20 74  sions attached t
2c970 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 64  o the ORDER BY d
2c980 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72 64  etermine the ord
2c990 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
2c9a0 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 74 6f  .are returned to
2c9b0 20 74 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a   the user...<p>.
2c9c0 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  In a [compound S
2c9d0 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2c9e0 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 20  , only the last 
2c9f0 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73  or right-most [s
2ca00 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61  imple SELECT].ma
2ca10 79 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20  y have an ORDER 
2ca20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 61 74 20  BY clause. That 
2ca30 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
2ca40 77 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f 73  will apply acros
2ca50 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 6f  s all elements o
2ca60 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20  f.the compound. 
2ca70 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73  If the right-mos
2ca80 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 5b  t element of a [
2ca90 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
2caa0 20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d 20 63   is a [VALUES] c
2cab0 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f 20 4f  lause,.then no O
2cac0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
2cad0 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68 61  s allowed on tha
2cae0 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a 3c  t statement....<
2caf0 70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69 72 73  p>^Rows are firs
2cb00 74 20 73 6f 72 74 65 64 20 62 61 73 65 64 20 6f  t sorted based o
2cb10 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  n the results of
2cb20 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20  .evaluating the 
2cb30 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73  left-most expres
2cb40 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44 45  sion in the ORDE
2cb50 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e 20  R BY list, then 
2cb60 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e 0a  ties are broken.
2cb70 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
2cb80 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d 6f  e second left-mo
2cb90 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  st expression an
2cba0 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72 64  d so on. The ord
2cbb0 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f 20  er in which.two 
2cbc0 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 61  rows for which a
2cbd0 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ll ORDER BY expr
2cbe0 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
2cbf0 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65 73   to equal values
2cc00 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69 73   are.returned is
2cc10 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61 63   undefined. ^Eac
2cc20 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  h ORDER BY expre
2cc30 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74  ssion may be opt
2cc40 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64  ionally followed
2cc50 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b  .by one of the k
2cc60 65 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d 61  eywords ASC (sma
2cc70 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65 20  ller values are 
2cc80 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 20  returned first) 
2cc90 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65 72 0a  or DESC (larger.
2cca0 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72  values are retur
2ccb0 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66 20  ned first). ^If 
2ccc0 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44  neither ASC or D
2ccd0 45 53 43 20 61 72 65 20 73 70 65 63 69 66 69 65  ESC are specifie
2cce0 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72 74  d, rows.are sort
2ccf0 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  ed in ascending 
2cd00 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20  (smaller values 
2cd10 66 69 72 73 74 29 20 6f 72 64 65 72 20 62 79 20  first) order by 
2cd20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61 63  default...<p>Eac
2cd30 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  h ORDER BY expre
2cd40 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73 73  ssion is process
2cd50 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  ed as follows:</
2cd60 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ol>.<li><p>
2cd70 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59  ^If the ORDER BY
2cd80 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
2cd90 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67 65   constant intege
2cda0 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78 70  r K then the.exp
2cdb0 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69  ression is consi
2cdc0 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20 66  dered an alias f
2cdd0 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75  or the K-th colu
2cde0 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
2cdf0 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61 72   set.(columns ar
2ce00 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20  e numbered from 
2ce10 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 73 74  left to right st
2ce20 61 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e 0a  arting with 1)..
2ce30 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20  .<li><p>^If the 
2ce40 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
2ce50 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69  ion is an identi
2ce60 66 69 65 72 20 74 68 61 74 20 63 6f 72 72 65 73  fier that corres
2ce70 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c 69  ponds to.the ali
2ce80 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65  as of one of the
2ce90 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 2c   output columns,
2cea0 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73   then the expres
2ceb0 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72  sion is consider
2cec0 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  ed.an alias for 
2ced0 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c  that column...<l
2cee0 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
2cef0 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
2cf00 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
2cf10 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65 73 73  ny other express
2cf20 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61 6c  ion, it .is eval
2cf30 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  uated and the re
2cf40 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73 65  turned value use
2cf50 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20 6f  d to order the o
2cf60 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a  utput rows. ^If.
2cf70 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2cf80 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c 65  ment is a simple
2cf90 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e   SELECT, then an
2cfa0 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63 6f   ORDER BY may co
2cfb0 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74 72  ntain any.arbitr
2cfc0 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  ary expressions.
2cfd0 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68   ^However, if th
2cfe0 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 63 6f  e SELECT is a co
2cff0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 74  mpound SELECT, t
2d000 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78 70  hen.ORDER BY exp
2d010 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72  ressions that ar
2d020 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74 6f  e not aliases to
2d030 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20   output columns 
2d040 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c 79 0a  must be exactly.
2d050 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20 65  the same as an e
2d060 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20 61  xpression used a
2d070 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75  s an output colu
2d080 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46  mn..</ol>..<p>^F
2d090 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
2d0a0 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c  of sorting rows,
2d0b0 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
2d0c0 61 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  ared in the same
2d0d0 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d   way.as for [com
2d0e0 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73 69  parison expressi
2d0f0 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74  ons]. The collat
2d100 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65  ion sequence use
2d110 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f  d to compare.two
2d120 20 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20   text values is 
2d130 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66 6f  determined as fo
2d140 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c  llows:..<ol>.  <
2d150 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52  li><p>^If the OR
2d160 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2d170 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20 61 20  n is assigned a 
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 69 6e 67 0a 20 20 74 68 65 20 70  ce using.  the p
2d1a0 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20  ostfix [COLLATE 
2d1b0 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20  operator], then 
2d1c0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  the specified co
2d1d0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2d1e0 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c   is.  used..  <l
2d1f0 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
2d200 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
2d210 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
2d220 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65 78  n alias to an ex
2d230 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74 20  pression.  that 
2d240 68 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e 65  has been assigne
2d250 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  d a collation se
2d260 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65  quence using the
2d270 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c   postfix .  [COL
2d280 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20  LATE operator], 
2d290 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69  then the collati
2d2a0 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73 69  on sequence assi
2d2b0 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69 61  gned to the alia
2d2c0 73 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f 6e  sed.  expression
2d2d0 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e   is used..  <li>
2d2e0 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  <p>^Otherwise, i
2d2f0 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
2d300 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63  xpression is a c
2d310 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61  olumn or an alia
2d320 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65 73  s of.  an expres
2d330 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20 63  sion that is a c
2d340 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20  olumn, then the 
2d350 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
2d360 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a 20  n sequence for. 
2d370 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75   the column is u
2d380 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  sed. .  <li><p>^
2d390 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 5b  Otherwise, the [
2d3a0 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f  BINARY] collatio
2d3b0 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  n sequence is us
2d3c0 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e  ed..</ol>..<p>In
2d3d0 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
2d3e0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20  ECT] statement, 
2d3f0 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70  all ORDER BY exp
2d400 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61 6e  ressions are han
2d410 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73 20  dled.as aliases 
2d420 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 72  for one of the r
2d430 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66  esult columns of
2d440 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a 5e   the compound..^
2d450 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20  (If an ORDER BY 
2d460 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f  expression is no
2d470 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c 69  t an integer ali
2d480 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20  as, then SQLite 
2d490 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65 66  searches.the lef
2d4a0 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69 6e  t-most SELECT in
2d4b0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66 6f   the compound fo
2d4c0 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  r a result colum
2d4d0 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 65  n that matches e
2d4e0 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e 64  ither.the second
2d4f0 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73 20   or third rules 
2d500 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74 63  above. If a matc
2d510 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
2d520 73 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e 64  search stops and
2d530 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  .the expression 
2d540 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61 6e  is handled as an
2d550 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72   alias for the r
2d560 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61  esult column tha
2d570 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d 61  t it has been.ma
2d580 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20 4f  tched against. O
2d590 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65  therwise, the ne
2d5a0 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65  xt SELECT to the
2d5b0 20 72 69 67 68 74 20 69 73 20 74 72 69 65 64 2c   right is tried,
2d5c0 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e 49   and so on.)^.^I
2d5d0 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65 78  f no matching ex
2d5e0 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20  pression can be 
2d5f0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65 73  found in the res
2d600 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  ult columns of a
2d610 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20 53  ny.constituent S
2d620 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e 20  ELECT, it is an 
2d630 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65 72  error. ^Each ter
2d640 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42  m of the ORDER B
2d650 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f 63  Y clause is.proc
2d660 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c 79  essed separately
2d670 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74 63   and may be matc
2d680 68 65 64 20 61 67 61 69 6e 73 74 20 72 65 73 75  hed against resu
2d690 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20  lt columns from 
2d6a0 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43 54  different.SELECT
2d6b0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
2d6c0 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e  he compound.</p>
2d6d0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
2d6e0 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65 74 20 7b  nt limitoffset {
2d6f0 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54 7d 3c  LIMIT} {OFFSET}<
2d700 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49  /tcl>.<h3>The LI
2d710 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a  MIT clause</h3>.
2d720 0a 3c 70 3e 54 68 65 20 4c 49 4d 49 54 20 63 6c  .<p>The LIMIT cl
2d730 61 75 73 65 20 69 73 20 75 73 65 64 20 74 6f 20  ause is used to 
2d740 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72 20 62  place an upper b
2d750 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62  ound on the numb
2d760 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75 72  er of rows.retur
2d770 6e 65 64 20 62 79 20 74 68 65 20 65 6e 74 69 72  ned by the entir
2d780 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2d790 6e 74 2e 0a 0a 3c 70 3e 49 6e 20 61 20 5b 63 6f  nt...<p>In a [co
2d7a0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20  mpound SELECT], 
2d7b0 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74 20 6f 72  only the.last or
2d7c0 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d   right-most [sim
2d7d0 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d 61 79 20  ple SELECT] may 
2d7e0 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d 49 54 20  contain a LIMIT 
2d7f0 63 6c 61 75 73 65 2e 20 20 0a 49 6e 20 61 20 5b  clause.  .In a [
2d800 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
2d810 2c 20 0a 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  , .the LIMIT cla
2d820 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 74  use applies to t
2d830 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75  he entire compou
2d840 6e 64 2c 20 6e 6f 74 20 6a 75 73 74 20 74 68 65  nd, not just the
2d850 20 66 69 6e 61 6c 20 53 45 4c 45 43 54 2e 0a 49   final SELECT..I
2d860 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  f the right-most
2d870 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d   [simple SELECT]
2d880 20 69 73 20 61 20 5b 56 41 4c 55 45 53 20 63 6c   is a [VALUES cl
2d890 61 75 73 65 5d 20 74 68 65 6e 20 6e 6f 20 4c 49  ause] then no LI
2d8a0 4d 49 54 20 63 6c 61 75 73 65 0a 69 73 20 61 6c  MIT clause.is al
2d8b0 6c 6f 77 65 64 2e 0a 0a 3c 70 3e 5e 41 6e 79 20  lowed...<p>^Any 
2d8c0 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
2d8d0 6e 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e  n may be used in
2d8e0 20 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c 61 75   the .LIMIT clau
2d8f0 73 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73 20 69  se, so long as i
2d900 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  t evaluates to a
2d910 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 76  n integer or a v
2d920 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
2d930 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76  .losslessly conv
2d940 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
2d950 67 65 72 2e 20 5e 49 66 20 74 68 65 20 65 78 70  ger. ^If the exp
2d960 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
2d970 73 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76 61 6c  s to a NULL .val
2d980 75 65 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  ue or any other 
2d990 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
2d9a0 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
2d9b0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
2d9c0 69 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72 72 6f  integer, an.erro
2d9d0 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e  r is returned. ^
2d9e0 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  If the LIMIT exp
2d9f0 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
2da00 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  s to a negative 
2da10 76 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68 65 72  value,.then ther
2da20 65 20 69 73 20 6e 6f 20 75 70 70 65 72 20 62 6f  e is no upper bo
2da30 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  und on the numbe
2da40 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  r of rows return
2da50 65 64 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  ed. ^Otherwise, 
2da60 74 68 65 0a 53 45 4c 45 43 54 20 72 65 74 75 72  the.SELECT retur
2da70 6e 73 20 74 68 65 20 66 69 72 73 74 20 4e 20 72  ns the first N r
2da80 6f 77 73 20 6f 66 20 69 74 73 20 72 65 73 75 6c  ows of its resul
2da90 74 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68 65 72  t set only, wher
2daa0 65 20 4e 20 69 73 20 74 68 65 20 76 61 6c 75 65  e N is the value
2dab0 0a 74 68 61 74 20 74 68 65 20 4c 49 4d 49 54 20  .that the LIMIT 
2dac0 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
2dad0 61 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20 69 66  ates to. ^Or, if
2dae0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
2daf0 65 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65 74 75  ement would.retu
2db00 72 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e 20 72  rn less than N r
2db10 6f 77 73 20 77 69 74 68 6f 75 74 20 61 20 4c 49  ows without a LI
2db20 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  MIT clause, then
2db30 20 74 68 65 20 65 6e 74 69 72 65 20 72 65 73 75   the entire resu
2db40 6c 74 20 73 65 74 20 69 73 0a 72 65 74 75 72 6e  lt set is.return
2db50 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 65 78  ed. ..<p>^The ex
2db60 70 72 65 73 73 69 6f 6e 20 61 74 74 61 63 68 65  pression attache
2db70 64 20 74 6f 20 74 68 65 20 6f 70 74 69 6f 6e 61  d to the optiona
2db80 6c 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  l OFFSET clause 
2db90 74 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f 77 20  that may follow 
2dba0 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d  a.LIMIT clause m
2dbb0 75 73 74 20 61 6c 73 6f 20 65 76 61 6c 75 61 74  ust also evaluat
2dbc0 65 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c  e to an integer,
2dbd0 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61 74   or a value that
2dbe0 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73   can be.lossless
2dbf0 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly converted to 
2dc00 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20  an integer. ^If 
2dc10 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61  an expression ha
2dc20 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75  s an OFFSET clau
2dc30 73 65 2c 0a 74 68 65 6e 20 74 68 65 20 66 69 72  se,.then the fir
2dc40 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20 6f 6d  st M rows are om
2dc50 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72  itted from the r
2dc60 65 73 75 6c 74 20 73 65 74 20 72 65 74 75 72 6e  esult set return
2dc70 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
2dc80 0a 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74  .statement and t
2dc90 68 65 20 6e 65 78 74 20 4e 20 72 6f 77 73 20 61  he next N rows a
2dca0 72 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68 65  re returned, whe
2dcb0 72 65 20 4d 20 61 6e 64 20 4e 20 61 72 65 20 74  re M and N are t
2dcc0 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 74  he values that.t
2dcd0 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 4c 49  he OFFSET and LI
2dce0 4d 49 54 20 63 6c 61 75 73 65 73 20 65 76 61 6c  MIT clauses eval
2dcf0 75 61 74 65 20 74 6f 2c 20 72 65 73 70 65 63 74  uate to, respect
2dd00 69 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66 20 74  ively. ^Or, if t
2dd10 68 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c 64 20  he SELECT.would 
2dd20 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e  return less than
2dd30 20 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69 74 20   M+N rows if it 
2dd40 64 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 4c  did not have a L
2dd50 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
2dd60 6e 20 74 68 65 0a 66 69 72 73 74 20 4d 20 72 6f  n the.first M ro
2dd70 77 73 20 61 72 65 20 73 6b 69 70 70 65 64 20 61  ws are skipped a
2dd80 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67  nd the remaining
2dd90 20 72 6f 77 73 20 28 69 66 20 61 6e 79 29 20 61   rows (if any) a
2dda0 72 65 20 72 65 74 75 72 6e 65 64 2e 20 5e 49 66  re returned. ^If
2ddb0 20 74 68 65 0a 4f 46 46 53 45 54 20 63 6c 61 75   the.OFFSET clau
2ddc0 73 65 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  se evaluates to 
2ddd0 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  a negative value
2dde0 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 72  , the results ar
2ddf0 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 66  e the same as if
2de00 20 69 74 0a 68 61 64 20 65 76 61 6c 75 61 74 65   it.had evaluate
2de10 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e  d to zero...<p>^
2de20 49 6e 73 74 65 61 64 20 6f 66 20 61 20 73 65 70  Instead of a sep
2de30 61 72 61 74 65 20 4f 46 46 53 45 54 20 63 6c 61  arate OFFSET cla
2de40 75 73 65 2c 20 74 68 65 20 4c 49 4d 49 54 20 63  use, the LIMIT c
2de50 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66  lause may specif
2de60 79 20 74 77 6f 0a 73 63 61 6c 61 72 20 65 78 70  y two.scalar exp
2de70 72 65 73 73 69 6f 6e 73 20 73 65 70 61 72 61 74  ressions separat
2de80 65 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e 20 5e  ed by a comma. ^
2de90 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68  In this case, th
2dea0 65 20 66 69 72 73 74 20 65 78 70 72 65 73 73 69  e first expressi
2deb0 6f 6e 0a 69 73 20 75 73 65 64 20 61 73 20 74 68  on.is used as th
2dec0 65 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73  e OFFSET express
2ded0 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 65 63 6f  ion and the seco
2dee0 6e 64 20 61 73 20 74 68 65 20 4c 49 4d 49 54 20  nd as the LIMIT 
2def0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68 69 73  expression..This
2df00 20 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e 74 75   is counter-intu
2df10 69 74 69 76 65 2c 20 61 73 20 77 68 65 6e 20 75  itive, as when u
2df20 73 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20  sing the OFFSET 
2df30 63 6c 61 75 73 65 20 74 68 65 20 73 65 63 6f 6e  clause the secon
2df40 64 20 6f 66 0a 74 68 65 20 74 77 6f 20 65 78 70  d of.the two exp
2df50 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 65 20  ressions is the 
2df60 4f 46 46 53 45 54 20 61 6e 64 20 74 68 65 20 66  OFFSET and the f
2df70 69 72 73 74 20 74 68 65 20 4c 49 4d 49 54 2e 20  irst the LIMIT. 
2df80 0a 54 68 69 73 20 72 65 76 65 72 73 61 6c 20 6f  .This reversal o
2df90 66 20 74 68 65 20 6f 66 66 73 65 74 20 61 6e 64  f the offset and
2dfa0 20 6c 69 6d 69 74 20 69 73 20 69 6e 74 65 6e 74   limit is intent
2dfb0 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61 78 69 6d  ional.- it maxim
2dfc0 69 7a 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  izes compatibili
2dfd0 74 79 20 77 69 74 68 20 6f 74 68 65 72 20 53 51  ty with other SQ
2dfe0 4c 20 64 61 74 61 62 61 73 65 20 73 79 73 74 65  L database syste
2dff0 6d 73 2e 0a 48 6f 77 65 76 65 72 2c 20 74 6f 20  ms..However, to 
2e000 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c  avoid confusion,
2e010 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65   programmers are
2e020 20 73 74 72 6f 6e 67 6c 79 20 65 6e 63 6f 75 72   strongly encour
2e030 61 67 65 64 20 74 6f 20 75 73 65 0a 74 68 65 20  aged to use.the 
2e040 66 6f 72 6d 20 6f 66 20 74 68 65 20 4c 49 4d 49  form of the LIMI
2e050 54 20 63 6c 61 75 73 65 20 74 68 61 74 20 75 73  T clause that us
2e060 65 73 20 74 68 65 20 22 4f 46 46 53 45 54 22 20  es the "OFFSET" 
2e070 6b 65 79 77 6f 72 64 20 61 6e 64 20 61 76 6f 69  keyword and avoi
2e080 64 0a 75 73 69 6e 67 20 61 20 4c 49 4d 49 54 20  d.using a LIMIT 
2e090 63 6c 61 75 73 65 20 77 69 74 68 20 61 20 63 6f  clause with a co
2e0a0 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20 6f 66  mma-separated of
2e0b0 66 73 65 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  fset...<tcl>hd_f
2e0c0 72 61 67 6d 65 6e 74 20 76 61 6c 75 65 73 20 7b  ragment values {
2e0d0 56 41 4c 55 45 53 20 63 6c 61 75 73 65 7d 20 56  VALUES clause} V
2e0e0 41 4c 55 45 53 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ALUES</tcl>.<h3>
2e0f0 54 68 65 20 56 41 4c 55 45 53 20 63 6c 61 75 73  The VALUES claus
2e100 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 70  e</h3>..<p>The p
2e110 68 72 61 73 65 20 22 56 41 4c 55 45 53 28 3c 69  hrase "VALUES(<i
2e120 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 29 22  >expr-list</i>)"
2e130 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20   means the same 
2e140 74 68 69 6e 67 0a 61 73 20 22 53 45 4c 45 43 54  thing.as "SELECT
2e150 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69   <i>expr-list</i
2e160 3e 22 2e 20 20 54 68 65 20 70 68 72 61 73 65 0a  >".  The phrase.
2e170 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d  "VALUES(<i>expr-
2e180 6c 69 73 74 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c  list-1</i>),...,
2e190 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c  (<i>expr-list-N<
2e1a0 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20  /i>)" means the 
2e1b0 73 61 6d 65 0a 74 68 69 6e 67 20 61 73 20 22 53  same.thing as "S
2e1c0 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69  ELECT <i>expr-li
2e1d0 73 74 2d 31 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41  st-1</i> UNION A
2e1e0 4c 4c 20 2e 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c  LL ... UNION ALL
2e1f0 0a 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d  .SELECT <i>expr-
2e200 6c 69 73 74 2d 4e 3c 2f 69 3e 22 2e 20 20 54 68  list-N</i>".  Th
2e210 65 72 65 20 69 73 20 6e 6f 20 61 64 76 61 6e 74  ere is no advant
2e220 61 67 65 20 74 6f 20 75 73 69 6e 67 20 6f 6e 65  age to using one
2e230 20 66 6f 72 6d 0a 6f 76 65 72 20 74 68 65 20 6f   form.over the o
2e240 74 68 65 72 2e 20 20 42 6f 74 68 20 66 6f 72 6d  ther.  Both form
2e250 73 20 79 69 65 6c 64 20 74 68 65 20 73 61 6d 65  s yield the same
2e260 20 72 65 73 75 6c 74 20 61 6e 64 20 62 6f 74 68   result and both
2e270 20 66 6f 72 6d 73 20 75 73 65 0a 74 68 65 20 73   forms use.the s
2e280 61 6d 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65  ame amount of me
2e290 6d 6f 72 79 20 61 6e 64 20 70 72 6f 63 65 73 73  mory and process
2e2a0 69 6e 67 20 74 69 6d 65 2e 0a 0a 3c 70 3e 54 68  ing time...<p>Th
2e2b0 65 72 65 20 61 72 65 20 73 6f 6d 65 20 72 65 73  ere are some res
2e2c0 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65  trictions on the
2e2d0 20 75 73 65 20 6f 66 20 61 20 56 41 4c 55 45 53   use of a VALUES
2e2e0 20 63 6c 61 75 73 65 20 74 68 61 74 20 61 72 65   clause that are
2e2f0 0a 6e 6f 74 20 73 68 6f 77 6e 20 6f 6e 20 74 68  .not shown on th
2e300 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  e syntax diagram
2e310 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  s:..<ul>.<li><p>
2e320 0a 41 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  .A VALUES clause
2e330 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f   cannot be follo
2e340 77 65 64 20 62 79 20 5b 4f 52 44 45 52 20 42 59  wed by [ORDER BY
2e350 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d 2e 0a 0a 3c  ] or [LIMIT]...<
2e360 6c 69 3e 3c 70 3e 0a 41 20 56 41 4c 55 45 53 20  li><p>.A VALUES 
2e370 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65  clause cannot be
2e380 20 75 73 65 64 20 74 6f 67 65 74 68 65 72 20 77   used together w
2e390 69 74 68 20 61 20 5b 57 49 54 48 5d 20 63 6c 61  ith a [WITH] cla
2e3a0 75 73 65 20 69 6e 20 61 0a 5b 73 69 6d 70 6c 65  use in a.[simple
2e3b0 20 53 45 4c 45 43 54 5d 2e 0a 3c 2f 75 6c 3e 0a   SELECT]..</ul>.
2e3c0 0a 0a 3c 68 33 3e 54 68 65 20 57 49 54 48 20 43  ..<h3>The WITH C
2e3d0 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 53  lause</h3>..<p>S
2e3e0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
2e3f0 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
2e400 6c 79 20 70 72 65 63 65 64 65 64 20 62 79 20 61  ly preceded by a
2e410 20 73 69 6e 67 6c 65 0a 5b 57 49 54 48 20 63 6c   single.[WITH cl
2e420 61 75 73 65 5d 20 74 68 61 74 20 64 65 66 69 6e  ause] that defin
2e430 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b  es one or more [
2e440 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
2e450 72 65 73 73 69 6f 6e 73 5d 0a 66 6f 72 20 75 73  ressions].for us
2e460 65 20 77 69 74 68 69 6e 20 74 68 65 20 53 45 4c  e within the SEL
2e470 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ECT statement...
2e480 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
2e490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e4a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e4b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e4c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e4d0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 55 50  #####.Section UP
2e4e0 44 41 54 45 20 75 70 64 61 74 65 20 7b 55 50 44  DATE update {UPD
2e4f0 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a 52  ATE *UPDATEs}..R
2e500 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
2e510 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
2e520 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e  t.</tcl>..<p>^An
2e530 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2e540 74 20 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64  t is used to mod
2e550 69 66 79 20 61 20 73 75 62 73 65 74 20 6f 66 20  ify a subset of 
2e560 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65  the values store
2e570 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f  d in .zero or mo
2e580 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64  re rows of the d
2e590 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 64  atabase table id
2e5a0 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20  entified by the 
2e5b0 0a 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61  .<i>qualified-ta
2e5c0 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65  ble-name</i> spe
2e5d0 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
2e5e0 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
2e5f0 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20  tement...<p>^If 
2e600 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
2e610 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 68 61  ment does not ha
2e620 76 65 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  ve a WHERE claus
2e630 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  e, all rows in t
2e640 68 65 0a 74 61 62 6c 65 20 61 72 65 20 6d 6f 64  he.table are mod
2e650 69 66 69 65 64 20 62 79 20 74 68 65 20 55 50 44  ified by the UPD
2e660 41 54 45 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ATE. ^Otherwise,
2e670 20 74 68 65 20 55 50 44 41 54 45 20 61 66 66 65   the UPDATE affe
2e680 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73 65 0a 72  cts only those.r
2e690 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
2e6a0 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
2e6b0 75 61 74 69 6e 67 20 74 68 65 20 57 48 45 52 45  uating the WHERE
2e6c0 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
2e6d0 6f 6e 20 61 73 20 61 20 0a 5b 62 6f 6f 6c 65 61  on as a .[boolea
2e6e0 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f  n expression|boo
2e6f0 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lean expression 
2e700 69 73 20 74 72 75 65 5d 2e 20 5e 49 74 20 69 73  is true]. ^It is
2e710 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 69 66   not an error if
2e720 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
2e730 65 20 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75  e does not evalu
2e740 61 74 65 20 74 6f 20 74 72 75 65 20 66 6f 72 20  ate to true for 
2e750 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74  any row in the t
2e760 61 62 6c 65 20 2d 20 74 68 69 73 20 6a 75 73 74  able - this just
2e770 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20  .means that the 
2e780 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
2e790 20 61 66 66 65 63 74 73 20 7a 65 72 6f 20 72 6f   affects zero ro
2e7a0 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69  ws...<p>The modi
2e7b0 66 69 63 61 74 69 6f 6e 73 20 6d 61 64 65 20 74  fications made t
2e7c0 6f 20 65 61 63 68 20 72 6f 77 20 61 66 66 65 63  o each row affec
2e7d0 74 65 64 20 62 79 20 61 6e 20 55 50 44 41 54 45  ted by an UPDATE
2e7e0 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65 0a 64   statement are.d
2e7f0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
2e800 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d   list of assignm
2e810 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  ents following t
2e820 68 65 20 53 45 54 20 6b 65 79 77 6f 72 64 2e 20  he SET keyword. 
2e830 45 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20  Each.assignment 
2e840 73 70 65 63 69 66 69 65 73 20 61 20 63 6f 6c 75  specifies a colu
2e850 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c  mn name to the l
2e860 65 66 74 20 6f 66 20 74 68 65 20 65 71 75 61 6c  eft of the equal
2e870 73 20 73 69 67 6e 20 61 6e 64 20 61 0a 73 63 61  s sign and a.sca
2e880 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74  lar expression t
2e890 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e 46 6f  o the right. ^Fo
2e8a0 72 20 65 61 63 68 20 61 66 66 65 63 74 65 64 20  r each affected 
2e8b0 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63  row, the named c
2e8c0 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74  olumns.are set t
2e8d0 6f 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75  o the values fou
2e8e0 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67  nd by evaluating
2e8f0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2e900 6e 67 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65  ng scalar .expre
2e910 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69  ssions. ^If a si
2e920 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  ngle column-name
2e930 20 61 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68   appears more th
2e940 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c  an once in the l
2e950 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e  ist of.assignmen
2e960 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61  t expressions, a
2e970 6c 6c 20 62 75 74 20 74 68 65 20 72 69 67 68 74  ll but the right
2e980 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20  most occurrence 
2e990 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c  is ignored. ^Col
2e9a0 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74  umns.that do not
2e9b0 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c   appear in the l
2e9c0 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e  ist of assignmen
2e9d0 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f  ts are left unmo
2e9e0 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61  dified. ^The sca
2e9f0 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  lar.expressions 
2ea00 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c  may refer to col
2ea10 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20  umns of the row 
2ea20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e  being updated. ^
2ea30 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c  In this case all
2ea40 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69  .scalar expressi
2ea50 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ons are evaluate
2ea60 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73  d before any ass
2ea70 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64  ignments are mad
2ea80 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69  e...<p>^The opti
2ea90 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  onal conflict-cl
2eaa0 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  ause allows the 
2eab0 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65  user to nominate
2eac0 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e 73   a specific.cons
2ead0 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
2eae0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
2eaf0 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69  ithm to use duri
2eb00 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44 41  ng this one UPDA
2eb10 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65  TE command..Refe
2eb20 72 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f 6e  r to the section
2eb30 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f   entitled [ON CO
2eb40 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
2eb50 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
2eb60 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63  on...<h3>Restric
2eb70 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20  tions on UPDATE 
2eb80 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69  Statements Withi
2eb90 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  n CREATE TRIGGER
2eba0 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h3>..<p>The fo
2ebb0 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e  llowing addition
2ebc0 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72 69  al syntax restri
2ebd0 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20  ctions apply to 
2ebe0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
2ebf0 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74  s that.occur wit
2ec00 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
2ec10 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
2ec20 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a  R] statement.  .
2ec30 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  .<ul>.  <li><p>^
2ec40 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d  The <i>table-nam
2ec50 65 3c 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20  e</i> specified 
2ec60 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 55 50  as part of an UP
2ec70 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 77  DATE statement w
2ec80 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20 74 72  ithin.      a tr
2ec90 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20  igger body must 
2eca0 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20  be unqualified. 
2ecb0 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  ^(In other words
2ecc0 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69 3e 64  , the.      <i>d
2ecd0 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
2ece0 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20  <b>.</b> prefix 
2ecf0 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  on the table nam
2ed00 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
2ed10 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c  is.      not all
2ed20 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69 67  owed within trig
2ed30 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20  gers.)^ ^Unless 
2ed40 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69  the table to whi
2ed50 63 68 20 74 68 65 20 74 72 69 67 67 65 72 0a 20  ch the trigger. 
2ed60 20 20 20 20 20 69 73 20 61 74 74 61 63 68 65 64       is attached
2ed70 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20   is in the TEMP 
2ed80 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 61  database, the ta
2ed90 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65  ble being update
2eda0 64 20 62 79 20 74 68 65 0a 20 20 20 20 20 20 74  d by the.      t
2edb0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d  rigger program m
2edc0 75 73 74 20 72 65 73 69 64 65 20 69 6e 20 74 68  ust reside in th
2edd0 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
2ede0 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74  as it. ^If the t
2edf0 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68  able.      to wh
2ee00 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
2ee10 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69  is attached is i
2ee20 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  n the TEMP datab
2ee30 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ase, then the.  
2ee40 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20      unqualified 
2ee50 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
2ee60 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20  e being updated 
2ee70 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74  is resolved in t
2ee80 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20  he same way.    
2ee90 20 20 61 73 20 69 74 20 69 73 20 66 6f 72 20 61    as it is for a
2eea0 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
2eeb0 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
2eec0 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
2eed0 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20  P database,.    
2eee0 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20    then the main 
2eef0 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61  database, then a
2ef00 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61 73  ny other databas
2ef10 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  es in the order 
2ef20 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 20 20  they were.      
2ef30 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c  attached)...  <l
2ef40 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
2ef50 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
2ef60 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
2ef70 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
2ef80 55 50 44 41 54 45 0a 20 20 20 20 20 20 73 74 61  UPDATE.      sta
2ef90 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
2efa0 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20  riggers.</p>..  
2efb0 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49  <li><p>^The LIMI
2efc0 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63  T and ORDER BY c
2efd0 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44 41 54  lauses for UPDAT
2efe0 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  E are unsupporte
2eff0 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74  d within.      t
2f000 72 69 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c  riggers, regardl
2f010 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
2f020 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75  lation options u
2f030 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c  sed to build SQL
2f040 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e  ite..</ul>..<h3>
2f050 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61  Optional LIMIT a
2f060 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75  nd ORDER BY Clau
2f070 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49  ses</h3>..<p>^(I
2f080 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c  f SQLite is buil
2f090 74 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  t with the [SQLI
2f0a0 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
2f0b0 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63  _DELETE_LIMIT].c
2f0c0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
2f0d0 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  on then the synt
2f0e0 61 78 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  ax of the UPDATE
2f0f0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
2f100 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69  tended.with opti
2f110 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e  onal ORDER BY an
2f120 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29  d LIMIT clauses)
2f130 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  ^ as follows:</p
2f140 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
2f150 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
2f160 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a  t-limited</tcl>.
2f170 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54  .<p>^If an UPDAT
2f180 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
2f190 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
2f1a0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
2f1b0 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a  er of rows that.
2f1c0 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20  will be updated 
2f1d0 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c  is found by eval
2f1e0 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d  uating the accom
2f1f0 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69  panying expressi
2f200 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69  on and casting.i
2f210 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
2f220 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69  value. ^A negati
2f230 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65  ve value is inte
2f240 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c  rpreted as "no l
2f250 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74  imit"...<p>^If t
2f260 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
2f270 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
2f280 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
2f290 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64  lue <i>N</i> and
2f2a0 20 74 68 65 0a 55 50 44 41 54 45 20 73 74 61 74   the.UPDATE stat
2f2b0 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44  ement has an ORD
2f2c0 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
2f2d0 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
2f2e0 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65   would be update
2f2f0 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65  d in.the absence
2f300 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c   of the LIMIT cl
2f310 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64 20  ause are sorted 
2f320 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
2f330 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 74 68   ORDER BY and th
2f340 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e  e.first <i>N</i>
2f350 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74   updated. ^(If t
2f360 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
2f370 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20  ent also has an 
2f380 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74  OFFSET clause,.t
2f390 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61  hen it is simila
2f3a0 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e  rly evaluated an
2f3b0 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74  d cast to an int
2f3c0 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74  eger value. If t
2f3d0 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73  he OFFSET.expres
2f3e0 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2f3f0 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  o a non-negative
2f400 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c   value <i>M</i>,
2f410 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
2f420 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72  <i>M</i>.rows ar
2f430 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68  e skipped and th
2f440 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e  e following <i>N
2f450 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65  </i> rows update
2f460 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70  d instead.)^..<p
2f470 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45 20  >^If the UPDATE 
2f480 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f  statement has no
2f490 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2f4a0 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
2f4b0 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70  that.would be up
2f4c0 64 61 74 65 64 20 69 6e 20 74 68 65 20 61 62 73  dated in the abs
2f4d0 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49  ence of the LIMI
2f4e0 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73 73  T clause are ass
2f4f0 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62  embled in an.arb
2f500 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65 66  itrary order bef
2f510 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65  ore applying the
2f520 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
2f530 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74  T clauses to det
2f540 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72  ermine .which ar
2f550 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74  e actually updat
2f560 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
2f570 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
2f580 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
2f590 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c  ment is used onl
2f5a0 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  y to determine w
2f5b0 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77  hich.rows fall w
2f5c0 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e  ithin the LIMIT.
2f5d0 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   The order in wh
2f5e0 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64  ich rows are mod
2f5f0 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72 61  ified is arbitra
2f600 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e  ry.and is not in
2f610 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65 20  fluenced by the 
2f620 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
2f630 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  )^..<tcl>.######
2f640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f680 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
2f690 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56   VACUUM vacuum V
2f6a0 41 43 55 55 4d 0a 0a 52 65 63 75 72 73 69 76 65  ACUUM..Recursive
2f6b0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61  BubbleDiagram va
2f6c0 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  cuum-stmt.</tcl>
2f6d0 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55  ..<p>.  The VACU
2f6e0 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69  UM command rebui
2f6f0 6c 64 73 20 74 68 65 20 65 6e 74 69 72 65 20 64  lds the entire d
2f700 61 74 61 62 61 73 65 2e 20 54 68 65 72 65 20 61  atabase. There a
2f710 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65  re several .  re
2f720 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61  asons an applica
2f730 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68  tion might do th
2f740 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  is:..<ul>.  <li>
2f750 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c   <p> ^Unless SQL
2f760 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69  ite is running i
2f770 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46  n "auto_vacuum=F
2f780 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20  ULL" mode, when 
2f790 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f  a large.     amo
2f7a0 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64  unt of data is d
2f7b0 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
2f7c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74  database file it
2f7d0 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65   leaves behind e
2f7e0 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c  mpty.     space,
2f7f0 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62   or "free" datab
2f800 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20  ase pages. This 
2f810 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
2f820 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20  se file might.  
2f830 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61     be larger tha
2f840 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73  n strictly neces
2f850 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  sary. ^Running V
2f860 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64  ACUUM to rebuild
2f870 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62   the .     datab
2f880 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69  ase reclaims thi
2f890 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75  s space and redu
2f8a0 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ces the size of 
2f8b0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2f8c0 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  e...  <li> <p> ^
2f8d0 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73  Frequent inserts
2f8e0 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64  , updates, and d
2f8f0 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65  eletes can cause
2f900 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f910 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d  le.     to becom
2f920 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77  e fragmented - w
2f930 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20  here data for a 
2f940 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
2f950 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72  index is scatter
2f960 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20  ed .     around 
2f970 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2f980 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  e. ^Running VACU
2f990 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  UM ensures that 
2f9a0 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20  each table and. 
2f9b0 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72      index is lar
2f9c0 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74  gely stored cont
2f9d0 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20  iguously within 
2f9e0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2f9f0 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20  e. ^In some.    
2fa00 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d   cases, VACUUM m
2fa10 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74  ay also reduce t
2fa20 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72  he number of par
2fa30 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
2fa40 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20  ges in.     the 
2fa50 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69  database, reduci
2fa60 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ng the size of t
2fa70 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2fa80 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69   further...  <li
2fa90 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c  > <p> ^Normally,
2faa0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70   the database [p
2fab0 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68  age_size] and wh
2fac0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
2fad0 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73   database.     s
2fae0 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61  upports [auto_va
2faf0 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f  cuum] must be co
2fb00 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20  nfigured before 
2fb10 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2fb20 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c  e is.     actual
2fb30 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77  ly created. ^How
2fb40 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69  ever, when not i
2fb50 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
2fb60 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20  og] mode, the . 
2fb70 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20      [page_size] 
2fb80 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63  and/or [auto_vac
2fb90 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20  uum] properties 
2fba0 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  of an existing d
2fbb0 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20  atabase may be. 
2fbc0 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75      changed by u
2fbd0 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73  sing the [page_s
2fbe0 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f  ize pragma|page_
2fbf0 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20  size]  and/or . 
2fc00 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d      [auto_vacuum
2fc10 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63  |pragma auto_vac
2fc20 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64  uum] pragmas and
2fc30 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c   then immediatel
2fc40 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20  y VACUUMing.    
2fc50 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e   the database. ^
2fc60 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61  When in [write-a
2fc70 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20  head log] mode, 
2fc80 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76  only the [auto_v
2fc90 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70  acuum].     supp
2fca0 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e  ort property can
2fcb0 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
2fcc0 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a  g VACUUM..</ul>.
2fcd0 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f 6e 6c  .<p>^(VACUUM onl
2fce0 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d  y works on the m
2fcf0 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 74  ain database. It
2fd00 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
2fd10 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a 61 74   to VACUUM an.at
2fd20 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2fd30 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  file.)^..<p>^The
2fd40 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
2fd50 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69 6e 67  works by copying
2fd60 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
2fd70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
2fd80 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 64  to.a temporary d
2fd90 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
2fda0 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e   then overwritin
2fdb0 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  g the original w
2fdc0 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65 6e 74  ith the .content
2fdd0 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  s of the tempora
2fde0 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e 20 6f  ry file. ^When o
2fdf0 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f  verwriting the o
2fe00 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62  riginal, a rollb
2fe10 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b  ack.journal or [
2fe20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
2fe30 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75 73 65   WAL file is use
2fe40 64 20 6a 75 73 74 20 61 73 20 69 74 20 77 6f 75  d just as it wou
2fe50 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a 6f 74  ld be for any.ot
2fe60 68 65 72 20 64 61 74 61 62 61 73 65 20 74 72 61  her database tra
2fe70 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69 73 20  nsaction. ^This 
2fe80 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20  means that when 
2fe90 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61 74 61  VACUUMing a data
2fea0 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68 20 61  base, .as much a
2feb0 73 20 74 77 69 63 65 20 74 68 65 20 73 69 7a 65  s twice the size
2fec0 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
2fed0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2fee0 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 66 72  s required in fr
2fef0 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e 0a 0a  ee.disk space...
2ff00 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
2ff10 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67  ommand may chang
2ff20 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20 52  e the [ROWID | R
2ff30 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69 65  OWIDs] of entrie
2ff40 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73 20  s in any.tables 
2ff50 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76 65  that do not have
2ff60 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e   an explicit [IN
2ff70 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
2ff80 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  Y]..</p>..<p>^A 
2ff90 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69 6c  VACUUM will fail
2ffa0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
2ffb0 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
2ffc0 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
2ffd0 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61 63  e one or.more ac
2ffe0 74 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d 65  tive SQL stateme
2fff0 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73 20 72  nts when it is r
30000 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20  un...<p>^(As of 
30010 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
30020 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  .1, an alternati
30030 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20  ve to using the 
30040 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74  VACUUM command t
30050 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65 20  o.reclaim space 
30060 61 66 74 65 72 20 64 61 74 61 20 68 61 73 20 62  after data has b
30070 65 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20 61  een deleted is a
30080 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c  uto-vacuum mode,
30090 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a 74   enabled using.t
300a0 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  he [auto_vacuum]
300b0 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e   pragma.)^ ^When
300c0 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69   [auto_vacuum] i
300d0 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
300e0 64 61 74 61 62 61 73 65 0a 66 72 65 65 20 70 61  database.free pa
300f0 67 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c 61  ges may be recla
30100 69 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65 74  imed after delet
30110 69 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69 6e  ing data, causin
30120 67 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 68  g the file to sh
30130 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65  rink,.without re
30140 62 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e 74  building the ent
30150 69 72 65 20 64 61 74 61 62 61 73 65 20 75 73 69  ire database usi
30160 6e 67 20 56 41 43 55 55 4d 2e 20 20 48 6f 77 65  ng VACUUM.  Howe
30170 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f  ver, using.[auto
30180 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61  _vacuum] can lea
30190 64 20 74 6f 20 65 78 74 72 61 20 64 61 74 61 62  d to extra datab
301a0 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e  ase file fragmen
301b0 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75  tation.  And [au
301c0 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20  to_vacuum].does 
301d0 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74  not compact part
301e0 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67  ially filled pag
301f0 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  es of the databa
30200 73 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65  se as VACUUM doe
30210 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  s...</p>...<tcl>
30220 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
30230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
30270 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44  Section {INDEXED
30280 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b   BY} indexedby {
30290 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f  {INDEXED BY} {NO
302a0 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74  T INDEXED}}..</t
302b0 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45  cl>.<p>^The INDE
302c0 58 45 44 20 42 59 20 70 68 72 61 73 65 20 66 6f  XED BY phrase fo
302d0 72 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74 65  rces the [SQLite
302e0 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20   query planner] 
302f0 74 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63 75  to use a.particu
30300 6c 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78 20  lar named index 
30310 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b  on a [DELETE], [
30320 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44  SELECT], or [UPD
30330 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ATE] statement..
30340 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  The INDEXED BY p
30350 68 72 61 73 65 20 69 73 20 61 6e 20 65 78 74 65  hrase is an exte
30360 6e 73 69 6f 6e 20 74 68 61 74 20 69 73 20 70 61  nsion that is pa
30370 72 74 69 63 75 6c 61 72 20 74 6f 20 53 51 4c 69  rticular to SQLi
30380 74 65 20 61 6e 64 0a 69 73 20 6e 6f 74 20 70 6f  te and.is not po
30390 72 74 61 62 6c 65 20 74 6f 20 6f 74 68 65 72 20  rtable to other 
303a0 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
303b0 69 6e 65 73 2e 0a 54 68 65 20 49 4e 44 45 58 45  ines..The INDEXE
303c0 44 20 42 59 20 70 68 72 61 73 65 20 63 61 6e 20  D BY phrase can 
303d0 62 65 20 73 65 65 6e 20 69 6e 20 74 68 65 20 66  be seen in the f
303e0 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 0a  ollowing syntax.
303f0 64 69 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c  diagrams:</p>..<
30400 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75  tcl>.RecursiveBu
30410 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c  bbleDiagram qual
30420 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
30430 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
30440 20 22 49 4e 44 45 58 45 44 20 42 59 20 69 6e 64   "INDEXED BY ind
30450 65 78 2d 6e 61 6d 65 22 20 70 68 72 61 73 65 20  ex-name" phrase 
30460 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20 74  specifies that t
30470 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d  he named index.m
30480 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 20 6f  ust be used in o
30490 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20  rder to look up 
304a0 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70 72  values on the pr
304b0 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e  eceding table..^
304c0 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f  If index-name do
304d0 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 20  es not exist or 
304e0 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 66  cannot be used f
304f0 6f 72 20 74 68 65 20 71 75 65 72 79 2c 20 74 68  or the query, th
30500 65 6e 0a 74 68 65 20 70 72 65 70 61 72 61 74 69  en.the preparati
30510 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  on of the SQL st
30520 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e  atement fails..^
30530 28 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58 45  (The "NOT INDEXE
30540 44 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  D" clause specif
30550 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64 65  ies that no inde
30560 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64 20  x shall be used 
30570 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20 74  when.accessing t
30580 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62  he preceding tab
30590 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d  le, including im
305a0 70 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63 72  plied indices cr
305b0 65 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20 61  eate by.UNIQUE a
305c0 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  nd PRIMARY KEY c
305d0 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f 77  onstraints.  How
305e0 65 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47 45  ever, the INTEGE
305f0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63 61  R PRIMARY KEY.ca
30600 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20  n still be used 
30610 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69  to look up entri
30620 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f  es even when "NO
30630 54 20 49 4e 44 45 58 45 44 22 20 69 73 20 73 70  T INDEXED" is sp
30640 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a  ecified.)^</p>..
30650 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61  <p>Some SQL data
30660 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f  base engines pro
30670 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72  vide non-standar
30680 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69  d "hint" mechani
30690 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65  sms which.can be
306a0 20 75 73 65 64 20 74 6f 20 67 69 76 65 20 74 68   used to give th
306b0 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
306c0 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68  r clues about wh
306d0 61 74 20 69 6e 64 69 63 65 73 20 69 74 20 73 68  at indices it sh
306e0 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70  ould.use for a p
306f0 61 72 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d  articular statem
30700 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20  ent.  The INDEX 
30710 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c  BY clause of SQL
30720 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c  ite is .<em>not<
30730 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d  /em> a hinting m
30740 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20  echanism and it 
30750 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73  should not be us
30760 65 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65  ed as such..^The
30770 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
30780 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65  se does not give
30790 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68   the optimizer h
307a0 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68  ints about which
307b0 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69   index.to use; i
307c0 74 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69  t gives the opti
307d0 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d  mizer a requirem
307e0 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64  ent of which ind
307f0 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74  ex to use..^If t
30800 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
30810 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20  er is unable to 
30820 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70  use the index sp
30830 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49  ecified by the.I
30840 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20  NDEX BY clause, 
30850 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77  then the query w
30860 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
30870 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e   error.</p>..<p>
30880 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  The INDEXED BY c
30890 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74  lause is <em>not
308a0 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66  </em> intended f
308b0 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67  or use in tuning
308c0 0a 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63 65  .the performance
308d0 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68   of a query.  Th
308e0 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20  e intent of the 
308f0 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
30900 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20  e is.to raise a 
30910 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69  run-time error i
30920 66 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67  f a schema chang
30930 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70  e, such as dropp
30940 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20  ing or.creating 
30950 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73  an index, causes
30960 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20   the query plan 
30970 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69  for a time-sensi
30980 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68  tive query.to ch
30990 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58  ange.  The INDEX
309a0 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ED BY clause is 
309b0 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70  designed to help
309c0 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61   detect.undesira
309d0 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63  ble query plan c
309e0 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65  hanges during re
309f0 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67  gression testing
30a00 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65  ..Developers are
30a10 20 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f   admonished to o
30a20 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49  mit all use of I
30a30 4e 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67  NDEXED BY during
30a40 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73  .application des
30a50 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ign, implementat
30a60 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e  ion, testing, an
30a70 64 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e  d tuning.  If.IN
30a80 44 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62  DEXED BY is to b
30a90 65 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69  e used at all, i
30aa0 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65  t should be inse
30ab0 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
30ac0 0a 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65  .end of the deve
30ad0 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20  lopment process 
30ae0 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f  when "locking do
30af0 77 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70  wn" a design.</p
30b00 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a  >..<h3>See Also:
30b10 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  </h3>..<ol>.<li>
30b20 3c 70 3e 54 68 65 20 5b 71 75 65 72 79 20 70 6c  <p>The [query pl
30b30 61 6e 6e 65 72 20 63 68 65 63 6b 6c 69 73 74 5d  anner checklist]
30b40 20 64 65 73 63 72 69 62 65 73 20 73 74 65 70 73   describes steps
30b50 20 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f   that applicatio
30b60 6e 0a 64 65 76 65 6c 6f 70 65 72 73 20 73 68 6f  n.developers sho
30b70 75 6c 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f  uld following to
30b80 20 68 65 6c 70 20 72 65 73 6f 6c 76 65 20 71 75   help resolve qu
30b90 65 72 79 20 70 6c 61 6e 6e 65 72 20 70 72 6f 62  ery planner prob
30ba0 6c 65 6d 73 2e 0a 4e 6f 74 69 63 65 20 74 68 65  lems..Notice the
30bb0 20 74 68 61 74 20 74 68 65 20 75 73 65 20 6f 66   that the use of
30bc0 20 49 4e 44 45 58 45 44 20 42 59 20 69 73 20 61   INDEXED BY is a
30bd0 20 6c 61 73 74 20 72 65 73 6f 72 74 2c 20 74 6f   last resort, to
30be0 20 62 65 20 75 73 65 64 20 6f 6e 6c 79 0a 77 68   be used only.wh
30bf0 65 6e 20 61 6c 6c 20 6f 74 68 65 72 20 6d 65 61  en all other mea
30c00 73 75 72 65 73 20 66 61 69 6c 2e 3c 2f 70 3e 0a  sures fail.</p>.
30c10 0a 3c 6c 69 3e 3c 70 3e 5b 75 70 6c 75 73 63 6f  .<li><p>[uplusco
30c20 6e 74 72 6f 6c 7c 54 68 65 20 75 6e 61 72 79 20  ntrol|The unary 
30c30 22 2b 22 20 6f 70 65 72 61 74 6f 72 5d 0a 63 61  "+" operator].ca
30c40 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73  n be used to dis
30c50 71 75 61 6c 69 66 79 20 74 65 72 6d 73 20 69 6e  qualify terms in
30c60 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
30c70 65 20 66 72 6f 6d 20 75 73 65 20 62 79 20 69 6e  e from use by in
30c80 64 69 63 65 73 2e 0a 43 61 72 65 66 75 6c 20 75  dices..Careful u
30c90 73 65 20 6f 66 20 75 6e 61 72 79 20 2b 20 63 61  se of unary + ca
30ca0 6e 20 73 6f 6d 65 74 69 6d 65 73 20 68 65 6c 70  n sometimes help
30cb0 20 70 72 65 76 65 6e 74 20 74 68 65 20 71 75 65   prevent the que
30cc0 72 79 20 70 6c 61 6e 6e 65 72 20 66 72 6f 6d 0a  ry planner from.
30cd0 63 68 6f 6f 73 69 6e 67 20 61 20 70 6f 6f 72 20  choosing a poor 
30ce0 69 6e 64 65 78 20 77 69 74 68 6f 75 74 20 72 65  index without re
30cf0 73 74 72 69 63 74 69 6e 67 20 69 74 20 74 6f 20  stricting it to 
30d00 75 73 69 6e 67 20 6f 6e 65 20 73 70 65 63 69 66  using one specif
30d10 69 63 20 69 6e 64 65 78 2e 0a 43 61 72 65 66 75  ic index..Carefu
30d20 6c 20 70 6c 61 63 65 6d 65 6e 74 20 6f 66 20 75  l placement of u
30d30 6e 61 72 79 20 2b 20 6f 70 65 72 61 74 6f 72 73  nary + operators
30d40 20 69 73 20 61 20 62 65 74 74 65 72 20 6d 65 74   is a better met
30d50 68 6f 64 20 66 6f 72 20 63 6f 6e 74 72 6f 6c 6c  hod for controll
30d60 69 6e 67 20 0a 77 68 69 63 68 20 69 6e 64 69 63  ing .which indic
30d70 65 73 20 61 72 65 20 75 73 65 64 20 62 79 20 61  es are used by a
30d80 20 71 75 65 72 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69   query.</p>..<li
30d90 3e 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65 33  ><p>The [sqlite3
30da0 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20  _stmt_status()] 
30db0 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20  C/C++ interface 
30dc0 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68  together with th
30dd0 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  e.[SQLITE_STMTST
30de0 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54  ATUS_FULLSCAN_ST
30df0 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f  EP] and [SQLITE_
30e00 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d  STMTSTATUS_SORT]
30e10 20 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75 73   verbs.can be us
30e20 65 64 20 74 6f 20 64 65 74 65 63 74 20 61 74 20  ed to detect at 
30e30 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e  run-time when an
30e40 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69   SQL statement i
30e50 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66  s not.making eff
30e60 65 63 74 69 76 65 20 75 73 65 20 6f 66 20 69 6e  ective use of in
30e70 64 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70 70  dices.  Many app
30e80 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70 72  lications may pr
30e90 65 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65 20  efer to.use the 
30ea0 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74  [sqlite3_stmt_st
30eb0 61 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63  atus()] interfac
30ec0 65 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64 65  e to detect inde
30ed0 78 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72 20  x misuse.rather 
30ee0 74 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45 44  than the INDEXED
30ef0 20 42 59 20 70 68 72 61 73 65 20 64 65 73 63 72   BY phrase descr
30f00 69 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 3c  ibed here.</p>.<
30f10 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /ol>..<tcl>.####
30f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 23 20 41 20 6c 69  #########.# A li
30f70 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20  st of keywords. 
30f80 20 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75   A asterisk occu
30f90 72 73 20 61 66 74 65 72 20 74 68 65 20 6b 65 79  rs after the key
30fa0 77 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e  word if it is on
30fb0 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20  .# the fallback 
30fc0 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77  list..#.set keyw
30fd0 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20  ord_list [lsort 
30fe0 7b 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43  {.   ABORT.   AC
30ff0 54 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41  TION.   ADD.   A
31000 46 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41  FTER.   ALL.   A
31010 4c 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a  LTER.   ANALYZE.
31020 20 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20     AND.   AS.   
31030 41 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20  ASC.   ATTACH.  
31040 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20   AUTOINCREMENT. 
31050 20 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49    BEFORE.   BEGI
31060 4e 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20  N.   BETWEEN.   
31070 42 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20  BY.   CASCADE.  
31080 20 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20   CASE.   CAST.  
31090 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54   CHECK.   COLLAT
310a0 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43  E.   COLUMN.   C
310b0 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43  OMMIT.   CONFLIC
310c0 54 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a  T.   CONSTRAINT.
310d0 20 20 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f     CREATE.   CRO
310e0 53 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41  SS.   CURRENT_DA
310f0 54 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  TE.   CURRENT_TI
31100 4d 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  ME.   CURRENT_TI
31110 4d 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41 42  MESTAMP.   DATAB
31120 41 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a 20  ASE.   DEFAULT. 
31130 20 20 44 45 46 45 52 52 45 44 0a 20 20 20 44 45    DEFERRED.   DE
31140 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45  FERRABLE.   DELE
31150 54 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44 45  TE.   DESC.   DE
31160 54 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43 54  TACH.   DISTINCT
31170 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a  .   DROP.   END.
31180 20 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a     EACH.   ELSE.
31190 20 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43     ESCAPE.   EXC
311a0 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45  EPT.   EXCLUSIVE
311b0 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58  .   EXISTS.   EX
311c0 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20  PLAIN.   FAIL.  
311d0 20 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a   FOR.   FOREIGN.
311e0 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a     FROM.   FULL.
311f0 20 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50     GLOB.   GROUP
31200 0a 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46  .   HAVING.   IF
31210 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d  .   IGNORE.   IM
31220 4d 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20  MEDIATE.   IN.  
31230 20 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45   INDEX.   INDEXE
31240 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20  D.   INITIALLY. 
31250 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52    INNER.   INSER
31260 54 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20  T.   INSTEAD.   
31270 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54  INTERSECT.   INT
31280 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c  O.   IS.   ISNUL
31290 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59  L.   JOIN.   KEY
312a0 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45  .   LEFT.   LIKE
312b0 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54  .   LIMIT.   MAT
312c0 43 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20  CH.   NATURAL.  
312d0 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f   NO.   NOT.   NO
312e0 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20  TNULL.   NULL.  
312f0 20 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20   OF.   OFFSET.  
31300 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44   ON.   OR.   ORD
31310 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50  ER.   OUTER.   P
31320 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20  LAN.   PRAGMA.  
31330 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52   PRIMARY.   QUER
31340 59 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52 45  Y.   RAISE.   RE
31350 43 55 52 53 49 56 45 0a 20 20 20 52 45 46 45 52  CURSIVE.   REFER
31360 45 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50 0a  ENCES.   REGEXP.
31370 20 20 20 52 45 49 4e 44 45 58 0a 20 20 20 52 45     REINDEX.   RE
31380 4c 45 41 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a  LEASE.   RENAME.
31390 20 20 20 52 45 50 4c 41 43 45 0a 20 20 20 52 45     REPLACE.   RE
313a0 53 54 52 49 43 54 0a 20 20 20 52 49 47 48 54 0a  STRICT.   RIGHT.
313b0 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52     ROLLBACK.   R
313c0 4f 57 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 0a  OW.   SAVEPOINT.
313d0 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54     SELECT.   SET
313e0 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d  .   TABLE.   TEM
313f0 50 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 0a 20  P.   TEMPORARY. 
31400 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20    THEN.   TO.   
31410 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54  TRANSACTION.   T
31420 52 49 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a  RIGGER.   UNION.
31430 20 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44     UNIQUE.   UPD
31440 41 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20  ATE.   USING.   
31450 56 41 43 55 55 4d 0a 20 20 20 56 41 4c 55 45 53  VACUUM.   VALUES
31460 0a 20 20 20 56 49 45 57 0a 20 20 20 56 49 52 54  .   VIEW.   VIRT
31470 55 41 4c 0a 20 20 20 57 49 54 48 0a 20 20 20 57  UAL.   WITH.   W
31480 49 54 48 4f 55 54 0a 20 20 20 57 48 45 4e 0a 20  ITHOUT.   WHEN. 
31490 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70    WHERE.}]..hd_p
314a0 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d  uts {<DIV class=
314b0 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a  "pdf_section">}.
314c0 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20  Section {SQLite 
314d0 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72  Keywords} keywor
314e0 64 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72  ds {{*SQL keywor
314f0 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73  d} {SQL keywords
31500 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49  }}.hd_puts {</DI
31510 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  V>}.</tcl>..<p>T
31520 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
31530 73 70 65 63 69 66 69 65 73 20 61 20 68 75 67 65  specifies a huge
31540 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f   number of keywo
31550 72 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f  rds which may no
31560 74 0a 62 65 20 75 73 65 64 20 61 73 20 74 68 65  t.be used as the
31570 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73   names of tables
31580 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d  , indices, colum
31590 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75  ns, databases, u
315a0 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63  ser-defined.func
315b0 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e  tions, collation
315c0 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  s, virtual table
315d0 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79   modules, or any
315e0 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a   other named obj
315f0 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66  ect..The list of
31600 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20   keywords is so 
31610 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70 65  long that few pe
31620 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65  ople can remembe
31630 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20  r them all..For 
31640 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79  most SQL code, y
31650 6f 75 72 20 73 61 66 65 73 74 20 62 65 74 20 69  our safest bet i
31660 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61  s to never use a
31670 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  ny English langu
31680 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20  age.word as the 
31690 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64  name of a user-d
316a0 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f  efined object.</
316b0 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61  p>..<p>If you wa
316c0 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77  nt to use a keyw
316d0 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79  ord as a name, y
316e0 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65  ou need to quote
316f0 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20   it.  There.are 
31700 66 6f 75 72 20 77 61 79 73 20 6f 66 20 71 75 6f  four ways of quo
31710 74 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e  ting keywords in
31720 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70   SQLite:</p>..<p
31730 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  >.<blockquote>.<
31740 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20  table>.<tr>.<td 
31750 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
31760 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74  'keyword'</b></t
31770 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
31780 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
31790 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
317a0 20 71 75 6f 74 65 73 20 69 73 20 61 20 73 74 72   quotes is a str
317b0 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64  ing literal.</td
317c0 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
317d0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
317e0 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f  >"keyword"</b></
317f0 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
31800 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20  d>^A keyword in 
31810 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73  double-quotes is
31820 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c   an identifier.<
31830 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09  /td></tr>..<tr>.
31840 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
31850 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64  ><b>&#91;keyword
31860 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  &#93;</b></td><t
31870 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
31880 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64  keyword enclosed
31890 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b   in square brack
318a0 65 74 73 20 69 73 20 0a 20 20 20 20 20 20 20 20  ets is .        
318b0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20  an identifier.  
318c0 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e  This is not stan
318d0 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20  dard SQL.  This 
318e0 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  quoting mechanis
318f0 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65  m.        is use
31900 64 20 62 79 20 4d 53 20 41 63 63 65 73 73 20 61  d by MS Access a
31910 6e 64 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e  nd SQL Server an
31920 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  d is included in
31930 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20   SQLite for.    
31940 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74      compatibilit
31950 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  y.</td></tr>..<t
31960 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
31970 6f 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77  op"><b>&#96;keyw
31980 6f 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64  ord&#96;</b></td
31990 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
319a0 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f  ^A keyword enclo
319b0 73 65 64 20 69 6e 20 67 72 61 76 65 20 61 63 63  sed in grave acc
319c0 65 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64 65  ents (ASCII code
319d0 20 39 36 29 20 69 73 20 0a 20 20 20 20 20 20 20   96) is .       
319e0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20   an identifier. 
319f0 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61   This is not sta
31a00 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73  ndard SQL.  This
31a10 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69   quoting mechani
31a20 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73  sm.        is us
31a30 65 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20  ed by MySQL and 
31a40 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53  is included in S
31a50 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20  QLite for.      
31a60 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e    compatibility.
31a70 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62  </td></tr>.</tab
31a80 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
31a90 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72  >.</p>..<p>For r
31aa0 65 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63  esilience when c
31ab0 6f 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68  onfronted with h
31ac0 69 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74  istorical SQL st
31ad0 61 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65  atements, SQLite
31ae0 0a 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20  .will sometimes 
31af0 62 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67  bend the quoting
31b00 20 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70   rules above:</p
31b10 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e  >..<ul>.<li><p>^
31b20 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20  If a keyword in 
31b30 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65  single.quotes (e
31b40 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20  x: <b>'key'</b> 
31b50 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e  or <b>'glob'</b>
31b60 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63  ) is used in a c
31b70 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20  ontext where.an 
31b80 69 64 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c  identifier is al
31b90 6c 6f 77 65 64 20 62 75 74 20 77 68 65 72 65 20  lowed but where 
31ba0 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
31bb0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c   is not allowed,
31bc0 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20   then.the token 
31bd0 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f  is understood to
31be0 20 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65   be an identifie
31bf0 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73  r instead of a s
31c00 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c  tring literal..<
31c10 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
31c20 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69  >^If a keyword i
31c30 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20  n double.quotes 
31c40 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62  (ex: <b>"key"</b
31c50 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f  > or <b>"glob"</
31c60 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61  b>) is used in a
31c70 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69   context where.i
31c80 74 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f  t cannot be reso
31c90 6c 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74  lved to an ident
31ca0 69 66 69 65 72 20 62 75 74 20 77 68 65 72 65 20  ifier but where 
31cb0 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
31cc0 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65  .is allowed, the
31cd0 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75  n the token is u
31ce0 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20  nderstood to be 
31cf0 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
31d00 20 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69   instead.of an i
31d10 64 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f  dentifier.</p></
31d20 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72  li>.</ul>..<p>Pr
31d30 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61  ogrammers are ca
31d40 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75  utioned not to u
31d50 73 65 20 74 68 65 20 74 77 6f 20 65 78 63 65 70  se the two excep
31d60 74 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20  tions described 
31d70 69 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20  in.the previous 
31d80 62 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70  bullets.  We emp
31d90 68 61 73 69 7a 65 20 74 68 61 74 20 74 68 65 79  hasize that they
31da0 20 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74   exist only so t
31db0 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d  hat old.and ill-
31dc0 66 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65  formed SQL state
31dd0 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63  ments will run c
31de0 6f 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72  orrectly.  Futur
31df0 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51  e versions of.SQ
31e00 4c 69 74 65 20 6d 69 67 68 74 20 72 61 69 73 65  Lite might raise
31e10 20 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64 20   errors instead 
31e20 6f 66 20 61 63 63 65 70 74 69 6e 67 20 74 68 65  of accepting the
31e30 20 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65   malformed.state
31e40 6d 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62 79  ments covered by
31e50 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20   the exceptions 
31e60 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a  above.</p>..<p>.
31e70 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20  SQLite adds new 
31e80 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69  keywords from ti
31e90 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20  me to time when 
31ea0 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20  it takes on new 
31eb0 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20  features..So to 
31ec0 70 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f 64  prevent your cod
31ed0 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f  e from being bro
31ee0 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e  ken by future en
31ef0 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20  hancements, you 
31f00 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20  should.normally 
31f10 71 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74 69  quote any identi
31f20 66 69 65 72 20 74 68 61 74 20 69 73 20 61 6e 20  fier that is an 
31f30 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65  English language
31f40 20 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79   word, even if.y
31f50 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74  ou do not have t
31f60 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65  o..</p>..<p>.The
31f70 20 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f 77   list below show
31f80 73 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6b  s all possible k
31f90 65 79 77 6f 72 64 73 20 75 73 65 64 20 62 79 20  eywords used by 
31fa0 61 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51 4c  any build of.SQL
31fb0 69 74 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ite regardless o
31fc0 66 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  f [compile-time 
31fd0 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74  options].  .Most
31fe0 20 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e 66   reasonable conf
31ff0 69 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20 6d  igurations use m
32000 6f 73 74 20 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ost or all of th
32010 65 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62 75  ese keywords,.bu
32020 74 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73 20  t some keywords 
32030 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20 77  may be omitted w
32040 68 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  hen SQL language
32050 20 66 65 61 74 75 72 65 73 20 61 72 65 0a 64 69   features are.di
32060 73 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72 64  sabled..^(Regard
32070 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  less of the comp
32080 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75  ile-time configu
32090 72 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e  ration, any iden
320a0 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20 6e  tifier that is n
320b0 6f 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77  ot on.the follow
320c0 69 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73  ing <tcl>hd_puts
320d0 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f   [llength $keywo
320e0 72 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65  rd_list]</tcl> e
320f0 6c 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e  lement.list is n
32100 6f 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f 20  ot a keyword to 
32110 74 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 69  the SQL parser i
32120 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a  n SQLite:.</p>..
32130 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
32140 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22  ble width="100%"
32150 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  ><tr>.<td align=
32160 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22 74  "left" valign="t
32170 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25 22 3e  op" width="20%">
32180 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c  .<tcl>.set n [ll
32190 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c  ength $keyword_l
321a0 69 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a  ist].set nCol 5.
321b0 73 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b  set nRow [expr {
321c0 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43  ($n+$nCol-1)/$nC
321d0 6f 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72  ol}].set i 0.for
321e0 65 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f  each word $keywo
321f0 72 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b  rd_list {.  if {
32200 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20  $i==$nRow} {.   
32210 20 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e 3c   hd_puts "</td><
32220 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c  td valign=\"top\
32230 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c 22  " align=\"left\"
32240 20 77 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e 22   width=\"20%\">"
32250 0a 20 20 20 20 73 65 74 20 69 20 31 0a 20 20 7d  .    set i 1.  }
32260 20 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63 72   else {.    incr
32270 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73   i.  }.  hd_puts
32280 20 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a 7d   "$word<br>\n".}
32290 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74  .</tcl>.</td></t
322a0 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  r></table></bloc
322b0 6b 71 75 6f 74 65 3e 29 5e 0a                    kquote>)^.