Documentation Source Text

Hex Artifact Content
Login

Artifact 4e2932452870e56ae43c3b1dcc69c8c7ec3b23d6:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 7b 57 49 54 48 20 63 6c 61 75  .    {{WITH clau
03d0: 73 65 7d 20 77 69 74 68 63 6c 61 75 73 65 7d 0a  se} withclause}.
03e0: 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d      {comment com
03f0: 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c 41  ment}.    {EXPLA
0400: 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20 20  IN explain}.    
0410: 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  {expression expr
0420: 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54 52  }.    {{BEGIN TR
0430: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
0440: 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43 4f  action}.    {{CO
0450: 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e  MMIT TRANSACTION
0460: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f  } transaction CO
0470: 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44 20  MMIT}.    {{END 
0480: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0490: 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54 7d  nsaction COMMIT}
04a0: 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20  .    {{ROLLBACK 
04b0: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
04c0: 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41 43  nsaction ROLLBAC
04d0: 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49 4e  K}.    {SAVEPOIN
04e0: 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20 20  T savepoint}.   
04f0: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
0500: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
0510: 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20 7b  SAVEPOINT}.    {
0520: 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68 74  PRAGMA pragma.ht
0530: 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f 4e  ml}.    {{ON CON
0540: 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
0550: 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43 52  nflict}.    {{CR
0560: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0570: 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52 4f  eview}.    {{DRO
0580: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
0590: 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20 54  }.    {{CREATE T
05a0: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
05b0: 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52 4f  igger}.    {{DRO
05c0: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
05d0: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41 54  rigger}.    {{AT
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
05f0: 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45 54  ttach}.    {{DET
0600: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
0610: 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45 49  tach}.      {REI
0620: 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20  NDEX reindex}.  
0630: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
0640: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20   altertable}.   
0650: 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c   {{ANALYZE} anal
0660: 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58  yze}.    {{INDEX
0670: 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
0680: 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74  }.    {{aggregat
0690: 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e functions} agg
06a0: 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20  func aggfunc}.  
06b0: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
06c0: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72  ns} corefunc cor
06d0: 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74  efunc}.    {{dat
06e0: 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
06f0: 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64  ions} datefunc d
0700: 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65  atefunc}.    {ke
0710: 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20  ywords keywords 
0720: 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
0730: 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73    }.  set lang_s
0740: 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78  ection_break [ex
0750: 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c  pr {([llength $l
0760: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
0770: 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61  ]+2)/3}].  forea
0780: 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73  ch {section} [ls
0790: 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69  ort -index 0 -di
07a0: 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73  ctionary $lang_s
07b0: 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20  ection_list] {. 
07c0: 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c   foreach {s_titl
07d0: 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73  e s_tag s_kw} $s
07e0: 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b  ection {}.  if {
07f0: 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20  $s_kw == ""} {. 
0800: 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74     set s_kw $s_t
0810: 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24  itle.  }.  if {$
0820: 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68  s_tag=="pragma.h
0830: 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  tml"} {.    set 
0840: 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65  url $s_tag.  } e
0850: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72  lse {.    set ur
0860: 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74  l lang_$s_tag.ht
0870: 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f  ml.  }.  hd_reso
0880: 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77  lve "<li>\[$s_kw
0890: 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e  |$s_title\]</li>
08a0: 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20  ".  incr i.  if 
08b0: 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69  {$i==$lang_secti
08c0: 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d  on_break || $i==
08d0: 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f  2*$lang_section_
08e0: 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f  break} {.    hd_
08f0: 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e  puts "</ul></td>
0900: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
0910: 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c  \"><ul>".  }.}.<
0920: 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e  /tcl>.</ul></td>
0930: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  </tr></table>..<
0940: 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20  p>^The routines 
0950: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0960: 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33  _v2()], [sqlite3
0970: 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71  _prepare()],.[sq
0980: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
0990: 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  )], [sqlite3_pre
09a0: 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b  pare16_v2()], .[
09b0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c  sqlite3_exec()],
09c0: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65   and [sqlite3_ge
09d0: 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70  t_table()] accep
09e0: 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  t.an SQL stateme
09f0: 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d  nt list (sql-stm
0a00: 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73  t-list) which is
0a10: 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70   a semicolon-sep
0a20: 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73  arated.list of s
0a30: 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  tatements.</p>..
0a40: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
0a50: 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74  am sql-stmt-list
0a60: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20  </tcl>..<p>Each 
0a70: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  SQL statement in
0a80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c   the statement l
0a90: 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ist is an instan
0aa0: 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77  ce of the.follow
0ab0: 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ing:</p>..<tcl>B
0ac0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
0ad0: 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63  -stmt</tcl>..<tc
0ae0: 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72  l>.proc Operator
0af0: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75   {name} {.  retu
0b00: 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  rn "<font color=
0b10: 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67  \"#2c2cf0\"><big
0b20: 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f  >$name</big></fo
0b30: 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74  nt>".}.proc Nont
0b40: 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b  erminal {name} {
0b50: 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66  .  return "<i><f
0b60: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33  ont color=\"#ff3
0b70: 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e  434\">$name</fon
0b80: 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b  t></i>".}.proc K
0b90: 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a  eyword {name} {.
0ba0: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0bb0: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0bc0: 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a  ">$name</font>".
0bd0: 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b  }.proc Example {
0be0: 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74  text} {.  hd_put
0bf0: 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  s "<blockquote><
0c00: 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c  pre>$text</pre><
0c10: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a  /blockquote>".}.
0c20: 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e  .proc Section {n
0c30: 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72  ame label keywor
0c40: 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44  ds} {.  global D
0c50: 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61  OC.  hd_close_ma
0c60: 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69  in.  hd_open_mai
0c70: 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74  n lang_$label.ht
0c80: 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22  ml.  hd_header "
0c90: 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e  SQLite Query Lan
0ca0: 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44  guage: $name" $D
0cb0: 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e  OC/pages/lang.in
0cc0: 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f  .  eval hd_keywo
0cd0: 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20  rds $keywords.  
0ce0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65  if {[lsearch $ke
0cf0: 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d  ywords $name] ==
0d00: 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20   -1 && [lsearch 
0d10: 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65  $keywords *$name
0d20: 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65  ] == -1} {.    e
0d30: 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
0d40: 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20  { $name }.  }.  
0d50: 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69  hd_puts {<h1 ali
0d60: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20  gn="center">SQL 
0d70: 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79  As Understood By
0d80: 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20   SQLite</h1>}.  
0d90: 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68  hd_puts {<p><a h
0da0: 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e  ref="lang.html">
0db0: 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20  [Top]</a></p>}. 
0dc0: 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e   hd_puts "<h2>$n
0dd0: 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23  ame</h2>".}..###
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e20: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0e30: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0e40: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0e50: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41  ALTER TABLE} {*A
0e60: 4c 54 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  LTER}}..Recursiv
0e70: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
0e80: 6c 74 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  lter-table-stmt.
0e90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69 74  </tcl>..<p>SQLit
0ea0: 65 20 73 75 70 70 6f 72 74 73 20 61 20 6c 69 6d  e supports a lim
0eb0: 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20 41  ited subset of A
0ec0: 4c 54 45 52 20 54 41 42 4c 45 2e 0a 54 68 65 20  LTER TABLE..The 
0ed0: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
0ee0: 61 6e 64 20 69 6e 20 53 51 4c 69 74 65 20 61 6c  and in SQLite al
0ef0: 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f  lows the user to
0f00: 20 72 65 6e 61 6d 65 20 61 20 74 61 62 6c 65 0a   rename a table.
0f10: 6f 72 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  or to add a new 
0f20: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
0f30: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 3c 2f 70  sting table..</p
0f40: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f50: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 69 73  AME TO syntax is
0f60: 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d 65 20   used to rename 
0f70: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
0f80: 66 69 65 64 20 62 79 20 0a 3c 69 3e 26 23 39 31  fied by .<i>&#91
0f90: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26  ;database-name.&
0fa0: 23 39 33 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  #93;table-name</
0fb0: 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62  i> to <i>new-tab
0fc0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54  le-name</i>.)^.T
0fd0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e  his command .can
0fe0: 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d  not be used to m
0ff0: 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77  ove a table betw
1000: 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  een attached dat
1010: 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20  abases, only to 
1020: 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20  rename .a table 
1030: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
1040: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
1050: 70 3e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  p> ^If the table
1060: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68   being renamed h
1070: 61 73 20 74 72 69 67 67 65 72 73 20 6f 72 20 69  as triggers or i
1080: 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65  ndices, then the
1090: 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68  se remain.attach
10a0: 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ed to the table 
10b0: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
10c0: 6e 20 72 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77  n renamed.  ^How
10d0: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
10e0: 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66 69  re.any view defi
10f0: 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74  nitions, or stat
1100: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
1110: 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61 74  by triggers that
1120: 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74 61   refer to.the ta
1130: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1140: 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74  d, these are not
1150: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d   automatically m
1160: 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20 74  odified to use t
1170: 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d  he new.table nam
1180: 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72 65  e. If this is re
1190: 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69 67  quired, the trig
11a0: 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65 66  gers or view def
11b0: 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62 65  initions must be
11c0: 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63  .dropped and rec
11d0: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
11e0: 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d 65  e new table name
11f0: 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a   by hand..</p>..
1200: 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  <p>^If [foreign 
1210: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1220: 20 61 72 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b   are .[foreign_k
1230: 65 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61  eys pragma | ena
1240: 62 6c 65 64 5d 20 77 68 65 6e 20 61 20 74 61 62  bled] when a tab
1250: 6c 65 20 69 73 20 72 65 6e 61 6d 65 64 2c 20 74  le is renamed, t
1260: 68 65 6e 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e  hen any.[foreign
1270: 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45  -key-clause | RE
1280: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 73  FERENCES clauses
1290: 5d 20 69 6e 20 61 6e 79 20 74 61 62 6c 65 20 28  ] in any table (
12a0: 65 69 74 68 65 72 20 74 68 65 0a 74 61 62 6c 65  either the.table
12b0: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f   being renamed o
12c0: 72 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 61 62  r some other tab
12d0: 6c 65 29 0a 74 68 61 74 20 72 65 66 65 72 20 74  le).that refer t
12e0: 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
12f0: 67 20 72 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f  g renamed are mo
1300: 64 69 66 69 65 64 20 74 6f 20 72 65 66 65 72 20  dified to refer 
1310: 0a 74 6f 20 74 68 65 20 72 65 6e 61 6d 65 64 20  .to the renamed 
1320: 74 61 62 6c 65 20 62 79 20 69 74 73 20 6e 65 77  table by its new
1330: 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65   name...<p> ^The
1340: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74   ADD COLUMN synt
1350: 61 78 0a 69 73 20 75 73 65 64 20 74 6f 20 61 64  ax.is used to ad
1360: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74  d a new column t
1370: 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  o an existing ta
1380: 62 6c 65 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f  ble..^The new co
1390: 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79 73 20 61  lumn is always a
13a0: 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65  ppended to the e
13b0: 6e 64 20 6f 66 20 74 68 65 20 6c 69 73 74 20 6f  nd of the list o
13c0: 66 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d  f existing colum
13d0: 6e 73 2e 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d  ns..The [column-
13e0: 64 65 66 5d 20 72 75 6c 65 20 64 65 66 69 6e 65  def] rule define
13f0: 73 20 74 68 65 20 63 68 61 72 61 63 74 65 72 69  s the characteri
1400: 73 74 69 63 73 20 6f 66 20 74 68 65 20 6e 65 77  stics of the new
1410: 20 63 6f 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e   column..^(The n
1420: 65 77 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61  ew column may ta
1430: 6b 65 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  ke any of the fo
1440: 72 6d 73 20 70 65 72 6d 69 73 73 69 62 6c 65 20  rms permissible 
1450: 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 41 42  in a [CREATE TAB
1460: 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77  LE].statement, w
1470: 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ith the followin
1480: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 3a 29  g restrictions:)
1490: 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20  ^.<ul>.<li>^The 
14a0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68  column may not h
14b0: 61 76 65 20 61 20 50 52 49 4d 41 52 59 20 4b 45  ave a PRIMARY KE
14c0: 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f 6e 73  Y or UNIQUE cons
14d0: 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69  traint.</li>.<li
14e0: 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79  >^The column may
14f0: 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65 66 61   not have a defa
1500: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43 55 52  ult value of CUR
1510: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
1520: 4e 54 5f 44 41 54 45 2c 20 0a 20 20 20 20 43 55  NT_DATE, .    CU
1530: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c  RRENT_TIMESTAMP,
1540: 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
1550: 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73  n in parentheses
1560: 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61  .</li>.<li>^If a
1570: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
1580: 61 69 6e 74 20 69 73 20 73 70 65 63 69 66 69 65  aint is specifie
1590: 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75  d, then the colu
15a0: 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 0a 20  mn must have a. 
15b0: 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65     default value
15c0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c   other than NULL
15d0: 2e 0a 3c 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69  ..<li>^If [forei
15e0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
15f0: 74 73 5d 20 61 72 65 20 5b 66 6f 72 65 69 67 6e  ts] are [foreign
1600: 5f 6b 65 79 73 20 70 72 61 67 6d 61 20 7c 20 65  _keys pragma | e
1610: 6e 61 62 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20  nabled] and.    
1620: 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20  a column with a 
1630: 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61  [foreign-key-cla
1640: 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45 53  use | REFERENCES
1650: 20 63 6c 61 75 73 65 5d 0a 20 20 20 20 69 73 20   clause].    is 
1660: 61 64 64 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d  added, the colum
1670: 6e 20 6d 75 73 74 20 68 61 76 65 20 61 20 64 65  n must have a de
1680: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e  fault value of N
1690: 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  ULL..</ul>..<p>^
16a0: 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 77  Note also that w
16b0: 68 65 6e 20 61 64 64 69 6e 67 20 61 20 5b 43 48  hen adding a [CH
16c0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c  ECK constraint],
16d0: 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74   the CHECK const
16e0: 72 61 69 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73  raint.is not tes
16f0: 74 65 64 20 61 67 61 69 6e 73 74 20 70 72 65 65  ted against pree
1700: 78 69 73 74 69 6e 67 20 72 6f 77 73 20 6f 66 20  xisting rows of 
1710: 74 68 65 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73  the table..^This
1720: 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61   can result in a
1730: 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
1740: 61 69 6e 73 20 64 61 74 61 20 74 68 61 74 0a 69  ains data that.i
1750: 73 20 69 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  s in violation o
1760: 66 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73  f the CHECK cons
1770: 74 72 61 69 6e 74 2e 20 20 46 75 74 75 72 65 20  traint.  Future 
1780: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
1790: 74 65 20 6d 69 67 68 74 0a 63 68 61 6e 67 65 20  te might.change 
17a0: 74 6f 20 76 61 6c 69 64 61 74 65 20 43 48 45 43  to validate CHEC
17b0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 73  K constraints as
17c0: 20 74 68 65 79 20 61 72 65 20 61 64 64 65 64 2e   they are added.
17d0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78  </p>..<p> The ex
17e0: 65 63 75 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20  ecution time of 
17f0: 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  the ALTER TABLE 
1800: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 64 65 70  command is indep
1810: 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d  endent of.the am
1820: 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 6e 20  ount of data in 
1830: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
1840: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
1850: 61 6e 64 20 72 75 6e 73 20 61 73 20 71 75 69 63  and runs as quic
1860: 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77  kly.on a table w
1870: 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72  ith 10 million r
1880: 6f 77 73 20 61 73 20 69 74 20 64 6f 65 73 20 6f  ows as it does o
1890: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 31  n a table with 1
18a0: 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41   row..</p>..<p>A
18b0: 66 74 65 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20  fter ADD COLUMN 
18c0: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20  has been run on 
18d0: 61 20 64 61 74 61 62 61 73 65 2c 20 74 68 61 74  a database, that
18e0: 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 6e   database will n
18f0: 6f 74 0a 62 65 20 72 65 61 64 61 62 6c 65 20 62  ot.be readable b
1900: 79 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  y SQLite version
1910: 20 33 2e 31 2e 33 20 61 6e 64 20 65 61 72 6c 69   3.1.3 and earli
1920: 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  er.</p>..<tcl>.#
1930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1980: 63 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20  ction {ANALYZE} 
1990: 61 6e 61 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a  analyze ANALYZE.
19a0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
19b0: 44 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d  Diagram analyze-
19c0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
19d0: 20 5e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f   ^The ANALYZE co
19e0: 6d 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73 74  mmand gathers st
19f0: 61 74 69 73 74 69 63 73 20 61 62 6f 75 74 20 74  atistics about t
1a00: 61 62 6c 65 73 20 61 6e 64 0a 69 6e 64 69 63 65  ables and.indice
1a10: 73 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 65  s and stores the
1a20: 20 63 6f 6c 6c 65 63 74 65 64 20 69 6e 66 6f 72   collected infor
1a30: 6d 61 74 69 6f 6e 0a 69 6e 20 5b 69 6e 74 65 72  mation.in [inter
1a40: 6e 61 6c 20 74 61 62 6c 65 73 5d 20 6f 66 20 74  nal tables] of t
1a50: 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 72  he database wher
1a60: 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  e the query opti
1a70: 6d 69 7a 65 72 20 63 61 6e 0a 61 63 63 65 73 73  mizer can.access
1a80: 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   the information
1a90: 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 68   and use it to h
1aa0: 65 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72 20  elp make better 
1ab0: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 63  query planning c
1ac0: 68 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20 61  hoices..^If no a
1ad0: 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69 76  rguments are giv
1ae0: 65 6e 2c 20 61 6c 6c 20 61 74 74 61 63 68 65 64  en, all attached
1af0: 20 64 61 74 61 62 61 73 65 73 20 61 72 65 0a 61   databases are.a
1b00: 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61 20  nalyzed.  ^If a 
1b10: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
1b20: 20 67 69 76 65 6e 20 61 73 20 74 68 65 20 61 72   given as the ar
1b30: 67 75 6d 65 6e 74 2c 20 74 68 65 6e 20 61 6c 6c  gument, then all
1b40: 20 74 61 62 6c 65 73 0a 61 6e 64 20 69 6e 64 69   tables.and indi
1b50: 63 65 73 20 69 6e 20 74 68 61 74 20 6f 6e 65 20  ces in that one 
1b60: 64 61 74 61 62 61 73 65 20 61 72 65 20 61 6e 61  database are ana
1b70: 6c 79 7a 65 64 2e 20 20 0a 5e 49 66 20 74 68 65  lyzed.  .^If the
1b80: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 74   argument is a t
1b90: 61 62 6c 65 20 6e 61 6d 65 2c 20 74 68 65 6e 20  able name, then 
1ba0: 6f 6e 6c 79 20 74 68 61 74 20 74 61 62 6c 65 20  only that table 
1bb0: 61 6e 64 20 74 68 65 0a 69 6e 64 69 63 65 73 20  and the.indices 
1bc0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1bd0: 74 68 61 74 20 74 61 62 6c 65 20 61 72 65 20 61  that table are a
1be0: 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 74 68  nalyzed.  ^If th
1bf0: 65 20 61 72 67 75 6d 65 6e 74 0a 69 73 20 61 6e  e argument.is an
1c00: 20 69 6e 64 65 78 20 6e 61 6d 65 2c 20 74 68 65   index name, the
1c10: 6e 20 6f 6e 6c 79 20 74 68 61 74 20 6f 6e 65 20  n only that one 
1c20: 69 6e 64 65 78 20 69 73 20 61 6e 61 6c 79 7a 65  index is analyze
1c30: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  d.</p>..<p> ^The
1c40: 20 64 65 66 61 75 6c 74 20 69 6d 70 6c 65 6d 65   default impleme
1c50: 6e 74 61 74 69 6f 6e 20 73 74 6f 72 65 73 20 61  ntation stores a
1c60: 6c 6c 20 73 74 61 74 69 73 74 69 63 73 20 69 6e  ll statistics in
1c70: 20 61 20 73 69 6e 67 6c 65 0a 74 61 62 6c 65 20   a single.table 
1c80: 6e 61 6d 65 64 20 22 5b 73 71 6c 69 74 65 5f 73  named "[sqlite_s
1c90: 74 61 74 31 5d 22 2e 20 20 5e 49 66 20 53 51 4c  tat1]".  ^If SQL
1ca0: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
1cb0: 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45  with the.[SQLITE
1cc0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 6f  _ENABLE_STAT3] o
1cd0: 70 74 69 6f 6e 20 61 6e 64 20 77 69 74 68 6f 75  ption and withou
1ce0: 74 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  t the [SQLITE_EN
1cf0: 41 42 4c 45 5f 53 54 41 54 34 5d 0a 6f 70 74 69  ABLE_STAT4].opti
1d00: 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74 69 6f  on, then additio
1d10: 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20 64 61  nal histogram da
1d20: 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20  ta is.collected 
1d30: 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20 5b 73  and stored in [s
1d40: 71 6c 69 74 65 5f 73 74 61 74 33 5d 2e 0a 20 5e  qlite_stat3].. ^
1d50: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
1d60: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a 5b  piled with the.[
1d70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
1d80: 41 54 34 5d 20 6f 70 74 69 6f 6e 2c 20 74 68 65  AT4] option, the
1d90: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
1da0: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
1db0: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
1dc0: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
1dd0: 74 61 74 34 5d 2e 0a 4f 6c 64 65 72 20 76 65 72  tat4]..Older ver
1de0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1df0: 77 6f 75 6c 64 20 6d 61 6b 65 20 75 73 65 20 6f  would make use o
1e00: 66 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 73 74  f the [sqlite_st
1e10: 61 74 32 5d 20 74 61 62 6c 65 0a 77 68 65 6e 20  at2] table.when 
1e20: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 5b 53  compiled with [S
1e30: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
1e40: 54 32 5d 20 62 75 74 20 61 6c 6c 20 72 65 63 65  T2] but all rece
1e50: 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53  nt versions of.S
1e60: 51 4c 69 74 65 20 69 67 6e 6f 72 65 20 74 68 65  QLite ignore the
1e70: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
1e80: 62 6c 65 2e 0a 46 75 74 75 72 65 20 65 6e 68 61  ble..Future enha
1e90: 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65  ncements may cre
1ea0: 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 5b  ate.additional [
1eb0: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d  internal tables]
1ec0: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
1ed0: 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63 65  ame pattern exce
1ee0: 70 74 20 77 69 74 68 0a 66 69 6e 61 6c 20 64 69  pt with.final di
1ef0: 67 69 74 20 6c 61 72 67 65 72 20 74 68 61 6e 20  git larger than 
1f00: 22 34 22 2e 0a 41 6c 6c 20 6f 66 20 74 68 65 73  "4"..All of thes
1f10: 65 20 74 61 62 6c 65 73 20 61 72 65 20 63 6f 6c  e tables are col
1f20: 6c 65 63 74 69 76 65 6c 79 20 72 65 66 65 72 72  lectively referr
1f30: 65 64 20 74 6f 20 61 73 20 22 73 74 61 74 69 73  ed to as "statis
1f40: 74 69 63 73 20 74 61 62 6c 65 73 22 2e 0a 3c 2f  tics tables"..</
1f50: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 63 6f 6e  p>..<p> ^The con
1f60: 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61 74  tent of the stat
1f70: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 63 61  istics tables ca
1f80: 6e 20 62 65 20 71 75 65 72 69 65 64 20 75 73 69  n be queried usi
1f90: 6e 67 20 5b 53 45 4c 45 43 54 5d 0a 61 6e 64 20  ng [SELECT].and 
1fa0: 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20 75  can be changed u
1fb0: 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54 45  sing the [DELETE
1fc0: 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 61 6e 64  ], [INSERT], and
1fd0: 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61 6e   [UPDATE] comman
1fe0: 64 73 2e 0a 5e 28 54 68 65 20 5b 44 52 4f 50 20  ds..^(The [DROP 
1ff0: 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 77  TABLE] command w
2000: 6f 72 6b 73 20 6f 6e 20 73 74 61 74 69 73 74 69  orks on statisti
2010: 63 73 20 74 61 62 6c 65 73 0a 61 73 20 6f 66 20  cs tables.as of 
2020: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
2030: 2e 37 2e 39 2e 29 5e 0a 5e 54 68 65 20 5b 41 4c  .7.9.)^.^The [AL
2040: 54 45 52 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61  TER TABLE] comma
2050: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b  nd does not work
2060: 20 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 74   on statistics t
2070: 61 62 6c 65 73 2e 0a 41 70 70 72 6f 70 72 69 61  ables..Appropria
2080: 74 65 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62  te care should b
2090: 65 20 75 73 65 64 20 77 68 65 6e 20 63 68 61 6e  e used when chan
20a0: 67 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ging the content
20b0: 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74 69   of the statisti
20c0: 63 73 0a 74 61 62 6c 65 73 20 61 73 20 69 6e 76  cs.tables as inv
20d0: 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e  alid content can
20e0: 20 63 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f   cause SQLite to
20f0: 20 73 65 6c 65 63 74 20 69 6e 65 66 66 69 63 69   select ineffici
2100: 65 6e 74 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e  ent.query plans.
2110: 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61    Generally spea
2120: 6b 69 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64  king, one should
2130: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20   not modify the 
2140: 63 6f 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20 73  content of.the s
2150: 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73  tatistics tables
2160: 20 62 79 20 61 6e 79 20 6d 65 63 68 61 6e 69 73   by any mechanis
2170: 6d 20 6f 74 68 65 72 20 74 68 61 6e 20 69 6e 76  m other than inv
2180: 6f 6b 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a  oking the.ANALYZ
2190: 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 53 65 65  E command.  .See
21a0: 20 22 5b 4d 61 6e 75 61 6c 20 43 6f 6e 74 72 6f   "[Manual Contro
21b0: 6c 20 4f 66 20 51 75 65 72 79 20 50 6c 61 6e 73  l Of Query Plans
21c0: 20 55 73 69 6e 67 20 53 51 4c 49 54 45 5f 53 54   Using SQLITE_ST
21d0: 41 54 20 54 61 62 6c 65 73 5d 22 20 66 6f 72 0a  AT Tables]" for.
21e0: 66 75 72 74 68 65 72 20 69 6e 66 6f 72 6d 61 74  further informat
21f0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53  ion.</p>..<p> ^S
2200: 74 61 74 69 73 74 69 63 73 20 67 61 74 68 65 72  tatistics gather
2210: 65 64 20 62 79 20 41 4e 41 4c 59 5a 45 20 61 72  ed by ANALYZE ar
2220: 65 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61  e not automatica
2230: 6c 6c 79 20 75 70 64 61 74 65 64 20 61 73 0a 74  lly updated as.t
2240: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
2250: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
2260: 65 73 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74  es.  If the cont
2270: 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
2280: 61 73 65 0a 63 68 61 6e 67 65 73 20 73 69 67 6e  ase.changes sign
2290: 69 66 69 63 61 6e 74 6c 79 2c 20 6f 72 20 69 66  ificantly, or if
22a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
22b0: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
22c0: 65 6e 20 6f 6e 65 20 73 68 6f 75 6c 64 0a 63 6f  en one should.co
22d0: 6e 73 69 64 65 72 20 72 65 72 75 6e 6e 69 6e 67  nsider rerunning
22e0: 20 74 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d   the ANALYZE com
22f0: 6d 61 6e 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  mand in order to
2300: 20 75 70 64 61 74 65 20 74 68 65 20 73 74 61 74   update the stat
2310: 69 73 74 69 63 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  istics.</p>..<p>
2320: 20 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   The query plann
2330: 65 72 20 6c 6f 61 64 73 20 74 68 65 20 63 6f 6e  er loads the con
2340: 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61 74  tent of the stat
2350: 69 73 74 69 63 73 20 74 61 62 6c 65 73 0a 69 6e  istics tables.in
2360: 74 6f 20 6d 65 6d 6f 72 79 20 77 68 65 6e 20 74  to memory when t
2370: 68 65 20 73 63 68 65 6d 61 20 69 73 20 72 65 61  he schema is rea
2380: 64 2e 20 20 5e 48 65 6e 63 65 2c 20 77 68 65 6e  d.  ^Hence, when
2390: 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a   an application.
23a0: 63 68 61 6e 67 65 73 20 74 68 65 20 73 74 61 74  changes the stat
23b0: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 64 69  istics tables di
23c0: 72 65 63 74 6c 79 2c 20 53 51 4c 69 74 65 20 77  rectly, SQLite w
23d0: 69 6c 6c 20 6e 6f 74 20 69 6d 6d 65 64 69 61 74  ill not immediat
23e0: 65 6c 79 0a 6e 6f 74 69 63 65 20 74 68 65 20 63  ely.notice the c
23f0: 68 61 6e 67 65 73 2e 20 5e 41 6e 20 61 70 70 6c  hanges. ^An appl
2400: 69 63 61 74 69 6f 6e 0a 63 61 6e 20 66 6f 72 63  ication.can forc
2410: 65 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  e the query plan
2420: 6e 65 72 20 74 6f 20 72 65 72 65 61 64 20 74 68  ner to reread th
2430: 65 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62  e statistics tab
2440: 6c 65 73 20 62 79 20 72 75 6e 6e 69 6e 67 0a 3c  les by running.<
2450: 62 3e 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65  b>ANALYZE sqlite
2460: 5f 6d 61 73 74 65 72 3c 2f 62 3e 2e 20 3c 2f 70  _master</b>. </p
2470: 3e 0a 0a 3c 70 3e 20 0a 0a 3c 74 63 6c 3e 0a 23  >..<p> ..<tcl>.#
2480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
24d0: 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44 41  ction {ATTACH DA
24e0: 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20 2a  TABASE} attach *
24f0: 41 54 54 41 43 48 0a 0a 52 65 63 75 72 73 69 76  ATTACH..Recursiv
2500: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
2510: 74 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c  ttach-stmt.</tcl
2520: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54 54 41  >..<p> ^The ATTA
2530: 43 48 20 44 41 54 41 42 41 53 45 20 73 74 61 74  CH DATABASE stat
2540: 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f 74 68  ement adds anoth
2550: 65 72 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c  er database .fil
2560: 65 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  e to the current
2570: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
2580: 63 74 69 6f 6e 5d 2e 20 0a 5e 54 68 65 20 66 69  ction]. .^The fi
2590: 6c 65 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64  lename for the d
25a0: 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 61 74  atabase to be at
25b0: 74 61 63 68 65 64 20 69 73 20 74 68 65 20 76 61  tached is the va
25c0: 6c 75 65 20 6f 66 0a 74 68 65 20 65 78 70 72 65  lue of.the expre
25d0: 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72  ssion that occur
25e0: 73 20 62 65 66 6f 72 65 20 74 68 65 20 41 53 20  s before the AS 
25f0: 6b 65 79 77 6f 72 64 2e 0a 5e 54 68 65 20 66 69  keyword..^The fi
2600: 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61  lename of the da
2610: 74 61 62 61 73 65 20 66 6f 6c 6c 6f 77 73 20 74  tabase follows t
2620: 68 65 20 73 61 6d 65 20 73 65 6d 61 6e 74 69 63  he same semantic
2630: 73 20 61 73 20 74 68 65 0a 66 69 6c 65 6e 61 6d  s as the.filenam
2640: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 5b 73  e argument to [s
2650: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 5d 20 61  qlite3_open()] a
2660: 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  nd [sqlite3_open
2670: 5f 76 32 28 29 5d 3b 20 74 68 65 0a 73 70 65 63  _v2()]; the.spec
2680: 69 61 6c 20 6e 61 6d 65 20 22 5b 3a 6d 65 6d 6f  ial name "[:memo
2690: 72 79 3a 5d 22 20 72 65 73 75 6c 74 73 20 69 6e  ry:]" results in
26a0: 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f 72 79 20 64   an [in-memory d
26b0: 61 74 61 62 61 73 65 5d 20 61 6e 64 20 61 6e 0a  atabase] and an.
26c0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 72 65 73  empty string res
26d0: 75 6c 74 73 20 69 6e 20 61 20 6e 65 77 20 74 65  ults in a new te
26e0: 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65  mporary database
26f0: 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20  ..^The filename 
2700: 61 72 67 75 6d 65 6e 74 20 63 61 6e 20 62 65 20  argument can be 
2710: 61 20 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65 5d  a [URI filename]
2720: 20 69 66 20 55 52 49 20 66 69 6c 65 6e 61 6d 65   if URI filename
2730: 20 70 72 6f 63 65 73 73 69 6e 67 0a 69 73 20 65   processing.is e
2740: 6e 61 62 6c 65 20 6f 6e 20 74 68 65 20 64 61 74  nable on the dat
2750: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2760: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 62  .  The default b
2770: 65 68 61 76 69 6f 72 20 69 73 20 66 6f 72 0a 55  ehavior is for.U
2780: 52 49 20 66 69 6c 65 6e 61 6d 65 73 20 74 6f 20  RI filenames to 
2790: 62 65 20 64 69 73 61 62 6c 65 64 2c 20 68 6f 77  be disabled, how
27a0: 65 76 65 72 20 74 68 61 74 20 6d 69 67 68 74 20  ever that might 
27b0: 63 68 61 6e 67 65 20 69 6e 20 61 20 66 75 74 75  change in a futu
27c0: 72 65 20 72 65 6c 65 61 73 65 0a 6f 66 20 53 51  re release.of SQ
27d0: 4c 69 74 65 2c 20 73 6f 20 61 70 70 6c 69 63 61  Lite, so applica
27e0: 74 69 6f 6e 20 64 65 76 65 6c 6f 70 65 72 73 20  tion developers 
27f0: 61 72 65 20 61 64 76 69 73 65 64 20 74 6f 20 70  are advised to p
2800: 6c 61 6e 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e  lan accordingly.
2810: 0a 0a 3c 70 3e 54 68 65 20 6e 61 6d 65 20 74 68  ..<p>The name th
2820: 61 74 20 6f 63 63 75 72 73 20 61 66 74 65 72 20  at occurs after 
2830: 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20 69  the AS keyword i
2840: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
2850: 65 20 64 61 74 61 62 61 73 65 0a 75 73 65 64 20  e database.used 
2860: 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
2870: 4c 69 74 65 2e 0a 5e 54 68 65 20 64 61 74 61 62  Lite..^The datab
2880: 61 73 65 2d 6e 61 6d 65 73 20 27 6d 61 69 6e 27  ase-names 'main'
2890: 20 61 6e 64 20 0a 27 74 65 6d 70 27 20 72 65 66   and .'temp' ref
28a0: 65 72 20 74 6f 20 74 68 65 20 6d 61 69 6e 20 64  er to the main d
28b0: 61 74 61 62 61 73 65 20 61 6e 64 20 74 68 65 20  atabase and the 
28c0: 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f  database used fo
28d0: 72 20 0a 74 65 6d 70 6f 72 61 72 79 20 74 61 62  r .temporary tab
28e0: 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61 69 6e 20  les.  ^The main 
28f0: 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73  and temp databas
2900: 65 73 20 63 61 6e 6e 6f 74 20 62 65 20 61 74 74  es cannot be att
2910: 61 63 68 65 64 20 6f 72 0a 64 65 74 61 63 68 65  ached or.detache
2920: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 61  d.</p>..<p> ^(Ta
2930: 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61 63  bles in an attac
2940: 68 65 64 20 64 61 74 61 62 61 73 65 20 63 61 6e  hed database can
2950: 20 62 65 20 72 65 66 65 72 72 65 64 20 74 6f 20   be referred to 
2960: 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74 61 78  using the syntax
2970: 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61   .<i>database-na
2980: 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  me.table-name</i
2990: 3e 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e 61  >.)^  ^If the na
29a0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
29b0: 69 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73 73  is unique.across
29c0: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
29d0: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
29e0: 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61  main and temp da
29f0: 74 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74 68  tabases, then th
2a00: 65 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61  e.<i>database-na
2a10: 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73  me</i> prefix is
2a20: 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2e 20 20   not required.  
2a30: 5e 49 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  ^If two or more 
2a40: 74 61 62 6c 65 73 20 69 6e 0a 64 69 66 66 65 72  tables in.differ
2a50: 65 6e 74 20 64 61 74 61 62 61 73 65 73 20 68 61  ent databases ha
2a60: 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ve the same name
2a70: 20 61 6e 64 20 74 68 65 20 0a 3c 69 3e 64 61 74   and the .<i>dat
2a80: 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70  abase-name</i> p
2a90: 72 65 66 69 78 20 69 73 20 6e 6f 74 20 75 73 65  refix is not use
2aa0: 64 20 6f 6e 20 61 20 74 61 62 6c 65 20 72 65 66  d on a table ref
2ab0: 65 72 65 6e 63 65 2c 20 74 68 65 6e 20 74 68 65  erence, then the
2ac0: 0a 74 61 62 6c 65 20 63 68 6f 73 65 6e 20 69 73  .table chosen is
2ad0: 20 74 68 65 20 6f 6e 65 20 69 6e 20 74 68 65 20   the one in the 
2ae0: 64 61 74 61 62 61 73 65 20 74 68 61 74 20 77 61  database that wa
2af0: 73 20 6c 65 61 73 74 20 72 65 63 65 6e 74 6c 79  s least recently
2b00: 20 61 74 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a   attached.</p>..
2b10: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
2b20: 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
2b30: 69 70 6c 65 20 61 74 74 61 63 68 65 64 20 64 61  iple attached da
2b40: 74 61 62 61 73 65 73 20 61 72 65 20 61 74 6f 6d  tabases are atom
2b50: 69 63 2c 0a 61 73 73 75 6d 69 6e 67 20 74 68 61  ic,.assuming tha
2b60: 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
2b70: 61 73 65 20 69 73 20 6e 6f 74 20 22 5b 3a 6d 65  ase is not "[:me
2b80: 6d 6f 72 79 3a 5d 22 20 61 6e 64 20 74 68 65 20  mory:]" and the 
2b90: 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20  .[journal_mode] 
2ba0: 69 73 20 6e 6f 74 20 5b 57 41 4c 5d 2e 20 20 5e  is not [WAL].  ^
2bb0: 28 49 66 20 74 68 65 20 6d 61 69 6e 0a 64 61 74  (If the main.dat
2bc0: 61 62 61 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72  abase is ":memor
2bd0: 79 3a 22 20 6f 72 20 69 66 20 74 68 65 20 6a 6f  y:" or if the jo
2be0: 75 72 6e 61 6c 5f 6d 6f 64 65 20 69 73 20 57 41  urnal_mode is WA
2bf0: 4c 2c 20 74 68 65 6e 20 0a 74 72 61 6e 73 61 63  L, then .transac
2c00: 74 69 6f 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74  tions continue t
2c10: 6f 20 62 65 20 61 74 6f 6d 69 63 20 77 69 74 68  o be atomic with
2c20: 69 6e 20 65 61 63 68 20 69 6e 64 69 76 69 64 75  in each individu
2c30: 61 6c 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  al.database file
2c40: 2e 20 42 75 74 20 69 66 20 74 68 65 20 68 6f 73  . But if the hos
2c50: 74 20 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68  t computer crash
2c60: 65 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  es in the middle
2c70: 0a 6f 66 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 77  .of a [COMMIT] w
2c80: 68 65 72 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65  here two or more
2c90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
2ca0: 61 72 65 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d  are updated,.som
2cb0: 65 20 6f 66 20 74 68 6f 73 65 20 66 69 6c 65 73  e of those files
2cc0: 20 6d 69 67 68 74 20 67 65 74 20 74 68 65 20 63   might get the c
2cd0: 68 61 6e 67 65 73 20 77 68 65 72 65 20 6f 74 68  hanges where oth
2ce0: 65 72 73 0a 6d 69 67 68 74 20 6e 6f 74 2e 29 5e  ers.might not.)^
2cf0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72  .</p>..<p> ^Ther
2d00: 65 20 69 73 20 61 20 6c 69 6d 69 74 2c 20 73 65  e is a limit, se
2d10: 74 20 75 73 69 6e 67 20 5b 73 71 6c 69 74 65 33  t using [sqlite3
2d20: 5f 6c 69 6d 69 74 28 29 5d 20 61 6e 64 20 0a 5b  _limit()] and .[
2d30: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54  SQLITE_LIMIT_ATT
2d40: 41 43 48 45 44 5d 2c 20 74 6f 20 74 68 65 20 6e  ACHED], to the n
2d50: 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73  umber of databas
2d60: 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a 73  es that can be.s
2d70: 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 20 61 74  imultaneously at
2d80: 74 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67  tached to a sing
2d90: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
2da0: 65 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63  ection.</p>..<tc
2db0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
2dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e00: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 42 45 47 49  ##.Section {BEGI
2e10: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  N TRANSACTION} t
2e20: 72 61 6e 73 61 63 74 69 6f 6e 20 7b 2a 42 45 47  ransaction {*BEG
2e30: 49 4e 20 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42 41  IN COMMIT ROLLBA
2e40: 43 4b 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  CK}..RecursiveBu
2e50: 62 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69  bbleDiagram begi
2e60: 6e 2d 73 74 6d 74 20 63 6f 6d 6d 69 74 2d 73 74  n-stmt commit-st
2e70: 6d 74 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74  mt rollback-stmt
2e80: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f  .</tcl>..<p>.^No
2e90: 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20   changes can be 
2ea0: 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61 74 61  made to the data
2eb0: 62 61 73 65 20 65 78 63 65 70 74 20 77 69 74 68  base except with
2ec0: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
2ed0: 2e 0a 5e 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74  ..^Any command t
2ee0: 68 61 74 20 63 68 61 6e 67 65 73 20 74 68 65 20  hat changes the 
2ef0: 64 61 74 61 62 61 73 65 20 28 62 61 73 69 63 61  database (basica
2f00: 6c 6c 79 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d  lly, any SQL com
2f10: 6d 61 6e 64 0a 6f 74 68 65 72 20 74 68 61 6e 20  mand.other than 
2f20: 5b 53 45 4c 45 43 54 5d 29 20 77 69 6c 6c 20 61  [SELECT]) will a
2f30: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61  utomatically sta
2f40: 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
2f50: 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61   if.one is not a
2f60: 6c 72 65 61 64 79 20 69 6e 20 65 66 66 65 63 74  lready in effect
2f70: 2e 20 20 5e 41 75 74 6f 6d 61 74 69 63 61 6c 6c  .  ^Automaticall
2f80: 79 20 73 74 61 72 74 65 64 20 74 72 61 6e 73 61  y started transa
2f90: 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69  ctions.are commi
2fa0: 74 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61  tted when the la
2fb0: 73 74 20 71 75 65 72 79 20 66 69 6e 69 73 68 65  st query finishe
2fc0: 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72  s..</p>..<p>.^Tr
2fd0: 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62  ansactions can b
2fe0: 65 20 73 74 61 72 74 65 64 20 6d 61 6e 75 61 6c  e started manual
2ff0: 6c 79 20 75 73 69 6e 67 20 74 68 65 20 42 45 47  ly using the BEG
3000: 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20 5e 28 53  IN.command.  ^(S
3010: 75 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  uch transactions
3020: 20 75 73 75 61 6c 6c 79 20 70 65 72 73 69 73 74   usually persist
3030: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
3040: 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41  COMMIT or ROLLBA
3050: 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 42 75 74  CK command.  But
3060: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77   a transaction w
3070: 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41  ill also .ROLLBA
3080: 43 4b 20 69 66 20 74 68 65 20 64 61 74 61 62 61  CK if the databa
3090: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 6f 72 20  se is closed or 
30a0: 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
30b0: 72 73 0a 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42  rs.and the ROLLB
30c0: 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACK conflict res
30d0: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
30e0: 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 29  m is specified.)
30f0: 5e 0a 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65  ^.See the docume
3100: 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b  ntation on the [
3110: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61  ON CONFLICT].cla
3120: 75 73 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  use for addition
3130: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  al information a
3140: 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c 42 41 43  bout the ROLLBAC
3150: 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  K.conflict resol
3160: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e  ution algorithm.
3170: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 45 4e 44 20  .</p>..<p>.^END 
3180: 54 52 41 4e 53 41 43 54 49 4f 4e 20 69 73 20 61  TRANSACTION is a
3190: 6e 20 61 6c 69 61 73 20 66 6f 72 20 43 4f 4d 4d  n alias for COMM
31a0: 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28  IT..</p>..<p> ^(
31b0: 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 72 65  Transactions cre
31c0: 61 74 65 64 20 75 73 69 6e 67 20 42 45 47 49 4e  ated using BEGIN
31d0: 2e 2e 2e 43 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74  ...COMMIT do not
31e0: 20 6e 65 73 74 2e 29 5e 0a 5e 46 6f 72 20 6e 65   nest.)^.^For ne
31f0: 73 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  sted transaction
3200: 73 2c 20 75 73 65 20 74 68 65 20 5b 53 41 56 45  s, use the [SAVE
3210: 50 4f 49 4e 54 5d 20 61 6e 64 20 5b 52 45 4c 45  POINT] and [RELE
3220: 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 54  ASE] commands..T
3230: 68 65 20 22 54 4f 20 53 41 56 45 50 4f 49 4e 54  he "TO SAVEPOINT
3240: 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22 20 63 6c   <i>name</i>" cl
3250: 61 75 73 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c  ause of the ROLL
3260: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f  BACK command sho
3270: 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e 74 61 78  wn.in the syntax
3280: 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20 69   diagram above i
3290: 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c  s only applicabl
32a0: 65 20 74 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d  e to [SAVEPOINT]
32b0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20  .transactions.  
32c0: 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 69  ^An attempt to i
32d0: 6e 76 6f 6b 65 20 74 68 65 20 42 45 47 49 4e 20  nvoke the BEGIN 
32e0: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61  command within.a
32f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c   transaction wil
3300: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
3310: 72 72 6f 72 2c 20 72 65 67 61 72 64 6c 65 73 73  rror, regardless
3320: 20 6f 66 20 77 68 65 74 68 65 72 0a 74 68 65 20   of whether.the 
3330: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20  transaction was 
3340: 73 74 61 72 74 65 64 20 62 79 20 5b 53 41 56 45  started by [SAVE
3350: 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f  POINT] or a prio
3360: 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f  r BEGIN..^The CO
3370: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64  MMIT command and
3380: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
3390: 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 74 68  mmand without th
33a0: 65 20 54 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b  e TO clause.work
33b0: 20 74 68 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41   the same on [SA
33c0: 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63  VEPOINT] transac
33d0: 74 69 6f 6e 73 20 61 73 20 74 68 65 79 20 64 6f  tions as they do
33e0: 20 77 69 74 68 20 74 72 61 6e 73 61 63 74 69 6f   with transactio
33f0: 6e 73 0a 73 74 61 72 74 65 64 20 62 79 20 42 45  ns.started by BE
3400: 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  GIN.</p>..<tcl>h
3410: 64 5f 66 72 61 67 6d 65 6e 74 20 69 6d 6d 65 64  d_fragment immed
3420: 69 61 74 65 20 7b 42 45 47 49 4e 20 49 4d 4d 45  iate {BEGIN IMME
3430: 44 49 41 54 45 7d 20 7b 42 45 47 49 4e 20 45 58  DIATE} {BEGIN EX
3440: 43 4c 55 53 49 56 45 7d 3c 2f 74 63 6c 3e 0a 3c  CLUSIVE}</tcl>.<
3450: 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73  p>.^Transactions
3460: 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65 64   can be deferred
3470: 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20  , immediate, or 
3480: 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 5e 54 68  exclusive.  .^Th
3490: 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73 61  e default transa
34a0: 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20 69  ction behavior i
34b0: 73 20 64 65 66 65 72 72 65 64 2e 0a 5e 44 65 66  s deferred..^Def
34c0: 65 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61 74  erred means that
34d0: 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61 63   no locks are ac
34e0: 71 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64 61  quired.on the da
34f0: 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65  tabase until the
3500: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
3510: 73 74 20 61 63 63 65 73 73 65 64 2e 20 20 5e 54  st accessed.  ^T
3520: 68 75 73 20 77 69 74 68 20 61 0a 64 65 66 65 72  hus with a.defer
3530: 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  red transaction,
3540: 20 74 68 65 20 42 45 47 49 4e 20 73 74 61 74 65   the BEGIN state
3550: 6d 65 6e 74 20 69 74 73 65 6c 66 20 64 6f 65 73  ment itself does
3560: 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 0a   nothing to the.
3570: 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 5e 4c 6f  filesystem.  ^Lo
3580: 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63 71 75  cks.are not acqu
3590: 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66  ired until the f
35a0: 69 72 73 74 20 72 65 61 64 20 6f 72 20 77 72 69  irst read or wri
35b0: 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 5e  te operation.  ^
35c0: 54 68 65 20 66 69 72 73 74 20 72 65 61 64 0a 6f  The first read.o
35d0: 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73 74  peration against
35e0: 20 61 20 64 61 74 61 62 61 73 65 20 63 72 65 61   a database crea
35f0: 74 65 73 20 61 20 5b 53 48 41 52 45 44 5d 20 6c  tes a [SHARED] l
3600: 6f 63 6b 20 61 6e 64 20 74 68 65 20 66 69 72 73  ock and the firs
3610: 74 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  t.write operatio
3620: 6e 20 63 72 65 61 74 65 73 20 61 20 5b 52 45 53  n creates a [RES
3630: 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20 5e  ERVED] lock.   ^
3640: 42 65 63 61 75 73 65 20 74 68 65 20 61 63 71 75  Because the acqu
3650: 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73  isition of.locks
3660: 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e 74   is deferred unt
3670: 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65 65 64  il they are need
3680: 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73 69 62  ed, it is possib
3690: 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 0a  le that another.
36a0: 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73  thread or proces
36b0: 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65 20 61  s could create a
36c0: 20 73 65 70 61 72 61 74 65 20 74 72 61 6e 73 61   separate transa
36d0: 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74 65 20  ction and write 
36e0: 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  to.the database 
36f0: 61 66 74 65 72 20 74 68 65 20 42 45 47 49 4e 20  after the BEGIN 
3700: 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  on the current t
3710: 68 72 65 61 64 20 68 61 73 20 65 78 65 63 75 74  hread has execut
3720: 65 64 2e 0a 5e 49 66 20 74 68 65 20 74 72 61 6e  ed..^If the tran
3730: 73 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64  saction is immed
3740: 69 61 74 65 2c 20 74 68 65 6e 20 5b 52 45 53 45  iate, then [RESE
3750: 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65 20  RVED] locks.are 
3760: 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20  acquired on all 
3770: 64 61 74 61 62 61 73 65 73 20 61 73 20 73 6f 6f  databases as soo
3780: 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e 20 63  n as the BEGIN c
3790: 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75 74  ommand is.execut
37a0: 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69 74  ed, without wait
37b0: 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74 61  ing for the.data
37c0: 62 61 73 65 20 74 6f 20 62 65 20 75 73 65 64 2e  base to be used.
37d0: 20 20 5e 41 66 74 65 72 20 61 20 42 45 47 49 4e    ^After a BEGIN
37e0: 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a 6e 6f 20   IMMEDIATE, .no 
37f0: 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65 20  other [database 
3800: 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77 69 6c 6c  connection] will
3810: 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74   be able to writ
3820: 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
3830: 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e 20  e or.do a BEGIN 
3840: 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45 47  IMMEDIATE or BEG
3850: 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20 5e  IN EXCLUSIVE.  ^
3860: 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  Other processes 
3870: 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f 20  can continue.to 
3880: 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64 61  read from the da
3890: 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65 72 2e  tabase, however.
38a0: 20 20 5e 41 6e 20 65 78 63 6c 75 73 69 76 65 20    ^An exclusive 
38b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75 73  transaction caus
38c0: 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20 6c  es.[EXCLUSIVE] l
38d0: 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75 69  ocks to be acqui
38e0: 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62  red on all datab
38f0: 61 73 65 73 2e 20 20 5e 41 66 74 65 72 20 61 20  ases.  ^After a 
3900: 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c  BEGIN.EXCLUSIVE,
3910: 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62   no other [datab
3920: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20  ase connection] 
3930: 65 78 63 65 70 74 20 66 6f 72 20 5b 72 65 61 64  except for [read
3940: 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a 63 6f  _uncommitted].co
3950: 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c 6c 20 62  nnections will b
3960: 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20 74  e able to read t
3970: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
3980: 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74  no other connect
3990: 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65 78 63 65  ion without.exce
39a0: 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 62  ption will be ab
39b0: 6c 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  le to write the 
39c0: 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74  database until t
39d0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
39e0: 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e  s.complete..</p>
39f0: 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c 69  ..<p>.^(An impli
3a00: 63 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  cit transaction 
3a10: 28 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  (a transaction t
3a20: 68 61 74 20 69 73 20 73 74 61 72 74 65 64 20 61  hat is started a
3a30: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e 6f  utomatically,.no
3a40: 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
3a50: 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e  started by BEGIN
3a60: 29 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 20 61  ) is committed a
3a70: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65  utomatically whe
3a80: 6e 0a 74 68 65 20 6c 61 73 74 20 61 63 74 69 76  n.the last activ
3a90: 65 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69  e statement fini
3aa0: 73 68 65 73 2e 20 20 41 20 73 74 61 74 65 6d 65  shes.  A stateme
3ab0: 6e 74 20 66 69 6e 69 73 68 65 73 20 77 68 65 6e  nt finishes when
3ac0: 20 69 74 73 0a 70 72 65 70 61 72 65 64 20 73 74   its.prepared st
3ad0: 61 74 65 6d 65 6e 74 20 69 73 20 5b 73 71 6c 69  atement is [sqli
3ae0: 74 65 33 5f 72 65 73 65 74 28 29 20 7c 20 72 65  te3_reset() | re
3af0: 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69 74 65 33  set] or.[sqlite3
3b00: 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c 20 66 69  _finalize() | fi
3b10: 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e 20 6f 70  nalized].  An op
3b20: 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  en [sqlite3_blob
3b30: 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e 63 72 65  ] used for.incre
3b40: 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 20  mental BLOB I/O 
3b50: 63 6f 75 6e 74 73 20 61 73 20 61 6e 20 75 6e 66  counts as an unf
3b60: 69 6e 69 73 68 65 64 20 73 74 61 74 65 6d 65 6e  inished statemen
3b70: 74 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33  t.  The [sqlite3
3b80: 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68 65 73 20  _blob].finishes 
3b90: 77 68 65 6e 20 69 74 20 69 73 20 5b 73 71 6c 69  when it is [sqli
3ba0: 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 29  te3_blob_close()
3bb0: 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c 2f   | closed].)^.</
3bc0: 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65 78 70  p>..<p>.^The exp
3bd0: 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20 63 6f 6d  licit COMMIT com
3be0: 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65 64 69  mand runs immedi
3bf0: 61 74 65 6c 79 2c 20 65 76 65 6e 20 69 66 20 74  ately, even if t
3c00: 68 65 72 65 20 61 72 65 0a 70 65 6e 64 69 6e 67  here are.pending
3c10: 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
3c20: 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c  ents.  ^However,
3c30: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 70 65   if there are pe
3c40: 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f 70 65 72  nding.write oper
3c50: 61 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f 4d 4d  ations, the COMM
3c60: 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c 20  IT command.will 
3c70: 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72  fail with an err
3c80: 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f  or code [SQLITE_
3c90: 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  BUSY]..</p>..<p>
3ca0: 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20  .^An attempt to 
3cb0: 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d  execute COMMIT m
3cc0: 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75 6c 74  ight also result
3cd0: 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42   in an [SQLITE_B
3ce0: 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f 64 65  USY] return code
3cf0: 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72 20 74  .if an another t
3d00: 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73  hread or process
3d10: 20 68 61 73 20 61 20 5b 73 68 61 72 65 64 20 6c   has a [shared l
3d20: 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74 61  ock] on the data
3d30: 62 61 73 65 0a 74 68 61 74 20 70 72 65 76 65 6e  base.that preven
3d40: 74 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ted the database
3d50: 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70 64 61   from being upda
3d60: 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f 4d 4d  ted.  ^When COMM
3d70: 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68 69 73  IT fails in this
3d80: 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e 73 61  .way, the transa
3d90: 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63  ction remains ac
3da0: 74 69 76 65 20 61 6e 64 20 74 68 65 20 43 4f 4d  tive and the COM
3db0: 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74 72 69  MIT can be retri
3dc0: 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72 20 74  ed later.after t
3dd0: 68 65 20 72 65 61 64 65 72 20 68 61 73 20 68 61  he reader has ha
3de0: 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63 6c  d a chance to cl
3df0: 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  ear..</p>..<p>.^
3e00: 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c  The ROLLBACK wil
3e10: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
3e20: 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54  rror code [SQLIT
3e30: 45 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72 65  E_BUSY] if there
3e40: 0a 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67  .are any pending
3e50: 20 71 75 65 72 69 65 73 2e 20 20 5e 42 6f 74 68   queries.  ^Both
3e60: 20 72 65 61 64 2d 6f 6e 6c 79 20 61 6e 64 20 72   read-only and r
3e70: 65 61 64 2f 77 72 69 74 65 20 71 75 65 72 69 65  ead/write querie
3e80: 73 20 77 69 6c 6c 0a 63 61 75 73 65 20 61 20 52  s will.cause a R
3e90: 4f 4c 4c 42 41 43 4b 20 74 6f 20 66 61 69 6c 2e  OLLBACK to fail.
3ea0: 20 20 41 20 52 4f 4c 4c 42 41 43 4b 20 6d 75 73    A ROLLBACK mus
3eb0: 74 20 66 61 69 6c 20 69 66 20 74 68 65 72 65 20  t fail if there 
3ec0: 61 72 65 20 70 65 6e 64 69 6e 67 0a 72 65 61 64  are pending.read
3ed0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 75 6e 6c   operations (unl
3ee0: 69 6b 65 20 43 4f 4d 4d 49 54 20 77 68 69 63 68  ike COMMIT which
3ef0: 20 63 61 6e 20 73 75 63 63 65 65 64 29 20 62 65   can succeed) be
3f00: 63 61 75 73 65 20 62 61 64 20 74 68 69 6e 67 73  cause bad things
3f10: 0a 77 69 6c 6c 20 68 61 70 70 65 6e 20 69 66 20  .will happen if 
3f20: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 6d  the in-memory im
3f30: 61 67 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  age of the datab
3f40: 61 73 65 20 69 73 20 63 68 61 6e 67 65 64 20 6f  ase is changed o
3f50: 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 0a 61 6e  ut from under.an
3f60: 20 61 63 74 69 76 65 20 71 75 65 72 79 2e 0a 3c   active query..<
3f70: 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41  /p>..<p>.If [PRA
3f80: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
3f90: 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20  ] is set to OFF 
3fa0: 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20  (thus disabling 
3fb0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  the rollback jou
3fc0: 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20  rnal.file) then 
3fd0: 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20  the behavior of 
3fe0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
3ff0: 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65  mand is undefine
4000: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73  d..</p>..<h3>Res
4010: 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20  ponse To Errors 
4020: 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63  Within A Transac
4030: 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e  tion</h3>..<p> ^
4040: 28 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64  (If certain kind
4050: 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75  s of errors occu
4060: 72 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  r within a trans
4070: 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e  action, the.tran
4080: 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d  saction may or m
4090: 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64  ay not be rolled
40a0: 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61   back automatica
40b0: 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73  lly.  The.errors
40c0: 20 74 68 61 74 20 63 61 6e 20 63 61 75 73 65 20   that can cause 
40d0: 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c  an automatic rol
40e0: 6c 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f  lback include:</
40f0: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53  p>..<ul>.<li> [S
4100: 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74  QLITE_FULL]: dat
4110: 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75  abase or disk fu
4120: 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ll.<li> [SQLITE_
4130: 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f  IOERR]: disk I/O
4140: 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c   error.<li> [SQL
4150: 49 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62  ITE_BUSY]: datab
4160: 61 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e  ase in use by an
4170: 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c  other process.<l
4180: 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  i> [SQLITE_NOMEM
4190: 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79  ]: out or memory
41a0: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4e  .<li> [SQLITE_IN
41b0: 54 45 52 52 55 50 54 5d 3a 20 70 72 6f 63 65 73  TERRUPT]: proces
41c0: 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69 6e  sing [sqlite3_in
41d0: 74 65 72 72 75 70 74 7c 69 6e 74 65 72 72 75 70  terrupt|interrup
41e0: 74 65 64 5d 0a 20 20 20 20 20 62 79 20 61 70 70  ted].     by app
41f0: 6c 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  lication request
4200: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46  .</ul>)^..<p>.^F
4210: 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20  or all of these 
4220: 65 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61  errors, SQLite a
4230: 74 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20  ttempts to undo 
4240: 6a 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61  just the one sta
4250: 74 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f  tement.it was wo
4260: 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61  rking on and lea
4270: 76 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  ve changes from 
4280: 70 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73  prior statements
4290: 20 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65   within the.same
42a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74   transaction int
42b0: 61 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  act and continue
42c0: 20 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61   with the transa
42d0: 63 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72  ction.  ^However
42e0: 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  , .depending on 
42f0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
4300: 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e  ing evaluated an
4310: 64 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77  d the point at w
4320: 68 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f  hich the.error o
4330: 63 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20  ccurs, it might 
4340: 62 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72  be necessary for
4350: 20 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62   SQLite to rollb
4360: 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74  ack and.cancel t
4370: 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  he entire transa
4380: 63 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c  ction.  ^An appl
4390: 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c  ication can tell
43a0: 20 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66   which.course of
43b0: 20 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74   action SQLite t
43c0: 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65  ook by using the
43d0: 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  .[sqlite3_get_au
43e0: 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61  tocommit()] C-la
43f0: 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65  nguage interface
4400: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20  .</p>..<p>It is 
4410: 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74  recommended that
4420: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65   applications re
4430: 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72  spond to the err
4440: 6f 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65  ors.listed above
4450: 20 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69   by explicitly i
4460: 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43  ssuing a ROLLBAC
4470: 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20  K command.  ^If 
4480: 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e  the .transaction
4490: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
44a0: 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75  n rolled back au
44b0: 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74  tomatically.by t
44c0: 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73  he error respons
44d0: 65 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  e, then the ROLL
44e0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c  BACK command wil
44f0: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65  l fail with an.e
4500: 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72  rror, but no har
4510: 6d 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74  m is caused by t
4520: 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74  his.</p>..<p>Fut
4530: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
4540: 53 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e  SQLite may exten
4550: 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72  d the list of er
4560: 72 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74  rors which.might
4570: 20 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63   cause automatic
4580: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c   transaction rol
4590: 6c 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76  lback.  Future v
45a0: 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74  ersions of.SQLit
45b0: 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74  e might change t
45c0: 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73  he error respons
45d0: 65 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61  e.  In particula
45e0: 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65  r, we may.choose
45f0: 20 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65   to simplify the
4600: 20 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75   interface in fu
4610: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
4620: 20 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69   SQLite by.causi
4630: 6e 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62  ng the errors ab
4640: 6f 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20  ove to force an 
4650: 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f  unconditional ro
4660: 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63  llback.</p>..<tc
4670: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
4680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46c0: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45  ##.Section {SAVE
46d0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
46e0: 20 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45   {SAVEPOINT RELE
46f0: 41 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  ASE}..RecursiveB
4700: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76  ubbleDiagram sav
4710: 65 70 6f 69 6e 74 2d 73 74 6d 74 20 72 65 6c 65  epoint-stmt rele
4720: 61 73 65 2d 73 74 6d 74 20 72 6f 6c 6c 62 61 63  ase-stmt rollbac
4730: 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  k-stmt.</tcl>..<
4740: 70 3e 20 5e 53 41 56 45 50 4f 49 4e 54 73 20 61  p> ^SAVEPOINTs a
4750: 72 65 20 61 20 6d 65 74 68 6f 64 20 6f 66 20 63  re a method of c
4760: 72 65 61 74 69 6e 67 20 74 72 61 6e 73 61 63 74  reating transact
4770: 69 6f 6e 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f  ions, similar to
4780: 0a 5b 42 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f  .[BEGIN] and [CO
4790: 4d 4d 49 54 5d 2c 20 65 78 63 65 70 74 20 74 68  MMIT], except th
47a0: 61 74 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  at the SAVEPOINT
47b0: 20 61 6e 64 20 52 45 4c 45 41 53 45 20 63 6f 6d   and RELEASE com
47c0: 6d 61 6e 64 73 0a 61 72 65 20 6e 61 6d 65 64 20  mands.are named 
47d0: 61 6e 64 20 6d 61 79 20 62 65 20 6e 65 73 74 65  and may be neste
47e0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  d.</p>..<p> ^The
47f0: 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61   SAVEPOINT comma
4800: 6e 64 20 73 74 61 72 74 73 20 61 20 6e 65 77 20  nd starts a new 
4810: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
4820: 20 61 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72   a name..^The tr
4830: 61 6e 73 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20  ansaction names 
4840: 6e 65 65 64 20 6e 6f 74 20 62 65 20 75 6e 69 71  need not be uniq
4850: 75 65 2e 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e  ue..^(A SAVEPOIN
4860: 54 20 63 61 6e 20 62 65 20 73 74 61 72 74 65 64  T can be started
4870: 20 65 69 74 68 65 72 20 77 69 74 68 69 6e 20 6f   either within o
4880: 72 20 6f 75 74 73 69 64 65 20 6f 66 0a 61 20 5b  r outside of.a [
4890: 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54  BEGIN]...[COMMIT
48a0: 5d 2e 29 5e 20 20 5e 28 57 68 65 6e 20 61 20 53  ].)^  ^(When a S
48b0: 41 56 45 50 4f 49 4e 54 20 69 73 20 74 68 65 20  AVEPOINT is the 
48c0: 6f 75 74 65 72 2d 6d 6f 73 74 20 73 61 76 65 70  outer-most savep
48d0: 6f 69 6e 74 0a 61 6e 64 20 69 74 20 69 73 20 6e  oint.and it is n
48e0: 6f 74 20 77 69 74 68 69 6e 20 61 20 5b 42 45 47  ot within a [BEG
48f0: 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74  IN]...[COMMIT] t
4900: 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
4910: 20 69 73 20 74 68 65 0a 73 61 6d 65 20 61 73 20   is the.same as 
4920: 42 45 47 49 4e 20 44 45 46 45 52 52 45 44 20 54  BEGIN DEFERRED T
4930: 52 41 4e 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70  RANSACTION.)^</p
4940: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42  >..<p>^The ROLLB
4950: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72  ACK TO command r
4960: 65 76 65 72 74 73 20 74 68 65 20 73 74 61 74 65  everts the state
4970: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
4980: 20 62 61 63 6b 20 74 6f 20 77 68 61 74 0a 69 74   back to what.it
4990: 20 77 61 73 20 6a 75 73 74 20 61 66 74 65 72 20   was just after 
49a0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
49b0: 67 20 53 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e  g SAVEPOINT.  ^N
49c0: 6f 74 65 20 74 68 61 74 20 75 6e 6c 69 6b 65 20  ote that unlike 
49d0: 74 68 61 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c  that.plain [ROLL
49e0: 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77  BACK] command (w
49f0: 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20 6b 65  ithout the TO ke
4a00: 79 77 6f 72 64 29 20 74 68 65 20 52 4f 4c 4c 42  yword) the ROLLB
4a10: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64  ACK TO command.d
4a20: 6f 65 73 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74  oes not cancel t
4a30: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
4a40: 20 5e 49 6e 73 74 65 61 64 20 6f 66 20 63 61 6e   ^Instead of can
4a50: 63 65 6c 6c 69 6e 67 20 74 68 65 20 74 72 61 6e  celling the tran
4a60: 73 61 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c  saction,.the ROL
4a70: 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64  LBACK TO command
4a80: 20 72 65 73 74 61 72 74 73 20 74 68 65 20 74 72   restarts the tr
4a90: 61 6e 73 61 63 74 69 6f 6e 20 61 67 61 69 6e 20  ansaction again 
4aa0: 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
4ab0: 2e 0a 5e 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69  ..^All interveni
4ac0: 6e 67 20 53 41 56 45 50 4f 49 4e 54 73 20 61 72  ng SAVEPOINTs ar
4ad0: 65 20 63 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65  e canceled, howe
4ae0: 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ver.</p>..<p>^Th
4af0: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4b00: 64 20 69 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d  d is like a [COM
4b10: 4d 49 54 5d 20 66 6f 72 20 61 20 53 41 56 45 50  MIT] for a SAVEP
4b20: 4f 49 4e 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41  OINT..^The RELEA
4b30: 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65  SE command cause
4b40: 73 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73  s all savepoints
4b50: 20 62 61 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63   back to and inc
4b60: 6c 75 64 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74  luding the .most
4b70: 20 72 65 63 65 6e 74 20 73 61 76 65 70 6f 69 6e   recent savepoin
4b80: 74 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  t with a matchin
4b90: 67 20 6e 61 6d 65 20 74 6f 20 62 65 20 72 65 6d  g name to be rem
4ba0: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 74  oved from the .t
4bb0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
4bc0: 2e 20 20 5e 54 68 65 20 52 45 4c 45 41 53 45 20  .  ^The RELEASE 
4bd0: 6f 66 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e  of an inner tran
4be0: 73 61 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74  saction.does not
4bf0: 20 63 61 75 73 65 20 61 6e 79 20 63 68 61 6e 67   cause any chang
4c00: 65 73 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e  es to be written
4c10: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
4c20: 20 66 69 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79   file; it merely
4c30: 0a 72 65 6d 6f 76 65 73 20 73 61 76 65 70 6f 69  .removes savepoi
4c40: 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 74 72 61  nts from the tra
4c50: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 73  nsaction stack s
4c60: 75 63 68 20 74 68 61 74 20 69 74 20 69 73 0a 6e  uch that it is.n
4c70: 6f 20 6c 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c  o longer possibl
4c80: 65 20 74 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  e to ROLLBACK TO
4c90: 20 74 68 6f 73 65 20 73 61 76 65 70 6f 69 6e 74   those savepoint
4ca0: 73 2e 0a 5e 49 66 20 61 20 52 45 4c 45 41 53 45  s..^If a RELEASE
4cb0: 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65   command release
4cc0: 73 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  s the outermost 
4cd0: 73 61 76 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68  savepoint, so.th
4ce0: 61 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  at the transacti
4cf0: 6f 6e 20 73 74 61 63 6b 20 62 65 63 6f 6d 65 73  on stack becomes
4d00: 20 65 6d 70 74 79 2c 20 74 68 65 6e 20 52 45 4c   empty, then REL
4d10: 45 41 53 45 20 69 73 20 74 68 65 20 73 61 6d 65  EASE is the same
4d20: 0a 61 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54  .as [COMMIT]..^T
4d30: 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d  he [COMMIT] comm
4d40: 61 6e 64 20 6d 61 79 20 62 65 20 75 73 65 64 20  and may be used 
4d50: 74 6f 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 73  to release all s
4d60: 61 76 65 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f  avepoints and.co
4d70: 6d 6d 69 74 20 74 68 65 20 74 72 61 6e 73 61 63  mmit the transac
4d80: 74 69 6f 6e 20 65 76 65 6e 20 69 66 20 74 68 65  tion even if the
4d90: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73   transaction was
4da0: 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73 74 61 72   originally star
4db0: 74 65 64 0a 62 79 20 61 20 53 41 56 45 50 4f 49  ted.by a SAVEPOI
4dc0: 4e 54 20 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65  NT command inste
4dd0: 61 64 20 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20  ad of a [BEGIN] 
4de0: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  command.</p>..<p
4df0: 3e 5e 49 66 20 74 68 65 20 73 61 76 65 70 6f 69  >^If the savepoi
4e00: 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c  nt-name in a REL
4e10: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  EASE command doe
4e20: 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a  s not match any.
4e30: 73 61 76 65 70 6f 69 6e 74 20 63 75 72 72 65 6e  savepoint curren
4e40: 74 6c 79 20 69 6e 20 74 68 65 20 74 72 61 6e 73  tly in the trans
4e50: 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68  action stack, th
4e60: 65 6e 20 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73  en no savepoints
4e70: 20 61 72 65 0a 72 65 6c 65 61 73 65 64 2c 20 74   are.released, t
4e80: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 75  he database is u
4e90: 6e 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 74 68  nchanged, and th
4ea0: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4eb0: 64 20 72 65 74 75 72 6e 73 0a 61 6e 20 65 72 72  d returns.an err
4ec0: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74  or.</p>..<p>^Not
4ed0: 65 20 74 68 61 74 20 61 6e 20 69 6e 6e 65 72 20  e that an inner 
4ee0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68  transaction migh
4ef0: 74 20 63 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20  t commit (using 
4f00: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
4f10: 61 6e 64 29 0a 62 75 74 20 74 68 65 6e 20 6c 61  and).but then la
4f20: 74 65 72 20 68 61 76 65 20 69 74 73 20 77 6f 72  ter have its wor
4f30: 6b 20 75 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f  k undone by a RO
4f40: 4c 4c 42 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74  LLBACK in an out
4f50: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  er transaction..
4f60: 5e 41 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65  ^A power failure
4f70: 20 6f 72 20 70 72 6f 67 72 61 6d 20 63 72 61 73   or program cras
4f80: 68 20 6f 72 20 4f 53 20 63 72 61 73 68 20 77 69  h or OS crash wi
4f90: 6c 6c 20 63 61 75 73 65 20 74 68 65 20 6f 75 74  ll cause the out
4fa0: 65 72 2d 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74  er-most.transact
4fb0: 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c  ion to rollback,
4fc0: 20 75 6e 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61   undoing all cha
4fd0: 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f  nges that have o
4fe0: 63 63 75 72 72 65 64 20 77 69 74 68 69 6e 0a 74  ccurred within.t
4ff0: 68 61 74 20 6f 75 74 65 72 20 74 72 61 6e 73 61  hat outer transa
5000: 63 74 69 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e  ction, even chan
5010: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 73 75  ges that have su
5020: 70 70 6f 73 65 64 6c 79 20 62 65 65 6e 20 22 63  pposedly been "c
5030: 6f 6d 6d 69 74 74 65 64 22 0a 62 79 20 74 68 65  ommitted".by the
5040: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
5050: 2e 20 20 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e  .  ^Content is n
5060: 6f 74 20 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d  ot actually comm
5070: 69 74 74 65 64 20 6f 6e 20 74 68 65 20 64 69 73  itted on the dis
5080: 6b 20 0a 75 6e 74 69 6c 20 74 68 65 20 6f 75 74  k .until the out
5090: 65 72 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69  ermost transacti
50a0: 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a  on commits.</p>.
50b0: 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 73 65  .<p>There are se
50c0: 76 65 72 61 6c 20 77 61 79 73 20 6f 66 20 74 68  veral ways of th
50d0: 69 6e 6b 69 6e 67 20 61 62 6f 75 74 20 74 68 65  inking about the
50e0: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
50f0: 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
5100: 3c 70 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20  <p>.Some people 
5110: 76 69 65 77 20 52 45 4c 45 41 53 45 20 61 73 20  view RELEASE as 
5120: 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  the equivalent o
5130: 66 20 43 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53  f COMMIT for a S
5140: 41 56 45 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69  AVEPOINT..This i
5150: 73 20 61 6e 20 61 63 63 65 70 74 61 62 6c 65 20  s an acceptable 
5160: 70 6f 69 6e 74 20 6f 66 20 76 69 65 77 20 61 73  point of view as
5170: 20 6c 6f 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d   long as one rem
5180: 65 6d 62 65 72 73 20 74 68 61 74 20 74 68 65 0a  embers that the.
5190: 63 68 61 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65  changes committe
51a0: 64 20 62 79 20 61 6e 20 69 6e 6e 65 72 20 74 72  d by an inner tr
51b0: 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20  ansaction might 
51c0: 6c 61 74 65 72 20 62 65 20 75 6e 64 6f 6e 65 20  later be undone 
51d0: 62 79 20 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e  by a.rollback in
51e0: 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61   an outer transa
51f0: 63 74 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ction.</p></li>.
5200: 0a 3c 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72  .<li><p>.Another
5210: 20 76 69 65 77 20 6f 66 20 52 45 4c 45 41 53 45   view of RELEASE
5220: 20 69 73 20 74 68 61 74 20 69 74 20 6d 65 72 67   is that it merg
5230: 65 73 20 61 20 6e 61 6d 65 64 20 74 72 61 6e 73  es a named trans
5240: 61 63 74 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a  action into its.
5250: 70 61 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  parent transacti
5260: 6f 6e 2c 20 73 6f 20 74 68 61 74 20 74 68 65 20  on, so that the 
5270: 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f  named transactio
5280: 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74  n and its parent
5290: 20 62 65 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65   become.the same
52a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41   transaction.  A
52b0: 66 74 65 72 20 52 45 4c 45 41 53 45 2c 20 74 68  fter RELEASE, th
52c0: 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74  e named transact
52d0: 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65  ion and its pare
52e0: 6e 74 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f  nt.will commit o
52f0: 72 20 72 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74  r rollback toget
5300: 68 65 72 2c 20 77 68 61 74 65 76 65 72 20 74 68  her, whatever th
5310: 65 69 72 20 66 61 74 65 20 6d 61 79 20 62 65 2e  eir fate may be.
5320: 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  .</p></li>..<li>
5330: 3c 70 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f  <p>.One can also
5340: 20 74 68 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f   think of savepo
5350: 69 6e 74 73 20 61 73 0a 22 6d 61 72 6b 73 22 20  ints as."marks" 
5360: 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  in the transacti
5370: 6f 6e 20 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e  on timeline.  In
5380: 20 74 68 69 73 20 76 69 65 77 2c 20 74 68 65 20   this view, the 
5390: 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e  SAVEPOINT comman
53a0: 64 0a 63 72 65 61 74 65 73 20 61 20 6e 65 77 20  d.creates a new 
53b0: 6d 61 72 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41  mark, the ROLLBA
53c0: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65  CK TO command re
53d0: 77 69 6e 64 73 20 74 68 65 20 74 69 6d 65 6c 69  winds the timeli
53e0: 6e 65 20 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69  ne back.to a poi
53f0: 6e 74 20 6a 75 73 74 20 61 66 74 65 72 20 74 68  nt just after th
5400: 65 20 6e 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e  e named mark, an
5410: 64 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  d the RELEASE co
5420: 6d 6d 61 6e 64 0a 65 72 61 73 65 73 20 6d 61 72  mmand.erases mar
5430: 6b 73 20 66 72 6f 6d 20 74 68 65 20 74 69 6d 65  ks from the time
5440: 6c 69 6e 65 20 77 69 74 68 6f 75 74 20 61 63 74  line without act
5450: 75 61 6c 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79  ually making any
5460: 0a 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20  .changes to the 
5470: 64 61 74 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f  database..</p></
5480: 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33  li>.</ul>....<h3
5490: 3e 54 72 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73  >Transaction Nes
54a0: 74 69 6e 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a  ting Rules</h3>.
54b0: 0a 3c 70 3e 5e 54 68 65 20 6c 61 73 74 20 74 72  .<p>^The last tr
54c0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65  ansaction starte
54d0: 64 20 77 69 6c 6c 20 62 65 20 74 68 65 20 66 69  d will be the fi
54e0: 72 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  rst.transaction 
54f0: 63 6f 6d 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c  committed or rol
5500: 6c 65 64 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c  led back.</p>..<
5510: 70 3e 5e 54 68 65 20 5b 42 45 47 49 4e 5d 20 63  p>^The [BEGIN] c
5520: 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b  ommand only work
5530: 73 20 69 66 20 74 68 65 20 74 72 61 6e 73 61 63  s if the transac
5540: 74 69 6f 6e 20 73 74 61 63 6b 20 69 73 20 65 6d  tion stack is em
5550: 70 74 79 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72  pty, or.in other
5560: 20 77 6f 72 64 73 20 69 66 20 74 68 65 72 65 20   words if there 
5570: 61 72 65 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74  are no pending t
5580: 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49  ransactions.  ^I
5590: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
55a0: 6e 0a 73 74 61 63 6b 20 69 73 20 6e 6f 74 20 65  n.stack is not e
55b0: 6d 70 74 79 20 77 68 65 6e 20 74 68 65 20 5b 42  mpty when the [B
55c0: 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73  EGIN] command is
55d0: 20 69 6e 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74   invoked, then t
55e0: 68 65 20 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73  he command.fails
55f0: 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c   with an error.<
5600: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f  /p>..<p>^The [CO
5610: 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f  MMIT] command co
5620: 6d 6d 69 74 73 20 61 6c 6c 20 6f 75 74 73 74 61  mmits all outsta
5630: 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f  nding transactio
5640: 6e 73 20 61 6e 64 20 6c 65 61 76 65 73 0a 74 68  ns and leaves.th
5650: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
5660: 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a  ack empty.</p>..
5670: 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41 53 45 20  <p>^The RELEASE 
5680: 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 77  command starts w
5690: 69 74 68 20 74 68 65 20 6d 6f 73 74 20 72 65 63  ith the most rec
56a0: 65 6e 74 20 61 64 64 69 74 69 6f 6e 20 74 6f 20  ent addition to 
56b0: 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  the.transaction 
56c0: 73 74 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73  stack and releas
56d0: 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61  es savepoints ba
56e0: 63 6b 77 61 72 64 73 20 0a 69 6e 20 74 69 6d 65  ckwards .in time
56f0: 20 75 6e 74 69 6c 20 69 74 20 72 65 6c 65 61 73   until it releas
5700: 65 73 20 61 20 73 61 76 65 70 6f 69 6e 74 20 77  es a savepoint w
5710: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 73  ith a matching s
5720: 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e  avepoint-name..^
5730: 50 72 69 6f 72 20 73 61 76 65 70 6f 69 6e 74 73  Prior savepoints
5740: 2c 20 65 76 65 6e 20 73 61 76 65 70 6f 69 6e 74  , even savepoint
5750: 73 20 77 69 74 68 20 6d 61 74 63 68 69 6e 67 20  s with matching 
5760: 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c  savepoint-names,
5770: 20 61 72 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a   are.unchanged..
5780: 5e 49 66 20 74 68 65 20 52 45 4c 45 41 53 45 20  ^If the RELEASE 
5790: 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 74  command causes t
57a0: 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he.transaction s
57b0: 74 61 63 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65  tack to become e
57c0: 6d 70 74 79 20 28 69 66 20 74 68 65 20 52 45 4c  mpty (if the REL
57d0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c  EASE command rel
57e0: 65 61 73 65 73 20 74 68 65 0a 6f 75 74 65 72 6d  eases the.outerm
57f0: 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost transaction 
5800: 66 72 6f 6d 20 74 68 65 20 73 74 61 63 6b 29 20  from the stack) 
5810: 74 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  then the transac
5820: 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70  tion commits.</p
5830: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c  >..<p>^The [ROLL
5840: 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69  BACK] command wi
5850: 74 68 6f 75 74 20 61 20 54 4f 20 63 6c 61 75 73  thout a TO claus
5860: 65 20 72 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c  e rolls backs al
5870: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61  l transactions.a
5880: 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20 74 72  nd leaves the tr
5890: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
58a0: 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  empty.</p>..<p>^
58b0: 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  The ROLLBACK com
58c0: 6d 61 6e 64 20 77 69 74 68 20 61 20 54 4f 20 63  mand with a TO c
58d0: 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b  lause rolls back
58e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f   transactions go
58f0: 69 6e 67 0a 62 61 63 6b 77 61 72 64 73 20 69 6e  ing.backwards in
5900: 20 74 69 6d 65 20 62 61 63 6b 20 74 6f 20 74 68   time back to th
5910: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 53 41  e most recent SA
5920: 56 45 50 4f 49 4e 54 20 77 69 74 68 20 61 20 6d  VEPOINT with a m
5930: 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54  atching name..^T
5940: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74  he SAVEPOINT wit
5950: 68 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 6e  h the matching n
5960: 61 6d 65 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74  ame remains on t
5970: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
5980: 74 61 63 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61  tack,.but all da
5990: 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 74  tabase changes t
59a0: 68 61 74 20 6f 63 63 75 72 72 65 64 20 61 66 74  hat occurred aft
59b0: 65 72 20 74 68 61 74 20 53 41 56 45 50 4f 49 4e  er that SAVEPOIN
59c0: 54 20 77 61 73 20 63 72 65 61 74 65 64 0a 61 72  T was created.ar
59d0: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
59e0: 5e 49 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ^If the savepoin
59f0: 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c  t-name in a ROLL
5a00: 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20  BACK TO command 
5a10: 64 6f 65 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61  does not.match a
5a20: 6e 79 20 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20  ny SAVEPOINT on 
5a30: 74 68 65 20 73 74 61 63 6b 2c 20 74 68 65 6e 20  the stack, then 
5a40: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
5a50: 6d 61 6e 64 20 66 61 69 6c 73 20 77 69 74 68 20  mand fails with 
5a60: 61 6e 0a 65 72 72 6f 72 20 61 6e 64 20 6c 65 61  an.error and lea
5a70: 76 65 73 20 74 68 65 20 73 74 61 74 65 20 6f 66  ves the state of
5a80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
5a90: 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74  changed.</p>..<t
5aa0: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
5ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5af0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d  ###.Section comm
5b00: 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d  ent comment {com
5b10: 6d 65 6e 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a  ment *comments}.
5b20: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
5b30: 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d  Diagram comment-
5b40: 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c  syntax.</tcl>..<
5b50: 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20  p>^Comments are 
5b60: 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73  not SQL commands
5b70: 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75 72 20  , but can occur 
5b80: 77 69 74 68 69 6e 20 74 68 65 20 74 65 78 74 20  within the text 
5b90: 6f 66 0a 53 51 4c 20 71 75 65 72 69 65 73 20 70  of.SQL queries p
5ba0: 61 73 73 65 64 20 74 6f 20 5b 73 71 6c 69 74 65  assed to [sqlite
5bb0: 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d 20  3_prepare_v2()] 
5bc0: 61 6e 64 20 72 65 6c 61 74 65 64 20 69 6e 74 65  and related inte
5bd0: 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74  rfaces..^Comment
5be0: 73 20 61 72 65 20 74 72 65 61 74 65 64 20 61 73  s are treated as
5bf0: 20 77 68 69 74 65 73 70 61 63 65 20 62 79 20 74   whitespace by t
5c00: 68 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d  he parser..^Comm
5c10: 65 6e 74 73 20 63 61 6e 20 62 65 67 69 6e 20 61  ents can begin a
5c20: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
5c30: 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64  ce .can be found
5c40: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69  , including insi
5c50: 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  de expressions t
5c60: 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c  hat span multipl
5c70: 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c  e lines..</p>..<
5c80: 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20  p>^SQL comments 
5c90: 62 65 67 69 6e 20 77 69 74 68 20 74 77 6f 20 63  begin with two c
5ca0: 6f 6e 73 65 63 75 74 69 76 65 20 22 2d 22 20 63  onsecutive "-" c
5cb0: 68 61 72 61 63 74 65 72 73 20 28 41 53 43 49 49  haracters (ASCII
5cc0: 20 30 78 32 64 29 0a 61 6e 64 20 65 78 74 65 6e   0x2d).and exten
5cd0: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
5ce0: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 6e  uding the next n
5cf0: 65 77 6c 69 6e 65 20 63 68 61 72 61 63 74 65 72  ewline character
5d00: 20 28 41 53 43 49 49 20 30 78 30 61 29 0a 6f 72   (ASCII 0x0a).or
5d10: 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 6f   until the end o
5d20: 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65 76  f input, whichev
5d30: 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c  er comes first.<
5d40: 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65  /p>..<p>^C-style
5d50: 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a   comments begin.
5d60: 77 69 74 68 20 22 2f 2a 22 20 61 6e 64 20 65 78  with "/*" and ex
5d70: 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69  tend up to and i
5d80: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78  ncluding the nex
5d90: 74 20 22 2a 2f 22 20 63 68 61 72 61 63 74 65 72  t "*/" character
5da0: 20 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74   pair.or until t
5db0: 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c  he end of input,
5dc0: 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73   whichever comes
5dd0: 20 66 69 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c   first.  ^C-styl
5de0: 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73  e comments.can s
5df0: 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e  pan multiple lin
5e00: 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f  es. </p>..<p>^Co
5e10: 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65 61  mments can appea
5e20: 72 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65  r anywhere white
5e30: 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72 2c  space can occur,
5e40: 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64  .including insid
5e50: 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 6e  e expressions an
5e60: 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20  d in the middle 
5e70: 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73 74 61  of other SQL sta
5e80: 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e  tements..^Commen
5e90: 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a  ts do not nest..
5ea0: 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
5eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ef0: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
5f00: 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44 45  ion {CREATE INDE
5f10: 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 20 7b  X} createindex {
5f20: 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a  {CREATE INDEX}}.
5f30: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
5f40: 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 69  Diagram create-i
5f50: 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  ndex-stmt.</tcl>
5f60: 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45  ..<p>^The CREATE
5f70: 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63   INDEX command c
5f80: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6b  onsists of the k
5f90: 65 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20  eywords "CREATE 
5fa0: 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a  INDEX" followed.
5fb0: 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  by the name of t
5fc0: 68 65 20 6e 65 77 20 69 6e 64 65 78 2c 20 74 68  he new index, th
5fd0: 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20  e keyword "ON", 
5fe0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 70 72  the name of a pr
5ff0: 65 76 69 6f 75 73 6c 79 0a 63 72 65 61 74 65 64  eviously.created
6000: 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 74   table that is t
6010: 6f 20 62 65 20 69 6e 64 65 78 65 64 2c 20 61 6e  o be indexed, an
6020: 64 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  d a parenthesize
6030: 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 73 20  d list of names 
6040: 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of.columns in th
6050: 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
6060: 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 69 6e   used for the in
6070: 64 65 78 20 6b 65 79 2e 0a 49 66 20 74 68 65 20  dex key..If the 
6080: 6f 70 74 69 6f 6e 61 6c 20 57 48 45 52 45 20 63  optional WHERE c
6090: 6c 61 75 73 65 20 69 73 20 69 6e 63 6c 75 64 65  lause is include
60a0: 64 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 64 65  d, then the inde
60b0: 78 20 69 73 20 61 20 22 5b 70 61 72 74 69 61 6c  x is a "[partial
60c0: 20 69 6e 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a   index]"..</p>..
60d0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
60e0: 20 7b 64 65 73 63 69 64 78 7d 20 7b 64 65 73 63   {descidx} {desc
60f0: 65 6e 64 69 6e 67 20 69 6e 64 69 63 65 73 7d 20  ending indices} 
6100: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65  {descending inde
6110: 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63  x}</tcl>.<p>^Eac
6120: 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61  h column name ca
6130: 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  n be followed by
6140: 20 6f 6e 65 20 6f 66 20 74 68 65 20 22 41 53 43   one of the "ASC
6150: 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65 79 77  " or "DESC" keyw
6160: 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63 61 74 65  ords.to indicate
6170: 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54   sort order.  ^T
6180: 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6d 61  he sort order ma
6190: 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20  y or may not be 
61a0: 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64 69 6e  ignored dependin
61b0: 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  g.on the databas
61c0: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c 20 61  e file format, a
61d0: 6e 64 20 69 6e 20 70 61 72 74 69 63 75 6c 61 72  nd in particular
61e0: 20 74 68 65 20 5b 73 63 68 65 6d 61 20 66 6f 72   the [schema for
61f0: 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68  mat number]..^Th
6200: 65 20 22 6c 65 67 61 63 79 22 20 73 63 68 65 6d  e "legacy" schem
6210: 61 20 66 6f 72 6d 61 74 20 28 31 29 20 69 67 6e  a format (1) ign
6220: 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72 74 20  ores index.sort 
6230: 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 64 65 73  order.  ^The des
6240: 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 73 63  cending index sc
6250: 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 34 29 20  hema format (4) 
6260: 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74  takes index sort
6270: 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f   order.into acco
6280: 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65 72 73 69  unt.  Only versi
6290: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 33 2e  ons of SQLite 3.
62a0: 33 2e 30 20 61 6e 64 20 6c 61 74 65 72 20 61 72  3.0 and later ar
62b0: 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65 72 73  e able to unders
62c0: 74 61 6e 64 0a 74 68 65 20 64 65 73 63 65 6e 64  tand.the descend
62d0: 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 6d 61 74  ing index format
62e0: 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c  . For compatibil
62f0: 69 74 79 2c 20 76 65 72 73 69 6f 6e 20 6f 66 20  ity, version of 
6300: 53 51 4c 69 74 65 20 62 65 74 77 65 65 6e 20 33  SQLite between 3
6310: 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e 39 20 75  .3.0.and 3.7.9 u
6320: 73 65 20 74 68 65 20 6c 65 67 61 63 79 20 73 63  se the legacy sc
6330: 68 65 6d 61 20 66 6f 72 6d 61 74 20 62 79 20 64  hema format by d
6340: 65 66 61 75 6c 74 2e 20 20 54 68 65 20 6e 65 77  efault.  The new
6350: 65 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  er schema format
6360: 20 69 73 0a 75 73 65 64 20 62 79 20 64 65 66 61   is.used by defa
6370: 75 6c 74 20 69 6e 20 76 65 72 73 69 6f 6e 20 33  ult in version 3
6380: 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74 65 72 2e  .7.10 and later.
6390: 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f 66 69  .^The [legacy_fi
63a0: 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d 61  le_format pragma
63b0: 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ] can be used to
63c0: 20 63 68 61 6e 67 65 20 73 65 74 20 74 68 65 20   change set the 
63d0: 73 70 65 63 69 66 69 63 0a 62 65 68 61 76 69 6f  specific.behavio
63e0: 72 20 66 6f 72 20 61 6e 79 20 76 65 72 73 69 6f  r for any versio
63f0: 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  n of SQLite.</p>
6400: 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54  ..<p>^The COLLAT
6410: 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61  E clause optiona
6420: 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61  lly following ea
6430: 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64  ch column name d
6440: 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74 69  efines a.collati
6450: 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73 65 64  ng sequence used
6460: 20 66 6f 72 20 74 65 78 74 20 65 6e 74 72 69 65   for text entrie
6470: 73 20 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e  s in that column
6480: 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  ..^The default c
6490: 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63  ollating.sequenc
64a0: 65 20 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69  e is the collati
64b0: 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 66 69  ng sequence defi
64c0: 6e 65 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  ned for that col
64d0: 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45 41  umn in the.[CREA
64e0: 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  TE TABLE] statem
64f0: 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f 20  ent.  ^Or if no 
6500: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
6510: 63 65 20 69 73 20 6f 74 68 65 72 77 69 73 65 20  ce is otherwise 
6520: 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62 75 69  defined,.the bui
6530: 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c  lt-in BINARY col
6540: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
6550: 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  is used.</p>..<p
6560: 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61 72  >There are no ar
6570: 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73 20 6f  bitrary limits o
6580: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
6590: 69 6e 64 69 63 65 73 20 74 68 61 74 20 63 61 6e  indices that can
65a0: 20 62 65 0a 61 74 74 61 63 68 65 64 20 74 6f 20   be.attached to 
65b0: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 2e 20  a single table. 
65c0: 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66   ^(The number of
65d0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 69   columns in an i
65e0: 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74 65 64  ndex is .limited
65f0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 65   to the value se
6600: 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f 6c 69  t by.[sqlite3_li
6610: 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c 49 4d  mit]([SQLITE_LIM
6620: 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29 2e  IT_COLUMN],...).
6630: 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  )^</p>..<tcl>hd_
6640: 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 69  fragment uniquei
6650: 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64 65 78  dx {unique index
6660: 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66 20 74  }</tcl>.<p>^If t
6670: 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f 72  he UNIQUE keywor
6680: 64 20 61 70 70 65 61 72 73 20 62 65 74 77 65 65  d appears betwee
6690: 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e 44  n CREATE and IND
66a0: 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74  EX then duplicat
66b0: 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20  e.index entries 
66c0: 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e  are not allowed.
66d0: 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74 20 74    ^Any attempt t
66e0: 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c 69  o insert a dupli
66f0: 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c 20  cate entry.will 
6700: 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72 72  result in an err
6710: 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20 70 75  or.  ^For the pu
6720: 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71 75 65  rposes of unique
6730: 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20 4e 55   indices, all NU
6740: 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20 63 6f  LL values.are co
6750: 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69 66 66  nsidered to diff
6760: 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20 6f  erent from all o
6770: 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ther NULL values
6780: 20 61 6e 64 20 61 72 65 20 74 68 75 73 20 75 6e   and are thus un
6790: 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20 6f 6e  ique..This is on
67a0: 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70 6f 73  e of the two pos
67b0: 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65 74 61  sible interpreta
67c0: 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 51 4c  tions of the SQL
67d0: 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28 74 68  -92 standard.(th
67e0: 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20 74 68  e language in th
67f0: 65 20 73 74 61 6e 64 61 72 64 20 69 73 20 61 6d  e standard is am
6800: 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69 73 20  biguous) and is 
6810: 74 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  the interpretati
6820: 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 50  on.followed by P
6830: 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53 51 4c  ostgreSQL, MySQL
6840: 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e 64 20  , Firebird, and 
6850: 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d 69  Oracle.  Informi
6860: 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74 20  x and.Microsoft 
6870: 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c 6f  SQL Server follo
6880: 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e 74 65  w the other inte
6890: 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
68a0: 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a  e standard.</p>.
68b0: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74 69  .<p>^If the opti
68c0: 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49 53  onal IF NOT EXIS
68d0: 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
68e0: 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65 72  sent and another
68f0: 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68 65 20   index.with the 
6900: 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64  same name alread
6910: 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20 74  y exists, then t
6920: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f  his command beco
6930: 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e  mes a no-op.</p>
6940: 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20 61 72  ..<p>^Indexes ar
6950: 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68 20 74  e removed with t
6960: 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 20  he [DROP INDEX] 
6970: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c  command.</p>...<
6980: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
6990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69d0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
69e0: 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72 65 61  ATE TABLE} {crea
69f0: 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45 41 54  tetable} {{CREAT
6a00: 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72  E TABLE}}..Recur
6a10: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
6a20: 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73  m create-table-s
6a30: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  tmt.</tcl>..<p>T
6a40: 68 65 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  he "CREATE TABLE
6a50: 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  " command is use
6a60: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  d to create a ne
6a70: 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20 53 51  w table in an SQ
6a80: 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65 2e 20  Lite .database. 
6a90: 41 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  A CREATE TABLE c
6aa0: 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69 65 73  ommand specifies
6ab0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
6ac0: 74 74 72 69 62 75 74 65 73 20 6f 66 20 74 68 65  ttributes of the
6ad0: 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c 75 6c  .new table:..<ul
6ae0: 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 6e  >.  <li><p>The n
6af0: 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ame of the new t
6b00: 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  able...  <li><p>
6b10: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   The database in
6b20: 20 77 68 69 63 68 20 74 68 65 20 6e 65 77 20 74   which the new t
6b30: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
6b40: 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65 20 0a   Tables may be .
6b50: 20 20 20 20 20 20 63 72 65 61 74 65 64 20 69 6e        created in
6b60: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
6b70: 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74  se, the temp dat
6b80: 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61 6e 79  abase, or in any
6b90: 20 61 74 74 61 63 68 65 64 0a 20 20 20 20 20 20   attached.      
6ba0: 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c 6c 69  database...  <li
6bb0: 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20 6f 66  ><p> The name of
6bc0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
6bd0: 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c  the table...  <l
6be0: 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c 61 72  i><p> The declar
6bf0: 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20  ed type of each 
6c00: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61  column in the ta
6c10: 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20  ble...  <li><p> 
6c20: 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  A default value 
6c30: 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f  or expression fo
6c40: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  r each column in
6c50: 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   the table...  <
6c60: 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74  li><p> A default
6c70: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
6c80: 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74 68 20  nce to use with 
6c90: 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20 20  each column...  
6ca0: 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61 6c  <li><p> Optional
6cb0: 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20 4b 45  ly, a PRIMARY KE
6cc0: 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 2e  Y for the table.
6cd0: 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63 6f 6c   Both single col
6ce0: 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20 20 63  umn and.       c
6cf0: 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74 69 70  omposite (multip
6d00: 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69 6d 61  le column) prima
6d10: 72 79 20 6b 65 79 73 20 61 72 65 20 73 75 70 70  ry keys are supp
6d20: 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  orted...  <li><p
6d30: 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c 20 63  > A set of SQL c
6d40: 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 65  onstraints for e
6d50: 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c 69 74  ach table. SQLit
6d60: 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49 51 55  e supports UNIQU
6d70: 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20 4e 55  E, NOT.       NU
6d80: 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20 46 4f  LL, CHECK and FO
6d90: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
6da0: 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  aints...  <li><p
6db0: 3e 20 57 68 65 74 68 65 72 20 74 68 65 20 74 61  > Whether the ta
6dc0: 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55  ble is a [WITHOU
6dd0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a  T ROWID] table..
6de0: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79 20  </ul>..<p>Every 
6df0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
6e00: 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70 65 63  tement must spec
6e10: 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72 20 74  ify a name for t
6e20: 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a 20 20  he new table..  
6e30: 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20 74 68  ^(Table names th
6e40: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 73  at begin with "s
6e50: 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65 73 65  qlite_" are rese
6e60: 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61  rved for interna
6e70: 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73 20 61  l use. It.  is a
6e80: 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d  n error to attem
6e90: 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20 74  pt to create a t
6ea0: 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61 6d 65  able with a name
6eb0: 20 74 68 61 74 20 73 74 61 72 74 73 20 77 69 74   that starts wit
6ec0: 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e 29 5e  h.  "sqlite_".)^
6ed0: 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b  ..<p> ^If a &lt;
6ee0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74  database-name&gt
6ef0: 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  ; is specified, 
6f00: 69 74 20 6d 75 73 74 20 62 65 20 65 69 74 68 65  it must be eithe
6f10: 72 20 22 6d 61 69 6e 22 2c 20 0a 20 20 22 74 65  r "main", .  "te
6f20: 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65  mp", or the name
6f30: 20 6f 66 20 61 6e 20 5b 41 54 54 41 43 48 20 44   of an [ATTACH D
6f40: 41 54 41 42 41 53 45 7c 61 74 74 61 63 68 65 64  ATABASE|attached
6f50: 20 64 61 74 61 62 61 73 65 5d 2e 20 5e 49 6e 20   database]. ^In 
6f60: 74 68 69 73 20 63 61 73 65 0a 20 20 74 68 65 20  this case.  the 
6f70: 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63 72 65  new table is cre
6f80: 61 74 65 64 20 69 6e 20 74 68 65 20 6e 61 6d 65  ated in the name
6f90: 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49 66 20  d database. ^If 
6fa0: 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54  the "TEMP" or "T
6fb0: 45 4d 50 4f 52 41 52 59 22 0a 20 20 6b 65 79 77  EMPORARY".  keyw
6fc0: 6f 72 64 20 6f 63 63 75 72 73 20 62 65 74 77 65  ord occurs betwe
6fd0: 65 6e 20 74 68 65 20 22 43 52 45 41 54 45 22 20  en the "CREATE" 
6fe0: 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68 65 6e  and "TABLE" then
6ff0: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
7000: 73 0a 20 20 63 72 65 61 74 65 64 20 69 6e 20 74  s.  created in t
7010: 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
7020: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
7030: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
7040: 68 20 61 20 0a 20 20 26 6c 74 3b 64 61 74 61 62  h a .  &lt;datab
7050: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 61 6e 64  ase-name&gt; and
7060: 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d   the TEMP or TEM
7070: 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 2c 20  PORARY keyword, 
7080: 75 6e 6c 65 73 73 20 74 68 65 0a 20 20 26 6c 74  unless the.  &lt
7090: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
70a0: 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20 5e 49  t; is "temp". ^I
70b0: 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61  f no database na
70c0: 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  me is specified 
70d0: 61 6e 64 20 74 68 65 0a 20 20 54 45 4d 50 20 6b  and the.  TEMP k
70e0: 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72  eyword is not pr
70f0: 65 73 65 6e 74 20 74 68 65 6e 20 74 68 65 20 74  esent then the t
7100: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20  able is created 
7110: 69 6e 20 74 68 65 20 6d 61 69 6e 0a 20 20 64 61  in the main.  da
7120: 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 0a 20 20 5e  tabase...<p>.  ^
7130: 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20 61 6e  It is usually an
7140: 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70   error to attemp
7150: 74 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  t to create a ne
7160: 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64 61 74  w table in a dat
7170: 61 62 61 73 65 20 74 68 61 74 0a 20 20 61 6c 72  abase that.  alr
7180: 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20 61 20  eady contains a 
7190: 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20  table, index or 
71a0: 76 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65  view of the same
71b0: 20 6e 61 6d 65 2e 20 5e 48 6f 77 65 76 65 72 2c   name. ^However,
71c0: 20 69 66 20 74 68 65 0a 20 20 22 49 46 20 4e 4f   if the.  "IF NO
71d0: 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73 65  T EXISTS" clause
71e0: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
71f0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 52 45   part of the CRE
7200: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
7210: 65 6e 74 20 61 6e 64 0a 20 20 61 20 74 61 62 6c  ent and.  a tabl
7220: 65 20 6f 72 20 76 69 65 77 20 6f 66 20 74 68 65  e or view of the
7230: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61   same name alrea
7240: 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 20 43  dy exists, the C
7250: 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d  REATE TABLE comm
7260: 61 6e 64 0a 20 20 73 69 6d 70 6c 79 20 68 61 73  and.  simply has
7270: 20 6e 6f 20 65 66 66 65 63 74 20 28 61 6e 64 20   no effect (and 
7280: 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  no error message
7290: 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e 20 5e   is returned). ^
72a0: 41 6e 20 65 72 72 6f 72 20 69 73 20 73 74 69 6c  An error is stil
72b0: 6c 0a 20 20 72 65 74 75 72 6e 65 64 20 69 66 20  l.  returned if 
72c0: 74 68 65 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74  the table cannot
72d0: 20 62 65 20 63 72 65 61 74 65 64 20 62 65 63 61   be created beca
72e0: 75 73 65 20 6f 66 20 61 6e 20 65 78 69 73 74 69  use of an existi
72f0: 6e 67 20 69 6e 64 65 78 2c 20 65 76 65 6e 20 0a  ng index, even .
7300: 20 20 69 66 20 74 68 65 20 22 49 46 20 4e 4f 54    if the "IF NOT
7310: 20 45 58 49 53 54 53 22 20 63 6c 61 75 73 65 20   EXISTS" clause 
7320: 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c  is specified...<
7330: 70 3e 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e 20  p>^It is not an 
7340: 65 72 72 6f 72 20 74 6f 20 63 72 65 61 74 65 20  error to create 
7350: 61 20 74 61 62 6c 65 20 74 68 61 74 20 68 61 73  a table that has
7360: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
7370: 73 20 61 6e 20 0a 20 20 65 78 69 73 74 69 6e 67  s an .  existing
7380: 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
7390: 7c 74 72 69 67 67 65 72 5d 2e 0a 0a 3c 70 3e 5e  |trigger]...<p>^
73a0: 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d 6f 76  Tables are remov
73b0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52  ed using the [DR
73c0: 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  OP TABLE] statem
73d0: 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 68 33 3e  ent.  </p>..<h3>
73e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
73f0: 20 41 53 20 53 45 4c 45 43 54 20 53 74 61 74 65   AS SELECT State
7400: 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ments</h3>..<p>^
7410: 28 41 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  (A "CREATE TABLE
7420: 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 22 20   ... AS SELECT" 
7430: 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61 74 65  statement create
7440: 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 73 20  s and populates 
7450: 61 20 64 61 74 61 62 61 73 65 0a 74 61 62 6c 65  a database.table
7460: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65   based on the re
7470: 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
7480: 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e  T statement.)^ ^
7490: 28 54 68 65 20 74 61 62 6c 65 20 68 61 73 20 74  (The table has t
74a0: 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f  he same.number o
74b0: 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65  f columns as the
74c0: 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
74d0: 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
74e0: 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65  tement. The name
74f0: 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of.each column 
7500: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  is the same as t
7510: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
7520: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c  orresponding col
7530: 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  umn in the resul
7540: 74 0a 73 65 74 20 6f 66 20 74 68 65 20 53 45 4c  t.set of the SEL
7550: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e  ECT statement.)^
7560: 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65 64 20   ^(The declared 
7570: 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  type of each col
7580: 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65  umn is determine
7590: 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72 65 73  d.by the [expres
75a0: 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f  sion affinity] o
75b0: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
75c0: 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ing expression i
75d0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
75e0: 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  .of the SELECT s
75f0: 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c  tatement, as fol
7600: 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e  lows:.</p>..<cen
7610: 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65  ter><table borde
7620: 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45  r=1>.  <tr><th>E
7630: 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69 6e 69  xpression Affini
7640: 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20  ty   <th>Column 
7650: 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a 20 20  Declared Type.  
7660: 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20 20 20  <tr><td>TEXT    
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74                <t
7680: 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c  d>"TEXT".  <tr><
7690: 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20 20 20  td>NUMERIC      
76a0: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 4e 55           <td>"NU
76b0: 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54  M".  <tr><td>INT
76c0: 45 47 45 52 20 20 20 20 20 20 20 20 20 20 20 20  EGER            
76d0: 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c     <td>"INT".  <
76e0: 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20 20 20  tr><td>REAL     
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
7700: 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74  >"REAL".  <tr><t
7710: 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20 20 20  d>NONE          
7720: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22 20 28          <td>"" (
7730: 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f  empty string).</
7740: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29  table></center>)
7750: 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20  ^..<p>^(A table 
7760: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  created using CR
7770: 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 68 61  EATE TABLE AS ha
7780: 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b 45 59  s no PRIMARY KEY
7790: 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69   and no.constrai
77a0: 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e  nts of any kind.
77b0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
77c0: 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ue of each colum
77d0: 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64  n is NULL. The d
77e0: 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e  efault.collation
77f0: 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61   sequence for ea
7800: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
7810: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 42 49   new table is BI
7820: 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62  NARY.)^..<p>^Tab
7830: 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
7840: 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41  g CREATE TABLE A
7850: 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  S are initially 
7860: 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74  populated with t
7870: 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74 61 20  he.rows of data 
7880: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
7890: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
78a0: 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73 73 69  . ^Rows are assi
78b0: 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c  gned contiguousl
78c0: 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77  y.ascending [row
78d0: 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74 61 72  id] values, star
78e0: 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69 6e 20  ting with 1, in 
78f0: 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72  the [order by|or
7900: 64 65 72 5d 20 74 68 61 74 20 74 68 65 79 0a 61  der] that they.a
7910: 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  re returned by t
7920: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
7930: 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ent...<tcl>hd_fr
7940: 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c  agment {tablecol
7950: 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66  def} {column def
7960: 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e  inition} {column
7970: 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74   definitions}</t
7980: 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44  cl>.<h3>Column D
7990: 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a  efinitions</h3>.
79a0: 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20 69 73  .<p>Unless it is
79b0: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
79c0: 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 73 74  ... AS SELECT st
79d0: 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45 41 54  atement, a CREAT
79e0: 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64 65 73  E TABLE includes
79f0: 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f  .one or more [co
7a00: 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20  lumn-def|column 
7a10: 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70  definitions], op
7a20: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
7a30: 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b  d by a list of.[
7a40: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
7a50: 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  |table constrain
7a60: 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d  ts].  Each colum
7a70: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e  n definition con
7a80: 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d  sists of the.nam
7a90: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c  e of the column,
7aa0: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
7ab0: 6f 77 65 64 20 62 79 20 74 68 65 20 64 65 63 6c  owed by the decl
7ac0: 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 65  ared type of the
7ad0: 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e   column,.then on
7ae0: 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e  e or more option
7af0: 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74  al [column-const
7b00: 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e  raint|column con
7b10: 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75  straints]. Inclu
7b20: 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66 69 6e  ded in.the defin
7b30: 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e  ition of "column
7b40: 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 66 6f   constraints" fo
7b50: 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
7b60: 66 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 73  f the previous.s
7b70: 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74 68 65  tatement are the
7b80: 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44 45 46   COLLATE and DEF
7b90: 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20 65 76  AULT clauses, ev
7ba0: 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73 65 20  en though these 
7bb0: 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63  are not really.c
7bc0: 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 74 68  onstraints in th
7bd0: 65 20 73 65 6e 73 65 20 74 68 61 74 20 74 68 65  e sense that the
7be0: 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72 69 63  y do not restric
7bf0: 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
7c00: 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f  the table may.co
7c10: 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68 65 72  ntain. The other
7c20: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e   constraints - N
7c30: 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20  OT NULL, CHECK, 
7c40: 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52 59 20  UNIQUE, PRIMARY 
7c50: 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20  KEY and.FOREIGN 
7c60: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  KEY constraints 
7c70: 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72 69 63  - impose restric
7c80: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74 61 62  tions on the tab
7c90: 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20 61 72  les data, and ar
7ca0: 65 20 61 72 65 0a 64 65 73 63 72 69 62 65 64 20  e are.described 
7cb0: 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e  under [constrain
7cc0: 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f 6e 73  ts|SQL Data Cons
7cd0: 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a  traints] below..
7ce0: 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74  .<p>^Unlike most
7cf0: 20 53 51 4c 20 64 61 74 61 62 61 73 65 73 2c 20   SQL databases, 
7d00: 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
7d10: 72 65 73 74 72 69 63 74 20 74 68 65 20 74 79 70  restrict the typ
7d20: 65 20 6f 66 20 64 61 74 61 20 74 68 61 74 0a 6d  e of data that.m
7d30: 61 79 20 62 65 20 69 6e 73 65 72 74 65 64 20 69  ay be inserted i
7d40: 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73  nto a column bas
7d50: 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ed on the column
7d60: 73 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 2e  s declared type.
7d70: 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69 74 65   Instead,.SQLite
7d80: 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74   uses [dynamic t
7d90: 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63  yping]. ^The dec
7da0: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 61 20  lared type of a 
7db0: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 74  column is used t
7dc0: 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o.determine the 
7dd0: 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68  [affinity] of th
7de0: 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a  e column only...
7df0: 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54 20 63  <p>The DEFAULT c
7e00: 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20  lause specifies 
7e10: 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  a default value 
7e20: 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65 20 63  to use for the c
7e30: 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c 75  olumn if no.valu
7e40: 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c 79 20  e is explicitly 
7e50: 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20  provided by the 
7e60: 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e 67 20  user when doing 
7e70: 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e 49 66  an [INSERT]. ^If
7e80: 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65 78 70   there.is no exp
7e90: 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c  licit DEFAULT cl
7ea0: 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f  ause attached to
7eb0: 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69   a column defini
7ec0: 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 0a  tion, then the .
7ed0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
7ee0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 4e   the column is N
7ef0: 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c 69 63  ULL. ^(An explic
7f00: 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73  it DEFAULT claus
7f10: 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a 74 68  e may specify.th
7f20: 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  at the default v
7f30: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 61 20  alue is NULL, a 
7f40: 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 2c  string constant,
7f50: 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74   a blob constant
7f60: 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d 62 65  , a.signed-numbe
7f70: 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73 74 61  r, or any consta
7f80: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 65 6e  nt expression en
7f90: 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e 74  closed in parent
7fa0: 68 65 73 65 73 2e 20 41 6e 20 65 78 70 6c 69 63  heses. An explic
7fb0: 69 74 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65  it.default value
7fc0: 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 6e 65   may also be one
7fd0: 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 20   of the special 
7fe0: 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74  case-independent
7ff0: 20 6b 65 79 77 6f 72 64 73 0a 43 55 52 52 45 4e   keywords.CURREN
8000: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
8010: 44 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54 5f  DATE or CURRENT_
8020: 54 49 4d 45 53 54 41 4d 50 2e 29 5e 20 5e 46 6f  TIMESTAMP.)^ ^Fo
8030: 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
8040: 66 20 74 68 65 0a 44 45 46 41 55 4c 54 20 63 6c  f the.DEFAULT cl
8050: 61 75 73 65 2c 20 61 6e 20 65 78 70 72 65 73 73  ause, an express
8060: 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ion is considere
8070: 64 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f 76 69  d constant provi
8080: 64 65 64 20 74 68 61 74 20 69 74 20 64 6f 65 73  ded that it does
8090: 0a 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 79  .not contain any
80a0: 20 73 75 62 2d 71 75 65 72 69 65 73 20 6f 72 20   sub-queries or 
80b0: 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  string constants
80c0: 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75   enclosed in dou
80d0: 62 6c 65 20 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e  ble quotes...<p>
80e0: 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20 72 6f  ^(Each time a ro
80f0: 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e  w is inserted in
8100: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 79 20  to the table by 
8110: 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
8120: 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73 20 6e  ent that .does n
8130: 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70 6c 69  ot provide expli
8140: 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72 20 61  cit values for a
8150: 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73  ll table columns
8160: 20 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72   the values stor
8170: 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20 72 6f  ed in.the new ro
8180: 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e 65 64  w are determined
8190: 20 62 79 20 74 68 65 69 72 20 64 65 66 61 75 6c   by their defaul
81a0: 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73 20 66  t values)^, as f
81b0: 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20  ollows:..<ul>.  
81c0: 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64  <li><p>^If the d
81d0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
81e0: 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20  the column is a 
81f0: 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c 20 74  constant NULL, t
8200: 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20 20 20  ext, blob or.   
8210: 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 20 76   signed-number v
8220: 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61 74 20  alue, then that 
8230: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 64 69  value is used di
8240: 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20 6e 65  rectly in the ne
8250: 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  w row...  <li><p
8260: 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75 6c 74  >^If the default
8270: 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75   value of a colu
8280: 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73  mn is an express
8290: 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73  ion in parenthes
82a0: 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65  es, then.    the
82b0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
82c0: 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
82d0: 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73 65 72  r each row inser
82e0: 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 73 75  ted and the resu
82f0: 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69 6e 20  lts.    used in 
8300: 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20  the new row...  
8310: 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64  <li><p>^If the d
8320: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
8330: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55 52 52  a column is CURR
8340: 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e  ENT_TIME, CURREN
8350: 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20 43 55  T_DATE or.    CU
8360: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c  RRENT_TIMESTAMP,
8370: 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
8380: 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20  used in the new 
8390: 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a 20 20  row is a text.  
83a0: 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e    representation
83b0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
83c0: 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72 20  UTC date and/or 
83d0: 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52 52 45  time. ^For CURRE
83e0: 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20 20 20  NT_TIME, the.   
83f0: 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 76   format of the v
8400: 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d 3a 53  alue is "HH:MM:S
8410: 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54  S". ^For CURRENT
8420: 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d 4d 2d  _DATE, "YYYY-MM-
8430: 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20 66 6f  DD". ^The.    fo
8440: 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45 4e 54  rmat for CURRENT
8450: 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20 22 59  _TIMESTAMP is "Y
8460: 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
8470: 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  SS"..</ul>..<p>^
8480: 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  The COLLATE clau
8490: 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 65  se specifies the
84a0: 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f 6c 6c   name of a [coll
84b0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20  ating sequence] 
84c0: 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20 64 65  to use as.the de
84d0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
84e0: 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74 68 65  sequence for the
84f0: 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20   column. ^If no 
8500: 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69  COLLATE clause i
8510: 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s.specified, the
8520: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
8530: 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20 5b  on sequence is [
8540: 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68  BINARY]...<p>^Th
8550: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
8560: 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20 69  mns in a table i
8570: 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74 68 65  s limited by the
8580: 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c   [SQLITE_MAX_COL
8590: 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d  UMN].compile-tim
85a0: 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e 41 20  e parameter. ^A 
85b0: 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61 20  single row of a 
85c0: 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f  table cannot sto
85d0: 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51  re more than.[SQ
85e0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d  LITE_MAX_LENGTH]
85f0: 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 2e 20   bytes of data. 
8600: 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65 20 6c  ^Both of these l
8610: 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c 6f 77  imits can be low
8620: 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d 65 20  ered at.runtime 
8630: 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74  using the [sqlit
8640: 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b  e3_limit()] C/C+
8650: 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  + interface.</p>
8660: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
8670: 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d  nt {constraints}
8680: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f   {constraints}</
8690: 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44 61 74  tcl>.<h3>SQL Dat
86a0: 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c 2f 68  a Constraints</h
86b0: 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  3>..<tcl>hd_frag
86c0: 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f 6e 73  ment primkeycons
86d0: 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 7d 20  t {PRIMARY KEY} 
86e0: 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e  {PRIMARY KEY con
86f0: 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c  straint}</tcl>.<
8700: 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20 69 6e  p>^Each table in
8710: 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61 76 65   SQLite may have
8720: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e   at most one <b>
8730: 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e  PRIMARY KEY</b>.
8740: 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79 77 6f   ^If the.  keywo
8750: 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20  rds PRIMARY KEY 
8760: 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 20 63  are added to a c
8770: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
8780: 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61  , then the prima
8790: 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74 68 65  ry key.  for the
87a0: 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20   table consists 
87b0: 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65 20 63  of that single c
87c0: 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61  olumn. ^Or, if a
87d0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61   PRIMARY KEY cla
87e0: 75 73 65 20 0a 20 20 69 73 20 73 70 65 63 69 66  use .  is specif
87f0: 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c 65 2d  ied as a [table-
8800: 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68 65  constraint], the
8810: 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  n the primary ke
8820: 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 20  y of the table. 
8830: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
8840: 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73   list of columns
8850: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
8860: 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  rt of the PRIMAR
8870: 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20 20  Y KEY clause..  
8880: 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 72 61 69  ^An error is rai
8890: 73 65 64 20 69 66 20 6d 6f 72 65 20 74 68 61 6e  sed if more than
88a0: 20 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59   one PRIMARY KEY
88b0: 20 63 6c 61 75 73 65 20 61 70 70 65 61 72 73 20   clause appears 
88c0: 69 6e 20 61 0a 20 20 43 52 45 41 54 45 20 54 41  in a.  CREATE TA
88d0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  BLE statement.  
88e0: 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59  ^The PRIMARY KEY
88f0: 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f 72   is optional for
8900: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73   ordinary tables
8910: 0a 20 20 62 75 74 20 69 73 20 72 65 71 75 69 72  .  but is requir
8920: 65 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20  ed for [WITHOUT 
8930: 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 0a  ROWID] tables...
8940: 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20 68 61  <p>If a table ha
8950: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  s a single colum
8960: 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61 6e  n primary key an
8970: 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74  d the declared t
8980: 79 70 65 20 6f 66 20 74 68 61 74 0a 20 20 63 6f  ype of that.  co
8990: 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52  lumn is "INTEGER
89a0: 22 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  " and the table 
89b0: 69 73 20 6e 6f 74 20 61 20 5b 57 49 54 48 4f 55  is not a [WITHOU
89c0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 0a  T ROWID] table,.
89d0: 20 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d    then the colum
89e0: 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20 61 6e  n is known as an
89f0: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
8a00: 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20 62 65  Y KEY]..  See be
8a10: 6c 6f 77 20 66 6f 72 20 61 20 64 65 73 63 72 69  low for a descri
8a20: 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 70 65  ption of the spe
8a30: 63 69 61 6c 20 70 72 6f 70 65 72 74 69 65 73 20  cial properties 
8a40: 61 6e 64 20 62 65 68 61 76 69 6f 72 73 0a 20 20  and behaviors.  
8a50: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
8a60: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
8a70: 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e 45  ARY KEY]...<p>^E
8a80: 61 63 68 20 72 6f 77 20 69 6e 20 61 20 74 61 62  ach row in a tab
8a90: 6c 65 20 77 69 74 68 20 61 20 70 72 69 6d 61 72  le with a primar
8aa0: 79 20 6b 65 79 20 6d 75 73 74 20 68 61 76 65 20  y key must have 
8ab0: 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61  a unique combina
8ac0: 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73  tion.  of values
8ad0: 20 69 6e 20 69 74 73 20 70 72 69 6d 61 72 79 20   in its primary 
8ae0: 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e 46 6f  key columns. ^Fo
8af0: 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
8b00: 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a 20 20  f determining.  
8b10: 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73 20 6f  the uniqueness o
8b20: 66 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61  f primary key va
8b30: 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65  lues, NULL value
8b40: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
8b50: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 0a 20   distinct from. 
8b60: 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65   all other value
8b70: 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68  s, including oth
8b80: 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66 20 61 6e  er NULLs. ^If an
8b90: 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50   [INSERT] or [UP
8ba0: 44 41 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e  DATE].  statemen
8bb0: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 6f  t attempts to mo
8bc0: 64 69 66 79 20 74 68 65 20 74 61 62 6c 65 20 63  dify the table c
8bd0: 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74 20 74  ontent so that t
8be0: 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 0a  wo or more rows.
8bf0: 20 20 66 65 61 74 75 72 65 20 69 64 65 6e 74 69    feature identi
8c00: 63 61 6c 20 70 72 69 6d 61 72 79 20 6b 65 79 20  cal primary key 
8c10: 76 61 6c 75 65 73 2c 20 69 74 20 69 73 20 61 20  values, it is a 
8c20: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
8c30: 74 69 6f 6e 2e 0a 20 20 41 63 63 6f 72 64 69 6e  tion..  Accordin
8c40: 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74 61  g to the SQL sta
8c50: 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20 4b  ndard, PRIMARY K
8c60: 45 59 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73  EY should always
8c70: 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e   imply NOT NULL.
8c80: 0a 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  .  Unfortunately
8c90: 2c 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69  , due to a bug i
8ca0: 6e 20 73 6f 6d 65 20 65 61 72 6c 79 20 76 65 72  n some early ver
8cb0: 73 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20 6e  sions, this is n
8cc0: 6f 74 20 74 68 65 0a 20 20 63 61 73 65 20 69 6e  ot the.  case in
8cd0: 20 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73   SQLite. ^Unless
8ce0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61   the column is a
8cf0: 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n [INTEGER PRIMA
8d00: 52 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74 68 65  RY KEY] or.  the
8d10: 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54   table is a [WIT
8d20: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
8d30: 65 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e or the column 
8d40: 69 73 20 64 65 63 6c 61 72 65 64 20 4e 4f 54 20  is declared NOT 
8d50: 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65 20 61  NULL,.  SQLite a
8d60: 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65  llows NULL value
8d70: 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20 4b  s in a PRIMARY K
8d80: 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c 69  EY column.  SQLi
8d90: 74 65 20 63 6f 75 6c 64 20 62 65 20 66 69 78 65  te could be fixe
8da0: 64 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74  d to.  conform t
8db0: 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 2c 20  o the standard, 
8dc0: 62 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d 69 67  but doing so mig
8dd0: 68 74 20 62 72 65 61 6b 20 6c 65 67 61 63 79 20  ht break legacy 
8de0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20 20  applications..  
8df0: 48 65 6e 63 65 2c 20 69 74 20 68 61 73 20 62 65  Hence, it has be
8e00: 65 6e 20 64 65 63 69 64 65 64 20 74 6f 20 6d 65  en decided to me
8e10: 72 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20 74 68  rely document th
8e20: 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69  e fact that SQLi
8e30: 74 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20 4e 55  te.  allowing NU
8e40: 4c 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52 49 4d  LLs in most PRIM
8e50: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e  ARY KEY columns.
8e60: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
8e70: 6e 74 20 75 6e 69 71 75 65 63 6f 6e 73 74 20 7b  nt uniqueconst {
8e80: 55 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75 65 20  UNIQUE} {unique 
8e90: 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c  constraint}</tcl
8ea0: 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55 4e 49 51 55  >.<p>^A <b>UNIQU
8eb0: 45 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74  E</b> constraint
8ec0: 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 61   is similar to a
8ed0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e   PRIMARY KEY con
8ee0: 73 74 72 61 69 6e 74 2c 20 65 78 63 65 70 74 0a  straint, except.
8ef0: 20 20 74 68 61 74 20 61 20 73 69 6e 67 6c 65 20    that a single 
8f00: 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20 61  table may have a
8f10: 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 55 4e 49  ny number of UNI
8f20: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  QUE constraints.
8f30: 20 5e 46 6f 72 20 65 61 63 68 0a 20 20 55 4e 49   ^For each.  UNI
8f40: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f  QUE constraint o
8f50: 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 65 61 63  n the table, eac
8f60: 68 20 72 6f 77 20 6d 75 73 74 20 63 6f 6e 74 61  h row must conta
8f70: 69 6e 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62  in a unique comb
8f80: 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c  ination.  of val
8f90: 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ues in the colum
8fa0: 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  ns identified by
8fb0: 20 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73   the UNIQUE cons
8fc0: 74 72 61 69 6e 74 2e 20 0a 20 20 5e 46 6f 72 20  traint. .  ^For 
8fd0: 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
8fe0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
8ff0: 74 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a  ts, NULL values.
9000: 20 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64    are considered
9010: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61   distinct from a
9020: 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c  ll other values,
9030: 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72   including other
9040: 20 4e 55 4c 4c 73 2e 0a 0a 3c 70 3e 5e 49 6e 20   NULLs...<p>^In 
9050: 6d 6f 73 74 20 63 61 73 65 73 2c 20 55 4e 49 51  most cases, UNIQ
9060: 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
9070: 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 73  EY.  constraints
9080: 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64   are implemented
9090: 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 20 75   by creating a u
90a0: 6e 69 71 75 65 20 69 6e 64 65 78 20 69 6e 20 74  nique index in t
90b0: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 28  he database..  (
90c0: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61  The exceptions a
90d0: 72 65 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  re [INTEGER PRIM
90e0: 41 52 59 20 4b 45 59 5d 20 61 6e 64 20 50 52 49  ARY KEY] and PRI
90f0: 4d 41 52 59 20 4b 45 59 73 20 6f 6e 20 0a 20 20  MARY KEYs on .  
9100: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
9110: 74 61 62 6c 65 73 2e 29 0a 20 20 48 65 6e 63 65  tables.).  Hence
9120: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
9130: 73 63 68 65 6d 61 73 20 61 72 65 20 6c 6f 67 69  schemas are logi
9140: 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74  cally equivalent
9150: 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e  :..  <ol>.  <li>
9160: 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  <p>CREATE TABLE 
9170: 74 31 28 61 2c 20 62 20 55 4e 49 51 55 45 29 3b  t1(a, b UNIQUE);
9180: 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45  .  <li><p>CREATE
9190: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20 50   TABLE t1(a, b P
91a0: 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 3c  RIMARY KEY);.  <
91b0: 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42  li><p>CREATE TAB
91c0: 4c 45 20 74 31 28 61 2c 20 62 29 3b 3c 62 72 3e  LE t1(a, b);<br>
91d0: 0a 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45  .         CREATE
91e0: 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74 31   UNIQUE INDEX t1
91f0: 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 3c 2f  b ON t1(b);.  </
9200: 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ol>..<tcl>hd_fra
9210: 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d 20  gment {ckconst} 
9220: 7b 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20 63  {CHECK} {CHECK c
9230: 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45 43  onstraint} {CHEC
9240: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f  K constraints}</
9250: 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43  tcl>.<p>^(A <b>C
9260: 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72 61  HECK</b> constra
9270: 69 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61 63  int may be attac
9280: 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  hed to a column 
9290: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20 20  definition or.  
92a0: 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74  specified as a t
92b0: 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e  able constraint.
92c0: 20 49 6e 20 70 72 61 63 74 69 63 65 20 69 74 20   In practice it 
92d0: 6d 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72 65  makes no differe
92e0: 6e 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20 20  nce.)^ ^(Each.  
92f0: 74 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20 69  time a new row i
9300: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
9310: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e 20  the table or an 
9320: 65 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73 20  existing row is 
9330: 75 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20 65  updated,.  the e
9340: 78 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63 69  xpression associ
9350: 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20 43  ated with each C
9360: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
9370: 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  is evaluated and
9380: 0a 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55 4d  .  cast to a NUM
9390: 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68  ERIC value in th
93a0: 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20  e same way as a 
93b0: 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  [CAST expression
93c0: 5d 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65 73  ]. If the .  res
93d0: 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e 74  ult is zero (int
93e0: 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20  eger value 0 or 
93f0: 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29 2c  real value 0.0),
9400: 20 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69   then a constrai
9410: 6e 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20 68  nt.  violation h
9420: 61 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20 5e  as occurred.)^ ^
9430: 49 66 20 74 68 65 20 43 48 45 43 4b 20 65 78 70  If the CHECK exp
9440: 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
9450: 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20  s to NULL, or.  
9460: 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65  any other non-ze
9470: 72 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ro value, it is 
9480: 6e 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  not a constraint
9490: 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54   violation..  ^T
94a0: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  he expression of
94b0: 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
94c0: 69 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74  int may not cont
94d0: 61 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e 0a  ain a subquery..
94e0: 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72  .<p>CHECK constr
94f0: 61 69 6e 74 73 20 68 61 76 65 20 62 65 65 6e 20  aints have been 
9500: 73 75 70 70 6f 72 74 65 64 20 73 69 6e 63 65 20  supported since 
9510: 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30 5d 2e  [version 3.3.0].
9520: 20 50 72 69 6f 72 20 74 6f 0a 20 20 76 65 72 73   Prior to.  vers
9530: 69 6f 6e 20 33 2e 33 2e 30 2c 20 43 48 45 43 4b  ion 3.3.0, CHECK
9540: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72   constraints wer
9550: 65 20 70 61 72 73 65 64 20 62 75 74 20 6e 6f 74  e parsed but not
9560: 20 65 6e 66 6f 72 63 65 64 2e 0a 0a 3c 74 63 6c   enforced...<tcl
9570: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 6e 6f  >hd_fragment {no
9580: 74 6e 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54  tnullconst} {NOT
9590: 20 4e 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c   NULL} {NOT NULL
95a0: 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63   constraint}</tc
95b0: 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20  l>.<p>^A <b>NOT 
95c0: 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72 61  NULL</b> constra
95d0: 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20  int may only be 
95e0: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f  attached to a co
95f0: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c  lumn definition,
9600: 0a 20 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  .  not specified
9610: 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73   as a table cons
9620: 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20 73 75 72  traint.  Not sur
9630: 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28 61 20 4e  prisingly, ^(a N
9640: 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74 72  OT NULL.  constr
9650: 61 69 6e 74 20 64 69 63 74 61 74 65 73 20 74 68  aint dictates th
9660: 61 74 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  at the associate
9670: 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74  d column may not
9680: 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20   contain a NULL 
9690: 76 61 6c 75 65 2e 0a 20 20 41 74 74 65 6d 70 74  value..  Attempt
96a0: 69 6e 67 20 74 6f 20 73 65 74 20 74 68 65 20 63  ing to set the c
96b0: 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e  olumn value to N
96c0: 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65 72 74 69  ULL when inserti
96d0: 6e 67 20 61 20 6e 65 77 20 72 6f 77 20 6f 72 0a  ng a new row or.
96e0: 20 20 75 70 64 61 74 69 6e 67 20 61 6e 20 65 78    updating an ex
96f0: 69 73 74 69 6e 67 20 6f 6e 65 20 63 61 75 73 65  isting one cause
9700: 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  s a constraint v
9710: 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e  iolation.)^..<p>
9720: 45 78 61 63 74 6c 79 20 68 6f 77 20 61 20 63 6f  Exactly how a co
9730: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
9740: 6f 6e 20 69 73 20 64 65 61 6c 74 20 77 69 74 68  on is dealt with
9750: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
9760: 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66 6c 69 63  y the.  [conflic
9770: 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73 74 72 61  t clause|constra
9780: 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
9790: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
97a0: 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50 52 49 4d  m]. Each .  PRIM
97b0: 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 2c  ARY KEY, UNIQUE,
97c0: 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64 20 43 48   NOT NULL and CH
97d0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 68  ECK constraint h
97e0: 61 73 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e  as a default con
97f0: 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c 75 74 69  flict.  resoluti
9800: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20 5e 50  on algorithm. ^P
9810: 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51  RIMARY KEY, UNIQ
9820: 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
9830: 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 61 79 20  constraints may 
9840: 62 65 0a 20 20 65 78 70 6c 69 63 69 74 6c 79 20  be.  explicitly 
9850: 61 73 73 69 67 6e 65 64 20 61 20 64 65 66 61 75  assigned a defau
9860: 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
9870: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
9880: 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 0a 20 20   by including.  
9890: 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  a [conflict-clau
98a0: 73 65 5d 20 69 6e 20 74 68 65 69 72 20 64 65 66  se] in their def
98b0: 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69  initions. ^Or, i
98c0: 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 64  f a constraint d
98d0: 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64 6f 65 73  efinition.  does
98e0: 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 20 5b   not include a [
98f0: 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d  conflict-clause]
9900: 20 6f 72 20 69 74 20 69 73 20 61 20 43 48 45 43   or it is a CHEC
9910: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68  K constraint, th
9920: 65 20 64 65 66 61 75 6c 74 0a 20 20 63 6f 6e 66  e default.  conf
9930: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
9940: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f  algorithm is ABO
9950: 52 54 2e 20 5e 44 69 66 66 65 72 65 6e 74 20 63  RT. ^Different c
9960: 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 74 68 69  onstraints withi
9970: 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 74 61 62  n the.  same tab
9980: 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66 66  le may have diff
9990: 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20 63 6f  erent default co
99a0: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
99b0: 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 20 53 65  n algorithms. Se
99c0: 65 0a 20 20 74 68 65 20 73 65 63 74 69 6f 6e 20  e.  the section 
99d0: 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c  titled [ON CONFL
99e0: 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f  ICT] for additio
99f0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
9a00: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
9a10: 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47 45  nt rowid {INTEGE
9a20: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 52  R PRIMARY KEY} R
9a30: 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c 3e  OWID rowid</tcl>
9a40: 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64 20  .<h3>ROWIDs and 
9a50: 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d  the INTEGER PRIM
9a60: 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70  ARY KEY</h3>..<p
9a70: 3e 5e 45 78 63 65 70 74 20 66 6f 72 20 5b 57 49  >^Except for [WI
9a80: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
9a90: 6c 65 73 2c 20 61 6c 6c 20 72 6f 77 73 20 77 69  les, all rows wi
9aa0: 74 68 69 6e 20 53 51 4c 69 74 65 20 74 61 62 6c  thin SQLite tabl
9ab0: 65 73 0a 68 61 76 65 20 61 20 36 34 2d 62 69 74  es.have a 64-bit
9ac0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
9ad0: 6b 65 79 20 74 68 61 74 20 75 6e 69 71 75 65 6c  key that uniquel
9ae0: 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  y identifies the
9af0: 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74 73 20   row within its 
9b00: 74 61 62 6c 65 2e 0a 54 68 69 73 20 69 6e 74 65  table..This inte
9b10: 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79 0a 63  ger is usually.c
9b20: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77 69 64  alled the "rowid
9b30: 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20 76 61  ". ^The rowid va
9b40: 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63 65 73  lue can be acces
9b50: 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  sed using one of
9b60: 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63 61 73   the special.cas
9b70: 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6e 61  e-independent na
9b80: 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22 6f 69  mes "rowid", "oi
9b90: 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22  d", or "_rowid_"
9ba0: 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 63   in place of a c
9bb0: 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20  olumn name..^If 
9bc0: 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  a table contains
9bd0: 20 61 20 75 73 65 72 20 64 65 66 69 6e 65 64 20   a user defined 
9be0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22 72 6f  column named "ro
9bf0: 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22  wid", "oid" or "
9c00: 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e 20 74  _rowid_",.then t
9c10: 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79 73 20  hat name always 
9c20: 72 65 66 65 72 73 20 74 68 65 20 65 78 70 6c 69  refers the expli
9c30: 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20 63  citly declared c
9c40: 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74  olumn and cannot
9c50: 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65 74 72   be used.to retr
9c60: 69 65 76 65 20 74 68 65 20 69 6e 74 65 67 65 72  ieve the integer
9c70: 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a 0a 3c   rowid value...<
9c80: 70 3e 54 68 65 20 72 6f 77 69 64 20 28 61 6e 64  p>The rowid (and
9c90: 20 22 6f 69 64 22 20 61 6e 64 20 22 5f 72 6f 77   "oid" and "_row
9ca0: 69 64 5f 22 29 20 69 73 20 6f 6d 69 74 74 65 64  id_") is omitted
9cb0: 20 69 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f 57   in [WITHOUT ROW
9cc0: 49 44 5d 20 74 61 62 6c 65 73 2e 0a 57 49 54 48  ID] tables..WITH
9cd0: 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73  OUT ROWID tables
9ce0: 20 61 72 65 20 6f 6e 6c 79 20 61 76 61 69 6c 61   are only availa
9cf0: 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 5b 76  ble in SQLite [v
9d00: 65 72 73 69 6f 6e 20 33 2e 38 2e 32 5d 20 61 6e  ersion 3.8.2] an
9d10: 64 20 6c 61 74 65 72 2e 0a 41 20 74 61 62 6c 65  d later..A table
9d20: 20 74 68 61 74 20 6c 61 63 6b 73 20 74 68 65 20   that lacks the 
9d30: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 63 6c  WITHOUT ROWID cl
9d40: 61 75 73 65 20 69 73 20 63 61 6c 6c 65 64 20 61  ause is called a
9d50: 20 22 72 6f 77 69 64 20 74 61 62 6c 65 22 2e 0a   "rowid table"..
9d60: 0a 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72  .<p>The data for
9d70: 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20 69 73   rowid tables is
9d80: 20 73 74 6f 72 65 64 20 61 73 20 61 20 42 2d 54   stored as a B-T
9d90: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 63 6f  ree structure co
9da0: 6e 74 61 69 6e 69 6e 67 0a 6f 6e 65 20 65 6e 74  ntaining.one ent
9db0: 72 79 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c  ry for each tabl
9dc0: 65 20 72 6f 77 2c 20 75 73 69 6e 67 20 74 68 65  e row, using the
9dd0: 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 73 20   rowid value as 
9de0: 74 68 65 20 6b 65 79 2e 20 54 68 69 73 20 6d 65  the key. This me
9df0: 61 6e 73 20 74 68 61 74 0a 72 65 74 72 69 65 76  ans that.retriev
9e00: 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67 20 72  ing or sorting r
9e10: 65 63 6f 72 64 73 20 62 79 20 72 6f 77 69 64 20  ecords by rowid 
9e20: 69 73 20 66 61 73 74 2e 20 53 65 61 72 63 68 69  is fast. Searchi
9e30: 6e 67 20 66 6f 72 20 61 20 72 65 63 6f 72 64 20  ng for a record 
9e40: 77 69 74 68 20 61 0a 73 70 65 63 69 66 69 63 20  with a.specific 
9e50: 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c  rowid, or for al
9e60: 6c 20 72 65 63 6f 72 64 73 20 77 69 74 68 20 72  l records with r
9e70: 6f 77 69 64 73 20 77 69 74 68 69 6e 20 61 20 73  owids within a s
9e80: 70 65 63 69 66 69 65 64 20 72 61 6e 67 65 20 69  pecified range i
9e90: 73 0a 61 72 6f 75 6e 64 20 74 77 69 63 65 20 61  s.around twice a
9ea0: 73 20 66 61 73 74 20 61 73 20 61 20 73 69 6d 69  s fast as a simi
9eb0: 6c 61 72 20 73 65 61 72 63 68 20 6d 61 64 65 20  lar search made 
9ec0: 62 79 20 73 70 65 63 69 66 79 69 6e 67 20 61 6e  by specifying an
9ed0: 79 20 6f 74 68 65 72 20 50 52 49 4d 41 52 59 0a  y other PRIMARY.
9ee0: 4b 45 59 20 6f 72 20 69 6e 64 65 78 65 64 20 76  KEY or indexed v
9ef0: 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68  alue...<p> ^With
9f00: 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 20 6e   one exception n
9f10: 6f 74 65 64 20 62 65 6c 6f 77 2c 20 69 66 20 61  oted below, if a
9f20: 20 72 6f 77 69 64 20 74 61 62 6c 65 20 68 61 73   rowid table has
9f30: 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 74   a primary key t
9f40: 68 61 74 20 63 6f 6e 73 69 73 74 73 0a 6f 66 20  hat consists.of 
9f50: 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20  a single column 
9f60: 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64  and the declared
9f70: 20 74 79 70 65 20 6f 66 20 74 68 61 74 20 63 6f   type of that co
9f80: 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52  lumn is "INTEGER
9f90: 22 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65  " in any mixture
9fa0: 20 6f 66 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f   of.upper and lo
9fb0: 77 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20 74  wer case, then t
9fc0: 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65  he column become
9fd0: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
9fe0: 68 65 20 72 6f 77 69 64 2e 20 53 75 63 68 20 61  he rowid. Such a
9ff0: 0a 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c  .column is usual
a000: 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61  ly referred to a
a010: 73 20 61 6e 20 22 69 6e 74 65 67 65 72 20 70 72  s an "integer pr
a020: 69 6d 61 72 79 20 6b 65 79 22 2e 20 41 20 50 52  imary key". A PR
a030: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e  IMARY KEY column
a040: 0a 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e  .only becomes an
a050: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
a060: 20 6b 65 79 20 69 66 20 74 68 65 20 64 65 63 6c   key if the decl
a070: 61 72 65 64 20 74 79 70 65 20 6e 61 6d 65 20 69  ared type name i
a080: 73 20 65 78 61 63 74 6c 79 0a 22 49 4e 54 45 47  s exactly."INTEG
a090: 45 52 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74  ER".  ^Other int
a0a0: 65 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20  eger type names 
a0b0: 6c 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42  like "INT" or "B
a0c0: 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54  IGINT" or "SHORT
a0d0: 20 49 4e 54 45 47 45 52 22 0a 6f 72 20 22 55 4e   INTEGER".or "UN
a0e0: 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20  SIGNED INTEGER" 
a0f0: 63 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61  causes the prima
a100: 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f  ry key column to
a110: 20 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72   behave as an or
a120: 64 69 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c  dinary.table col
a130: 75 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65 72  umn with integer
a140: 20 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20   [affinity] and 
a150: 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20  a unique index, 
a160: 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20  not as an alias 
a170: 66 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a  for.the rowid...
a180: 3c 70 3e 20 54 68 65 20 65 78 63 65 70 74 69 6f  <p> The exceptio
a190: 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76  n mentioned abov
a1a0: 65 20 69 73 20 74 68 61 74 20 5e 69 66 20 74 68  e is that ^if th
a1b0: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66  e declaration of
a1c0: 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64   a column with.d
a1d0: 65 63 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e  eclared type "IN
a1e0: 54 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20  TEGER" includes 
a1f0: 61 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20  an "PRIMARY KEY 
a200: 44 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74  DESC" clause, it
a210: 20 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65   does not.become
a220: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
a230: 65 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20 6e  e rowid and is n
a240: 6f 74 20 63 6c 61 73 73 69 66 69 65 64 20 61 73  ot classified as
a250: 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d   an integer prim
a260: 61 72 79 20 6b 65 79 2e 0a 54 68 69 73 20 71 75  ary key..This qu
a270: 69 72 6b 20 69 73 20 6e 6f 74 20 62 79 20 64 65  irk is not by de
a280: 73 69 67 6e 2e 20 49 74 20 69 73 20 64 75 65 20  sign. It is due 
a290: 74 6f 20 61 20 62 75 67 20 69 6e 20 65 61 72 6c  to a bug in earl
a2a0: 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  y versions of SQ
a2b0: 4c 69 74 65 2e 0a 42 75 74 20 66 69 78 69 6e 67  Lite..But fixing
a2c0: 20 74 68 65 20 62 75 67 20 63 6f 75 6c 64 20 72   the bug could r
a2d0: 65 73 75 6c 74 20 69 6e 20 62 61 63 6b 77 61 72  esult in backwar
a2e0: 64 73 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69  ds incompatibili
a2f0: 74 69 65 73 2e 0a 48 65 6e 63 65 2c 20 74 68 65  ties..Hence, the
a300: 20 6f 72 69 67 69 6e 61 6c 20 62 65 68 61 76 69   original behavi
a310: 6f 72 20 68 61 73 20 62 65 65 6e 20 72 65 74 61  or has been reta
a320: 69 6e 65 64 20 28 61 6e 64 20 64 6f 63 75 6d 65  ined (and docume
a330: 6e 74 65 64 29 20 62 65 63 61 75 73 65 0a 62 65  nted) because.be
a340: 68 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72 6e  havior in a corn
a350: 65 72 20 63 61 73 65 20 69 73 20 66 61 72 20 62  er case is far b
a360: 65 74 74 65 72 20 74 68 61 6e 20 61 20 63 6f 6d  etter than a com
a370: 70 61 74 69 62 69 6c 69 74 79 20 62 72 65 61 6b  patibility break
a380: 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 0a 74 68  .  This means.th
a390: 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69  at ^(the followi
a3a0: 6e 67 20 74 68 72 65 65 20 74 61 62 6c 65 20 64  ng three table d
a3b0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20  eclarations all 
a3c0: 63 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e  cause the column
a3d0: 20 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61 6c   "x" to be an.al
a3e0: 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69  ias for the rowi
a3f0: 64 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72  d (an integer pr
a400: 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c  imary key):..<ul
a410: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
a420: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
a430: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41  ER PRIMARY KEY A
a440: 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a  SC, y, z);</tt>.
a450: 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54  <li><tt>CREATE T
a460: 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52  ABLE t(x INTEGER
a470: 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20  , y, z, PRIMARY 
a480: 4b 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74 74  KEY(x ASC));</tt
a490: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
a4a0: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
a4b0: 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52  ER, y, z, PRIMAR
a4c0: 59 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b 3c  Y KEY(x DESC));<
a4d0: 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70  /tt>.</ul>)^..<p
a4e0: 3e 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f  >But ^(the follo
a4f0: 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e  wing declaration
a500: 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c 74   does not result
a510: 20 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61 6e   in "x" being an
a520: 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72   alias for.the r
a530: 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  owid:.<ul>.<li><
a540: 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  tt>CREATE TABLE 
a550: 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d  t(x INTEGER PRIM
a560: 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c  ARY KEY DESC, y,
a570: 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29   z);</tt>.</ul>)
a580: 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61 6c  ^..<p>^Rowid val
a590: 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66  ues may be modif
a5a0: 69 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50 44  ied using an UPD
a5b0: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  ATE statement in
a5c0: 20 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61 73   the same.way as
a5d0: 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d   any other colum
a5e0: 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69 74  n value can, eit
a5f0: 68 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  her using one of
a600: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c   the built-in al
a610: 69 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c 20  iases.("rowid", 
a620: 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64  "oid" or "_rowid
a630: 5f 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67 20  _") or by using 
a640: 61 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65 64  an alias created
a650: 20 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a 70   by an integer.p
a660: 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69 6d  rimary key. ^Sim
a670: 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45 52  ilarly, an INSER
a680: 54 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  T statement may 
a690: 70 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65 20  provide a value 
a6a0: 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f  to use as the.ro
a6b0: 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  wid for each row
a6c0: 20 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e 6c   inserted. ^(Unl
a6d0: 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74  ike normal SQLit
a6e0: 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e  e columns, an in
a6f0: 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65  teger primary.ke
a700: 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d  y or rowid colum
a710: 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 69  n must contain i
a720: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20 49  nteger values. I
a730: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
a740: 65 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c 75  ey or rowid.colu
a750: 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c 65  mns are not able
a760: 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e   to hold floatin
a770: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20  g point values, 
a780: 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20  strings, BLOBs, 
a790: 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e  or NULLs.)^..<p>
a7a0: 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74  ^If an UPDATE st
a7b0: 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
a7c0: 20 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65 67   to set an integ
a7d0: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  er primary key o
a7e0: 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a 74  r rowid column.t
a7f0: 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62  o a NULL or blob
a800: 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61 20   value, or to a 
a810: 73 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20 76  string or real v
a820: 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74  alue that cannot
a830: 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63   be losslessly.c
a840: 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
a850: 6e 74 65 67 65 72 2c 20 61 20 22 64 61 74 61 74  nteger, a "datat
a860: 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72  ype mismatch" er
a870: 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74  ror occurs and t
a880: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20  he statement.is 
a890: 61 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e 20  aborted. ^If an 
a8a0: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
a8b0: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73   attempts to ins
a8c0: 65 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75 65  ert a blob value
a8d0: 2c 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f 72  , or a string.or
a8e0: 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74   real value that
a8f0: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
a900: 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
a910: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e  to an integer in
a920: 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70 72  to an.integer pr
a930: 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
a940: 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64 61  id column, a "da
a950: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22  tatype mismatch"
a960: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e   error occurs an
a970: 64 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74 20  d the.statement 
a980: 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e  is aborted...<p>
a990: 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ^If an INSERT st
a9a0: 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
a9b0: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c   to insert a NUL
a9c0: 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72  L value into a r
a9d0: 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72 20  owid or.integer 
a9e0: 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75  primary key colu
a9f0: 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20 63  mn, the system c
aa00: 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67 65  hooses an intege
aa10: 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61  r value to use a
aa20: 73 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74 6f  s the.rowid auto
aa30: 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65 74  matically. A det
aa40: 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f  ailed descriptio
aa50: 6e 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69 73  n of how this is
aa60: 20 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64 65   done is provide
aa70: 64 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f 69  d.<a href="autoi
aa80: 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74  nc.html">separat
aa90: 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70  ely</a>.</p>..<p
aaa0: 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20 6b  >^(The [parent k
aab0: 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69 67  ey] of a [foreig
aac0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
aad0: 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ] is not allowed
aae0: 20 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77 69   to.use the rowi
aaf0: 64 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20 6b  d.  The parent k
ab00: 65 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61 6d  ey must used nam
ab10: 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e  ed columns only.
ab20: 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  )^</p>..<tcl>.##
ab30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ab70: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
ab80: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49  tion {CREATE TRI
ab90: 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67  GGER} createtrig
aba0: 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49  ger {{CREATE TRI
abb0: 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  GGER}}..Recursiv
abc0: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
abd0: 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d 73 74  reate-trigger-st
abe0: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
abf0: 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45  he CREATE TRIGGE
ac00: 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  R statement is u
ac10: 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67 67  sed to add trigg
ac20: 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74 61  ers to the .data
ac30: 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 54 72  base schema. ^Tr
ac40: 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61 62  iggers are datab
ac50: 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a  ase operations .
ac60: 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74  that are automat
ac70: 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64  ically performed
ac80: 20 77 68 65 6e 20 61 20 73 70 65 63 69 66 69 65   when a specifie
ac90: 64 20 64 61 74 61 62 61 73 65 20 65 76 65 6e 74  d database event
aca0: 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a  .occurs.  </p>..
acb0: 3c 70 3e 5e 41 20 74 72 69 67 67 65 72 20 6d 61  <p>^A trigger ma
acc0: 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20 74  y be specified t
acd0: 6f 20 66 69 72 65 20 77 68 65 6e 65 76 65 72 20  o fire whenever 
ace0: 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  a [DELETE], [INS
acf0: 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45  ERT],.or [UPDATE
ad00: 5d 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61  ] of a.particula
ad10: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
ad20: 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e   occurs, or when
ad30: 65 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45 5d  ever an [UPDATE]
ad40: 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e   occurs on.on on
ad50: 65 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66  e or more specif
ad60: 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  ied columns of a
ad70: 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e   table.</p>..<p>
ad80: 5e 41 74 20 74 68 69 73 20 74 69 6d 65 20 53 51  ^At this time SQ
ad90: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e  Lite supports on
ada0: 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20  ly FOR EACH ROW 
adb0: 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f  triggers, not FO
adc0: 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54  R EACH.STATEMENT
add0: 20 74 72 69 67 67 65 72 73 2e 20 5e 48 65 6e 63   triggers. ^Henc
ade0: 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65  e explicitly spe
adf0: 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48  cifying FOR EACH
ae00: 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c   ROW is optional
ae10: 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f 57 20  ..^FOR EACH ROW 
ae20: 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65  implies that the
ae30: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
ae40: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
ae50: 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65 20   trigger.may be 
ae60: 65 78 65 63 75 74 65 64 20 28 64 65 70 65 6e 64  executed (depend
ae70: 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e 20  ing on the WHEN 
ae80: 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63 68  clause) for each
ae90: 20 64 61 74 61 62 61 73 65 20 72 6f 77 20 62 65   database row be
aea0: 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75 70  ing.inserted, up
aeb0: 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  dated or deleted
aec0: 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
aed0: 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72  t causing the tr
aee0: 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f  igger to fire.</
aef0: 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68  p>..<p>^(Both th
af00: 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61 6e  e WHEN clause an
af10: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63  d the trigger ac
af20: 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73 73  tions may access
af30: 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68   elements of .th
af40: 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73 65  e row being inse
af50: 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f 72  rted, deleted or
af60: 20 75 70 64 61 74 65 64 20 75 73 69 6e 67 20 72   updated using r
af70: 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68 65  eferences of the
af80: 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63   form ."NEW.<i>c
af90: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20  olumn-name</i>" 
afa0: 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75  and "OLD.<i>colu
afb0: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68  mn-name</i>", wh
afc0: 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  ere.<i>column-na
afd0: 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e 61  me</i> is the na
afe0: 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66  me of a column f
aff0: 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74 68  rom the table th
b000: 61 74 20 74 68 65 20 74 72 69 67 67 65 72 0a 69  at the trigger.i
b010: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
b020: 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e  h.)^ ^(OLD and N
b030: 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 6d 61  EW references ma
b040: 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69  y only be used i
b050: 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a 65 76  n triggers on.ev
b060: 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20 74  ents for which t
b070: 68 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e 74  hey are relevant
b080: 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  , as follows:</p
b090: 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  >..<table border
b0a0: 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31  =0 cellpadding=1
b0b0: 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  0>.<tr>.<td vali
b0c0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
b0d0: 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30  right" width=120
b0e0: 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f  ><i>INSERT</i></
b0f0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
b100: 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65 6e  top">NEW referen
b110: 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74  ces are valid</t
b120: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
b130: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
b140: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
b150: 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54 45  th=120><i>UPDATE
b160: 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  </i></td>.<td va
b170: 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61  lign="top">NEW a
b180: 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63 65  nd OLD reference
b190: 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e  s are valid</td>
b1a0: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
b1b0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
b1c0: 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68  gn="right" width
b1d0: 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f  =120><i>DELETE</
b1e0: 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  i></td>.<td vali
b1f0: 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66  gn="top">OLD ref
b200: 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69  erences are vali
b210: 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74  d</td>.</tr>.</t
b220: 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70  able>.</p>)^..<p
b230: 3e 5e 49 66 20 61 20 57 48 45 4e 20 63 6c 61 75  >^If a WHEN clau
b240: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
b250: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
b260: 74 73 20 73 70 65 63 69 66 69 65 64 0a 61 72 65  ts specified.are
b270: 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20 66   only executed f
b280: 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  or rows for whic
b290: 68 20 74 68 65 20 57 48 45 4e 0a 63 6c 61 75 73  h the WHEN.claus
b2a0: 65 20 69 73 20 74 72 75 65 2e 20 5e 49 66 20 6e  e is true. ^If n
b2b0: 6f 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73  o WHEN clause is
b2c0: 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53   supplied, the S
b2d0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 72  QL statements.ar
b2e0: 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 61  e executed for a
b2f0: 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70  ll rows.</p>..<p
b300: 3e 5e 54 68 65 20 42 45 46 4f 52 45 20 6f 72 20  >^The BEFORE or 
b310: 41 46 54 45 52 20 6b 65 79 77 6f 72 64 20 64 65  AFTER keyword de
b320: 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68  termines when th
b330: 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e  e trigger action
b340: 73 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75 74  s.will be execut
b350: 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  ed relative to t
b360: 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f  he insertion, mo
b370: 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72 65  dification or re
b380: 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73 73  moval of the.ass
b390: 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e  ociated row.</p>
b3a0: 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e  ..<p>^An [ON CON
b3b0: 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d 61  FLICT] clause ma
b3c0: 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20 61  y be specified a
b3d0: 73 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55 50  s part of an [UP
b3e0: 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54  DATE] or [INSERT
b3f0: 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  ].action within 
b400: 74 68 65 20 62 6f 64 79 20 6f 66 20 74 68 65 20  the body of the 
b410: 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65  trigger..^Howeve
b420: 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46  r if an [ON CONF
b430: 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73 20  LICT] clause is 
b440: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
b450: 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65 6d  t of .the statem
b460: 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20  ent causing the 
b470: 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2c  trigger to fire,
b480: 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68   then conflict h
b490: 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f  andling.policy o
b4a0: 66 20 74 68 65 20 6f 75 74 65 72 20 73 74 61 74  f the outer stat
b4b0: 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 69 6e  ement is used in
b4c0: 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  stead.</p>..<p>^
b4d0: 54 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74  Triggers are aut
b4e0: 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50  omatically [DROP
b4f0: 20 54 52 49 47 47 45 52 20 7c 20 64 72 6f 70 70   TRIGGER | dropp
b500: 65 64 5d 0a 77 68 65 6e 20 74 68 65 20 74 61 62  ed].when the tab
b510: 6c 65 20 74 68 61 74 20 74 68 65 79 20 61 72 65  le that they are
b520: 20 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74   .associated wit
b530: 68 20 28 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d  h (the <i>table-
b540: 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20  name</i> table) 
b550: 69 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20  is .[DROP TABLE 
b560: 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f  | dropped].  ^Ho
b570: 77 65 76 65 72 20 69 66 20 74 68 65 20 74 72 69  wever if the tri
b580: 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65 66  gger actions ref
b590: 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61 62  erence.other tab
b5a0: 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67 65 72  les, the trigger
b5b0: 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 20   is not dropped 
b5c0: 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20 74  or modified if t
b5d0: 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c 65  hose other.table
b5e0: 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42 4c  s are [DROP TABL
b5f0: 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72 20  E | dropped] or 
b600: 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 6d  [ALTER TABLE | m
b610: 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c  odified].</p>..<
b620: 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65 20  p>^Triggers are 
b630: 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68  removed using th
b640: 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d  e [DROP TRIGGER]
b650: 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a   statement.</p>.
b660: 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73 74  .<h3>Syntax Rest
b670: 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41  rictions On UPDA
b680: 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64 20  TE, DELETE, and 
b690: 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e 74  INSERT Statement
b6a0: 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72 69  s Within.    Tri
b6b0: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ggers</h3>..<p>^
b6c0: 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44  The [UPDATE], [D
b6d0: 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53  ELETE], and [INS
b6e0: 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20  ERT].statements 
b6f0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
b700: 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74  do not support.t
b710: 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20 66  he full syntax f
b720: 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45  or [UPDATE], [DE
b730: 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45  LETE], and [INSE
b740: 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  RT] statements. 
b750: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72   The following.r
b760: 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c  estrictions appl
b770: 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  y:</p>..<ul>.<li
b780: 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d  ><p>.  ^(The nam
b790: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
b7a0: 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69 6e  o be modified in
b7b0: 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44   an [UPDATE], [D
b7c0: 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45  ELETE], or [INSE
b7d0: 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20  RT].  statement 
b7e0: 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75 61  must be an unqua
b7f0: 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61 6d  lified table nam
b800: 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  e.  In other wor
b810: 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75  ds, one must.  u
b820: 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c  se just "<i>tabl
b830: 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22  ename</i>" not "
b840: 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c  <i>database</i><
b850: 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e  b>.</b><i>tablen
b860: 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20  ame</i>".  when 
b870: 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20 74  specifying the t
b880: 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74 61  able.)^  ^The ta
b890: 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69  ble to be modifi
b8a0: 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e  ed must exist in
b8b0: 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74 61   the.  same data
b8c0: 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c  base as the tabl
b8d0: 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
b8e0: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
b8f0: 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f  s attached..  </
b900: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
b910: 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54 20  .  ^The "INSERT 
b920: 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69  INTO <i>table</i
b930: 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  > DEFAULT VALUES
b940: 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49  " form of the [I
b950: 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74  NSERT] statement
b960: 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72  .  is not suppor
b970: 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  ted..  </p></li>
b980: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65  ..<li><p>.  ^The
b990: 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
b9a0: 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
b9b0: 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70  ses are not supp
b9c0: 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54  orted for [UPDAT
b9d0: 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45  E] and.  [DELETE
b9e0: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  ] statements..  
b9f0: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
ba00: 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45 52  p>.  ^(The ORDER
ba10: 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c   BY and LIMIT cl
ba20: 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54 45  auses on [UPDATE
ba30: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73  ] and [DELETE] s
ba40: 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f  tatements are no
ba50: 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20 20  t.  supported.  
ba60: 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
ba70: 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61  IT are not norma
ba80: 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66 6f  lly supported fo
ba90: 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20 20  r [UPDATE] or.  
baa0: 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20  [DELETE] in any 
bab0: 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e 20  context but can 
bac0: 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74  be enabled for t
bad0: 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65  op-level stateme
bae0: 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65 20  nts.  using the 
baf0: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  [SQLITE_ENABLE_U
bb00: 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
bb10: 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  IT] compile-time
bb20: 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65   option.  Howeve
bb30: 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69 6c  r,.  that compil
bb40: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e  e-time option on
bb50: 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74 6f  ly applies to to
bb60: 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45 5d  p-level [UPDATE]
bb70: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20   and [DELETE].  
bb80: 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20  statements, not 
bb90: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
bba0: 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  LETE] statements
bbb0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
bbc0: 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  .)^.  </p></li>.
bbd0: 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </ul>..<tcl>hd_f
bbe0: 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f  ragment instead_
bbf0: 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53 54  of_trigger {INST
bc00: 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44  EAD OF} {INSTEAD
bc10: 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74 63   OF trigger}</tc
bc20: 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f  l>.<h3>INSTEAD O
bc30: 46 20 74 72 69 67 67 65 72 3c 2f 68 33 3e 0a 0a  F trigger</h3>..
bc40: 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d 61 79  <p>^Triggers may
bc50: 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20 5b   be created on [
bc60: 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c 20  views], as well 
bc70: 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  as ordinary tabl
bc80: 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69 6e  es, by.specifyin
bc90: 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e 20  g INSTEAD OF in 
bca0: 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  the CREATE TRIGG
bcb0: 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e  ER statement. .^
bcc0: 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 4f  If one or more O
bcd0: 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45 4c  N INSERT, ON DEL
bce0: 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54 45  ETE.or ON UPDATE
bcf0: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 64 65   triggers are de
bd00: 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77 2c  fined on a view,
bd10: 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74 20   then it is not 
bd20: 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65 63  an.error to exec
bd30: 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20 44  ute an INSERT, D
bd40: 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
bd50: 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65  statement on the
bd60: 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74 69   view, .respecti
bd70: 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64 2c  vely.  ^Instead,
bd80: 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49 4e  .executing an IN
bd90: 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20  SERT, DELETE or 
bda0: 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76 69  UPDATE on the vi
bdb0: 65 77 20 63 61 75 73 65 73 20 74 68 65 20 61 73  ew causes the as
bdc0: 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65 72  sociated.trigger
bdd0: 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68 65 20  s to fire. ^The 
bde0: 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64 65  real tables unde
bdf0: 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77 20  rlying the view 
be00: 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65 64  are not modified
be10: 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69 62 6c  .(except possibl
be20: 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62 79  y explicitly, by
be30: 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72   a trigger progr
be40: 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f  am).</p>..<p>^No
be50: 74 65 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c  te that the [sql
be60: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20  ite3_changes()] 
be70: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74  and [sqlite3_tot
be80: 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e  al_changes()] in
be90: 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74 20  terfaces.do not 
bea0: 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46  count INSTEAD OF
beb0: 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67 73   trigger firings
bec0: 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e 74  , but the.[count
bed0: 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d  _changes pragma]
bee0: 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53 54   does count INST
bef0: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66  EAD OF trigger f
bf00: 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  iring.</p>..<h3>
bf10: 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  Examples</h3>..<
bf20: 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68 61  p>^(Assuming tha
bf30: 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f 72  t customer recor
bf40: 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ds are stored in
bf50: 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73 22   the "customers"
bf60: 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74   table, and.that
bf70: 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20 61   order records a
bf80: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
bf90: 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65 2c   "orders" table,
bfa0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
bfb0: 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73 20 74  rigger.ensures t
bfc0: 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69 61 74  hat all associat
bfd0: 65 64 20 6f 72 64 65 72 73 20 61 72 65 20 72 65  ed orders are re
bfe0: 64 69 72 65 63 74 65 64 20 77 68 65 6e 20 61 20  directed when a 
bff0: 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67 65 73  customer changes
c000: 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64 64 72  .his or her addr
c010: 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ess:</p>..<tcl>E
c020: 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45 20  xample {.CREATE 
c030: 54 52 49 47 47 45 52 20 75 70 64 61 74 65 5f 63  TRIGGER update_c
c040: 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20  ustomer_address 
c050: 55 50 44 41 54 45 20 4f 46 20 61 64 64 72 65 73  UPDATE OF addres
c060: 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a  s ON customers .
c070: 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50 44 41    BEGIN.    UPDA
c080: 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64  TE orders SET ad
c090: 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64 64 72  dress = new.addr
c0a0: 65 73 73 20 57 48 45 52 45 20 63 75 73 74 6f 6d  ess WHERE custom
c0b0: 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61  er_name = old.na
c0c0: 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63  me;.  END;.}</tc
c0d0: 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 69 73  l>..<p>With this
c0e0: 20 74 72 69 67 67 65 72 20 69 6e 73 74 61 6c 6c   trigger install
c0f0: 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20 74 68  ed, executing th
c100: 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e  e statement:</p>
c110: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
c120: 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72  .UPDATE customer
c130: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
c140: 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45  '1 Main St.' WHE
c150: 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  RE name = 'Jack 
c160: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a  Jones';.}</tcl>.
c170: 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20 66  .<p>causes the f
c180: 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20 61  ollowing to be a
c190: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 65  utomatically exe
c1a0: 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  cuted:</p>..<tcl
c1b0: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
c1c0: 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64 64  E orders SET add
c1d0: 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53  ress = '1 Main S
c1e0: 74 2e 27 20 57 48 45 52 45 20 63 75 73 74 6f 6d  t.' WHERE custom
c1f0: 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  er_name = 'Jack 
c200: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29  Jones';.}</tcl>)
c210: 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
c220: 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72 65  ent undef_before
c230: 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46 4f   {undefined BEFO
c240: 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61 76  RE trigger behav
c250: 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43  ior}</tcl>.<h3>C
c260: 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55  autions On The U
c270: 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72 69  se Of BEFORE tri
c280: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49  ggers</h3>..<p>I
c290: 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41 54  f a BEFORE UPDAT
c2a0: 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c 45  E or BEFORE DELE
c2b0: 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69 66  TE trigger modif
c2c0: 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61  ies or deletes a
c2d0: 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74 6f   row.that was to
c2e0: 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61 74   have been updat
c2f0: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20 74  ed or deleted, t
c300: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
c310: 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e 74  f the subsequent
c320: 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65 74  .update or delet
c330: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  e operation is u
c340: 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74 68  ndefined.  Furth
c350: 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45 46  ermore, if a BEF
c360: 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64 69  ORE trigger.modi
c370: 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
c380: 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20 69  a row, then it i
c390: 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65 74  s undefined whet
c3a0: 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45 52  her or not AFTER
c3b0: 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20 77   triggers.that w
c3c0: 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72 77  ould have otherw
c3d0: 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65  ise run on those
c3e0: 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66 61   rows will in fa
c3f0: 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ct run..</p>..<p
c400: 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 45  >The value of NE
c410: 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65 66  W.rowid is undef
c420: 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52 45  ined in a BEFORE
c430: 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72 20   INSERT trigger 
c440: 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f 77  in which.the row
c450: 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69 63  id is not explic
c460: 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20 69  itly set to an i
c470: 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  nteger.</p>..<p>
c480: 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 62  Because of the b
c490: 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69 62  ehaviors describ
c4a0: 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72 61  ed above, progra
c4b0: 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75 72  mmers are encour
c4c0: 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20 41  aged to.prefer A
c4d0: 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f 76  FTER triggers ov
c4e0: 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67 65  er BEFORE trigge
c4f0: 72 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 68 65  rs.</p>..<h3>The
c500: 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f   RAISE() functio
c510: 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73  n</h3>..<p>^(A s
c520: 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74  pecial SQL funct
c530: 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20  ion RAISE() may 
c540: 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  be used within a
c550: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
c560: 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f 6c  ,)^.with the fol
c570: 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70  lowing syntax</p
c580: 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  > ..<tcl>BubbleD
c590: 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e  iagram raise-fun
c5a0: 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ction</tcl>..<p>
c5b0: 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52 41  ^(When one of RA
c5c0: 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e  ISE(ROLLBACK,...
c5d0: 29 2c 20 52 41 49 53 45 28 41 42 4f 52 54 2c 2e  ), RAISE(ABORT,.
c5e0: 2e 2e 29 20 6f 72 20 52 41 49 53 45 28 46 41 49  ..) or RAISE(FAI
c5f0: 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65 64  L,...).is called
c600: 20 64 75 72 69 6e 67 20 74 72 69 67 67 65 72 2d   during trigger-
c610: 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69 6f  program.executio
c620: 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64  n, the specified
c630: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70   [ON CONFLICT] p
c640: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65 72  rocessing is per
c650: 66 6f 72 6d 65 64 0a 74 68 65 20 63 75 72 72 65  formed.the curre
c660: 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61  nt query termina
c670: 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72 20  tes.)^.An error 
c680: 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f  code of [SQLITE_
c690: 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72  CONSTRAINT] is r
c6a0: 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61  eturned to the a
c6b0: 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e  pplication,.alon
c6c0: 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  g with the speci
c6d0: 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61  fied error messa
c6e0: 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ge.</p>..<p>^Whe
c6f0: 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20  n RAISE(IGNORE) 
c700: 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72  is called, the r
c710: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20  emainder of the 
c720: 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20  current trigger 
c730: 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61  program,.the sta
c740: 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73  tement that caus
c750: 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ed the trigger p
c760: 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
c770: 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71  e and any subseq
c780: 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f  uent.trigger pro
c790: 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64  grams that would
c7a0: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
c7b0: 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65  ted are abandone
c7c0: 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a  d. ^No database.
c7d0: 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c  changes are roll
c7e0: 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68  ed back.  ^If th
c7f0: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  e statement that
c800: 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67   caused the trig
c810: 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65  ger program.to e
c820: 78 65 63 75 74 65 20 69 73 20 69 74 73 65 6c 66  xecute is itself
c830: 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
c840: 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e  er program, then
c850: 20 74 68 61 74 20 74 72 69 67 67 65 72 20 70 72   that trigger pr
c860: 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78  ogram.resumes ex
c870: 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62  ecution at the b
c880: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
c890: 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a  next step..</p>.
c8a0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
c8b0: 74 20 74 65 6d 70 74 72 69 67 20 7b 54 45 4d 50  t temptrig {TEMP
c8c0: 20 74 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f 6e   triggers on non
c8d0: 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f 74  -TEMP tables}</t
c8e0: 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72 69  cl>.<h3>TEMP Tri
c8f0: 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d  ggers on Non-TEM
c900: 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  P Tables</h3>..<
c910: 70 3e 5e 28 41 20 74 72 69 67 67 65 72 20 6e 6f  p>^(A trigger no
c920: 72 6d 61 6c 6c 79 20 65 78 69 73 74 73 20 69 6e  rmally exists in
c930: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
c940: 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  se as the table 
c950: 6e 61 6d 65 64 0a 61 66 74 65 72 20 74 68 65 20  named.after the 
c960: 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e 20  "ON" keyword in 
c970: 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  the CREATE TRIGG
c980: 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 45  ER statement.  E
c990: 78 63 65 70 74 2c 20 69 74 20 69 73 0a 70 6f 73  xcept, it is.pos
c9a0: 73 69 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20  sible to create 
c9b0: 61 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 6f  a TEMP TRIGGER o
c9c0: 6e 20 61 20 74 61 62 6c 65 20 69 6e 20 61 6e 6f  n a table in ano
c9d0: 74 68 65 72 20 64 61 74 61 62 61 73 65 2e 29 5e  ther database.)^
c9e0: 20 20 0a 53 75 63 68 20 61 20 74 72 69 67 67 65    .Such a trigge
c9f0: 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72 65  r will only fire
ca00: 20 77 68 65 6e 20 63 68 61 6e 67 65 73 0a 61 72   when changes.ar
ca10: 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 74 61  e made to the ta
ca20: 72 67 65 74 20 74 61 62 6c 65 20 62 79 20 74 68  rget table by th
ca30: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 68  e application th
ca40: 61 74 20 64 65 66 69 6e 65 64 20 74 68 65 20 74  at defined the t
ca50: 72 69 67 67 65 72 2e 0a 4f 74 68 65 72 20 61 70  rigger..Other ap
ca60: 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20  plications that 
ca70: 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61 62  modify the datab
ca80: 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  ase will not be 
ca90: 61 62 6c 65 20 74 6f 20 73 65 65 20 74 68 65 0a  able to see the.
caa0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 61 6e 64  TEMP trigger and
cab0: 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72 75   hence cannot ru
cac0: 6e 20 74 68 65 20 74 72 69 67 67 65 72 2e 3c 2f  n the trigger.</
cad0: 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66 69  p>..<p>When defi
cae0: 6e 69 6e 67 20 61 20 54 45 4d 50 20 74 72 69 67  ning a TEMP trig
caf0: 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d  ger on a non-TEM
cb00: 50 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20 69  P table, it is i
cb10: 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65 63  mportant to.spec
cb20: 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65  ify the database
cb30: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f 6e   holding the non
cb40: 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20 20 46 6f  -TEMP table.  Fo
cb50: 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74 68  r example,.in th
cb60: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
cb70: 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 69 6d 70  ement, it is imp
cb80: 6f 72 74 61 6e 74 20 74 6f 20 73 61 79 20 22 6d  ortant to say "m
cb90: 61 69 6e 2e 74 61 62 31 22 20 69 6e 73 74 65 61  ain.tab1" instea
cba0: 64 0a 6f 66 20 6a 75 73 74 20 22 74 61 62 31 22  d.of just "tab1"
cbb0: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
cbc0: 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
cbd0: 54 45 4d 50 20 54 52 49 47 47 45 52 20 65 78 31  TEMP TRIGGER ex1
cbe0: 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e   AFTER INSERT ON
cbf0: 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62   <b>main.</b>tab
cc00: 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72  1 BEGIN ....</pr
cc10: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
cc20: 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f 20 73  .<p>Failure to s
cc30: 70 65 63 69 66 79 20 74 68 65 20 64 61 74 61 62  pecify the datab
cc40: 61 73 65 20 6e 61 6d 65 20 6f 6e 20 74 68 65 20  ase name on the 
cc50: 74 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f 75  target table cou
cc60: 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68 65  ld result.in the
cc70: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 62 65   TEMP trigger be
cc80: 69 6e 67 20 72 65 61 74 74 61 63 68 65 64 20 74  ing reattached t
cc90: 6f 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 74  o a table with t
cca0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e 0a  he same name in.
ccb0: 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  another database
ccc0: 20 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73 63   whenever any sc
ccd0: 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63 75  hema change occu
cce0: 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  rs.</p>..<tcl>.#
ccf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
cd40: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
cd50: 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77  IEW} {createview
cd60: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d  } {{CREATE VIEW}
cd70: 20 76 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 52   view *views}..R
cd80: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
cd90: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69 65  agram create-vie
cda0: 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  w-stmt.</tcl>..<
cdb0: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56 49  p>^The CREATE VI
cdc0: 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67  EW command assig
cdd0: 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70  ns a name to a p
cde0: 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53 45  re-packaged .[SE
cdf0: 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2e  LECT] statement.
ce00: 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65 77   .^Once the view
ce10: 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74 20   is created, it 
ce20: 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74  can be used in t
ce30: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 6f  he FROM clause.o
ce40: 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45 43  f another [SELEC
ce50: 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  T] in place of a
ce60: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70   table name..</p
ce70: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54  >..<p>^If the "T
ce80: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
ce90: 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  RY" keyword occu
cea0: 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43  rs in between "C
ceb0: 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45 57  REATE".and "VIEW
cec0: 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20  " then the view 
ced0: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
cee0: 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20  is only visible 
cef0: 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20 74  to the.process t
cf00: 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20 64  hat opened the d
cf10: 61 74 61 62 61 73 65 20 61 6e 64 20 69 73 20 61  atabase and is a
cf20: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
cf30: 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61  eted when.the da
cf40: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
cf50: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61  .</p>..<p> ^If a
cf60: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
cf70: 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66  me&gt; is specif
cf80: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69  ied, then the vi
cf90: 65 77 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  ew is created in
cfa0: 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61   .the named data
cfb0: 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20  base. ^It is an 
cfc0: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
cfd0: 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61   both a &lt;data
cfe0: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e  base-name&gt;.an
cff0: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
d000: 72 64 20 6f 6e 20 61 20 56 49 45 57 2c 20 75 6e  rd on a VIEW, un
d010: 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74  less the &lt;dat
d020: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
d030: 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f  s "temp"..^If no
d040: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69   database name i
d050: 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64  s specified, and
d060: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
d070: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
d080: 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20 63 72  ,.the VIEW is cr
d090: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69  eated in the mai
d0a0: 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  n database.</p>.
d0b0: 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20  .<p>^You cannot 
d0c0: 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52  [DELETE], [INSER
d0d0: 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
d0e0: 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73 20  a view.  ^Views 
d0f0: 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69  are read-only .i
d100: 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65  n SQLite.  ^Howe
d110: 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73  ver, in many cas
d120: 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61  es you can use a
d130: 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72  n.[INSTEAD OF tr
d140: 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69  igger] on the vi
d150: 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68  ew to accomplish
d160: 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67   .the same thing
d170: 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65  .  ^Views are re
d180: 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65 20  moved .with the 
d190: 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d  [DROP VIEW] comm
d1a0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<tcl>.
d1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d1f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
d200: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
d210: 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63  IRTUAL TABLE} {c
d220: 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52 45  reatevtab} {{CRE
d230: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
d240: 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  E}}..RecursiveBu
d250: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
d260: 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  te-virtual-table
d270: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
d280: 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  >A [virtual tabl
d290: 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61  e] is an interfa
d2a0: 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61  ce to an externa
d2b0: 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d  l storage or com
d2c0: 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20  putation.engine 
d2d0: 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20  that appears to 
d2e0: 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64  be a table but d
d2f0: 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  oes not actually
d300: 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69   store informati
d310: 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  on.in the databa
d320: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
d330: 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75  >In general, you
d340: 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67   can do anything
d350: 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61 6c   with a [virtual
d360: 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61 6e   table] that can
d370: 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e   be done.with an
d380: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c   ordinary table,
d390: 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79 6f   except that ^yo
d3a0: 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20  u cannot create 
d3b0: 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67 67  indices or trigg
d3c0: 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c  ers on a.virtual
d3d0: 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76   table.  ^Some v
d3e0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
d3f0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67  lementations mig
d400: 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69  ht impose additi
d410: 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e  onal.restriction
d420: 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  s.  For example,
d430: 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61   many virtual ta
d440: 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e  bles are read-on
d450: 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
d460: 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26  &lt;module-name&
d470: 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20  gt; is the name 
d480: 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  of an object tha
d490: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65  t implements.the
d4a0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
d4b0: 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65   ^The &lt;module
d4c0: 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62  -name&gt; must b
d4d0: 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74  e registered wit
d4e0: 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61 74  h.the SQLite dat
d4f0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
d500: 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
d510: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d  create_module()]
d520: 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65   or [sqlite3_cre
d530: 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d  ate_module_v2()]
d540: 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e  .prior to issuin
d550: 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  g the CREATE VIR
d560: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
d570: 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c  ment..^The modul
d580: 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20  e takes zero or 
d590: 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72  more comma-separ
d5a0: 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a  ated arguments..
d5b0: 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63  ^The arguments c
d5c0: 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74  an be just about
d5d0: 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e   any text as lon
d5e0: 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c 61  g as it has bala
d5f0: 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73  nced.parentheses
d600: 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  .  The argument 
d610: 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69 63  syntax is suffic
d620: 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74  iently general t
d630: 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74  hat the.argument
d640: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
d650: 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75   appear as [colu
d660: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20  mn definitions] 
d670: 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c  in a traditional
d680: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
d690: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51  statement.  .^SQ
d6a0: 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20  Lite passes the 
d6b0: 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73  module arguments
d6c0: 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65   directly.to the
d6d0: 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b   [xCreate] and [
d6e0: 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64  xConnect] method
d6f0: 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  s of the module 
d700: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77  implementation.w
d710: 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
d720: 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69  pretation.  It i
d730: 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69  s the responsibi
d740: 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75  lity.of the modu
d750: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
d760: 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69  n to parse and i
d770: 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e  nterpret its own
d780: 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a   arguments.</p>.
d790: 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74  .<p>^A virtual t
d7a0: 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65  able is destroye
d7b0: 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69  d using the ordi
d7c0: 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45  nary.[DROP TABLE
d7d0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
d7e0: 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56  ere is no.DROP V
d7f0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d800: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63  tement.</p>..<tc
d810: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
d820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d860: 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45  #.Section DELETE
d870: 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20   delete {DELETE 
d880: 2a 44 45 4c 45 54 45 73 7d 0a 0a 52 65 63 75 72  *DELETEs}..Recur
d890: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
d8a0: 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 0a 3c 2f  m delete-stmt.</
d8b0: 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45 4c  tcl>..<p>The DEL
d8c0: 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f  ETE command remo
d8d0: 76 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f 6d  ves records from
d8e0: 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74   the table ident
d8f0: 69 66 69 65 64 20 62 79 20 74 68 65 0a 20 20 20  ified by the.   
d900: 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61 62  <i>qualified-tab
d910: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c  le-name</i>. ..<
d920: 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45 20  p>^If the WHERE 
d930: 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70 72  clause is not pr
d940: 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72  esent, all recor
d950: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
d960: 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20  are deleted..   
d970: 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75  ^If a WHERE clau
d980: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
d990: 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20  then only those 
d9a0: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
d9b0: 68 65 0a 20 20 20 72 65 73 75 6c 74 20 6f 66 20  he.   result of 
d9c0: 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57  evaluating the W
d9d0: 48 45 52 45 20 63 6c 61 75 73 65 20 61 73 20 61  HERE clause as a
d9e0: 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
d9f0: 73 69 6f 6e 7c 0a 20 20 20 62 6f 6f 6c 65 61 6e  sion|.   boolean
da00: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
da10: 72 75 65 5d 20 61 72 65 20 64 65 6c 65 74 65 64  rue] are deleted
da20: 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69  ...<h3>Restricti
da30: 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53 74  ons on DELETE St
da40: 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20  atements Within 
da50: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f  CREATE TRIGGER</
da60: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h3>..<p>The foll
da70: 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f  owing restrictio
da80: 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c 45  ns apply to DELE
da90: 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  TE statements th
daa0: 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at occur within 
dab0: 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20 61  the.   body of a
dac0: 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
dad0: 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75  ] statement:..<u
dae0: 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  l>.  <li><p>^The
daf0: 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
db00: 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73 20  i> specified as 
db10: 70 61 72 74 20 6f 66 20 61 20 44 45 4c 45 54 45  part of a DELETE
db20: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69   statement withi
db30: 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72 20  n.    a trigger 
db40: 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e 71  body must be unq
db50: 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e 20  ualified.  ^(In 
db60: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
db70: 0a 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73 65  .    <i>database
db80: 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  -name</i><b>.</b
db90: 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  > prefix on the 
dba0: 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e 6f  table name is no
dbb0: 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20 77  t allowed .    w
dbc0: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29  ithin triggers.)
dbd0: 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20  ^ ^If the table 
dbe0: 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
dbf0: 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
dc00: 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20 74   is.    not in t
dc10: 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
dc20: 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20 73 74  , then DELETE st
dc30: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
dc40: 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20 20  the trigger.    
dc50: 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72 61 74  body must operat
dc60: 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74 68  e on tables with
dc70: 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  in the same data
dc80: 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20  base as it. ^If 
dc90: 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 74 6f  the table.    to
dca0: 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
dcb0: 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69  er is attached i
dcc0: 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
dcd0: 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65  tabase, then the
dce0: 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64  .    unqualified
dcf0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
dd00: 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64  le being deleted
dd10: 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20   is resolved in 
dd20: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a  the same way as.
dd30: 20 20 20 20 69 74 20 69 73 20 66 6f 72 20 61 20      it is for a 
dd40: 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
dd50: 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69 6e  ent (by searchin
dd60: 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d 50  g first the TEMP
dd70: 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 0a   database, then.
dd80: 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64 61 74      the main dat
dd90: 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20  abase, then any 
dda0: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20  other databases 
ddb0: 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65  in the order the
ddc0: 79 20 77 65 72 65 0a 20 20 20 20 61 74 74 61 63  y were.    attac
ddd0: 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c 69  hed)..    .  <li
dde0: 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44  ><p>^The INDEXED
ddf0: 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45   BY and NOT INDE
de00: 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20  XED clauses are 
de10: 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 44  not allowed on D
de20: 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74 65 6d  ELETE.    statem
de30: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
de40: 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69  gers.</p>..  <li
de50: 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61  ><p>^The LIMIT a
de60: 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  nd ORDER BY clau
de70: 73 65 73 20 28 64 65 73 63 72 69 62 65 64 20 62  ses (described b
de80: 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75 70 70  elow) are unsupp
de90: 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20 44 45  orted for.    DE
dea0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  LETE statements 
deb0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
dec0: 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e  </p>.</ul>..<h3>
ded0: 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61  Optional LIMIT a
dee0: 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  nd ORDER BY clau
def0: 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49  ses</h3>..<p>^(I
df00: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
df10: 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b 53  iled with the [S
df20: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
df30: 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
df40: 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ].compile-time o
df50: 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ption, then the 
df60: 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45  syntax of the DE
df70: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
df80: 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74 68  s.extended by th
df90: 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70  e addition of op
dfa0: 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20  tional ORDER BY 
dfb0: 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
dfc0: 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  s:)^</p>..<tcl>B
dfd0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c  ubbleDiagram del
dfe0: 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64  ete-stmt-limited
dff0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61  </tcl>..<p>^If a
e000: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
e010: 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c  t has a LIMIT cl
e020: 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75  ause, the maximu
e030: 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  m number of rows
e040: 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 64 65   that.will be de
e050: 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62  leted is found b
e060: 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
e070: 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78   accompanying ex
e080: 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73  pression and cas
e090: 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e  ting.it to an in
e0a0: 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 49 66  teger value. ^If
e0b0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
e0c0: 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  he evaluating th
e0d0: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 63  e LIMIT clause.c
e0e0: 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
e0f0: 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
e100: 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
e110: 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  e, it is an erro
e120: 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76 65 20  r. ^A .negative 
e130: 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73 20 69  LIMIT value is i
e140: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22 6e  nterpreted as "n
e150: 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20 74  o limit". ^(If t
e160: 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
e170: 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20 61 6e  ent .also has an
e180: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
e190: 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c  then it is simil
e1a0: 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61  arly evaluated a
e1b0: 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a 69 6e  nd cast to an.in
e1c0: 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41 67 61  teger value. Aga
e1d0: 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  in, it is an err
e1e0: 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  or if the value 
e1f0: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
e200: 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20 74  ssly.converted t
e210: 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e 20  o an integer.)^ 
e220: 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
e230: 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 6f  OFFSET clause, o
e240: 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65 64  r the calculated
e250: 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69  .integer value i
e260: 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 20  s negative, the 
e270: 65 66 66 65 63 74 69 76 65 20 4f 46 46 53 45 54  effective OFFSET
e280: 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e 0a   value is zero..
e290: 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44 45 4c  .<p>^(If the DEL
e2a0: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
e2b0: 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  s an ORDER BY cl
e2c0: 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72  ause, then all r
e2d0: 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20 0a  ows that would .
e2e0: 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68  be deleted in th
e2f0: 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
e300: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
e310: 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69  e sorted accordi
e320: 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44 45 52  ng to the .ORDER
e330: 20 42 59 2e 20 54 68 65 20 66 69 72 73 74 20 3c   BY. The first <
e340: 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77 68  i>M</i> rows, wh
e350: 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20  ere <i>M</i> is 
e360: 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20  the value found 
e370: 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by.evaluating th
e380: 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  e OFFSET clause 
e390: 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20  expression, are 
e3a0: 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74 68 65  skipped, and the
e3b0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e   following .<i>N
e3c0: 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e 4e  </i>, where <i>N
e3d0: 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75  </i> is the valu
e3e0: 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 65  e of the LIMIT e
e3f0: 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 64  xpression, are d
e400: 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74 68  eleted.)^.^If th
e410: 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
e420: 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20  n <i>N</i> rows 
e430: 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65 72 20  remaining after 
e440: 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46 53 45  taking the OFFSE
e450: 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61 63  T clause.into ac
e460: 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74 68 65  count, or if the
e470: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 65 76   LIMIT clause ev
e480: 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e 65 67  aluated to a neg
e490: 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65  ative value, the
e4a0: 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67 20  n all.remaining 
e4b0: 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65 64  rows are deleted
e4c0: 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44 45  ...<p>^If the DE
e4d0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  LETE statement h
e4e0: 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  as no ORDER BY c
e4f0: 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
e500: 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20  rows that.would 
e510: 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68  be deleted in th
e520: 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
e530: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
e540: 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61  e assembled in a
e550: 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64 65  n.arbitrary orde
e560: 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e  r before applyin
e570: 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  g the LIMIT and 
e580: 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20 74  OFFSET clauses t
e590: 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74 68 65  o determine .the
e5a0: 20 73 75 62 73 65 74 20 74 68 61 74 20 61 72 65   subset that are
e5b0: 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65 74 65   actually delete
e5c0: 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44  d...<p>^(The ORD
e5d0: 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20  ER BY clause on 
e5e0: 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  a DELETE stateme
e5f0: 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  nt is used only 
e600: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
e610: 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74  ch.rows fall wit
e620: 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54  hin the LIMIT. T
e630: 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
e640: 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74  h rows are delet
e650: 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a  ed is arbitrary.
e660: 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75  and is not influ
e670: 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52 44  enced by the ORD
e680: 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a  ER BY clause.)^.
e690: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
e6a0: 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20 7b 74  t truncateopt {t
e6b0: 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
e6c0: 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  tion}</tcl>.<h3>
e6d0: 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70 74  The Truncate Opt
e6e0: 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a  imization</h3>..
e6f0: 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48 45  <p>^When the WHE
e700: 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  RE is omitted fr
e710: 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61 74  om a DELETE stat
e720: 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74 61  ement and the ta
e730: 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74 65  ble.being delete
e740: 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65 72  d has no trigger
e750: 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20 61  s,.SQLite uses a
e760: 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74  n optimization t
e770: 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e 74 69  o erase the enti
e780: 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74  re table content
e790: 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20  .without having 
e7a0: 74 6f 20 76 69 73 69 74 20 65 61 63 68 20 72 6f  to visit each ro
e7b0: 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  w of the table i
e7c0: 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68 69  ndividually..Thi
e7d0: 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70 74  s "truncate" opt
e7e0: 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73 20  imization makes 
e7f0: 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20 6d  the delete run m
e800: 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69 6f  uch faster..Prio
e810: 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65 72  r to SQLite [ver
e820: 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68 65  sion 3.6.5], the
e830: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
e840: 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e  zation.also mean
e850: 74 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69  t that the [sqli
e860: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61  te3_changes()] a
e870: 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61  nd.[sqlite3_tota
e880: 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74  l_changes()] int
e890: 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65 20  erfaces.and the 
e8a0: 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70  [count_changes p
e8b0: 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20  ragma].will not 
e8c0: 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20  actually return 
e8d0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
e8e0: 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54 68  leted rows.  .Th
e8f0: 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62  at problem has b
e900: 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66 20  een fixed as of 
e910: 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e  [version 3.6.5].
e920: 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63 61  ..<p>^The trunca
e930: 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
e940: 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e 74  can be permanent
e950: 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ly disabled for 
e960: 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20 72  all queries.by r
e970: 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69 74  ecompiling.SQLit
e980: 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  e with the [SQLI
e990: 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54 45  TE_OMIT_TRUNCATE
e9a0: 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20 63  _OPTIMIZATION] c
e9b0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69 74  ompile-time swit
e9c0: 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ch.</p>..<p>The 
e9d0: 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
e9e0: 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20 62  ation can also b
e9f0: 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72 75  e disabled at ru
ea00: 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65 20  ntime using.the 
ea10: 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74  [sqlite3_set_aut
ea20: 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65 72  horizer()] inter
ea30: 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61 75  face.  ^If an au
ea40: 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61 63  thorizer callbac
ea50: 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49 54  k.returns [SQLIT
ea60: 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61 6e  E_IGNORE] for an
ea70: 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 5d   [SQLITE_DELETE]
ea80: 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74 68   action code, th
ea90: 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f 70  en.the DELETE op
eaa0: 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f  eration will pro
eab0: 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72 75  ceed but the tru
eac0: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
ead0: 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61 73  on will.be bypas
eae0: 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69 6c  sed and rows wil
eaf0: 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e 65  l be deleted one
eb00: 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74   by one.</p>..<t
eb10: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
eb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb60: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45 54  ###.Section {DET
eb70: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
eb80: 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 52 65  tach *DETACH..Re
eb90: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
eba0: 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d 74  gram detach-stmt
ebb0: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69  .</tcl>..<p>^Thi
ebc0: 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61  s statement deta
ebd0: 63 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e  ches an addition
ebe0: 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  al database conn
ebf0: 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c  ection previousl
ec00: 79 20 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e  y .attached usin
ec10: 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73  g the [ATTACH] s
ec20: 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57 68 65  tatement.  .^Whe
ec30: 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72 65 64  n not in [shared
ec40: 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 0a 69   cache mode], .i
ec50: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f  t is possible to
ec60: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
ec70: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74 74  atabase file att
ec80: 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20 74  ached multiple t
ec90: 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66 66  imes using .diff
eca0: 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e 64  erent names, and
ecb0: 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20 63   detaching one c
ecc0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 66  onnection to a f
ecd0: 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20 74  ile will leave t
ece0: 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61 63  he .others intac
ecf0: 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68 61 72  t.</p>.^In [shar
ed00: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20  ed cache mode], 
ed10: 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61 74  attempting to at
ed20: 74 61 63 68 20 74 68 65 20 73 61 6d 65 20 64 61  tach the same da
ed30: 74 61 62 61 73 65 20 66 69 6c 65 20 6d 6f 72 65  tabase file more
ed40: 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65 73 75 6c  .than once resul
ed50: 74 73 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 0a  ts in an error..
ed60: 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d  .<p>^This statem
ed70: 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ent will fail if
ed80: 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68   SQLite is in th
ed90: 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72  e middle of a tr
eda0: 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  ansaction.</p>..
edb0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
edc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ede0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee00: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
ee10: 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69  ROP INDEX} dropi
ee20: 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45  ndex {{DROP INDE
ee30: 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  X}}..RecursiveBu
ee40: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
ee50: 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63  -index-stmt.</tc
ee60: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
ee70: 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
ee80: 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64 65   removes an inde
ee90: 78 20 61 64 64 65 64 0a 77 69 74 68 20 74 68 65  x added.with the
eea0: 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
eeb0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
eec0: 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65 74  index is complet
eed0: 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  ely removed from
eee0: 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20  .the disk.  The 
eef0: 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f  only way to reco
ef00: 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69 73  ver the index is
ef10: 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a   to reenter the.
ef20: 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45  appropriate [CRE
ef30: 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61  ATE INDEX] comma
ef40: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  nd.</p>..<tcl>.#
ef50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef90: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
efa0: 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42 4c  ction {DROP TABL
efb0: 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b 44  E} droptable {{D
efc0: 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ROP TABLE}}..Rec
efd0: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
efe0: 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73  ram drop-table-s
eff0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
f000: 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73  The DROP TABLE s
f010: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
f020: 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20 77   a table added w
f030: 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45 20  ith the.[CREATE 
f040: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
f050: 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63  .  The name spec
f060: 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61 62  ified is the.tab
f070: 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20 64  le name.  ^The d
f080: 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73 20  ropped table is 
f090: 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76  completely remov
f0a0: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
f0b0: 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e 64  base .schema and
f0c0: 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e 20   the disk file. 
f0d0: 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e   The table can n
f0e0: 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e  ot be recovered.
f0f0: 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73 20    .^All indices 
f100: 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73 73  and triggers.ass
f110: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
f120: 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20   table are also 
f130: 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  deleted.</p>..<p
f140: 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49  >^The optional I
f150: 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  F EXISTS clause 
f160: 73 75 70 70 72 65 73 73 65 73 20 74 68 65 20 65  suppresses the e
f170: 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64 20  rror that would 
f180: 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74 20  normally.result 
f190: 69 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f 65  if the table doe
f1a0: 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70 3e  s not exist.</p>
f1b0: 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67  ..<p>^If [foreig
f1c0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
f1d0: 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 20  s] are enabled, 
f1e0: 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d  a DROP TABLE com
f1f0: 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61 6e  mand performs an
f200: 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45 54  .implicit [DELET
f210: 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  E | DELETE FROM 
f220: 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63 6f 6d  &lt;tbl&gt;] com
f230: 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d 6f  mand before remo
f240: 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20 66  ving the.table f
f250: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
f260: 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74 72   schema. ^Any tr
f270: 69 67 67 65 72 73 20 61 74 74 61 63 68 65 64 20  iggers attached 
f280: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72 65  to the table are
f290: 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68  .dropped from th
f2a0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
f2b0: 61 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d 70  a before the imp
f2c0: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
f2d0: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 0a 69  M &lt;tbl&gt; .i
f2e0: 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20 74  s executed, so t
f2f0: 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65  his cannot cause
f300: 20 61 6e 79 20 74 72 69 67 67 65 72 73 20 74 6f   any triggers to
f310: 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72 61   fire. By contra
f320: 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69 74  st, ^an.implicit
f330: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74   DELETE FROM &lt
f340: 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20 63 61  ;tbl&gt; does ca
f350: 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67 75 72  use any configur
f360: 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  ed.[foreign key 
f370: 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61 6b 65  actions] to take
f380: 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74 68 65   place. .^If the
f390: 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45   implicit DELETE
f3a0: 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74   FROM &lt;tbl&gt
f3b0: 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20 70 61  ; executed.as pa
f3c0: 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41 42  rt of a DROP TAB
f3d0: 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61  LE command viola
f3e0: 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61 74  tes any immediat
f3f0: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
f400: 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65 72  nstraints,.an er
f410: 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
f420: 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73  and the table is
f430: 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e 49   not dropped. ^I
f440: 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74 20  f .the implicit 
f450: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
f460: 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73 20 61  tbl&gt; causes a
f470: 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f 72  ny .deferred for
f480: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
f490: 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61  ints to be viola
f4a0: 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69 6f  ted, and the vio
f4b0: 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65 78  lations still.ex
f4c0: 69 73 74 20 77 68 65 6e 20 74 68 65 20 74 72 61  ist when the tra
f4d0: 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d 6d  nsaction is comm
f4e0: 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72 20  itted, an error 
f4f0: 69 73 20 72 65 74 75 72 6e 65 64 20 61 74 20 74  is returned at t
f500: 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69  he time.of commi
f510: 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  t...<tcl>.######
f520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f560: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
f570: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20   {DROP TRIGGER} 
f580: 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44 52  droptrigger {{DR
f590: 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65  OP TRIGGER}}..Re
f5a0: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
f5b0: 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67 65  gram drop-trigge
f5c0: 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  r-stmt.</tcl>..<
f5d0: 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47  p>^The DROP TRIG
f5e0: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65  GER statement re
f5f0: 6d 6f 76 65 73 20 61 20 74 72 69 67 67 65 72 20  moves a trigger 
f600: 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20 0a  created by the .
f610: 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
f620: 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63   statement. ^Onc
f630: 65 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20 74  e removed, the t
f640: 72 69 67 67 65 72 20 64 65 66 69 6e 69 74 69 6f  rigger definitio
f650: 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70  n is no.longer p
f660: 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 73 71  resent in the sq
f670: 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 6f 72 20  lite_master (or 
f680: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
f690: 65 72 29 20 74 61 62 6c 65 20 61 6e 64 20 69 73  er) table and is
f6a0: 0a 6e 6f 74 20 66 69 72 65 64 20 62 79 20 61 6e  .not fired by an
f6b0: 79 20 73 75 62 73 65 71 75 65 6e 74 20 49 4e 53  y subsequent INS
f6c0: 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
f6d0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
f6e0: 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  ...<p>^Note that
f6f0: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75   triggers are au
f700: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f 70  tomatically drop
f710: 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73  ped when the ass
f720: 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73  ociated table is
f730: 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e  .dropped...<tcl>
f740: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
f750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
f790: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49  Section {DROP VI
f7a0: 45 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b 44  EW} dropview {{D
f7b0: 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63 75  ROP VIEW}}..Recu
f7c0: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
f7d0: 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d  am drop-view-stm
f7e0: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
f7f0: 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74  e DROP VIEW stat
f800: 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20  ement removes a 
f810: 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79 20  view created by 
f820: 74 68 65 20 5b 43 52 45 41 54 45 20 56 49 45 57  the [CREATE VIEW
f830: 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20  ] .  statement. 
f840: 5e 54 68 65 20 76 69 65 77 20 64 65 66 69 6e 69  ^The view defini
f850: 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20  tion is removed 
f860: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
f870: 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20  e schema, but . 
f880: 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20   no actual data 
f890: 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
f8a0: 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73  g base tables is
f8b0: 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e   modified...<p>^
f8c0: 28 54 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f  (The view to dro
f8d0: 70 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  p is identified 
f8e0: 62 79 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65  by the view-name
f8f0: 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20   and optional . 
f900: 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 73   database-name s
f910: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
f920: 20 6f 66 20 74 68 65 20 44 52 4f 50 20 56 49 45   of the DROP VIE
f930: 57 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69  W statement. Thi
f940: 73 20 0a 20 20 72 65 66 65 72 65 6e 63 65 20 69  s .  reference i
f950: 73 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67  s resolved using
f960: 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 70 72   the standard pr
f970: 6f 63 65 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a  ocedure for [obj
f980: 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e  ect resolution].
f990: 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68  )^..<p>.  ^If th
f9a0: 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77  e specified view
f9b0: 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64   cannot be found
f9c0: 20 61 6e 64 20 74 68 65 20 49 46 20 45 58 49 53   and the IF EXIS
f9d0: 54 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  TS clause is not
f9e0: 20 0a 20 20 70 72 65 73 65 6e 74 2c 20 69 74 20   .  present, it 
f9f0: 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66  is an error. ^If
fa00: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
fa10: 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f  iew cannot be fo
fa20: 75 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a 20 20  und and an IF.  
fa30: 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73  EXISTS clause is
fa40: 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
fa50: 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
fa60: 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74  ent, then the st
fa70: 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e  atement.  is a n
fa80: 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  o-op....<tcl>.##
fa90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
faa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fad0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
fae0: 74 69 6f 6e 20 7b 44 61 74 61 62 61 73 65 20 4f  tion {Database O
faf0: 62 6a 65 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c  bject Name Resol
fb00: 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20  ution} {naming} 
fb10: 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74  {{object resolut
fb20: 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  ion}}.</tcl>..<p
fb30: 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 61  >.  In SQLite, a
fb40: 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   database object
fb50: 20 28 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78   (a table, index
fb60: 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76 69 65  , trigger or vie
fb70: 77 29 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  w) is identified
fb80: 0a 20 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  .  by the name o
fb90: 66 20 74 68 65 20 6f 62 6a 65 63 74 20 61 6e 64  f the object and
fba0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
fbb0: 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20 69   database that i
fbc0: 74 20 72 65 73 69 64 65 73 20 69 6e 2e 20 0a 20  t resides in. . 
fbd0: 20 44 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   Database object
fbe0: 73 20 6d 61 79 20 72 65 73 69 64 65 20 69 6e 20  s may reside in 
fbf0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
fc00: 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74 61  e, the temp data
fc10: 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e  base, or in.  an
fc20: 20 5b 41 54 54 41 43 48 7c 61 74 74 61 63 68 65   [ATTACH|attache
fc30: 64 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70  d database]...<p
fc40: 3e 0a 20 20 54 68 65 20 73 79 6e 74 61 78 20 6f  >.  The syntax o
fc50: 66 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c  f the [DROP TABL
fc60: 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d  E], [DROP INDEX]
fc70: 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b  , [DROP VIEW], [
fc80: 44 52 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a 20  DROP TRIGGER],. 
fc90: 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54   [REINDEX], [ALT
fca0: 45 52 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61  ER TABLE] and ma
fcb0: 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64  ny other command
fcc0: 73 20 61 6c 6c 20 70 65 72 6d 69 74 20 74 68 65  s all permit the
fcd0: 20 75 73 65 72 20 74 6f 0a 20 20 73 70 65 63 69   user to.  speci
fce0: 66 79 20 61 20 64 61 74 61 62 61 73 65 20 6f 62  fy a database ob
fcf0: 6a 65 63 74 20 65 69 74 68 65 72 20 62 79 20 69  ject either by i
fd00: 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f  ts name alone, o
fd10: 72 20 62 79 20 61 20 63 6f 6d 62 69 6e 61 74 69  r by a combinati
fd20: 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65  on of.  its name
fd30: 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   and the name of
fd40: 20 69 74 73 20 64 61 74 61 62 61 73 65 2e 20 5e   its database. ^
fd50: 28 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20  (If no database 
fd60: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  is specified as 
fd70: 70 61 72 74 0a 20 20 6f 66 20 74 68 65 20 6f 62  part.  of the ob
fd80: 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20  ject reference, 
fd90: 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72  then SQLite sear
fda0: 63 68 65 73 20 74 68 65 20 6d 61 69 6e 2c 20 74  ches the main, t
fdb0: 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74 74 61  emp and all atta
fdc0: 63 68 65 64 0a 20 20 64 61 74 61 62 61 73 65 73  ched.  databases
fdd0: 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20 77   for an object w
fde0: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
fdf0: 61 6d 65 2e 20 54 68 65 20 74 65 6d 70 20 64 61  ame. The temp da
fe00: 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63 68  tabase is search
fe10: 65 64 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c  ed.  first, foll
fe20: 6f 77 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e  owed by the main
fe30: 20 64 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f   database, follo
fe40: 77 65 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64  wed all attached
fe50: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68   databases in th
fe60: 65 0a 20 20 6f 72 64 65 72 20 74 68 61 74 20 74  e.  order that t
fe70: 68 65 79 20 77 65 72 65 20 61 74 74 61 63 68 65  hey were attache
fe80: 64 2e 20 54 68 65 20 72 65 66 65 72 65 6e 63 65  d. The reference
fe90: 20 72 65 73 6f 6c 76 65 73 20 74 6f 20 74 68 65   resolves to the
fea0: 20 66 69 72 73 74 20 6d 61 74 63 68 0a 20 20 66   first match.  f
feb0: 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d  ound.)^ For exam
fec0: 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20  ple:..<pre>^(.  
fed0: 20 20 20 20 2f 2a 20 41 64 64 20 61 20 74 61 62      /* Add a tab
fee0: 6c 65 20 6e 61 6d 65 64 20 27 74 31 27 20 74 6f  le named 't1' to
fef0: 20 74 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20   the temp, main 
ff00: 61 6e 64 20 61 6e 20 61 74 74 61 63 68 65 64 20  and an attached 
ff10: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20  database */.    
ff20: 20 20 41 54 54 41 43 48 20 27 66 69 6c 65 2e 64    ATTACH 'file.d
ff30: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20  b' AS aux;.     
ff40: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
ff50: 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52  (x, y);.      CR
ff60: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
ff70: 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20  t1(x, y);.      
ff80: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
ff90: 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20  .t1(x, y);..    
ffa0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
ffb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70           /* Drop
ffc0: 20 74 61 62 6c 65 20 69 6e 20 74 65 6d 70 20 64   table in temp d
ffd0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20  atabase */.     
ffe0: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20   DROP TABLE t1; 
fff0: 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20          /* Drop 
10000 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61  table in main da
10010 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  tabase */.      
10020 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20  DROP TABLE t1;  
10030 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74         /* Drop t
10040 61 62 6c 65 20 69 6e 20 61 75 78 20 64 61 74 61  able in aux data
10050 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e  base */.)^</pre>
10060 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64 61  ..<p>.  ^If a da
10070 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73  tabase name is s
10080 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
10090 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 72 65   of an object re
100a0 66 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74  ference, it must
100b0 20 62 65 0a 20 20 65 69 74 68 65 72 20 22 6d 61   be.  either "ma
100c0 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f  in", or "temp" o
100d0 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e  r the name of an
100e0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
100f0 73 65 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72 0a  se. ^Like other.
10100 20 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72    SQL identifier
10110 73 2c 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  s, database name
10120 73 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e  s are case-insen
10130 73 69 74 69 76 65 2e 20 5e 49 66 20 61 20 64 61  sitive. ^If a da
10140 74 61 62 61 73 65 20 6e 61 6d 65 0a 20 20 69 73  tabase name.  is
10150 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
10160 20 6f 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64 20   only the named 
10170 64 61 74 61 62 61 73 65 20 69 73 20 73 65 61 72  database is sear
10180 63 68 65 64 20 66 6f 72 20 74 68 65 20 6e 61 6d  ched for the nam
10190 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a  ed object...<p>.
101a0 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72 65    Most object re
101b0 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c  ferences may onl
101c0 79 20 72 65 73 6f 6c 76 65 20 74 6f 20 61 20 73  y resolve to a s
101d0 70 65 63 69 66 69 63 20 74 79 70 65 20 6f 66 20  pecific type of 
101e0 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20 20 65 78  object (for.  ex
101f0 61 6d 70 6c 65 20 61 20 72 65 66 65 72 65 6e 63  ample a referenc
10200 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
10210 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73  f a DROP TABLE s
10220 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c  tatement may onl
10230 79 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61  y resolve.  to a
10240 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e   table object, n
10250 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20 74 72 69  ot an index, tri
10260 67 67 65 72 20 6f 72 20 76 69 65 77 29 2e 20 48  gger or view). H
10270 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d 65 20 63  owever in some c
10280 6f 6e 74 65 78 74 73 20 0a 20 20 28 65 2e 67 2e  ontexts .  (e.g.
10290 20 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f   [REINDEX]) an o
102a0 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 20  bject reference 
102b0 6d 61 79 20 62 65 20 72 65 73 6f 6c 76 65 20 74  may be resolve t
102c0 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  o more than one 
102d0 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74  type.  of object
102e0 2e 20 5e 57 68 65 6e 20 73 65 61 72 63 68 69 6e  . ^When searchin
102f0 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
10300 61 73 20 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f  as for a named o
10310 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f  bject, objects o
10320 66 0a 20 20 74 79 70 65 73 20 74 68 61 74 20 63  f.  types that c
10330 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e  annot be used in
10340 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of 
10350 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 61 72  the reference ar
10360 65 20 61 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f  e always .  igno
10370 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  red...<tcl>.####
10380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
103c0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
103d0 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61  on EXPLAIN expla
103e0 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62  in EXPLAIN..Bubb
103f0 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74  leDiagram sql-st
10400 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41  mt.</tcl>..<p>^A
10410 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
10420 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20  can be preceded 
10430 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22  by the keyword "
10440 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74  EXPLAIN" or.by t
10450 68 65 20 70 68 72 61 73 65 20 22 45 58 50 4c 41  he phrase "EXPLA
10460 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20  IN QUERY PLAN". 
10470 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63   ^Either modific
10480 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ation causes the
10490 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74  .SQL statement t
104a0 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71 75  o behave as a qu
104b0 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72  ery and to retur
104c0 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
104d0 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20  out.how the SQL 
104e0 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
104f0 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69 66  have operated if
10500 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79   the EXPLAIN key
10510 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68  word or.phrase h
10520 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e  ad been omitted.
10530 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74  </p>..<p>The out
10540 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e  put from EXPLAIN
10550 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45   and EXPLAIN QUE
10560 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e  RY PLAN is inten
10570 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74  ded for.interact
10580 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64  ive analysis and
10590 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67   troubleshooting
105a0 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61   only.  The deta
105b0 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70  ils of the .outp
105c0 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75  ut format are su
105d0 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20  bject to change 
105e0 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65  from one release
105f0 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68   of SQLite to th
10600 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74  e next..Applicat
10610 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20  ions should not 
10620 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45  use EXPLAIN or E
10630 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
10640 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78  N since.their ex
10650 61 63 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  act behavior is 
10660 76 61 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c  variable and onl
10670 79 20 70 61 72 74 69 61 6c 6c 79 20 64 6f 63 75  y partially docu
10680 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mented.</p>..<p>
10690 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49  ^When the EXPLAI
106a0 4e 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72  N keyword appear
106b0 73 20 62 79 20 69 74 73 65 6c 66 20 69 74 20 63  s by itself it c
106c0 61 75 73 65 73 20 74 68 65 20 73 74 61 74 65 6d  auses the statem
106d0 65 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73  ent.to behave as
106e0 20 61 20 71 75 65 72 79 20 74 68 61 74 20 72 65   a query that re
106f0 74 75 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e  turns the sequen
10700 63 65 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20  ce of .[virtual 
10710 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74  machine instruct
10720 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20 68  ions] it would h
10730 61 76 65 20 75 73 65 64 20 74 6f 20 65 78 65 63  ave used to exec
10740 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  ute the command 
10750 68 61 64 0a 74 68 65 20 45 58 50 4c 41 49 4e 20  had.the EXPLAIN 
10760 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e  keyword not been
10770 20 70 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20   present. ^When 
10780 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
10790 59 20 50 4c 41 4e 20 70 68 72 61 73 65 0a 61 70  Y PLAN phrase.ap
107a0 70 65 61 72 73 2c 20 74 68 65 20 73 74 61 74 65  pears, the state
107b0 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 68 69 67  ment returns hig
107c0 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74  h-level informat
107d0 69 6f 6e 20 72 65 67 61 72 64 69 6e 67 20 74 68  ion regarding th
107e0 65 20 71 75 65 72 79 0a 70 6c 61 6e 20 74 68 61  e query.plan tha
107f0 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65  t would have bee
10800 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20 45 58 50  n used...The EXP
10810 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
10820 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73 63 72  command is descr
10830 69 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69  ibed in .[explai
10840 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72  n query plan|mor
10850 65 20 64 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a  e detail here]..
10860 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
10870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
108a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
108b0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78  #####.Section ex
108c0 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a  pression expr {*
108d0 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72  expression {expr
108e0 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a  ession syntax}}.
108f0 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
10900 44 69 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f 74  Diagram expr.</t
10910 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63  cl>..<p>This sec
10920 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e  tion is differen
10930 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72  t from the other
10940 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73  s.  Most other s
10950 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20  ections of.this 
10960 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61  document talks a
10970 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61  bout a particula
10980 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20  r SQL command.  
10990 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65  This section doe
109a0 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74  s.not talk about
109b0 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f   a standalone co
109c0 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20  mmand but about 
109d0 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68  "expressions" wh
109e0 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70  ich are .subcomp
109f0 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f  onents of most o
10a00 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f  ther commands.</
10a10 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
10a20 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20 7b  ment binaryops {
10a30 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73  binary operators
10a40 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72  }</tcl>.<h3>Oper
10a50 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28  ators</h3>.<p>^(
10a60 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61 6e  SQLite understan
10a70 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ds the following
10a80 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
10a90 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d  s, in order from
10aa0 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77 65  .highest to lowe
10ab0 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f  st precedence:</
10ac0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
10ad0 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
10ae0 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
10af0 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a  >||.*    /    %.
10b00 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20  +    -.&lt;&lt; 
10b10 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61 6d    &gt;&gt;   &am
10b20 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20  p;    |.&lt;    
10b30 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20 20  &lt;=   &gt;    
10b40 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20  &gt;=.=    ==   
10b50 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20 20  !=   &lt;&gt;   
10b60 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e 4f  </big>IS   IS NO
10b70 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20 20  T   IN   LIKE   
10b80 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20 52  GLOB   MATCH   R
10b90 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c  EGEXP.AND   .OR<
10ba0 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62  /font>.</pre></b
10bb0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
10bc0 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e 61  >^(Supported una
10bd0 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74  ry prefix operat
10be0 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f  ors are these:</
10bf0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
10c00 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
10c10 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
10c20 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20 20  >-    +    ~    
10c30 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e  NOT</big></font>
10c40 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
10c50 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  ote>)^..<tcl>hd_
10c60 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74 65  fragment collate
10c70 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65 72  op {COLLATE oper
10c80 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  ator}</tcl>.<p>^
10c90 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  The COLLATE oper
10ca0 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79 20  ator is a unary 
10cb0 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72  postfix.operator
10cc0 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61 20   that assigns a 
10cd0 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  [collating seque
10ce0 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72 65  nce] to an expre
10cf0 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c  ssion..^The COLL
10d00 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61 73  ATE operator has
10d10 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65 64   a higher preced
10d20 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72 65  ence (binds more
10d30 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20 61   tightly) than a
10d40 6e 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ny.binary operat
10d50 6f 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72 79  or and any unary
10d60 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72   prefix operator
10d70 20 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43 4f   except "~"..(CO
10d80 4c 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61 72  LLATE and "~" ar
10d90 65 20 61 73 73 6f 63 69 61 74 69 76 65 20 73 6f  e associative so
10da0 20 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20 6f   their binding o
10db0 72 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61  rder does not ma
10dc0 74 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c  tter.).^The coll
10dd0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 73  ating sequence s
10de0 65 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54  et by the COLLAT
10df0 45 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72 72  E operator overr
10e00 69 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74 69  ides the.collati
10e10 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 74 65  ng sequence dete
10e20 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43 4f  rmined by the CO
10e30 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
10e40 61 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20  a table.[column 
10e50 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65  definition]..See
10e60 20 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67 20   the [collating 
10e70 73 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69 6c  sequence| detail
10e80 65 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f 6e  ed discussion on
10e90 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10ea0 6e 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64 61  nces].in the [da
10eb0 74 61 74 79 70 65 20 7c 20 44 61 74 61 74 79 70  tatype | Datatyp
10ec0 65 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64 6f  e In SQLite3] do
10ed0 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69 74  cument for addit
10ee0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
10ef0 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  n..</p>..<tcl>hd
10f00 5f 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65 20  _puts ".<p>^The 
10f10 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 5b  unary operator [
10f20 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20 61  Operator +] is a
10f30 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61 6e   no-op.  ^It can
10f40 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20 73   be applied.to s
10f50 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73 2c  trings, numbers,
10f60 20 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20 61   blobs or NULL a
10f70 6e 64 20 69 74 20 61 6c 77 61 79 73 20 72 65 74  nd it always ret
10f80 75 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77 69  urns a result.wi
10f90 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  th the same valu
10fa0 65 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64  e as the operand
10fb0 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70  .</p>"</tcl>..<p
10fc0 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72 65  >Note that there
10fd0 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74 69   are two variati
10fe0 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c  ons of the equal
10ff0 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73  s and not equals
11000 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45 71  .operators.  ^Eq
11010 75 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74 68  uals can be eith
11020 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75 74  er..<tcl>.hd_put
11030 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20  s "[Operator =] 
11040 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d  or [Operator ==]
11050 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c  ..^The non-equal
11060 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62  s operator can b
11070 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61 74  e either.[Operat
11080 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61  or !=] or [Opera
11090 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e  tor {&lt;&gt;}].
110a0 0a 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20  .^The [Operator 
110b0 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ||] operator is 
110c0 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20  \"concatenate\" 
110d0 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74  - it joins toget
110e0 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72 69  her.the two stri
110f0 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72 61  ngs of its opera
11100 6e 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61 74  nds..^The operat
11110 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20  or [Operator %] 
11120 6f 75 74 70 75 74 73 20 74 68 65 20 76 61 6c 75  outputs the valu
11130 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a 6f  e of its left .o
11140 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74  perand modulo it
11150 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e  s right operand.
11160 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65  </p>..<p>^The re
11170 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61  sult of any bina
11180 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20 65  ry operator is e
11190 69 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63 20  ither a numeric 
111a0 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20  value or .NULL, 
111b0 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20 5b  except for the [
111c0 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e  Operator ||] con
111d0 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61  catenation opera
111e0 74 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79 73  tor which always
111f0 20 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65   .evaluates to e
11200 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
11210 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e 22  text value.</p>"
11220 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 69  ..hd_fragment {i
11230 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65 72  sisnot} {IS oper
11240 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f 70  ator} {IS NOT op
11250 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74 73  erator}..hd_puts
11260 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72 61   "<p>^The [Opera
11270 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65  tor IS] and [Ope
11280 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20  rator {IS NOT}] 
11290 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a 6c  operators work.l
112a0 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d  ike [Operator =]
112b0 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 21   and [Operator !
112c0 3d 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20 6f  =] except when o
112d0 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74 68  ne or both of th
112e0 65 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  e.operands are N
112f0 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63 61  ULL. ^In this ca
11300 73 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65 72  se, if both oper
11310 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74  ands are NULL, t
11320 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61  hen the.IS opera
11330 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f  tor evaluates to
11340 20 31 20 28 74 72 75 65 29 20 61 6e 64 20 74 68   1 (true) and th
11350 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f  e IS NOT operato
11360 72 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20 30  r evaluates.to 0
11370 20 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f 6e   (false). ^If on
11380 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  e operand is NUL
11390 4c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72 20  L and the other 
113a0 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68 65  is not, then the
113b0 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61  .IS operator eva
113c0 6c 75 61 74 65 73 20 74 6f 20 30 20 28 66 61 6c  luates to 0 (fal
113d0 73 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e  se) and the IS N
113e0 4f 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20 31  OT operator is 1
113f0 20 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73 20   (true)..^It is 
11400 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f 72  not possible for
11410 20 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f 54   an IS or IS NOT
11420 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 65   expression to e
11430 76 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c 2e  valuate to NULL.
11440 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70 65  .^Operators [Ope
11450 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f  rator IS] and [O
11460 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d  perator {IS NOT}
11470 5d 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  ] have the same 
11480 0a 70 72 65 63 65 64 65 6e 63 65 20 61 73 20 5b  .precedence as [
11490 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c  Operator =]."..<
114a0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
114b0 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61  litvalue {litera
114c0 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c  l value}</tcl>.<
114d0 68 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65  h3>Literal Value
114e0 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e 41 20 6c 69  s</h3>.<p>.^A li
114f0 74 65 72 61 6c 20 76 61 6c 75 65 20 69 73 20 61  teral value is a
11500 20 63 6f 6e 73 74 61 6e 74 20 6f 66 20 73 6f 6d   constant of som
11510 65 20 6b 69 6e 64 2e 0a 5e 4c 69 74 65 72 61 6c  e kind..^Literal
11520 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 69   values may be i
11530 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61 74 69 6e  ntegers, floatin
11540 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2c  g point numbers,
11550 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42 73 2c   strings,.BLOBs,
11560 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f 70 3e 0a 0a   or NULLs.</p>..
11570 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66 6f  <p>The syntax fo
11580 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20 66 6c  r integer and fl
11590 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74  oating point lit
115a0 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69 76  erals (collectiv
115b0 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69 74  ely."numeric lit
115c0 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f 77 6e  erals") is shown
115d0 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   by the followin
115e0 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a  g diagram:</p>..
115f0 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
11600 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65 72  am numeric-liter
11610 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28  al</tcl>..<p>.^(
11620 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c 69 74  If a numeric lit
11630 65 72 61 6c 20 68 61 73 20 61 20 64 65 63 69 6d  eral has a decim
11640 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20 65  al point or an e
11650 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c  xponentiation.cl
11660 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20 69 73  ause, then it is
11670 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
11680 74 20 6c 69 74 65 72 61 6c 2e 20 20 4f 74 68 65  t literal.  Othe
11690 72 77 69 73 65 20 69 73 20 69 74 20 69 73 20 61  rwise is it is a
116a0 6e 20 0a 69 6e 74 65 67 65 72 20 6c 69 74 65 72  n .integer liter
116b0 61 6c 2e 29 5e 20 20 5e 54 68 65 20 22 45 22 20  al.)^  ^The "E" 
116c0 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20 62  character that b
116d0 65 67 69 6e 73 20 74 68 65 20 65 78 70 6f 6e 65  egins the expone
116e0 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65 20  ntiation.clause 
116f0 6f 66 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  of a floating po
11700 69 6e 74 20 6c 69 74 65 72 61 6c 20 63 61 6e 20  int literal can 
11710 62 65 20 65 69 74 68 65 72 20 75 70 70 65 72 20  be either upper 
11720 6f 72 20 6c 6f 77 65 72 20 63 61 73 65 2e 0a 5e  or lower case..^
11730 28 54 68 65 20 22 2e 22 20 63 68 61 72 61 63 74  (The "." charact
11740 65 72 20 69 73 20 61 6c 77 61 79 73 20 75 73 65  er is always use
11750 64 20 0a 61 73 20 74 68 65 20 64 65 63 69 6d 61  d .as the decima
11760 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20 69 66 20  l point even if 
11770 74 68 65 20 6c 6f 63 61 6c 65 20 73 65 74 74 69  the locale setti
11780 6e 67 20 73 70 65 63 69 66 69 65 73 20 22 2c 22  ng specifies ","
11790 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c 65 20 2d   for.this role -
117a0 20 74 68 65 20 75 73 65 20 6f 66 20 22 2c 22 20   the use of "," 
117b0 66 6f 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20  for the decimal 
117c0 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72 65 73 75  point would resu
117d0 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74 69 63 20  lt in.syntactic 
117e0 61 6d 62 69 67 75 69 74 79 2e 29 5e 3c 2f 70 3e  ambiguity.)^</p>
117f0 0a 0a 3c 70 3e 20 5e 41 20 73 74 72 69 6e 67 20  ..<p> ^A string 
11800 63 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72 6d  constant is form
11810 65 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67 20  ed by enclosing 
11820 74 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73 69  the.string in si
11830 6e 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29 2e  ngle quotes (').
11840 20 20 5e 41 20 73 69 6e 67 6c 65 20 71 75 6f 74    ^A single quot
11850 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 74 72  e within the str
11860 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f 64  ing can.be encod
11870 65 64 20 62 79 20 70 75 74 74 69 6e 67 20 74 77  ed by putting tw
11880 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  o single quotes 
11890 69 6e 20 61 20 72 6f 77 20 2d 20 61 73 20 69 6e  in a row - as in
118a0 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c 65   Pascal..C-style
118b0 20 65 73 63 61 70 65 73 20 75 73 69 6e 67 20 74   escapes using t
118c0 68 65 20 62 61 63 6b 73 6c 61 73 68 20 63 68 61  he backslash cha
118d0 72 61 63 74 65 72 20 61 72 65 20 6e 6f 74 20 73  racter are not s
118e0 75 70 70 6f 72 74 65 64 20 62 65 63 61 75 73 65  upported because
118f0 0a 74 68 65 79 20 61 72 65 20 6e 6f 74 20 73 74  .they are not st
11900 61 6e 64 61 72 64 20 53 51 4c 2e 0a 5e 42 4c 4f  andard SQL..^BLO
11910 42 20 6c 69 74 65 72 61 6c 73 20 61 72 65 20 73  B literals are s
11920 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20 63  tring literals c
11930 6f 6e 74 61 69 6e 69 6e 67 20 68 65 78 61 64 65  ontaining hexade
11940 63 69 6d 61 6c 20 64 61 74 61 20 61 6e 64 0a 70  cimal data and.p
11950 72 65 63 65 64 65 64 20 62 79 20 61 20 73 69 6e  receded by a sin
11960 67 6c 65 20 22 78 22 20 6f 72 20 22 58 22 20 63  gle "x" or "X" c
11970 68 61 72 61 63 74 65 72 2e 20 20 5e 28 46 6f 72  haracter.  ^(For
11980 20 65 78 61 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c   example:</p>..<
11990 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
119a0 0a 58 27 35 33 35 31 34 43 36 39 37 34 36 35 27  .X'53514C697465'
119b0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
119c0 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c  ote>)^..<p>.^A l
119d0 69 74 65 72 61 6c 20 76 61 6c 75 65 20 63 61 6e  iteral value can
119e0 20 61 6c 73 6f 20 62 65 20 74 68 65 20 74 6f 6b   also be the tok
119f0 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a  en "NULL"..</p>.
11a00 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
11a10 74 20 76 61 72 70 61 72 61 6d 20 70 61 72 61 6d  t varparam param
11a20 65 74 65 72 20 70 61 72 61 6d 65 74 65 72 73 20  eter parameters 
11a30 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72  {bound parameter
11a40 7d 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  } {bound paramet
11a50 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50  ers}</tcl>.<h3>P
11a60 61 72 61 6d 65 74 65 72 73 3c 2f 68 33 3e 0a 3c  arameters</h3>.<
11a70 70 3e 0a 41 20 22 76 61 72 69 61 62 6c 65 22 20  p>.A "variable" 
11a80 6f 72 20 22 70 61 72 61 6d 65 74 65 72 22 20 74  or "parameter" t
11a90 6f 6b 65 6e 0a 73 70 65 63 69 66 69 65 73 20 61  oken.specifies a
11aa0 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e 20   placeholder in 
11ab0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 66  the expression f
11ac0 6f 72 20 61 20 0a 76 61 6c 75 65 20 74 68 61 74  or a .value that
11ad0 20 69 73 20 66 69 6c 6c 65 64 20 69 6e 20 61 74   is filled in at
11ae0 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74   runtime using t
11af0 68 65 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64  he.[sqlite3_bind
11b00 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65  _blob() | sqlite
11b10 33 5f 62 69 6e 64 28 29 5d 20 66 61 6d 69 6c 79  3_bind()] family
11b20 20 6f 66 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66   of C/C++ interf
11b30 61 63 65 73 2e 0a 50 61 72 61 6d 65 74 65 72 73  aces..Parameters
11b40 20 63 61 6e 20 74 61 6b 65 20 73 65 76 65 72 61   can take severa
11b50 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c  l forms:.</p>..<
11b60 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
11b70 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  le>.<tr>.<td ali
11b80 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
11b90 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e  n="top"><b>?</b>
11ba0 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c  <i>NNN</i></td><
11bb0 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
11bc0 74 64 3e 0a 3c 74 64 3e 5e 28 41 20 71 75 65 73  td>.<td>^(A ques
11bd0 74 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77  tion mark follow
11be0 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 3c  ed by a number <
11bf0 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20  i>NNN</i> holds 
11c00 61 20 73 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e  a spot for the.N
11c10 4e 4e 2d 74 68 20 70 61 72 61 6d 65 74 65 72 2e  NN-th parameter.
11c20 20 20 4e 4e 4e 20 6d 75 73 74 20 62 65 20 62 65    NNN must be be
11c30 74 77 65 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c  tween 1 and [SQL
11c40 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
11c50 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64  _NUMBER].)^.</td
11c60 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
11c70 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
11c80 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f  align="top"><b>?
11c90 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </b></td><td wid
11ca0 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
11cb0 64 3e 5e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61  d>^A question ma
11cc0 72 6b 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66  rk that is not f
11cd0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d  ollowed by a num
11ce0 62 65 72 20 63 72 65 61 74 65 73 20 61 20 70 61  ber creates a pa
11cf0 72 61 6d 65 74 65 72 0a 77 69 74 68 20 61 20 6e  rameter.with a n
11d00 75 6d 62 65 72 20 6f 6e 65 20 67 72 65 61 74 65  umber one greate
11d10 72 20 74 68 61 6e 20 74 68 65 20 6c 61 72 67 65  r than the large
11d20 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  st parameter num
11d30 62 65 72 20 61 6c 72 65 61 64 79 20 61 73 73 69  ber already assi
11d40 67 6e 65 64 2e 0a 5e 49 66 20 74 68 69 73 20 6d  gned..^If this m
11d50 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74  eans the paramet
11d60 65 72 20 6e 75 6d 62 65 72 20 69 73 20 67 72 65  er number is gre
11d70 61 74 65 72 20 74 68 61 6e 0a 5b 53 51 4c 49 54  ater than.[SQLIT
11d80 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
11d90 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 20 61 6e  UMBER], it is an
11da0 20 65 72 72 6f 72 2e 0a 3c 2f 74 64 3e 0a 3c 2f   error..</td>.</
11db0 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
11dc0 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
11dd0 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e  n="top"><b>:</b>
11de0 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
11df0 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
11e00 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f  /td>.<td>^A colo
11e10 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  n followed by an
11e20 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
11e30 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f   holds a spot fo
11e40 72 20 61 20 0a 5b 73 71 6c 69 74 65 33 5f 62 69  r a .[sqlite3_bi
11e50 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
11e60 65 7c 6e 61 6d 65 64 20 70 61 72 61 6d 65 74 65  e|named paramete
11e70 72 5d 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65  r] with the name
11e80 20 3a 41 41 41 41 2e 20 20 0a 5e 28 4e 61 6d 65   :AAAA.  .^(Name
11e90 64 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  d parameters are
11ea0 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e 20   also numbered. 
11eb0 54 68 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67  The number assig
11ec0 6e 65 64 20 69 73 20 6f 6e 65 20 67 72 65 61 74  ned is one great
11ed0 65 72 20 74 68 61 6e 0a 74 68 65 20 6c 61 72 67  er than.the larg
11ee0 65 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75  est parameter nu
11ef0 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61 73 73  mber already ass
11f00 69 67 6e 65 64 2e 29 5e 20 5e 49 66 20 74 68 69  igned.)^ ^If thi
11f10 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61  s means the para
11f20 6d 65 74 65 72 0a 77 6f 75 6c 64 20 62 65 20 61  meter.would be a
11f30 73 73 69 67 6e 65 64 20 61 20 6e 75 6d 62 65 72  ssigned a number
11f40 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 5b 53   greater than [S
11f50 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
11f60 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69  LE_NUMBER], it i
11f70 73 0a 61 6e 20 65 72 72 6f 72 2e 20 54 6f 20 61  s.an error. To a
11f80 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20  void confusion, 
11f90 69 74 20 69 73 20 62 65 73 74 20 74 6f 20 61 76  it is best to av
11fa0 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64  oid mixing named
11fb0 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 0a 70 61   and numbered.pa
11fc0 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c  rameters.</td>.<
11fd0 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
11fe0 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
11ff0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62  gn="top"><b>@</b
12000 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
12010 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
12020 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61  </td>.<td>^An "a
12030 74 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65 78  t" sign works ex
12040 61 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c  actly like a col
12050 6f 6e 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  on, except that 
12060 74 68 65 20 6e 61 6d 65 20 6f 66 0a 74 68 65 20  the name of.the 
12070 70 61 72 61 6d 65 74 65 72 20 63 72 65 61 74 65  parameter create
12080 64 20 69 73 20 40 41 41 41 41 2e 3c 2f 74 64 3e  d is @AAAA.</td>
12090 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
120a0 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
120b0 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c  lign="top"><b>$<
120c0 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f  /b><i>AAAA</i></
120d0 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
120e0 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 64  "></td>.<td>^A d
120f0 6f 6c 6c 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f  ollar-sign follo
12100 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69  wed by an identi
12110 66 69 65 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68  fier name also h
12120 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20  olds a spot for 
12130 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74 65  a named.paramete
12140 72 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20  r with the name 
12150 24 41 41 41 41 2e 20 20 5e 28 54 68 65 20 69 64  $AAAA.  ^(The id
12160 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 69 6e  entifier name in
12170 20 74 68 69 73 20 63 61 73 65 20 63 61 6e 20 69   this case can i
12180 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f  nclude.one or mo
12190 72 65 20 6f 63 63 75 72 72 65 6e 63 65 73 20 6f  re occurrences o
121a0 66 20 22 3a 3a 22 20 61 6e 64 20 61 20 73 75 66  f "::" and a suf
121b0 66 69 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  fix enclosed in 
121c0 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69  "(...)" containi
121d0 6e 67 0a 61 6e 79 20 74 65 78 74 20 61 74 20 61  ng.any text at a
121e0 6c 6c 2e 29 5e 20 20 54 68 69 73 20 73 79 6e 74  ll.)^  This synt
121f0 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d 20 6f  ax is the form o
12200 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  f a variable nam
12210 65 20 69 6e 20 74 68 65 0a 5b 68 74 74 70 3a 2f  e in the.[http:/
12220 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 20 7c 20 54  /www.tcl.tk/ | T
12230 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c  cl programming l
12240 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65 20 70  anguage].  The p
12250 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69 73 20  resence.of this 
12260 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73 20 66  syntax results f
12270 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68 61  rom the fact tha
12280 74 20 53 51 4c 69 74 65 20 69 73 20 72 65 61 6c  t SQLite is real
12290 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e  ly a .[Tcl exten
122a0 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73 20 65  sion] that has e
122b0 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68 65 20  scaped into the 
122c0 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  wild.</td>.</tr>
122d0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
122e0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72  kquote>..<p>^Par
122f0 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72 65  ameters that are
12300 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 76 61   not assigned va
12310 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69  lues using.[sqli
12320 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20  te3_bind_blob() 
12330 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29  | sqlite3_bind()
12340 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a 61 73  ] are treated.as
12350 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   NULL.</p>..<p>^
12360 54 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 72 61  The maximum para
12370 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73 20  meter number is 
12380 73 65 74 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  set at compile-t
12390 69 6d 65 20 62 79 0a 74 68 65 20 5b 53 51 4c 49  ime by.the [SQLI
123a0 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
123b0 4e 55 4d 42 45 52 5d 20 6d 61 63 72 6f 2e 20 20  NUMBER] macro.  
123c0 5e 28 41 6e 20 69 6e 64 69 76 69 64 75 61 6c 20  ^(An individual 
123d0 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  [database connec
123e0 74 69 6f 6e 73 5d 0a 44 20 63 61 6e 20 72 65 64  tions].D can red
123f0 75 63 65 20 69 74 73 20 6d 61 78 69 6d 75 6d 20  uce its maximum 
12400 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
12410 20 62 65 6c 6f 77 20 74 68 65 20 63 6f 6d 70 69   below the compi
12420 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d 75 6d 0a  le-time maximum.
12430 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74  using the [sqlit
12440 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20 5b 53 51  e3_limit](D, [SQ
12450 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41  LITE_LIMIT_VARIA
12460 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e 2e 2e 29  BLE_NUMBER],...)
12470 20 69 6e 74 65 72 66 61 63 65 2e 29 5e 0a 3c 2f   interface.)^.</
12480 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
12490 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b 45 20 45  ment like LIKE E
124a0 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  SCAPE</tcl>.<h3>
124b0 54 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f  The LIKE and GLO
124c0 42 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e  B operators</h3>
124d0 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70  .<p>^The LIKE op
124e0 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70 61  erator does a pa
124f0 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20 63  ttern matching c
12500 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54 68 65 20  omparison. ^The 
12510 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68 65 20 72  operand.to the r
12520 69 67 68 74 20 6f 66 20 74 68 65 20 4c 49 4b 45  ight of the LIKE
12530 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74 61 69   operator contai
12540 6e 73 20 74 68 65 20 70 61 74 74 65 72 6e 20 61  ns the pattern a
12550 6e 64 20 74 68 65 20 6c 65 66 74 20 68 61 6e 64  nd the left hand
12560 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69 6e  .operand contain
12570 73 20 74 68 65 20 73 74 72 69 6e 67 20 74 6f 20  s the string to 
12580 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74 68  match against th
12590 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63 6c  e pattern...<tcl
125a0 3e 68 64 5f 70 75 74 73 20 22 5e 41 20 70 65 72  >hd_puts "^A per
125b0 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22 25  cent symbol (\"%
125c0 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  \") in the LIKE 
125d0 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
125e0 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f 66 20  any.sequence of 
125f0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61  zero or more cha
12600 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73  racters in the s
12610 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75 6e 64 65  tring.  ^An unde
12620 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22 29 20 69  rscore.(\"_\") i
12630 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65  n the LIKE patte
12640 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 20 73  rn matches any s
12650 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20  ingle character 
12660 69 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e 20 20  in the.string.  
12670 5e 28 41 6e 79 20 6f 74 68 65 72 20 63 68 61 72  ^(Any other char
12680 61 63 74 65 72 20 6d 61 74 63 68 65 73 20 69 74  acter matches it
12690 73 65 6c 66 20 6f 72 20 69 74 73 20 6c 6f 77 65  self or its lowe
126a0 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65 71 75  r/upper case.equ
126b0 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20 63 61  ivalent (i.e. ca
126c0 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20 6d  se-insensitive m
126d0 61 74 63 68 69 6e 67 29 2e 29 5e 20 20 28 41 20  atching).)^  (A 
126e0 62 75 67 3a 20 5e 53 51 4c 69 74 65 20 6f 6e 6c  bug: ^SQLite onl
126f0 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75 70  y.understands up
12700 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20 66  per/lower case f
12710 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
12720 65 72 73 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ers by default. 
12730 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61   ^The.LIKE opera
12740 74 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e 73  tor is case sens
12750 69 74 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  itive by default
12760 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 63 68 61   for unicode cha
12770 72 61 63 74 65 72 73 20 74 68 61 74 20 61 72 65  racters that are
12780 0a 62 65 79 6f 6e 64 20 74 68 65 20 41 53 43 49  .beyond the ASCI
12790 49 20 72 61 6e 67 65 2e 20 20 46 6f 72 20 65 78  I range.  For ex
127a0 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78 70 72  ample,.^the expr
127b0 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e 62  ession <b>'a'&nb
127c0 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41 27  sp;LIKE&nbsp;'A'
127d0 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62 75 74  </b>.is TRUE but
127e0 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e 62   <b>'&aelig;'&nb
127f0 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26 41  sp;LIKE&nbsp;'&A
12800 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46 41  Elig;'</b> is FA
12810 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74 63 6c 3e 0a  LSE.)<p>"</tcl>.
12820 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74 69  .<p>^If the opti
12830 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75  onal ESCAPE clau
12840 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  se is present, t
12850 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73 69  hen the expressi
12860 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  on.following the
12870 20 45 53 43 41 50 45 20 6b 65 79 77 6f 72 64 20   ESCAPE keyword 
12880 6d 75 73 74 20 65 76 61 6c 75 61 74 65 20 74 6f  must evaluate to
12890 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69 73   a string consis
128a0 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67 6c 65  ting of.a single
128b0 20 63 68 61 72 61 63 74 65 72 2e 20 5e 54 68 69   character. ^Thi
128c0 73 20 63 68 61 72 61 63 74 65 72 20 6d 61 79 20  s character may 
128d0 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 4c  be used in the L
128e0 49 4b 45 20 70 61 74 74 65 72 6e 0a 74 6f 20 69  IKE pattern.to i
128f0 6e 63 6c 75 64 65 20 6c 69 74 65 72 61 6c 20 70  nclude literal p
12900 65 72 63 65 6e 74 20 6f 72 20 75 6e 64 65 72 73  ercent or unders
12910 63 6f 72 65 20 63 68 61 72 61 63 74 65 72 73 2e  core characters.
12920 20 5e 54 68 65 20 65 73 63 61 70 65 0a 63 68 61   ^The escape.cha
12930 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65 64 20  racter followed 
12940 62 79 20 61 20 70 65 72 63 65 6e 74 20 73 79 6d  by a percent sym
12950 62 6f 6c 20 28 25 29 2c 20 75 6e 64 65 72 73 63  bol (%), undersc
12960 6f 72 65 20 28 5f 29 2c 20 6f 72 20 61 20 73 65  ore (_), or a se
12970 63 6f 6e 64 0a 69 6e 73 74 61 6e 63 65 20 6f 66  cond.instance of
12980 20 74 68 65 20 65 73 63 61 70 65 20 63 68 61 72   the escape char
12990 61 63 74 65 72 20 69 74 73 65 6c 66 20 6d 61 74  acter itself mat
129a0 63 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20 70  ches a.literal p
129b0 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75  ercent symbol, u
129c0 6e 64 65 72 73 63 6f 72 65 2c 20 6f 72 20 61 20  nderscore, or a 
129d0 73 69 6e 67 6c 65 20 65 73 63 61 70 65 20 63 68  single escape ch
129e0 61 72 61 63 74 65 72 2c 0a 72 65 73 70 65 63 74  aracter,.respect
129f0 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65 20  ively...<p>^The 
12a00 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70 65 72 61  infix LIKE opera
12a10 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  tor is implement
12a20 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
12a30 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  e.application-de
12a40 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69  fined SQL functi
12a50 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f  ons [like(<i>Y</
12a60 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72  i>,<i>X</i>)] or
12a70 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c  .[like(<i>Y</i>,
12a80 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69  <i>X</i>,<i>Z</i
12a90 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70  >)]</a>.</p>..<p
12aa0 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61  >^The LIKE opera
12ab0 74 6f 72 20 63 61 6e 20 62 65 20 6d 61 64 65 20  tor can be made 
12ac0 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 75  case sensitive u
12ad0 73 69 6e 67 20 74 68 65 0a 5b 63 61 73 65 5f 73  sing the.[case_s
12ae0 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65 20 70 72  ensitive_like pr
12af0 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  agma].</p>..<tcl
12b00 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 67 6c 6f  >hd_fragment glo
12b10 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e  b GLOB</tcl>.<p>
12b20 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72 61 74  ^The GLOB operat
12b30 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  or is similar to
12b40 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73 20 74   LIKE but uses t
12b50 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67 6c 6f  he Unix.file glo
12b60 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66 6f 72  bbing syntax for
12b70 20 69 74 73 20 77 69 6c 64 63 61 72 64 73 2e 20   its wildcards. 
12b80 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20 69 73 20   ^Also, GLOB is 
12b90 63 61 73 65 0a 73 65 6e 73 69 74 69 76 65 2c 20  case.sensitive, 
12ba0 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20 5e 42  unlike LIKE.  ^B
12bb0 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20 4c 49 4b  oth GLOB and LIK
12bc0 45 20 6d 61 79 20 62 65 20 70 72 65 63 65 64 65  E may be precede
12bd0 64 20 62 79 0a 74 68 65 20 4e 4f 54 20 6b 65 79  d by.the NOT key
12be0 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20 74  word to invert t
12bf0 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65 20  he sense of the 
12c00 74 65 73 74 2e 20 20 5e 54 68 65 20 69 6e 66 69  test.  ^The infi
12c10 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74 6f 72  x GLOB .operator
12c20 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
12c30 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66  by calling the f
12c40 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c 69  unction.[glob(<i
12c50 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29  >Y</i>,<i>X</i>)
12c60 5d 20 61 6e 64 20 63 61 6e 20 62 65 20 6d 6f 64  ] and can be mod
12c70 69 66 69 65 64 20 62 79 20 6f 76 65 72 72 69 64  ified by overrid
12c80 69 6e 67 0a 74 68 61 74 20 66 75 6e 63 74 69 6f  ing.that functio
12c90 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  n.</p>..<tcl>hd_
12ca0 66 72 61 67 6d 65 6e 74 20 72 65 67 65 78 70 20  fragment regexp 
12cb0 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70 3e  REGEXP</tcl>.<p>
12cc0 5e 54 68 65 20 52 45 47 45 58 50 20 6f 70 65 72  ^The REGEXP oper
12cd0 61 74 6f 72 20 69 73 20 61 20 73 70 65 63 69 61  ator is a specia
12ce0 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65  l syntax for the
12cf0 20 72 65 67 65 78 70 28 29 0a 75 73 65 72 20 66   regexp().user f
12d00 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72 65  unction.  ^No re
12d10 67 65 78 70 28 29 20 75 73 65 72 20 66 75 6e 63  gexp() user func
12d20 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
12d30 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64 20 73  by default.and s
12d40 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52 45 47  o use of the REG
12d50 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77 69 6c  EXP operator wil
12d60 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75 6c  l normally resul
12d70 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d 65  t in an.error me
12d80 73 73 61 67 65 2e 20 20 5e 49 66 20 61 6e 20 5b  ssage.  ^If an [
12d90 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
12da0 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ned SQL function
12db0 5d 20 6e 61 6d 65 64 20 22 72 65 67 65 78 70 22  ] named "regexp"
12dc0 0a 69 73 20 61 64 64 65 64 20 61 74 20 72 75 6e  .is added at run
12dd0 2d 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20  -time, then the 
12de0 22 3c 69 3e 58 3c 2f 69 3e 20 52 45 47 45 58 50  "<i>X</i> REGEXP
12df0 20 3c 69 3e 59 3c 2f 69 3e 22 20 6f 70 65 72 61   <i>Y</i>" opera
12e00 74 6f 72 20 77 69 6c 6c 0a 62 65 20 69 6d 70 6c  tor will.be impl
12e10 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 61 6c  emented as a cal
12e20 6c 20 74 6f 20 22 72 65 67 65 78 70 28 3c 69 3e  l to "regexp(<i>
12e30 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 22  Y</i>,<i>X</i>)"
12e40 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
12e50 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41  ragment match MA
12e60 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  TCH</tcl>.<p>^Th
12e70 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72  e MATCH operator
12e80 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79   is a special sy
12e90 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d 61 74  ntax for the mat
12ea0 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69 6f 6e  ch().application
12eb0 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
12ec0 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74  n.  ^The default
12ed0 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f   match() functio
12ee0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
12ef0 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70  .raises an excep
12f00 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20  tion and is not 
12f10 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f  really useful fo
12f20 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42 75 74  r anything..^But
12f30 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20   extensions can 
12f40 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d 61 74  override the mat
12f50 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69  ch() function wi
12f60 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20  th more.helpful 
12f70 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  logic.</p>..<tcl
12f80 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 65 74  >hd_fragment bet
12f90 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63  ween BETWEEN</tc
12fa0 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54 57 45  l>.<h3>The BETWE
12fb0 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e  EN operator</h3>
12fc0 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57 45 45  .<p>^(The BETWEE
12fd0 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 6c 6f  N operator is lo
12fe0 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65  gically equivale
12ff0 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f 66 20  nt to a pair of 
13000 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c 69  comparisons.."<i
13010 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45 45  >x</i> <b>BETWEE
13020 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20 3c  N</b> <i>y</i> <
13030 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f  b>AND</b> <i>z</
13040 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61 6c 65  i>" is .equivale
13050 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69 3e  nt to ."<i>x</i>
13060 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e 79  <b>&gt;=</b><i>y
13070 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20  </i> <b>AND</b> 
13080 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b 3d  <i>x</i><b>&lt;=
13090 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65 78  </b><i>z</i>" ex
130a0 63 65 70 74 0a 74 68 61 74 20 77 69 74 68 20 42  cept.that with B
130b0 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69 3e 78  ETWEEN, the <i>x
130c0 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e 20  </i> expression 
130d0 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61 74 65  is only evaluate
130e0 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65 20 70  d once.)^.^The p
130f0 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74 68 65  recedence of the
13100 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f   BETWEEN operato
13110 72 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  r is the same as
13120 20 74 68 65 20 70 72 65 63 65 64 65 6e 63 65 0a   the precedence.
13130 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c 62 3e  as operators <b>
13140 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 21 3d  ==</b> and <b>!=
13150 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b 45  </b> and <b>LIKE
13160 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70 73 20  </b> and groups 
13170 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 0a 0a  left to right...
13180 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
13190 20 63 61 73 65 20 7b 43 41 53 45 20 65 78 70 72   case {CASE expr
131a0 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68  ession}</tcl>.<h
131b0 33 3e 54 68 65 20 43 41 53 45 20 65 78 70 72 65  3>The CASE expre
131c0 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20  ssion</h3>.<p>A 
131d0 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
131e0 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20 73 69  serves a role si
131f0 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48 45 4e  milar to IF-THEN
13200 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72 0a 70  -ELSE in other.p
13210 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75  rogramming langu
13220 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68 65 20  ages.  ..<p>The 
13230 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65 73 73  optional express
13240 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73 20  ion that occurs 
13250 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 43  in between the C
13260 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e 64 20  ASE keyword and 
13270 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e 20 6b  the.first WHEN k
13280 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c 65 64  eyword is called
13290 20 74 68 65 20 22 62 61 73 65 22 20 65 78 70 72   the "base" expr
132a0 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65 20 61  ession. ^There a
132b0 72 65 20 74 77 6f 20 62 61 73 69 63 20 66 6f 72  re two basic for
132c0 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45 20 65  ms.of the CASE e
132d0 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f 73 65  xpression: those
132e0 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78 70   with a base exp
132f0 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 6f 73  ression and thos
13300 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e 5e  e without...<p>^
13310 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 6f 75  In a CASE withou
13320 74 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73  t a base express
13330 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e 20 65  ion, each WHEN e
13340 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
13350 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65 20 72  luated.and the r
13360 65 73 75 6c 74 20 74 72 65 61 74 65 64 20 61 73  esult treated as
13370 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61 72   a boolean, star
13380 74 69 6e 67 20 77 69 74 68 20 74 68 65 20 6c 65  ting with the le
13390 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e 74 69  ftmost and conti
133a0 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72 69 67  nuing.to the rig
133b0 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20  ht. ^The result 
133c0 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
133d0 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 65 76  ession is the ev
133e0 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  aluation of the 
133f0 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20  THEN.expression 
13400 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
13410 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57 48   to the first WH
13420 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  EN expression th
13430 61 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f 0a  at evaluates to.
13440 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f  true. ^Or, if no
13450 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65  ne of the WHEN e
13460 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
13470 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74 68 65  ate to true, the
13480 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61 6c 75   result of.evalu
13490 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65  ating the ELSE e
134a0 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e  xpression, if an
134b0 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20  y. ^If there is 
134c0 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73 69  no ELSE expressi
134d0 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74  on and.none of t
134e0 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  he WHEN expressi
134f0 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20 74 68  ons are true, th
13500 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c 20 72  en the overall r
13510 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a  esult is NULL...
13520 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73 75 6c  <p>^A NULL resul
13530 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  t is considered 
13540 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76 61 6c  untrue when eval
13550 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65 72 6d  uating WHEN term
13560 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53  s...<p>^In a CAS
13570 45 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78  E with a base ex
13580 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 62 61  pression, the ba
13590 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  se expression is
135a0 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73 74 0a   evaluated just.
135b0 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72 65 73  once and the res
135c0 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65 64 20  ult is compared 
135d0 61 67 61 69 6e 73 74 20 74 68 65 20 65 76 61 6c  against the eval
135e0 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68 20 57  uation of each W
135f0 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f 6e 20  HEN .expression 
13600 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
13610 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20  ht. ^The result 
13620 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
13630 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 0a 65  ession is the .e
13640 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65  valuation of the
13650 20 54 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   THEN expression
13660 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
13670 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57  s to the first W
13680 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20 66  HEN.expression f
13690 6f 72 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  or which the com
136a0 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
136b0 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66   ^Or, if none of
136c0 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72 65 73   the WHEN.expres
136d0 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74  sions evaluate t
136e0 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61 6c 20  o a value equal 
136f0 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70 72  to the base expr
13700 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65 73 75  ession, the resu
13710 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  lt.of evaluating
13720 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73   the ELSE expres
13730 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49  sion, if any. ^I
13740 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45 4c  f there is no EL
13750 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  SE expression an
13760 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48  d.none of the WH
13770 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 70  EN expressions p
13780 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c 74 20  roduce a result 
13790 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61 73  equal to the bas
137a0 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a 74 68  e expression,.th
137b0 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c 74  e overall result
137c0 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57   is NULL...<p>^W
137d0 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 61 20  hen comparing a 
137e0 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
137f0 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e 20 65  against a WHEN e
13800 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 73  xpression, the s
13810 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ame.collating se
13820 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69 74 79  quence, affinity
13830 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64 6c  , and NULL-handl
13840 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c 79 20  ing rules apply 
13850 61 73 20 69 66 20 74 68 65 0a 62 61 73 65 20 65  as if the.base e
13860 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 57 48  xpression and WH
13870 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 72  EN expression ar
13880 65 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 74  e respectively t
13890 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72 69 67  he left- and.rig
138a0 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 73  ht-hand operands
138b0 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62 3e 3d   of an <big><b>=
138c0 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65 72 61  </b></big> opera
138d0 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74 68 65  tor.</p> ^If the
138e0 20 62 61 73 65 20 0a 65 78 70 72 65 73 73 69 6f   base .expressio
138f0 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  n is NULL then t
13900 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
13910 20 43 41 53 45 20 69 73 20 61 6c 77 61 79 73 20   CASE is always 
13920 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66 20 65  the result .of e
13930 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c  valuating the EL
13940 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 66  SE expression if
13950 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72 20 4e   it exists, or N
13960 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73 20 6e  ULL if it does n
13970 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66 6f  ot...<p>^Both fo
13980 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53 45 20  rms of the CASE 
13990 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 20 6c  expression use l
139a0 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d 63 69  azy, or short-ci
139b0 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61 74 69  rcuit, .evaluati
139c0 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 6e  on...<p>^(The on
139d0 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  ly difference be
139e0 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  tween the follow
139f0 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65 78 70  ing two CASE exp
13a00 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 61 74  ressions is that
13a10 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65   .the <i>x</i> e
13a20 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
13a30 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79 20 6f  luated exactly o
13a40 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72 73 74  nce in the first
13a50 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a 6d 69   example but .mi
13a60 67 68 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ght be evaluated
13a70 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20   multiple times 
13a80 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a 0a 0a  in the second:..
13a90 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43 41  <ul><pre>.<li>CA
13aa0 53 45 20 78 20 57 48 45 4e 20 77 31 20 54 48 45  SE x WHEN w1 THE
13ab0 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54 48 45  N r1 WHEN w2 THE
13ac0 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44  N r2 ELSE r3 END
13ad0 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e 20 78  .<li>CASE WHEN x
13ae0 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e  =w1 THEN r1 WHEN
13af0 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20 45 4c   x=w2 THEN r2 EL
13b00 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72 65 3e  SE r3 END.</pre>
13b10 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e 68  </ul>)^...<tcl>h
13b20 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70  d_fragment in_op
13b30 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d 20 7b   {IN operator} {
13b40 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 7d  NOT IN operator}
13b50 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 49  </tcl>.<h3>The I
13b60 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65  N and NOT IN ope
13b70 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
13b80 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49  The IN and NOT I
13b90 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61 6b 65  N operators take
13ba0 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c 61 72   a single scalar
13bb0 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 0a   operand on the.
13bc0 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63 74 6f  left and a vecto
13bd0 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  r operand on the
13be0 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20 62 79   right.formed by
13bf0 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c 69 73   an explicit lis
13c00 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  t of zero or mor
13c10 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62 79 20  e scalars or by 
13c20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71 75 65  a .single subque
13c30 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69  ry..^When the ri
13c40 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  ght operand of a
13c50 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f  n IN or NOT IN o
13c60 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75 62  perator is a sub
13c70 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71 75  query, the.subqu
13c80 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 61 20  ery must have a 
13c90 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20 63 6f  single result co
13ca0 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68 65 20  lumn..^When the 
13cb0 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 69 73  right operand is
13cc0 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c 20 74   an empty set, t
13cd0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 20  he result of IN 
13ce0 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74 68 65  is false and the
13cf0 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20 49  .result of NOT I
13d00 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67 61 72  N is true, regar
13d10 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c 65 66  dless of the lef
13d20 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20 65 76  t operand and ev
13d30 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74 20 6f  en if the.left o
13d40 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a  perand is NULL..
13d50 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20  ^(The result of 
13d60 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
13d70 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65 74 65  operator is dete
13d80 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 66 6f  rmined by the fo
13d90 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78 3a 0a  llowing.matrix:.
13da0 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65  .<center>.<table
13db0 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a   border=1>.<tr>.
13dc0 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64  <th>Left operand
13dd0 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74 68   <br>is NULL.<th
13de0 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20 3c  >Right operand <
13df0 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55 4c 4c  br>contains NULL
13e00 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61  .<th>Right opera
13e10 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65 6d 70  nd <br>is an emp
13e20 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66 74 20  ty set.<th>Left 
13e30 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20 3c 62  operand found <b
13e40 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74 20 6f  r>within right o
13e50 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73 75 6c  perand.<th>Resul
13e60 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70 65 72  t of <br>IN oper
13e70 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c 74 20  ator.<th>Result 
13e80 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f 70  of <br>NOT IN op
13e90 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64 20  erator.<tr>.<td 
13ea0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13eb0 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13ec0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
13ed0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
13ee0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13ef0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
13f00 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64  enter">false.<td
13f10 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13f20 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  true.<tr>.<td al
13f30 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65  ign="center">doe
13f40 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64  s not matter.<td
13f50 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13f60 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
13f70 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c  nter">yes.<td al
13f80 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
13f90 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13fa0 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69  r">false.<td ali
13fb0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65  gn="center">true
13fc0 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
13fd0 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
13fe0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
13ff0 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
14000 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
14010 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
14020 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
14030 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74  align="center">t
14040 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  rue.<td align="c
14050 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 72  enter">false.<tr
14060 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
14070 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
14080 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c  n="center">yes.<
14090 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
140a0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
140b0 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
140c0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
140d0 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  LL.<td align="ce
140e0 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e 0a  nter">NULL.<tr>.
140f0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
14100 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
14110 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
14120 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
14130 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
14140 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
14150 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  r">does not matt
14160 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  er.<td align="ce
14170 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61  nter">NULL.<td a
14180 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
14190 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  LL.</table>.</ce
141a0 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f 74  nter>)^..<p>^Not
141b0 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 61 6c  e that SQLite al
141c0 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e 74 68  lows the parenth
141d0 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 73  esized list of s
141e0 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f 6e 0a  calar values on.
141f0 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73  the right-hand s
14200 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ide of an IN or 
14210 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
14220 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79 20 6c  to be an empty l
14230 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f 74 68  ist but.most oth
14240 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
14250 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
14260 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32 20 73   and the SQL92 s
14270 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 0a  tandard require.
14280 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f 6e 74  the list to cont
14290 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  ain at least one
142a0 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c   element.</p>..<
142b0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
142c0 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f 70  in_op {EXISTS op
142d0 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49  erator} {NOT EXI
142e0 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74  STS operator}</t
142f0 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49 53  cl>.<h3>The EXIS
14300 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e  TS operator</h3>
14310 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53 54 53  ..<p>^The EXISTS
14320 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61 79 73   operator always
14330 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e   evaluates to on
14340 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
14350 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64 20 31   values 0 .and 1
14360 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20  . ^If executing 
14370 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
14380 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64 20 61  ment specified a
14390 73 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  s the right-hand
143a0 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65   .operand of the
143b0 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
143c0 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e   would return on
143d0 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20  e or more rows, 
143e0 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54 53 20  then the.EXISTS 
143f0 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
14400 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65 78 65  es to 1. ^If exe
14410 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43  cuting the SELEC
14420 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e  T would return.n
14430 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74  o rows at all, t
14440 68 65 6e 20 74 68 65 20 45 58 49 53 54 53 20 6f  hen the EXISTS o
14450 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
14460 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68  s to 0. ..<p>^Th
14470 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
14480 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f 77 20  mns in each row 
14490 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
144a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
144b0 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20 74 68  .(if any) and th
144c0 65 20 73 70 65 63 69 66 69 63 20 76 61 6c 75 65  e specific value
144d0 73 20 72 65 74 75 72 6e 65 64 20 68 61 76 65 20  s returned have 
144e0 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65  no effect on the
144f0 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68 65 20   results.of the 
14500 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2e  EXISTS operator.
14510 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c   ^In particular,
14520 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67   rows containing
14530 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
14540 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e 79  .not handled any
14550 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66 72 6f   differently fro
14560 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20 4e  m rows without N
14570 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 68 33  ULL values...<h3
14580 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65 72 69  >Scalar Subqueri
14590 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b  es</h3>..<p>^A [
145a0 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
145b0 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61  t enclosed in pa
145c0 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 61 70  rentheses may ap
145d0 70 65 61 72 20 61 73 20 61 20 73 63 61 6c 61 72  pear as a scalar
145e0 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20 5b 53  .quantity. ^A [S
145f0 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73 20 61  ELECT] used as a
14600 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74 79   scalar quantity
14610 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61 20 72   must return a r
14620 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68 20 61  esult set.with a
14630 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
14640 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74  ^The result of t
14650 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
14660 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
14670 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 69 6e  e.only column in
14680 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 20 72   the first row r
14690 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
146a0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
146b0 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20   ^If the SELECT 
146c0 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74 68 61  .yields more tha
146d0 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f 77  n one result row
146e0 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74 65 72  , all rows after
146f0 20 74 68 65 20 66 69 72 73 74 20 61 72 65 20 69   the first are i
14700 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68 65 20  gnored. ^If.the 
14710 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20 6e 6f  SELECT yields no
14720 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 20   rows, then the 
14730 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65 78 70  value of the exp
14740 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 2e  ression is NULL.
14750 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f 66 20  .^(The LIMIT of 
14760 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65 72  a scalar subquer
14770 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e 0a 41  y is always 1..A
14780 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54 20 76  ny other LIMIT v
14790 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20 74 68  alue given in th
147a0 65 20 53 51 4c 20 74 65 78 74 20 69 73 20 69 67  e SQL text is ig
147b0 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 6c  nored.)^..<p>^Al
147c0 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45 4c 45  l types of [SELE
147d0 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 69  CT] statement, i
147e0 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65 67 61  ncluding aggrega
147f0 74 65 20 61 6e 64 20 5b 63 6f 6d 70 6f 75 6e 64  te and [compound
14800 20 53 45 4c 45 43 54 5d 0a 71 75 65 72 69 65 73   SELECT].queries
14810 20 28 71 75 65 72 69 65 73 20 77 69 74 68 20 6b   (queries with k
14820 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49  eywords like UNI
14830 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61 72  ON or EXCEPT) ar
14840 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61  e allowed as sca
14850 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73 2e 0a  lar.subqueries..
14860 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d  .<h3>Table Colum
14870 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70  n Names</h3>..<p
14880 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  >^A column name 
14890 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68  can be any of th
148a0 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20  e names defined 
148b0 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  in the [CREATE T
148c0 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
148d0 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  or one of the fo
148e0 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20  llowing special 
148f0 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62  identifiers: "<b
14900 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62  >ROWID</b>",."<b
14910 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c  >OID</b>", or "<
14920 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a  b>_ROWID_</b>"..
14930 5e 54 68 65 73 65 20 73 70 65 63 69 61 6c 20 69  ^These special i
14940 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64  dentifiers all d
14950 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71  escribe the.uniq
14960 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28  ue integer key (
14970 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73  the [rowid]) ass
14980 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65  ociated with eve
14990 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79  ry .row of every
149a0 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65   table..^The spe
149b0 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
149c0 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74   only refer to t
149d0 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68  he row key if th
149e0 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
149f0 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20  .statement does 
14a00 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61  not define a rea
14a10 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68  l column with th
14a20 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68  e same name..^Th
14a30 65 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75  e rowid can be u
14a40 73 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72  sed anywhere a r
14a50 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61  egular.column ca
14a60 6e 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  n be used.</p>..
14a70 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73  <p>^A [SELECT] s
14a80 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73  tatement used as
14a90 20 65 69 74 68 65 72 20 61 20 73 63 61 6c 61 72   either a scalar
14aa0 20 73 75 62 71 75 65 72 79 20 6f 72 20 61 73 20   subquery or as 
14ab0 74 68 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20  the .right-hand 
14ac0 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
14ad0 2c 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53  , NOT IN or EXIS
14ae0 54 53 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  TS expression ma
14af0 79 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72  y contain .refer
14b00 65 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73  ences to columns
14b10 20 69 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75   in the outer qu
14b20 65 72 79 2e 20 53 75 63 68 20 61 20 73 75 62 71  ery. Such a subq
14b30 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73  uery is known as
14b40 0a 61 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75  .a correlated su
14b50 62 71 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65  bquery. ^A corre
14b60 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
14b70 73 20 72 65 65 76 61 6c 75 61 74 65 64 20 65 61  s reevaluated ea
14b80 63 68 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75  ch time.its resu
14b90 6c 74 20 69 73 20 72 65 71 75 69 72 65 64 2e 20  lt is required. 
14ba0 5e 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64  ^An uncorrelated
14bb0 20 73 75 62 71 75 65 72 79 20 69 73 20 65 76 61   subquery is eva
14bc0 6c 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65  luated only once
14bd0 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20  .and the result 
14be0 72 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73  reused as necess
14bf0 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ary...<tcl>hd_fr
14c00 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20  agment castexpr 
14c10 7b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  {CAST expression
14c20 7d 20 7b 43 41 53 54 7d 20 7b 63 61 73 74 7d 20  } {CAST} {cast} 
14c30 7b 43 41 53 54 20 6f 70 65 72 61 74 6f 72 7d 3c  {CAST operator}<
14c40 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65  /tcl>.<h3>CAST e
14c50 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a  xpressions</h3>.
14c60 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70 72 65  .<p>A CAST expre
14c70 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
14c80 6d 20 22 43 41 53 54 28 26 6c 74 3b 65 78 70 72  m "CAST(&lt;expr
14c90 26 67 74 3b 20 41 53 20 26 6c 74 3b 74 79 70 65  &gt; AS &lt;type
14ca0 2d 6e 61 6d 65 26 67 74 3b 29 22 0a 69 73 20 75  -name&gt;)".is u
14cb0 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  sed to convert t
14cc0 68 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b  he value of &lt;
14cd0 65 78 70 72 26 67 74 3b 20 74 6f 20 0a 61 20 64  expr&gt; to .a d
14ce0 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72 61 67  ifferent [storag
14cf0 65 20 63 6c 61 73 73 5d 20 73 70 65 63 69 66 69  e class] specifi
14d00 65 64 20 62 79 20 26 6c 74 3b 74 79 70 65 2d 6e  ed by &lt;type-n
14d10 61 6d 65 26 67 74 3b 2e 0a 5e 41 20 43 41 53 54  ame&gt;..^A CAST
14d20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 73   conversion is s
14d30 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 63 6f  imilar to the co
14d40 6e 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61  nversion that ta
14d50 6b 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61  kes.place when a
14d60 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74   [column affinit
14d70 79 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f  y] is applied to
14d80 20 61 20 76 61 6c 75 65 20 65 78 63 65 70 74 20   a value except 
14d90 74 68 61 74 20 77 69 74 68 0a 74 68 65 20 43 41  that with.the CA
14da0 53 54 20 6f 70 65 72 61 74 6f 72 20 74 68 65 20  ST operator the 
14db0 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61 79  conversion alway
14dc0 73 20 74 61 6b 65 73 20 70 6c 61 63 65 20 65 76  s takes place ev
14dd0 65 6e 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72  en if the conver
14de0 73 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20 69  sion.lossy and i
14df0 72 72 65 76 65 72 73 69 62 6c 65 2c 20 77 68 65  rreversible, whe
14e00 72 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66 69  reas column affi
14e10 6e 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67 65  nity only change
14e20 73 20 74 68 65 20 64 61 74 61 20 74 79 70 65 0a  s the data type.
14e30 6f 66 20 61 20 76 61 6c 75 65 20 69 66 20 74 68  of a value if th
14e40 65 20 63 68 61 6e 67 65 20 69 73 20 6c 6f 73 73  e change is loss
14e50 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72 73 69  less and reversi
14e60 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ble...<p>^If the
14e70 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78   value of &lt;ex
14e80 70 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c 20  pr&gt; is NULL, 
14e90 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
14ea0 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70 72  of the CAST.expr
14eb0 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e  ession is also N
14ec0 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ULL. ^Otherwise,
14ed0 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61   the storage cla
14ee0 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ss of the result
14ef0 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62  .is determined b
14f00 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 5b  y applying the [
14f10 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65 72 6d  rules for determ
14f20 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66  ining column aff
14f30 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20 26 6c  inity] to.the &l
14f40 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 2e  t;type-name&gt;.
14f50 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
14f60 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41  1>.<tr>.  <th> A
14f70 66 66 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74  ffinity of &lt;t
14f80 79 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c  ype-name&gt;.  <
14f90 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50  th> Conversion P
14fa0 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20  rocessing.<tr>. 
14fb0 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74   <td> NONE .  <t
14fc0 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61  d> ^Casting a va
14fd0 6c 75 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70  lue to a &lt;typ
14fe0 65 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20  e-name&gt; with 
14ff0 6e 6f 20 61 66 66 69 6e 69 74 79 20 63 61 75 73  no affinity caus
15000 65 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a  es the value to.
15010 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69    be converted i
15020 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61  nto a BLOB.  ^Ca
15030 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20  sting to a BLOB 
15040 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73  consists of firs
15050 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20  t casting.  the 
15060 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e  value to TEXT in
15070 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20   the [encoding] 
15080 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
15090 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e  connection, then
150a0 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  .  interpreting 
150b0 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79  the resulting by
150c0 74 65 20 73 65 71 75 65 6e 63 65 20 61 73 20 61  te sequence as a
150d0 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66   BLOB instead of
150e0 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a   as TEXT...<tr>.
150f0 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74    <td> TEXT.  <t
15100 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c  d> ^To cast a BL
15110 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54  OB value to TEXT
15120 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  , the sequence o
15130 66 20 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b  f bytes that mak
15140 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20  e up the.  BLOB 
15150 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
15160 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75  s text encoded u
15170 73 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  sing the databas
15180 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70  e encoding..  <p
15190 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e  >.   ^Casting an
151a0 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
151b0 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54   value into TEXT
151c0 20 72 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c   renders the val
151d0 75 65 20 61 73 20 69 66 20 76 69 61 20 0a 20 20  ue as if via .  
151e0 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69    [sqlite3_snpri
151f0 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20 74 68  ntf()] except th
15200 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  at the resulting
15210 20 54 45 58 54 20 75 73 65 73 20 74 68 65 20 5b   TEXT uses the [
15220 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20  encoding] of.   
15230 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
15240 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a  nnection...<tr>.
15250 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74    <td> REAL.  <t
15260 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  d> ^When casting
15270 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
15280 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c   a REAL, the val
15290 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76  ue is first conv
152a0 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20  erted to.       
152b0 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70   TEXT..       <p
152c0 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61  >^When casting a
152d0 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52   TEXT value to R
152e0 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74  EAL, the longest
152f0 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78   possible prefix
15300 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20   of.        the 
15310 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
15320 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
15330 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69   a real number i
15340 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
15350 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58  .        the TEX
15360 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  T value and the 
15370 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65  remainder ignore
15380 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20  d. ^Any leading 
15390 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20  spaces in the.  
153a0 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65        TEXT value
153b0 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65   are ignored whe
153c0 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f  n converging fro
153d0 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20  m TEXT to REAL. 
153e0 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a 20 20  ^(If there is.  
153f0 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20        no prefix 
15400 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65  that can be inte
15410 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61  rpreted as a rea
15420 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  l number, the re
15430 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20  sult of the.    
15440 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69      conversion i
15450 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20  s 0.0.)^..<tr>. 
15460 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20   <td> INTEGER.  
15470 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69  <td> ^When casti
15480 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20  ng a BLOB value 
15490 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20  to INTEGER, the 
154a0 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63  value is first c
154b0 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20  onverted to.    
154c0 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20      TEXT..      
154d0 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e   <p>^When castin
154e0 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74  g a TEXT value t
154f0 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c  o INTEGER, the l
15500 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  ongest possible 
15510 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20  prefix of.      
15520 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74    the value that
15530 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
15540 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
15550 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72  r number is extr
15560 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20  acted from.     
15570 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75     the TEXT valu
15580 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
15590 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e  der ignored. ^An
155a0 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73  y leading spaces
155b0 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20   in the.        
155c0 54 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20  TEXT value when 
155d0 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20  converting from 
155e0 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20  TEXT to INTEGER 
155f0 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66  are ignored. ^If
15600 20 74 68 65 72 65 0a 20 20 20 20 20 20 20 20 69   there.        i
15610 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74  s no prefix that
15620 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
15630 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
15640 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  r number, the re
15650 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20  sult.        of 
15660 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
15670 73 20 30 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e  s 0...      <p>^
15680 41 20 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c  A cast of a REAL
15690 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49   value into an I
156a0 4e 54 45 47 45 52 20 72 65 73 75 6c 74 73 20 69  NTEGER results i
156b0 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20  n the integer.  
156c0 20 20 20 20 62 65 74 77 65 65 6e 20 74 68 65 20      between the 
156d0 52 45 41 4c 20 76 61 6c 75 65 20 61 6e 64 20 7a  REAL value and z
156e0 65 72 6f 20 74 68 61 74 20 69 73 20 63 6c 6f 73  ero that is clos
156f0 65 73 74 20 74 6f 20 74 68 65 20 52 45 41 4c 20  est to the REAL 
15700 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49 66  value..      ^If
15710 20 61 20 52 45 41 4c 20 69 73 20 67 72 65 61 74   a REAL is great
15720 65 72 20 74 68 61 6e 20 74 68 65 20 67 72 65 61  er than the grea
15730 74 65 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69  test possible si
15740 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67  gned.      integ
15750 65 72 20 28 2b 39 32 32 33 33 37 32 30 33 36 38  er (+92233720368
15760 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
15770 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
15780 20 67 72 65 61 74 65 73 74 20 70 6f 73 73 69 62   greatest possib
15790 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20  le.      signed 
157a0 69 6e 74 65 67 65 72 20 61 6e 64 20 69 66 20 74  integer and if t
157b0 68 65 20 52 45 41 4c 20 69 73 20 6c 65 73 73 20  he REAL is less 
157c0 74 68 61 6e 20 74 68 65 20 6c 65 61 73 74 20 70  than the least p
157d0 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20  ossible signed. 
157e0 20 20 20 20 20 69 6e 74 65 67 65 72 20 28 2d 39       integer (-9
157f0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
15800 30 38 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  08) then the res
15810 75 6c 74 20 69 73 20 74 68 65 20 6c 65 61 73 74  ult is the least
15820 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20   possible.      
15830 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a  signed integer..
15840 0a 20 20 20 20 20 20 3c 70 3e 50 72 69 6f 72 20  .      <p>Prior 
15850 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  to SQLite versio
15860 6e 20 33 2e 38 2e 32 2c 20 63 61 73 74 69 6e 67  n 3.8.2, casting
15870 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20 67 72   a REAL value gr
15880 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20 20 20  eater than.     
15890 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37   +92233720368547
158a0 37 35 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e 20  75807.0 into an 
158b0 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74 65 64  integer resulted
158c0 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65 67   in the most neg
158d0 61 74 69 76 65 0a 20 20 20 20 20 20 69 6e 74 65  ative.      inte
158e0 67 65 72 2c 20 2d 39 32 32 33 33 37 32 30 33 36  ger, -9223372036
158f0 38 35 34 37 37 35 38 30 38 2e 20 20 54 68 69 73  854775808.  This
15900 20 62 65 68 61 76 69 6f 72 20 77 61 73 20 6d 65   behavior was me
15910 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65 20 74  ant to emulate t
15920 68 65 0a 20 20 20 20 20 20 62 65 68 61 76 69 6f  he.      behavio
15930 72 20 6f 66 20 78 38 36 2f 78 36 34 20 68 61 72  r of x86/x64 har
15940 64 77 61 72 65 20 77 68 65 6e 20 64 6f 69 6e 67  dware when doing
15950 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
15960 63 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  cast...<tr>.  <t
15970 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64  d> NUMERIC.  <td
15980 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58  > ^Casting a TEX
15990 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20  T or BLOB value 
159a0 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72  into NUMERIC fir
159b0 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64  st does a forced
159c0 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  .   conversion i
159d0 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65  nto REAL but the
159e0 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72  n further conver
159f0 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  ts the result in
15a00 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20  to INTEGER if.  
15a10 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
15a20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d   conversion from
15a30 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52   REAL to INTEGER
15a40 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64   is lossless and
15a50 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20   reversible..   
15a60 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
15a70 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69   context in SQLi
15a80 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d  te where the NUM
15a90 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52  ERIC and INTEGER
15aa0 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20   [affinities].  
15ab0 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e   behave differen
15ac0 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73  tly..   <p> ^Cas
15ad0 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49  ting a REAL or I
15ae0 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20  NTEGER value to 
15af0 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d  NUMERIC is a no-
15b00 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65  op, even if a re
15b10 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c  al.   value coul
15b20 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  d be losslessly 
15b30 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
15b40 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a  integer...</tr>.
15b50 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e  .</table>..<p>^N
15b60 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73  ote that the res
15b70 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67  ult from casting
15b80 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61   any non-BLOB va
15b90 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42  lue into a .BLOB
15ba0 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
15bb0 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
15bc0 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
15bd0 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75   a non-BLOB valu
15be0 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  e.may be differe
15bf0 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  nt depending on 
15c00 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61  whether the data
15c10 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20  base [encoding] 
15c20 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36  is UTF-8,.UTF-16
15c30 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e  be, or UTF-16le.
15c40 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
15c50 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20  ent booleanexpr 
15c60 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  {boolean express
15c70 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42  ion}</tcl>.<h3>B
15c80 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f  oolean Expressio
15c90 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ns</h3>..<p>The 
15ca0 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61  SQL language fea
15cb0 74 75 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f  tures several co
15cc0 6e 74 65 78 74 73 20 77 68 65 72 65 20 61 6e 20  ntexts where an 
15cd0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65  expression is .e
15ce0 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
15cf0 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65   result converte
15d00 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28  d to a boolean (
15d10 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76  true or false) v
15d20 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74  alue. These.cont
15d30 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c  exts are:..  <ul
15d40 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57  >.    <li> the W
15d50 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61  HERE clause of a
15d60 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20   SELECT, UPDATE 
15d70 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  or DELETE statem
15d80 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
15d90 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  e ON or USING cl
15da0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69  ause of a join i
15db0 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
15dc0 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
15dd0 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
15de0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
15df0 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
15e00 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
15e10 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67   of an SQL trigg
15e20 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e  er, and.    <li>
15e30 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
15e40 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73   or clauses of s
15e50 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65 73 73  ome CASE express
15e60 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c  ions..  </ul>..<
15e70 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74  p>^(To convert t
15e80 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e  he results of an
15e90 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20   SQL expression 
15ea0 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  to a boolean val
15eb0 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74  ue, SQLite.first
15ec0 20 63 61 73 74 73 20 74 68 65 20 72 65 73 75 6c   casts the resul
15ed0 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76  t to a NUMERIC v
15ee0 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65  alue in the same
15ef0 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54   way as a .[CAST
15f00 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20   expression]. A 
15f10 4e 55 4c 4c 20 6f 72 20 7a 65 72 6f 20 76 61 6c  NULL or zero val
15f20 75 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75  ue (integer valu
15f30 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75  e 0 or real valu
15f40 65 20 30 2e 30 29 20 69 73 0a 63 6f 6e 73 69 64  e 0.0) is.consid
15f50 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65  ered to be false
15f60 2e 20 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  . All other valu
15f70 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
15f80 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28  d true.)^..<p>^(
15f90 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
15fa0 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e   values NULL, 0.
15fb0 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20  0, 0, 'english' 
15fc0 61 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20  and '0' are all 
15fd0 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65  considered.to be
15fe0 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75   false.)^ ^(Valu
15ff0 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20  es 1, 1.0, 0.1, 
16000 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69  -0.1 and '1engli
16010 73 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72  sh' are consider
16020 65 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29  ed to .be true.)
16030 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73  ^..<h3>Functions
16040 3c 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b  </h3>.<p>^Both [
16050 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d  corefunc|simple]
16060 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67   and [aggfunc|ag
16070 67 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f  gregate] functio
16080 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ns are supported
16090 2e 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74  ..(For presentat
160a0 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69  ion purposes, si
160b0 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  mple functions a
160c0 72 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69  re further subdi
160d0 76 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65  vided into.[core
160e0 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63  func | core func
160f0 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65  tions] and [date
16100 66 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65  func | date-time
16110 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41   functions].).^A
16120 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
16130 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
16140 61 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  any expression. 
16150 20 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f   ^Simple functio
16160 6e 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75  ns return.a resu
16170 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62  lt immediately b
16180 61 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e  ased on their in
16190 70 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74  puts.  ^Aggregat
161a0 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20  e functions.may 
161b0 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20  only be used in 
161c0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
161d0 6e 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  nt.  ^Aggregate 
161e0 66 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74  functions comput
161f0 65 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61  e.their result a
16200 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f  cross all rows o
16210 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
16220 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
16230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16270 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
16280 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69  ion {Core Functi
16290 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a  ons} corefunc {*
162a0 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66  corefunc}.proc f
162b0 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b  uncdef {syntax k
162c0 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a  eywords desc} {.
162d0 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d    hd_puts {<tr>}
162e0 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
162f0 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69  \s+} [string tri
16300 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20  m $syntax] {<br 
16310 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  />} syntax.  reg
16320 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a  sub -all {\(([^*
16330 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20  )]+)\)} $syntax 
16340 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79  {(<i>\1</i>)} sy
16350 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61  ntax.  regsub -a
16360 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b  ll {,} $syntax {
16370 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78  </i>,<i>} syntax
16380 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
16390 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24  <i>\.\.\.</i>} $
163a0 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e  syntax {...} syn
163b0 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20 22 3c  tax.  hd_puts "<
163c0 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c  td valign=\"top\
163d0 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74 5c  " align=\"right\
163e0 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c 22 3e  " width=\"120\">
163f0 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68  ".  if {[llength
16400 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20   $keywords]==0} 
16410 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61  {.    regexp {[a
16420 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e  -z_]+} $syntax n
16430 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d  ame.    hd_fragm
16440 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65  ent $name *$name
16450 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20   "${name}() SQL 
16460 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c  function".  } el
16470 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61  se {.    set fra
16480 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b  gname [lindex $k
16490 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72  eywords 0].    r
164a0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d  egsub -all {[^a-
164b0 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d  z]} $fragname {}
164c0 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64   fragname.    hd
164d0 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e  _fragment $fragn
164e0 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f  ame.    eval hd_
164f0 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67  keywords [string
16500 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b   map {\n { }} $k
16510 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68  eywords].  }.  h
16520 64 5f 70 75 74 73 20 22 24 73 79 6e 74 61 78 3c  d_puts "$syntax<
16530 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74 73 20  /td>".  hd_puts 
16540 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  {<td valign="top
16550 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65  ">}.  hd_resolve
16560 20 24 64 65 73 63 0a 20 20 68 64 5f 70 75 74 73   $desc.  hd_puts
16570 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a   {</td></tr>}.}.
16580 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63  </tcl>..<p>The c
16590 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68  ore functions sh
165a0 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76  own below are av
165b0 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
165c0 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c  lt. .[datefunc |
165d0 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69 6d 65   Date &amp; Time
165e0 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 0a   functions] and.
165f0 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72 65  [aggfunc | aggre
16600 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20  gate functions] 
16610 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73  are documented s
16620 65 70 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61  eparately.  An.a
16630 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64  pplication may d
16640 65 66 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c  efine additional
16650 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74  .functions writt
16660 65 6e 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65  en in C and adde
16670 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
16680 65 20 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74  e engine using.t
16690 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  he [sqlite3_crea
166a0 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41  te_function()] A
166b0 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  PI.</p>..<table 
166c0 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
166d0 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66  ding=10>.<tcl>.f
166e0 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29 7d 20  uncdef {abs(X)} 
166f0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62 73 28  {} {.  ^The abs(
16700 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
16710 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75 74 65  rns the absolute
16720 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6e 75   value of the nu
16730 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65 6e 74  meric.  argument
16740 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72 65 74   X.  ^Abs(X) ret
16750 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58 20 69  urns NULL if X i
16760 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41 62 73  s NULL. .  ^(Abs
16770 28 58 29 20 72 65 74 75 72 6e 20 30 2e 30 20 69  (X) return 0.0 i
16780 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20  f X is a string 
16790 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61 74 20 63  or blob.  that c
167a0 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
167b0 65 64 20 74 6f 20 61 20 6e 75 6d 65 72 69 63 20  ed to a numeric 
167c0 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20 58 20  value.)^  ^If X 
167d0 69 73 20 74 68 65 20 0a 20 20 69 6e 74 65 67 65  is the .  intege
167e0 72 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  r -9223372036854
167f0 37 37 35 38 30 38 20 74 68 65 6e 20 61 62 73 28  775808 then abs(
16800 58 29 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74  X) throws an int
16810 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20  eger overflow.  
16820 65 72 72 6f 72 20 73 69 6e 63 65 20 74 68 65 72  error since ther
16830 65 20 69 73 20 6e 6f 20 65 71 75 69 76 61 6c 65  e is no equivale
16840 6e 74 20 70 6f 73 69 74 69 76 65 20 36 34 2d 62  nt positive 64-b
16850 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e  it two complemen
16860 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63  t value..}..func
16870 64 65 66 20 7b 63 68 61 6e 67 65 73 28 29 7d 20  def {changes()} 
16880 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e  {} {.  ^The chan
16890 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ges() function r
168a0 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
168b0 72 20 6f 66 20 64 61 74 61 62 61 73 65 20 72 6f  r of database ro
168c0 77 73 20 74 68 61 74 20 77 65 72 65 20 63 68 61  ws that were cha
168d0 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73 65 72 74  nged.  or insert
168e0 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79  ed or deleted by
168f0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
16900 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53  ly completed INS
16910 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f  ERT, DELETE,.  o
16920 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
16930 6e 74 2c 20 65 78 63 6c 75 73 69 76 65 20 6f 66  nt, exclusive of
16940 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c   statements in l
16950 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72 69 67 67  ower-level trigg
16960 65 72 73 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e  ers..  ^The chan
16970 67 65 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ges() SQL functi
16980 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
16990 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69  around the [sqli
169a0 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20  te3_changes()]. 
169b0 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20   C/C++ function 
169c0 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77  and hence follow
169d0 73 20 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73  s the same rules
169e0 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68   for counting ch
169f0 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65  anges..}..funcde
16a00 66 20 7b 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e  f {char(X1,X2,..
16a10 2e 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28  .,XN)} {} {.  ^(
16a20 54 68 65 20 63 68 61 72 28 58 31 2c 58 32 2c 2e  The char(X1,X2,.
16a30 2e 2e 2c 58 4e 29 20 66 75 6e 63 74 69 6f 6e 20  ..,XN) function 
16a40 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
16a50 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 63 68 61   composed of cha
16a60 72 61 63 74 65 72 73 20 68 61 76 69 6e 67 20 74  racters having t
16a70 68 65 0a 20 20 20 75 6e 69 63 6f 64 65 20 63 6f  he.   unicode co
16a80 64 65 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20  de point values 
16a90 6f 66 20 69 6e 74 65 67 65 72 73 20 58 31 20 74  of integers X1 t
16aa0 68 72 6f 75 67 68 20 58 4e 2c 20 72 65 73 70 65  hrough XN, respe
16ab0 63 74 69 76 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75  ctively.)^.}..fu
16ac0 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28  ncdef {coalesce(
16ad0 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20  X,Y,...)} {} {. 
16ae0 20 5e 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29   ^The coalesce()
16af0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
16b00 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20  s a copy of its 
16b10 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61  first non-NULL a
16b20 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55  rgument, or.  NU
16b30 4c 4c 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65  LL if all argume
16b40 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e  nts are NULL.  ^
16b50 43 6f 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20  Coalesce() must 
16b60 68 61 76 65 20 61 74 20 6c 65 61 73 74 20 0a 20  have at least . 
16b70 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a   2 arguments..}.
16b80 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58  .funcdef {glob(X
16b90 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
16ba0 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74   glob(X,Y) funct
16bb0 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
16bc0 74 20 74 6f 20 74 68 65 0a 20 20 65 78 70 72 65  t to the.  expre
16bd0 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42  ssion "<b>Y GLOB
16be0 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20   X</b>"..  Note 
16bf0 74 68 61 74 20 74 68 65 20 58 20 61 6e 64 20 59  that the X and Y
16c00 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 72   arguments are r
16c10 65 76 65 72 73 65 64 20 69 6e 20 74 68 65 20 67  eversed in the g
16c20 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  lob() function. 
16c30 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65   relative to the
16c40 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70   infix [GLOB] op
16c50 65 72 61 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68  erator..  ^If th
16c60 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
16c70 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e  e_function()] in
16c80 74 65 72 66 61 63 65 20 69 73 20 75 73 65 64 20  terface is used 
16c90 74 6f 0a 20 20 6f 76 65 72 72 69 64 65 20 74 68  to.  override th
16ca0 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63  e glob(X,Y) func
16cb0 74 69 6f 6e 20 77 69 74 68 20 61 6e 20 61 6c 74  tion with an alt
16cc0 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65  ernative impleme
16cd0 6e 74 61 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74  ntation then.  t
16ce0 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74  he [GLOB] operat
16cf0 6f 72 20 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74  or will invoke t
16d00 68 65 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69  he alternative i
16d10 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d  mplementation..}
16d20 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c  ..funcdef {ifnul
16d30 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  l(X,Y)} {} {.  ^
16d40 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e  The ifnull() fun
16d50 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
16d60 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72 73  copy of its firs
16d70 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d  t non-NULL argum
16d80 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69  ent, or.  NULL i
16d90 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73  f both arguments
16da0 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e   are NULL.  ^Ifn
16db0 75 6c 6c 28 29 20 6d 75 73 74 20 68 61 76 65 20  ull() must have 
16dc0 65 78 61 63 74 6c 79 20 32 20 61 72 67 75 6d 65  exactly 2 argume
16dd0 6e 74 73 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75  nts..  ^The ifnu
16de0 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  ll() function is
16df0 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b   equivalent to [
16e00 63 6f 61 6c 65 73 63 65 28 29 5d 20 77 69 74 68  coalesce()] with
16e10 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a   two arguments..
16e20 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 6e 73 74  }..funcdef {inst
16e30 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  r(X,Y)} {} {.  ^
16e40 54 68 65 20 69 6e 73 74 72 28 58 2c 59 29 20 66  The instr(X,Y) f
16e50 75 6e 63 74 69 6f 6e 20 66 69 6e 64 73 20 74 68  unction finds th
16e60 65 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e  e first occurren
16e70 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20 77  ce of string Y w
16e80 69 74 68 69 6e 20 0a 20 20 73 74 72 69 6e 67 20  ithin .  string 
16e90 58 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  X and returns th
16ea0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 72 69 6f  e number of prio
16eb0 72 20 63 68 61 72 61 63 74 65 72 73 20 70 6c 75  r characters plu
16ec0 73 20 31 2c 20 6f 72 20 30 20 69 66 0a 20 20 59  s 1, or 0 if.  Y
16ed0 20 69 73 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e   is nowhere foun
16ee0 64 20 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 4f  d within X..  ^O
16ef0 72 2c 20 69 66 20 58 20 61 6e 64 20 59 20 61 72  r, if X and Y ar
16f00 65 20 62 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68  e both BLOBs, th
16f10 65 6e 20 69 6e 73 74 72 28 58 2c 59 29 20 72 65  en instr(X,Y) re
16f20 74 75 72 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65  turns one.  more
16f30 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72   than the number
16f40 20 62 79 74 65 73 20 70 72 69 6f 72 20 74 6f 20   bytes prior to 
16f50 74 68 65 20 66 69 72 73 74 20 6f 63 63 75 72 72  the first occurr
16f60 65 6e 63 65 20 6f 66 20 59 2c 20 6f 72 20 30 20  ence of Y, or 0 
16f70 69 66 0a 20 20 59 20 64 6f 65 73 20 6e 6f 74 20  if.  Y does not 
16f80 6f 63 63 75 72 20 61 6e 79 77 68 65 72 65 20 77  occur anywhere w
16f90 69 74 68 69 6e 20 58 2e 0a 20 20 5e 49 66 20 62  ithin X..  ^If b
16fa0 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 58 20  oth arguments X 
16fb0 61 6e 64 20 59 20 74 6f 20 69 6e 73 74 72 28 58  and Y to instr(X
16fc0 2c 59 29 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c  ,Y) are non-NULL
16fd0 20 61 6e 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f   and are not BLO
16fe0 42 73 0a 20 20 74 68 65 6e 20 62 6f 74 68 20 61  Bs.  then both a
16ff0 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  re interpreted a
17000 73 20 73 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66  s strings..  ^If
17010 20 65 69 74 68 65 72 20 58 20 6f 72 20 59 20 61   either X or Y a
17020 72 65 20 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72  re NULL in instr
17030 28 58 2c 59 29 20 74 68 65 6e 20 74 68 65 20 72  (X,Y) then the r
17040 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d  esult is NULL..}
17050 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65 78 28 58  ..funcdef {hex(X
17060 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68  )} {} {.  ^The h
17070 65 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e  ex() function in
17080 74 65 72 70 72 65 74 73 20 69 74 73 20 61 72 67  terprets its arg
17090 75 6d 65 6e 74 20 61 73 20 61 20 42 4c 4f 42 20  ument as a BLOB 
170a0 61 6e 64 20 72 65 74 75 72 6e 73 0a 20 20 61 20  and returns.  a 
170b0 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73 20  string which is 
170c0 74 68 65 20 75 70 70 65 72 2d 63 61 73 65 20 68  the upper-case h
170d0 65 78 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65  exadecimal rende
170e0 72 69 6e 67 20 6f 66 20 74 68 65 20 63 6f 6e 74  ring of the cont
170f0 65 6e 74 20 6f 66 0a 20 20 74 68 61 74 20 62 6c  ent of.  that bl
17100 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ob..}..funcdef {
17110 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
17120 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  d()} {} {.  ^The
17130 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77   last_insert_row
17140 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  id() function re
17150 74 75 72 6e 73 20 74 68 65 20 5b 52 4f 57 49 44  turns the [ROWID
17160 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61 73 74 20  ].  of the last 
17170 72 6f 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20  row insert from 
17180 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
17190 6e 65 63 74 69 6f 6e 20 77 68 69 63 68 20 69 6e  nection which in
171a0 76 6f 6b 65 64 20 74 68 65 0a 20 20 66 75 6e 63  voked the.  func
171b0 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73  tion..  ^The las
171c0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
171d0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
171e0 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
171f0 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  d the.  [sqlite3
17200 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
17210 69 64 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65  id()] C/C++ inte
17220 72 66 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  rface function..
17230 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67  }..funcdef {leng
17240 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46  th(X)} {} {.  ^F
17250 6f 72 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75  or a string valu
17260 65 20 58 2c 20 74 68 65 20 6c 65 6e 67 74 68 28  e X, the length(
17270 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
17280 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
17290 66 20 0a 20 20 63 68 61 72 61 63 74 65 72 73 20  f .  characters 
172a0 28 6e 6f 74 20 62 79 74 65 73 29 20 69 6e 20 58  (not bytes) in X
172b0 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69   prior to the fi
172c0 72 73 74 20 4e 55 4c 20 63 68 61 72 61 63 74 65  rst NUL characte
172d0 72 2e 0a 20 20 53 69 6e 63 65 20 53 51 4c 69 74  r..  Since SQLit
172e0 65 20 73 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74  e strings do not
172f0 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69   normally contai
17300 6e 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73  n NUL characters
17310 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 0a  , the length(X).
17320 20 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20    function will 
17330 75 73 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74  usually return t
17340 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
17350 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
17360 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20   the string X.. 
17370 20 5e 46 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c   ^For a blob val
17380 75 65 20 58 2c 20 6c 65 6e 67 74 68 28 58 29 20  ue X, length(X) 
17390 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
173a0 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
173b0 68 65 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58  he blob..  ^If X
173c0 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65   is NULL then le
173d0 6e 67 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e  ngth(X) is NULL.
173e0 0a 20 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65  .  ^If X is nume
173f0 72 69 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28  ric then length(
17400 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c  X) returns the l
17410 65 6e 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e  ength of a strin
17420 67 0a 20 20 72 65 70 72 65 73 65 6e 74 61 74 69  g.  representati
17430 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  on of X..}..func
17440 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c  def {like(X,Y) l
17450 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b  ike(X,Y,Z)} {} {
17460 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66  .  ^The like() f
17470 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
17480 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
17490 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20  .  "<b>Y LIKE X 
174a0 26 23 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39  &#91;ESCAPE Z&#9
174b0 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69  3;</b>" expressi
174c0 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f  on. .  ^If the o
174d0 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63  ptional ESCAPE c
174e0 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
174f0 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b  , then the.  lik
17500 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  e() function is 
17510 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72  invoked with thr
17520 65 65 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e  ee arguments.  ^
17530 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73  Otherwise, it is
17540 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20  .  invoked with 
17550 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e  two arguments on
17560 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ly. Note that th
17570 65 20 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65  e X and Y parame
17580 74 65 72 73 20 61 72 65 0a 20 20 72 65 76 65 72  ters are.  rever
17590 73 65 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28  sed in the like(
175a0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74  ) function relat
175b0 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78  ive to the infix
175c0 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72   [LIKE] operator
175d0 2e 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65  ..  ^The [sqlite
175e0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
175f0 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63  n()] interface c
17600 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76  an be used to ov
17610 65 72 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b  erride the.  lik
17620 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  e() function and
17630 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65 20   thereby change 
17640 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
17650 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70   the.  [LIKE] op
17660 65 72 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76  erator.  When ov
17670 65 72 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b  erriding the lik
17680 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74  e() function, it
17690 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e   may be importan
176a0 74 0a 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20  t.  to override 
176b0 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64  both the two and
176c0 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20   three argument 
176d0 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20  versions of the 
176e0 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69  like() .  functi
176f0 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64  on. Otherwise, d
17700 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61  ifferent code ma
17710 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69  y be called to i
17720 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b  mplement the.  [
17730 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64  LIKE] operator d
17740 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
17750 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53  her or not an ES
17760 43 41 50 45 20 63 6c 61 75 73 65 20 77 61 73 20  CAPE clause was 
17770 0a 20 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a  .  specified..}.
17780 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c  ..funcdef {likel
17790 69 68 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b  ihood(X,Y)} {} {
177a0 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f  .  ^The likeliho
177b0 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  od(X,Y) function
177c0 20 72 65 74 75 72 6e 73 20 61 72 67 75 6d 65 6e   returns argumen
177d0 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20  t X unchanged.. 
177e0 20 5e 28 54 68 65 20 76 61 6c 75 65 20 59 20 69   ^(The value Y i
177f0 6e 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59  n likelihood(X,Y
17800 29 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61  ) must be a floa
17810 74 69 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74  ting point const
17820 61 6e 74 0a 20 20 62 65 74 77 65 65 6e 20 30 2e  ant.  between 0.
17830 30 20 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75  0 and 1.0, inclu
17840 73 69 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c  sive.)^.  ^The l
17850 69 6b 65 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e  ikelihood(X) fun
17860 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
17870 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
17880 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d  enerator.  optim
17890 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68 61  izes away so tha
178a0 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f  t it consumes no
178b0 20 43 50 55 20 63 79 63 6c 65 73 20 64 75 72 69   CPU cycles duri
178c0 6e 67 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74  ng run-time.  (t
178d0 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63  hat is, during c
178e0 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33  alls to [sqlite3
178f0 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68  _step()])..  ^Th
17900 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65  e purpose of the
17910 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29   likelihood(X,Y)
17920 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20   function is to 
17930 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20  provide a hint. 
17940 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c   to the query pl
17950 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61  anner that the a
17960 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62  rgument X is a b
17970 6f 6f 6c 65 61 6e 20 74 68 61 74 20 69 73 0a 20  oolean that is. 
17980 20 74 72 75 65 20 77 69 74 68 20 61 20 70 72 6f   true with a pro
17990 62 61 62 69 6c 69 74 79 20 6f 66 20 61 70 70 72  bability of appr
179a0 6f 78 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e  oximately Y..  ^
179b0 28 54 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58  (The [unlikely(X
179c0 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  )] function is s
179d0 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69  hort-hand for li
179e0 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32  kelihood(X,0.062
179f0 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66  5).)^.}..funcdef
17a00 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e   {load_extension
17a10 28 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  (X) load_extensi
17a20 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  on(X,Y)} {} {.  
17a30 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
17a40 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  ion(X,Y) functio
17a50 6e 20 6c 6f 61 64 73 20 5b 53 51 4c 69 74 65 20  n loads [SQLite 
17a60 65 78 74 65 6e 73 69 6f 6e 73 5d 20 6f 75 74 20  extensions] out 
17a70 6f 66 20 74 68 65 20 73 68 61 72 65 64 0a 20 20  of the shared.  
17a80 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d  library file nam
17a90 65 64 20 58 20 75 73 69 6e 67 20 74 68 65 20 65  ed X using the e
17aa0 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e  ntry point Y.  ^
17ab0 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f  The result of lo
17ac0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20  ad_extension(). 
17ad0 20 69 73 20 61 6c 77 61 79 73 20 61 20 4e 55 4c   is always a NUL
17ae0 4c 2e 20 20 5e 49 66 20 59 20 69 73 20 6f 6d 69  L.  ^If Y is omi
17af0 74 74 65 64 20 74 68 65 6e 20 74 68 65 20 64 65  tted then the de
17b00 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e  fault entry poin
17b10 74 20 6e 61 6d 65 20 69 73 20 75 73 65 64 2e 0a  t name is used..
17b20 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
17b30 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  nsion() function
17b40 20 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70   raises an excep
17b50 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65  tion if the exte
17b60 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f 0a 20  nsion fails to. 
17b70 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c   load or initial
17b80 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a  ize correctly...
17b90 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65    <p>^The load_e
17ba0 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74  xtension() funct
17bb0 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ion will fail if
17bc0 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61   the extension a
17bd0 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f  ttempts to .  mo
17be0 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61  dify or delete a
17bf0 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f  n SQL function o
17c00 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
17c10 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78  ence.  ^The.  ex
17c20 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20  tension can add 
17c30 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  new functions or
17c40 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
17c50 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74  nces, but cannot
17c60 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c  .  modify or del
17c70 65 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e  ete existing fun
17c80 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74  ctions or collat
17c90 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65  ing sequences be
17ca0 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75  cause.  those fu
17cb0 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63  nctions and/or c
17cc0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
17cd0 65 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64  es might be used
17ce0 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20   elsewhere.  in 
17cf0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75  the currently ru
17d00 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d  nning SQL statem
17d10 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e  ent.  To load an
17d20 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a   extension that.
17d30 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c    changes or del
17d40 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f  etes functions o
17d50 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
17d60 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20  ences, use the. 
17d70 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65   [sqlite3_load_e
17d80 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61  xtension()] C-la
17d90 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a  nguage API.</p>.
17da0 0a 20 20 3c 70 3e 46 6f 72 20 73 65 63 75 72 69  .  <p>For securi
17db0 74 79 20 72 65 61 73 6f 6e 73 2c 20 65 78 74 65  ty reasons, exte
17dc0 6e 73 69 6f 6e 20 6c 6f 61 64 65 64 20 69 73 20  nsion loaded is 
17dd0 74 75 72 6e 65 64 20 6f 66 66 20 62 79 20 64 65  turned off by de
17de0 66 61 75 6c 74 20 61 6e 64 20 6d 75 73 74 0a 20  fault and must. 
17df0 20 62 65 20 65 6e 61 62 6c 65 64 20 62 79 20 61   be enabled by a
17e00 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 5b   prior call to [
17e10 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
17e20 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d  oad_extension()]
17e30 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66  .</p>.}..funcdef
17e40 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b   {lower(X)} {} {
17e50 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72 28 58 29  .  ^The lower(X)
17e60 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17e70 73 20 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69  s a copy of stri
17e80 6e 67 20 58 20 77 69 74 68 20 61 6c 6c 20 41 53  ng X with all AS
17e90 43 49 49 20 63 68 61 72 61 63 74 65 72 73 0a 20  CII characters. 
17ea0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f   converted to lo
17eb0 77 65 72 20 63 61 73 65 2e 20 20 5e 54 68 65 20  wer case.  ^The 
17ec0 64 65 66 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e  default built-in
17ed0 20 6c 6f 77 65 72 28 29 20 66 75 6e 63 74 69 6f   lower() functio
17ee0 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53  n works.  for AS
17ef0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 6f  CII characters o
17f00 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61 73 65  nly.  To do case
17f10 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20   conversions on 
17f20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68 61 72  non-ASCII.  char
17f30 61 63 74 65 72 73 2c 20 6c 6f 61 64 20 74 68 65  acters, load the
17f40 20 49 43 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a   ICU extension..
17f50 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72 69  }..funcdef {ltri
17f60 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d  m(X) ltrim(X,Y)}
17f70 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72   {} {.  ^The ltr
17f80 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
17f90 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
17fa0 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
17fb0 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
17fc0 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
17fd0 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
17fe0 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64  rom the left sid
17ff0 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  e of X..  ^If th
18000 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
18010 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69 6d 28 58  omitted, ltrim(X
18020 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73  ) removes spaces
18030 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73   from the left s
18040 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66  ide.  of X..}..f
18050 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c  uncdef {max(X,Y,
18060 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46  ...)} {*maxCoreF
18070 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20  unc *max {max() 
18080 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  SQL function}} {
18090 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
180a0 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e  gument max() fun
180b0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
180c0 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20  e argument with 
180d0 74 68 65 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76  the .  maximum v
180e0 61 6c 75 65 2c 20 6f 72 20 72 65 74 75 72 6e 20  alue, or return 
180f0 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61 72 67 75  NULL if any argu
18100 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20  ment is NULL. . 
18110 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
18120 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74  ment max() funct
18130 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73  ion searches its
18140 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
18150 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20  left to right.  
18160 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
18170 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63  that defines a c
18180 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
18190 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
181a0 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63  collating.  func
181b0 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
181c0 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  ing comparisons.
181d0 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68    ^If none of th
181e0 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d  e arguments to m
181f0 61 78 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20  ax().  define a 
18200 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
18210 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e  on, then the BIN
18220 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ARY collating fu
18230 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  nction is used..
18240 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d    Note that <b>m
18250 61 78 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69  ax()</b> is a si
18260 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68  mple function wh
18270 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72  en.  it has 2 or
18280 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20   more arguments 
18290 62 75 74 20 6f 70 65 72 61 74 65 73 20 61 73 20  but operates as 
182a0 61 6e 0a 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63  an.  [minAggFunc
182b0 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e   | aggregate fun
182c0 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20  ction] if given 
182d0 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72  only a single ar
182e0 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64  gument..}..funcd
182f0 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29  ef {min(X,Y,...)
18300 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20  } {*minCoreFunc 
18310 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20  *min {min() SQL 
18320 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
18330 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65  The multi-argume
18340 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f  nt min() functio
18350 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
18360 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a  gument with the.
18370 20 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e    minimum value.
18380 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
18390 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e  gument min() fun
183a0 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69  ction searches i
183b0 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  ts arguments fro
183c0 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a  m left to right.
183d0 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e    for an argumen
183e0 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61  t that defines a
183f0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
18400 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61  ion and uses tha
18410 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75  t collating.  fu
18420 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
18430 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e  tring comparison
18440 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20  s.  ^If none of 
18450 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  the arguments to
18460 20 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20   min().  define 
18470 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
18480 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42  tion, then the B
18490 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
184a0 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
184b0 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62  ..  Note that <b
184c0 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20  >min()</b> is a 
184d0 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
184e0 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20  when.  it has 2 
184f0 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
18500 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61  s but operates a
18510 73 20 61 6e 20 0a 20 20 5b 6d 61 78 41 67 67 46  s an .  [maxAggF
18520 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20  unc | aggregate 
18530 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76  function] if giv
18540 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67  en.  only a sing
18550 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a  le argument..}..
18560 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28  funcdef {nullif(
18570 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
18580 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75  e nullif(X,Y) fu
18590 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 69  nction returns i
185a0 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  ts first argumen
185b0 74 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  t if the argumen
185c0 74 73 20 61 72 65 0a 20 20 64 69 66 66 65 72 65  ts are.  differe
185d0 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74  nt and NULL if t
185e0 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  he arguments are
185f0 20 74 68 65 20 73 61 6d 65 2e 20 20 5e 54 68 65   the same.  ^The
18600 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e   nullif(X,Y) fun
18610 63 74 69 6f 6e 0a 20 20 73 65 61 72 63 68 65 73  ction.  searches
18620 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66   its arguments f
18630 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
18640 74 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e  t for an argumen
18650 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61  t that defines a
18660 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  .  collating fun
18670 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74  ction and uses t
18680 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  hat collating fu
18690 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
186a0 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73  tring.  comparis
186b0 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69 74 68 65  ons.  ^If neithe
186c0 72 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75  r argument to nu
186d0 6c 6c 69 66 28 29 20 64 65 66 69 6e 65 73 20 61  llif() defines a
186e0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
186f0 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68 65 20 42  ion.  then the B
18700 49 4e 41 52 59 20 69 73 20 75 73 65 64 2e 0a 7d  INARY is used..}
18710 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72 69 6e 74  ..funcdef {print
18720 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d 20 7b  f(FORMAT,...)} {
18730 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70 72 69 6e  } {.  ^(The prin
18740 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 20 53  tf(FORMAT,...) S
18750 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b  QL function work
18760 73 20 6c 69 6b 65 20 74 68 65 20 5b 73 71 6c 69  s like the [sqli
18770 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 5d 20 43  te3_mprintf()] C
18780 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66 75 6e 63  -language.  func
18790 74 69 6f 6e 20 61 6e 64 20 74 68 65 20 70 72 69  tion and the pri
187a0 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 66  ntf() function f
187b0 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64  rom the standard
187c0 20 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a 20 20   C library.)^.  
187d0 54 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  The first argume
187e0 6e 74 20 69 73 20 61 20 66 6f 72 6d 61 74 20 73  nt is a format s
187f0 74 72 69 6e 67 20 74 68 61 74 20 73 70 65 63 69  tring that speci
18800 66 69 65 73 20 68 6f 77 20 74 6f 20 63 6f 6e 73  fies how to cons
18810 74 72 75 63 74 20 74 68 65 20 6f 75 74 70 75 74  truct the output
18820 0a 20 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20  .  string using 
18830 76 61 6c 75 65 73 20 74 61 6b 65 6e 20 66 72 6f  values taken fro
18840 6d 20 73 75 62 73 65 71 75 65 6e 74 20 61 72 67  m subsequent arg
18850 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20 74 68 65  uments.  ^If the
18860 20 46 4f 52 4d 41 54 20 61 72 67 75 6d 65 6e 74   FORMAT argument
18870 20 69 73 0a 20 20 6d 69 73 73 69 6e 67 20 6f 72   is.  missing or
18880 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
18890 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 20  esult is NULL.  
188a0 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61 74 20 69  ^The %n format i
188b0 73 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72  s silently ignor
188c0 65 64 20 61 6e 64 0a 20 20 64 6f 65 73 20 6e 6f  ed and.  does no
188d0 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20 61 72 67  t consume an arg
188e0 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20 25 70 20  ument.  ^The %p 
188f0 66 6f 72 6d 61 74 20 69 73 20 61 6e 20 61 6c 69  format is an ali
18900 61 73 20 66 6f 72 20 25 58 2e 20 20 5e 54 68 65  as for %X.  ^The
18910 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20 69 73 20   %z format.  is 
18920 69 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20  interchangeable 
18930 77 69 74 68 20 25 73 2e 20 20 5e 28 49 66 20 74  with %s.  ^(If t
18940 68 65 72 65 20 61 72 65 20 74 6f 6f 20 66 65 77  here are too few
18950 20 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 74 68   arguments in th
18960 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74 2c  e argument list,
18970 0a 20 20 6d 69 73 73 69 6e 67 20 61 72 67 75 6d  .  missing argum
18980 65 6e 74 73 20 61 72 65 20 61 73 73 75 6d 65 64  ents are assumed
18990 20 74 6f 20 68 61 76 65 20 61 20 4e 55 4c 4c 20   to have a NULL 
189a0 76 61 6c 75 65 2c 20 77 68 69 63 68 20 69 73 20  value, which is 
189b0 74 72 61 6e 73 6c 61 74 65 64 20 69 6e 74 6f 0a  translated into.
189c0 20 20 30 20 6f 72 20 30 2e 30 20 66 6f 72 20 6e    0 or 0.0 for n
189d0 75 6d 65 72 69 63 20 66 6f 72 6d 61 74 73 20 6f  umeric formats o
189e0 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  r an empty strin
189f0 67 20 66 6f 72 20 25 73 2e 29 5e 0a 7d 0a 20 20  g for %s.)^.}.  
18a00 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75 6f 74 65  ..funcdef {quote
18a10 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
18a20 20 71 75 6f 74 65 28 58 29 20 66 75 6e 63 74 69   quote(X) functi
18a30 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 74  on returns the t
18a40 65 78 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c 69  ext of an SQL li
18a50 74 65 72 61 6c 20 77 68 69 63 68 0a 20 20 69 73  teral which.  is
18a60 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74   the value of it
18a70 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61  s argument suita
18a80 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f  ble for inclusio
18a90 6e 20 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73 74  n into an SQL st
18aa0 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69  atement..  ^Stri
18ab0 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64  ngs are surround
18ac0 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f  ed by single-quo
18ad0 74 65 73 20 77 69 74 68 20 65 73 63 61 70 65 73  tes with escapes
18ae0 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f   on interior quo
18af0 74 65 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e  tes.  as needed.
18b00 20 20 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63    ^BLOBs are enc
18b10 6f 64 65 64 20 61 73 20 68 65 78 61 64 65 63 69  oded as hexadeci
18b20 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20 20  mal literals..  
18b30 5e 53 74 72 69 6e 67 73 20 77 69 74 68 20 65 6d  ^Strings with em
18b40 62 65 64 64 65 64 20 4e 55 4c 20 63 68 61 72 61  bedded NUL chara
18b50 63 74 65 72 73 20 63 61 6e 6e 6f 74 20 62 65 20  cters cannot be 
18b60 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 73  represented as s
18b70 74 72 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c 73  tring.  literals
18b80 20 69 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e 63   in SQL and henc
18b90 65 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 73  e the returned s
18ba0 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73  tring literal is
18bb0 20 74 72 75 6e 63 61 74 65 64 20 70 72 69 6f 72   truncated prior
18bc0 0a 20 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  .  to the first 
18bd0 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  NUL..}..funcdef 
18be0 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a  {random()} {} {.
18bf0 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29 20    ^The random() 
18c00 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
18c10 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d   a pseudo-random
18c20 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74 77 65   integer.  betwe
18c30 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  en -922337203685
18c40 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39 32 32  4775808 and +922
18c50 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
18c60 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61  ..}..funcdef {ra
18c70 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20  ndomblob(N)} {} 
18c80 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62  {.  ^The randomb
18c90 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20  lob(N) function 
18ca0 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65  return an N-byte
18cb0 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67   blob containing
18cc0 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20   pseudo-random. 
18cd0 20 62 79 74 65 73 2e 20 5e 49 66 20 4e 20 69 73   bytes. ^If N is
18ce0 20 6c 65 73 73 20 74 68 61 6e 20 31 20 74 68 65   less than 1 the
18cf0 6e 20 61 20 31 2d 62 79 74 65 20 72 61 6e 64 6f  n a 1-byte rando
18d00 6d 20 62 6c 6f 62 20 69 73 20 72 65 74 75 72 6e  m blob is return
18d10 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20  ed...  <p>Hint: 
18d20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61   applications ca
18d30 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61  n generate globa
18d40 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74  lly unique ident
18d50 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74  ifiers.  using t
18d60 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67  his function tog
18d70 65 74 68 65 72 20 77 69 74 68 20 5b 68 65 78 28  ether with [hex(
18d80 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77  )] and/or.  [low
18d90 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a  er()] like this:
18da0 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75  </p>..  <blockqu
18db0 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f  ote>.  hex(rando
18dc0 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f  mblob(16))<br></
18dd0 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28  br>.  lower(hex(
18de0 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29  randomblob(16)))
18df0 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  .  </blockquote>
18e00 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70  .}..funcdef {rep
18e10 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20  lace(X,Y,Z)} {} 
18e20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c 61 63 65  {.  ^The replace
18e30 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e  (X,Y,Z) function
18e40 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
18e50 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73  g formed by subs
18e60 74 69 74 75 74 69 6e 67 0a 20 20 73 74 72 69 6e  tituting.  strin
18e70 67 20 5a 20 66 6f 72 20 65 76 65 72 79 20 6f 63  g Z for every oc
18e80 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69  currence of stri
18e90 6e 67 20 59 20 69 6e 20 73 74 72 69 6e 67 20 58  ng Y in string X
18ea0 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d  .  ^The [BINARY]
18eb0 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  .  collating seq
18ec0 75 65 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f  uence is used fo
18ed0 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20  r comparisons.  
18ee0 5e 49 66 20 59 20 69 73 20 61 6e 20 65 6d 70 74  ^If Y is an empt
18ef0 79 0a 20 20 73 74 72 69 6e 67 20 74 68 65 6e 20  y.  string then 
18f00 72 65 74 75 72 6e 20 58 20 75 6e 63 68 61 6e 67  return X unchang
18f10 65 64 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f  ed.  ^If Z is no
18f20 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20  t initially.  a 
18f30 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 63 61  string, it is ca
18f40 73 74 20 74 6f 20 61 20 55 54 46 2d 38 20 73 74  st to a UTF-8 st
18f50 72 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 70 72  ring prior to pr
18f60 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e  ocessing..}..fun
18f70 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29 20 72  cdef {round(X) r
18f80 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  ound(X,Y)} {} {.
18f90 20 20 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c 59    ^The round(X,Y
18fa0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
18fb0 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  ns a floating-po
18fc0 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20 72 6f  int.  value X ro
18fd0 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67 69 74  unded to Y digit
18fe0 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f  s to the right o
18ff0 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  f the decimal po
19000 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65 20 59  int..  ^If the Y
19010 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69   argument is omi
19020 74 74 65 64 2c 20 69 74 20 69 73 20 61 73 73 75  tted, it is assu
19030 6d 65 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a  med to be 0..}..
19040 66 75 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58  funcdef {rtrim(X
19050 29 20 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  ) rtrim(X,Y)} {}
19060 20 7b 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28   {.  ^The rtrim(
19070 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
19080 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
19090 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
190a0 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
190b0 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
190c0 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
190d0 20 74 68 65 20 72 69 67 68 74 20 73 69 64 65 20   the right side 
190e0 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20  of X..  ^If the 
190f0 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  Y argument is om
19100 69 74 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20  itted, rtrim(X) 
19110 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66  removes spaces f
19120 72 6f 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20  rom the right.  
19130 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75  side of X..}..fu
19140 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58  ncdef {soundex(X
19150 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
19160 6f 75 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69  oundex(X) functi
19170 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
19180 69 6e 67 20 74 68 61 74 20 69 73 20 74 68 65 20  ing that is the 
19190 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67  soundex encoding
191a0 20 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e   .  of the strin
191b0 67 20 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69  g X..  ^The stri
191c0 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72 65 74  ng "?000" is ret
191d0 75 72 6e 65 64 20 69 66 20 74 68 65 20 61 72 67  urned if the arg
191e0 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72  ument is NULL or
191f0 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41   contains.  no A
19200 53 43 49 49 20 61 6c 70 68 61 62 65 74 69 63 20  SCII alphabetic 
19210 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28  characters..  ^(
19220 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
19230 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51   omitted from SQ
19240 4c 69 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e  Lite by default.
19250 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76  .  It is only av
19260 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b  ailable if the [
19270 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20  SQLITE_SOUNDEX] 
19280 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
19290 69 6f 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68  ion.  is used wh
192a0 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62 75 69  en SQLite is bui
192b0 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lt.)^.}..funcdef
192c0 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65   {sqlite_compile
192d0 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b  option_get(N)} {
192e0 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74  } {.  ^The sqlit
192f0 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
19300 67 65 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69  get() SQL functi
19310 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
19320 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71  around the.  [sq
19330 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
19340 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b  ion_get()] C/C++
19350 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68   function..  ^Th
19360 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
19370 6e 73 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70  ns the N-th comp
19380 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
19390 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51  used to build SQ
193a0 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69  Lite.  or NULL i
193b0 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61  f N is out of ra
193c0 6e 67 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 74  nge.  See also t
193d0 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69  he [compile_opti
193e0 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a  ons pragma]..}..
193f0 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
19400 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
19410 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ed(X)} {} {.  ^T
19420 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  he sqlite_compil
19430 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 20 53  eoption_used() S
19440 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  QL function is a
19450 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
19460 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63  the.  [sqlite3_c
19470 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65  ompileoption_use
19480 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74  d()] C/C++ funct
19490 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65  ion..  ^When the
194a0 20 61 72 67 75 6d 65 6e 74 20 58 20 74 6f 20 73   argument X to s
194b0 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
194c0 69 6f 6e 5f 75 73 65 64 28 58 29 20 69 73 20 61  ion_used(X) is a
194d0 20 73 74 72 69 6e 67 20 77 68 69 63 68 0a 20 20   string which.  
194e0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
194f0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
19500 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74 69  tion, this routi
19510 6e 65 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  ne returns true 
19520 28 31 29 20 6f 72 0a 20 20 66 61 6c 73 65 20 28  (1) or.  false (
19530 30 29 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  0) depending on 
19540 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
19550 68 61 74 20 6f 70 74 69 6f 6e 20 77 61 73 20 75  hat option was u
19560 73 65 64 20 64 75 72 69 6e 67 20 74 68 65 0a 20  sed during the. 
19570 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64   build..}..funcd
19580 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63  ef {sqlite_sourc
19590 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  e_id()} {} {.  ^
195a0 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75 72 63  The sqlite_sourc
195b0 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  e_id() function 
195c0 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
195d0 20 74 68 61 74 20 69 64 65 6e 74 69 66 69 65 73   that identifies
195e0 20 74 68 65 0a 20 20 73 70 65 63 69 66 69 63 20   the.  specific 
195f0 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73  version of the s
19600 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61 74 20  ource code that 
19610 77 61 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c  was used to buil
19620 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c  d the SQLite.  l
19630 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20 73 74  ibrary.  ^The st
19640 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79  ring returned by
19650 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69   sqlite_source_i
19660 64 28 29 20 62 65 67 69 6e 73 20 77 69 74 68 0a  d() begins with.
19670 20 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74    the date and t
19680 69 6d 65 20 74 68 61 74 20 74 68 65 20 73 6f 75  ime that the sou
19690 72 63 65 20 63 6f 64 65 20 77 61 73 20 63 68 65  rce code was che
196a0 63 6b 65 64 20 69 6e 20 61 6e 64 20 69 73 20 66  cked in and is f
196b0 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20 53  ollows by.  an S
196c0 48 41 31 20 68 61 73 68 20 74 68 61 74 20 75 6e  HA1 hash that un
196d0 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65  iquely identifie
196e0 73 20 74 68 65 20 73 6f 75 72 63 65 20 74 72 65  s the source tre
196f0 65 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69  e.  ^This functi
19700 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77  on is.  an SQL w
19710 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
19720 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63  e [sqlite3_sourc
19730 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61  eid()] C interfa
19740 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ce..}..funcdef {
19750 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
19760 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
19770 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66  lite_version() f
19780 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
19790 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69  the version stri
197a0 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ng for the SQLit
197b0 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68 61 74  e.  library that
197c0 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54   is running.  ^T
197d0 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
197e0 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72  an SQL.  wrapper
197f0 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c   around the [sql
19800 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28  ite3_libversion(
19810 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a  )] C-interface..
19820 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73  }..funcdef {subs
19830 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72  tr(X,Y,Z) substr
19840 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
19850 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29  he substr(X,Y,Z)
19860 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
19870 73 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66  s a substring of
19880 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20   input string X 
19890 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69  that begins.  wi
198a0 74 68 20 74 68 65 20 59 2d 74 68 20 63 68 61 72  th the Y-th char
198b0 61 63 74 65 72 20 61 6e 64 20 77 68 69 63 68 20  acter and which 
198c0 69 73 20 5a 20 63 68 61 72 61 63 74 65 72 73 20  is Z characters 
198d0 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73  long..  ^If Z is
198e0 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75   omitted then su
198f0 62 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e  bstr(X,Y) return
19900 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73  s all characters
19910 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64   through the end
19920 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  .  of the string
19930 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74   X beginning wit
19940 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54  h the Y-th..  ^T
19950 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61  he left-most cha
19960 72 61 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e  racter of X is n
19970 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20  umber 1.  ^If Y 
19980 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68  is negative.  th
19990 65 6e 20 74 68 65 20 66 69 72 73 74 20 63 68 61  en the first cha
199a0 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75  racter of the su
199b0 62 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64  bstring is found
199c0 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f   by counting fro
199d0 6d 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61  m the.  right ra
199e0 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65  ther than the le
199f0 66 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65  ft.  ^If Z is ne
19a00 67 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68  gative then.  th
19a10 65 20 61 62 73 28 5a 29 20 63 68 61 72 61 63 74  e abs(Z) charact
19a20 65 72 73 20 70 72 65 63 65 64 69 6e 67 20 74 68  ers preceding th
19a30 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72  e Y-th character
19a40 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20   are returned.. 
19a50 20 5e 49 66 20 58 20 69 73 20 61 20 73 74 72 69   ^If X is a stri
19a60 6e 67 20 74 68 65 6e 20 63 68 61 72 61 63 74 65  ng then characte
19a70 72 73 20 69 6e 64 69 63 65 73 20 72 65 66 65 72  rs indices refer
19a80 20 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38   to actual UTF-8
19a90 20 0a 20 20 63 68 61 72 61 63 74 65 72 73 2e 20   .  characters. 
19aa0 20 5e 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42   ^If X is a BLOB
19ab0 20 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65   then the indice
19ac0 73 20 72 65 66 65 72 20 74 6f 20 62 79 74 65 73  s refer to bytes
19ad0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f  ..}..funcdef {to
19ae0 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b  tal_changes()} {
19af0 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c  } {.  ^The total
19b00 5f 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74  _changes() funct
19b10 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
19b20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68  number of row ch
19b30 61 6e 67 65 73 0a 20 20 63 61 75 73 65 64 20 62  anges.  caused b
19b40 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
19b50 20 6f 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61   or DELETE.  sta
19b60 74 65 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68  tements since th
19b70 65 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61  e current databa
19b80 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61  se connection wa
19b90 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69  s opened..  ^Thi
19ba0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  s function is a 
19bb0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
19bc0 68 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61  he [sqlite3_tota
19bd0 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43  l_changes()].  C
19be0 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
19bf0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d  }..funcdef {trim
19c00 28 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b  (X) trim(X,Y)} {
19c10 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28  } {.  ^The trim(
19c20 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
19c30 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
19c40 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
19c50 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
19c60 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
19c70 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
19c80 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e   both ends of X.
19c90 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
19ca0 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
19cb0 2c 20 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65  , trim(X) remove
19cc0 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f  s spaces from bo
19cd0 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a  th ends of X..}.
19ce0 0a 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66  .funcdef {typeof
19cf0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
19d00 20 74 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74   typeof(X) funct
19d10 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
19d20 72 69 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61  ring that indica
19d30 74 65 73 20 74 68 65 20 5b 64 61 74 61 74 79 70  tes the [datatyp
19d40 65 5d 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72  e] of.  the expr
19d50 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22  ession X: "null"
19d60 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65  , "integer", "re
19d70 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20  al", "text", or 
19d80 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64  "blob"..}..funcd
19d90 65 66 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d  ef {unlikely(X)}
19da0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c   {} {.  ^The unl
19db0 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
19dc0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
19dd0 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67  gument X unchang
19de0 65 64 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b  ed..  ^The unlik
19df0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
19e00 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20  is a no-op that 
19e10 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
19e20 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61  or.  optimizes a
19e30 77 61 79 20 73 6f 20 74 68 61 74 20 69 74 20 63  way so that it c
19e40 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63  onsumes no CPU c
19e50 79 63 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74  ycles at.  run-t
19e60 69 6d 65 20 28 74 68 61 74 20 69 73 2c 20 64 75  ime (that is, du
19e70 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73  ring calls to [s
19e80 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e  qlite3_step()]).
19e90 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20  .  ^The purpose 
19ea0 6f 66 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28  of the unlikely(
19eb0 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74  X) function is t
19ec0 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74  o provide a hint
19ed0 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  .  to the query 
19ee0 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65  planner that the
19ef0 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61   argument X is a
19f00 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20   boolean value. 
19f10 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
19f20 20 6e 6f 74 20 74 72 75 65 2e 20 5e 28 54 68 65   not true. ^(The
19f30 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e   unlikely(X) fun
19f40 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
19f50 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69  ent.  to [likeli
19f60 68 6f 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29  hood](X, 0.0625)
19f70 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
19f80 75 6e 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b  unicode(X)} {} {
19f90 0a 20 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28  .  ^The unicode(
19fa0 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
19fb0 72 6e 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20  rns the numeric 
19fc0 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69  unicode code poi
19fd0 6e 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  nt corresponding
19fe0 20 74 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20   to.  the first 
19ff0 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
1a000 20 73 74 72 69 6e 67 20 58 2e 20 20 49 66 20 74   string X.  If t
1a010 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75  he argument to u
1a020 6e 69 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74  nicode(X) is not
1a030 20 61 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e   a string.  then
1a040 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 75   the result is u
1a050 6e 64 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e  ndefined..}..fun
1a060 63 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20  cdef {upper(X)} 
1a070 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65  {} {.  ^The uppe
1a080 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  r(X) function re
1a090 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
1a0a0 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 69  input string X i
1a0b0 6e 20 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c  n which all .  l
1a0c0 6f 77 65 72 2d 63 61 73 65 20 41 53 43 49 49 20  ower-case ASCII 
1a0d0 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20 63  characters are c
1a0e0 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65 69  onverted to thei
1a0f0 72 20 75 70 70 65 72 2d 63 61 73 65 20 65 71 75  r upper-case equ
1a100 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63  ivalent..}..func
1a110 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29  def {zeroblob(N)
1a120 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65  } {} {.  ^The ze
1a130 72 6f 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69  roblob(N) functi
1a140 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f  on returns a BLO
1a150 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  B consisting of 
1a160 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e  N bytes of 0x00.
1a170 0a 20 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65  .  SQLite manage
1a180 73 20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62  s these zeroblob
1a190 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74  s very efficient
1a1a0 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63  ly.  Zeroblobs c
1a1b0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20  an be used to.  
1a1c0 72 65 73 65 72 76 65 20 73 70 61 63 65 20 66 6f  reserve space fo
1a1d0 72 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73  r a BLOB that is
1a1e0 20 6c 61 74 65 72 20 77 72 69 74 74 65 6e 20 75   later written u
1a1f0 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33  sing .  [sqlite3
1a200 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69  _blob_open() | i
1a210 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20  ncremental BLOB 
1a220 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51  I/O]..  ^This SQ
1a230 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d  L function is im
1a240 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20  plemented using 
1a250 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73  the [sqlite3_res
1a260 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a  ult_zeroblob()].
1a270 20 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74    routine from t
1a280 68 65 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  he C/C++ interfa
1a290 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  ce..}.</tcl>.</t
1a2a0 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  able>..<tcl>.###
1a2b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a2f0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1a300 69 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69  ion {Date And Ti
1a310 6d 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61  me Functions} da
1a320 74 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e  tefunc {*datefun
1a330 63 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  c}.hd_keywords {
1a340 64 61 74 65 28 29 20 53 51 4c 20 66 75 6e 63 74  date() SQL funct
1a350 69 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c  ion} {time() SQL
1a360 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65   function}.hd_ke
1a370 79 77 6f 72 64 73 20 7b 64 61 74 65 74 69 6d 65  ywords {datetime
1a380 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1a390 20 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20 53 51   {julianday() SQ
1a3a0 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b  L function}.hd_k
1a3b0 65 79 77 6f 72 64 73 20 7b 73 74 72 66 74 69 6d  eywords {strftim
1a3c0 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
1a3d0 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51  }.</tcl>..<p>.SQ
1a3e0 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 66 69  Lite supports fi
1a3f0 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ve date and time
1a400 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f   functions as fo
1a410 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e  llows:.</p>..<p>
1a420 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  .<ol>.<li> ^(<b>
1a430 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  date(</b><i>time
1a440 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
1a450 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
1a460 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
1a470 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69  li>.<li> ^(<b>ti
1a480 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  me(</b><i>timest
1a490 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1a4a0 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1a4b0 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1a4c0 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65  >.<li> ^(<b>date
1a4d0 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  time(</b><i>time
1a4e0 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
1a4f0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
1a500 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
1a510 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75  li>.<li> ^(<b>ju
1a520 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74  lianday(</b><i>t
1a530 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
1a540 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
1a550 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e  ..</i><b>)</b>)^
1a560 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62   </li>.<li> ^(<b
1a570 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69  >strftime(</b><i
1a580 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74 72  >format, timestr
1a590 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
1a5a0 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
1a5b0 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
1a5c0 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c  .</ol>..<p>.^All
1a5d0 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20 74   five date and t
1a5e0 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 61  ime functions ta
1a5f0 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e 67  ke a time string
1a600 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e   as an argument.
1a610 20 0a 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69   .^The time stri
1a620 6e 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  ng is followed b
1a630 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d  y zero or more m
1a640 6f 64 69 66 69 65 72 73 2e 20 0a 5e 54 68 65 20  odifiers. .^The 
1a650 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74  strftime() funct
1a660 69 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61  ion also takes a
1a670 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61   format string a
1a680 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  s its first argu
1a690 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  ment..</p>..<p>.
1a6a0 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  The date and tim
1a6b0 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  e functions use 
1a6c0 61 20 73 75 62 73 65 74 20 6f 66 0a 5b 68 74 74  a subset of.[htt
1a6d0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1a6e0 2e 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36  .org/wiki/ISO_86
1a6f0 30 31 20 7c 20 49 53 30 2d 38 36 30 31 5d 20 64  01 | IS0-8601] d
1a700 61 74 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72  ate and time.for
1a710 6d 61 74 73 2e 0a 5e 54 68 65 20 64 61 74 65 28  mats..^The date(
1a720 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1a730 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20 74  ns the date in t
1a740 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59  his format: YYYY
1a750 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69  -MM-DD. .^The ti
1a760 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  me() function re
1a770 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61  turns the time a
1a780 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68  s HH:MM:SS. .^Th
1a790 65 20 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e  e datetime() fun
1a7a0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59  ction returns "Y
1a7b0 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
1a7c0 53 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69  SS". .^(The juli
1a7d0 61 6e 64 61 79 28 29 20 66 75 6e 63 74 69 6f 6e  anday() function
1a7e0 20 72 65 74 75 72 6e 73 20 74 68 65 20 0a 5b 68   returns the .[h
1a7f0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1a800 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
1a810 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20  an_day | Julian 
1a820 64 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65  day] - the.numbe
1a830 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20  r of days since 
1a840 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63  noon in Greenwic
1a850 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34  h on November 24
1a860 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68  , 4714 B.C. .([h
1a870 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1a880 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c  ia.org/wiki/Prol
1a890 65 70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f  eptic_Gregorian_
1a8a0 63 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65  calendar | Prole
1a8b0 70 74 69 63 20 47 72 65 67 6f 72 69 61 6e 20 63  ptic Gregorian c
1a8c0 61 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68  alendar]).)^.^Th
1a8d0 65 20 73 74 72 66 74 69 6d 65 28 29 20 72 6f 75  e strftime() rou
1a8e0 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65  tine returns the
1a8f0 20 64 61 74 65 20 66 6f 72 6d 61 74 74 65 64 20   date formatted 
1a900 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68  according to .th
1a910 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
1a920 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
1a930 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
1a940 0a 5e 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72  .^The format str
1a950 69 6e 67 20 73 75 70 70 6f 72 74 73 20 74 68 65  ing supports the
1a960 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62   most common sub
1a970 73 74 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64  stitutions found
1a980 20 69 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f   in the .[http:/
1a990 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f  /opengroup.org/o
1a9a0 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38  nlinepubs/007908
1a9b0 37 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65  799/xsh/strftime
1a9c0 2e 68 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65  .html | strftime
1a9d0 28 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f  () function].fro
1a9e0 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  m the standard C
1a9f0 20 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74 77   library plus tw
1aa00 6f 20 6e 65 77 20 73 75 62 73 74 69 74 75 74 69  o new substituti
1aa10 6f 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a  ons, %f and %J..
1aa20 5e 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ^(The following 
1aa30 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69  is a complete li
1aa40 73 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72 66  st of valid strf
1aa50 74 69 6d 65 28 29 20 73 75 62 73 74 69 74 75 74  time() substitut
1aa60 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ions:.</p>..<blo
1aa70 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
1aa80 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70  border="0" cellp
1aa90 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73  adding="0" cells
1aaa0 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
1aab0 3c 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 31  <td><td width="1
1aac0 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  0"><td></tr>..<t
1aad0 72 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74  r><td> %d <td><t
1aae0 64 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a  d> day of month:
1aaf0 20 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20   00.<tr><td> %f 
1ab00 3c 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f  <td><td> fractio
1ab10 6e 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e  nal seconds: SS.
1ab20 53 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20  SSS.<tr><td> %H 
1ab30 3c 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30  <td><td> hour: 0
1ab40 30 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25  0-24 .<tr><td> %
1ab50 6a 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  j <td><td> day o
1ab60 66 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36 0a  f year: 001-366.
1ab70 3c 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e  <tr><td> %J <td>
1ab80 3c 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20  <td> Julian day 
1ab90 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20  number.<tr><td> 
1aba0 25 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74  %m <td><td> mont
1abb0 68 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64  h: 01-12.<tr><td
1abc0 3e 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69  > %M <td><td> mi
1abd0 6e 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e  nute: 00-59.<tr>
1abe0 3c 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e  <td> %s <td><td>
1abf0 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
1ac00 39 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74  970-01-01.<tr><t
1ac10 64 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73  d> %S <td><td> s
1ac20 65 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74  econds: 00-59.<t
1ac30 72 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74  r><td> %w <td><t
1ac40 64 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20 30  d> day of week 0
1ac50 2d 36 20 77 69 74 68 20 53 75 6e 64 61 79 3d 3d  -6 with Sunday==
1ac60 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74  0.<tr><td> %W <t
1ac70 64 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20 79  d><td> week of y
1ac80 65 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c  ear: 00-53.<tr><
1ac90 74 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20  td> %Y <td><td> 
1aca0 79 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39 0a  year: 0000-9999.
1acb0 3c 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e  <tr><td> %% <td>
1acc0 3c 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a  <td> %.</table>.
1acd0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1ace0 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68  .<p>.^(Notice th
1acf0 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74  at all other dat
1ad00 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1ad10 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72  ions can be expr
1ad20 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f  essed.in terms o
1ad30 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f  f strftime():.</
1ad40 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1ad50 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
1ad60 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  0" cellpadding="
1ad70 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  0" cellspacing="
1ad80 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46  0">.<tr><td><b>F
1ad90 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77  unction</b><td w
1ada0 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62  idth="30"><td><b
1adb0 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66  >Equivalent strf
1adc0 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c  time()</b>.<tr><
1add0 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20  td>   date(...) 
1ade0 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73       <td><td>  s
1adf0 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25  trftime('%Y-%m-%
1ae00 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64  d', ...).<tr><td
1ae10 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20  >   time(...)   
1ae20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72     <td><td>  str
1ae30 66 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27  ftime('%H:%M:%S'
1ae40 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
1ae50 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20    datetime(...) 
1ae60 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1ae70 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48  ime('%Y-%m-%d %H
1ae80 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74  :%M:%S', ...).<t
1ae90 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64  r><td>   juliand
1aea0 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e  ay(...) <td><td>
1aeb0 20 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c    strftime('%J',
1aec0 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c   ...).</table>.<
1aed0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1aee0 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61  <p>.The only rea
1aef0 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69  sons for providi
1af00 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68  ng functions oth
1af10 65 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65  er than strftime
1af20 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e  () is.for conven
1af30 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66  ience and for ef
1af40 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a  ficiency..</p>..
1af50 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73  <h3>Time Strings
1af60 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69  </h3>..<p>^(A ti
1af70 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65  me string can be
1af80 20 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66   in any of the f
1af90 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73  ollowing formats
1afa0 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
1afb0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
1afc0 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  i>.<li> <i>YYYY-
1afd0 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a  MM-DD HH:MM</i>.
1afe0 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1aff0 44 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a  DD HH:MM:SS</i>.
1b000 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1b010 44 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  DD HH:MM:SS.SSS<
1b020 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1b030 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
1b040 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  b><i>HH:MM</i>.<
1b050 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1b060 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e  D</i><b>T</b><i>
1b070 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
1b080 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1b090 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
1b0a0 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
1b0b0 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e  li> <i>HH:MM</i>
1b0c0 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53  .<li> <i>HH:MM:S
1b0d0 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  S</i>.<li> <i>HH
1b0e0 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
1b0f0 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c  li> <b>now</b>.<
1b100 6c 69 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44  li> <i>DDDDDDDDD
1b110 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c  D</i>.</ol>)^..<
1b120 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35  p>.^In formats 5
1b130 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65 20   through 7, the 
1b140 22 54 22 20 69 73 20 61 20 6c 69 74 65 72 61 6c  "T" is a literal
1b150 20 63 68 61 72 61 63 74 65 72 20 73 65 70 61 72   character separ
1b160 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65 20  ating .the date 
1b170 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61 73  and the time, as
1b180 20 72 65 71 75 69 72 65 64 20 62 79 20 0a 5b 68   required by .[h
1b190 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72  ttp://www.w3c.or
1b1a0 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69  g/TR/NOTE-dateti
1b1b0 6d 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20  me | ISO-8601]. 
1b1c0 0a 5e 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f  .^Formats 8 thro
1b1d0 75 67 68 20 31 30 20 74 68 61 74 20 73 70 65 63  ugh 10 that spec
1b1e0 69 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20  ify only a time 
1b1f0 61 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66  assume a date of
1b200 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f   .2000-01-01. Fo
1b210 72 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74 72  rmat 11, the str
1b220 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f  ing 'now', is co
1b230 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nverted into the
1b240 20 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20 61   .current date a
1b250 6e 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69  nd time as obtai
1b260 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75  ned from the xCu
1b270 72 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64  rrentTime method
1b280 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33  .of the [sqlite3
1b290 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20  _vfs] object in 
1b2a0 75 73 65 2e 0a 5e 54 68 65 20 27 6e 6f 77 27 20  use..^The 'now' 
1b2b0 61 72 67 75 6d 65 6e 74 20 74 6f 20 64 61 74 65  argument to date
1b2c0 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
1b2d0 6f 6e 73 20 61 6c 77 61 79 73 20 72 65 74 75 72  ons always retur
1b2e0 6e 73 20 65 78 61 63 74 6c 79 20 74 68 65 0a 73  ns exactly the.s
1b2f0 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 6d 75  ame value for mu
1b300 6c 74 69 70 6c 65 20 69 6e 76 6f 63 61 74 69 6f  ltiple invocatio
1b310 6e 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ns within the sa
1b320 6d 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70  me [sqlite3_step
1b330 28 29 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74 74 70  ()] call..^[http
1b340 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
1b350 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e  org/wiki/Coordin
1b360 61 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54  ated_Universal_T
1b370 69 6d 65 20 7c 20 55 6e 69 76 65 72 73 61 6c 20  ime | Universal 
1b380 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65  Coordinated Time
1b390 20 28 55 54 43 29 5d 20 69 73 20 75 73 65 64 2e   (UTC)] is used.
1b3a0 20 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69 73 20   .^Format 12 is 
1b3b0 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  the .[http://en.
1b3c0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1b3d0 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20  ki/Julian_day | 
1b3e0 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
1b3f0 72 5d 0a 65 78 70 72 65 73 73 65 64 20 61 73 20  r].expressed as 
1b400 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
1b410 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70   value..</p>..<p
1b420 3e 0a 46 6f 72 6d 61 74 73 20 32 20 74 68 72 6f  >.Formats 2 thro
1b430 75 67 68 20 31 30 20 6d 61 79 20 62 65 20 6f 70  ugh 10 may be op
1b440 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
1b450 64 20 62 79 20 61 20 74 69 6d 65 7a 6f 6e 65 20  d by a timezone 
1b460 69 6e 64 69 63 61 74 6f 72 20 6f 66 20 74 68 65  indicator of the
1b470 20 66 6f 72 6d 0a 22 3c 69 3e 26 23 39 31 3b 2b   form."<i>&#91;+
1b480 2d 26 23 39 33 3b 48 48 3a 4d 4d 3c 2f 69 3e 22  -&#93;HH:MM</i>"
1b490 20 6f 72 20 6a 75 73 74 20 22 3c 69 3e 5a 3c 2f   or just "<i>Z</
1b4a0 69 3e 22 2e 20 20 54 68 65 20 64 61 74 65 20 61  i>".  The date a
1b4b0 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1b4c0 73 20 75 73 65 20 55 54 43 20 6f 72 20 22 7a 75  s use UTC or "zu
1b4d0 6c 75 22 0a 74 69 6d 65 20 69 6e 74 65 72 6e 61  lu".time interna
1b4e0 6c 6c 79 2c 20 61 6e 64 20 73 6f 20 74 68 65 20  lly, and so the 
1b4f0 22 5a 22 20 73 75 66 66 69 78 20 69 73 20 61 20  "Z" suffix is a 
1b500 6e 6f 2d 6f 70 2e 20 20 41 6e 79 20 6e 6f 6e 2d  no-op.  Any non-
1b510 7a 65 72 6f 20 22 48 48 3a 4d 4d 22 20 73 75 66  zero "HH:MM" suf
1b520 66 69 78 20 69 73 0a 73 75 62 74 72 61 63 74 65  fix is.subtracte
1b530 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 69 63  d from the indic
1b540 61 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69  ated date and ti
1b550 6d 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  me in order to c
1b560 6f 6d 70 75 74 65 20 7a 75 6c 75 20 74 69 6d 65  ompute zulu time
1b570 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61  ..For example, a
1b580 6c 6c 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ll of the follow
1b590 69 6e 67 20 74 69 6d 65 20 73 74 72 69 6e 67 73  ing time strings
1b5a0 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a   are equivalent:
1b5b0 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1b5c0 74 65 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30  te>.2013-10-07 0
1b5d0 38 3a 32 33 3a 31 39 2e 31 32 30 3c 62 72 3e 0a  8:23:19.120<br>.
1b5e0 32 30 31 33 2d 31 30 2d 30 37 54 30 38 3a 32 33  2013-10-07T08:23
1b5f0 3a 31 39 2e 31 32 30 5a 3c 62 72 3e 0a 32 30 31  :19.120Z<br>.201
1b600 33 2d 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39  3-10-07 08:23:19
1b610 2e 31 32 30 2d 30 34 3a 30 30 3c 62 72 3e 0a 32  .120-04:00<br>.2
1b620 34 35 36 35 37 32 2e 38 34 39 35 32 36 38 35 0a  456572.84952685.
1b630 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
1b640 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61 74 73 20  p>.^(In formats 
1b650 34 2c 20 37 2c 20 61 6e 64 20 31 30 2c 20 74 68  4, 7, and 10, th
1b660 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63  e fractional sec
1b670 6f 6e 64 73 20 76 61 6c 75 65 20 53 53 2e 53 53  onds value SS.SS
1b680 53 20 63 61 6e 20 68 61 76 65 0a 6f 6e 65 20 6f  S can have.one o
1b690 72 20 6d 6f 72 65 20 64 69 67 69 74 73 20 66 6f  r more digits fo
1b6a0 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 65 63 69  llowing the deci
1b6b0 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 45 78 61 63  mal point.  Exac
1b6c0 74 6c 79 20 74 68 72 65 65 20 64 69 67 69 74 73  tly three digits
1b6d0 20 61 72 65 0a 73 68 6f 77 6e 20 69 6e 20 74 68   are.shown in th
1b6e0 65 20 65 78 61 6d 70 6c 65 73 20 62 65 63 61 75  e examples becau
1b6f0 73 65 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73  se only the firs
1b700 74 20 74 68 72 65 65 20 64 69 67 69 74 73 20 61  t three digits a
1b710 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 74  re significant.t
1b720 6f 20 74 68 65 20 72 65 73 75 6c 74 2c 20 62 75  o the result, bu
1b730 74 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69  t the input stri
1b740 6e 67 20 63 61 6e 20 68 61 76 65 20 66 65 77 65  ng can have fewe
1b750 72 20 6f 72 20 6d 6f 72 65 20 74 68 61 6e 20 74  r or more than t
1b760 68 72 65 65 20 64 69 67 69 74 73 0a 61 6e 64 20  hree digits.and 
1b770 74 68 65 20 64 61 74 65 2f 74 69 6d 65 20 66 75  the date/time fu
1b780 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 74 69  nctions will sti
1b790 6c 6c 20 6f 70 65 72 61 74 65 20 63 6f 72 72 65  ll operate corre
1b7a0 63 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61 72 6c  ctly.)^.Similarl
1b7b0 79 2c 20 66 6f 72 6d 61 74 20 31 32 20 69 73 20  y, format 12 is 
1b7c0 73 68 6f 77 6e 20 77 69 74 68 20 31 30 20 73 69  shown with 10 si
1b7d0 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
1b7e0 2c 20 62 75 74 20 74 68 65 20 64 61 74 65 2f 74  , but the date/t
1b7f0 69 6d 65 0a 66 75 6e 63 74 69 6f 6e 73 20 77 69  ime.functions wi
1b800 6c 6c 20 72 65 61 6c 6c 79 20 61 63 63 65 70 74  ll really accept
1b810 20 61 73 20 6d 61 6e 79 20 6f 72 20 61 73 20 66   as many or as f
1b820 65 77 20 64 69 67 69 74 73 20 61 73 20 61 72 65  ew digits as are
1b830 20 6e 65 63 65 73 73 61 72 79 20 74 6f 0a 72 65   necessary to.re
1b840 70 72 65 73 65 6e 74 20 74 68 65 20 4a 75 6c 69  present the Juli
1b850 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 2e 0a 3c  an day number..<
1b860 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65  /p>..<h3>Modifie
1b870 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  rs</h3>..<p>^The
1b880 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e   time string can
1b890 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
1b8a0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64  zero or more mod
1b8b0 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74  ifiers that .alt
1b8c0 65 72 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74  er date and/or t
1b8d0 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64 69 66  ime. ^Each modif
1b8e0 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66 6f  ier.is a transfo
1b8f0 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
1b900 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 74  applied to the t
1b910 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69 74 73  ime value to its
1b920 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65 72   left..^Modifier
1b930 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 66 72  s are applied fr
1b940 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
1b950 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f 72  ; order is impor
1b960 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61 69  tant..^(The avai
1b970 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73 20  lable modifiers 
1b980 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c  are as follows.<
1b990 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e  /p>..<ol>.<li> N
1b9a0 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e  NN days.<li> NNN
1b9b0 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20   hours.<li> NNN 
1b9c0 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e  minutes.<li> NNN
1b9d0 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c  .NNNN seconds.<l
1b9e0 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c  i> NNN months.<l
1b9f0 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69  i> NNN years.<li
1ba00 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68  > start of month
1ba10 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 79  .<li> start of y
1ba20 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  ear.<li> start o
1ba30 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64  f day.<li> weekd
1ba40 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70  ay N.<li> unixep
1ba50 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69  och.<li> localti
1ba60 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f  me.<li> utc .</o
1ba70 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69  l>)^..<p>^The fi
1ba80 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69 65 72  rst six modifier
1ba90 73 20 28 31 20 74 68 72 6f 75 67 68 20 36 29 20  s (1 through 6) 
1baa0 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68 65 20  .simply add the 
1bab0 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75 6e 74  specified amount
1bac0 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68 65 20   of time to the 
1bad0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 0a 73  date and time .s
1bae0 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
1baf0 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73 74  preceding timest
1bb00 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69 65  ring and modifie
1bb10 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20 22  rs..^Note that "
1bb20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74  &plusmn;NNN mont
1bb30 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65 6e  hs" works by ren
1bb40 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67 69  dering the origi
1bb50 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74 68  nal date into.th
1bb60 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72  e YYYY-MM-DD for
1bb70 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65 20  mat, adding the 
1bb80 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74  &plusmn;NNN to t
1bb90 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75  he MM month valu
1bba0 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a  e, then.normaliz
1bbb0 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e 20  ing the result. 
1bbc0 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78 61 6d   ^Thus, for exam
1bbd0 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32 30  ple, the data 20
1bbe0 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69 65  01-03-31 modifie
1bbf0 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27 20  d.by '+1 month' 
1bc00 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64 73  initially yields
1bc10 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75 74   2001-04-31, but
1bc20 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73 20   April only has 
1bc30 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20 64  30 days.so the d
1bc40 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a 65  ate is normalize
1bc50 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31 2e  d to 2001-05-01.
1bc60 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65 66 66    ^A similar eff
1bc70 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e 0a  ect occurs when.
1bc80 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
1bc90 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32 39  e is February 29
1bca0 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20 61   of a leapyear a
1bcb0 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72 20  nd the modifier 
1bcc0 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65 61  is.&plusmn;N yea
1bcd0 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e 6f  rs where N is no
1bce0 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  t a multiple of 
1bcf0 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  four.</p>..<p>^T
1bd00 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d 6f  he "start of" mo
1bd10 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f 75  difiers (7 throu
1bd20 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65 20  gh 9) shift the 
1bd30 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20 0a  date backwards .
1bd40 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
1bd50 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
1bd60 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20 64  month, year or d
1bd70 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ay.</p>..<p>^The
1bd80 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69 66   "weekday" modif
1bd90 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68 65  ier advances the
1bda0 20 64 61 74 65 20 66 6f 72 77 61 72 64 20 74 6f   date forward to
1bdb0 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20 0a   the next date .
1bdc0 77 68 65 72 65 20 74 68 65 20 77 65 65 6b 64 61  where the weekda
1bdd0 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20 53  y number is N. S
1bde0 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64  unday is 0, Mond
1bdf0 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f 20  ay is 1, and so 
1be00 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  forth.</p>..<p>^
1be10 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  The "unixepoch" 
1be20 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e  modifier (11) on
1be30 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69  ly works if it i
1be40 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
1be50 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67  ws .a timestring
1be60 20 69 6e 20 74 68 65 20 44 44 44 44 44 44 44 44   in the DDDDDDDD
1be70 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69  DD format. .^Thi
1be80 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73 65  s modifier cause
1be90 73 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44  s the DDDDDDDDDD
1bea0 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65 74   to be interpret
1beb0 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c  ed not .as a Jul
1bec0 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 61  ian day number a
1bed0 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f  s it normally wo
1bee0 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a 5b  uld be, but as.[
1bef0 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1bf00 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69  dia.org/wiki/Uni
1bf10 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54 69  x_time | Unix Ti
1bf20 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65  me] - the .numbe
1bf30 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
1bf40 63 65 20 31 39 37 30 2e 20 20 49 66 20 74 68 65  ce 1970.  If the
1bf50 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1bf60 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66  ifier does not.f
1bf70 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72 69  ollow a timestri
1bf80 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 44  ng of the form D
1bf90 44 44 44 44 44 44 44 44 44 20 77 68 69 63 68 20  DDDDDDDDD which 
1bfa0 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6e 75  expresses the nu
1bfb0 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20  mber.of seconds 
1bfc0 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69 66  since 1970 or if
1bfd0 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72 73   other modifiers
1bfe0 0a 73 65 70 61 72 61 74 65 20 74 68 65 20 22 75  .separate the "u
1bff0 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1c000 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44 44  er from prior DD
1c010 44 44 44 44 44 44 44 44 20 74 68 65 6e 20 74 68  DDDDDDDD then th
1c020 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e.behavior is un
1c030 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74 6f 20  defined..Due to 
1c040 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69 74 61  precision limita
1c050 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20 62 79  tions imposed by
1c060 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
1c070 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34 2d 62  ions use.of 64-b
1c080 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74 68 65  it integers, the
1c090 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1c0a0 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73  ifier only works
1c0b0 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77 65   for.dates betwe
1c0c0 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30  en 0000-01-01 00
1c0d0 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32 2d  :00:00 and 5352-
1c0e0 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20 28  11-01 10:52:47 (
1c0f0 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36  unix times.of -6
1c100 32 31 36 37 32 31 39 32 30 30 20 74 68 72 6f 75  2167219200 throu
1c110 67 68 20 31 30 36 37 35 31 39 39 31 36 37 29 2e  gh 10675199167).
1c120 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 6c  </p>..<p>^The "l
1c130 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69  ocaltime" modifi
1c140 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73 20  er (12) assumes 
1c150 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  the time string 
1c160 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69  to its left is i
1c170 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  n.Universal Coor
1c180 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
1c190 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74  C) and adjusts t
1c1a0 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73  he time.string s
1c1b0 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c 61  o that it displa
1c1c0 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49  ys localtime.  I
1c1d0 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f  f "localtime".fo
1c1e0 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61  llows a time tha
1c1f0 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68  t is not UTC, th
1c200 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
1c210 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28  is undefined..^(
1c220 54 68 65 20 22 75 74 63 22 20 69 73 20 74 68 65  The "utc" is the
1c230 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f   opposite of "lo
1c240 63 61 6c 74 69 6d 65 22 2e 20 20 22 75 74 63 22  caltime".  "utc"
1c250 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 74 68   assumes that th
1c260 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73 20  e string.to its 
1c270 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65 20 6c  left is in the l
1c280 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61 6e  ocal timezone an
1c290 64 20 61 64 6a 75 73 74 73 20 74 68 61 74 20 73  d adjusts that s
1c2a0 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20 55  tring to be in U
1c2b0 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72 69  TC.)^.If the pri
1c2c0 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f 74  or string is not
1c2d0 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20 74   in localtime, t
1c2e0 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
1c2f0 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65 66  f "utc" is.undef
1c300 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45  ined.</p>..<h3>E
1c310 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28  xamples</h3>..^(
1c320 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
1c330 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a  urrent date.<p>.
1c340 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c  .<blockquote>SEL
1c350 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b  ECT date('now');
1c360 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1c370 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1c380 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74 68  e last day of th
1c390 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2e  e current month.
1c3a0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1c3b0 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e  e>SELECT date('n
1c3c0 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d 6f  ow','start of mo
1c3d0 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c  nth','+1 month',
1c3e0 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f  '-1 day');.</blo
1c3f0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1c400 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  >Compute the dat
1c410 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e  e and time given
1c420 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d   a unix timestam
1c430 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f 70  p 1092941466.</p
1c440 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1c450 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65 74      SELECT datet
1c460 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c 20  ime(1092941466, 
1c470 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f  'unixepoch');.</
1c480 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
1c490 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
1c4a0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69  date and time gi
1c4b0 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73  ven a unix times
1c4c0 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2c  tamp 1092941466,
1c4d0 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74 65   and .compensate
1c4e0 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c 20   for your local 
1c4f0 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c  timezone.</p>..<
1c500 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1c510 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30  LECT datetime(10
1c520 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65  92941466, 'unixe
1c530 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69 6d  poch', 'localtim
1c540 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  e');.</blockquot
1c550 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
1c560 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 75  te the current u
1c570 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f  nix timestamp.</
1c580 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1c590 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
1c5a0 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a  me('%s','now');.
1c5b0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1c5c0 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1c5d0 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73  e number of days
1c5e0 20 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e 69   since the signi
1c5f0 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44 65 63  ng of the US Dec
1c600 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64 65  laration.of Inde
1c610 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c  pendence.</p>..<
1c620 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1c630 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28 27  LECT julianday('
1c640 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61  now') - julianda
1c650 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29 3b  y('1776-07-04');
1c660 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1c670 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1c680 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63  he number of sec
1c690 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61 72  onds since a par
1c6a0 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69  ticular moment i
1c6b0 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c  n 2004:</p>..<bl
1c6c0 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1c6d0 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27  CT strftime('%s'
1c6e0 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74 69  ,'now') - strfti
1c6f0 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30 31  me('%s','2004-01
1c700 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a  -01 02:34:56');.
1c710 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1c720 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20 74  .^(<p>.Compute t
1c730 68 65 20 64 61 74 65 20 6f 66 20 74 68 65 20 66  he date of the f
1c740 69 72 73 74 20 54 75 65 73 64 61 79 20 69 6e 20  irst Tuesday in 
1c750 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65 20  October.for the 
1c760 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c 2f  current year..</
1c770 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1c780 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 28 27  .  SELECT date('
1c790 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 79  now','start of y
1c7a0 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73 27  ear','+9 months'
1c7b0 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a 3c  ,'weekday 2');.<
1c7c0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1c7d0 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1c7e0 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20   time since the 
1c7f0 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65  unix epoch in se
1c800 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72  conds .(like str
1c810 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
1c820 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65  ) except include
1c830 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  s fractional par
1c840 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  t):</p>..<blockq
1c850 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28  uote>.  SELECT (
1c860 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29  julianday('now')
1c870 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36   - 2440587.5)*86
1c880 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  400.0;.</blockqu
1c890 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76 65  ote>)^..<h3>Cave
1c8a0 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68 33  ats And Bugs</h3
1c8b0 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74  >..<p>The comput
1c8c0 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74  ation of local t
1c8d0 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61 76  ime depends heav
1c8e0 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d 20  ily on the whim 
1c8f0 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73 20  .of politicians 
1c900 61 6e 64 20 69 73 20 74 68 75 73 20 64 69 66 66  and is thus diff
1c910 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f 72  icult to get cor
1c920 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f  rect for .all lo
1c930 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73 20  cales. ^In this 
1c940 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
1c950 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
1c960 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f 6e  ibrary .function
1c970 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 69   localtime_r() i
1c980 73 20 75 73 65 64 20 74 6f 20 61 73 73 69 73 74  s used to assist
1c990 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61 74   in the calculat
1c9a0 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74 69  ion of .local ti
1c9b0 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63 61  me.  ^(The .loca
1c9c0 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e 63  ltime_r() C func
1c9d0 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e  tion normally on
1c9e0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65 61  ly works for yea
1c9f0 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30 20  rs.between 1970 
1ca00 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64 61  and 2037. For da
1ca10 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 69 73  tes outside this
1ca20 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a   range, SQLite .
1ca30 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70 20  attempts to map 
1ca40 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61 6e  the year into an
1ca50 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61 72   equivalent year
1ca60 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72 61   within .this ra
1ca70 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c 63  nge, do the calc
1ca80 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61  ulation, then ma
1ca90 70 20 74 68 65 20 79 65 61 72 20 62 61 63 6b 2e  p the year back.
1caa0 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68  )^</p>...<p>^(Th
1cab0 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f 6e  ese functions on
1cac0 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74 65  ly work for date
1cad0 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30  s between 0000-0
1cae0 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61 6e  1-01 00:00:00.an
1caf0 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33 3a  d 9999-12-31 23:
1cb00 35 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20 64  59:59 (julidan d
1cb10 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31 30  ay numbers 17210
1cb20 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33 37  59.5 through 537
1cb30 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64  3484.5).)^.For d
1cb40 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 61  ates outside tha
1cb50 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65 73  t range, the res
1cb60 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66 75  ults of these.fu
1cb70 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64 65  nctions are unde
1cb80 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e  fined.</p>..<p>N
1cb90 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73  on-Vista Windows
1cba0 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20   platforms only 
1cbb0 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20  support one set 
1cbc0 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56  of DST rules. .V
1cbd0 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72  ista only suppor
1cbe0 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72  ts two. Therefor
1cbf0 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74  e, on these plat
1cc00 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63  forms, .historic
1cc10 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69  al DST calculati
1cc20 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f  ons will be inco
1cc30 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d  rrect. .For exam
1cc40 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20  ple, in the US, 
1cc50 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54 20  in 2007 the DST 
1cc60 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a  rules changed. .
1cc70 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
1cc80 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c  s platforms appl
1cc90 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20 44  y the new 2007 D
1cca0 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c  ST rules .to all
1ccb0 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73 20   previous years 
1ccc0 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64  as well. Vista d
1ccd0 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74  oes somewhat bet
1cce0 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75  ter.getting resu
1ccf0 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b  lts correct back
1cd00 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74   to 1986, when t
1cd10 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c  he rules were al
1cd20 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a  so changed.</p>.
1cd30 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c  .<p>All internal
1cd40 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73   computations as
1cd50 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70 3a  sume the .[http:
1cd60 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1cd70 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61  rg/wiki/Gregoria
1cd80 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72 65  n_calendar | Gre
1cd90 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d  gorian calendar]
1cda0 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20  .system.  It is 
1cdb0 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61  also assumed tha
1cdc0 74 20 65 76 65 72 79 0a 64 61 79 20 69 73 20 65  t every.day is e
1cdd0 78 61 63 74 6c 79 20 38 36 34 30 30 20 73 65 63  xactly 86400 sec
1cde0 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e  onds in duration
1cdf0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
1ce00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce40 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1ce50 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46  ion {Aggregate F
1ce60 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e  unctions} aggfun
1ce70 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f 74  c {*aggfunc}.</t
1ce80 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67  cl>..<p>.The agg
1ce90 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1cea0 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65   shown below are
1ceb0 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65   available by de
1cec0 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e  fault.  Addition
1ced0 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e  al.aggregate fun
1cee0 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69  ctions written i
1cef0 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64 65 64  n C may be added
1cf00 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c   using the .[sql
1cf10 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
1cf20 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e  tion()]</a>.API.
1cf30 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e  </p>..<p>.^In an
1cf40 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  y aggregate func
1cf50 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20  tion that takes 
1cf60 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
1cf70 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74  t, that argument
1cf80 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64  .can be preceded
1cf90 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
1cfa0 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73  DISTINCT.  ^In s
1cfb0 75 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69  uch cases, dupli
1cfc0 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72  cate.elements ar
1cfd0 65 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72  e filtered befor
1cfe0 65 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 69  e being passed i
1cff0 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74  nto the aggregat
1d000 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72  e function..^For
1d010 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75   example, the fu
1d020 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69  nction "count(di
1d030 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20  stinct X)" will 
1d040 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
1d050 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61  r.of distinct va
1d060 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58  lues of column X
1d070 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
1d080 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
1d090 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20  non-null.values 
1d0a0 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70  in column X..</p
1d0b0 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  >..<table border
1d0c0 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31  =0 cellpadding=1
1d0d0 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66  0>.<tcl>.funcdef
1d0e0 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76 67 20   {avg(X)} {*avg 
1d0f0 7b 61 76 67 28 29 20 61 67 67 72 65 67 61 74 65  {avg() aggregate
1d100 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1d110 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e 63 74  ^The avg() funct
1d120 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
1d130 65 20 61 76 65 72 61 67 65 20 76 61 6c 75 65 20  e average value 
1d140 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  of all non-NULL 
1d150 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20  <i>X</i> within 
1d160 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53 74 72  a.  group.  ^Str
1d170 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c  ing and BLOB val
1d180 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  ues that do not 
1d190 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72  look like number
1d1a0 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70 72 65  s are.  interpre
1d1b0 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54 68 65  ted as 0..  ^The
1d1c0 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29   result of avg()
1d1d0 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f   is always a flo
1d1e0 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
1d1f0 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61  e as long as.  a
1d200 74 20 74 68 65 72 65 20 69 73 20 61 74 20 6c 65  t there is at le
1d210 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c  ast one non-NULL
1d220 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66 20 61   input even if a
1d230 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72 65 20  ll.  inputs are 
1d240 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68 65 20  integers.  ^The 
1d250 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20  result of avg() 
1d260 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f  is NULL if and o
1d270 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65 20 61  nly if.  there a
1d280 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  re no non-NULL i
1d290 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63  nputs.  .}..func
1d2a0 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f  def {count(X) co
1d2b0 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20  unt(*)} {*count 
1d2c0 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61  {count() aggrega
1d2d0 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
1d2e0 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58 29 20    ^The count(X) 
1d2f0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1d300 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68  .  a count of th
1d310 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65  e number of time
1d320 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69  s.  that <i>X</i
1d330 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e  > is not NULL in
1d340 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20   a group.  ^The 
1d350 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f  count(*) functio
1d360 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72 67  n.  (with no arg
1d370 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73 20  uments) returns 
1d380 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
1d390 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
1d3a0 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65  group..}..funcde
1d3b0 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  f {group_concat(
1d3c0 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  X) group_concat(
1d3d0 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70  X,Y)} {.  *group
1d3e0 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63  _concat {group_c
1d3f0 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67 61 74  oncat() aggregat
1d400 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a  e function}.} {.
1d410 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e    ^The group_con
1d420 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  cat() function r
1d430 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e  eturns.  a strin
1d440 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20 63  g which is the c
1d450 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a  oncatenation of.
1d460 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76    all non-NULL v
1d470 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69  alues of <i>X</i
1d480 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65 74 65  >.  ^If paramete
1d490 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72  r <i>Y</i> is pr
1d4a0 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69 74 20  esent then.  it 
1d4b0 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73  is used as the s
1d4c0 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74 77 65  eparator.  betwe
1d4d0 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  en instances of 
1d4e0 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f  <i>X</i>.  ^A co
1d4f0 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75 73 65  mma (",") is use
1d500 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74  d as the separat
1d510 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e  or.  if <i>Y</i>
1d520 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20 54 68   is omitted.  Th
1d530 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63  e order of the c
1d540 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c 65 6d  oncatenated elem
1d550 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69 74 72  ents is.  arbitr
1d560 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ary..}..funcdef 
1d570 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67  {max(X)} {*maxAg
1d580 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b  gFunc *agg_max {
1d590 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20  max() aggregate 
1d5a0 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
1d5b0 54 68 65 20 6d 61 78 28 29 20 61 67 67 72 65 67  The max() aggreg
1d5c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  ate function.  r
1d5d0 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d  eturns the maxim
1d5e0 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20  um value of all 
1d5f0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
1d600 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69  oup..  ^The maxi
1d610 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65  mum value is the
1d620 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c   value that woul
1d630 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 6c 61  d be returned la
1d640 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52  st in an.  ORDER
1d650 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d 65 20   BY on the same 
1d660 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67  column.  ^Aggreg
1d670 61 74 65 20 6d 61 78 28 29 20 72 65 74 75 72 6e  ate max() return
1d680 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64  s NULL .  if and
1d690 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61   only if there a
1d6a0 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  re no non-NULL v
1d6b0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
1d6c0 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
1d6d0 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67  min(X)} {*minAgg
1d6e0 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d  Func *agg_min {m
1d6f0 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20 66  in() aggregate f
1d700 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1d710 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65 67 61  he min() aggrega
1d720 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  te function.  re
1d730 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75  turns the minimu
1d740 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  m non-NULL value
1d750 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
1d760 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e  n the group..  ^
1d770 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75  The minimum valu
1d780 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e  e is the first n
1d790 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68  on-NULL value th
1d7a0 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61 72 0a  at would appear.
1d7b0 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59    in an ORDER BY
1d7c0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a   of the column..
1d7d0 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 69 6e    ^Aggregate min
1d7e0 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20  () returns NULL 
1d7f0 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74  if and only if t
1d800 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
1d810 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e  NULL.  values in
1d820 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66   the group..}..f
1d830 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20 74  uncdef {sum(X) t
1d840 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75  otal(X)} {.  *su
1d850 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61  mFunc *sum *tota
1d860 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67 72 65  l.  {sum() aggre
1d870 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20  gate function}. 
1d880 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67   {total() aggreg
1d890 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20  ate function}.} 
1d8a0 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29 20 61  {.  ^The sum() a
1d8b0 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67 72 65  nd total() aggre
1d8c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20  gate functions. 
1d8d0 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66 20 61   return sum of a
1d8e0 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  ll non-NULL valu
1d8f0 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
1d900 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61 72 65  .  ^If there are
1d910 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70   no non-NULL inp
1d920 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d  ut rows then sum
1d930 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c  () returns.  NUL
1d940 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65  L but total() re
1d950 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c  turns 0.0..  NUL
1d960 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c  L is not normall
1d970 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75  y a helpful resu
1d980 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f  lt for the sum o
1d990 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20  f no rows.  but 
1d9a0 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64  the SQL standard
1d9b0 20 72 65 71 75 69 72 65 73 20 69 74 20 61 6e 64   requires it and
1d9c0 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51   most other.  SQ
1d9d0 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
1d9e0 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d  es implement sum
1d9f0 28 29 20 74 68 61 74 20 77 61 79 20 73 6f 20 53  () that way so S
1da00 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e  QLite does it in
1da10 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20   the.  same way 
1da20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63  in order to be c
1da30 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65  ompatible.   The
1da40 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f   non-standard to
1da50 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  tal() function. 
1da60 20 69 73 20 70 72 6f 76 69 64 65 64 20 61 73 20   is provided as 
1da70 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79  a convenient way
1da80 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20   to work around 
1da90 74 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62  this design prob
1daa0 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c  lem.  in the SQL
1dab0 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a   language.</p>..
1dac0 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74    <p>^The result
1dad0 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61   of total() is a
1dae0 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67  lways a floating
1daf0 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20   point value..  
1db00 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73  ^The result of s
1db10 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67  um() is an integ
1db20 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20  er value if all 
1db30 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20  non-NULL inputs 
1db40 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20  are integers..  
1db50 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f  ^If any input to
1db60 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65   sum() is neithe
1db70 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  r an integer or 
1db80 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75  a NULL.  then su
1db90 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c  m() returns a fl
1dba0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
1dbb0 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74  ue.  which might
1dbc0 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61   be an approxima
1dbd0 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65  tion to the true
1dbe0 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e   sum.</p>..  <p>
1dbf0 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f  ^Sum() will thro
1dc00 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76  w an "integer ov
1dc10 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f  erflow" exceptio
1dc20 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a  n if all inputs.
1dc30 20 20 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f    are integers o
1dc40 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20  r NULL.  and an 
1dc50 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
1dc60 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20 70   occurs at any p
1dc70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20  oint during the 
1dc80 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e  computation..  ^
1dc90 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68  Total() never th
1dca0 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20  rows an integer 
1dcb0 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63  overflow..}.</tc
1dcc0 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63  l>.</table>..<tc
1dcd0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
1dce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dcf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd20 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54  #.Section INSERT
1dd30 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54 20   insert {INSERT 
1dd40 2a 49 4e 53 45 52 54 73 7d 0a 0a 52 65 63 75 72  *INSERTs}..Recur
1dd50 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
1dd60 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 0a 3c 2f  m insert-stmt.</
1dd70 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 53  tcl>..<p>The INS
1dd80 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  ERT statement co
1dd90 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62 61 73  mes in three bas
1dda0 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e  ic forms.  .<ul>
1ddb0 0a 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 66 69 72  .<li><p>^The fir
1ddc0 73 74 20 66 6f 72 6d 20 28 77 69 74 68 20 74 68  st form (with th
1ddd0 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77 6f  e "VALUES" keywo
1dde0 72 64 29 20 63 72 65 61 74 65 73 20 6f 6e 65 20  rd) creates one 
1ddf0 6f 72 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77 73  or more.new rows
1de00 20 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67 20   in.an existing 
1de10 74 61 62 6c 65 2e 20 5e 49 66 20 6e 6f 20 63 6f  table. ^If no co
1de20 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65  lumn-list is spe
1de30 63 69 66 69 65 64 20 74 68 65 6e 20 74 68 65 20  cified then the 
1de40 6e 75 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65 73  number.of values
1de50 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 65   inserted into e
1de60 61 63 68 20 72 6f 77 0a 6d 75 73 74 20 62 65 20  ach row.must be 
1de70 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
1de80 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1de90 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
1dea0 5e 49 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68  ^In this case.th
1deb0 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
1dec0 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d  uating the left-
1ded0 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
1dee0 69 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66 0a  in each term of.
1def0 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74 20  the VALUES list 
1df00 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
1df10 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63   the left-most c
1df20 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 65 61 63  olumn of the eac
1df30 68 20 6e 65 77 20 72 6f 77 2c 0a 61 6e 64 20 66  h new row,.and f
1df40 6f 72 74 68 20 66 6f 72 20 65 61 63 68 20 73 75  orth for each su
1df50 62 73 65 71 75 65 6e 74 20 65 78 70 72 65 73 73  bsequent express
1df60 69 6f 6e 2e 20 5e 49 66 20 61 0a 63 6f 6c 75 6d  ion. ^If a.colum
1df70 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66  n-list is specif
1df80 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75  ied, then the nu
1df90 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69  mber of values i
1dfa0 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  n each term of t
1dfb0 68 65 0a 56 41 4c 55 45 20 6c 69 73 74 20 6d 75  he.VALUE list mu
1dfc0 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d  st match the num
1dfd0 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64  ber of.specified
1dfe0 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20   columns. ^Each 
1dff0 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c  of the named col
1e000 75 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65 77 20  umns of the new 
1e010 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64  row is populated
1e020 0a 77 69 74 68 20 74 68 65 20 72 65 73 75 6c 74  .with the result
1e030 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  s of evaluating 
1e040 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
1e050 67 20 56 41 4c 55 45 53 20 65 78 70 72 65 73 73  g VALUES express
1e060 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75  ion. ^Table.colu
1e070 6d 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  mns that do not 
1e080 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f  appear in the co
1e090 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 70 6f  lumn list are po
1e0a0 70 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65  pulated with the
1e0b0 20 64 65 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20   default.column 
1e0c0 76 61 6c 75 65 20 28 73 70 65 63 69 66 69 65 64  value (specified
1e0d0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
1e0e0 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
1e0f0 74 65 6d 65 6e 74 29 2c 20 6f 72 20 77 69 74 68  tement), or with
1e100 20 4e 55 4c 4c 20 69 66 0a 6e 6f 20 64 65 66 61   NULL if.no defa
1e110 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70 65  ult value is spe
1e120 63 69 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e  cified...<li><p>
1e130 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
1e140 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74  of the INSERT st
1e150 61 74 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73  atement contains
1e160 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1e170 65 6e 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61  ent.instead of a
1e180 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20   VALUES clause. 
1e190 5e 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20  ^A new entry is 
1e1a0 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
1e1b0 65 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68  e table for each
1e1c0 0a 72 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74  .row of data ret
1e1d0 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69  urned by executi
1e1e0 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  ng the SELECT st
1e1f0 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63  atement. ^If a c
1e200 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70  olumn-list is.sp
1e210 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d  ecified, the num
1e220 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1e230 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
1e240 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20  the SELECT must 
1e250 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74  be the same.as t
1e260 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  he number of ite
1e270 6d 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ms in the column
1e280 2d 6c 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73  -list. ^Otherwis
1e290 65 2c 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d  e, if no column-
1e2a0 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69 65  list is.specifie
1e2b0 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  d, the number of
1e2c0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1e2d0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45  result of the SE
1e2e0 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68 65  LECT must be the
1e2f0 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d   same.as the num
1e300 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1e310 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e  n the table. ^An
1e320 79 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  y SELECT stateme
1e330 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 5b 63  nt, including.[c
1e340 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 5d  ompound SELECTs]
1e350 20 61 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74   and SELECT stat
1e360 65 6d 65 6e 74 73 20 77 69 74 68 20 5b 4f 52 44  ements with [ORD
1e370 45 52 20 42 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c  ER BY] and/or [L
1e380 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 2c 20 0a  IMIT] clauses, .
1e390 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 61  may be used in a
1e3a0 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
1e3b0 6e 74 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 2e  nt of this form.
1e3c0 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 74 68 69  ..<li><p>The thi
1e3d0 72 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e  rd form of an IN
1e3e0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69  SERT statement i
1e3f0 73 20 77 69 74 68 20 44 45 46 41 55 4c 54 20 56  s with DEFAULT V
1e400 41 4c 55 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53  ALUES..^(The INS
1e410 45 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20  ERT ... DEFAULT 
1e420 56 41 4c 55 45 53 20 73 74 61 74 65 6d 65 6e 74  VALUES statement
1e430 20 69 6e 73 65 72 74 73 20 61 20 73 69 6e 67 6c   inserts a singl
1e440 65 20 6e 65 77 20 72 6f 77 20 69 6e 74 6f 20 74  e new row into t
1e450 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29  he.named table.)
1e460 5e 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ^ ^Each column o
1e470 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73  f the new row is
1e480 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20   populated with 
1e490 69 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75  its default valu
1e4a0 65 2c 0a 6f 72 20 77 69 74 68 20 61 20 4e 55 4c  e,.or with a NUL
1e4b0 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c 74 20  L if no default 
1e4c0 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69  value is specifi
1e4d0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
1e4e0 65 20 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69 74  e column.definit
1e4f0 69 6f 6e 20 69 6e 20 74 68 65 20 43 52 45 41 54  ion in the CREAT
1e500 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
1e510 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54  t...</ul>..<p>^T
1e520 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
1e530 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
1e540 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61  ws the specifica
1e550 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72  tion of an alter
1e560 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e  native.constrain
1e570 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
1e580 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
1e590 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
1e5a0 69 73 20 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f  is one INSERT co
1e5b0 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73  mmand..See the s
1e5c0 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f  ection titled.[O
1e5d0 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20  N CONFLICT] for 
1e5e0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1e5f0 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70  mation..For comp
1e600 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d  atibility with M
1e610 79 53 51 4c 2c 20 5e 74 68 65 20 70 61 72 73 65  ySQL, ^the parse
1e620 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65  r allows the use
1e630 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b   of the.single k
1e640 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22  eyword <a href="
1e650 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d  lang_replace.htm
1e660 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61  l">REPLACE</a> a
1e670 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20  s an .alias for 
1e680 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41  "INSERT OR REPLA
1e690 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f  CE"...<p>^(The o
1e6a0 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 64 61 74 61  ptional "<i>data
1e6b0 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  base-name</i><b>
1e6c0 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78 20 6f 6e  .</b>" prefix on
1e6d0 20 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61   the <i>table-na
1e6e0 6d 65 3c 2f 69 3e 0a 69 73 20 73 75 70 70 6f 72  me</i>.is suppor
1e6f0 74 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20  t for top-level 
1e700 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
1e710 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20  s only.)^  ^The 
1e720 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20  table name must 
1e730 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64 20 66  be.unqualified f
1e740 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  or INSERT statem
1e750 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72 20  ents that occur 
1e760 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45 20 54  within [CREATE T
1e770 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
1e780 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20  ts..^Similarly, 
1e790 74 68 65 20 22 44 45 46 41 55 4c 54 20 56 41 4c  the "DEFAULT VAL
1e7a0 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65  UES" form of the
1e7b0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
1e7c0 74 20 69 73 20 73 75 70 70 6f 72 74 65 64 20 66  t is supported f
1e7d0 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53  or.top-level INS
1e7e0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
1e7f0 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20  nly and not for 
1e800 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
1e810 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67 65 72  s within.trigger
1e820 73 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  s..<p>..<tcl>.##
1e830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e870 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1e880 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43  tion {ON CONFLIC
1e890 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69  T clause} confli
1e8a0 63 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c  ct {{conflict cl
1e8b0 61 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49  ause} {ON CONFLI
1e8c0 43 54 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  CT}}..RecursiveB
1e8d0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e  ubbleDiagram con
1e8e0 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74  flict-clause.</t
1e8f0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  cl>..<p>The ON C
1e900 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1e910 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65  s not a separate
1e920 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49   SQL command.  I
1e930 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64  t is a.non-stand
1e940 61 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20  ard clause that 
1e950 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61  can appear in ma
1e960 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d  ny other SQL com
1e970 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76  mands..It is giv
1e980 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69  en its own secti
1e990 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d  on in this docum
1e9a0 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69  ent because it i
1e9b0 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74  s not.part of st
1e9c0 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74  andard SQL and t
1e9d0 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e  herefore might n
1e9e0 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c  ot be familiar.<
1e9f0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e  /p>..<p>^The syn
1ea00 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  tax for the ON C
1ea10 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
1ea20 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65  s as shown above
1ea30 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20   for.the CREATE 
1ea40 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  TABLE command.  
1ea50 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20  ^For the INSERT 
1ea60 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61  and.UPDATE comma
1ea70 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  nds, the keyword
1ea80 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20  s "ON CONFLICT" 
1ea90 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20  are replaced by 
1eaa0 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65  "OR" so that.the
1eab0 20 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f   syntax reads mo
1eac0 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46  re naturally.  F
1ead0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74  or example, inst
1eae0 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f  ead of."INSERT O
1eaf0 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
1eb00 45 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45  E" we have "INSE
1eb10 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54  RT OR IGNORE"..T
1eb20 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e  he keywords chan
1eb30 67 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69  ge but the meani
1eb40 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65  ng of the clause
1eb50 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74   is the same.eit
1eb60 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70  her way.</p>..<p
1eb70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
1eb80 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
1eb90 74 6f 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f  to UNIQUE and NO
1eba0 54 20 4e 55 4c 4c 0a 63 6f 6e 73 74 72 61 69 6e  T NULL.constrain
1ebb0 74 73 20 28 61 6e 64 20 74 6f 20 50 52 49 4d 41  ts (and to PRIMA
1ebc0 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  RY KEY constrain
1ebd0 74 73 20 77 68 69 63 68 20 66 6f 72 20 74 68 65  ts which for the
1ebe0 20 70 75 72 70 6f 73 65 73 20 0a 6f 66 20 74 68   purposes .of th
1ebf0 69 73 20 73 65 63 74 69 6f 6e 20 61 72 65 20 74  is section are t
1ec00 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73  he same thing as
1ec10 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
1ec20 6e 74 73 29 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e  nts)..The ON CON
1ec30 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 20  FLICT algorithm 
1ec40 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c 79 20 74  does not.apply t
1ec50 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  o [FOREIGN KEY c
1ec60 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a 54 68 65  onstraints]..The
1ec70 72 65 20 61 72 65 20 66 69 76 65 20 63 6f 6e 66  re are five conf
1ec80 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
1ec90 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f 69 63 65  algorithm choice
1eca0 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f  s:.ROLLBACK, ABO
1ecb0 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45  RT, FAIL, IGNORE
1ecc0 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e  , and REPLACE..^
1ecd0 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 66  The default conf
1ece0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
1ecf0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f  algorithm is ABO
1ed00 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61  RT.  This.is wha
1ed10 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e  t they mean:</p>
1ed20 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f  ..<dl>.<dt><b>RO
1ed30 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a  LLBACK</b></dt>.
1ed40 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
1ed50 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
1ed60 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1ed70 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 4f 4c   occurs, the ROL
1ed80 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e  LBACK.resolution
1ed90 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74   algorithm abort
1eda0 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  s the current SQ
1edb0 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  L statement with
1edc0 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  .an SQLITE_CONST
1edd0 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20  RAINT error and 
1ede0 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68 65 20 63  rolls back the c
1edf0 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
1ee00 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72 61 6e 73  on..^If no trans
1ee10 61 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76 65  action is.active
1ee20 20 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65   (other than the
1ee30 20 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61 63   implied transac
1ee40 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72 65  tion that is cre
1ee50 61 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f  ated on every.co
1ee60 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 65 20  mmand) then the 
1ee70 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f 6c 75 74  ROLLBACK resolut
1ee80 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f  ion algorithm wo
1ee90 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
1eea0 74 68 65 0a 41 42 4f 52 54 20 61 6c 67 6f 72 69  the.ABORT algori
1eeb0 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  thm.</p></dd>..<
1eec0 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c  dt><b>ABORT</b><
1eed0 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
1eee0 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65  en an applicable
1eef0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1ef00 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
1ef10 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c 75 74 69  e ABORT.resoluti
1ef20 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f  on algorithm abo
1ef30 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
1ef40 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 77 69  SQL statement.wi
1ef50 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e  th an SQLITE_CON
1ef60 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e  STRAINT error an
1ef70 64 20 62 61 63 6b 73 20 6f 75 74 20 61 6e 79 20  d backs out any 
1ef80 63 68 61 6e 67 65 73 0a 6d 61 64 65 20 62 79 20  changes.made by 
1ef90 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20  the current SQL 
1efa0 73 74 61 74 65 6d 65 6e 74 3b 20 62 75 74 20 63  statement; but c
1efb0 68 61 6e 67 65 73 20 63 61 75 73 65 64 0a 62 79  hanges caused.by
1efc0 20 70 72 69 6f 72 20 53 51 4c 20 73 74 61 74 65   prior SQL state
1efd0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  ments within the
1efe0 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f   same transactio
1eff0 6e 20 61 72 65 20 70 72 65 73 65 72 76 65 64 20  n are preserved 
1f000 61 6e 64 20 74 68 65 0a 74 72 61 6e 73 61 63 74  and the.transact
1f010 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69  ion remains acti
1f020 76 65 2e 0a 54 68 69 73 20 69 73 20 74 68 65 20  ve..This is the 
1f030 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
1f040 20 61 6e 64 20 74 68 65 20 62 65 68 61 76 69 6f   and the behavio
1f050 72 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  r specified by t
1f060 68 65 20 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e  he SQL.standard.
1f070 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
1f080 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a  b>FAIL</b></dt>.
1f090 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
1f0a0 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
1f0b0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1f0c0 20 6f 63 63 75 72 73 2c 20 74 68 65 20 46 41 49   occurs, the FAI
1f0d0 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  L.resolution alg
1f0e0 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68  orithm aborts th
1f0f0 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
1f100 61 74 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a  atement with an.
1f110 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
1f120 54 20 65 72 72 6f 72 2e 20 20 5e 42 75 74 20 74  T error.  ^But t
1f130 68 65 20 46 41 49 4c 20 72 65 73 6f 6c 75 74 69  he FAIL resoluti
1f140 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b  on does not.back
1f150 20 6f 75 74 20 70 72 69 6f 72 20 63 68 61 6e 67   out prior chang
1f160 65 73 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  es of the SQL st
1f170 61 74 65 6d 65 6e 74 20 74 68 61 74 20 66 61 69  atement that fai
1f180 6c 65 64 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20  led nor does.it 
1f190 65 6e 64 20 74 68 65 20 74 72 61 6e 73 61 63 74  end the transact
1f1a0 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c  ion..^For exampl
1f1b0 65 2c 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a  e, if an UPDATE.
1f1c0 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e  statement encoun
1f1d0 74 65 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69  tered a constrai
1f1e0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20  nt violation on 
1f1f0 74 68 65 20 31 30 30 74 68 20 72 6f 77 20 74 68  the 100th row th
1f200 61 74 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74  at.it attempts t
1f210 6f 20 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74  o update, then t
1f220 68 65 20 66 69 72 73 74 20 39 39 20 72 6f 77 20  he first 99 row 
1f230 63 68 61 6e 67 65 73 20 61 72 65 20 70 72 65 73  changes are pres
1f240 65 72 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65  erved.but change
1f250 73 20 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e  s to rows 100 an
1f260 64 20 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f  d beyond never o
1f270 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  ccur.</p></dd>..
1f280 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62  <dt><b>IGNORE</b
1f290 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
1f2a0 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
1f2b0 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
1f2c0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
1f2d0 0a 74 68 65 20 49 47 4e 4f 52 45 20 72 65 73 6f  .the IGNORE reso
1f2e0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
1f2f0 20 73 6b 69 70 73 20 74 68 65 20 6f 6e 65 20 72   skips the one r
1f300 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ow that contains
1f310 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  .the constraint 
1f320 76 69 6f 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f  violation and co
1f330 6e 74 69 6e 75 65 73 20 70 72 6f 63 65 73 73 69  ntinues processi
1f340 6e 67 20 73 75 62 73 65 71 75 65 6e 74 20 72 6f  ng subsequent ro
1f350 77 73 0a 6f 66 20 74 68 65 20 53 51 4c 20 73 74  ws.of the SQL st
1f360 61 74 65 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f  atement as if no
1f370 74 68 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67  thing went wrong
1f380 2e 0a 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66  ..Other rows bef
1f390 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20 74 68  ore and after th
1f3a0 65 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61  e row that.conta
1f3b0 69 6e 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  ined the constra
1f3c0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
1f3d0 65 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  e inserted or up
1f3e0 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20  dated.normally. 
1f3f0 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74  ^No error is ret
1f400 75 72 6e 65 64 20 77 68 65 6e 20 74 68 65 20 49  urned when the I
1f410 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20 72  GNORE conflict r
1f420 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69  esolution.algori
1f430 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e  thm is used.</p>
1f440 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45  </dd>..<dt><b>RE
1f450 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  PLACE</b></dt>.<
1f460 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 20 55  dd><p> ^When a U
1f470 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
1f480 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
1f490 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 61  s, the REPLACE a
1f4a0 6c 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65 73  lgorithm.deletes
1f4b0 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f   pre-existing ro
1f4c0 77 73 20 74 68 61 74 20 61 72 65 20 63 61 75 73  ws that are caus
1f4d0 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69  ing the constrai
1f4e0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69  nt violation.pri
1f4f0 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 20  or to inserting 
1f500 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68 65 20  or updating the 
1f510 63 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64 20  current row and 
1f520 74 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74  the command cont
1f530 69 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e 67  inues .executing
1f540 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61   normally..^If a
1f550 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
1f560 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
1f570 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41  ccurs, the REPLA
1f580 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f  CE conflict.reso
1f590 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63 65 73 20  lution replaces 
1f5a0 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77  the NULL value w
1f5b0 69 74 68 0a 74 68 65 20 64 65 66 61 75 6c 74 20  ith.the default 
1f5c0 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63  value for that c
1f5d0 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65  olumn, or if the
1f5e0 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64   column has no d
1f5f0 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68  efault.value, th
1f600 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67  en the ABORT alg
1f610 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 0a  orithm is used..
1f620 5e 49 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73  ^If a CHECK cons
1f630 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
1f640 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50   occurs, the REP
1f650 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
1f660 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74  solution.algorit
1f670 68 6d 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20  hm always works 
1f680 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a  like ABORT.</p>.
1f690 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45  .<p>^When the RE
1f6a0 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72  PLACE conflict r
1f6b0 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65  esolution strate
1f6c0 67 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20  gy deletes rows 
1f6d0 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69  in order to.sati
1f6e0 73 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  sfy a constraint
1f6f0 2c 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  , [CREATE TRIGGE
1f700 52 20 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67  R | delete trigg
1f710 65 72 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64  ers] fire if and
1f720 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73   only if.[recurs
1f730 69 76 65 5f 74 72 69 67 67 65 72 73 20 70 72 61  ive_triggers pra
1f740 67 6d 61 20 7c 20 72 65 63 75 72 73 69 76 65 20  gma | recursive 
1f750 74 72 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e  triggers] are en
1f760 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  abled.</p>..<p>^
1f770 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64  The [sqlite3_upd
1f780 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74  ate_hook | updat
1f790 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69  e hook] is not i
1f7a0 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20  nvoked for rows 
1f7b0 74 68 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64  that.are deleted
1f7c0 20 62 79 20 74 68 65 20 52 45 50 4c 41 43 45 20   by the REPLACE 
1f7d0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
1f7e0 69 6f 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e  ion strategy.  ^
1f7f0 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45  Nor does.REPLACE
1f800 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b   increment the [
1f810 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20  sqlite3_changes 
1f820 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  | change counter
1f830 5d 2e 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e  ]..The exception
1f840 61 6c 20 62 65 68 61 76 69 6f 72 73 20 64 65 66  al behaviors def
1f850 69 6e 65 64 20 69 6e 20 74 68 69 73 20 70 61 72  ined in this par
1f860 61 67 72 61 70 68 20 6d 69 67 68 74 20 63 68 61  agraph might cha
1f870 6e 67 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65  nge .in a future
1f880 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f   release.</p>.</
1f890 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67  dl>..<p>^The alg
1f8a0 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64  orithm specified
1f8b0 20 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73   in the OR claus
1f8c0 65 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  e of an INSERT o
1f8d0 72 20 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64  r UPDATE.overrid
1f8e0 65 73 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d  es any algorithm
1f8f0 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 20   specified in a 
1f900 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49  CREATE TABLE..^I
1f910 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69  f no algorithm i
1f920 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 79 77  s specified anyw
1f930 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20  here, the ABORT 
1f940 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
1f950 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
1f960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9a0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1f9b0 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69  tion REINDEX rei
1f9c0 6e 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 52 65  ndex REINDEX..Re
1f9d0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
1f9e0 67 72 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d  gram reindex-stm
1f9f0 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
1fa00 65 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  e REINDEX comman
1fa10 64 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c  d is used to del
1fa20 65 74 65 20 61 6e 64 20 72 65 63 72 65 61 74 65  ete and recreate
1fa30 20 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63   indices from sc
1fa40 72 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75  ratch..This is u
1fa50 73 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64  seful when the d
1fa60 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63  efinition of a c
1fa70 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
1fa80 65 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c  e has changed..<
1fa90 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
1faa0 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20  REINDEX keyword 
1fab0 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20  is not followed 
1fac0 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73  by a collation-s
1fad0 65 71 75 65 6e 63 65 20 6f 72 20 64 61 74 61 62  equence or datab
1fae0 61 73 65 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e  ase .object iden
1faf0 74 69 66 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c  tifier, then all
1fb00 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20   indices in all 
1fb10 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1fb20 65 73 20 61 72 65 20 72 65 62 75 69 6c 74 2e 0a  es are rebuilt..
1fb30 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e  .<p>^If the REIN
1fb40 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 66  DEX keyword is f
1fb50 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c  ollowed by a col
1fb60 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20  lation-sequence 
1fb70 6e 61 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69  name, then.all i
1fb80 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74  ndices in all at
1fb90 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1fba0 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 61   that use the na
1fbb0 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  med collation se
1fbc0 71 75 65 6e 63 65 73 0a 61 72 65 20 72 65 63 72  quences.are recr
1fbd0 65 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c  eated. ..<p>^Or,
1fbe0 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
1fbf0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1fc00 20 52 45 49 4e 44 45 58 20 69 64 65 6e 74 69 66   REINDEX identif
1fc10 69 65 73 20 61 20 73 70 65 63 69 66 69 63 20 0a  ies a specific .
1fc20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2c 20  database table, 
1fc30 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
1fc40 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1fc50 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
1fc60 61 72 65 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49  are rebuilt. .^I
1fc70 66 20 69 74 20 69 64 65 6e 74 69 66 69 65 73 20  f it identifies 
1fc80 61 20 73 70 65 63 69 66 69 63 20 64 61 74 61 62  a specific datab
1fc90 61 73 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  ase index, then 
1fca0 6a 75 73 74 20 74 68 61 74 20 69 6e 64 65 78 20  just that index 
1fcb0 69 73 20 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c  is recreated...<
1fcc0 70 3e 5e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61  p>^If no <i>data
1fcd0 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73  base-name</i> is
1fce0 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74   specified and t
1fcf0 68 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68  here exists both
1fd00 20 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65   a table or.inde
1fd10 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f  x and a collatio
1fd20 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  n sequence of th
1fd30 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65  e specified name
1fd40 2c 20 53 51 4c 69 74 65 20 69 6e 74 65 72 70 72  , SQLite interpr
1fd50 65 74 73 0a 74 68 69 73 20 61 73 20 61 20 72 65  ets.this as a re
1fd60 71 75 65 73 74 20 74 6f 20 72 65 62 75 69 6c 64  quest to rebuild
1fd70 20 74 68 65 20 69 6e 64 69 63 65 73 20 74 68 61   the indices tha
1fd80 74 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20  t use the named 
1fd90 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1fda0 63 65 2e 0a 54 68 69 73 20 61 6d 62 69 67 75 69  ce..This ambigui
1fdb0 74 79 20 69 6e 20 74 68 65 20 73 79 6e 74 61 78  ty in the syntax
1fdc0 20 6d 61 79 20 62 65 20 61 76 6f 69 64 65 64 20   may be avoided 
1fdd0 62 79 20 61 6c 77 61 79 73 20 73 70 65 63 69 66  by always specif
1fde0 79 69 6e 67 20 61 0a 3c 69 3e 64 61 74 61 62 61  ying a.<i>databa
1fdf0 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e  se-name</i> when
1fe00 20 72 65 69 6e 64 65 78 69 6e 67 20 61 20 73 70   reindexing a sp
1fe10 65 63 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20  ecific table or 
1fe20 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  index...<tcl>.##
1fe30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe70 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1fe80 63 74 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65  ction REPLACE re
1fe90 70 6c 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c  place REPLACE..<
1fea0 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  /tcl>..<p>^The R
1feb0 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69  EPLACE command i
1fec0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1fed0 68 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  he "[ON CONFLICT
1fee0 20 7c 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50   | INSERT OR REP
1fef0 4c 41 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f  LACE]".variant o
1ff00 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63  f the [INSERT] c
1ff10 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61  ommand.  .This a
1ff20 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64  lias is provided
1ff30 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69   for compatibili
1ff40 74 79 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  ty other SQL dat
1ff50 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20  abase engines.  
1ff60 53 65 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54  See the .[INSERT
1ff70 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65  ] command docume
1ff80 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69  ntation for addi
1ff90 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
1ffa0 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e  on.</p>  ..<tcl>
1ffb0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1ffc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20000 0a 53 65 63 74 69 6f 6e 20 7b 57 49 54 48 20 63  .Section {WITH c
20010 6c 61 75 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f  lause} with {{co
20020 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
20030 73 73 69 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52  ssions} WITH}..R
20040 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
20050 61 67 72 61 6d 20 77 69 74 68 2d 63 6c 61 75 73  agram with-claus
20060 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d  e.</tcl>..<p>Com
20070 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73  mon Table Expres
20080 73 69 6f 6e 73 20 6f 72 20 43 54 45 73 20 61 63  sions or CTEs ac
20090 74 20 6c 69 6b 65 20 74 65 6d 70 6f 72 61 72 79  t like temporary
200a0 20 5b 76 69 65 77 73 5d 20 74 68 61 74 20 65 78   [views] that ex
200b0 69 73 74 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65  ist.only for the
200c0 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73   duration of a s
200d0 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
200e0 65 6e 74 2e 20 20 54 68 65 72 65 20 61 72 65 20  ent.  There are 
200f0 74 77 6f 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d  two kinds of.com
20100 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
20110 73 69 6f 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79  sions: "ordinary
20120 22 20 61 6e 64 20 22 72 65 63 75 72 73 69 76 65  " and "recursive
20130 22 2e 20 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d  ". Ordinary .com
20140 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
20150 73 69 6f 6e 73 20 61 72 65 20 68 65 6c 70 66 75  sions are helpfu
20160 6c 20 66 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65  l for making.que
20170 72 69 65 73 20 65 61 73 69 65 72 20 74 6f 20 75  ries easier to u
20180 6e 64 65 72 73 74 61 6e 64 20 62 79 20 66 61 63  nderstand by fac
20190 74 6f 72 69 6e 67 0a 73 75 62 71 75 65 72 69 65  toring.subquerie
201a0 73 20 6f 75 74 20 6f 66 20 74 68 65 20 6d 61 69  s out of the mai
201b0 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  n SQL statement.
201c0 0a 52 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f  .Recursive commo
201d0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
201e0 6f 6e 73 0a 70 72 6f 76 69 64 65 20 74 68 65 20  ons.provide the 
201f0 61 62 69 6c 69 74 79 20 74 6f 20 64 6f 20 68 69  ability to do hi
20200 65 72 61 72 63 68 69 63 61 6c 20 6f 72 0a 72 65  erarchical or.re
20210 63 75 72 73 69 76 65 20 71 75 65 72 69 65 73 20  cursive queries 
20220 6f 66 20 74 72 65 65 73 20 61 6e 64 20 67 72 61  of trees and gra
20230 70 68 73 2c 20 61 20 63 61 70 61 62 69 6c 69 74  phs, a capabilit
20240 79 0a 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 74  y.that is not ot
20250 68 65 72 77 69 73 65 20 61 76 61 69 6c 61 62 6c  herwise availabl
20260 65 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  e in the SQL lan
20270 67 75 61 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63  guage...<p>All c
20280 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
20290 65 73 73 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72  essions (ordinar
202a0 79 20 61 6e 64 20 72 65 63 75 72 73 69 76 65 29  y and recursive)
202b0 20 61 72 65 20 0a 63 72 65 61 74 65 64 20 62 79   are .created by
202c0 20 70 72 65 70 65 6e 64 69 6e 67 20 61 20 57 49   prepending a WI
202d0 54 48 20 63 6c 61 75 73 65 20 69 6e 20 66 72 6f  TH clause in fro
202e0 6e 74 20 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d  nt of a [SELECT]
202f0 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c  , [INSERT], [DEL
20300 45 54 45 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45  ETE],.or [UPDATE
20310 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 20  ] statement.  A 
20320 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75  single WITH clau
20330 73 65 20 63 61 6e 20 73 70 65 63 69 66 79 20 6f  se can specify o
20340 6e 65 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f  ne or more.commo
20350 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
20360 6f 6e 73 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69  ons, some of whi
20370 63 68 20 61 72 65 20 6f 72 64 69 6e 61 72 79 20  ch are ordinary 
20380 61 6e 64 20 73 6f 6d 65 20 6f 66 20 77 68 69 63  and some of whic
20390 68 0a 61 72 65 20 72 65 63 75 72 73 69 76 65 2e  h.are recursive.
203a0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
203b0 6e 74 20 6f 72 64 69 6e 61 72 79 63 74 65 20 7b  nt ordinarycte {
203c0 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  ordinary common 
203d0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
203e0 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64  s}</tcl>.<h3>Ord
203f0 69 6e 61 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62  inary Common Tab
20400 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f  le Expressions</
20410 68 33 3e 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e  h3>..<p>An ordin
20420 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
20430 20 65 78 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b   expression work
20440 73 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  s as if it were 
20450 61 20 5b 76 69 65 77 5d 20 74 68 61 74 0a 65 78  a [view] that.ex
20460 69 73 74 73 20 66 6f 72 20 74 68 65 20 64 75 72  ists for the dur
20470 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c  ation of a singl
20480 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72  e statement.  Or
20490 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
204a0 62 6c 65 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  ble.expressions 
204b0 61 72 65 20 75 73 65 66 75 6c 20 66 6f 72 20 66  are useful for f
204c0 61 63 74 6f 72 69 6e 67 20 6f 75 74 20 73 75 62  actoring out sub
204d0 71 75 65 72 69 65 73 20 61 6e 64 20 6d 61 6b 69  queries and maki
204e0 6e 67 20 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53  ng the overall.S
204f0 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 65 61 73  QL statement eas
20500 69 65 72 20 74 6f 20 72 65 61 64 20 61 6e 64 20  ier to read and 
20510 75 6e 64 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e  understand...<p>
20520 41 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61  A WITH clause ca
20530 6e 20 63 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61  n contain ordina
20540 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ry common table 
20550 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 65 6e  expressions even
20560 20 69 66 0a 69 74 20 69 6e 63 6c 75 64 65 73 20   if.it includes 
20570 74 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65  the RECURSIVE ke
20580 79 77 6f 72 64 2e 20 20 54 68 65 20 75 73 65 20  yword.  The use 
20590 6f 66 20 52 45 43 55 52 53 49 56 45 20 64 6f 65  of RECURSIVE doe
205a0 73 20 6e 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d  s not force.comm
205b0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
205c0 69 6f 6e 73 20 74 6f 20 62 65 20 72 65 63 75 72  ions to be recur
205d0 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f  sive...<tcl>.hd_
205e0 66 72 61 67 6d 65 6e 74 20 72 65 63 75 72 73 69  fragment recursi
205f0 76 65 63 74 65 20 7b 72 65 63 75 72 73 69 76 65  vecte {recursive
20600 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
20610 70 72 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65  pressions} \.{re
20620 63 75 72 73 69 76 65 20 71 75 65 72 79 7d 0a 3c  cursive query}.<
20630 2f 74 63 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73  /tcl>.<h3>Recurs
20640 69 76 65 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65  ive Common Table
20650 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   Expressions</h3
20660 3e 0a 0a 3c 70 3e 41 20 72 65 63 75 72 73 69 76  >..<p>A recursiv
20670 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
20680 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
20690 20 75 73 65 64 20 74 6f 20 77 72 69 74 65 20 61   used to write a
206a0 20 71 75 65 72 79 20 74 68 61 74 0a 77 61 6c 6b   query that.walk
206b0 73 20 61 20 74 72 65 65 20 6f 72 20 67 72 61 70  s a tree or grap
206c0 68 2e 20 20 41 20 72 65 63 75 72 73 69 76 65 20  h.  A recursive 
206d0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
206e0 72 65 73 73 69 6f 6e 20 68 61 73 20 74 68 65 20  ression has the 
206f0 73 61 6d 65 0a 62 61 73 69 63 20 73 79 6e 74 61  same.basic synta
20700 78 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79  x as an ordinary
20710 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
20720 70 72 65 73 73 69 6f 6e 2c 20 62 75 74 20 77 69  pression, but wi
20730 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  th the following
20740 0a 61 64 64 69 74 69 6f 6e 61 6c 20 66 65 61 74  .additional feat
20750 75 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  ures:..<ol>.<li>
20760 20 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74   The "[select-st
20770 6d 74 5d 22 0a 20 20 20 20 20 6d 75 73 74 20 62  mt]".     must b
20780 65 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65  e a [compound se
20790 6c 65 63 74 5d 20 77 68 65 72 65 20 74 68 65 20  lect] where the 
207a0 72 69 67 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70  right-most [comp
207b0 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 20 69  ound-operator] i
207c0 73 0a 20 20 20 20 20 65 69 74 68 65 72 20 55 4e  s.     either UN
207d0 49 4f 4e 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c  ION or UNION ALL
207e0 2e 0a 3c 6c 69 3e 20 54 68 65 20 74 61 62 6c 65  ..<li> The table
207f0 20 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65   named on the le
20800 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20  ft-hand side of 
20810 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20 6d  the AS keyword m
20820 75 73 74 20 61 70 70 65 61 72 0a 20 20 20 20 20  ust appear.     
20830 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20  exactly once in 
20840 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
20850 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73  of the right-mos
20860 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t SELECT stateme
20870 6e 74 0a 20 20 20 20 20 6f 66 20 74 68 65 20 63  nt.     of the c
20880 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20  ompound select, 
20890 61 6e 64 20 6e 6f 77 68 65 72 65 20 65 6c 73 65  and nowhere else
208a0 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70  ..</ol>..<p>To p
208b0 75 74 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61  ut it another wa
208c0 79 2c 20 61 20 72 65 63 75 72 73 69 76 65 20 63  y, a recursive c
208d0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
208e0 65 73 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b  ession must.look
208f0 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77   like the follow
20900 69 6e 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72  ing:..<tcl>Recur
20910 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
20920 6d 20 72 65 63 75 72 73 69 76 65 2d 63 74 65 3c  m recursive-cte<
20930 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 65 20 72 65 66  /tcl>..<p>We ref
20940 65 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  er to the table 
20950 6e 61 6d 65 64 20 62 79 20 74 68 65 20 63 74 65  named by the cte
20960 2d 74 61 62 6c 65 2d 6e 61 6d 65 20 69 6e 20 61  -table-name in a
20970 20 72 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d 6f   recursive.commo
20980 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
20990 6f 6e 20 61 73 20 74 68 65 20 22 72 65 63 75 72  on as the "recur
209a0 73 69 76 65 20 74 61 62 6c 65 22 2e 0a 49 6e 20  sive table"..In 
209b0 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 63 74  the recursive-ct
209c0 65 20 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d  e bubble diagram
209d0 20 61 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75   above, the recu
209e0 72 73 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74  rsive.table must
209f0 20 61 70 70 65 61 72 20 65 78 61 63 74 6c 79 20   appear exactly 
20a00 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  once in the FROM
20a10 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 72   clause of the r
20a20 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 0a  ecursive-select.
20a30 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20 61 70 70  and must not app
20a40 65 61 72 20 61 6e 79 77 68 65 72 65 20 65 6c 73  ear anywhere els
20a50 65 20 69 6e 20 65 69 74 68 65 72 20 74 68 65 20  e in either the 
20a60 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 6f  initial-select o
20a70 72 20 74 68 65 0a 72 65 63 75 72 73 69 76 65 2d  r the.recursive-
20a80 73 65 6c 65 63 74 2c 20 69 6e 63 6c 75 64 69 6e  select, includin
20a90 67 20 73 75 62 71 75 65 72 69 65 73 2e 20 20 54  g subqueries.  T
20aa0 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  he initial-selec
20ab0 74 20 6d 61 79 20 62 65 0a 61 20 5b 63 6f 6d 70  t may be.a [comp
20ac0 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2c 20 62 75  ound select], bu
20ad0 74 20 69 74 20 6d 61 79 20 6e 6f 74 20 69 6e 63  t it may not inc
20ae0 6c 75 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59  lude an ORDER BY
20af0 2c 20 4c 49 4d 49 54 2c 20 6f 72 20 4f 46 46 53  , LIMIT, or OFFS
20b00 45 54 2e 0a 54 68 65 20 72 65 63 75 72 73 69 76  ET..The recursiv
20b10 65 2d 73 65 6c 65 63 74 20 6d 75 73 74 20 62 65  e-select must be
20b20 20 61 20 73 69 6d 70 6c 65 20 73 65 6c 65 63 74   a simple select
20b30 2c 20 6e 6f 74 20 61 20 63 6f 6d 70 6f 75 6e 64  , not a compound
20b40 2e 20 20 54 68 65 0a 72 65 63 75 72 73 69 76 65  .  The.recursive
20b50 2d 73 65 6c 65 63 74 20 69 73 20 61 6c 6c 6f 77  -select is allow
20b60 65 64 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 6e  ed to include an
20b70 20 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54   ORDER BY, LIMIT
20b80 2c 20 61 6e 64 2f 6f 72 20 4f 46 46 53 45 54 2e  , and/or OFFSET.
20b90 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63 20 61  ..<p>The basic a
20ba0 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 63 6f 6d  lgorithm for com
20bb0 70 75 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  puting the conte
20bc0 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  nt of the recurs
20bd0 69 76 65 20 74 61 62 6c 65 0a 69 73 20 61 73 20  ive table.is as 
20be0 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c  follows:..<ol>.<
20bf0 6c 69 3e 20 52 75 6e 20 74 68 65 20 69 6e 69 74  li> Run the init
20c00 69 61 6c 2d 73 65 6c 65 63 74 20 61 6e 64 20 61  ial-select and a
20c10 64 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 74  dd the results t
20c20 6f 20 61 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20  o a queue..<li> 
20c30 57 68 69 6c 65 20 74 68 65 20 71 75 65 75 65 20  While the queue 
20c40 69 73 20 6e 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f  is not empty:.<o
20c50 6c 20 74 79 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e  l type="a">.<li>
20c60 20 45 78 74 72 61 63 74 20 61 20 73 69 6e 67 6c   Extract a singl
20c70 65 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 71  e row from the q
20c80 75 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72  ueue..<li> Inser
20c90 74 20 74 68 61 74 20 73 69 6e 67 6c 65 20 72 6f  t that single ro
20ca0 77 20 69 6e 74 6f 20 74 68 65 20 72 65 63 75 72  w into the recur
20cb0 73 69 76 65 20 74 61 62 6c 65 0a 3c 6c 69 3e 20  sive table.<li> 
20cc0 50 72 65 74 65 6e 64 20 74 68 61 74 20 74 68 65  Pretend that the
20cd0 20 73 69 6e 67 6c 65 20 72 6f 77 20 6a 75 73 74   single row just
20ce0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68   extracted is th
20cf0 65 20 6f 6e 6c 79 0a 20 20 20 20 20 72 6f 77 20  e only.     row 
20d00 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  in the recursive
20d10 20 74 61 62 6c 65 20 61 6e 64 20 72 75 6e 20 74   table and run t
20d20 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
20d30 65 63 74 2c 0a 20 20 20 20 20 61 64 64 69 6e 67  ect,.     adding
20d40 20 61 6c 6c 20 72 65 73 75 6c 74 73 20 74 6f 20   all results to 
20d50 74 68 65 20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e  the queue..</ol>
20d60 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62  .</ol>..<p>The b
20d70 61 73 69 63 20 70 72 6f 63 65 64 75 72 65 20 61  asic procedure a
20d80 62 6f 76 65 20 6d 61 79 20 6d 6f 64 69 66 69 65  bove may modifie
20d90 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d by the followi
20da0 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 72 75  ng additional ru
20db0 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  les:..<ul>.<li><
20dc0 70 3e 0a 20 20 49 66 20 61 20 55 4e 49 4f 4e 20  p>.  If a UNION 
20dd0 6f 70 65 72 61 74 6f 72 20 63 6f 6e 6e 65 63 74  operator connect
20de0 73 20 74 68 65 20 69 6e 69 74 69 61 6c 2d 73 65  s the initial-se
20df0 6c 65 63 74 20 77 69 74 68 20 74 68 65 0a 20 20  lect with the.  
20e00 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
20e10 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 64 64 20  , then only add 
20e20 72 6f 77 73 20 74 6f 20 74 68 65 20 71 75 65 75  rows to the queu
20e30 65 20 69 66 20 6e 6f 20 69 64 65 6e 74 69 63 61  e if no identica
20e40 6c 20 72 6f 77 20 68 61 73 0a 20 20 62 65 65 6e  l row has.  been
20e50 20 70 72 65 76 69 6f 75 73 6c 79 20 61 64 64 65   previously adde
20e60 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20  d to the queue. 
20e70 20 52 65 70 65 61 74 65 64 20 72 6f 77 73 20 61   Repeated rows a
20e80 72 65 20 64 69 73 63 61 72 64 65 64 20 62 65 66  re discarded bef
20e90 6f 72 65 20 62 65 69 6e 67 0a 20 20 61 64 64 65  ore being.  adde
20ea0 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 20 65  d to the queue e
20eb0 76 65 6e 20 69 66 20 74 68 65 20 72 65 70 65 61  ven if the repea
20ec0 74 65 64 20 72 6f 77 73 20 68 61 76 65 20 61 6c  ted rows have al
20ed0 72 65 61 64 79 20 62 65 65 6e 20 65 78 74 72 61  ready been extra
20ee0 63 74 65 64 0a 20 20 66 72 6f 6d 20 74 68 65 20  cted.  from the 
20ef0 71 75 65 75 65 20 62 79 20 74 68 65 20 72 65 63  queue by the rec
20f00 75 72 73 69 6f 6e 20 73 74 65 70 2e 20 20 49 66  ursion step.  If
20f10 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73   the operator is
20f20 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74 68   UNION ALL,.  th
20f30 65 6e 20 61 6c 6c 20 72 6f 77 73 20 67 65 6e 65  en all rows gene
20f40 72 61 74 65 64 20 62 79 20 62 6f 74 68 20 74 68  rated by both th
20f50 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  e initial-select
20f60 20 61 6e 64 20 74 68 65 0a 20 20 72 65 63 75 72   and the.  recur
20f70 73 69 76 65 2d 73 65 6c 65 63 74 20 61 72 65 20  sive-select are 
20f80 61 6c 77 61 79 73 20 61 64 64 65 64 20 74 6f 20  always added to 
20f90 74 68 65 20 71 75 65 75 65 20 65 76 65 6e 20 69  the queue even i
20fa0 66 20 74 68 65 79 20 61 72 65 20 72 65 70 65 61  f they are repea
20fb0 74 73 2e 0a 20 20 57 68 65 6e 20 64 65 74 65 72  ts..  When deter
20fc0 6d 69 6e 69 6e 67 20 69 66 20 61 20 72 6f 77 20  mining if a row 
20fd0 69 73 20 72 65 70 65 61 74 65 64 2c 20 4e 55 4c  is repeated, NUL
20fe0 4c 20 76 61 6c 75 65 73 20 63 6f 6d 70 61 72 65  L values compare
20ff0 0a 20 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20  .  equal to one 
21000 61 6e 6f 74 68 65 72 20 61 6e 64 20 6e 6f 74 20  another and not 
21010 65 71 75 61 6c 20 74 6f 20 61 6e 79 20 6f 74 68  equal to any oth
21020 65 72 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70  er value..<li><p
21030 3e 0a 20 20 54 68 65 20 4c 49 4d 49 54 20 63 6c  >.  The LIMIT cl
21040 61 75 73 65 2c 20 69 66 20 70 72 65 73 65 6e 74  ause, if present
21050 2c 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  , determines the
21060 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
21070 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 20 20 77  of rows that.  w
21080 69 6c 6c 20 65 76 65 72 20 62 65 20 61 64 64 65  ill ever be adde
21090 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
210a0 76 65 20 74 61 62 6c 65 20 69 6e 20 73 74 65 70  ve table in step
210b0 20 32 62 2e 0a 20 20 4f 6e 63 65 20 74 68 65 20   2b..  Once the 
210c0 6c 69 6d 69 74 20 69 73 20 72 65 61 63 68 65 64  limit is reached
210d0 2c 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20  , the recursion 
210e0 73 74 6f 70 73 2e 0a 20 20 41 20 6c 69 6d 69 74  stops..  A limit
210f0 20 6f 66 20 7a 65 72 6f 20 6d 65 61 6e 73 20 74   of zero means t
21100 68 61 74 20 6e 6f 20 72 6f 77 73 20 61 72 65 20  hat no rows are 
21110 65 76 65 72 20 61 64 64 65 64 20 74 6f 20 74 68  ever added to th
21120 65 0a 20 20 72 65 63 75 72 73 69 76 65 20 74 61  e.  recursive ta
21130 62 6c 65 2c 20 61 6e 64 20 61 20 6e 65 67 61 74  ble, and a negat
21140 69 76 65 20 6c 69 6d 69 74 20 6d 65 61 6e 73 20  ive limit means 
21150 61 6e 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75 6d  an unlimited num
21160 62 65 72 20 6f 66 20 72 6f 77 73 0a 20 20 6d 61  ber of rows.  ma
21170 79 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68  y be added to th
21180 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
21190 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65  e..<li><p>.  The
211a0 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
211b0 69 66 20 69 74 20 69 73 20 70 72 65 73 65 6e 74  if it is present
211c0 20 61 6e 64 20 68 61 73 20 61 20 70 6f 73 69 74   and has a posit
211d0 69 76 65 20 76 61 6c 75 65 20 4e 2c 20 70 72 65  ive value N, pre
211e0 76 65 6e 74 73 20 74 68 65 0a 20 20 66 69 72 73  vents the.  firs
211f0 74 20 4e 20 72 6f 77 73 20 66 72 6f 6d 20 62 65  t N rows from be
21200 69 6e 67 20 61 64 64 65 64 20 74 6f 20 74 68 65  ing added to the
21210 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
21220 2e 0a 20 20 54 68 65 20 66 69 72 73 74 20 4e 20  ..  The first N 
21230 72 6f 77 73 20 61 72 65 20 73 74 69 6c 6c 20 70  rows are still p
21240 72 6f 63 65 73 73 65 64 20 62 79 20 74 68 65 20  rocessed by the 
21250 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
21260 3b 20 74 68 65 79 0a 20 20 6a 75 73 74 20 61 72  ; they.  just ar
21270 65 20 6e 6f 74 20 61 64 64 65 64 20 74 6f 20 74  e not added to t
21280 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
21290 6c 65 2e 20 20 52 6f 77 73 20 61 72 65 20 6e 6f  le.  Rows are no
212a0 74 20 63 6f 75 6e 74 65 64 20 74 6f 77 61 72 64  t counted toward
212b0 0a 20 20 66 75 6c 66 69 6c 6c 69 6e 67 20 74 68  .  fulfilling th
212c0 65 20 4c 49 4d 49 54 20 75 6e 74 69 6c 20 61 6c  e LIMIT until al
212d0 6c 20 4f 46 46 53 45 54 20 72 6f 77 73 20 68 61  l OFFSET rows ha
212e0 76 65 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e  ve been skipped.
212f0 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 6e  .<li><p>.  If an
21300 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
21310 20 69 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20   is present, it 
21320 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6f  determines the o
21330 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
21340 77 73 0a 20 20 61 72 65 20 65 78 74 72 61 63 74  ws.  are extract
21350 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75  ed from the queu
21360 65 20 69 6e 20 73 74 65 70 20 32 61 2e 20 20 49  e in step 2a.  I
21370 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 52  f there is no OR
21380 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 0a 20  DER BY clause,. 
21390 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20   then the order 
213a0 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72  in which rows ar
213b0 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 75  e extracted is u
213c0 6e 64 65 66 69 6e 65 64 2e 20 20 28 49 6e 20 74  ndefined.  (In t
213d0 68 65 20 63 75 72 72 65 6e 74 0a 20 20 69 6d 70  he current.  imp
213e0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
213f0 20 71 75 65 75 65 20 62 65 63 6f 6d 65 73 20 61   queue becomes a
21400 20 46 49 46 4f 20 69 66 20 74 68 65 20 4f 52 44   FIFO if the ORD
21410 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
21420 6f 6d 69 74 74 65 64 2c 0a 20 20 62 75 74 20 61  omitted,.  but a
21430 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75  pplications shou
21440 6c 64 20 6e 6f 74 20 64 65 70 65 6e 64 20 6f 6e  ld not depend on
21450 20 74 68 61 74 20 66 61 63 74 20 73 69 6e 63 65   that fact since
21460 20 69 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65   it might change
21470 2e 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68  .).</ul>..<tcl>h
21480 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78 31  d_fragment rcex1
21490 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65 63 75 72  </tcl>.<h4>Recur
214a0 73 69 76 65 20 51 75 65 72 79 20 45 78 61 6d 70  sive Query Examp
214b0 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  les</h4>..<p>The
214c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79   following query
214d0 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 69 6e 74   returns all int
214e0 65 67 65 72 73 20 62 65 74 77 65 65 6e 20 31 20  egers between 1 
214f0 61 6e 64 20 31 30 30 30 30 30 30 3a 0a 0a 3c 62  and 1000000:..<b
21500 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
21510 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
21520 20 63 6e 74 28 78 29 20 41 53 20 28 56 41 4c 55   cnt(x) AS (VALU
21530 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  ES(1) UNION ALL 
21540 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20  SELECT x+1 FROM 
21550 63 6e 74 20 57 48 45 52 45 20 78 3c 31 30 30 30  cnt WHERE x<1000
21560 30 30 30 29 0a 53 45 4c 45 43 54 20 78 20 46 52  000).SELECT x FR
21570 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f  OM cnt;.</pre></
21580 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
21590 43 6f 6e 73 69 64 65 72 20 68 6f 77 20 74 68 69  Consider how thi
215a0 73 20 71 75 65 72 79 20 77 6f 72 6b 73 2e 20 20  s query works.  
215b0 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  The initial-sele
215c0 63 74 0a 72 75 6e 73 20 66 69 72 73 74 20 61 6e  ct.runs first an
215d0 64 20 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67  d returns a sing
215e0 6c 65 20 72 6f 77 0a 77 69 74 68 20 61 20 73 69  le row.with a si
215f0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 22 31 22 2e  ngle column "1".
21600 20 20 54 68 69 73 20 6f 6e 65 20 72 6f 77 20 69    This one row i
21610 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71  s added to the q
21620 75 65 75 65 2e 20 20 49 6e 0a 73 74 65 70 20 32  ueue.  In.step 2
21630 61 2c 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  a, that one row 
21640 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f  is extracted fro
21650 6d 20 74 68 65 20 71 75 65 75 65 20 61 6e 64 20  m the queue and 
21660 61 64 64 65 64 20 74 6f 20 22 63 6e 74 22 2e 0a  added to "cnt"..
21670 54 68 65 6e 20 74 68 65 20 72 65 63 75 72 73 69  Then the recursi
21680 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e  ve-select is run
21690 20 69 6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77   in accordance w
216a0 69 74 68 20 73 74 65 70 20 32 63 20 67 65 6e 65  ith step 2c gene
216b0 72 61 74 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20  rating.a single 
216c0 6e 65 77 20 72 6f 77 20 77 69 74 68 20 76 61 6c  new row with val
216d0 75 65 20 22 32 22 20 74 6f 20 61 64 64 20 74 6f  ue "2" to add to
216e0 20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 65   the queue.  The
216f0 20 71 75 65 75 65 20 73 74 69 6c 6c 0a 68 61 73   queue still.has
21700 20 6f 6e 65 20 72 6f 77 2c 20 73 6f 20 73 74 65   one row, so ste
21710 70 20 32 20 72 65 70 65 61 74 73 2e 20 20 54 68  p 2 repeats.  Th
21720 65 20 22 32 22 20 72 6f 77 20 69 73 20 65 78 74  e "2" row is ext
21730 72 61 63 74 65 64 20 61 6e 64 20 61 64 64 65 64  racted and added
21740 20 74 6f 20 74 68 65 0a 72 65 63 75 72 73 69 76   to the.recursiv
21750 65 20 74 61 62 6c 65 20 62 79 20 73 74 65 70 73  e table by steps
21760 20 32 61 20 61 6e 64 20 32 62 2e 20 20 54 68 65   2a and 2b.  The
21770 6e 20 74 68 65 20 72 6f 77 20 63 6f 6e 74 61 69  n the row contai
21780 6e 69 6e 67 20 32 20 69 73 20 75 73 65 64 20 0a  ning 2 is used .
21790 61 73 20 69 66 20 69 74 20 77 65 72 65 20 74 68  as if it were th
217a0 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65  e complete conte
217b0 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  nt of the recurs
217c0 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  ive table and th
217d0 65 20 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c  e .recursive-sel
217e0 65 63 74 20 69 73 20 72 75 6e 20 61 67 61 69 6e  ect is run again
217f0 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  , resulting in a
21800 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20   row with value 
21810 22 33 22 20 62 65 69 6e 67 20 61 64 64 65 64 0a  "3" being added.
21820 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 54  to the queue.  T
21830 68 69 73 20 72 65 70 65 61 74 73 20 39 39 39 39  his repeats 9999
21840 39 39 20 74 69 6d 65 73 20 75 6e 74 69 6c 20 66  99 times until f
21850 69 6e 61 6c 6c 79 20 61 74 20 73 74 65 70 20 32  inally at step 2
21860 61 20 74 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65  a the.only value
21870 20 6f 6e 20 74 68 65 20 71 75 65 75 65 20 69 73   on the queue is
21880 20 61 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e   a row containin
21890 67 20 31 30 30 30 30 30 30 2e 20 20 54 68 61 74  g 1000000.  That
218a0 20 72 6f 77 20 69 73 0a 65 78 74 72 61 63 74 65   row is.extracte
218b0 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74  d and added to t
218c0 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
218d0 6c 65 2e 20 20 42 75 74 20 74 68 69 73 20 74 69  le.  But this ti
218e0 6d 65 2c 20 74 68 65 0a 57 48 45 52 45 20 63 6c  me, the.WHERE cl
218f0 61 75 73 65 20 63 61 75 73 65 73 20 74 68 65 20  ause causes the 
21900 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
21910 20 74 6f 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f   to return no ro
21920 77 73 2c 20 73 6f 20 74 68 65 0a 71 75 65 75 65  ws, so the.queue
21930 20 72 65 6d 61 69 6e 73 20 65 6d 70 74 79 20 61   remains empty a
21940 6e 64 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  nd the recursion
21950 20 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f   stops...<p><b>O
21960 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65  ptimization note
21970 3a 3c 2f 62 3e 0a 49 6e 20 74 68 65 20 64 69 73  :</b>.In the dis
21980 63 75 73 73 69 6f 6e 20 61 62 6f 76 65 2c 20 73  cussion above, s
21990 74 61 74 65 6d 65 6e 74 73 20 6c 69 6b 65 20 22  tatements like "
219a0 69 6e 73 65 72 74 20 74 68 65 20 72 6f 77 20 69  insert the row i
219b0 6e 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76  nto.the recursiv
219c0 65 20 74 61 62 6c 65 22 20 73 68 6f 75 6c 64 20  e table" should 
219d0 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 20 63 6f  be understood co
219e0 6e 63 65 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20  nceptually, not 
219f0 6c 69 74 65 72 61 6c 6c 79 2e 0a 49 74 20 73 6f  literally..It so
21a00 75 6e 64 73 20 61 73 20 69 66 20 53 51 4c 69 74  unds as if SQLit
21a10 65 20 69 73 20 61 63 63 75 6d 75 6c 61 74 69 6e  e is accumulatin
21a20 67 20 61 20 68 75 67 65 20 74 61 62 6c 65 0a 63  g a huge table.c
21a30 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6d 69  ontaining one mi
21a40 6c 6c 69 6f 6e 20 72 6f 77 73 2c 20 74 68 65 6e  llion rows, then
21a50 20 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64 20   going back and 
21a60 73 63 61 6e 6e 69 6e 67 20 74 68 61 74 20 74 61  scanning that ta
21a70 62 6c 65 0a 66 72 6f 6d 20 74 6f 70 20 74 6f 20  ble.from top to 
21a80 62 6f 74 74 6f 6d 20 74 6f 20 67 65 6e 65 72 61  bottom to genera
21a90 74 65 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  te the result.  
21aa0 57 68 61 74 20 72 65 61 6c 6c 79 20 68 61 70 70  What really happ
21ab0 65 6e 73 0a 69 73 20 74 68 61 74 20 74 68 65 20  ens.is that the 
21ac0 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
21ad0 73 65 65 73 20 74 68 61 74 20 76 61 6c 75 65 73  sees that values
21ae0 20 69 6e 20 74 68 65 0a 22 63 6e 74 22 20 72 65   in the."cnt" re
21af0 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 61 72  cursive table ar
21b00 65 20 6f 6e 6c 79 20 75 73 65 64 20 6f 6e 63 65  e only used once
21b10 2e 20 20 53 6f 20 61 73 20 65 61 63 68 20 72 6f  .  So as each ro
21b20 77 20 69 73 20 61 64 64 65 64 20 74 6f 0a 74 68  w is added to.th
21b30 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
21b40 65 2c 20 74 68 61 74 20 72 6f 77 20 69 73 20 69  e, that row is i
21b50 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 74 75 72  mmediately retur
21b60 6e 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  ned as a result 
21b70 6f 66 20 74 68 65 20 6d 61 69 6e 0a 53 45 4c 45  of the main.SELE
21b80 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  CT statement and
21b90 20 74 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e   then discarded.
21ba0 20 20 53 51 4c 69 74 65 20 64 6f 65 73 20 3c 65    SQLite does <e
21bb0 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d  m>not</em> accum
21bc0 75 6c 61 74 65 0a 61 20 74 65 6d 70 6f 72 61 72  ulate.a temporar
21bd0 79 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  y table containi
21be0 6e 67 20 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77  ng a million row
21bf0 73 2e 20 20 56 65 72 79 20 6c 69 74 74 6c 65 20  s.  Very little 
21c00 6d 65 6d 6f 72 79 20 69 73 0a 6e 65 65 64 65 64  memory is.needed
21c10 20 74 6f 20 72 75 6e 20 74 68 65 20 61 62 6f 76   to run the abov
21c20 65 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65  e example.  Howe
21c30 76 65 72 2c 20 69 66 20 74 68 65 20 65 78 61 6d  ver, if the exam
21c40 70 6c 65 20 68 61 64 20 75 73 65 64 0a 55 4e 49  ple had used.UNI
21c50 4f 4e 20 69 6e 73 74 65 61 64 20 6f 66 20 55 4e  ON instead of UN
21c60 49 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51  ION ALL, then SQ
21c70 4c 69 74 65 20 77 6f 75 6c 64 20 68 61 76 65 20  Lite would have 
21c80 68 61 64 20 74 6f 20 6b 65 65 70 20 61 72 6f 75  had to keep arou
21c90 6e 64 0a 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c  nd.all previousl
21ca0 79 20 67 65 6e 65 72 61 74 65 64 20 63 6f 6e 74  y generated cont
21cb0 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ent in order to 
21cc0 63 68 65 63 6b 20 66 6f 72 20 64 75 70 6c 69 63  check for duplic
21cd0 61 74 65 73 2e 0a 46 6f 72 20 74 68 69 73 20 72  ates..For this r
21ce0 65 61 73 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65  eason, programme
21cf0 72 73 20 73 68 6f 75 6c 64 20 73 74 72 69 76 65  rs should strive
21d00 20 74 6f 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c   to use UNION AL
21d10 4c 20 69 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49  L instead.of UNI
21d20 4f 4e 20 77 68 65 6e 20 66 65 61 73 69 62 6c 65  ON when feasible
21d30 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20  ...<p>Here is a 
21d40 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65  variation on the
21d50 20 70 72 65 76 69 6f 75 73 20 65 78 61 6d 70 6c   previous exampl
21d60 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
21d70 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
21d80 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53  SIVE.  cnt(x) AS
21d90 20 28 0a 20 20 20 20 20 53 45 4c 45 43 54 20 31   (.     SELECT 1
21da0 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  .     UNION ALL.
21db0 20 20 20 20 20 53 45 4c 45 43 54 20 78 2b 31 20       SELECT x+1 
21dc0 46 52 4f 4d 20 63 6e 74 0a 20 20 20 20 20 20 4c  FROM cnt.      L
21dd0 49 4d 49 54 20 31 30 30 30 30 30 30 0a 20 20 29  IMIT 1000000.  )
21de0 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63  .SELECT x FROM c
21df0 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  nt;.</pre></bloc
21e00 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72  kquote>..<p>Ther
21e10 65 20 61 72 65 20 74 77 6f 20 64 69 66 66 65 72  e are two differ
21e20 65 6e 63 65 73 20 69 6e 20 74 68 69 73 20 76 61  ences in this va
21e30 72 69 61 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e  riation.  The in
21e40 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a  itial-select is.
21e50 22 53 45 4c 45 43 54 20 31 22 20 69 6e 73 74 65  "SELECT 1" inste
21e60 61 64 20 6f 66 20 22 56 41 4c 55 45 53 28 31 29  ad of "VALUES(1)
21e70 22 2e 20 20 42 75 74 20 74 68 6f 73 65 20 61 72  ".  But those ar
21e80 65 20 6a 75 73 74 20 64 69 66 66 65 72 65 6e 74  e just different
21e90 0a 73 79 6e 74 61 78 65 73 20 66 6f 72 20 73 61  .syntaxes for sa
21ea0 79 69 6e 67 20 65 78 61 63 74 6c 79 20 74 68 65  ying exactly the
21eb0 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 54 68   same thing.  Th
21ec0 65 20 6f 74 68 65 72 20 63 68 61 6e 67 65 20 69  e other change i
21ed0 73 20 74 68 61 74 20 74 68 65 0a 72 65 63 75 72  s that the.recur
21ee0 73 69 6f 6e 20 69 73 20 73 74 6f 70 70 65 64 20  sion is stopped 
21ef0 62 79 20 61 20 4c 49 4d 49 54 20 72 61 74 68 65  by a LIMIT rathe
21f00 72 20 74 68 61 6e 20 61 20 57 48 45 52 45 20 63  r than a WHERE c
21f10 6c 61 75 73 65 2e 20 20 54 68 65 20 75 73 65 20  lause.  The use 
21f20 6f 66 0a 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74  of.LIMIT means t
21f30 68 61 74 20 77 68 65 6e 20 74 68 65 20 6f 6e 65  hat when the one
21f40 2d 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69  -millionth row i
21f50 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 22  s added to the "
21f60 63 6e 74 22 20 74 61 62 6c 65 0a 28 61 6e 64 20  cnt" table.(and 
21f70 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
21f80 6d 61 69 6e 20 53 45 4c 45 43 54 2c 20 74 68 61  main SELECT, tha
21f90 6e 6b 73 20 74 6f 20 74 68 65 20 71 75 65 72 79  nks to the query
21fa0 20 6f 70 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e   optimizer).then
21fb0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73   the recursion s
21fc0 74 6f 70 73 20 69 6d 6d 65 64 69 61 74 65 6c 79  tops immediately
21fd0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68   regardless of h
21fe0 6f 77 20 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67  ow many rows mig
21ff0 68 74 20 62 65 0a 6c 65 66 74 20 69 6e 20 74 68  ht be.left in th
22000 65 20 71 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72  e queue.  On mor
22010 65 20 63 6f 6d 70 6c 65 78 20 71 75 65 72 69 65  e complex querie
22020 73 2c 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69  s, it can someti
22030 6d 65 73 20 62 65 0a 64 69 66 66 69 63 75 6c 74  mes be.difficult
22040 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
22050 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
22060 20 77 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79   will eventually
22070 20 63 61 75 73 65 20 74 68 65 0a 71 75 65 75 65   cause the.queue
22080 20 74 6f 20 64 72 61 69 6e 20 61 6e 64 20 74 68   to drain and th
22090 65 20 72 65 63 75 72 73 69 6f 6e 20 74 6f 20 74  e recursion to t
220a0 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 74  erminate.  But t
220b0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
220c0 77 69 6c 6c 0a 61 6c 77 61 79 73 20 73 74 6f 70  will.always stop
220d0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 2e 20   the recursion. 
220e0 20 53 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 70   So it is good p
220f0 72 61 63 74 69 63 65 20 74 6f 20 61 6c 77 61 79  ractice to alway
22100 73 20 69 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49  s include a.LIMI
22110 54 20 63 6c 61 75 73 65 20 61 73 20 61 20 73 61  T clause as a sa
22120 66 65 74 79 20 69 66 20 61 6e 20 75 70 70 65 72  fety if an upper
22130 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 73 69   bound on the si
22140 7a 65 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  ze of the recurs
22150 69 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a  ion .is known...
22160 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
22170 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34   rcex2</tcl>.<h4
22180 3e 48 69 65 72 61 72 63 68 69 63 61 6c 20 51 75  >Hierarchical Qu
22190 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34  ery Examples</h4
221a0 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 61  >..<p>Consider a
221b0 20 74 61 62 6c 65 20 74 68 61 74 20 64 65 73 63   table that desc
221c0 72 69 62 65 73 20 74 68 65 20 6d 65 6d 62 65 72  ribes the member
221d0 73 20 6f 66 20 61 6e 20 6f 72 67 61 6e 69 7a 61  s of an organiza
221e0 74 69 6f 6e 20 61 73 0a 77 65 6c 6c 20 61 73 20  tion as.well as 
221f0 74 68 65 20 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d  the chain-of-com
22200 6d 61 6e 64 20 77 69 74 68 69 6e 20 74 68 61 74  mand within that
22210 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a   organization:..
22220 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
22230 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  >.CREATE TABLE o
22240 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20  rg(.  name TEXT 
22250 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62  PRIMARY KEY,.  b
22260 6f 73 73 20 54 45 58 54 20 52 45 46 45 52 45 4e  oss TEXT REFEREN
22270 43 45 53 20 6f 72 67 2c 0a 20 20 68 65 69 67 68  CES org,.  heigh
22280 74 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74 68 65  t INT,.  -- othe
22290 72 20 63 6f 6e 74 65 6e 74 20 6f 6d 69 74 74 65  r content omitte
222a0 64 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d.);.</pre></blo
222b0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65  ckquote>..<p>Eve
222c0 72 79 20 6d 65 6d 62 65 72 20 69 6e 20 74 68 65  ry member in the
222d0 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61   organization ha
222e0 73 20 61 20 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f  s a name, and mo
222f0 73 74 20 6d 65 6d 62 65 72 73 20 68 61 76 65 0a  st members have.
22300 61 20 73 69 6e 67 6c 65 20 62 6f 73 73 2e 20 20  a single boss.  
22310 28 54 68 65 20 68 65 61 64 20 6f 66 20 74 68 65  (The head of the
22320 20 77 68 6f 6c 65 20 6f 72 67 61 6e 69 7a 61 74   whole organizat
22330 69 6f 6e 20 68 61 73 20 61 20 4e 55 4c 4c 0a 22  ion has a NULL."
22340 62 6f 73 73 22 20 66 69 65 6c 64 2e 29 20 54 68  boss" field.) Th
22350 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 22 6f  e rows of the "o
22360 72 67 22 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  rg" table form a
22370 20 74 72 65 65 2e 0a 0a 3c 70 3e 48 65 72 65 20   tree...<p>Here 
22380 69 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20  is a query that 
22390 63 6f 6d 70 75 74 65 73 20 74 68 65 20 61 76 65  computes the ave
223a0 72 61 67 65 20 68 65 69 67 68 74 20 6f 76 65 72  rage height over
223b0 20 65 76 65 72 79 6f 6e 65 0a 69 6e 20 41 6c 69   everyone.in Ali
223c0 63 65 27 73 20 6f 72 67 61 6e 69 7a 61 74 69 6f  ce's organizatio
223d0 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 20 41 6c 69  n, including Ali
223e0 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ce:..<blockquote
223f0 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
22400 52 53 49 56 45 0a 20 20 77 6f 72 6b 73 5f 66 6f  RSIVE.  works_fo
22410 72 5f 61 6c 69 63 65 28 6e 29 20 41 53 20 28 0a  r_alice(n) AS (.
22420 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63      VALUES('Alic
22430 65 27 29 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20  e').    UNION.  
22440 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
22450 4f 4d 20 6f 72 67 2c 20 77 6f 72 6b 73 5f 66 6f  OM org, works_fo
22460 72 5f 61 6c 69 63 65 0a 20 20 20 20 20 57 48 45  r_alice.     WHE
22470 52 45 20 6f 72 67 2e 62 6f 73 73 3d 77 6f 72 6b  RE org.boss=work
22480 73 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a 20 20  s_for_alice.n.  
22490 29 0a 53 45 4c 45 43 54 20 61 76 67 28 68 65 69  ).SELECT avg(hei
224a0 67 68 74 29 20 46 52 4f 4d 20 6f 72 67 0a 20 57  ght) FROM org. W
224b0 48 45 52 45 20 6f 72 67 2e 6e 61 6d 65 20 49 4e  HERE org.name IN
224c0 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65   works_for_alice
224d0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
224e0 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65  uote>..<p>The ne
224f0 78 74 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20  xt example uses 
22500 74 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c  two .common tabl
22510 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
22520 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
22530 6c 61 75 73 65 2e 20 20 0a 54 68 65 20 66 6f 6c  lause.  .The fol
22540 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 72 65 63  lowing table rec
22550 6f 72 64 73 20 61 20 66 61 6d 69 6c 79 20 74 72  ords a family tr
22560 65 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ee:..<blockquote
22570 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
22580 42 4c 45 20 66 61 6d 69 6c 79 28 0a 20 20 6e 61  BLE family(.  na
22590 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  me TEXT PRIMARY 
225a0 4b 45 59 2c 0a 20 20 6d 6f 6d 20 54 45 58 54 20  KEY,.  mom TEXT 
225b0 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c  REFERENCES famil
225c0 79 2c 0a 20 20 64 61 64 20 54 45 58 54 20 52 45  y,.  dad TEXT RE
225d0 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c  FERENCES family,
225e0 0a 20 20 62 6f 72 6e 20 44 41 54 45 54 49 4d 45  .  born DATETIME
225f0 2c 0a 20 20 64 69 65 64 20 44 41 54 45 54 49 4d  ,.  died DATETIM
22600 45 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66 20 73 74  E, -- NULL if st
22610 69 6c 6c 20 61 6c 69 76 65 0a 20 20 2d 2d 20 6f  ill alive.  -- o
22620 74 68 65 72 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a  ther content.);.
22630 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
22640 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 66 61 6d  te>..<p>The "fam
22650 69 6c 79 22 20 74 61 62 6c 65 20 69 73 20 73 69  ily" table is si
22660 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 65 61 72  milar to the ear
22670 6c 69 65 72 20 22 6f 72 67 22 20 74 61 62 6c 65  lier "org" table
22680 20 65 78 63 65 70 74 20 74 68 61 74 20 0a 6e 6f   except that .no
22690 77 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20  w there are two 
226a0 70 61 72 65 6e 74 73 20 74 6f 20 65 61 63 68 20  parents to each 
226b0 6d 65 6d 62 65 72 2e 0a 57 65 20 77 61 6e 74 20  member..We want 
226c0 74 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69 76 69  to know all livi
226d0 6e 67 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20  ng ancestors of 
226e0 41 6c 69 63 65 2c 20 66 72 6f 6d 20 6f 6c 64 65  Alice, from olde
226f0 73 74 20 74 6f 20 79 6f 75 6e 67 65 73 74 2e 0a  st to youngest..
22700 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  An ordinary comm
22710 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22720 69 6f 6e 2c 20 22 70 61 72 65 6e 74 5f 6f 66 22  ion, "parent_of"
22730 2c 20 69 73 20 64 65 66 69 6e 65 64 20 66 69 72  , is defined fir
22740 73 74 2e 20 20 54 68 61 74 0a 6f 72 64 69 6e 61  st.  That.ordina
22750 72 79 20 43 54 45 20 69 73 20 61 20 76 69 65 77  ry CTE is a view
22760 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
22770 64 20 74 6f 20 66 69 6e 64 20 61 6c 6c 20 70 61  d to find all pa
22780 72 65 6e 74 73 20 6f 66 20 61 6e 79 0a 69 6e 64  rents of any.ind
22790 69 76 69 64 75 61 6c 2e 20 20 54 68 61 74 20 6f  ividual.  That o
227a0 72 64 69 6e 61 72 79 20 43 54 45 20 69 73 20 74  rdinary CTE is t
227b0 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20  hen used in the 
227c0 22 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69  "ancestor_of_ali
227d0 63 65 22 0a 72 65 63 75 72 73 69 76 65 20 43 54  ce".recursive CT
227e0 45 2e 20 20 54 68 65 20 72 65 63 75 72 73 69 76  E.  The recursiv
227f0 65 20 43 54 45 20 69 73 20 74 68 65 6e 20 75 73  e CTE is then us
22800 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20  ed in the final 
22810 71 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  query:..<blockqu
22820 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
22830 45 43 55 52 53 49 56 45 0a 20 20 70 61 72 65 6e  ECURSIVE.  paren
22840 74 5f 6f 66 28 6e 61 6d 65 2c 20 70 61 72 65 6e  t_of(name, paren
22850 74 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43  t) AS.    (SELEC
22860 54 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d  T name, mom FROM
22870 20 66 61 6d 69 6c 79 20 55 4e 49 4f 4e 20 53 45   family UNION SE
22880 4c 45 43 54 20 6e 61 6d 65 2c 20 64 61 64 20 46  LECT name, dad F
22890 52 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a 20 20 61  ROM family),.  a
228a0 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
228b0 28 6e 61 6d 65 29 20 41 53 0a 20 20 20 20 28 53  (name) AS.    (S
228c0 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f  ELECT parent FRO
228d0 4d 20 70 61 72 65 6e 74 5f 6f 66 20 57 48 45 52  M parent_of WHER
228e0 45 20 6e 61 6d 65 3d 27 41 6c 69 63 65 27 0a 20  E name='Alice'. 
228f0 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
22900 20 20 20 53 45 4c 45 43 54 20 70 61 72 65 6e 74     SELECT parent
22910 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20   FROM parent_of 
22920 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 5f 6f 66  JOIN ancestor_of
22930 5f 61 6c 69 63 65 20 55 53 49 4e 47 28 6e 61 6d  _alice USING(nam
22940 65 29 29 0a 53 45 4c 45 43 54 20 66 61 6d 69 6c  e)).SELECT famil
22950 79 2e 6e 61 6d 65 20 46 52 4f 4d 20 61 6e 63 65  y.name FROM ance
22960 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c 20 66  stor_of_alice, f
22970 61 6d 69 6c 79 0a 20 57 48 45 52 45 20 61 6e 63  amily. WHERE anc
22980 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e  estor_of_alice.n
22990 61 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a  ame=family.name.
229a0 20 20 20 41 4e 44 20 64 69 65 64 20 49 53 20 4e     AND died IS N
229b0 55 4c 4c 0a 20 4f 52 44 45 52 20 42 59 20 62 6f  ULL. ORDER BY bo
229c0 72 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  rn;.</pre></bloc
229d0 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64  kquote>..<tcl>hd
229e0 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c  _fragment rcex2<
229f0 2f 74 63 6c 3e 0a 3c 68 34 3e 51 75 65 72 69 65  /tcl>.<h4>Querie
22a00 73 20 41 67 61 69 6e 73 74 20 41 20 47 72 61 70  s Against A Grap
22a10 68 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76 65 72  h</h4>..<p>A ver
22a20 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73  sion control sys
22a30 74 65 6d 20 28 56 43 53 29 20 77 69 6c 6c 20 74  tem (VCS) will t
22a40 79 70 69 63 61 6c 6c 79 20 73 74 6f 72 65 20 74  ypically store t
22a50 68 65 20 65 76 6f 6c 76 69 6e 67 0a 76 65 72 73  he evolving.vers
22a60 69 6f 6e 73 20 6f 66 20 61 20 70 72 6f 6a 65 63  ions of a projec
22a70 74 20 61 73 20 61 20 64 69 72 65 63 74 65 64 20  t as a directed 
22a80 61 63 79 63 6c 69 63 20 67 72 61 70 68 20 28 44  acyclic graph (D
22a90 41 47 29 2e 20 20 43 61 6c 6c 20 65 61 63 68 0a  AG).  Call each.
22aa0 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 70  version of the p
22ab0 72 6f 6a 65 63 74 20 61 20 22 63 68 65 63 6b 69  roject a "checki
22ac0 6e 22 2e 20 20 41 20 73 69 6e 67 6c 65 0a 63 68  n".  A single.ch
22ad0 65 63 6b 69 6e 20 63 61 6e 20 68 61 76 65 20 7a  eckin can have z
22ae0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 72 65  ero or more pare
22af0 6e 74 73 2e 20 20 4d 6f 73 74 20 63 68 65 63 6b  nts.  Most check
22b00 69 6e 73 20 28 65 78 63 65 70 74 20 74 68 65 0a  ins (except the.
22b10 66 69 72 73 74 29 20 68 61 76 65 20 61 20 73 69  first) have a si
22b20 6e 67 6c 65 20 70 61 72 65 6e 74 2c 20 62 75 74  ngle parent, but
22b30 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
22b40 61 20 6d 65 72 67 65 2c 20 61 20 63 68 65 63 6b  a merge, a check
22b50 69 6e 0a 6d 69 67 68 74 20 68 61 76 65 20 74 77  in.might have tw
22b60 6f 20 6f 72 20 74 68 72 65 65 20 6f 72 20 6d 6f  o or three or mo
22b70 72 65 20 70 61 72 65 6e 74 73 2e 20 20 41 20 73  re parents.  A s
22b80 63 68 65 6d 61 20 74 6f 20 6b 65 65 70 20 74 72  chema to keep tr
22b90 61 63 6b 20 6f 66 0a 63 68 65 63 6b 69 6e 73 20  ack of.checkins 
22ba0 61 6e 64 20 74 68 65 20 6f 72 64 65 72 20 69 6e  and the order in
22bb0 20 77 68 69 63 68 20 74 68 65 79 20 6f 63 63 75   which they occu
22bc0 72 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d  r might look som
22bd0 65 74 68 69 6e 67 20 6c 69 6b 65 0a 74 68 69 73  ething like.this
22be0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
22bf0 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
22c00 45 20 63 68 65 63 6b 69 6e 28 0a 20 20 69 64 20  E checkin(.  id 
22c10 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
22c20 4b 45 59 2c 0a 20 20 6d 74 69 6d 65 20 49 4e 54  KEY,.  mtime INT
22c30 45 47 45 52 20 2d 2d 20 74 69 6d 65 73 74 61 6d  EGER -- timestam
22c40 70 20 77 68 65 6e 20 74 68 69 73 20 63 68 65 63  p when this chec
22c50 6b 69 6e 20 6f 63 63 75 72 72 65 64 0a 29 3b 0a  kin occurred.);.
22c60 43 52 45 41 54 45 20 54 41 42 4c 45 20 64 65 72  CREATE TABLE der
22c70 69 76 65 64 66 72 6f 6d 28 0a 20 20 78 66 72 6f  ivedfrom(.  xfro
22c80 6d 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55  m INTEGER NOT NU
22c90 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68  LL REFERENCES ch
22ca0 65 63 6b 69 6e 2c 20 2d 2d 20 70 61 72 65 6e 74  eckin, -- parent
22cb0 20 63 68 65 63 6b 69 6e 0a 20 20 78 74 6f 20 49   checkin.  xto I
22cc0 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20  NTEGER NOT NULL 
22cd0 52 45 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b  REFERENCES check
22ce0 69 6e 2c 20 20 20 2d 2d 20 64 65 72 69 76 65 64  in,   -- derived
22cf0 20 63 68 65 63 6b 69 6e 0a 20 20 50 52 49 4d 41   checkin.  PRIMA
22d00 52 59 20 4b 45 59 28 78 66 72 6f 6d 2c 78 74 6f  RY KEY(xfrom,xto
22d10 29 0a 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45  ).);.CREATE INDE
22d20 58 20 64 65 72 69 76 65 64 66 72 6f 6d 5f 62 61  X derivedfrom_ba
22d30 63 6b 20 4f 4e 20 64 65 72 69 76 65 64 66 72 6f  ck ON derivedfro
22d40 6d 28 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f  m(xto,xfrom);.</
22d50 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
22d60 3e 0a 0a 3c 70 3e 54 68 69 73 20 67 72 61 70 68  >..<p>This graph
22d70 20 69 73 20 61 63 79 63 6c 69 63 2e 20 20 41 6e   is acyclic.  An
22d80 64 20 77 65 20 61 73 73 75 6d 65 20 74 68 61 74  d we assume that
22d90 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 65 76   the mtime of ev
22da0 65 72 79 0a 63 68 69 6c 64 20 63 68 65 63 6b 69  ery.child checki
22db0 6e 20 69 73 20 6e 6f 20 6c 65 73 73 20 74 68 61  n is no less tha
22dc0 6e 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 61  n the mtime of a
22dd0 6c 6c 20 69 74 73 20 70 61 72 65 6e 74 73 2e 20  ll its parents. 
22de0 20 42 75 74 0a 75 6e 6c 69 6b 65 20 74 68 65 20   But.unlike the 
22df0 65 61 72 6c 69 65 72 20 65 78 61 6d 70 6c 65 73  earlier examples
22e00 2c 20 74 68 69 73 20 67 72 61 70 68 20 6d 69 67  , this graph mig
22e10 68 74 20 68 61 76 65 20 6d 75 6c 74 69 70 6c 65  ht have multiple
22e20 20 70 61 74 68 73 20 6f 66 0a 64 69 66 66 65 72   paths of.differ
22e30 69 6e 67 20 6c 65 6e 67 74 68 73 20 62 65 74 77  ing lengths betw
22e40 65 65 6e 20 61 6e 79 20 74 77 6f 20 63 68 65 63  een any two chec
22e50 6b 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e  kins...<p>We wan
22e60 74 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20 74 77  t to know the tw
22e70 65 6e 74 79 20 6d 6f 73 74 20 72 65 63 65 6e 74  enty most recent
22e80 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 69   ancestors in ti
22e90 6d 65 20 28 6f 75 74 20 6f 66 0a 74 68 65 20 74  me (out of.the t
22ea0 68 6f 75 73 61 6e 64 73 20 61 6e 64 20 74 68 6f  housands and tho
22eb0 75 73 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74  usands of ancest
22ec0 6f 72 73 20 69 6e 20 74 68 65 20 77 68 6f 6c 65  ors in the whole
22ed0 20 44 41 47 29 20 66 6f 72 0a 63 68 65 63 6b 69   DAG) for.checki
22ee0 6e 20 22 40 42 41 53 45 4c 49 4e 45 22 2e 20 20  n "@BASELINE".  
22ef0 28 41 20 71 75 65 72 79 20 73 69 6d 69 6c 61 72  (A query similar
22f00 20 74 6f 20 74 68 69 73 20 69 73 20 75 73 65 64   to this is used
22f10 0a 62 79 20 74 68 65 20 3c 61 20 68 72 65 66 3d  .by the <a href=
22f20 22 68 74 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73  "http://www.foss
22f30 69 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73  il-scm.org/">Fos
22f40 73 69 6c 3c 2f 61 3e 20 56 43 53 20 74 6f 0a 73  sil</a> VCS to.s
22f50 68 6f 77 20 74 68 65 20 4e 20 6d 6f 73 74 20 72  how the N most r
22f60 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20  ecent ancestors 
22f70 6f 66 20 61 20 63 68 65 63 6b 2e 20 20 46 6f 72  of a check.  For
22f80 20 65 78 61 6d 70 6c 65 3a 0a 3c 61 20 68 72 65   example:.<a hre
22f90 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71  f="http://www.sq
22fa0 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d  lite.org/src/tim
22fb0 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d  eline?p=trunk&n=
22fc0 33 30 22 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 73  30">http://www.s
22fd0 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69  qlite.org/src/ti
22fe0 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e  meline?p=trunk&n
22ff0 3d 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63  =30</a>.)..<bloc
23000 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
23010 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 61 6e  H RECURSIVE.  an
23020 63 65 73 74 6f 72 28 69 64 2c 6d 74 69 6d 65 29  cestor(id,mtime)
23030 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
23040 20 69 64 2c 20 6d 74 69 6d 65 20 46 52 4f 4d 20   id, mtime FROM 
23050 63 68 65 63 6b 69 6e 20 57 48 45 52 45 20 69 64  checkin WHERE id
23060 3d 40 42 41 53 45 4c 49 4e 45 0a 20 20 20 20 55  =@BASELINE.    U
23070 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20  NION.    SELECT 
23080 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f  derivedfrom.xfro
23090 6d 2c 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65  m, checkin.mtime
230a0 0a 20 20 20 20 20 20 46 52 4f 4d 20 61 6e 63 65  .      FROM ance
230b0 73 74 6f 72 2c 20 64 65 72 69 76 65 64 66 72 6f  stor, derivedfro
230c0 6d 2c 20 63 68 65 63 6b 69 6e 0a 20 20 20 20 20  m, checkin.     
230d0 57 48 45 52 45 20 61 6e 63 65 73 74 6f 72 2e 69  WHERE ancestor.i
230e0 64 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 74  d=derivedfrom.xt
230f0 6f 0a 20 20 20 20 20 20 20 41 4e 44 20 63 68 65  o.       AND che
23100 63 6b 69 6e 2e 69 64 3d 64 65 72 69 76 65 64 66  ckin.id=derivedf
23110 72 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20 20 20 4f  rom.xfrom.     O
23120 52 44 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e  RDER BY checkin.
23130 6d 74 69 6d 65 20 44 45 53 43 0a 20 20 20 20 20  mtime DESC.     
23140 4c 49 4d 49 54 20 32 30 0a 20 20 29 0a 53 45 4c  LIMIT 20.  ).SEL
23150 45 43 54 20 2a 20 46 52 4f 4d 20 63 68 65 63 6b  ECT * FROM check
23160 69 6e 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72  in JOIN ancestor
23170 20 55 53 49 4e 47 28 69 64 29 3b 0a 3c 2f 70 72   USING(id);.</pr
23180 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
23190 0a 3c 70 3e 0a 54 68 65 20 22 4f 52 44 45 52 20  .<p>.The "ORDER 
231a0 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65  BY checkin.mtime
231b0 20 44 45 53 43 22 20 74 65 72 6d 20 69 6e 20 74   DESC" term in t
231c0 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
231d0 65 63 74 20 6d 61 6b 65 73 0a 74 68 65 20 71 75  ect makes.the qu
231e0 65 72 79 20 72 75 6e 20 6d 75 63 68 20 66 61 73  ery run much fas
231f0 74 65 72 20 62 79 20 70 72 65 76 65 6e 74 69 6e  ter by preventin
23200 67 20 69 74 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77  g it from follow
23210 69 6e 67 0a 62 72 61 6e 63 68 65 73 20 74 68 61  ing.branches tha
23220 74 20 6d 65 72 67 65 20 63 68 65 63 6b 69 6e 73  t merge checkins
23230 0a 66 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20  .from long ago. 
23240 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 66 6f   The ORDER BY fo
23250 72 63 65 73 20 74 68 65 20 72 65 63 75 72 73 69  rces the recursi
23260 76 65 2d 73 65 6c 65 63 74 20 74 6f 20 66 6f 63  ve-select to foc
23270 75 73 0a 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72  us.on the most r
23280 65 63 65 6e 74 20 63 68 65 63 6b 69 6e 73 2c 20  ecent checkins, 
23290 74 68 65 20 6f 6e 65 73 20 77 65 20 77 61 6e 74  the ones we want
232a0 2e 20 20 57 69 74 68 6f 75 74 20 74 68 65 20 4f  .  Without the O
232b0 52 44 45 52 20 42 59 0a 6f 6e 20 74 68 65 20 72  RDER BY.on the r
232c0 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
232d0 20 6f 6e 65 20 77 6f 75 6c 64 20 62 65 20 66 6f   one would be fo
232e0 72 63 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 20  rced to compute 
232f0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 73 65 74  the complete set
23300 20 6f 66 0a 74 68 6f 75 73 61 6e 64 73 20 6f 66   of.thousands of
23310 20 61 6e 63 65 73 74 6f 72 73 2c 20 73 6f 72 74   ancestors, sort
23320 20 74 68 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69   them all by mti
23330 6d 65 2c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  me, then take th
23340 65 20 74 6f 70 20 74 77 65 6e 74 79 2e 0a 54 68  e top twenty..Th
23350 65 20 4f 52 44 45 52 20 42 59 20 65 73 73 65 6e  e ORDER BY essen
23360 74 69 61 6c 6c 79 20 73 65 74 73 20 75 70 20 61  tially sets up a
23370 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
23380 74 68 61 74 0a 66 6f 72 63 65 73 20 74 68 65 20  that.forces the 
23390 72 65 63 75 72 73 69 76 65 20 71 75 65 72 79 20  recursive query 
233a0 74 6f 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d  to look at the m
233b0 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73  ost recent ances
233c0 74 6f 72 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f  tors first,.allo
233d0 77 69 6e 67 20 74 68 65 20 75 73 65 20 6f 66 20  wing the use of 
233e0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74  a LIMIT clause t
233f0 6f 20 72 65 73 74 72 69 63 74 20 74 68 65 20 73  o restrict the s
23400 63 6f 70 65 20 6f 66 20 74 68 65 0a 71 75 65 72  cope of the.quer
23410 79 20 74 6f 20 6a 75 73 74 20 74 68 65 20 63 68  y to just the ch
23420 65 63 6b 69 6e 73 20 6f 66 20 69 6e 74 65 72 65  eckins of intere
23430 73 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  st...<tcl>hd_fra
23440 67 6d 65 6e 74 20 77 69 74 68 6f 72 64 65 72 62  gment withorderb
23450 79 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74  y</tcl>.<h4>Cont
23460 72 6f 6c 6c 69 6e 67 20 44 65 70 74 68 2d 46 69  rolling Depth-Fi
23470 72 73 74 20 56 65 72 73 75 73 20 42 72 65 61 64  rst Versus Bread
23480 74 68 2d 46 69 72 73 74 20 53 65 61 72 63 68 20  th-First Search 
23490 4f 66 20 61 20 54 72 65 65 0a 55 73 69 6e 67 20  Of a Tree.Using 
234a0 4f 52 44 45 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c  ORDER BY</h4>..<
234b0 70 3e 41 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  p>An ORDER BY cl
234c0 61 75 73 65 20 6f 6e 20 74 68 65 20 72 65 63 75  ause on the recu
234d0 72 73 69 76 65 2d 73 65 6c 65 63 74 20 63 61 6e  rsive-select can
234e0 20 62 65 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   be used to cont
234f0 72 6f 6c 0a 77 68 65 74 68 65 72 20 74 68 65 20  rol.whether the 
23500 73 65 61 72 63 68 20 6f 66 20 61 20 74 72 65 65  search of a tree
23510 20 69 73 20 64 65 70 74 68 2d 66 69 72 73 74 20   is depth-first 
23520 6f 72 20 62 72 65 61 64 74 68 2d 66 69 72 73 74  or breadth-first
23530 2e 20 20 54 6f 0a 69 6c 6c 75 73 74 72 61 74 65  .  To.illustrate
23540 2c 20 77 65 20 77 69 6c 6c 20 75 73 65 20 61 20  , we will use a 
23550 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65  variation on the
23560 20 22 6f 72 67 22 20 74 61 62 6c 65 20 66 72 6f   "org" table fro
23570 6d 20 61 6e 20 65 78 61 6d 70 6c 65 0a 61 62 6f  m an example.abo
23580 76 65 2c 20 77 69 74 68 6f 75 74 20 74 68 65 20  ve, without the 
23590 22 68 65 69 67 68 74 22 20 63 6f 6c 75 6d 6e 2c  "height" column,
235a0 20 61 6e 64 20 77 69 74 68 20 73 6f 6d 65 20 72   and with some r
235b0 65 61 6c 20 64 61 74 61 20 69 6e 73 65 72 74 65  eal data inserte
235c0 64 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  d:..<blockquote>
235d0 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
235e0 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54  LE org(.  name T
235f0 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
23600 0a 20 20 62 6f 73 73 20 54 45 58 54 20 52 45 46  .  boss TEXT REF
23610 45 52 45 4e 43 45 53 20 6f 72 67 0a 29 20 57 49  ERENCES org.) WI
23620 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 49 4e 53  THOUT ROWID;.INS
23630 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
23640 55 45 53 28 27 41 6c 69 63 65 27 2c 4e 55 4c 4c  UES('Alice',NULL
23650 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f  );.INSERT INTO o
23660 72 67 20 56 41 4c 55 45 53 28 27 42 6f 62 27 2c  rg VALUES('Bob',
23670 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54  'Alice');.INSERT
23680 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
23690 28 27 43 69 6e 64 79 27 2c 27 41 6c 69 63 65 27  ('Cindy','Alice'
236a0 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f  );.INSERT INTO o
236b0 72 67 20 56 41 4c 55 45 53 28 27 44 61 76 65 27  rg VALUES('Dave'
236c0 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20  ,'Bob');.INSERT 
236d0 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
236e0 27 45 6d 6d 61 27 2c 27 42 6f 62 27 29 3b 0a 49  'Emma','Bob');.I
236f0 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
23700 41 4c 55 45 53 28 27 46 72 65 64 27 2c 27 43 69  ALUES('Fred','Ci
23710 6e 64 79 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  ndy');.INSERT IN
23720 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 47  TO org VALUES('G
23730 61 69 6c 27 2c 27 43 69 6e 64 79 27 29 3b 0a 3c  ail','Cindy');.<
23740 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
23750 65 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61  e>..<p>Here is a
23760 20 71 75 65 72 79 20 74 6f 20 73 68 6f 77 20 74   query to show t
23770 68 65 20 74 72 65 65 20 73 74 72 75 63 74 75 72  he tree structur
23780 65 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66  e in a breadth-f
23790 69 72 73 74 20 70 61 74 74 65 72 6e 3a 0a 0a 3c  irst pattern:..<
237a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
237b0 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
237c0 20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61    under_alice(na
237d0 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20  me,level) AS (. 
237e0 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65     VALUES('Alice
237f0 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41  ',0).    UNION A
23800 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72  LL.    SELECT or
23810 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c  g.name, under_al
23820 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20  ice.level+1.    
23830 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20    FROM org JOIN 
23840 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f  under_alice ON o
23850 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c  rg.boss=under_al
23860 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52  ice.name.     OR
23870 44 45 52 20 42 59 20 32 0a 20 20 29 0a 53 45 4c  DER BY 2.  ).SEL
23880 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e  ECT substr('....
23890 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a  ......',1,level*
238a0 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20  3) || name FROM 
238b0 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70  under_alice;.</p
238c0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
238d0 0a 0a 3c 70 3e 54 68 65 20 22 4f 52 44 45 52 20  ..<p>The "ORDER 
238e0 42 59 20 32 22 20 28 77 68 69 63 68 20 6d 65 61  BY 2" (which mea
238f0 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 22  ns the same as "
23900 4f 52 44 45 52 20 42 59 20 75 6e 64 65 72 5f 61  ORDER BY under_a
23910 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 22 29 0a 63  lice.level+1").c
23920 61 75 73 65 73 20 68 69 67 68 65 72 20 6c 65 76  auses higher lev
23930 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e  els in the organ
23940 69 7a 61 74 69 6f 6e 20 63 68 61 72 74 20 28 77  ization chart (w
23950 69 74 68 20 73 6d 61 6c 6c 65 72 20 22 6c 65 76  ith smaller "lev
23960 65 6c 22 20 76 61 6c 75 65 73 29 0a 74 6f 20 62  el" values).to b
23970 65 20 70 72 6f 63 65 73 73 65 64 20 66 69 72 73  e processed firs
23980 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20  t, resulting in 
23990 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20  a breadth-first 
239a0 73 65 61 72 63 68 2e 20 20 54 68 65 20 6f 75 74  search.  The out
239b0 70 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  put is:..<blockq
239c0 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65  uote><pre>.Alice
239d0 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79  ....Bob....Cindy
239e0 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e  .......Dave.....
239f0 2e 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65  ..Emma.......Fre
23a00 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70  d.......Gail.</p
23a10 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
23a20 0a 0a 3c 70 3e 42 75 74 20 69 66 20 77 65 20 63  ..<p>But if we c
23a30 68 61 6e 67 65 20 74 68 65 20 4f 52 44 45 52 20  hange the ORDER 
23a40 42 59 20 63 6c 61 75 73 65 20 74 6f 20 61 64 64  BY clause to add
23a50 20 74 68 65 20 22 44 45 53 43 22 20 6d 6f 64 69   the "DESC" modi
23a60 66 69 65 72 2c 20 74 68 61 74 20 77 69 6c 6c 0a  fier, that will.
23a70 63 61 75 73 65 20 6c 6f 77 65 72 20 6c 65 76 65  cause lower leve
23a80 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69  ls in the organi
23a90 7a 61 74 69 6f 6e 20 28 77 69 74 68 20 6c 61 72  zation (with lar
23aa0 67 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75  ger "level" valu
23ab0 65 73 29 20 74 6f 20 62 65 0a 70 72 6f 63 65 73  es) to be.proces
23ac0 73 65 64 20 66 69 72 73 74 20 62 79 20 74 68 65  sed first by the
23ad0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
23ae0 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20  t, resulting in 
23af0 61 20 64 65 70 74 68 2d 66 69 72 73 74 20 73 65  a depth-first se
23b00 61 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  arch:..<blockquo
23b10 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
23b20 43 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f  CURSIVE.  under_
23b30 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c  alice(name,level
23b40 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
23b50 53 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20  S('Alice',0).   
23b60 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
23b70 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20  ELECT org.name, 
23b80 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65  under_alice.leve
23b90 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f  l+1.      FROM o
23ba0 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c  rg JOIN under_al
23bb0 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d  ice ON org.boss=
23bc0 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65  under_alice.name
23bd0 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32  .     ORDER BY 2
23be0 20 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a 20 20 29   <b>DESC</b>.  )
23bf0 0a 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 27  .SELECT substr('
23c00 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65  ..........',1,le
23c10 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46  vel*3) || name F
23c20 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b  ROM under_alice;
23c30 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
23c40 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74  ote>..<p>The out
23c50 70 75 74 20 6f 66 20 74 68 69 73 20 72 65 76 69  put of this revi
23c60 73 65 64 20 71 75 65 72 79 20 69 73 3a 0a 0a 3c  sed query is:..<
23c70 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
23c80 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e  .Alice....Bob...
23c90 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45  ....Dave.......E
23ca0 6d 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e  mma....Cindy....
23cb0 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61  ...Fred.......Ga
23cc0 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  il.</pre></block
23cd0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20  quote>..<p>When 
23ce0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
23cf0 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66  use is omitted f
23d00 72 6f 6d 20 74 68 65 20 72 65 63 75 72 73 69 76  rom the recursiv
23d10 65 2d 73 65 6c 65 63 74 2c 20 74 68 65 0a 71 75  e-select, the.qu
23d20 65 75 65 20 62 65 68 61 76 65 73 20 61 73 20 61  eue behaves as a
23d30 20 46 49 46 4f 2c 20 77 68 69 63 68 20 72 65 73   FIFO, which res
23d40 75 6c 74 73 20 69 6e 20 61 20 62 72 65 61 64 74  ults in a breadt
23d50 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 0a  h-first search..
23d60 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
23d70 6e 74 20 6d 61 6e 64 65 6c 62 72 6f 74 20 7b 63  nt mandelbrot {c
23d80 6f 6d 70 75 74 65 20 74 68 65 20 4d 61 6e 64 65  ompute the Mande
23d90 6c 62 72 6f 74 20 73 65 74 7d 3c 2f 74 63 6c 3e  lbrot set}</tcl>
23da0 0a 3c 68 34 3e 4f 75 74 6c 61 6e 64 69 73 68 20  .<h4>Outlandish 
23db0 52 65 63 75 72 73 69 76 65 20 51 75 65 72 79 20  Recursive Query 
23dc0 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c  Examples</h4>..<
23dd0 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p>The following 
23de0 71 75 65 72 79 20 63 6f 6d 70 75 74 65 73 20 61  query computes a
23df0 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  n approximation 
23e00 6f 66 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f  of the Mandelbro
23e10 74 20 53 65 74 0a 61 6e 64 20 6f 75 74 70 75 74  t Set.and output
23e20 73 20 74 68 65 20 72 65 73 75 6c 74 20 61 73 20  s the result as 
23e30 41 53 43 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f  ASCII-art:..<blo
23e40 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
23e50 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 78  TH RECURSIVE.  x
23e60 61 78 69 73 28 78 29 20 41 53 20 28 56 41 4c 55  axis(x) AS (VALU
23e70 45 53 28 2d 32 2e 30 29 20 55 4e 49 4f 4e 20 41  ES(-2.0) UNION A
23e80 4c 4c 20 53 45 4c 45 43 54 20 78 2b 30 2e 30 35  LL SELECT x+0.05
23e90 20 46 52 4f 4d 20 78 61 78 69 73 20 57 48 45 52   FROM xaxis WHER
23ea0 45 20 78 3c 31 2e 32 29 2c 0a 20 20 79 61 78 69  E x<1.2),.  yaxi
23eb0 73 28 79 29 20 41 53 20 28 56 41 4c 55 45 53 28  s(y) AS (VALUES(
23ec0 2d 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  -1.0) UNION ALL 
23ed0 53 45 4c 45 43 54 20 79 2b 30 2e 31 20 46 52 4f  SELECT y+0.1 FRO
23ee0 4d 20 79 61 78 69 73 20 57 48 45 52 45 20 79 3c  M yaxis WHERE y<
23ef0 31 2e 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c 20  1.0),.  m(iter, 
23f00 63 78 2c 20 63 79 2c 20 78 2c 20 79 29 20 41 53  cx, cy, x, y) AS
23f10 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 30 2c   (.    SELECT 0,
23f20 20 78 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20   x, y, 0.0, 0.0 
23f30 46 52 4f 4d 20 78 61 78 69 73 2c 20 79 61 78 69  FROM xaxis, yaxi
23f40 73 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  s.    UNION ALL.
23f50 20 20 20 20 53 45 4c 45 43 54 20 69 74 65 72 2b      SELECT iter+
23f60 31 2c 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d 79  1, cx, cy, x*x-y
23f70 2a 79 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a 79  *y + cx, 2.0*x*y
23f80 20 2b 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20 20   + cy FROM m .  
23f90 20 20 20 57 48 45 52 45 20 28 78 2a 78 20 2b 20     WHERE (x*x + 
23fa0 79 2a 79 29 20 3c 20 34 2e 30 20 41 4e 44 20 69  y*y) < 4.0 AND i
23fb0 74 65 72 3c 32 38 0a 20 20 29 2c 0a 20 20 6d 32  ter<28.  ),.  m2
23fc0 28 69 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41  (iter, cx, cy) A
23fd0 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 6d  S (.    SELECT m
23fe0 61 78 28 69 74 65 72 29 2c 20 63 78 2c 20 63 79  ax(iter), cx, cy
23ff0 20 46 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42 59   FROM m GROUP BY
24000 20 63 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20 61   cx, cy.  ),.  a
24010 28 74 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c  (t) AS (.    SEL
24020 45 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  ECT group_concat
24030 28 20 73 75 62 73 74 72 28 27 20 2e 2b 2a 23 27  ( substr(' .+*#'
24040 2c 20 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34  , 1+min(iter/7,4
24050 29 2c 20 31 29 2c 20 27 27 29 20 0a 20 20 20 20  ), 1), '') .    
24060 46 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59  FROM m2 GROUP BY
24070 20 63 79 0a 20 20 29 0a 53 45 4c 45 43 54 20 67   cy.  ).SELECT g
24080 72 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69  roup_concat(rtri
24090 6d 28 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d  m(t),x'0a') FROM
240a0 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63   a;.</pre></bloc
240b0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74  kquote>..<p>In t
240c0 68 69 73 20 71 75 65 72 79 2c 20 74 68 65 20 22  his query, the "
240d0 78 61 78 69 73 22 20 61 6e 64 20 22 79 61 78 69  xaxis" and "yaxi
240e0 73 22 20 43 54 45 73 20 64 65 66 69 6e 65 20 74  s" CTEs define t
240f0 68 65 20 67 72 69 64 20 6f 66 20 70 6f 69 6e 74  he grid of point
24100 73 20 66 6f 72 0a 77 68 69 63 68 20 74 68 65 20  s for.which the 
24110 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 20 77  Mandelbrot Set w
24120 69 6c 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61  ill be approxima
24130 74 65 64 2e 20 20 45 61 63 68 20 72 6f 77 20 69  ted.  Each row i
24140 6e 20 74 68 65 0a 22 6d 28 69 74 65 72 2c 63 78  n the."m(iter,cx
24150 2c 63 79 2c 78 2c 79 29 22 20 43 54 45 20 6d 65  ,cy,x,y)" CTE me
24160 61 6e 73 20 74 68 61 74 20 61 66 74 65 72 20 22  ans that after "
24170 69 74 65 72 22 20 69 74 65 72 61 74 69 6f 6e 73  iter" iterations
24180 2c 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74  , the Mandelbrot
24190 0a 69 74 65 72 61 74 69 6f 6e 20 73 74 61 72 74  .iteration start
241a0 69 6e 67 20 61 74 20 63 78 2c 63 79 20 68 61 73  ing at cx,cy has
241b0 20 72 65 61 63 68 65 64 20 70 6f 69 6e 74 20 78   reached point x
241c0 2c 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20  ,y.  The number 
241d0 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 0a 69 6e  of iterations.in
241e0 20 74 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73   this example is
241f0 20 6c 69 6d 69 74 65 64 20 74 6f 20 32 38 20 28   limited to 28 (
24200 77 68 69 63 68 20 73 65 76 65 72 65 6c 79 20 6c  which severely l
24210 69 6d 69 74 73 20 74 68 65 20 72 65 73 6f 6c 75  imits the resolu
24220 74 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d 70  tion of.the comp
24230 75 74 61 74 69 6f 6e 2c 20 62 75 74 20 69 73 20  utation, but is 
24240 73 75 66 66 69 63 69 65 6e 74 20 66 6f 72 20 6c  sufficient for l
24250 6f 77 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 41 53  ow-resolution AS
24260 43 49 49 2d 61 72 74 20 6f 75 74 70 75 74 29 2e  CII-art output).
24270 0a 54 68 65 20 22 6d 32 28 69 74 65 72 2c 63 78  .The "m2(iter,cx
24280 2c 63 79 29 22 20 43 54 45 20 68 6f 6c 64 73 20  ,cy)" CTE holds 
24290 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
242a0 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
242b0 20 72 65 61 63 68 65 64 20 77 68 65 6e 0a 73 74   reached when.st
242c0 61 72 74 69 6e 67 20 61 74 20 70 6f 69 6e 74 20  arting at point 
242d0 63 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20  cx,cy..Finally, 
242e0 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
242f0 22 61 28 74 29 22 20 43 54 45 20 68 6f 6c 64 73  "a(t)" CTE holds
24300 20 61 20 73 74 72 69 6e 67 20 0a 77 68 69 63 68   a string .which
24310 20 69 73 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e   is a single lin
24320 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20  e of the output 
24330 41 53 43 49 49 2d 61 72 74 2e 0a 54 68 65 20 53  ASCII-art..The S
24340 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
24350 61 74 20 74 68 65 20 65 6e 64 20 6a 75 73 74 20  at the end just 
24360 71 75 65 72 69 65 73 20 74 68 65 20 22 61 22 20  queries the "a" 
24370 43 54 45 20 74 6f 0a 72 65 74 72 69 65 76 65 20  CTE to.retrieve 
24380 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 41 53 43  all lines of ASC
24390 49 49 2d 61 72 74 2c 20 6f 6e 65 20 62 79 20 6f  II-art, one by o
243a0 6e 65 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20  ne...<p>Running 
243b0 74 68 65 20 71 75 65 72 79 20 61 62 6f 76 65 20  the query above 
243c0 69 6e 74 6f 20 61 6e 20 53 51 4c 69 74 65 20 5b  into an SQLite [
243d0 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
243e0 6c 6c 5d 20 72 65 73 75 6c 74 73 0a 69 6e 20 74  ll] results.in t
243f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74  he following out
24400 70 75 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  put:..<blockquot
24410 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 20 20 20  e><pre>.        
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24430 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
24440 23 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #.              
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24460 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20       ..#*...    
24470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b               ..+
24490 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20  ####+..         
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244b0 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e     .......+####.
244c0 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20  ...   +.        
244d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244e0 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23     ..##+*#######
244f0 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20  ###+.++++.      
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23 23 23      .+.#########
24520 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20  #########+..    
24530 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e            ......
24540 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23  .......+########
24550 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20  ###########+.+. 
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b               ..+
24570 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23  +..#.....*######
24580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b  ###############+
24590 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  ..             .
245a0 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23 23 23  ..+#######++####
245b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
245c0 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20 2e  ###..          .
245d0 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23 23  ...+*###########
245e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
245f0 23 23 23 23 23 2e 0a 20 23 23 23 23 23 23 23 23  #####.. ########
24600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24620 23 23 23 23 23 2e 2e 2e 0a 20 20 20 20 20 20 20  #####....       
24630 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23     ....+*#######
24640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24650 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20  #########..     
24660 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23          ...+####
24670 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23 23  ###++###########
24680 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20  ############..  
24690 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b              ..++
246a0 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23  ..#.....*#######
246b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e  ##############+.
246c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  .              .
246d0 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23  ............+###
246e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
246f0 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +.+.            
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b                .+
24710 2e 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
24720 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
24730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24740 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23   ..##+*#########
24750 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20  #+.++++.        
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23      .......+####
24780 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20 20  ....   +.       
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23            ..+###
247b0 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20         ..#*...  
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24800 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20    ....#.        
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24820 20 20 20 20 20 20 20 20 20 20 20 20 2b 2e 0a 3c              +..<
24830 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
24840 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e>..<tcl>hd_frag
24850 6d 65 6e 74 20 73 75 64 6f 6b 75 20 7b 73 6f 6c  ment sudoku {sol
24860 76 65 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65  ve Sudoku puzzle
24870 73 7d 20 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69  s} </tcl>.<p>Thi
24880 73 20 6e 65 78 74 20 71 75 65 72 79 20 73 6f 6c  s next query sol
24890 76 65 73 20 61 20 53 75 64 6f 6b 75 20 70 75 7a  ves a Sudoku puz
248a0 7a 6c 65 2e 20 20 54 68 65 20 73 74 61 74 65 20  zle.  The state 
248b0 6f 66 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73  of the puzzle is
248c0 0a 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 38  .defined by an 8
248d0 31 2d 63 68 61 72 61 63 74 65 72 20 73 74 72 69  1-character stri
248e0 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 61  ng formed by rea
248f0 64 69 6e 67 20 65 6e 74 72 69 65 73 20 66 72 6f  ding entries fro
24900 6d 20 74 68 65 0a 70 75 7a 7a 6c 65 20 62 6f 78  m the.puzzle box
24910 20 72 6f 77 20 62 79 20 72 6f 77 20 66 72 6f 6d   row by row from
24920 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 61   left to right a
24930 6e 64 20 74 68 65 6e 20 66 72 6f 6d 20 74 6f 70  nd then from top
24940 20 74 6f 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e   to bottom..Blan
24950 6b 20 73 71 75 61 72 65 73 20 69 6e 20 74 68 65  k squares in the
24960 20 70 75 7a 7a 6c 65 20 61 72 65 20 64 65 6e 6f   puzzle are deno
24970 74 65 64 20 62 79 20 61 20 22 2e 22 20 63 68 61  ted by a "." cha
24980 72 61 63 74 65 72 2e 20 20 0a 54 68 75 73 20 74  racter.  .Thus t
24990 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 3a  he input string:
249a0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35  ..<blockquote>.5
249b0 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e  3..7....6..195..
249c0 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e  ..98....6.8...6.
249d0 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e  ..34..8.3..17...
249e0 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e  2...6.6....28...
249f0 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39  .419..5....8..79
24a00 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
24a10 3c 70 3e 43 6f 72 72 65 73 70 6f 6e 64 73 20 74  <p>Corresponds t
24a20 6f 20 61 20 70 75 7a 7a 6c 65 20 6c 69 6b 65 20  o a puzzle like 
24a30 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  this:..<blockquo
24a40 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  te>.<table borde
24a50 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64 69 6e  r="1" cellpaddin
24a60 67 3d 22 35 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35  g="5">.<tr><td>5
24a70 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>3<td> <td> <
24a80 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>7<td> <td> <t
24a90 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e  d> <td>.<tr><td>
24aa0 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31  6<td> <td> <td>1
24ab0 3c 74 64 3e 39 3c 74 64 3e 35 3c 74 64 3e 20 3c  <td>9<td>5<td> <
24ac0 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64  td> <td>.<tr><td
24ad0 3e 20 3c 74 64 3e 39 3c 74 64 3e 38 3c 74 64 3e  > <td>9<td>8<td>
24ae0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20   <td> <td> <td> 
24af0 3c 74 64 3e 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td>6<td>.<tr><t
24b00 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>8<td> <td> <td
24b10 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e  > <td>6<td> <td>
24b20 20 3c 74 64 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e   <td> <td>3.<tr>
24b30 3c 74 64 3e 34 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>4<td> <td> <
24b40 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 33 3c 74  td>8<td> <td>3<t
24b50 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 0a 3c 74  d> <td> <td>1.<t
24b60 72 3e 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e  r><td>7<td> <td>
24b70 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 20   <td> <td>2<td> 
24b80 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 0a  <td> <td> <td>6.
24b90 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 36 3c 74  <tr><td> <td>6<t
24ba0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
24bb0 3e 20 3c 74 64 3e 32 3c 74 64 3e 38 3c 74 64 3e  > <td>2<td>8<td>
24bc0 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c  .<tr><td> <td> <
24bd0 74 64 3e 20 3c 74 64 3e 34 3c 74 64 3e 31 3c 74  td> <td>4<td>1<t
24be0 64 3e 39 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>9<td> <td> <td
24bf0 3e 35 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e  >5.<tr><td> <td>
24c00 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38   <td> <td> <td>8
24c10 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c  <td> <td> <td>7<
24c20 74 64 3e 39 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  td>9.</table>.</
24c30 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
24c40 54 68 69 73 20 69 73 20 74 68 65 20 71 75 65 72  This is the quer
24c50 79 20 74 68 61 74 20 73 6f 6c 76 65 73 20 74 68  y that solves th
24c60 65 20 70 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63  e puzzle:..<bloc
24c70 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
24c80 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 69 6e  H RECURSIVE.  in
24c90 70 75 74 28 73 75 64 29 20 41 53 20 28 0a 20 20  put(sud) AS (.  
24ca0 20 20 56 41 4c 55 45 53 28 27 35 33 2e 2e 37 2e    VALUES('53..7.
24cb0 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e  ...6..195....98.
24cc0 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e  ...6.8...6...34.
24cd0 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36  .8.3..17...2...6
24ce0 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e  .6....28....419.
24cf0 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 27 29 0a 20 20  .5....8..79').  
24d00 29 2c 0a 20 20 64 69 67 69 74 73 28 7a 2c 20 6c  ),.  digits(z, l
24d10 70 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55  p) AS (.    VALU
24d20 45 53 28 27 31 27 2c 20 31 29 0a 20 20 20 20 55  ES('1', 1).    U
24d30 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 0a  NION ALL SELECT.
24d40 20 20 20 20 43 41 53 54 28 6c 70 2b 31 20 41 53      CAST(lp+1 AS
24d50 20 54 45 58 54 29 2c 20 6c 70 2b 31 20 46 52 4f   TEXT), lp+1 FRO
24d60 4d 20 64 69 67 69 74 73 20 57 48 45 52 45 20 6c  M digits WHERE l
24d70 70 3c 39 0a 20 20 29 2c 0a 20 20 78 28 73 2c 20  p<9.  ),.  x(s, 
24d80 69 6e 64 29 20 41 53 20 28 0a 20 20 20 20 53 45  ind) AS (.    SE
24d90 4c 45 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28  LECT sud, instr(
24da0 73 75 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69  sud, '.') FROM i
24db0 6e 70 75 74 0a 20 20 20 20 55 4e 49 4f 4e 20 41  nput.    UNION A
24dc0 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 0a 20 20  LL.    SELECT.  
24dd0 20 20 20 20 73 75 62 73 74 72 28 73 2c 20 31 2c      substr(s, 1,
24de0 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20   ind-1) || z || 
24df0 73 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29  substr(s, ind+1)
24e00 2c 0a 20 20 20 20 20 20 69 6e 73 74 72 28 20 73  ,.      instr( s
24e10 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d  ubstr(s, 1, ind-
24e20 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74  1) || z || subst
24e30 72 28 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27  r(s, ind+1), '.'
24e40 20 29 0a 20 20 20 20 20 46 52 4f 4d 20 78 2c 20   ).     FROM x, 
24e50 64 69 67 69 74 73 20 41 53 20 7a 0a 20 20 20 20  digits AS z.    
24e60 57 48 45 52 45 20 69 6e 64 3e 30 0a 20 20 20 20  WHERE ind>0.    
24e70 20 20 41 4e 44 20 4e 4f 54 20 45 58 49 53 54 53    AND NOT EXISTS
24e80 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 53   (.            S
24e90 45 4c 45 43 54 20 31 0a 20 20 20 20 20 20 20 20  ELECT 1.        
24ea0 20 20 20 20 20 20 46 52 4f 4d 20 64 69 67 69 74        FROM digit
24eb0 73 20 41 53 20 6c 70 0a 20 20 20 20 20 20 20 20  s AS lp.        
24ec0 20 20 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d       WHERE z.z =
24ed0 20 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64   substr(s, ((ind
24ee0 2d 31 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31  -1)/9)*9 + lp, 1
24ef0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
24f00 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74    OR z.z = subst
24f10 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 25 39 29  r(s, ((ind-1)%9)
24f20 20 2b 20 28 6c 70 2d 31 29 2a 39 20 2b 20 31 2c   + (lp-1)*9 + 1,
24f30 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   1).            
24f40 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62      OR z.z = sub
24f50 73 74 72 28 73 2c 20 28 28 28 69 6e 64 2d 31 29  str(s, (((ind-1)
24f60 2f 33 29 20 25 20 33 29 20 2a 20 33 0a 20 20 20  /3) % 3) * 3.   
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f80 20 20 20 20 20 2b 20 28 28 69 6e 64 2d 31 29 2f       + ((ind-1)/
24f90 32 37 29 20 2a 20 32 37 20 2b 20 6c 70 0a 20 20  27) * 27 + lp.  
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fb0 20 20 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20        + ((lp-1) 
24fc0 2f 20 33 29 20 2a 20 36 2c 20 31 29 0a 20 20 20  / 3) * 6, 1).   
24fd0 20 20 20 20 20 20 29 0a 20 20 29 0a 53 45 4c 45        ).  ).SELE
24fe0 43 54 20 73 20 46 52 4f 4d 20 78 20 57 48 45 52  CT s FROM x WHER
24ff0 45 20 69 6e 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c  E ind=0;.</pre><
25000 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
25010 3e 54 68 65 20 22 69 6e 70 75 74 22 20 43 54 45  >The "input" CTE
25020 20 64 65 66 69 6e 65 73 20 74 68 65 20 69 6e 70   defines the inp
25030 75 74 20 70 75 7a 7a 6c 65 2e 0a 54 68 65 20 22  ut puzzle..The "
25040 64 69 67 69 74 73 22 20 43 54 45 20 64 65 66 69  digits" CTE defi
25050 6e 65 73 20 61 20 74 61 62 6c 65 20 74 68 61 74  nes a table that
25060 20 68 6f 6c 64 73 20 61 6c 6c 20 64 69 67 69 74   holds all digit
25070 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  s between 1 and 
25080 39 2e 0a 54 68 65 20 77 6f 72 6b 20 6f 66 20 73  9..The work of s
25090 6f 6c 76 69 6e 67 20 74 68 65 20 70 75 7a 7a 6c  olving the puzzl
250a0 65 20 69 73 20 75 6e 64 65 72 74 61 6b 65 6e 20  e is undertaken 
250b0 62 79 20 74 68 65 20 22 78 22 20 43 54 45 2e 0a  by the "x" CTE..
250c0 41 6e 20 65 6e 74 72 79 20 69 6e 20 78 28 73 2c  An entry in x(s,
250d0 69 6e 64 29 20 6d 65 61 6e 73 20 74 68 61 74 20  ind) means that 
250e0 74 68 65 20 38 31 2d 63 68 61 72 61 63 74 65 72  the 81-character
250f0 20 73 74 72 69 6e 67 20 22 73 22 20 69 73 20 61   string "s" is a
25100 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75   valid.sudoku pu
25110 7a 7a 6c 65 20 28 69 74 20 68 61 73 20 6e 6f 20  zzle (it has no 
25120 63 6f 6e 66 6c 69 63 74 73 29 20 61 6e 64 20 74  conflicts) and t
25130 68 61 74 20 74 68 65 20 66 69 72 73 74 20 75 6e  hat the first un
25140 6b 6e 6f 77 6e 20 63 68 61 72 61 63 74 65 72 0a  known character.
25150 69 73 20 61 74 20 70 6f 73 69 74 69 6f 6e 20 22  is at position "
25160 69 6e 64 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20  ind", or ind==0 
25170 69 66 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72  if all character
25180 20 70 6f 73 69 74 69 6f 6e 73 20 61 72 65 20 66   positions are f
25190 69 6c 6c 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f  illed in..The go
251a0 61 6c 2c 20 74 68 65 6e 2c 20 69 73 20 74 6f 20  al, then, is to 
251b0 63 6f 6d 70 75 74 65 20 65 6e 74 72 69 65 73 20  compute entries 
251c0 66 6f 72 20 22 78 22 20 77 69 74 68 20 61 6e 20  for "x" with an 
251d0 22 69 6e 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e  "ind" of 0...<p>
251e0 54 68 65 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73  The solver works
251f0 20 62 79 20 61 64 64 69 6e 67 20 6e 65 77 20 65   by adding new e
25200 6e 74 72 69 65 73 20 74 6f 20 74 68 65 20 22 78  ntries to the "x
25210 22 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  " recursive tabl
25220 65 2e 0a 47 69 76 65 6e 20 70 72 69 6f 72 20 65  e..Given prior e
25230 6e 74 72 69 65 73 2c 20 74 68 65 20 72 65 63 75  ntries, the recu
25240 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74 72 69  rsive-select tri
25250 65 73 20 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20  es to fill in a 
25260 73 69 6e 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74  single new.posit
25270 69 6f 6e 20 77 69 74 68 20 61 6c 6c 20 76 61 6c  ion with all val
25280 75 65 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e  ues between 1 an
25290 64 20 39 20 74 68 61 74 20 61 63 74 75 61 6c 6c  d 9 that actuall
252a0 79 20 77 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70  y work in that.p
252b0 6f 73 69 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f  osition.  The co
252c0 6d 70 6c 69 63 61 74 65 64 20 22 4e 4f 54 20 45  mplicated "NOT E
252d0 58 49 53 54 53 22 20 73 75 62 71 75 65 72 79 20  XISTS" subquery 
252e0 69 73 20 74 68 65 20 6d 61 67 69 63 20 74 68 61  is the magic tha
252f0 74 0a 66 69 67 75 72 65 73 20 6f 75 74 20 77 68  t.figures out wh
25300 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
25310 68 20 63 61 6e 64 69 64 61 74 65 20 22 73 22 20  h candidate "s" 
25320 73 74 72 69 6e 67 20 69 73 20 61 20 76 61 6c 69  string is a vali
25330 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20  d.sudoku puzzle 
25340 6f 72 20 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20  or not...<p>The 
25350 66 69 6e 61 6c 20 61 6e 73 77 65 72 20 69 73 20  final answer is 
25360 66 6f 75 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67  found by looking
25370 20 66 6f 72 20 61 20 73 74 72 69 6e 67 20 77 69   for a string wi
25380 74 68 20 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68  th ind==0..If th
25390 65 20 6f 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b  e original sudok
253a0 75 20 70 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f  u problem did no
253b0 74 20 68 61 76 65 20 61 20 75 6e 69 71 75 65 20  t have a unique 
253c0 73 6f 6c 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74  solution, then.t
253d0 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 72 65  he query will re
253e0 74 75 72 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c  turn all possibl
253f0 65 20 73 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66  e solutions.  If
25400 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 70 72   the original pr
25410 6f 62 6c 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76  oblem.was unsolv
25420 61 62 6c 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f  able, then no ro
25430 77 73 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72  ws will be retur
25440 6e 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  ned.  In this ca
25450 73 65 2c 20 74 68 65 20 75 6e 69 71 75 65 0a 61  se, the unique.a
25460 6e 73 77 65 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63  nswer is:..<bloc
25470 6b 71 75 6f 74 65 3e 0a 35 33 34 36 37 38 39 31  kquote>.53467891
25480 32 36 37 32 31 39 35 33 34 38 31 39 38 33 34 32  2672195348198342
25490 35 36 37 38 35 39 37 36 31 34 32 33 34 32 36 38  5678597614234268
254a0 35 33 37 39 31 37 31 33 39 32 34 38 35 36 39 36  5379171392485696
254b0 31 35 33 37 32 38 34 32 38 37 34 31 39 36 33 35  1537284287419635
254c0 33 34 35 32 38 36 31 37 39 0a 3c 2f 62 6c 6f 63  345286179.</bloc
254d0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
254e0 73 6f 6c 75 74 69 6f 6e 20 77 61 73 20 63 6f 6d  solution was com
254f0 70 75 74 65 64 20 69 6e 20 6c 65 73 73 20 74 68  puted in less th
25500 61 6e 20 33 30 30 20 6d 69 6c 6c 69 73 65 63 6f  an 300 milliseco
25510 6e 64 73 20 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a  nds on a modern.
25520 77 6f 72 6b 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68  workstation...<h
25530 33 3e 4c 69 6d 69 74 61 74 69 6f 6e 73 20 41 6e  3>Limitations An
25540 64 20 43 61 76 65 61 74 73 3c 2f 68 33 3e 0a 0a  d Caveats</h3>..
25550 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65  <ul>.<li><p>.The
25560 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e   WITH clause can
25570 6e 6f 74 20 62 65 20 75 73 65 64 20 77 69 74 68  not be used with
25580 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 52 49  in a [CREATE TRI
25590 47 47 45 52 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54  GGER]..<li><p>.T
255a0 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 6d  he WITH clause m
255b0 75 73 74 20 61 70 70 65 61 72 20 61 74 20 74 68  ust appear at th
255c0 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61  e beginning of a
255d0 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 53 45 4c 45   top-level [SELE
255e0 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72  CT] statement.or
255f0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
25600 67 20 6f 66 20 61 20 73 75 62 71 75 65 72 79 2e  g of a subquery.
25610 20 20 54 68 65 20 57 49 54 48 20 63 6c 61 75 73    The WITH claus
25620 65 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 70  e cannot be prep
25630 65 6e 64 65 64 20 74 6f 0a 74 68 65 20 73 65 63  ended to.the sec
25640 6f 6e 64 20 6f 72 20 73 75 62 73 65 71 75 65 6e  ond or subsequen
25650 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t SELECT stateme
25660 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e  nt of a [compoun
25670 64 20 73 65 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c  d select]..<li><
25680 70 3e 0a 54 68 65 20 53 51 4c 3a 31 39 39 39 20  p>.The SQL:1999 
25690 73 70 65 63 20 72 65 71 75 69 72 65 73 20 74 68  spec requires th
256a0 61 74 20 74 68 65 20 52 45 43 55 52 53 49 56 45  at the RECURSIVE
256b0 20 6b 65 79 77 6f 72 64 20 66 6f 6c 6c 6f 77 20   keyword follow 
256c0 57 49 54 48 20 69 6e 20 61 6e 79 0a 57 49 54 48  WITH in any.WITH
256d0 20 63 6c 61 75 73 65 20 74 68 61 74 20 69 6e 63   clause that inc
256e0 6c 75 64 65 73 20 61 20 72 65 63 75 72 73 69 76  ludes a recursiv
256f0 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
25700 78 70 72 65 73 73 69 6f 6e 2e 20 20 48 6f 77 65  xpression.  Howe
25710 76 65 72 2c 20 66 6f 72 0a 63 6f 6d 70 61 74 69  ver, for.compati
25720 62 69 6c 69 74 79 20 77 69 74 68 20 53 71 6c 53  bility with SqlS
25730 65 72 76 65 72 20 61 6e 64 20 4f 72 61 63 6c 65  erver and Oracle
25740 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
25750 74 20 65 6e 66 6f 72 63 65 20 74 68 69 73 20 72  t enforce this r
25760 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  ule..</ul>..<tcl
25770 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
25780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
257a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
257b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
257c0 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54  #.Section SELECT
257d0 20 73 65 6c 65 63 74 20 7b 53 45 4c 45 43 54 20   select {SELECT 
257e0 71 75 65 72 79 7d 0a 0a 52 65 63 75 72 73 69 76  query}..Recursiv
257f0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  eBubbleDiagram s
25800 65 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c  elect-stmt.</tcl
25810 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  >...<p>The SELEC
25820 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  T statement is u
25830 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  sed to query the
25840 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a   database.  The.
25850 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45  result of a SELE
25860 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  CT is zero or mo
25870 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20  re rows of data 
25880 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68  where each row.h
25890 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65  as a fixed numbe
258a0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 41  r of columns.  A
258b0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
258c0 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 0a  t does not make.
258d0 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74  any changes to t
258e0 68 65 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70  he database...<p
258f0 3e 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74  >The "[select-st
25900 6d 74 5d 22 20 73 79 6e 74 61 78 20 64 69 61 67  mt]" syntax diag
25910 72 61 6d 20 61 62 6f 76 65 20 61 74 74 65 6d 70  ram above attemp
25920 74 73 20 74 6f 20 73 68 6f 77 20 61 73 20 6d 75  ts to show as mu
25930 63 68 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54  ch of the.SELECT
25940 20 73 74 61 74 65 6d 65 6e 74 20 73 79 6e 74 61   statement synta
25950 78 20 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e  x as possible in
25960 20 61 20 73 69 6e 67 6c 65 20 64 69 61 67 72 61   a single diagra
25970 6d 2c 20 62 65 63 61 75 73 65 20 73 6f 6d 65 20  m, because some 
25980 72 65 61 64 65 72 73 0a 66 69 6e 64 20 74 68 61  readers.find tha
25990 74 20 68 65 6c 70 66 75 6c 2e 20 20 54 68 65 20  t helpful.  The 
259a0 66 6f 6c 6c 6f 77 69 6e 67 20 22 5b 66 61 63 74  following "[fact
259b0 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74  ored-select-stmt
259c0 5d 22 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61  ]" is an alterna
259d0 74 69 76 65 0a 73 79 6e 74 61 78 20 64 69 61 67  tive.syntax diag
259e0 72 61 6d 73 20 74 68 61 74 20 65 78 70 72 65 73  rams that expres
259f0 73 65 73 20 74 68 65 20 73 61 6d 65 20 73 79 6e  ses the same syn
25a00 74 61 78 20 62 75 74 20 74 72 69 65 73 20 74 6f  tax but tries to
25a10 20 62 72 65 61 6b 20 74 68 65 20 73 79 6e 74 61   break the synta
25a20 78 20 0a 64 6f 77 6e 20 69 6e 74 6f 20 73 6d 61  x .down into sma
25a30 6c 6c 65 72 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74  ller chunks...<t
25a40 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62  cl>.RecursiveBub
25a50 62 6c 65 44 69 61 67 72 61 6d 20 2d 2d 69 6e 69  bleDiagram --ini
25a60 74 69 61 6c 6c 79 2d 68 69 64 64 65 6e 20 66 61  tially-hidden fa
25a70 63 74 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74  ctored-select-st
25a80 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c  mt select-core.<
25a90 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74  /tcl>..<p>Note t
25aa0 68 61 74 20 74 68 65 72 65 20 61 72 65 20 70 61  hat there are pa
25ab0 74 68 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ths through the 
25ac0 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
25ad0 74 68 61 74 0a 61 72 65 20 6e 6f 74 20 61 6c 6c  that.are not all
25ae0 6f 77 65 64 20 69 6e 20 70 72 61 63 74 69 63 65  owed in practice
25af0 2e 20 20 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73  .  Some examples
25b00 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41  :.<ul>.<li>A [VA
25b10 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e  LUES] clause can
25b20 20 62 65 20 74 68 65 20 66 69 72 73 74 20 65 6c   be the first el
25b30 65 6d 65 6e 74 20 69 6e 20 61 20 5b 63 6f 6d 70  ement in a [comp
25b40 6f 75 6e 64 20 53 45 4c 45 43 54 5d 0a 20 20 20  ound SELECT].   
25b50 20 74 68 61 74 20 75 73 65 73 20 61 20 5b 57 49   that uses a [WI
25b60 54 48 5d 20 63 6c 61 75 73 65 2c 20 62 75 74 20  TH] clause, but 
25b70 61 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  a [simple SELECT
25b80 5d 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20  ] that consists 
25b90 6f 66 0a 20 20 20 20 6a 75 73 74 20 61 20 5b 56  of.    just a [V
25ba0 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61  ALUES] clause ca
25bb0 6e 6e 6f 74 20 62 65 20 70 72 65 63 65 64 65 64  nnot be preceded
25bc0 20 62 79 20 61 20 5b 57 49 54 48 5d 20 63 6c 61   by a [WITH] cla
25bd0 75 73 65 2e 0a 3c 6c 69 3e 54 68 65 20 5b 57 49  use..<li>The [WI
25be0 54 48 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20  TH] clause must 
25bf0 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 66 69 72  occur on the fir
25c00 73 74 20 53 45 4c 45 43 54 20 6f 66 20 61 20 5b  st SELECT of a [
25c10 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
25c20 2e 0a 20 20 20 20 49 74 20 63 61 6e 6e 6f 74 20  ..    It cannot 
25c30 66 6f 6c 6c 6f 77 20 61 20 5b 63 6f 6d 70 6f 75  follow a [compou
25c40 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f  nd-operator]..</
25c50 75 6c 3e 0a 54 68 65 73 65 20 61 6e 64 20 6f 74  ul>.These and ot
25c60 68 65 72 20 73 69 6d 69 6c 61 72 20 73 79 6e 74  her similar synt
25c70 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  ax restrictions 
25c80 61 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e  are described in
25c90 20 74 68 65 20 74 65 78 74 2e 0a 0a 3c 70 3e 54   the text...<p>T
25ca0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
25cb0 65 6e 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ent is the most 
25cc0 63 6f 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d  complicated comm
25cd0 61 6e 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  and in the SQL l
25ce0 61 6e 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65  anguage..To make
25cf0 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e   the description
25d00 20 65 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f   easier to follo
25d10 77 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70  w, some of the p
25d20 61 73 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65  assages below de
25d30 73 63 72 69 62 65 0a 74 68 65 20 77 61 79 20 74  scribe.the way t
25d40 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  he data returned
25d50 20 62 79 20 61 20 53 45 4c 45 43 54 20 73 74 61   by a SELECT sta
25d60 74 65 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d  tement is determ
25d70 69 6e 65 64 20 61 73 20 61 20 73 65 72 69 65 73  ined as a series
25d80 20 6f 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73   of.steps. It is
25d90 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65   important to ke
25da0 65 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20  ep in mind that 
25db0 74 68 69 73 20 69 73 20 70 75 72 65 6c 79 20 69  this is purely i
25dc0 6c 6c 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e  llustrative -.in
25dd0 20 70 72 61 63 74 69 63 65 20 6e 65 69 74 68 65   practice neithe
25de0 72 20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79  r SQLite nor any
25df0 20 6f 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e   other SQL engin
25e00 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  e is required to
25e10 20 66 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72   follow .this or
25e20 20 61 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69   any other speci
25e30 66 69 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 74  fic process...<t
25e40 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
25e50 69 6d 70 6c 65 73 65 6c 65 63 74 20 7b 73 69 6d  impleselect {sim
25e60 70 6c 65 20 53 45 4c 45 43 54 7d 3c 2f 74 63 6c  ple SELECT}</tcl
25e70 3e 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c  >.<h3>Simple Sel
25e80 65 63 74 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f  ect Processing</
25e90 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65  h3>..<p>The core
25ea0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
25eb0 74 65 6d 65 6e 74 20 69 73 20 61 20 22 73 69 6d  tement is a "sim
25ec0 70 6c 65 20 53 45 4c 45 43 54 22 20 73 68 6f 77  ple SELECT" show
25ed0 6e 20 62 79 20 74 68 65 0a 5b 73 65 6c 65 63 74  n by the.[select
25ee0 2d 63 6f 72 65 5d 20 61 6e 64 20 5b 73 69 6d 70  -core] and [simp
25ef0 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 20  le-select-stmt] 
25f00 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
25f10 62 65 6c 6f 77 2e 20 20 0a 49 6e 20 70 72 61 63  below.  .In prac
25f20 74 69 63 65 2c 20 6d 6f 73 74 20 53 45 4c 45 43  tice, most SELEC
25f30 54 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65  T statements are
25f40 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
25f50 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c  tatements...<tcl
25f60 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  >.RecursiveBubbl
25f70 65 44 69 61 67 72 61 6d 20 73 69 6d 70 6c 65 2d  eDiagram simple-
25f80 73 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65  select-stmt sele
25f90 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a  ct-core.</tcl>..
25fa0 3c 70 3e 47 65 6e 65 72 61 74 69 6e 67 20 74 68  <p>Generating th
25fb0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73  e results of a s
25fc0 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73 74 61  imple SELECT.sta
25fd0 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e  tement is presen
25fe0 74 65 64 20 61 73 20 61 20 66 6f 75 72 20 73 74  ted as a four st
25ff0 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20 74 68  ep process in th
26000 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62 65  e description be
26010 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69  low:..<ol>.  <li
26020 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73  > <p>[FROM claus
26030 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54  e] processing: T
26040 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 6f  he input data fo
26050 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  r the simple SEL
26060 45 43 54 20 69 73 0a 20 20 20 20 20 20 20 64 65  ECT is.       de
26070 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e  termined. The in
26080 70 75 74 20 64 61 74 61 20 69 73 20 65 69 74 68  put data is eith
26090 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20  er implicitly a 
260a0 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20  single row with 
260b0 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73  0.       columns
260c0 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f   (if there is no
260d0 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72   FROM clause) or
260e0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
260f0 79 20 74 68 65 20 46 52 4f 4d 0a 20 20 20 20 20  y the FROM.     
26100 20 20 63 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e    clause..  <li>
26110 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c 61 75 73   <p>[WHERE claus
26120 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54  e] processing: T
26130 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73  he input data is
26140 20 66 69 6c 74 65 72 65 64 20 75 73 69 6e 67 20   filtered using 
26150 74 68 65 20 57 48 45 52 45 0a 20 20 20 20 20 20  the WHERE.      
26160 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
26170 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e  on.  .  <li> <p>
26180 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f 55 50 20  [GROUP BY|GROUP 
26190 42 59 2c 20 48 41 56 49 4e 47 20 61 6e 64 20 72  BY, HAVING and r
261a0 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70  esult-column exp
261b0 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73  ression] process
261c0 69 6e 67 3a 20 0a 20 20 20 20 20 20 20 54 68 65  ing: .       The
261d0 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
261e0 6f 77 73 20 69 73 20 63 6f 6d 70 75 74 65 64 20  ows is computed 
261f0 62 79 20 61 67 67 72 65 67 61 74 69 6e 67 20 74  by aggregating t
26200 68 65 20 64 61 74 61 20 61 63 63 6f 72 64 69 6e  he data accordin
26210 67 20 74 6f 0a 20 20 20 20 20 20 20 61 6e 79 20  g to.       any 
26220 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
26230 61 6e 64 20 63 61 6c 63 75 6c 61 74 69 6e 67 20  and calculating 
26240 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 65  the result-set e
26250 78 70 72 65 73 73 69 6f 6e 73 20 66 6f 72 20 74  xpressions for t
26260 68 65 0a 20 20 20 20 20 20 20 72 6f 77 73 20 6f  he.       rows o
26270 66 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  f the filtered i
26280 6e 70 75 74 20 64 61 74 61 73 65 74 2e 20 20 0a  nput dataset.  .
26290 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49    <li> <p>[DISTI
262a0 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c  NCT|DISTINCT/ALL
262b0 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f 63 65 73   keyword] proces
262c0 73 69 6e 67 3a 20 49 66 20 74 68 65 20 71 75 65  sing: If the que
262d0 72 79 20 69 73 20 61 20 22 53 45 4c 45 43 54 0a  ry is a "SELECT.
262e0 20 20 20 20 20 20 20 44 49 53 54 49 4e 43 54 22         DISTINCT"
262f0 20 71 75 65 72 79 2c 20 64 75 70 6c 69 63 61 74   query, duplicat
26300 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76  e rows are remov
26310 65 64 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20  ed from the set 
26320 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a  of result rows..
26330 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  </ol>..<p>There 
26340 61 72 65 20 74 77 6f 20 74 79 70 65 73 20 6f 66  are two types of
26350 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
26360 74 61 74 65 6d 65 6e 74 20 2d 20 61 67 67 72 65  tatement - aggre
26370 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67  gate and .non-ag
26380 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2e  gregate queries.
26390 20 5e 41 20 73 69 6d 70 6c 65 20 53 45 4c 45 43   ^A simple SELEC
263a0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  T statement is a
263b0 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
263c0 79 20 69 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73  y if.it contains
263d0 20 65 69 74 68 65 72 20 61 20 47 52 4f 55 50 20   either a GROUP 
263e0 42 59 20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65  BY clause or one
263f0 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
26400 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20  te functions.in 
26410 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2e 20  the result-set. 
26420 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 61  ^Otherwise, if a
26430 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 63   simple SELECT c
26440 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67 67 72 65  ontains no aggre
26450 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f  gate.functions o
26460 72 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  r a GROUP BY cla
26470 75 73 65 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e  use, it is a non
26480 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
26490 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65  ...<p><b>1. Dete
264a0 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70  rmination of inp
264b0 75 74 20 64 61 74 61 20 28 46 52 4f 4d 20 63 6c  ut data (FROM cl
264c0 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 29  ause processing)
264d0 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72  .</b>.<tcl>hd_fr
264e0 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73  agment fromclaus
264f0 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  e</tcl>.<tcl>hd_
26500 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63  keywords {FROM c
26510 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  lause}</tcl>..<p
26520 3e 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20  >The input data 
26530 75 73 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65  used by a simple
26540 20 53 45 4c 45 43 54 20 71 75 65 72 79 20 69 73   SELECT query is
26550 20 61 20 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f   a set of <i>N</
26560 69 3e 20 72 6f 77 73 20 0a 65 61 63 68 20 3c 69  i> rows .each <i
26570 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77  >M</i> columns w
26580 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68  ide...<p>^(If th
26590 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
265a0 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20   omitted from a 
265b0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
265c0 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
265d0 65 20 0a 69 6e 70 75 74 20 64 61 74 61 20 69 73  e .input data is
265e0 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69   implicitly a si
265f0 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f  ngle row zero co
26600 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20 28 69 2e  lumns wide)^ (i.
26610 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e  e. <i>N</i>=1 an
26620 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a  d.<i>M</i>=0)...
26630 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20 63 6c 61  <p>If a FROM cla
26640 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
26650 2c 20 74 68 65 20 64 61 74 61 20 6f 6e 20 77 68  , the data on wh
26660 69 63 68 20 61 20 73 69 6d 70 6c 65 20 53 45 4c  ich a simple SEL
26670 45 43 54 20 71 75 65 72 79 0a 6f 70 65 72 61 74  ECT query.operat
26680 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68  es comes from th
26690 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  e one or more ta
266a0 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
266b0 65 73 20 28 53 45 4c 45 43 54 20 73 74 61 74 65  es (SELECT state
266c0 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68  ments.in parenth
266d0 65 73 69 73 29 20 73 70 65 63 69 66 69 65 64 20  esis) specified 
266e0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52  following the FR
266f0 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73  OM keyword. ^A s
26700 75 62 71 75 65 72 79 20 73 70 65 63 69 66 69 65  ubquery specifie
26710 64 0a 69 6e 20 74 68 65 20 74 61 62 6c 65 2d 6f  d.in the table-o
26720 72 2d 73 75 62 71 75 65 72 79 20 66 6f 6c 6c 6f  r-subquery follo
26730 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c  wing the FROM cl
26740 61 75 73 65 20 69 6e 20 61 20 0a 73 69 6d 70 6c  ause in a .simpl
26750 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
26760 6e 74 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73  nt is.handled as
26770 20 69 66 20 69 74 20 77 61 73 20 61 20 74 61 62   if it was a tab
26780 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
26790 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20  e data returned 
267a0 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  by executing the
267b0 0a 73 75 62 71 75 65 72 79 20 73 74 61 74 65 6d  .subquery statem
267c0 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d  ent. ^Each colum
267d0 6e 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  n of the subquer
267e0 79 20 68 61 73 20 74 68 65 0a 5b 63 6f 6c 6c 61  y has the.[colla
267f0 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73  tion|collation s
26800 65 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66  equence] and [af
26810 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
26820 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70  orresponding exp
26830 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73  ression.in the s
26840 75 62 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e  ubquery statemen
26850 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72 65  t...<p>^If there
26860 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c   is only a singl
26870 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  e table or subqu
26880 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 0a  ery in the FROM.
26890 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
268a0 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
268b0 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
268c0 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
268d0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a  contents of the.
268e0 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66  named table. ^If
268f0 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74   there is more t
26900 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 6f 72  han one table or
26910 20 73 75 62 71 75 65 72 79 20 69 6e 20 46 52 4f   subquery in FRO
26920 4d 20 63 6c 61 75 73 65 0a 74 68 65 6e 20 74 68  M clause.then th
26930 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 6c  e contents of al
26940 6c 20 74 61 62 6c 65 73 20 61 6e 64 2f 6f 72 20  l tables and/or 
26950 73 75 62 71 75 65 72 69 65 73 0a 61 72 65 20 6a  subqueries.are j
26960 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  oined into a sin
26970 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f 72 20  gle dataset for 
26980 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  the simple SELEC
26990 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 6f  T statement to o
269a0 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63 74  perate on..Exact
269b0 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74 61 20  ly how the data 
269c0 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65 70 65  is combined depe
269d0 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69  nds on the speci
269e0 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74  fic [join-operat
269f0 6f 72 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f  or] and.[join-co
26a00 6e 73 74 72 61 69 6e 74 5d 20 75 73 65 64 20 74  nstraint] used t
26a10 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65 20 74 61  o connect the ta
26a20 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
26a30 65 73 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70  es together...<p
26a40 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51  >All joins in SQ
26a50 4c 69 74 65 20 61 72 65 20 62 61 73 65 64 20 6f  Lite are based o
26a60 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
26a70 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c  product of the l
26a80 65 66 74 20 61 6e 64 0a 72 69 67 68 74 2d 68 61  eft and.right-ha
26a90 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 54 68  nd datasets. ^Th
26aa0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
26ab0 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
26ac0 63 74 20 64 61 74 61 73 65 74 20 61 72 65 2c 20  ct dataset are, 
26ad0 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74  in .order, all t
26ae0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
26af0 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61  e left-hand data
26b00 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  set followed by 
26b10 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a  all the columns.
26b20 6f 66 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  of the right-han
26b30 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 72  d dataset. ^Ther
26b40 65 20 69 73 20 61 20 72 6f 77 20 69 6e 20 74 68  e is a row in th
26b50 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
26b60 75 63 74 20 64 61 74 61 73 65 74 0a 66 6f 72 6d  uct dataset.form
26b70 65 64 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20  ed by combining 
26b80 65 61 63 68 20 75 6e 69 71 75 65 20 63 6f 6d 62  each unique comb
26b90 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77  ination of a row
26ba0 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68   from the left-h
26bb0 61 6e 64 20 0a 61 6e 64 20 72 69 67 68 74 2d 68  and .and right-h
26bc0 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 28  and datasets. ^(
26bd0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
26be0 69 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  if the left-hand
26bf0 20 64 61 74 61 73 65 74 20 63 6f 6e 73 69 73 74   dataset consist
26c00 73 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73  s of.<i>N<sub><s
26c10 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
26c20 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73  ></sub></i> rows
26c30 20 6f 66 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73   of .<i>M<sub><s
26c40 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
26c50 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75  ></sub></i> colu
26c60 6d 6e 73 2c 20 61 6e 64 20 74 68 65 20 72 69 67  mns, and the rig
26c70 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ht-hand dataset 
26c80 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61  of.<i>N<sub><sma
26c90 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
26ca0 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20  </sub></i> rows 
26cb0 6f 66 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61  of.<i>M<sub><sma
26cc0 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
26cd0 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d  </sub></i> colum
26ce0 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 63 61 72  ns, then the car
26cf0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 69  tesian product i
26d00 73 20 61 0a 64 61 74 61 73 65 74 20 6f 66 20 0a  s a.dataset of .
26d10 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>N<sub><small>
26d20 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  left</small></su
26d30 62 3e 26 74 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c  b>&times;N<sub><
26d40 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61  small>right</sma
26d50 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f  ll></sub></i>.ro
26d60 77 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e  ws, each contain
26d70 69 6e 67 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73  ing .<i>M<sub><s
26d80 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c  mall>left</small
26d90 3e 3c 2f 73 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73  ></sub>+M<sub><s
26da0 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c  mall>right</smal
26db0 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c  l></sub></i> col
26dc0 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  umns.)^..<p>^If 
26dd0 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f  the join-operato
26de0 72 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e  r is "CROSS JOIN
26df0 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c  ", "INNER JOIN",
26e00 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d   "JOIN" or a com
26e10 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68 65  ma.(",") and the
26e20 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55  re is no ON or U
26e30 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65  SING clause, the
26e40 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
26e50 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70  the join is.simp
26e60 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  ly the cartesian
26e70 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20   product of the 
26e80 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
26e90 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a 49  and datasets. .I
26ea0 66 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  f join-operator 
26eb0 64 6f 65 73 20 68 61 76 65 20 4f 4e 20 6f 72 20  does have ON or 
26ec0 55 53 49 4e 47 20 63 6c 61 75 73 65 73 2c 20 74  USING clauses, t
26ed0 68 6f 73 65 20 61 72 65 20 68 61 6e 64 6c 65 64  hose are handled
26ee0 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74 68   according to.th
26ef0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c  e following bull
26f00 65 74 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e  et points:..<ul>
26f10 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20  .  <li> <p>^(If 
26f20 74 68 65 72 65 20 69 73 20 61 6e 20 4f 4e 20 63  there is an ON c
26f30 6c 61 75 73 65 20 74 68 65 6e 20 74 68 65 20 4f  lause then the O
26f40 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a  N expression is.
26f50 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 65 64         evaluated
26f60 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
26f70 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
26f80 72 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20 20  roduct as a .   
26f90 20 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70      [boolean exp
26fa0 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72  ression]. Only r
26fb0 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
26fc0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
26fd0 6c 75 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20  luates to .     
26fe0 20 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75    true are inclu
26ff0 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ded from the dat
27000 61 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20  aset.)^..  <li> 
27010 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
27020 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 0a 20  a USING clause. 
27030 20 20 20 20 20 20 74 68 65 6e 20 65 61 63 68 20        then each 
27040 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
27050 6d 65 73 20 73 70 65 63 69 66 69 65 64 20 6d 75  mes specified mu
27060 73 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 20  st exist in the 
27070 64 61 74 61 73 65 74 73 20 74 6f 20 0a 20 20 20  datasets to .   
27080 20 20 20 20 62 6f 74 68 20 74 68 65 20 6c 65 66      both the lef
27090 74 20 61 6e 64 20 72 69 67 68 74 20 6f 66 20 74  t and right of t
270a0 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
270b0 2e 20 5e 28 46 6f 72 20 65 61 63 68 20 70 61 69  . ^(For each pai
270c0 72 20 6f 66 20 6e 61 6d 65 64 0a 20 20 20 20 20  r of named.     
270d0 20 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65    columns, the e
270e0 78 70 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58  xpression "lhs.X
270f0 20 3d 20 72 68 73 2e 58 22 20 69 73 20 65 76 61   = rhs.X" is eva
27100 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
27110 72 6f 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68  row of.       th
27120 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
27130 75 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61  uct as a [boolea
27140 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f  n expression]. O
27150 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69  nly rows for whi
27160 63 68 0a 20 20 20 20 20 20 20 61 6c 6c 20 73 75  ch.       all su
27170 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65  ch expressions e
27180 76 61 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65  valuates to true
27190 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72   are included fr
271a0 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20 72 65  om the.       re
271b0 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68 65  sult set.)^ ^Whe
271c0 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75  n comparing valu
271d0 65 73 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  es as a result o
271e0 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  f a USING clause
271f0 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e 6f 72  , the.       nor
27200 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 68 61  mal rules for ha
27210 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74 69 65  ndling affinitie
27220 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  s, collation seq
27230 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a  uences and NULL.
27240 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e         values in
27250 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70 70   comparisons app
27260 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20  ly. ^The column 
27270 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
27280 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 6c   on the.       l
27290 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
272a0 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74   the join-operat
272b0 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  or is considered
272c0 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c 65   to be on the le
272d0 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 73  ft-hand.       s
272e0 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ide of the compa
272f0 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28  rison operator (
27300 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  =) for the purpo
27310 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ses of collation
27320 20 0a 20 20 20 20 20 20 20 73 65 71 75 65 6e 63   .       sequenc
27330 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79 20 70  e and affinity p
27340 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20  recedence...    
27350 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20     <p>^For each 
27360 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  pair of columns 
27370 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
27380 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
27390 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  e column.       
273a0 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
273b0 61 6e 64 20 64 61 74 61 73 65 74 20 69 73 20 6f  and dataset is o
273c0 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
273d0 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74 2e 20  joined dataset. 
273e0 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20 69 73  ^This .       is
273f0 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72   the only differ
27400 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 55  ence between a U
27410 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e 64 20  SING clause and 
27420 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20 4f  its equivalent O
27430 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61  N.       constra
27440 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  int...  <li> <p>
27450 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52 41 4c  ^(If the NATURAL
27460 20 6b 65 79 77 6f 72 64 20 69 73 20 69 6e 20 74   keyword is in t
27470 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
27480 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20 20 20   then an.       
27490 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47 20 63  implicit USING c
274a0 6c 61 75 73 65 20 69 73 20 61 64 64 65 64 20 74  lause is added t
274b0 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74  o the join-const
274c0 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c  raints. The impl
274d0 69 63 69 74 0a 20 20 20 20 20 20 20 55 53 49 4e  icit.       USIN
274e0 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e  G clause contain
274f0 73 20 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f  s each of the co
27500 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20  lumn names that 
27510 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68 0a 20  appear in both. 
27520 20 20 20 20 20 20 74 68 65 20 6c 65 66 74 20 61        the left a
27530 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e  nd right-hand in
27540 70 75 74 20 64 61 74 61 73 65 74 73 2e 29 5e 20  put datasets.)^ 
27550 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ^If the left and
27560 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20 20 20   right-hand.    
27570 20 20 20 69 6e 70 75 74 20 64 61 74 61 73 65 74     input dataset
27580 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d  s feature no com
27590 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  mon column names
275a0 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54 55 52  , then the NATUR
275b0 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20 20 20  AL keyword.     
275c0 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20    has no effect 
275d0 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
275e0 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55  f the join. ^A U
275f0 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73  SING or ON claus
27600 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f 74  e may.       not
27610 20 62 65 20 61 64 64 65 64 20 74 6f 20 61 20 6a   be added to a j
27620 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69 66 69  oin that specifi
27630 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  es the NATURAL k
27640 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20  eyword...  <li> 
27650 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e  <p>^(If the join
27660 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 22  -operator is a "
27670 4c 45 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c  LEFT JOIN" or "L
27680 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c  EFT OUTER JOIN",
27690 20 74 68 65 6e 0a 20 20 20 20 20 20 20 61 66 74   then.       aft
276a0 65 72 0a 20 20 20 20 20 20 20 74 68 65 20 4f 4e  er.       the ON
276b0 20 6f 72 20 55 53 49 4e 47 20 66 69 6c 74 65 72   or USING filter
276c0 69 6e 67 20 63 6c 61 75 73 65 73 20 68 61 76 65  ing clauses have
276d0 20 62 65 65 6e 20 61 70 70 6c 69 65 64 2c 20 61   been applied, a
276e0 6e 20 65 78 74 72 61 20 72 6f 77 20 69 73 20 0a  n extra row is .
276f0 20 20 20 20 20 20 20 61 64 64 65 64 20 74 6f 20         added to 
27700 74 68 65 20 6f 75 74 70 75 74 20 66 6f 72 20 65  the output for e
27710 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 6f  ach row in the o
27720 72 69 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e  riginal left-han
27730 64 20 69 6e 70 75 74 20 0a 20 20 20 20 20 20 20  d input .       
27740 64 61 74 61 73 65 74 20 74 68 61 74 20 63 6f 72  dataset that cor
27750 72 65 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72  responds to no r
27760 6f 77 73 20 61 74 20 61 6c 6c 20 69 6e 20 74 68  ows at all in th
27770 65 20 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20  e composite.    
27780 20 20 20 64 61 74 61 73 65 74 20 28 69 66 20 61     dataset (if a
27790 6e 79 29 2e 29 5e 20 5e 54 68 65 20 61 64 64 65  ny).)^ ^The adde
277a0 64 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e  d rows contain N
277b0 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  ULL values in th
277c0 65 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20  e columns.      
277d0 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
277e0 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c  ally contain val
277f0 75 65 73 20 63 6f 70 69 65 64 20 66 72 6f 6d 20  ues copied from 
27800 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 69  the right-hand i
27810 6e 70 75 74 0a 20 20 20 20 20 20 20 64 61 74 61  nput.       data
27820 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70  set.  .</ul>..<p
27830 3e 5e 28 57 68 65 6e 20 6d 6f 72 65 20 74 68 61  >^(When more tha
27840 6e 20 74 77 6f 20 74 61 62 6c 65 73 20 61 72 65  n two tables are
27850 20 6a 6f 69 6e 65 64 20 74 6f 67 65 74 68 65 72   joined together
27860 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 46 52   as part of a FR
27870 4f 4d 20 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a  OM clause,.the j
27880 6f 69 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20 61  oin operations a
27890 72 65 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20  re processed in 
278a0 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20  order from left 
278b0 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68  to right. In oth
278c0 65 72 20 0a 77 6f 72 64 73 2c 20 74 68 65 20 46  er .words, the F
278d0 52 4f 4d 20 63 6c 61 75 73 65 20 28 41 20 6a 6f  ROM clause (A jo
278e0 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f  in-op-1 B join-o
278f0 70 2d 32 20 43 29 20 69 73 20 63 6f 6d 70 75 74  p-2 C) is comput
27900 65 64 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d  ed as .((A join-
27910 6f 70 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d  op-1 B) join-op-
27920 32 20 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  2 C).)^..<tcl>hd
27930 5f 66 72 61 67 6d 65 6e 74 20 63 72 6f 73 73 6a  _fragment crossj
27940 6f 69 6e 20 7b 74 72 65 61 74 73 20 74 68 65 20  oin {treats the 
27950 43 52 4f 53 53 20 4a 4f 49 4e 20 6f 70 65 72 61  CROSS JOIN opera
27960 74 6f 72 20 73 70 65 63 69 61 6c 6c 79 7d 3c 2f  tor specially}</
27970 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20  tcl>.<p><b>Side 
27980 6e 6f 74 65 3a 20 53 70 65 63 69 61 6c 20 68 61  note: Special ha
27990 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20  ndling of CROSS 
279a0 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65  JOIN.</b>.^There
279b0 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63   is no differenc
279c0 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 22 49  e between the "I
279d0 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49  NNER JOIN", "JOI
279e0 4e 22 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a  N" and "," join.
279f0 6f 70 65 72 61 74 6f 72 73 2e 20 54 68 65 79 20  operators. They 
27a00 61 72 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69  are completely i
27a10 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20 69  nterchangeable i
27a20 6e 20 53 51 4c 69 74 65 2e 0a 5e 28 54 68 65 20  n SQLite..^(The 
27a30 22 43 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69  "CROSS JOIN" joi
27a40 6e 20 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75  n operator produ
27a50 63 65 73 20 74 68 65 20 73 61 6d 65 20 72 65 73  ces the same res
27a60 75 6c 74 20 61 73 20 74 68 65 20 0a 22 49 4e 4e  ult as the ."INN
27a70 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
27a80 20 61 6e 64 20 22 2c 22 20 6f 70 65 72 61 74 6f   and "," operato
27a90 72 73 29 5e 2c 20 62 75 74 20 69 73 20 0a 5b 43  rs)^, but is .[C
27aa0 52 4f 53 53 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65  ROSS JOIN|handle
27ab0 64 20 64 69 66 66 65 72 65 6e 74 6c 79 20 62 79  d differently by
27ac0 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
27ad0 69 7a 65 72 5d 0a 69 6e 20 74 68 61 74 20 69 74  izer].in that it
27ae0 20 70 72 65 76 65 6e 74 73 20 74 68 65 20 71 75   prevents the qu
27af0 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 66 72  ery optimizer fr
27b00 6f 6d 20 72 65 6f 72 64 65 72 69 6e 67 0a 74 68  om reordering.th
27b10 65 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  e tables in the 
27b20 6a 6f 69 6e 2e 20 20 41 6e 20 61 70 70 6c 69 63  join.  An applic
27b30 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 72  ation programmer
27b40 20 63 61 6e 20 75 73 65 20 74 68 65 20 43 52 4f   can use the CRO
27b50 53 53 20 4a 4f 49 4e 20 0a 6f 70 65 72 61 74 6f  SS JOIN .operato
27b60 72 20 74 6f 20 64 69 72 65 63 74 6c 79 20 69 6e  r to directly in
27b70 66 6c 75 65 6e 63 65 20 74 68 65 20 61 6c 67 6f  fluence the algo
27b80 72 69 74 68 6d 20 74 68 61 74 20 69 73 20 63 68  rithm that is ch
27b90 6f 73 65 6e 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  osen to implemen
27ba0 74 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  t.the SELECT sta
27bb0 74 65 6d 65 6e 74 2e 20 20 41 76 6f 69 64 20 75  tement.  Avoid u
27bc0 73 69 6e 67 20 43 52 4f 53 53 20 4a 4f 49 4e 20  sing CROSS JOIN 
27bd0 65 78 63 65 70 74 20 69 6e 20 73 70 65 63 69 66  except in specif
27be0 69 63 20 73 69 74 75 61 74 69 6f 6e 73 20 0a 77  ic situations .w
27bf0 68 65 72 65 20 6d 61 6e 75 61 6c 20 63 6f 6e 74  here manual cont
27c00 72 6f 6c 20 6f 66 20 74 68 65 20 71 75 65 72 79  rol of the query
27c10 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 64 65   optimizer is de
27c20 73 69 72 65 64 2e 20 20 41 76 6f 69 64 20 75 73  sired.  Avoid us
27c30 69 6e 67 0a 43 52 4f 53 53 20 4a 4f 49 4e 20 65  ing.CROSS JOIN e
27c40 61 72 6c 79 20 69 6e 20 74 68 65 20 64 65 76 65  arly in the deve
27c50 6c 6f 70 6d 65 6e 74 20 6f 66 20 61 6e 20 61 70  lopment of an ap
27c60 70 6c 69 63 61 74 69 6f 6e 20 61 73 20 64 6f 69  plication as doi
27c70 6e 67 20 73 6f 20 69 73 0a 61 20 3c 61 20 68 72  ng so is.a <a hr
27c80 65 66 3d 22 68 74 74 70 3a 2f 2f 63 32 2e 63 6f  ef="http://c2.co
27c90 6d 2f 63 67 69 2f 77 69 6b 69 3f 50 72 65 6d 61  m/cgi/wiki?Prema
27ca0 74 75 72 65 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  tureOptimization
27cb0 22 3e 70 72 65 6d 61 74 75 72 65 0a 6f 70 74 69  ">premature.opti
27cc0 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54  mization</a>.  T
27cd0 68 65 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c  he special handl
27ce0 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49  ing of CROSS JOI
27cf0 4e 20 69 73 20 61 6e 20 53 51 4c 69 74 65 2d 73  N is an SQLite-s
27d00 70 65 63 69 66 69 63 0a 66 65 61 74 75 72 65 20  pecific.feature 
27d10 61 6e 64 20 69 73 20 6e 6f 74 20 61 20 70 61 72  and is not a par
27d20 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51  t of standard SQ
27d30 4c 2e 0a 20 20 20 20 20 20 20 0a 0a 3c 74 63 6c  L..       ..<tcl
27d40 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65  >hd_fragment whe
27d50 72 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c  reclause</tcl>.<
27d60 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
27d70 7b 57 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f  {WHERE clause}</
27d80 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48  tcl>.<p><b>2. WH
27d90 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74 65  ERE clause filte
27da0 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28  ring.</b>..<p>^(
27db0 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
27dc0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
27dd0 74 68 65 20 57 48 45 52 45 20 65 78 70 72 65 73  the WHERE expres
27de0 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
27df0 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f 77 20  d for .each row 
27e00 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  in the input dat
27e10 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20  a as a [boolean 
27e20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c  expression]. Onl
27e30 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  y rows for which
27e40 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
27e50 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
27e60 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65 20 61  luates to true a
27e70 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d  re included from
27e80 20 74 68 65 20 64 61 74 61 73 65 74 20 62 65 66   the dataset bef
27e90 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e 29  ore.continuing.)
27ea0 5e 20 20 52 6f 77 73 20 61 72 65 20 65 78 63 6c  ^  Rows are excl
27eb0 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  uded from the re
27ec0 73 75 6c 74 20 69 66 20 74 68 65 20 57 48 45 52  sult if the WHER
27ed0 45 20 63 6c 61 75 73 65 0a 65 76 61 6c 75 61 74  E clause.evaluat
27ee0 65 73 20 74 6f 20 65 69 74 68 65 72 20 66 61 6c  es to either fal
27ef0 73 65 20 6f 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  se or NULL...<p>
27f00 46 6f 72 20 61 20 4a 4f 49 4e 20 6f 72 20 49 4e  For a JOIN or IN
27f10 4e 45 52 20 4a 4f 49 4e 20 6f 72 20 43 52 4f 53  NER JOIN or CROS
27f20 53 20 4a 4f 49 4e 2c 20 74 68 65 72 65 20 69 73  S JOIN, there is
27f30 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62   no difference b
27f40 65 74 77 65 65 6e 20 0a 61 20 63 6f 6e 73 74 72  etween .a constr
27f50 61 69 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  aint expression 
27f60 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  in the WHERE cla
27f70 75 73 65 20 61 6e 64 20 6f 6e 65 20 69 6e 20 74  use and one in t
27f80 68 65 20 4f 4e 20 63 6c 61 75 73 65 2e 20 20 48  he ON clause.  H
27f90 6f 77 65 76 65 72 2c 0a 66 6f 72 20 61 20 4c 45  owever,.for a LE
27fa0 46 54 20 4a 4f 49 4e 20 6f 72 20 4c 45 46 54 20  FT JOIN or LEFT 
27fb0 4f 55 54 45 52 20 4a 4f 49 4e 2c 20 74 68 65 20  OUTER JOIN, the 
27fc0 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 76 65  difference is ve
27fd0 72 79 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 0a  ry important.  .
27fe0 49 6e 20 61 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a  In a LEFT JOIN,.
27ff0 74 68 65 20 65 78 74 72 61 20 4e 55 4c 4c 20 72  the extra NULL r
28000 6f 77 20 66 6f 72 20 74 68 65 20 72 69 67 68 74  ow for the right
28010 2d 68 61 6e 64 20 74 61 62 6c 65 20 69 73 20 61  -hand table is a
28020 64 64 65 64 20 61 66 74 65 72 20 4f 4e 20 63 6c  dded after ON cl
28030 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 0a  ause processing.
28040 62 75 74 20 62 65 66 6f 72 65 20 57 48 45 52 45  but before WHERE
28050 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
28060 6e 67 2e 20 20 41 20 63 6f 6e 73 74 72 61 69 6e  ng.  A constrain
28070 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 6c  t of the form "l
28080 65 66 74 2e 78 3d 72 69 67 68 74 2e 79 22 0a 69  eft.x=right.y".i
28090 6e 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 77  n an ON clause w
280a0 69 6c 6c 20 74 68 65 72 65 66 6f 72 65 20 61 6c  ill therefore al
280b0 6c 6f 77 20 74 68 72 6f 75 67 68 20 74 68 65 20  low through the 
280c0 61 64 64 65 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72  added all-NULL r
280d0 6f 77 73 20 6f 66 20 74 68 65 0a 72 69 67 68 74  ows of the.right
280e0 20 74 61 62 6c 65 2e 20 20 42 75 74 20 69 66 20   table.  But if 
280f0 74 68 61 74 20 73 61 6d 65 20 63 6f 6e 73 74 72  that same constr
28100 61 69 6e 74 20 69 73 20 69 6e 20 74 68 65 20 57  aint is in the W
28110 48 45 52 45 20 63 6c 61 75 73 65 20 61 20 4e 55  HERE clause a NU
28120 4c 4c 20 69 6e 0a 22 72 69 67 68 74 2e 79 22 20  LL in."right.y" 
28130 77 69 6c 6c 20 70 72 65 76 65 6e 74 20 74 68 65  will prevent the
28140 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 65 66   expression "lef
28150 74 2e 78 3d 72 69 67 68 74 2e 79 22 20 66 72 6f  t.x=right.y" fro
28160 6d 20 62 65 69 6e 67 20 74 72 75 65 2c 20 61 6e  m being true, an
28170 64 0a 74 68 75 73 20 65 78 63 6c 75 64 65 20 74  d.thus exclude t
28180 68 61 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65  hat row from the
28190 20 6f 75 74 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e   output...<p><b>
281a0 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66  3. Generation of
281b0 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
281c0 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63  lt rows.</b>.<tc
281d0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65  l>hd_fragment re
281e0 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74  sultset</tcl>.<t
281f0 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
28200 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
28210 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42  ssions} {GROUP B
28220 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63  Y}</tcl>..<p>Onc
28230 65 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  e the input data
28240 20 66 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63   from the FROM c
28250 6c 61 75 73 65 20 68 61 73 20 62 65 65 6e 20 66  lause has been f
28260 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 0a 57  iltered by the.W
28270 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
28280 65 73 73 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c  ession (if any),
28290 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
282a0 6c 74 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20  lt rows for the 
282b0 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 61  simple .SELECT a
282c0 72 65 20 63 61 6c 63 75 6c 61 74 65 64 2e 20 45  re calculated. E
282d0 78 61 63 74 6c 79 20 68 6f 77 20 74 68 69 73 20  xactly how this 
282e0 69 73 20 64 6f 6e 65 20 64 65 70 65 6e 64 73 20  is done depends 
282f0 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 73  on whether the s
28300 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 69 73  imple .SELECT is
28310 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 6f 72   an aggregate or
28320 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
28330 75 65 72 79 2c 20 61 6e 64 20 77 68 65 74 68 65  uery, and whethe
28340 72 20 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55 50  r or not a GROUP
28350 0a 42 59 20 63 6c 61 75 73 65 20 77 61 73 20 73  .BY clause was s
28360 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54  pecified...<p> T
28370 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65  he list of expre
28380 73 73 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 74  ssions between t
28390 68 65 20 53 45 4c 45 43 54 20 61 6e 64 20 46 52  he SELECT and FR
283a0 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69 73 20 6b  OM keywords is k
283b0 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72 65 73 75  nown as.the resu
283c0 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
283d0 73 74 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c  st.  ^If a resul
283e0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
283f0 74 68 65 20 73 70 65 63 69 61 6c 20 65 78 70 72  the special expr
28400 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20  ession."*" then 
28410 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  all columns in t
28420 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 72  he input data ar
28430 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e substituted fo
28440 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65  r that one expre
28450 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20  ssion..^(If the 
28460 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
28470 65 20 61 6c 69 61 73 20 6f 66 20 61 20 74 61 62  e alias of a tab
28480 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
28490 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
284a0 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e  e.followed by ".
284b0 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75  *" then all colu
284c0 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d  mns from the nam
284d0 65 64 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ed table or subq
284e0 75 65 72 79 20 61 72 65 0a 73 75 62 73 74 69 74  uery are.substit
284f0 75 74 65 64 20 66 6f 72 20 74 68 65 20 73 69 6e  uted for the sin
28500 67 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 29  gle expression.)
28510 5e 20 5e 28 49 74 20 69 73 20 61 6e 20 65 72 72  ^ ^(It is an err
28520 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20  or to use a "*" 
28530 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78 70  or."alias.*" exp
28540 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63  ression in any c
28550 6f 6e 74 65 78 74 20 6f 74 68 65 72 20 74 68 61  ontext other tha
28560 6e 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65  n a result expre
28570 73 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28  ssion list.)^.^(
28580 49 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72  It is also an er
28590 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22  ror to use a "*"
285a0 20 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78   or "alias.*" ex
285b0 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69  pression in a si
285c0 6d 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72  mple SELECT.quer
285d0 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  y that does not 
285e0 68 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75  have a FROM clau
285f0 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65  se.)^..<p> ^(The
28600 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
28610 6e 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72  ns in the rows r
28620 65 74 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d  eturned by a sim
28630 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
28640 6d 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f  ment.is equal to
28650 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
28660 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
28670 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
28680 69 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73  ion list after.s
28690 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a  ubstitution of *
286a0 20 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70   and alias.* exp
286b0 72 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68  ressions.)^ Each
286c0 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63   result row is c
286d0 61 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61  alculated by.eva
286e0 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70 72  luating the expr
286f0 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72  essions in the r
28700 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
28710 20 6c 69 73 74 20 77 69 74 68 20 72 65 73 70 65   list with respe
28720 63 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72  ct to a.single r
28730 6f 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  ow of input data
28740 20 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61   or, for aggrega
28750 74 65 20 71 75 65 72 69 65 73 2c 20 77 69 74 68  te queries, with
28760 20 72 65 73 70 65 63 74 20 74 6f 20 61 20 67 72   respect to a gr
28770 6f 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75  oup.of rows...<u
28780 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
28790 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
287a0 6d 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e  ment is <b>a non
287b0 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
287c0 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20  </b>, then .    
287d0 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
287e0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
287f0 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73  pression list is
28800 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
28810 61 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74  ach row in.    t
28820 68 65 20 64 61 74 61 73 65 74 20 66 69 6c 74 65  he dataset filte
28830 72 65 64 20 62 79 20 74 68 65 20 57 48 45 52 45  red by the WHERE
28840 20 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e   clause...  <li>
28850 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43  <p>^If the SELEC
28860 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
28870 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
28880 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47  uery without a G
28890 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20  ROUP.    BY</b> 
288a0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63  clause, then eac
288b0 68 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  h aggregate expr
288c0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
288d0 73 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20  sult-set is .   
288e0 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
288f0 61 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72  across the entir
28900 65 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68  e dataset. ^Each
28910 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
28920 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e  xpression.    in
28930 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20   the result-set 
28940 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  is evaluated onc
28950 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61  e for an arbitra
28960 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
28970 77 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74  w of.    the dat
28980 61 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20  aset. ^The same 
28990 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65  arbitrarily sele
289a0 63 74 65 64 20 72 6f 77 20 69 73 20 75 73 65 64  cted row is used
289b0 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f   for each.    no
289c0 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
289d0 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20  ession. ^Or, if 
289e0 74 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74  the dataset cont
289f0 61 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20  ains zero rows, 
28a00 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e  then .    each n
28a10 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
28a20 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
28a30 61 74 65 64 20 61 67 61 69 6e 73 74 20 61 20 72  ated against a r
28a40 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20  ow consisting.  
28a50 20 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55    entirely of NU
28a60 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c  LL values...   <
28a70 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f  p>^The single ro
28a80 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  w of result-set 
28a90 64 61 74 61 20 63 72 65 61 74 65 64 20 62 79 20  data created by 
28aa0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
28ab0 67 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64  ggregate.    and
28ac0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
28ad0 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
28ae0 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72  e result-set for
28af0 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ms the result of
28b00 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74   an.    aggregat
28b10 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20  e query without 
28b20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
28b30 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65  e. ^An aggregate
28b40 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
28b50 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c  .    GROUP BY cl
28b60 61 75 73 65 20 61 6c 77 61 79 73 20 72 65 74 75  ause always retu
28b70 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  rns exactly one 
28b80 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65  row of data, eve
28b90 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 20  n if there are. 
28ba0 20 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20     zero rows of 
28bb0 69 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c  input data...  <
28bc0 6c 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53  li><p>^(If the S
28bd0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
28be0 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
28bf0 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
28c00 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e  GROUP.    BY</b>
28c10 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61   clause, then ea
28c20 63 68 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  ch of the expres
28c30 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20  sions specified 
28c40 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20  as part of the. 
28c50 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
28c60 73 65 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  se is evaluated 
28c70 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
28c80 74 68 65 20 64 61 74 61 73 65 74 2e 20 45 61 63  the dataset. Eac
28c90 68 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65  h row.    is the
28ca0 6e 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20  n assigned to a 
28cb0 22 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e  "group" based on
28cc0 20 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f   the results; ro
28cd0 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20  ws for which.   
28ce0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
28cf0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47  evaluating the G
28d00 52 4f 55 50 20 42 59 20 65 78 70 72 65 73 73 69  ROUP BY expressi
28d10 6f 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  ons are the same
28d20 20 67 65 74 0a 20 20 20 20 61 73 73 69 67 6e 65   get.    assigne
28d30 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72  d to the same gr
28d40 6f 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20  oup.)^ ^For the 
28d50 70 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75  purposes of grou
28d60 70 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20  ping rows, NULL 
28d70 0a 20 20 20 20 76 61 6c 75 65 73 20 61 72 65 20  .    values are 
28d80 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c  considered equal
28d90 2e 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c  . ^The usual rul
28da0 65 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f  es for [collatio
28db0 6e 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20  n|selecting a.  
28dc0 20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75    collation sequ
28dd0 65 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63 68  ence] with which
28de0 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
28df0 20 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68   values apply wh
28e00 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20  en evaluating.  
28e10 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e    expressions in
28e20 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
28e30 73 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73  se.  ^The expres
28e40 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f  sions in the GRO
28e50 55 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20  UP BY clause.   
28e60 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   do <em>not</em>
28e70 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70 72   have to be expr
28e80 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70  essions that app
28e90 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ear in the resul
28ea0 74 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72  t. ^The.    expr
28eb0 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f  essions in a GRO
28ec0 55 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79  UP BY clause may
28ed0 20 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61 74   not be aggregat
28ee0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a  e expressions...
28ef0 20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41      <p>^(If a HA
28f00 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
28f10 70 65 63 69 66 69 65 64 2c 20 69 74 20 69 73 20  pecified, it is 
28f20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
28f30 6f 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20  or each group . 
28f40 20 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20     of rows as a 
28f50 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
28f60 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73  ion]. If the res
28f70 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
28f80 67 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47  g the.    HAVING
28f90 20 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65   clause is false
28fa0 2c 20 74 68 65 20 67 72 6f 75 70 20 69 73 20 64  , the group is d
28fb0 69 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20  iscarded.)^ ^If 
28fc0 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  the HAVING claus
28fd0 65 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72  e is.    an aggr
28fe0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
28ff0 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
29000 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77  d across all row
29010 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  s in the group. 
29020 5e 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47  ^If.    a HAVING
29030 20 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e   clause is a non
29040 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
29050 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
29060 6c 75 61 74 65 64 20 77 69 74 68 20 72 65 73 70  luated with resp
29070 65 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72  ect.    to an ar
29080 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
29090 65 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20  ed row from the 
290a0 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56  group.  ^The HAV
290b0 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ING expression m
290c0 61 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20  ay.    refer to 
290d0 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67  values, even agg
290e0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
290f0 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69  , that are not i
29100 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70  n the result.</p
29110 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  >..    <p>^Each 
29120 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
29130 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
29140 74 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f  then evaluated o
29150 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20  nce for each.   
29160 20 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20   group of rows. 
29170 5e 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69  ^If the expressi
29180 6f 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  on is an aggrega
29190 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
291a0 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61  t is .    evalua
291b0 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ted across all r
291c0 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
291d0 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74  . ^Otherwise, it
291e0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67   is evaluated ag
291f0 61 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67  ainst.    a sing
29200 6c 65 20 61 72 62 69 74 72 61 72 69 6c 79 20 63  le arbitrarily c
29210 68 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77  hosen row from w
29220 69 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ithin the group.
29230 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f   ^If there is mo
29240 72 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20  re.    than one 
29250 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
29260 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
29270 72 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e  result-set, then
29280 20 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78   all such.    ex
29290 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76  pressions are ev
292a0 61 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65 20  aluated for the 
292b0 73 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c  same row...    <
292c0 70 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66  p>^Each group of
292d0 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 20 72   input dataset r
292e0 6f 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20  ows contributes 
292f0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20  a single row to 
29300 74 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20  the .    set of 
29310 72 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75  result rows. ^Su
29320 62 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69  bject to filteri
29330 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ng associated wi
29340 74 68 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a  th the DISTINCT.
29350 20 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65      keyword, the
29360 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
29370 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61  returned by an a
29380 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
29390 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20  ith a GROUP.    
293a0 42 59 20 63 6c 61 75 73 65 20 69 73 20 74 68 65  BY clause is the
293b0 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d   same as the num
293c0 62 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66  ber of groups of
293d0 20 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62   rows produced b
293e0 79 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74  y applying.    t
293f0 68 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20  he GROUP BY and 
29400 48 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74  HAVING clauses t
29410 6f 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  o the filtered i
29420 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f  nput dataset..</
29430 75 6c 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65  ul>..<p><b>4. Re
29440 6d 6f 76 61 6c 20 6f 66 20 64 75 70 6c 69 63 61  moval of duplica
29450 74 65 20 72 6f 77 73 20 28 44 49 53 54 49 4e 43  te rows (DISTINC
29460 54 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f  T processing).</
29470 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
29480 65 6e 74 20 64 69 73 74 69 6e 63 74 3c 2f 74 63  ent distinct</tc
29490 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
294a0 72 64 73 20 7b 44 49 53 54 49 4e 43 54 7d 3c 2f  rds {DISTINCT}</
294b0 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66  tcl>..<p>^One of
294c0 20 74 68 65 20 41 4c 4c 20 6f 72 20 44 49 53 54   the ALL or DIST
294d0 49 4e 43 54 20 6b 65 79 77 6f 72 64 73 20 6d 61  INCT keywords ma
294e0 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 53 45 4c  y follow the SEL
294f0 45 43 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 61  ECT keyword in a
29500 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20   .simple SELECT 
29510 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74  statement. ^If t
29520 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  he simple SELECT
29530 20 69 73 20 61 20 53 45 4c 45 43 54 20 41 4c 4c   is a SELECT ALL
29540 2c 20 74 68 65 6e 20 74 68 65 0a 65 6e 74 69 72  , then the.entir
29550 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
29560 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
29570 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 2e  d by the SELECT.
29580 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41 4c 4c   ^If neither ALL
29590 20 6f 72 0a 44 49 53 54 49 4e 43 54 20 61 72 65   or.DISTINCT are
295a0 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
295b0 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 61  he behavior is a
295c0 73 20 69 66 20 41 4c 4c 20 77 65 72 65 20 73 70  s if ALL were sp
295d0 65 63 69 66 69 65 64 2e 20 0a 5e 49 66 20 74 68  ecified. .^If th
295e0 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
295f0 69 73 20 61 20 53 45 4c 45 43 54 20 44 49 53 54  is a SELECT DIST
29600 49 4e 43 54 2c 20 74 68 65 6e 20 64 75 70 6c 69  INCT, then dupli
29610 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
29620 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 73  moved.from the s
29630 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
29640 73 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 72  s before it is r
29650 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72 20 74 68  eturned. ^For th
29660 65 20 70 75 72 70 6f 73 65 73 20 6f 66 0a 64 65  e purposes of.de
29670 74 65 63 74 69 6e 67 20 64 75 70 6c 69 63 61 74  tecting duplicat
29680 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e 55 4c 4c  e rows, two NULL
29690 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
296a0 69 64 65 72 65 64 20 74 6f 20 62 65 20 65 71 75  idered to be equ
296b0 61 6c 2e 20 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20  al. ^The.normal 
296c0 72 75 6c 65 73 20 66 6f 72 20 73 65 6c 65 63 74  rules for select
296d0 69 6e 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ing a collation 
296e0 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70  sequence to comp
296f0 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 20  are text values 
29700 77 69 74 68 0a 61 70 70 6c 79 2e 0a 0a 3c 74 63  with.apply...<tc
29710 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  l>.hd_fragment c
29720 6f 6d 70 6f 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e  ompound {compoun
29730 64 20 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f  d select} {compo
29740 75 6e 64 20 71 75 65 72 79 7d 20 7b 63 6f 6d 70  und query} {comp
29750 6f 75 6e 64 20 53 45 4c 45 43 54 7d 20 7b 63 6f  ound SELECT} {co
29760 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 7d 0a  mpound SELECTs}.
29770 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f  </tcl>.<h3>Compo
29780 75 6e 64 20 53 65 6c 65 63 74 20 53 74 61 74 65  und Select State
29790 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  ments</h3>..<p>T
297a0 77 6f 20 6f 72 20 6d 6f 72 65 20 5b 73 69 6d 70  wo or more [simp
297b0 6c 65 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65  le SELECT] state
297c0 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e  ments may be con
297d0 6e 65 63 74 65 64 20 74 6f 67 65 74 68 65 72 20  nected together 
297e0 74 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75  to form.a compou
297f0 6e 64 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20  nd SELECT using 
29800 74 68 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e  the UNION, UNION
29810 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20   ALL, INTERSECT 
29820 6f 72 20 45 58 43 45 50 54 20 6f 70 65 72 61 74  or EXCEPT operat
29830 6f 72 2c 0a 61 73 20 73 68 6f 77 6e 20 62 79 20  or,.as shown by 
29840 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69  the following di
29850 61 67 72 61 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65  agram:..<tcl>.Re
29860 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
29870 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 73 65  gram compound-se
29880 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  lect-stmt.</tcl>
29890 0a 0a 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f  ..<p>^In a compo
298a0 75 6e 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20  und SELECT, all 
298b0 74 68 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20  the constituent 
298c0 53 45 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74  SELECTs must ret
298d0 75 72 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75  urn the same .nu
298e0 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63  mber of result c
298f0 6f 6c 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20  olumns. ^As the 
29900 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20  components of a 
29910 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20  compound SELECT 
29920 6d 75 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53  must.be simple S
29930 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
29940 2c 20 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63  , they may not c
29950 6f 6e 74 61 69 6e 20 5b 4f 52 44 45 52 20 42 59  ontain [ORDER BY
29960 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61  ] or [LIMIT] cla
29970 75 73 65 73 2e 0a 5e 5b 4f 52 44 45 52 20 42 59  uses..^[ORDER BY
29980 5d 20 61 6e 64 20 5b 4c 49 4d 49 54 5d 20 63 6c  ] and [LIMIT] cl
29990 61 75 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f  auses may only o
299a0 63 63 75 72 20 61 74 20 74 68 65 20 65 6e 64 20  ccur at the end 
299b0 6f 66 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f  of the entire co
299c0 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 2c 20 61  mpound.SELECT, a
299d0 6e 64 20 74 68 65 6e 20 6f 6e 6c 79 20 69 66 20  nd then only if 
299e0 74 68 65 20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e  the final elemen
299f0 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e  t of the compoun
29a00 64 20 69 73 20 6e 6f 74 20 61 20 5b 56 41 4c 55  d is not a [VALU
29a10 45 53 5d 20 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e  ES] clause...<p>
29a20 5e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  ^A compound SELE
29a30 43 54 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  CT created using
29a40 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61   UNION ALL opera
29a50 74 6f 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  tor returns all 
29a60 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68  the rows.from th
29a70 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  e SELECT to the 
29a80 6c 65 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f  left of the UNIO
29a90 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20  N ALL operator, 
29aa0 61 6e 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73  and all the rows
29ab0 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54  .from the SELECT
29ac0 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66   to the right of
29ad0 20 69 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20   it. ^The UNION 
29ae0 6f 70 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74  operator works t
29af0 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55  he same way as.U
29b00 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74  NION ALL, except
29b10 20 74 68 61 74 20 64 75 70 6c 69 63 61 74 65 20   that duplicate 
29b20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
29b30 20 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20   from the final 
29b40 72 65 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65  result set..^The
29b50 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61   INTERSECT opera
29b60 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65 20  tor returns the 
29b70 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20  intersection of 
29b80 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
29b90 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
29ba0 74 20 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65  t SELECTs.  ^The
29bb0 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
29bc0 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 75 62   returns the sub
29bd0 73 65 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75  set of rows retu
29be0 72 6e 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74  rned by the.left
29bf0 20 53 45 4c 45 43 54 20 74 68 61 74 20 61 72 65   SELECT that are
29c00 20 6e 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e   not also return
29c10 65 64 20 62 79 20 74 68 65 20 72 69 67 68 74 2d  ed by the right-
29c20 68 61 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75  hand SELECT. ^Du
29c30 70 6c 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65  plicate.rows are
29c40 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
29c50 65 20 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54  e results of INT
29c60 45 52 53 45 43 54 20 61 6e 64 20 45 58 43 45 50  ERSECT and EXCEP
29c70 54 20 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f  T operators befo
29c80 72 65 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65  re the.result se
29c90 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a  t is returned...
29ca0 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70  <p>^For the purp
29cb0 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e  oses of determin
29cc0 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
29cd0 77 73 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ws for the resul
29ce0 74 73 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53  ts of compound.S
29cf0 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c  ELECT operators,
29d00 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
29d10 20 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61   considered equa
29d20 6c 20 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20  l to other NULL 
29d30 76 61 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69  values and.disti
29d40 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e  nct from all non
29d50 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54  -NULL values. ^T
29d60 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
29d70 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f  uence used to co
29d80 6d 70 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20  mpare .two text 
29d90 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d  values is determ
29da0 69 6e 65 64 20 61 73 20 69 66 20 74 68 65 20 63  ined as if the c
29db0 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
29dc0 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
29dd0 64 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d.SELECT stateme
29de0 6e 74 73 20 77 65 72 65 20 74 68 65 20 6c 65 66  nts were the lef
29df0 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
29e00 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65   operands of the
29e10 20 65 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72   equals (=).oper
29e20 61 74 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61  ator, except tha
29e30 74 20 67 72 65 61 74 65 72 20 70 72 65 63 65 64  t greater preced
29e40 65 6e 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69  ence is not assi
29e50 67 6e 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74  gned to a collat
29e60 69 6f 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70  ion .sequence sp
29e70 65 63 69 66 69 65 64 20 77 69 74 68 20 74 68 65  ecified with the
29e80 20 70 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45   postfix COLLATE
29e90 20 6f 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61   operator. ^No a
29ea0 66 66 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72  ffinity.transfor
29eb0 6d 61 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c  mations are appl
29ec0 69 65 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65  ied to any value
29ed0 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
29ee0 20 72 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66   rows as part of
29ef0 20 61 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a.compound SELE
29f00 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  CT. ..<p>^(When 
29f10 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69  three or more si
29f20 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65  mple SELECTs are
29f30 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20   connected into 
29f40 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
29f50 54 2c 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72  T,.they group fr
29f60 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
29f70 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
29f80 2c 20 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e  , if "A", "B" an
29f90 64 20 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69  d "C" are all.si
29fa0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
29fb0 65 6d 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20  ements, (A op B 
29fc0 6f 70 20 43 29 20 69 73 20 70 72 6f 63 65 73 73  op C) is process
29fd0 65 64 20 61 73 20 28 28 41 20 6f 70 20 42 29 20  ed as ((A op B) 
29fe0 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a  op C).)^..</p>..
29ff0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2a000 20 6f 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20   orderby {order 
2a010 62 79 7d 20 7b 4f 52 44 45 52 20 42 59 7d 3c 2f  by} {ORDER BY}</
2a020 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4f 52 44  tcl>.<h3>The ORD
2a030 45 52 20 42 59 20 63 6c 61 75 73 65 3c 2f 68 33  ER BY clause</h3
2a040 3e 0a 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43  >..<p>If a SELEC
2a050 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  T statement that
2a060 20 72 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68   returns more th
2a070 61 6e 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20  an one row does 
2a080 6e 6f 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45  not have an.ORDE
2a090 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
2a0a0 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
2a0b0 74 68 65 20 72 6f 77 73 20 61 72 65 20 72 65 74  the rows are ret
2a0c0 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e  urned is undefin
2a0d0 65 64 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c  ed..Or, if a SEL
2a0e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ECT statement do
2a0f0 65 73 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52  es have an ORDER
2a100 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
2a110 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70   the list of.exp
2a120 72 65 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65  ressions attache
2a130 64 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42  d to the ORDER B
2a140 59 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  Y determine the 
2a150 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
2a160 6f 77 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64  ows.are returned
2a170 20 74 6f 20 74 68 65 20 75 73 65 72 2e 0a 0a 3c   to the user...<
2a180 70 3e 0a 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e  p>.In a [compoun
2a190 64 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d  d SELECT] statem
2a1a0 65 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61  ent, only the la
2a1b0 73 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74  st or right-most
2a1c0 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d   [simple SELECT]
2a1d0 0a 6d 61 79 20 68 61 76 65 20 61 6e 20 4f 52 44  .may have an ORD
2a1e0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
2a1f0 61 74 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  at ORDER BY clau
2a200 73 65 20 77 69 6c 6c 20 61 70 70 6c 79 20 61 63  se will apply ac
2a210 72 6f 73 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74  ross all element
2a220 73 20 6f 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e  s of.the compoun
2a230 64 2e 20 49 66 20 74 68 65 20 72 69 67 68 74 2d  d. If the right-
2a240 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  most element of 
2a250 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
2a260 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53  CT] is a [VALUES
2a270 5d 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e  ] clause,.then n
2a280 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
2a290 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20  e is allowed on 
2a2a0 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a  that statement..
2a2b0 0a 0a 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20 66  ..<p>^Rows are f
2a2c0 69 72 73 74 20 73 6f 72 74 65 64 20 62 61 73 65  irst sorted base
2a2d0 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  d on the results
2a2e0 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   of.evaluating t
2a2f0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70  he left-most exp
2a300 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f  ression in the O
2a310 52 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68  RDER BY list, th
2a320 65 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b  en ties are brok
2a330 65 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67  en.by evaluating
2a340 20 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74   the second left
2a350 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e  -most expression
2a360 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20   and so on. The 
2a370 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74  order in which.t
2a380 77 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  wo rows for whic
2a390 68 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65  h all ORDER BY e
2a3a0 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
2a3b0 61 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c  ate to equal val
2a3c0 75 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64  ues are.returned
2a3d0 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e   is undefined. ^
2a3e0 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78  Each ORDER BY ex
2a3f0 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20  pression may be 
2a400 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
2a410 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68  wed.by one of th
2a420 65 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28  e keywords ASC (
2a430 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61  smaller values a
2a440 72 65 20 72 65 74 75 72 6e 65 64 20 66 69 72 73  re returned firs
2a450 74 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67  t) or DESC (larg
2a460 65 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65  er.values are re
2a470 74 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e  turned first). ^
2a480 49 66 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f  If neither ASC o
2a490 72 20 44 45 53 43 20 61 72 65 20 73 70 65 63 69  r DESC are speci
2a4a0 66 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73  fied, rows.are s
2a4b0 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69  orted in ascendi
2a4c0 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75  ng (smaller valu
2a4d0 65 73 20 66 69 72 73 74 29 20 6f 72 64 65 72 20  es first) order 
2a4e0 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e  by default...<p>
2a4f0 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78  Each ORDER BY ex
2a500 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63  pression is proc
2a510 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73  essed as follows
2a520 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
2a530 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52  <p>^If the ORDER
2a540 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
2a550 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74  s a constant int
2a560 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a  eger K then the.
2a570 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
2a580 6e 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61  nsidered an alia
2a590 73 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63  s for the K-th c
2a5a0 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73  olumn of the res
2a5b0 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73  ult set.(columns
2a5c0 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72   are numbered fr
2a5d0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
2a5e0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31   starting with 1
2a5f0 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  )...<li><p>^If t
2a600 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
2a610 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65  ession is an ide
2a620 6e 74 69 66 69 65 72 20 74 68 61 74 20 63 6f 72  ntifier that cor
2a630 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20  responds to.the 
2a640 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20  alias of one of 
2a650 74 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d  the output colum
2a660 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70  ns, then the exp
2a670 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69  ression is consi
2a680 64 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66  dered.an alias f
2a690 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  or that column..
2a6a0 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69  .<li><p>^Otherwi
2a6b0 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
2a6c0 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
2a6d0 73 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72  s any other expr
2a6e0 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65  ession, it .is e
2a6f0 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
2a700 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20   returned value 
2a710 75 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68  used to order th
2a720 65 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e  e output rows. ^
2a730 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74  If.the SELECT st
2a740 61 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d  atement is a sim
2a750 70 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ple SELECT, then
2a760 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79   an ORDER BY may
2a770 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62   contain any.arb
2a780 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f  itrary expressio
2a790 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  ns. ^However, if
2a7a0 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20 61   the SELECT is a
2a7b0 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
2a7c0 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20  , then.ORDER BY 
2a7d0 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
2a7e0 20 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73   are not aliases
2a7f0 20 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   to output colum
2a800 6e 73 20 6d 75 73 74 20 62 65 20 65 78 61 63 74  ns must be exact
2a810 6c 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61  ly.the same as a
2a820 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  n expression use
2a830 64 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63  d as an output c
2a840 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70  olumn..</ol>..<p
2a850 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73  >^For the purpos
2a860 65 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f  es of sorting ro
2a870 77 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ws, values are c
2a880 6f 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20 73  ompared in the s
2a890 61 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b  ame way.as for [
2a8a0 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65  comparison expre
2a8b0 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c  ssions]. The col
2a8c0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
2a8d0 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a  used to compare.
2a8e0 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20  two text values 
2a8f0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73  is determined as
2a900 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
2a910 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
2a920 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2a930 73 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64  sion is assigned
2a940 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
2a950 75 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68  uence using.  th
2a960 65 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41  e postfix [COLLA
2a970 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68  TE operator], th
2a980 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  en the specified
2a990 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
2a9a0 6e 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20  nce is.  used.. 
2a9b0 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69   <li><p>^Otherwi
2a9c0 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
2a9d0 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
2a9e0 73 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e  s an alias to an
2a9f0 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68   expression.  th
2aa00 61 74 20 68 61 73 20 62 65 65 6e 20 61 73 73 69  at has been assi
2aa10 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  gned a collation
2aa20 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20   sequence using 
2aa30 74 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b  the postfix .  [
2aa40 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
2aa50 5d 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c  ], then the coll
2aa60 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61  ation sequence a
2aa70 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61  ssigned to the a
2aa80 6c 69 61 73 65 64 0a 20 20 65 78 70 72 65 73 73  liased.  express
2aa90 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c  ion is used..  <
2aaa0 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
2aab0 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
2aac0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2aad0 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61  a column or an a
2aae0 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70  lias of.  an exp
2aaf0 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
2ab00 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74  a column, then t
2ab10 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
2ab20 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f  tion sequence fo
2ab30 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  r.  the column i
2ab40 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c  s used. .  <li><
2ab50 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68  p>^Otherwise, th
2ab60 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61  e [BINARY] colla
2ab70 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
2ab80 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   used..</ol>..<p
2ab90 3e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20  >In a [compound 
2aba0 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
2abb0 74 2c 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20  t, all ORDER BY 
2abc0 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
2abd0 68 61 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73  handled.as alias
2abe0 65 73 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68  es for one of th
2abf0 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  e result columns
2ac00 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64   of the compound
2ac10 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20  ..^(If an ORDER 
2ac20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2ac30 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20   not an integer 
2ac40 61 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69  alias, then SQLi
2ac50 74 65 20 73 65 61 72 63 68 65 73 0a 74 68 65 20  te searches.the 
2ac60 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54  left-most SELECT
2ac70 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64   in the compound
2ac80 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f   for a result co
2ac90 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65  lumn that matche
2aca0 73 20 65 69 74 68 65 72 0a 74 68 65 20 73 65 63  s either.the sec
2acb0 6f 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c  ond or third rul
2acc0 65 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d  es above. If a m
2acd0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
2ace0 68 65 20 73 65 61 72 63 68 20 73 74 6f 70 73 20  he search stops 
2acf0 61 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73 69  and.the expressi
2ad00 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73  on is handled as
2ad10 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
2ad20 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
2ad30 74 68 61 74 20 69 74 20 68 61 73 20 62 65 65 6e  that it has been
2ad40 0a 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74  .matched against
2ad50 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  . Otherwise, the
2ad60 20 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20   next SELECT to 
2ad70 74 68 65 20 72 69 67 68 74 20 69 73 20 74 72 69  the right is tri
2ad80 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e  ed, and so on.)^
2ad90 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67  .^If no matching
2ada0 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20   expression can 
2adb0 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  be found in the 
2adc0 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
2add0 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e  f any.constituen
2ade0 74 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20  t SELECT, it is 
2adf0 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20  an error. ^Each 
2ae00 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45  term of the ORDE
2ae10 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70  R BY clause is.p
2ae20 72 6f 63 65 73 73 65 64 20 73 65 70 61 72 61 74  rocessed separat
2ae30 65 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d  ely and may be m
2ae40 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 20 72  atched against r
2ae50 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72  esult columns fr
2ae60 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c  om different.SEL
2ae70 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69  ECT statements i
2ae80 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c  n the compound.<
2ae90 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
2aea0 67 6d 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65  gment limitoffse
2aeb0 74 20 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45  t {LIMIT} {OFFSE
2aec0 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  T}</tcl>.<h3>The
2aed0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68   LIMIT clause</h
2aee0 33 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d 49 54  3>..<p>The LIMIT
2aef0 20 63 6c 61 75 73 65 20 69 73 20 75 73 65 64 20   clause is used 
2af00 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65  to place an uppe
2af10 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e  r bound on the n
2af20 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65  umber of rows.re
2af30 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e  turned by the en
2af40 74 69 72 65 20 53 45 4c 45 43 54 20 73 74 61 74  tire SELECT stat
2af50 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 49 6e 20 61 20  ement...<p>In a 
2af60 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2af70 5d 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74  ], only the.last
2af80 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b   or right-most [
2af90 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d  simple SELECT] m
2afa0 61 79 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d  ay contain a LIM
2afb0 49 54 20 63 6c 61 75 73 65 2e 20 20 0a 49 6e 20  IT clause.  .In 
2afc0 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
2afd0 43 54 5d 2c 20 0a 74 68 65 20 4c 49 4d 49 54 20  CT], .the LIMIT 
2afe0 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20 74  clause applies t
2aff0 6f 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d  o the entire com
2b000 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a 75 73 74 20  pound, not just 
2b010 74 68 65 20 66 69 6e 61 6c 20 53 45 4c 45 43 54  the final SELECT
2b020 2e 0a 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d  ..If the right-m
2b030 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45  ost [simple SELE
2b040 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53  CT] is a [VALUES
2b050 20 63 6c 61 75 73 65 5d 20 74 68 65 6e 20 6e 6f   clause] then no
2b060 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 69 73   LIMIT clause.is
2b070 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70 3e 5e 41   allowed...<p>^A
2b080 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72 65 73  ny scalar expres
2b090 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73 65 64  sion may be used
2b0a0 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54 20 63   in the .LIMIT c
2b0b0 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67 20 61  lause, so long a
2b0c0 73 20 69 74 20 65 76 61 6c 75 61 74 65 73 20 74  s it evaluates t
2b0d0 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  o an integer or 
2b0e0 61 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  a value that can
2b0f0 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be.losslessly c
2b100 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
2b110 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68 65 20  nteger. ^If the 
2b120 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
2b130 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c 20 0a  ates to a NULL .
2b140 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f 74 68  value or any oth
2b150 65 72 20 76 61 6c 75 65 20 74 68 61 74 20 63 61  er value that ca
2b160 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73  nnot be lossless
2b170 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly converted to 
2b180 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e 0a 65  an integer, an.e
2b190 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
2b1a0 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20  . ^If the LIMIT 
2b1b0 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
2b1c0 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69  ates to a negati
2b1d0 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e 20 74  ve value,.then t
2b1e0 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70 65 72  here is no upper
2b1f0 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75   bound on the nu
2b200 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74  mber of rows ret
2b210 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77 69 73  urned. ^Otherwis
2b220 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20 72 65  e, the.SELECT re
2b230 74 75 72 6e 73 20 74 68 65 20 66 69 72 73 74 20  turns the first 
2b240 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20 72 65  N rows of its re
2b250 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c 20 77  sult set only, w
2b260 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 76 61  here N is the va
2b270 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c 49 4d  lue.that the LIM
2b280 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  IT expression ev
2b290 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f 72 2c  aluates to. ^Or,
2b2a0 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 20 73   if the SELECT s
2b2b0 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 0a 72  tatement would.r
2b2c0 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20  eturn less than 
2b2d0 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20 61  N rows without a
2b2e0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
2b2f0 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 72  hen the entire r
2b300 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72 65 74  esult set is.ret
2b310 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65  urned. ..<p>^The
2b320 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74 74 61   expression atta
2b330 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70 74 69  ched to the opti
2b340 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c 61 75  onal OFFSET clau
2b350 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f 6c 6c  se that may foll
2b360 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73  ow a.LIMIT claus
2b370 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76 61 6c  e must also eval
2b380 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74 65 67  uate to an integ
2b390 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65 20 74  er, or a value t
2b3a0 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c  hat can be.lossl
2b3b0 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
2b3c0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e  to an integer. ^
2b3d0 49 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  If an expression
2b3e0 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63   has an OFFSET c
2b3f0 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68 65 20  lause,.then the 
2b400 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65  first M rows are
2b410 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
2b420 65 20 72 65 73 75 6c 74 20 73 65 74 20 72 65 74  e result set ret
2b430 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
2b440 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20 61 6e  ECT.statement an
2b450 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72 6f 77  d the next N row
2b460 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 2c 20  s are returned, 
2b470 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20 61 72  where M and N ar
2b480 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61  e the values tha
2b490 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64  t.the OFFSET and
2b4a0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 65   LIMIT clauses e
2b4b0 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65 73 70  valuate to, resp
2b4c0 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c 20 69  ectively. ^Or, i
2b4d0 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77 6f 75  f the SELECT.wou
2b4e0 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73 20 74  ld return less t
2b4f0 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69 66 20  han M+N rows if 
2b500 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76 65 20  it did not have 
2b510 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
2b520 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74 20 4d  then the.first M
2b530 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65   rows are skippe
2b540 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  d and the remain
2b550 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61 6e 79  ing rows (if any
2b560 29 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 20  ) are returned. 
2b570 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54 20 63  ^If the.OFFSET c
2b580 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 73 20  lause evaluates 
2b590 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61  to a negative va
2b5a0 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73  lue, the results
2b5b0 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 61 73   are the same as
2b5c0 20 69 66 20 69 74 0a 68 61 64 20 65 76 61 6c 75   if it.had evalu
2b5d0 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c  ated to zero...<
2b5e0 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20 61 20  p>^Instead of a 
2b5f0 73 65 70 61 72 61 74 65 20 4f 46 46 53 45 54 20  separate OFFSET 
2b600 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49 4d 49  clause, the LIMI
2b610 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70 65  T clause may spe
2b620 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61 72 20  cify two.scalar 
2b630 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65 70 61  expressions sepa
2b640 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d 6d 61  rated by a comma
2b650 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c  . ^In this case,
2b660 20 74 68 65 20 66 69 72 73 74 20 65 78 70 72 65   the first expre
2b670 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20 61 73  ssion.is used as
2b680 20 74 68 65 20 4f 46 46 53 45 54 20 65 78 70 72   the OFFSET expr
2b690 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73  ession and the s
2b6a0 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c 49 4d  econd as the LIM
2b6b0 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 54  IT expression..T
2b6c0 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72 2d 69  his is counter-i
2b6d0 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77 68 65  ntuitive, as whe
2b6e0 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46 46 53  n using the OFFS
2b6f0 45 54 20 63 6c 61 75 73 65 20 74 68 65 20 73 65  ET clause the se
2b700 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77 6f 20  cond of.the two 
2b710 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74  expressions is t
2b720 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 74 68  he OFFSET and th
2b730 65 20 66 69 72 73 74 20 74 68 65 20 4c 49 4d 49  e first the LIMI
2b740 54 2e 20 0a 54 68 69 73 20 72 65 76 65 72 73 61  T. .This reversa
2b750 6c 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20  l of the offset 
2b760 61 6e 64 20 6c 69 6d 69 74 20 69 73 20 69 6e 74  and limit is int
2b770 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61  entional.- it ma
2b780 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62  ximizes compatib
2b790 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72  ility with other
2b7a0 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79   SQL database sy
2b7b0 73 74 65 6d 73 2e 0a 48 6f 77 65 76 65 72 2c 20  stems..However, 
2b7c0 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
2b7d0 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20  on, programmers 
2b7e0 61 72 65 20 73 74 72 6f 6e 67 6c 79 20 65 6e 63  are strongly enc
2b7f0 6f 75 72 61 67 65 64 20 74 6f 20 75 73 65 0a 74  ouraged to use.t
2b800 68 65 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 4c  he form of the L
2b810 49 4d 49 54 20 63 6c 61 75 73 65 20 74 68 61 74  IMIT clause that
2b820 20 75 73 65 73 20 74 68 65 20 22 4f 46 46 53 45   uses the "OFFSE
2b830 54 22 20 6b 65 79 77 6f 72 64 20 61 6e 64 20 61  T" keyword and a
2b840 76 6f 69 64 0a 75 73 69 6e 67 20 61 20 4c 49 4d  void.using a LIM
2b850 49 54 20 63 6c 61 75 73 65 20 77 69 74 68 20 61  IT clause with a
2b860 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64   comma-separated
2b870 20 6f 66 66 73 65 74 2e 0a 0a 3c 74 63 6c 3e 68   offset...<tcl>h
2b880 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c 75 65  d_fragment value
2b890 73 20 7b 56 41 4c 55 45 53 20 63 6c 61 75 73 65  s {VALUES clause
2b8a0 7d 20 56 41 4c 55 45 53 3c 2f 74 63 6c 3e 0a 3c  } VALUES</tcl>.<
2b8b0 68 33 3e 54 68 65 20 56 41 4c 55 45 53 20 63 6c  h3>The VALUES cl
2b8c0 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ause</h3>..<p>Th
2b8d0 65 20 70 68 72 61 73 65 20 22 56 41 4c 55 45 53  e phrase "VALUES
2b8e0 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f 69  (<i>expr-list</i
2b8f0 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61  >)" means the sa
2b900 6d 65 20 74 68 69 6e 67 0a 61 73 20 22 53 45 4c  me thing.as "SEL
2b910 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74  ECT <i>expr-list
2b920 3c 2f 69 3e 22 2e 20 20 54 68 65 20 70 68 72 61  </i>".  The phra
2b930 73 65 0a 22 56 41 4c 55 45 53 28 3c 69 3e 65 78  se."VALUES(<i>ex
2b940 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e 29 2c 2e  pr-list-1</i>),.
2b950 2e 2e 2c 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74  ..,(<i>expr-list
2b960 2d 4e 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74  -N</i>)" means t
2b970 68 65 20 73 61 6d 65 0a 74 68 69 6e 67 20 61 73  he same.thing as
2b980 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72   "SELECT <i>expr
2b990 2d 6c 69 73 74 2d 31 3c 2f 69 3e 20 55 4e 49 4f  -list-1</i> UNIO
2b9a0 4e 20 41 4c 4c 20 2e 2e 2e 20 55 4e 49 4f 4e 20  N ALL ... UNION 
2b9b0 41 4c 4c 0a 53 45 4c 45 43 54 20 3c 69 3e 65 78  ALL.SELECT <i>ex
2b9c0 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 22 2e 20  pr-list-N</i>". 
2b9d0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 61 64 76   There is no adv
2b9e0 61 6e 74 61 67 65 20 74 6f 20 75 73 69 6e 67 20  antage to using 
2b9f0 6f 6e 65 20 66 6f 72 6d 0a 6f 76 65 72 20 74 68  one form.over th
2ba00 65 20 6f 74 68 65 72 2e 20 20 42 6f 74 68 20 66  e other.  Both f
2ba10 6f 72 6d 73 20 79 69 65 6c 64 20 74 68 65 20 73  orms yield the s
2ba20 61 6d 65 20 72 65 73 75 6c 74 20 61 6e 64 20 62  ame result and b
2ba30 6f 74 68 20 66 6f 72 6d 73 20 75 73 65 0a 74 68  oth forms use.th
2ba40 65 20 73 61 6d 65 20 61 6d 6f 75 6e 74 20 6f 66  e same amount of
2ba50 20 6d 65 6d 6f 72 79 20 61 6e 64 20 70 72 6f 63   memory and proc
2ba60 65 73 73 69 6e 67 20 74 69 6d 65 2e 0a 0a 3c 70  essing time...<p
2ba70 3e 54 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20  >There are some 
2ba80 72 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20  restrictions on 
2ba90 74 68 65 20 75 73 65 20 6f 66 20 61 20 56 41 4c  the use of a VAL
2baa0 55 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20  UES clause that 
2bab0 61 72 65 0a 6e 6f 74 20 73 68 6f 77 6e 20 6f 6e  are.not shown on
2bac0 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
2bad0 72 61 6d 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  rams:..<ul>.<li>
2bae0 3c 70 3e 0a 41 20 56 41 4c 55 45 53 20 63 6c 61  <p>.A VALUES cla
2baf0 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f  use cannot be fo
2bb00 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 52 44 45 52  llowed by [ORDER
2bb10 20 42 59 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d 2e   BY] or [LIMIT].
2bb20 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41 20 56 41 4c 55  ..<li><p>.A VALU
2bb30 45 53 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  ES clause cannot
2bb40 20 62 65 20 75 73 65 64 20 74 6f 67 65 74 68 65   be used togethe
2bb50 72 20 77 69 74 68 20 61 20 5b 57 49 54 48 5d 20  r with a [WITH] 
2bb60 63 6c 61 75 73 65 20 69 6e 20 61 0a 5b 73 69 6d  clause in a.[sim
2bb70 70 6c 65 20 53 45 4c 45 43 54 5d 2e 0a 3c 2f 75  ple SELECT]..</u
2bb80 6c 3e 0a 0a 0a 3c 68 33 3e 54 68 65 20 57 49 54  l>...<h3>The WIT
2bb90 48 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c  H Clause</h3>..<
2bba0 70 3e 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  p>SELECT stateme
2bbb0 6e 74 73 20 6d 61 79 20 62 65 20 6f 70 74 69 6f  nts may be optio
2bbc0 6e 61 6c 6c 79 20 70 72 65 63 65 64 65 64 20 62  nally preceded b
2bbd0 79 20 61 20 73 69 6e 67 6c 65 0a 5b 57 49 54 48  y a single.[WITH
2bbe0 20 63 6c 61 75 73 65 5d 20 74 68 61 74 20 64 65   clause] that de
2bbf0 66 69 6e 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  fines one or mor
2bc00 65 20 5b 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  e [common table 
2bc10 65 78 70 72 65 73 73 69 6f 6e 73 5d 0a 66 6f 72  expressions].for
2bc20 20 75 73 65 20 77 69 74 68 69 6e 20 74 68 65 20   use within the 
2bc30 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2bc40 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ....<tcl>.######
2bc50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc90 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
2bca0 20 55 50 44 41 54 45 20 75 70 64 61 74 65 20 7b   UPDATE update {
2bcb0 55 50 44 41 54 45 20 2a 55 50 44 41 54 45 73 7d  UPDATE *UPDATEs}
2bcc0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
2bcd0 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d  eDiagram update-
2bce0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
2bcf0 5e 41 6e 20 55 50 44 41 54 45 20 73 74 61 74 65  ^An UPDATE state
2bd00 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
2bd10 6d 6f 64 69 66 79 20 61 20 73 75 62 73 65 74 20  modify a subset 
2bd20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  of the values st
2bd30 6f 72 65 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72  ored in .zero or
2bd40 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68   more rows of th
2bd50 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
2bd60 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
2bd70 68 65 20 0a 3c 69 3e 71 75 61 6c 69 66 69 65 64  he .<i>qualified
2bd80 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  -table-name</i> 
2bd90 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
2bda0 74 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  t of the UPDATE 
2bdb0 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e  statement...<p>^
2bdc0 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
2bdd0 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
2bde0 20 68 61 76 65 20 61 20 57 48 45 52 45 20 63 6c   have a WHERE cl
2bdf0 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69  ause, all rows i
2be00 6e 20 74 68 65 0a 74 61 62 6c 65 20 61 72 65 20  n the.table are 
2be10 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68 65 20  modified by the 
2be20 55 50 44 41 54 45 2e 20 5e 4f 74 68 65 72 77 69  UPDATE. ^Otherwi
2be30 73 65 2c 20 74 68 65 20 55 50 44 41 54 45 20 61  se, the UPDATE a
2be40 66 66 65 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73  ffects only thos
2be50 65 0a 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  e.rows for which
2be60 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65   the result of e
2be70 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 57 48  valuating the WH
2be80 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
2be90 73 73 69 6f 6e 20 61 73 20 61 20 0a 5b 62 6f 6f  ssion as a .[boo
2bea0 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c  lean expression|
2beb0 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
2bec0 6f 6e 20 69 73 20 74 72 75 65 5d 2e 20 5e 49 74  on is true]. ^It
2bed0 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   is not an error
2bee0 20 69 66 20 74 68 65 0a 57 48 45 52 45 20 63 6c   if the.WHERE cl
2bef0 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 65 76  ause does not ev
2bf00 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65 20 66  aluate to true f
2bf10 6f 72 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68  or any row in th
2bf20 65 20 74 61 62 6c 65 20 2d 20 74 68 69 73 20 6a  e table - this j
2bf30 75 73 74 0a 6d 65 61 6e 73 20 74 68 61 74 20 74  ust.means that t
2bf40 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
2bf50 65 6e 74 20 61 66 66 65 63 74 73 20 7a 65 72 6f  ent affects zero
2bf60 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d   rows...<p>The m
2bf70 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 6d 61 64  odifications mad
2bf80 65 20 74 6f 20 65 61 63 68 20 72 6f 77 20 61 66  e to each row af
2bf90 66 65 63 74 65 64 20 62 79 20 61 6e 20 55 50 44  fected by an UPD
2bfa0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 72  ATE statement ar
2bfb0 65 0a 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e.determined by 
2bfc0 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69  the list of assi
2bfd0 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e  gnments followin
2bfe0 67 20 74 68 65 20 53 45 54 20 6b 65 79 77 6f 72  g the SET keywor
2bff0 64 2e 20 45 61 63 68 0a 61 73 73 69 67 6e 6d 65  d. Each.assignme
2c000 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 20 63  nt specifies a c
2c010 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68  olumn name to th
2c020 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71  e left of the eq
2c030 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 0a  uals sign and a.
2c040 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
2c050 6e 20 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20  n to the right. 
2c060 5e 46 6f 72 20 65 61 63 68 20 61 66 66 65 63 74  ^For each affect
2c070 65 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65  ed row, the name
2c080 64 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65  d columns.are se
2c090 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20  t to the values 
2c0a0 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74  found by evaluat
2c0b0 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
2c0c0 6e 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65 78  nding scalar .ex
2c0d0 70 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61  pressions. ^If a
2c0e0 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e   single column-n
2c0f0 61 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72 65  ame appears more
2c100 20 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68   than once in th
2c110 65 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e  e list of.assign
2c120 6d 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  ment expressions
2c130 2c 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72 69  , all but the ri
2c140 67 68 74 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e  ghtmost occurren
2c150 63 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e  ce is ignored. ^
2c160 43 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20  Columns.that do 
2c170 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  not appear in th
2c180 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e  e list of assign
2c190 6d 65 6e 74 73 20 61 72 65 20 6c 65 66 74 20 75  ments are left u
2c1a0 6e 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68 65 20  nmodified. ^The 
2c1b0 73 63 61 6c 61 72 0a 65 78 70 72 65 73 73 69 6f  scalar.expressio
2c1c0 6e 73 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20  ns may refer to 
2c1d0 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 72  columns of the r
2c1e0 6f 77 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  ow being updated
2c1f0 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 20  . ^In this case 
2c200 61 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70 72 65  all.scalar expre
2c210 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75  ssions are evalu
2c220 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20  ated before any 
2c230 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20  assignments are 
2c240 6d 61 64 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  made...<p>^The o
2c250 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74  ptional conflict
2c260 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74  -clause allows t
2c270 68 65 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e  he user to nomin
2c280 61 74 65 20 61 20 73 70 65 63 69 66 69 63 0a 63  ate a specific.c
2c290 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
2c2a0 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
2c2b0 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64  gorithm to use d
2c2c0 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55  uring this one U
2c2d0 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52  PDATE command..R
2c2e0 65 66 65 72 20 74 6f 20 74 68 65 20 73 65 63 74  efer to the sect
2c2f0 69 6f 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e  ion entitled [ON
2c300 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61   CONFLICT] for a
2c310 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
2c320 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74  ation...<h3>Rest
2c330 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41  rictions on UPDA
2c340 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69  TE Statements Wi
2c350 74 68 69 6e 20 43 52 45 41 54 45 20 54 52 49 47  thin CREATE TRIG
2c360 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  GER</h3>..<p>The
2c370 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74   following addit
2c380 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73  ional syntax res
2c390 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  trictions apply 
2c3a0 74 6f 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  to UPDATE statem
2c3b0 65 6e 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20  ents that.occur 
2c3c0 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
2c3d0 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54 52 49  of a [CREATE TRI
2c3e0 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
2c3f0 20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c    ..<ul>.  <li><
2c400 70 3e 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d  p>^The <i>table-
2c410 6e 61 6d 65 3c 2f 69 3e 20 73 70 65 63 69 66 69  name</i> specifi
2c420 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
2c430 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2c440 74 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61  t within.      a
2c450 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75   trigger body mu
2c460 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65  st be unqualifie
2c470 64 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f  d. ^(In other wo
2c480 72 64 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c  rds, the.      <
2c490 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
2c4a0 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66  /i><b>.</b> pref
2c4b0 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  ix on the table 
2c4c0 6e 61 6d 65 20 6f 66 20 74 68 65 20 55 50 44 41  name of the UPDA
2c4d0 54 45 20 69 73 0a 20 20 20 20 20 20 6e 6f 74 20  TE is.      not 
2c4e0 61 6c 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74  allowed within t
2c4f0 72 69 67 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65  riggers.)^ ^Unle
2c500 73 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  ss the table to 
2c510 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
2c520 72 0a 20 20 20 20 20 20 69 73 20 61 74 74 61 63  r.      is attac
2c530 68 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45  hed is in the TE
2c540 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  MP database, the
2c550 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64   table being upd
2c560 61 74 65 64 20 62 79 20 74 68 65 0a 20 20 20 20  ated by the.    
2c570 20 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61    trigger progra
2c580 6d 20 6d 75 73 74 20 72 65 73 69 64 65 20 69 6e  m must reside in
2c590 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
2c5a0 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68  se as it. ^If th
2c5b0 65 20 74 61 62 6c 65 0a 20 20 20 20 20 20 74 6f  e table.      to
2c5c0 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
2c5d0 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69  er is attached i
2c5e0 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
2c5f0 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65  tabase, then the
2c600 0a 20 20 20 20 20 20 75 6e 71 75 61 6c 69 66 69  .      unqualifi
2c610 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
2c620 61 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74  able being updat
2c630 65 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69  ed is resolved i
2c640 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 0a 20  n the same way. 
2c650 20 20 20 20 20 61 73 20 69 74 20 69 73 20 66 6f       as it is fo
2c660 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74  r a top-level st
2c670 61 74 65 6d 65 6e 74 20 28 62 79 20 73 65 61 72  atement (by sear
2c680 63 68 69 6e 67 20 66 69 72 73 74 20 74 68 65 20  ching first the 
2c690 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 0a 20  TEMP database,. 
2c6a0 20 20 20 20 20 74 68 65 6e 20 74 68 65 20 6d 61       then the ma
2c6b0 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  in database, the
2c6c0 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61 74 61  n any other data
2c6d0 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f 72 64  bases in the ord
2c6e0 65 72 20 74 68 65 79 20 77 65 72 65 0a 20 20 20  er they were.   
2c6f0 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 0a 20     attached)... 
2c700 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44   <li><p>^The IND
2c710 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20  EXED BY and NOT 
2c720 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20  INDEXED clauses 
2c730 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  are not allowed 
2c740 6f 6e 20 55 50 44 41 54 45 0a 20 20 20 20 20 20  on UPDATE.      
2c750 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
2c760 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  n triggers.</p>.
2c770 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c  .  <li><p>^The L
2c780 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42  IMIT and ORDER B
2c790 59 20 63 6c 61 75 73 65 73 20 66 6f 72 20 55 50  Y clauses for UP
2c7a0 44 41 54 45 20 61 72 65 20 75 6e 73 75 70 70 6f  DATE are unsuppo
2c7b0 72 74 65 64 20 77 69 74 68 69 6e 0a 20 20 20 20  rted within.    
2c7c0 20 20 74 72 69 67 67 65 72 73 2c 20 72 65 67 61    triggers, rega
2c7d0 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f  rdless of the co
2c7e0 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
2c7f0 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  s used to build 
2c800 53 51 4c 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  SQLite..</ul>..<
2c810 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49  h3>Optional LIMI
2c820 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 43  T and ORDER BY C
2c830 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  lauses</h3>..<p>
2c840 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73 20 62  ^(If SQLite is b
2c850 75 69 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53  uilt with the [S
2c860 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
2c870 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
2c880 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ].compile-time o
2c890 70 74 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73  ption then the s
2c8a0 79 6e 74 61 78 20 6f 66 20 74 68 65 20 55 50 44  yntax of the UPD
2c8b0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ATE statement is
2c8c0 20 65 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f   extended.with o
2c8d0 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59  ptional ORDER BY
2c8e0 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
2c8f0 65 73 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  es)^ as follows:
2c900 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
2c910 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d  eDiagram update-
2c920 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
2c930 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50  l>..<p>^If an UP
2c940 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  DATE statement h
2c950 61 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  as a LIMIT claus
2c960 65 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  e, the maximum n
2c970 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68  umber of rows th
2c980 61 74 0a 77 69 6c 6c 20 62 65 20 75 70 64 61 74  at.will be updat
2c990 65 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65  ed is found by e
2c9a0 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63  valuating the ac
2c9b0 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65  companying expre
2c9c0 73 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e  ssion and castin
2c9d0 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  g.it to an integ
2c9e0 65 72 20 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67  er value. ^A neg
2c9f0 61 74 69 76 65 20 76 61 6c 75 65 20 69 73 20 69  ative value is i
2ca00 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22 6e  nterpreted as "n
2ca10 6f 20 6c 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49  o limit"...<p>^I
2ca20 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72  f the LIMIT expr
2ca30 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
2ca40 20 74 6f 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65   to non-negative
2ca50 20 76 61 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20   value <i>N</i> 
2ca60 61 6e 64 20 74 68 65 0a 55 50 44 41 54 45 20 73  and the.UPDATE s
2ca70 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20  tatement has an 
2ca80 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
2ca90 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74   then all rows t
2caa0 68 61 74 20 77 6f 75 6c 64 20 62 65 20 75 70 64  hat would be upd
2cab0 61 74 65 64 20 69 6e 0a 74 68 65 20 61 62 73 65  ated in.the abse
2cac0 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  nce of the LIMIT
2cad0 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74   clause are sort
2cae0 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ed according to 
2caf0 74 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64  the ORDER BY and
2cb00 20 74 68 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c   the.first <i>N<
2cb10 2f 69 3e 20 75 70 64 61 74 65 64 2e 20 5e 28 49  /i> updated. ^(I
2cb20 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
2cb30 74 65 6d 65 6e 74 20 61 6c 73 6f 20 68 61 73 20  tement also has 
2cb40 61 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  an OFFSET clause
2cb50 2c 0a 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d  ,.then it is sim
2cb60 69 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64  ilarly evaluated
2cb70 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 20   and cast to an 
2cb80 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
2cb90 66 20 74 68 65 20 4f 46 46 53 45 54 0a 65 78 70  f the OFFSET.exp
2cba0 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
2cbb0 73 20 74 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74  s to a non-negat
2cbc0 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f  ive value <i>M</
2cbd0 69 3e 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72  i>, then the fir
2cbe0 73 74 20 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73  st <i>M</i>.rows
2cbf0 20 61 72 65 20 73 6b 69 70 70 65 64 20 61 6e 64   are skipped and
2cc00 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c   the following <
2cc10 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64  i>N</i> rows upd
2cc20 61 74 65 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a  ated instead.)^.
2cc30 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41  .<p>^If the UPDA
2cc40 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
2cc50 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61   no ORDER BY cla
2cc60 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f  use, then all ro
2cc70 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65  ws that.would be
2cc80 20 75 70 64 61 74 65 64 20 69 6e 20 74 68 65 20   updated in the 
2cc90 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
2cca0 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
2ccb0 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a  assembled in an.
2ccc0 61 72 62 69 74 72 61 72 79 20 6f 72 64 65 72 20  arbitrary order 
2ccd0 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20  before applying 
2cce0 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  the LIMIT and OF
2ccf0 46 53 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20  FSET clauses to 
2cd00 64 65 74 65 72 6d 69 6e 65 20 0a 77 68 69 63 68  determine .which
2cd10 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 70   are actually up
2cd20 64 61 74 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65  dated...<p>^(The
2cd30 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2cd40 20 6f 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74   on an UPDATE st
2cd50 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
2cd60 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e  only to determin
2cd70 65 20 77 68 69 63 68 0a 72 6f 77 73 20 66 61 6c  e which.rows fal
2cd80 6c 20 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d  l within the LIM
2cd90 49 54 2e 20 54 68 65 20 6f 72 64 65 72 20 69 6e  IT. The order in
2cda0 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
2cdb0 6d 6f 64 69 66 69 65 64 20 69 73 20 61 72 62 69  modified is arbi
2cdc0 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74  trary.and is not
2cdd0 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79 20 74   influenced by t
2cde0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
2cdf0 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  se.)^..<tcl>.###
2ce00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ce40 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
2ce50 69 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75  ion VACUUM vacuu
2ce60 6d 20 56 41 43 55 55 4d 0a 0a 52 65 63 75 72 73  m VACUUM..Recurs
2ce70 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
2ce80 20 76 61 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74   vacuum-stmt.</t
2ce90 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56  cl>..<p>.  The V
2cea0 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65  ACUUM command re
2ceb0 62 75 69 6c 64 73 20 74 68 65 20 65 6e 74 69 72  builds the entir
2cec0 65 20 64 61 74 61 62 61 73 65 2e 20 54 68 65 72  e database. Ther
2ced0 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 0a 20  e are several . 
2cee0 20 72 65 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c   reasons an appl
2cef0 69 63 61 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f  ication might do
2cf00 20 74 68 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c   this:..<ul>.  <
2cf10 6c 69 3e 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20  li> <p> ^Unless 
2cf20 53 51 4c 69 74 65 20 69 73 20 72 75 6e 6e 69 6e  SQLite is runnin
2cf30 67 20 69 6e 20 22 61 75 74 6f 5f 76 61 63 75 75  g in "auto_vacuu
2cf40 6d 3d 46 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68  m=FULL" mode, wh
2cf50 65 6e 20 61 20 6c 61 72 67 65 0a 20 20 20 20 20  en a large.     
2cf60 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69  amount of data i
2cf70 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74  s deleted from t
2cf80 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2cf90 20 69 74 20 6c 65 61 76 65 73 20 62 65 68 69 6e   it leaves behin
2cfa0 64 20 65 6d 70 74 79 0a 20 20 20 20 20 73 70 61  d empty.     spa
2cfb0 63 65 2c 20 6f 72 20 22 66 72 65 65 22 20 64 61  ce, or "free" da
2cfc0 74 61 62 61 73 65 20 70 61 67 65 73 2e 20 54 68  tabase pages. Th
2cfd0 69 73 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74  is means the dat
2cfe0 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74  abase file might
2cff0 0a 20 20 20 20 20 62 65 20 6c 61 72 67 65 72 20  .     be larger 
2d000 74 68 61 6e 20 73 74 72 69 63 74 6c 79 20 6e 65  than strictly ne
2d010 63 65 73 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e  cessary. ^Runnin
2d020 67 20 56 41 43 55 55 4d 20 74 6f 20 72 65 62 75  g VACUUM to rebu
2d030 69 6c 64 20 74 68 65 20 0a 20 20 20 20 20 64 61  ild the .     da
2d040 74 61 62 61 73 65 20 72 65 63 6c 61 69 6d 73 20  tabase reclaims 
2d050 74 68 69 73 20 73 70 61 63 65 20 61 6e 64 20 72  this space and r
2d060 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 20  educes the size 
2d070 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2d080 66 69 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  file...  <li> <p
2d090 3e 20 5e 46 72 65 71 75 65 6e 74 20 69 6e 73 65  > ^Frequent inse
2d0a0 72 74 73 2c 20 75 70 64 61 74 65 73 2c 20 61 6e  rts, updates, an
2d0b0 64 20 64 65 6c 65 74 65 73 20 63 61 6e 20 63 61  d deletes can ca
2d0c0 75 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65  use the database
2d0d0 20 66 69 6c 65 0a 20 20 20 20 20 74 6f 20 62 65   file.     to be
2d0e0 63 6f 6d 65 20 66 72 61 67 6d 65 6e 74 65 64 20  come fragmented 
2d0f0 2d 20 77 68 65 72 65 20 64 61 74 61 20 66 6f 72  - where data for
2d100 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
2d110 6f 72 20 69 6e 64 65 78 20 69 73 20 73 63 61 74  or index is scat
2d120 74 65 72 65 64 20 0a 20 20 20 20 20 61 72 6f 75  tered .     arou
2d130 6e 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  nd the database 
2d140 66 69 6c 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  file. ^Running V
2d150 41 43 55 55 4d 20 65 6e 73 75 72 65 73 20 74 68  ACUUM ensures th
2d160 61 74 20 65 61 63 68 20 74 61 62 6c 65 20 61 6e  at each table an
2d170 64 0a 20 20 20 20 20 69 6e 64 65 78 20 69 73 20  d.     index is 
2d180 6c 61 72 67 65 6c 79 20 73 74 6f 72 65 64 20 63  largely stored c
2d190 6f 6e 74 69 67 75 6f 75 73 6c 79 20 77 69 74 68  ontiguously with
2d1a0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2d1b0 66 69 6c 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20  file. ^In some. 
2d1c0 20 20 20 20 63 61 73 65 73 2c 20 56 41 43 55 55      cases, VACUU
2d1d0 4d 20 6d 61 79 20 61 6c 73 6f 20 72 65 64 75 63  M may also reduc
2d1e0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
2d1f0 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64  partially filled
2d200 20 70 61 67 65 73 20 69 6e 0a 20 20 20 20 20 74   pages in.     t
2d210 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 64  he database, red
2d220 75 63 69 6e 67 20 74 68 65 20 73 69 7a 65 20 6f  ucing the size o
2d230 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
2d240 69 6c 65 20 66 75 72 74 68 65 72 2e 0a 0a 20 20  ile further...  
2d250 3c 6c 69 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c  <li> <p> ^Normal
2d260 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ly, the database
2d270 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64   [page_size] and
2d280 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2d290 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
2d2a0 20 20 73 75 70 70 6f 72 74 73 20 5b 61 75 74 6f    supports [auto
2d2b0 5f 76 61 63 75 75 6d 5d 20 6d 75 73 74 20 62 65  _vacuum] must be
2d2c0 20 63 6f 6e 66 69 67 75 72 65 64 20 62 65 66 6f   configured befo
2d2d0 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database 
2d2e0 66 69 6c 65 20 69 73 0a 20 20 20 20 20 61 63 74  file is.     act
2d2f0 75 61 6c 6c 79 20 63 72 65 61 74 65 64 2e 20 5e  ually created. ^
2d300 48 6f 77 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f  However, when no
2d310 74 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61  t in [write-ahea
2d320 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65  d log] mode, the
2d330 20 0a 20 20 20 20 20 5b 70 61 67 65 5f 73 69 7a   .     [page_siz
2d340 65 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f  e] and/or [auto_
2d350 76 61 63 75 75 6d 5d 20 70 72 6f 70 65 72 74 69  vacuum] properti
2d360 65 73 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e  es of an existin
2d370 67 20 64 61 74 61 62 61 73 65 20 6d 61 79 20 62  g database may b
2d380 65 0a 20 20 20 20 20 63 68 61 6e 67 65 64 20 62  e.     changed b
2d390 79 20 75 73 69 6e 67 20 74 68 65 20 5b 70 61 67  y using the [pag
2d3a0 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 7c 70 61  e_size pragma|pa
2d3b0 67 65 5f 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72  ge_size]  and/or
2d3c0 20 0a 20 20 20 20 20 5b 61 75 74 6f 5f 76 61 63   .     [auto_vac
2d3d0 75 75 6d 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f  uum|pragma auto_
2d3e0 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 73 20  vacuum] pragmas 
2d3f0 61 6e 64 20 74 68 65 6e 20 69 6d 6d 65 64 69 61  and then immedia
2d400 74 65 6c 79 20 56 41 43 55 55 4d 69 6e 67 0a 20  tely VACUUMing. 
2d410 20 20 20 20 74 68 65 20 64 61 74 61 62 61 73 65      the database
2d420 2e 20 5e 57 68 65 6e 20 69 6e 20 5b 77 72 69 74  . ^When in [writ
2d430 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64  e-ahead log] mod
2d440 65 2c 20 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74  e, only the [aut
2d450 6f 5f 76 61 63 75 75 6d 5d 0a 20 20 20 20 20 73  o_vacuum].     s
2d460 75 70 70 6f 72 74 20 70 72 6f 70 65 72 74 79 20  upport property 
2d470 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20 75  can be changed u
2d480 73 69 6e 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75  sing VACUUM..</u
2d490 6c 3e 0a 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20  l>..<p>^(VACUUM 
2d4a0 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68  only works on th
2d4b0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  e main database.
2d4c0 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69   It is not possi
2d4d0 62 6c 65 20 74 6f 20 56 41 43 55 55 4d 20 61 6e  ble to VACUUM an
2d4e0 0a 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61  .attached databa
2d4f0 73 65 20 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e  se file.)^..<p>^
2d500 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
2d510 6e 64 20 77 6f 72 6b 73 20 62 79 20 63 6f 70 79  nd works by copy
2d520 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  ing the contents
2d530 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2d540 20 69 6e 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72   into.a temporar
2d550 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
2d560 61 6e 64 20 74 68 65 6e 20 6f 76 65 72 77 72 69  and then overwri
2d570 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61  ting the origina
2d580 6c 20 77 69 74 68 20 74 68 65 20 0a 63 6f 6e 74  l with the .cont
2d590 65 6e 74 73 20 6f 66 20 74 68 65 20 74 65 6d 70  ents of the temp
2d5a0 6f 72 61 72 79 20 66 69 6c 65 2e 20 5e 57 68 65  orary file. ^Whe
2d5b0 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68  n overwriting th
2d5c0 65 20 6f 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f  e original, a ro
2d5d0 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f  llback.journal o
2d5e0 72 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  r [write-ahead l
2d5f0 6f 67 5d 20 57 41 4c 20 66 69 6c 65 20 69 73 20  og] WAL file is 
2d600 75 73 65 64 20 6a 75 73 74 20 61 73 20 69 74 20  used just as it 
2d610 77 6f 75 6c 64 20 62 65 20 66 6f 72 20 61 6e 79  would be for any
2d620 0a 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20  .other database 
2d630 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68  transaction. ^Th
2d640 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20 77 68  is means that wh
2d650 65 6e 20 56 41 43 55 55 4d 69 6e 67 20 61 20 64  en VACUUMing a d
2d660 61 74 61 62 61 73 65 2c 20 0a 61 73 20 6d 75 63  atabase, .as muc
2d670 68 20 61 73 20 74 77 69 63 65 20 74 68 65 20 73  h as twice the s
2d680 69 7a 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69  ize of the origi
2d690 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c  nal database fil
2d6a0 65 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e  e is required in
2d6b0 20 66 72 65 65 0a 64 69 73 6b 20 73 70 61 63 65   free.disk space
2d6c0 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55  ...<p>^The VACUU
2d6d0 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68  M command may ch
2d6e0 61 6e 67 65 20 74 68 65 20 5b 52 4f 57 49 44 20  ange the [ROWID 
2d6f0 7c 20 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74  | ROWIDs] of ent
2d700 72 69 65 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c  ries in any.tabl
2d710 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 68  es that do not h
2d720 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20  ave an explicit 
2d730 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
2d740 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   KEY]..</p>..<p>
2d750 5e 41 20 56 41 43 55 55 4d 20 77 69 6c 6c 20 66  ^A VACUUM will f
2d760 61 69 6c 20 69 66 20 74 68 65 72 65 20 69 73 20  ail if there is 
2d770 61 6e 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  an open transact
2d780 69 6f 6e 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ion, or if there
2d790 20 61 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65   are one or.more
2d7a0 20 61 63 74 69 76 65 20 53 51 4c 20 73 74 61 74   active SQL stat
2d7b0 65 6d 65 6e 74 73 20 77 68 65 6e 20 69 74 20 69  ements when it i
2d7c0 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20  s run...<p>^(As 
2d7d0 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  of SQLite versio
2d7e0 6e 20 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e  n 3.1, an altern
2d7f0 61 74 69 76 65 20 74 6f 20 75 73 69 6e 67 20 74  ative to using t
2d800 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
2d810 64 20 74 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61  d to.reclaim spa
2d820 63 65 20 61 66 74 65 72 20 64 61 74 61 20 68 61  ce after data ha
2d830 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 20 69  s been deleted i
2d840 73 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f  s auto-vacuum mo
2d850 64 65 2c 20 65 6e 61 62 6c 65 64 20 75 73 69 6e  de, enabled usin
2d860 67 0a 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75  g.the [auto_vacu
2d870 75 6d 5d 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57  um] pragma.)^ ^W
2d880 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  hen [auto_vacuum
2d890 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72  ] is enabled for
2d8a0 20 61 20 64 61 74 61 62 61 73 65 0a 66 72 65 65   a database.free
2d8b0 20 70 61 67 65 73 20 6d 61 79 20 62 65 20 72 65   pages may be re
2d8c0 63 6c 61 69 6d 65 64 20 61 66 74 65 72 20 64 65  claimed after de
2d8d0 6c 65 74 69 6e 67 20 64 61 74 61 2c 20 63 61 75  leting data, cau
2d8e0 73 69 6e 67 20 74 68 65 20 66 69 6c 65 20 74 6f  sing the file to
2d8f0 20 73 68 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74   shrink,.without
2d900 20 72 65 62 75 69 6c 64 69 6e 67 20 74 68 65 20   rebuilding the 
2d910 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
2d920 75 73 69 6e 67 20 56 41 43 55 55 4d 2e 20 20 48  using VACUUM.  H
2d930 6f 77 65 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61  owever, using.[a
2d940 75 74 6f 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20  uto_vacuum] can 
2d950 6c 65 61 64 20 74 6f 20 65 78 74 72 61 20 64 61  lead to extra da
2d960 74 61 62 61 73 65 20 66 69 6c 65 20 66 72 61 67  tabase file frag
2d970 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20  mentation.  And 
2d980 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f  [auto_vacuum].do
2d990 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70  es not compact p
2d9a0 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20  artially filled 
2d9b0 70 61 67 65 73 20 6f 66 20 74 68 65 20 64 61 74  pages of the dat
2d9c0 61 62 61 73 65 20 61 73 20 56 41 43 55 55 4d 20  abase as VACUUM 
2d9d0 64 6f 65 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74  does...</p>...<t
2d9e0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
2d9f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2da30 23 23 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45  ##.Section {INDE
2da40 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62  XED BY} indexedb
2da50 79 20 7b 7b 49 4e 44 45 58 45 44 20 42 59 7d 20  y {{INDEXED BY} 
2da60 7b 4e 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a  {NOT INDEXED}}..
2da70 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49  </tcl>.<p>^The I
2da80 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65  NDEXED BY phrase
2da90 20 66 6f 72 63 65 73 20 74 68 65 20 5b 53 51 4c   forces the [SQL
2daa0 69 74 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  ite query planne
2dab0 72 5d 20 74 6f 20 75 73 65 20 61 0a 70 61 72 74  r] to use a.part
2dac0 69 63 75 6c 61 72 20 6e 61 6d 65 64 20 69 6e 64  icular named ind
2dad0 65 78 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d  ex on a [DELETE]
2dae0 2c 20 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b  , [SELECT], or [
2daf0 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e  UPDATE] statemen
2db00 74 2e 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42  t..The INDEXED B
2db10 59 20 70 68 72 61 73 65 20 69 73 20 61 6e 20 65  Y phrase is an e
2db20 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 20 69 73  xtension that is
2db30 20 70 61 72 74 69 63 75 6c 61 72 20 74 6f 20 53   particular to S
2db40 51 4c 69 74 65 20 61 6e 64 0a 69 73 20 6e 6f 74  QLite and.is not
2db50 20 70 6f 72 74 61 62 6c 65 20 74 6f 20 6f 74 68   portable to oth
2db60 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
2db70 65 6e 67 69 6e 65 73 2e 0a 54 68 65 20 49 4e 44  engines..The IND
2db80 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 63  EXED BY phrase c
2db90 61 6e 20 62 65 20 73 65 65 6e 20 69 6e 20 74 68  an be seen in th
2dba0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74  e following synt
2dbb0 61 78 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70 3e  ax.diagrams:</p>
2dbc0 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76  ..<tcl>.Recursiv
2dbd0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71  eBubbleDiagram q
2dbe0 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
2dbf0 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ame.</tcl>..<p>^
2dc00 54 68 65 20 22 49 4e 44 45 58 45 44 20 42 59 20  The "INDEXED BY 
2dc10 69 6e 64 65 78 2d 6e 61 6d 65 22 20 70 68 72 61  index-name" phra
2dc20 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61  se specifies tha
2dc30 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65  t the named inde
2dc40 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20 69  x.must be used i
2dc50 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20  n order to look 
2dc60 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65  up values on the
2dc70 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65   preceding table
2dc80 2e 0a 5e 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65  ..^If index-name
2dc90 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20   does not exist 
2dca0 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65  or cannot be use
2dcb0 64 20 66 6f 72 20 74 68 65 20 71 75 65 72 79 2c  d for the query,
2dcc0 20 74 68 65 6e 0a 74 68 65 20 70 72 65 70 61 72   then.the prepar
2dcd0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c  ation of the SQL
2dce0 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c 73   statement fails
2dcf0 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e 44  ..^(The "NOT IND
2dd00 45 58 45 44 22 20 63 6c 61 75 73 65 20 73 70 65  EXED" clause spe
2dd10 63 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20 69  cifies that no i
2dd20 6e 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75 73  ndex shall be us
2dd30 65 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69 6e  ed when.accessin
2dd40 67 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20  g the preceding 
2dd50 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67  table, including
2dd60 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73   implied indices
2dd70 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49 51 55   create by.UNIQU
2dd80 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  E and PRIMARY KE
2dd90 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20  Y constraints.  
2dda0 48 6f 77 65 76 65 72 2c 20 74 68 65 20 49 4e 54  However, the INT
2ddb0 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
2ddc0 0a 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 75 73  .can still be us
2ddd0 65 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e  ed to look up en
2dde0 74 72 69 65 73 20 65 76 65 6e 20 77 68 65 6e 20  tries even when 
2ddf0 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 69 73  "NOT INDEXED" is
2de00 20 73 70 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70   specified.)^</p
2de10 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64  >..<p>Some SQL d
2de20 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20  atabase engines 
2de30 70 72 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e  provide non-stan
2de40 64 61 72 64 20 22 68 69 6e 74 22 20 6d 65 63 68  dard "hint" mech
2de50 61 6e 69 73 6d 73 20 77 68 69 63 68 0a 63 61 6e  anisms which.can
2de60 20 62 65 20 75 73 65 64 20 74 6f 20 67 69 76 65   be used to give
2de70 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
2de80 69 7a 65 72 20 63 6c 75 65 73 20 61 62 6f 75 74  izer clues about
2de90 20 77 68 61 74 20 69 6e 64 69 63 65 73 20 69 74   what indices it
2dea0 20 73 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20   should.use for 
2deb0 61 20 70 61 72 74 69 63 75 6c 61 72 20 73 74 61  a particular sta
2dec0 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e 44  tement.  The IND
2ded0 45 58 20 42 59 20 63 6c 61 75 73 65 20 6f 66 20  EX BY clause of 
2dee0 53 51 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e  SQLite is .<em>n
2def0 6f 74 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e  ot</em> a hintin
2df00 67 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20  g mechanism and 
2df10 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65  it should not be
2df20 20 75 73 65 64 20 61 73 20 73 75 63 68 2e 0a 5e   used as such..^
2df30 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  The INDEXED BY c
2df40 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 67  lause does not g
2df50 69 76 65 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  ive the optimize
2df60 72 20 68 69 6e 74 73 20 61 62 6f 75 74 20 77 68  r hints about wh
2df70 69 63 68 20 69 6e 64 65 78 0a 74 6f 20 75 73 65  ich index.to use
2df80 3b 20 69 74 20 67 69 76 65 73 20 74 68 65 20 6f  ; it gives the o
2df90 70 74 69 6d 69 7a 65 72 20 61 20 72 65 71 75 69  ptimizer a requi
2dfa0 72 65 6d 65 6e 74 20 6f 66 20 77 68 69 63 68 20  rement of which 
2dfb0 69 6e 64 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49  index to use..^I
2dfc0 66 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  f the query opti
2dfd0 6d 69 7a 65 72 20 69 73 20 75 6e 61 62 6c 65 20  mizer is unable 
2dfe0 74 6f 20 75 73 65 20 74 68 65 20 69 6e 64 65 78  to use the index
2dff0 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
2e000 65 0a 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73  e.INDEX BY claus
2e010 65 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65 72  e, then the quer
2e020 79 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  y will fail with
2e030 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a   an error.</p>..
2e040 3c 70 3e 54 68 65 20 49 4e 44 45 58 45 44 20 42  <p>The INDEXED B
2e050 59 20 63 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e  Y clause is <em>
2e060 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65  not</em> intende
2e070 64 20 66 6f 72 20 75 73 65 20 69 6e 20 74 75 6e  d for use in tun
2e080 69 6e 67 0a 74 68 65 20 70 65 72 66 6f 72 6d 61  ing.the performa
2e090 6e 63 65 20 6f 66 20 61 20 71 75 65 72 79 2e 20  nce of a query. 
2e0a0 20 54 68 65 20 69 6e 74 65 6e 74 20 6f 66 20 74   The intent of t
2e0b0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
2e0c0 61 75 73 65 20 69 73 0a 74 6f 20 72 61 69 73 65  ause is.to raise
2e0d0 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f   a run-time erro
2e0e0 72 20 69 66 20 61 20 73 63 68 65 6d 61 20 63 68  r if a schema ch
2e0f0 61 6e 67 65 2c 20 73 75 63 68 20 61 73 20 64 72  ange, such as dr
2e100 6f 70 70 69 6e 67 20 6f 72 0a 63 72 65 61 74 69  opping or.creati
2e110 6e 67 20 61 6e 20 69 6e 64 65 78 2c 20 63 61 75  ng an index, cau
2e120 73 65 73 20 74 68 65 20 71 75 65 72 79 20 70 6c  ses the query pl
2e130 61 6e 20 66 6f 72 20 61 20 74 69 6d 65 2d 73 65  an for a time-se
2e140 6e 73 69 74 69 76 65 20 71 75 65 72 79 0a 74 6f  nsitive query.to
2e150 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 49 4e   change.  The IN
2e160 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
2e170 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 68  is designed to h
2e180 65 6c 70 20 64 65 74 65 63 74 0a 75 6e 64 65 73  elp detect.undes
2e190 69 72 61 62 6c 65 20 71 75 65 72 79 20 70 6c 61  irable query pla
2e1a0 6e 20 63 68 61 6e 67 65 73 20 64 75 72 69 6e 67  n changes during
2e1b0 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
2e1c0 69 6e 67 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20  ing..Developers 
2e1d0 61 72 65 20 61 64 6d 6f 6e 69 73 68 65 64 20 74  are admonished t
2e1e0 6f 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f  o omit all use o
2e1f0 66 20 49 4e 44 45 58 45 44 20 42 59 20 64 75 72  f INDEXED BY dur
2e200 69 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20  ing.application 
2e210 64 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e  design, implemen
2e220 74 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c  tation, testing,
2e230 20 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49 66   and tuning.  If
2e240 0a 49 4e 44 45 58 45 44 20 42 59 20 69 73 20 74  .INDEXED BY is t
2e250 6f 20 62 65 20 75 73 65 64 20 61 74 20 61 6c 6c  o be used at all
2e260 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 69  , it should be i
2e270 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
2e280 65 72 79 0a 65 6e 64 20 6f 66 20 74 68 65 20 64  ery.end of the d
2e290 65 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65  evelopment proce
2e2a0 73 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67  ss when "locking
2e2b0 20 64 6f 77 6e 22 20 61 20 64 65 73 69 67 6e 2e   down" a design.
2e2c0 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c  </p>..<h3>See Al
2e2d0 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c  so:</h3>..<ol>.<
2e2e0 6c 69 3e 3c 70 3e 54 68 65 20 5b 71 75 65 72 79  li><p>The [query
2e2f0 20 70 6c 61 6e 6e 65 72 20 63 68 65 63 6b 6c 69   planner checkli
2e300 73 74 5d 20 64 65 73 63 72 69 62 65 73 20 73 74  st] describes st
2e310 65 70 73 20 74 68 61 74 20 61 70 70 6c 69 63 61  eps that applica
2e320 74 69 6f 6e 0a 64 65 76 65 6c 6f 70 65 72 73 20  tion.developers 
2e330 73 68 6f 75 6c 64 20 66 6f 6c 6c 6f 77 69 6e 67  should following
2e340 20 74 6f 20 68 65 6c 70 20 72 65 73 6f 6c 76 65   to help resolve
2e350 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 70   query planner p
2e360 72 6f 62 6c 65 6d 73 2e 0a 4e 6f 74 69 63 65 20  roblems..Notice 
2e370 74 68 65 20 74 68 61 74 20 74 68 65 20 75 73 65  the that the use
2e380 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20 69   of INDEXED BY i
2e390 73 20 61 20 6c 61 73 74 20 72 65 73 6f 72 74 2c  s a last resort,
2e3a0 20 74 6f 20 62 65 20 75 73 65 64 20 6f 6e 6c 79   to be used only
2e3b0 0a 77 68 65 6e 20 61 6c 6c 20 6f 74 68 65 72 20  .when all other 
2e3c0 6d 65 61 73 75 72 65 73 20 66 61 69 6c 2e 3c 2f  measures fail.</
2e3d0 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5b 75 70 6c 75  p>..<li><p>[uplu
2e3e0 73 63 6f 6e 74 72 6f 6c 7c 54 68 65 20 75 6e 61  scontrol|The una
2e3f0 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f 72 5d  ry "+" operator]
2e400 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
2e410 64 69 73 71 75 61 6c 69 66 79 20 74 65 72 6d 73  disqualify terms
2e420 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c   in the WHERE cl
2e430 61 75 73 65 20 66 72 6f 6d 20 75 73 65 20 62 79  ause from use by
2e440 20 69 6e 64 69 63 65 73 2e 0a 43 61 72 65 66 75   indices..Carefu
2e450 6c 20 75 73 65 20 6f 66 20 75 6e 61 72 79 20 2b  l use of unary +
2e460 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 68   can sometimes h
2e470 65 6c 70 20 70 72 65 76 65 6e 74 20 74 68 65 20  elp prevent the 
2e480 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 66 72  query planner fr
2e490 6f 6d 0a 63 68 6f 6f 73 69 6e 67 20 61 20 70 6f  om.choosing a po
2e4a0 6f 72 20 69 6e 64 65 78 20 77 69 74 68 6f 75 74  or index without
2e4b0 20 72 65 73 74 72 69 63 74 69 6e 67 20 69 74 20   restricting it 
2e4c0 74 6f 20 75 73 69 6e 67 20 6f 6e 65 20 73 70 65  to using one spe
2e4d0 63 69 66 69 63 20 69 6e 64 65 78 2e 0a 43 61 72  cific index..Car
2e4e0 65 66 75 6c 20 70 6c 61 63 65 6d 65 6e 74 20 6f  eful placement o
2e4f0 66 20 75 6e 61 72 79 20 2b 20 6f 70 65 72 61 74  f unary + operat
2e500 6f 72 73 20 69 73 20 61 20 62 65 74 74 65 72 20  ors is a better 
2e510 6d 65 74 68 6f 64 20 66 6f 72 20 63 6f 6e 74 72  method for contr
2e520 6f 6c 6c 69 6e 67 20 0a 77 68 69 63 68 20 69 6e  olling .which in
2e530 64 69 63 65 73 20 61 72 65 20 75 73 65 64 20 62  dices are used b
2e540 79 20 61 20 71 75 65 72 79 2e 3c 2f 70 3e 0a 0a  y a query.</p>..
2e550 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 73 71 6c 69  <li><p>The [sqli
2e560 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
2e570 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  )] C/C++ interfa
2e580 63 65 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ce together with
2e590 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d   the.[SQLITE_STM
2e5a0 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e  TSTATUS_FULLSCAN
2e5b0 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49  _STEP] and [SQLI
2e5c0 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
2e5d0 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20 62 65  RT] verbs.can be
2e5e0 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
2e5f0 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e  at run-time when
2e600 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
2e610 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20  t is not.making 
2e620 65 66 66 65 63 74 69 76 65 20 75 73 65 20 6f 66  effective use of
2e630 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79 20   indices.  Many 
2e640 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79  applications may
2e650 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65 20 74   prefer to.use t
2e660 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74  he [sqlite3_stmt
2e670 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65 72  _status()] inter
2e680 66 61 63 65 20 74 6f 20 64 65 74 65 63 74 20 69  face to detect i
2e690 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61 74 68  ndex misuse.rath
2e6a0 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e 44 45  er than the INDE
2e6b0 58 45 44 20 42 59 20 70 68 72 61 73 65 20 64 65  XED BY phrase de
2e6c0 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c 2f 70  scribed here.</p
2e6d0 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23  >.</ol>..<tcl>.#
2e6e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e720 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 41  ############.# A
2e730 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64   list of keyword
2e740 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b 20 6f  s.  A asterisk o
2e750 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65 20  ccurs after the 
2e760 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20 69 73  keyword if it is
2e770 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c 62 61   on.# the fallba
2e780 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b  ck list..#.set k
2e790 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f  eyword_list [lso
2e7a0 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 0a 20 20  rt {.   ABORT.  
2e7b0 20 41 43 54 49 4f 4e 0a 20 20 20 41 44 44 0a 20   ACTION.   ADD. 
2e7c0 20 20 41 46 54 45 52 0a 20 20 20 41 4c 4c 0a 20    AFTER.   ALL. 
2e7d0 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c 59    ALTER.   ANALY
2e7e0 5a 45 0a 20 20 20 41 4e 44 0a 20 20 20 41 53 0a  ZE.   AND.   AS.
2e7f0 20 20 20 41 53 43 0a 20 20 20 41 54 54 41 43 48     ASC.   ATTACH
2e800 0a 20 20 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .   AUTOINCREMEN
2e810 54 0a 20 20 20 42 45 46 4f 52 45 0a 20 20 20 42  T.   BEFORE.   B
2e820 45 47 49 4e 0a 20 20 20 42 45 54 57 45 45 4e 0a  EGIN.   BETWEEN.
2e830 20 20 20 42 59 0a 20 20 20 43 41 53 43 41 44 45     BY.   CASCADE
2e840 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41 53 54  .   CASE.   CAST
2e850 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c  .   CHECK.   COL
2e860 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20  LATE.   COLUMN. 
2e870 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46    COMMIT.   CONF
2e880 4c 49 43 54 0a 20 20 20 43 4f 4e 53 54 52 41 49  LICT.   CONSTRAI
2e890 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20 20 20  NT.   CREATE.   
2e8a0 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45 4e 54  CROSS.   CURRENT
2e8b0 5f 44 41 54 45 0a 20 20 20 43 55 52 52 45 4e 54  _DATE.   CURRENT
2e8c0 5f 54 49 4d 45 0a 20 20 20 43 55 52 52 45 4e 54  _TIME.   CURRENT
2e8d0 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20 20 44 41  _TIMESTAMP.   DA
2e8e0 54 41 42 41 53 45 0a 20 20 20 44 45 46 41 55 4c  TABASE.   DEFAUL
2e8f0 54 0a 20 20 20 44 45 46 45 52 52 45 44 0a 20 20  T.   DEFERRED.  
2e900 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44   DEFERRABLE.   D
2e910 45 4c 45 54 45 0a 20 20 20 44 45 53 43 0a 20 20  ELETE.   DESC.  
2e920 20 44 45 54 41 43 48 0a 20 20 20 44 49 53 54 49   DETACH.   DISTI
2e930 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20 20 45  NCT.   DROP.   E
2e940 4e 44 0a 20 20 20 45 41 43 48 0a 20 20 20 45 4c  ND.   EACH.   EL
2e950 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20 20 20  SE.   ESCAPE.   
2e960 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c 55 53  EXCEPT.   EXCLUS
2e970 49 56 45 0a 20 20 20 45 58 49 53 54 53 0a 20 20  IVE.   EXISTS.  
2e980 20 45 58 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c   EXPLAIN.   FAIL
2e990 0a 20 20 20 46 4f 52 0a 20 20 20 46 4f 52 45 49  .   FOR.   FOREI
2e9a0 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46 55  GN.   FROM.   FU
2e9b0 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20 20 20 47 52  LL.   GLOB.   GR
2e9c0 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a 20 20  OUP.   HAVING.  
2e9d0 20 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20   IF.   IGNORE.  
2e9e0 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 20 49 4e   IMMEDIATE.   IN
2e9f0 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49 4e 44  .   INDEX.   IND
2ea00 45 58 45 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c  EXED.   INITIALL
2ea10 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e  Y.   INNER.   IN
2ea20 53 45 52 54 0a 20 20 20 49 4e 53 54 45 41 44 0a  SERT.   INSTEAD.
2ea30 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20     INTERSECT.   
2ea40 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53  INTO.   IS.   IS
2ea50 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20  NULL.   JOIN.   
2ea60 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c  KEY.   LEFT.   L
2ea70 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20  IKE.   LIMIT.   
2ea80 4d 41 54 43 48 0a 20 20 20 4e 41 54 55 52 41 4c  MATCH.   NATURAL
2ea90 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20  .   NO.   NOT.  
2eaa0 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c   NOTNULL.   NULL
2eab0 0a 20 20 20 4f 46 0a 20 20 20 4f 46 46 53 45 54  .   OF.   OFFSET
2eac0 0a 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20  .   ON.   OR.   
2ead0 4f 52 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20  ORDER.   OUTER. 
2eae0 20 20 50 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41    PLAN.   PRAGMA
2eaf0 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51  .   PRIMARY.   Q
2eb00 55 45 52 59 0a 20 20 20 52 41 49 53 45 0a 20 20  UERY.   RAISE.  
2eb10 20 52 45 43 55 52 53 49 56 45 0a 20 20 20 52 45   RECURSIVE.   RE
2eb20 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45  FERENCES.   REGE
2eb30 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a 20 20  XP.   REINDEX.  
2eb40 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45 4e 41   RELEASE.   RENA
2eb50 4d 45 0a 20 20 20 52 45 50 4c 41 43 45 0a 20 20  ME.   REPLACE.  
2eb60 20 52 45 53 54 52 49 43 54 0a 20 20 20 52 49 47   RESTRICT.   RIG
2eb70 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20  HT.   ROLLBACK. 
2eb80 20 20 52 4f 57 0a 20 20 20 53 41 56 45 50 4f 49    ROW.   SAVEPOI
2eb90 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20  NT.   SELECT.   
2eba0 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20  SET.   TABLE.   
2ebb0 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41 52  TEMP.   TEMPORAR
2ebc0 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a  Y.   THEN.   TO.
2ebd0 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20     TRANSACTION. 
2ebe0 20 20 54 52 49 47 47 45 52 0a 20 20 20 55 4e 49    TRIGGER.   UNI
2ebf0 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20  ON.   UNIQUE.   
2ec00 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a  UPDATE.   USING.
2ec10 20 20 20 56 41 43 55 55 4d 0a 20 20 20 56 41 4c     VACUUM.   VAL
2ec20 55 45 53 0a 20 20 20 56 49 45 57 0a 20 20 20 56  UES.   VIEW.   V
2ec30 49 52 54 55 41 4c 0a 20 20 20 57 49 54 48 0a 20  IRTUAL.   WITH. 
2ec40 20 20 57 49 54 48 4f 55 54 0a 20 20 20 57 48 45    WITHOUT.   WHE
2ec50 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68  N.   WHERE.}]..h
2ec60 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63 6c 61  d_puts {<DIV cla
2ec70 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e 22  ss="pdf_section"
2ec80 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69  >}.Section {SQLi
2ec90 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79  te Keywords} key
2eca0 77 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b 65 79  words {{*SQL key
2ecb0 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f  word} {SQL keywo
2ecc0 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c  rds}}.hd_puts {<
2ecd0 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  /DIV>}.</tcl>..<
2ece0 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e 64 61  p>The SQL standa
2ecf0 72 64 20 73 70 65 63 69 66 69 65 73 20 61 20 68  rd specifies a h
2ed00 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65  uge number of ke
2ed10 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d 61 79  ywords which may
2ed20 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61 73 20   not.be used as 
2ed30 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 61 62  the names of tab
2ed40 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f  les, indices, co
2ed50 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61 73 65 73  lumns, databases
2ed60 2c 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0a 66  , user-defined.f
2ed70 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74  unctions, collat
2ed80 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20 74 61  ions, virtual ta
2ed90 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20  ble modules, or 
2eda0 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65 64 20  any other named 
2edb0 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73 74  object..The list
2edc0 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 69 73 20   of keywords is 
2edd0 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66 65 77  so long that few
2ede0 20 70 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65   people can reme
2edf0 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46  mber them all..F
2ee00 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65  or most SQL code
2ee10 2c 20 79 6f 75 72 20 73 61 66 65 73 74 20 62 65  , your safest be
2ee20 74 20 69 73 20 74 6f 20 6e 65 76 65 72 20 75 73  t is to never us
2ee30 65 20 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61  e any English la
2ee40 6e 67 75 61 67 65 0a 77 6f 72 64 20 61 73 20 74  nguage.word as t
2ee50 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 75 73 65  he name of a use
2ee60 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74  r-defined object
2ee70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75  .</p>..<p>If you
2ee80 20 77 61 6e 74 20 74 6f 20 75 73 65 20 61 20 6b   want to use a k
2ee90 65 79 77 6f 72 64 20 61 73 20 61 20 6e 61 6d 65  eyword as a name
2eea0 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f 20 71 75  , you need to qu
2eeb0 6f 74 65 20 69 74 2e 20 20 54 68 65 72 65 0a 61  ote it.  There.a
2eec0 72 65 20 66 6f 75 72 20 77 61 79 73 20 6f 66 20  re four ways of 
2eed0 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64 73  quoting keywords
2eee0 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a   in SQLite:</p>.
2eef0 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  .<p>.<blockquote
2ef00 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c  >.<table>.<tr>.<
2ef10 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
2ef20 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e  <b>'keyword'</b>
2ef30 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
2ef40 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e  20"></td>..<td>^
2ef50 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e  A keyword in sin
2ef60 67 6c 65 20 71 75 6f 74 65 73 20 69 73 20 61 20  gle quotes is a 
2ef70 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c  string literal.<
2ef80 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09  /td></tr>..<tr>.
2ef90 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
2efa0 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62  ><b>"keyword"</b
2efb0 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
2efc0 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
2efd0 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73  in double-quotes
2efe0 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65   is an identifie
2eff0 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  r.</td></tr>..<t
2f000 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
2f010 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77  op"><b>&#91;keyw
2f020 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64  ord&#93;</b></td
2f030 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
2f040 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f  ^A keyword enclo
2f050 73 65 64 20 69 6e 20 73 71 75 61 72 65 20 62 72  sed in square br
2f060 61 63 6b 65 74 73 20 69 73 20 0a 20 20 20 20 20  ackets is .     
2f070 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72     an identifier
2f080 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73  .  This is not s
2f090 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68  tandard SQL.  Th
2f0a0 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61  is quoting mecha
2f0b0 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20  nism.        is 
2f0c0 75 73 65 64 20 62 79 20 4d 53 20 41 63 63 65 73  used by MS Acces
2f0d0 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65 72  s and SQL Server
2f0e0 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64   and is included
2f0f0 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20   in SQLite for. 
2f100 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69         compatibi
2f110 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  lity.</td></tr>.
2f120 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
2f130 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36 3b 6b  ="top"><b>&#96;k
2f140 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62 3e 3c  eyword&#96;</b><
2f150 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c  /td><td></td>..<
2f160 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e  td>^A keyword en
2f170 63 6c 6f 73 65 64 20 69 6e 20 67 72 61 76 65 20  closed in grave 
2f180 61 63 63 65 6e 74 73 20 28 41 53 43 49 49 20 63  accents (ASCII c
2f190 6f 64 65 20 39 36 29 20 69 73 20 0a 20 20 20 20  ode 96) is .    
2f1a0 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65      an identifie
2f1b0 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  r.  This is not 
2f1c0 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54  standard SQL.  T
2f1d0 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68  his quoting mech
2f1e0 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73  anism.        is
2f1f0 20 75 73 65 64 20 62 79 20 4d 79 53 51 4c 20 61   used by MySQL a
2f200 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  nd is included i
2f210 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20  n SQLite for.   
2f220 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69       compatibili
2f230 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f  ty.</td></tr>.</
2f240 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
2f250 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f  ote>.</p>..<p>Fo
2f260 72 20 72 65 73 69 6c 69 65 6e 63 65 20 77 68 65  r resilience whe
2f270 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77 69 74  n confronted wit
2f280 68 20 68 69 73 74 6f 72 69 63 61 6c 20 53 51 4c  h historical SQL
2f290 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 53 51 4c   statements, SQL
2f2a0 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74 69 6d  ite.will sometim
2f2b0 65 73 20 62 65 6e 64 20 74 68 65 20 71 75 6f 74  es bend the quot
2f2c0 69 6e 67 20 72 75 6c 65 73 20 61 62 6f 76 65 3a  ing rules above:
2f2d0 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ul>.<li><
2f2e0 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20  p>^If a keyword 
2f2f0 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73  in single.quotes
2f300 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f   (ex: <b>'key'</
2f310 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c  b> or <b>'glob'<
2f320 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20  /b>) is used in 
2f330 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a  a context where.
2f340 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 73  an identifier is
2f350 20 61 6c 6c 6f 77 65 64 20 62 75 74 20 77 68 65   allowed but whe
2f360 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  re a string lite
2f370 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ral is not allow
2f380 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b  ed, then.the tok
2f390 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64  en is understood
2f3a0 20 74 6f 20 62 65 20 61 6e 20 69 64 65 6e 74 69   to be an identi
2f3b0 66 69 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20  fier instead of 
2f3c0 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
2f3d0 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  ..</p></li>..<li
2f3e0 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72  ><p>^If a keywor
2f3f0 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74  d in double.quot
2f400 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22  es (ex: <b>"key"
2f410 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62  </b> or <b>"glob
2f420 22 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69  "</b>) is used i
2f430 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72  n a context wher
2f440 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 72  e.it cannot be r
2f450 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20 69 64  esolved to an id
2f460 65 6e 74 69 66 69 65 72 20 62 75 74 20 77 68 65  entifier but whe
2f470 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  re a string lite
2f480 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20  ral.is allowed, 
2f490 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69  then the token i
2f4a0 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20  s understood to 
2f4b0 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  be a string lite
2f4c0 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66 20 61  ral instead.of a
2f4d0 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 70  n identifier.</p
2f4e0 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  ></li>.</ul>..<p
2f4f0 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65  >Programmers are
2f500 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74   cautioned not t
2f510 6f 20 75 73 65 20 74 68 65 20 74 77 6f 20 65 78  o use the two ex
2f520 63 65 70 74 69 6f 6e 73 20 64 65 73 63 72 69 62  ceptions describ
2f530 65 64 20 69 6e 0a 74 68 65 20 70 72 65 76 69 6f  ed in.the previo
2f540 75 73 20 62 75 6c 6c 65 74 73 2e 20 20 57 65 20  us bullets.  We 
2f550 65 6d 70 68 61 73 69 7a 65 20 74 68 61 74 20 74  emphasize that t
2f560 68 65 79 20 65 78 69 73 74 20 6f 6e 6c 79 20 73  hey exist only s
2f570 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69  o that old.and i
2f580 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20 73 74  ll-formed SQL st
2f590 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75  atements will ru
2f5a0 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 46 75  n correctly.  Fu
2f5b0 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
2f5c0 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20 72 61  .SQLite might ra
2f5d0 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73 74 65  ise errors inste
2f5e0 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e 67 20  ad of accepting 
2f5f0 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73 74  the malformed.st
2f600 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72 65 64  atements covered
2f610 20 62 79 20 74 68 65 20 65 78 63 65 70 74 69 6f   by the exceptio
2f620 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c  ns above.</p>..<
2f630 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20 6e  p>.SQLite adds n
2f640 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d  ew keywords from
2f650 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77 68   time to time wh
2f660 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e  en it takes on n
2f670 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f 20  ew features..So 
2f680 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72 20  to prevent your 
2f690 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67 20  code from being 
2f6a0 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72 65  broken by future
2f6b0 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79   enhancements, y
2f6c0 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c  ou should.normal
2f6d0 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69 64 65  ly quote any ide
2f6e0 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20  ntifier that is 
2f6f0 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  an English langu
2f700 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20 69  age word, even i
2f710 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76  f.you do not hav
2f720 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  e to..</p>..<p>.
2f730 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77 20 73  The list below s
2f740 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69 62 6c  hows all possibl
2f750 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65 64 20  e keywords used 
2f760 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f 66 0a  by any build of.
2f770 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c 65 73  SQLite regardles
2f780 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74 69  s of [compile-ti
2f790 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d  me options].  .M
2f7a0 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65 20 63  ost reasonable c
2f7b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 75 73  onfigurations us
2f7c0 65 20 6d 6f 73 74 20 6f 72 20 61 6c 6c 20 6f 66  e most or all of
2f7d0 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64 73 2c   these keywords,
2f7e0 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f 72  .but some keywor
2f7f0 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65  ds may be omitte
2f800 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67 75  d when SQL langu
2f810 61 67 65 20 66 65 61 74 75 72 65 73 20 61 72 65  age features are
2f820 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65 67  .disabled..^(Reg
2f830 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63  ardless of the c
2f840 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66  ompile-time conf
2f850 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20 69  iguration, any i
2f860 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69  dentifier that i
2f870 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f 6c  s not on.the fol
2f880 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f 70  lowing <tcl>hd_p
2f890 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65  uts [llength $ke
2f8a0 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c  yword_list]</tcl
2f8b0 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20 69  > element.list i
2f8c0 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64 20  s not a keyword 
2f8d0 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72 73 65  to the SQL parse
2f8e0 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f 70  r in SQLite:.</p
2f8f0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
2f900 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30  <table width="10
2f910 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  0%"><tr>.<td ali
2f920 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67 6e  gn="left" valign
2f930 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32 30  ="top" width="20
2f940 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e 20  %">.<tcl>.set n 
2f950 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
2f960 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f 6c  d_list].set nCol
2f970 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78 70   5.set nRow [exp
2f980 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f  r {($n+$nCol-1)/
2f990 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30 0a  $nCol}].set i 0.
2f9a0 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24 6b 65  foreach word $ke
2f9b0 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20 69  yword_list {.  i
2f9c0 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a  f {$i==$nRow} {.
2f9d0 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f 74      hd_puts "</t
2f9e0 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74  d><td valign=\"t
2f9f0 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66  op\" align=\"lef
2fa00 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25 5c  t\" width=\"20%\
2fa10 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31 0a  ">".    set i 1.
2fa20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69    } else {.    i
2fa30 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70  ncr i.  }.  hd_p
2fa40 75 74 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c 6e  uts "$word<br>\n
2fa50 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e  ".}.</tcl>.</td>
2fa60 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62  </tr></table></b
2fa70 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a           lockquote>)^.