Documentation Source Text

Hex Artifact Content
Login

Artifact e37f525a49937b215d6dd0f930c1b0f26ae526d1:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 7b 57 49 54 48 20 63 6c 61 75  .    {{WITH clau
03d0: 73 65 7d 20 77 69 74 68 63 6c 61 75 73 65 7d 0a  se} withclause}.
03e0: 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d      {comment com
03f0: 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c 41  ment}.    {EXPLA
0400: 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20 20  IN explain}.    
0410: 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  {expression expr
0420: 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54 52  }.    {{BEGIN TR
0430: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
0440: 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43 4f  action}.    {{CO
0450: 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e  MMIT TRANSACTION
0460: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f  } transaction CO
0470: 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44 20  MMIT}.    {{END 
0480: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0490: 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54 7d  nsaction COMMIT}
04a0: 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20  .    {{ROLLBACK 
04b0: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
04c0: 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41 43  nsaction ROLLBAC
04d0: 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49 4e  K}.    {SAVEPOIN
04e0: 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20 20  T savepoint}.   
04f0: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
0500: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
0510: 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20 7b  SAVEPOINT}.    {
0520: 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68 74  PRAGMA pragma.ht
0530: 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f 4e  ml}.    {{ON CON
0540: 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
0550: 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43 52  nflict}.    {{CR
0560: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0570: 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52 4f  eview}.    {{DRO
0580: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
0590: 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20 54  }.    {{CREATE T
05a0: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
05b0: 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52 4f  igger}.    {{DRO
05c0: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
05d0: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41 54  rigger}.    {{AT
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
05f0: 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45 54  ttach}.    {{DET
0600: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
0610: 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45 49  tach}.      {REI
0620: 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20  NDEX reindex}.  
0630: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
0640: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20   altertable}.   
0650: 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c   {{ANALYZE} anal
0660: 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58  yze}.    {{INDEX
0670: 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
0680: 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74  }.    {{aggregat
0690: 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e functions} agg
06a0: 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20  func aggfunc}.  
06b0: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
06c0: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72  ns} corefunc cor
06d0: 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74  efunc}.    {{dat
06e0: 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
06f0: 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64  ions} datefunc d
0700: 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65  atefunc}.    {ke
0710: 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20  ywords keywords 
0720: 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
0730: 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73    }.  set lang_s
0740: 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78  ection_break [ex
0750: 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c  pr {([llength $l
0760: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
0770: 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61  ]+2)/3}].  forea
0780: 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73  ch {section} [ls
0790: 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69  ort -index 0 -di
07a0: 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73  ctionary $lang_s
07b0: 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20  ection_list] {. 
07c0: 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c   foreach {s_titl
07d0: 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73  e s_tag s_kw} $s
07e0: 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b  ection {}.  if {
07f0: 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20  $s_kw == ""} {. 
0800: 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74     set s_kw $s_t
0810: 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24  itle.  }.  if {$
0820: 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68  s_tag=="pragma.h
0830: 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  tml"} {.    set 
0840: 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65  url $s_tag.  } e
0850: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72  lse {.    set ur
0860: 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74  l lang_$s_tag.ht
0870: 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f  ml.  }.  hd_reso
0880: 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77  lve "<li>\[$s_kw
0890: 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e  |$s_title\]</li>
08a0: 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20  ".  incr i.  if 
08b0: 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69  {$i==$lang_secti
08c0: 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d  on_break || $i==
08d0: 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f  2*$lang_section_
08e0: 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f  break} {.    hd_
08f0: 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e  puts "</ul></td>
0900: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
0910: 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c  \"><ul>".  }.}.<
0920: 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e  /tcl>.</ul></td>
0930: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  </tr></table>..<
0940: 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20  p>^The routines 
0950: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0960: 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33  _v2()], [sqlite3
0970: 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71  _prepare()],.[sq
0980: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
0990: 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  )], [sqlite3_pre
09a0: 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b  pare16_v2()], .[
09b0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c  sqlite3_exec()],
09c0: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65   and [sqlite3_ge
09d0: 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70  t_table()] accep
09e0: 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  t.an SQL stateme
09f0: 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d  nt list (sql-stm
0a00: 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73  t-list) which is
0a10: 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70   a semicolon-sep
0a20: 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73  arated.list of s
0a30: 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  tatements.</p>..
0a40: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
0a50: 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74  am sql-stmt-list
0a60: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20  </tcl>..<p>Each 
0a70: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  SQL statement in
0a80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c   the statement l
0a90: 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ist is an instan
0aa0: 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77  ce of the.follow
0ab0: 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ing:</p>..<tcl>B
0ac0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
0ad0: 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63  -stmt</tcl>..<tc
0ae0: 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72  l>.proc Operator
0af0: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75   {name} {.  retu
0b00: 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  rn "<font color=
0b10: 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67  \"#2c2cf0\"><big
0b20: 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f  >$name</big></fo
0b30: 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74  nt>".}.proc Nont
0b40: 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b  erminal {name} {
0b50: 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66  .  return "<i><f
0b60: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33  ont color=\"#ff3
0b70: 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e  434\">$name</fon
0b80: 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b  t></i>".}.proc K
0b90: 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a  eyword {name} {.
0ba0: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0bb0: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0bc0: 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a  ">$name</font>".
0bd0: 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b  }.proc Example {
0be0: 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74  text} {.  hd_put
0bf0: 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  s "<blockquote><
0c00: 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c  pre>$text</pre><
0c10: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a  /blockquote>".}.
0c20: 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e  .proc Section {n
0c30: 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72  ame label keywor
0c40: 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44  ds} {.  global D
0c50: 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61  OC.  hd_close_ma
0c60: 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69  in.  hd_open_mai
0c70: 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74  n lang_$label.ht
0c80: 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22  ml.  hd_header "
0c90: 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e  SQLite Query Lan
0ca0: 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44  guage: $name" $D
0cb0: 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e  OC/pages/lang.in
0cc0: 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f  .  eval hd_keywo
0cd0: 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20  rds $keywords.  
0ce0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65  if {[lsearch $ke
0cf0: 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d  ywords $name] ==
0d00: 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20   -1 && [lsearch 
0d10: 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65  $keywords *$name
0d20: 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65  ] == -1} {.    e
0d30: 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
0d40: 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20  { $name }.  }.  
0d50: 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69  hd_puts {<h1 ali
0d60: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20  gn="center">SQL 
0d70: 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79  As Understood By
0d80: 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20   SQLite</h1>}.  
0d90: 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68  hd_puts {<p><a h
0da0: 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e  ref="lang.html">
0db0: 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20  [Top]</a></p>}. 
0dc0: 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e   hd_puts "<h2>$n
0dd0: 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23  ame</h2>".}..###
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e20: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0e30: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0e40: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0e50: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41  ALTER TABLE} {*A
0e60: 4c 54 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  LTER}}..Recursiv
0e70: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
0e80: 6c 74 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  lter-table-stmt.
0e90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69 74  </tcl>..<p>SQLit
0ea0: 65 20 73 75 70 70 6f 72 74 73 20 61 20 6c 69 6d  e supports a lim
0eb0: 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20 41  ited subset of A
0ec0: 4c 54 45 52 20 54 41 42 4c 45 2e 0a 54 68 65 20  LTER TABLE..The 
0ed0: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
0ee0: 61 6e 64 20 69 6e 20 53 51 4c 69 74 65 20 61 6c  and in SQLite al
0ef0: 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f  lows the user to
0f00: 20 72 65 6e 61 6d 65 20 61 20 74 61 62 6c 65 0a   rename a table.
0f10: 6f 72 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  or to add a new 
0f20: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
0f30: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 3c 2f 70  sting table..</p
0f40: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f50: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 69 73  AME TO syntax is
0f60: 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d 65 20   used to rename 
0f70: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
0f80: 66 69 65 64 20 62 79 20 0a 3c 69 3e 26 23 39 31  fied by .<i>&#91
0f90: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26  ;database-name.&
0fa0: 23 39 33 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  #93;table-name</
0fb0: 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62  i> to <i>new-tab
0fc0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54  le-name</i>.)^.T
0fd0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e  his command .can
0fe0: 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d  not be used to m
0ff0: 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77  ove a table betw
1000: 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  een attached dat
1010: 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20  abases, only to 
1020: 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20  rename .a table 
1030: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
1040: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
1050: 70 3e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  p> ^If the table
1060: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68   being renamed h
1070: 61 73 20 74 72 69 67 67 65 72 73 20 6f 72 20 69  as triggers or i
1080: 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65  ndices, then the
1090: 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68  se remain.attach
10a0: 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ed to the table 
10b0: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
10c0: 6e 20 72 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77  n renamed.  ^How
10d0: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
10e0: 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66 69  re.any view defi
10f0: 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74  nitions, or stat
1100: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
1110: 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61 74  by triggers that
1120: 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74 61   refer to.the ta
1130: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1140: 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74  d, these are not
1150: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d   automatically m
1160: 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20 74  odified to use t
1170: 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d  he new.table nam
1180: 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72 65  e. If this is re
1190: 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69 67  quired, the trig
11a0: 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65 66  gers or view def
11b0: 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62 65  initions must be
11c0: 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63  .dropped and rec
11d0: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
11e0: 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d 65  e new table name
11f0: 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a   by hand..</p>..
1200: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62  <blockquote><tab
1210: 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65  le border="1" ce
1220: 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a  llpadding="10">.
1230: 3c 74 72 3e 3c 74 64 3e 0a 3c 65 6d 3e 49 6d 70  <tr><td>.<em>Imp
1240: 6f 72 74 61 6e 74 20 4e 6f 74 65 3a 3c 2f 65 6d  ortant Note:</em
1250: 3e 0a 54 68 65 20 27 41 4c 54 45 52 20 54 41 42  >.The 'ALTER TAB
1260: 4c 45 20 2e 2e 2e 20 52 45 4e 41 4d 45 20 54 4f  LE ... RENAME TO
1270: 20 2e 2e 2e 27 20 63 6f 6d 6d 61 6e 64 20 64 6f   ...' command do
1280: 65 73 20 6e 6f 74 20 75 70 64 61 74 65 20 61 63  es not update ac
1290: 74 69 6f 6e 0a 73 74 61 74 65 6d 65 6e 74 73 20  tion.statements 
12a0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
12b0: 6f 72 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  or SELECT statem
12c0: 65 6e 74 73 20 77 69 74 68 69 6e 20 76 69 65 77  ents within view
12d0: 73 2e 0a 49 66 20 74 68 65 20 74 61 62 6c 65 20  s..If the table 
12e0: 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 69 73  being renamed is
12f0: 20 72 65 66 65 72 65 6e 63 65 64 20 66 72 6f 6d   referenced from
1300: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1310: 20 6f 72 20 76 69 65 77 73 2c 0a 74 68 65 6e 20   or views,.then 
1320: 74 68 6f 73 65 20 74 72 69 67 67 65 72 73 20 61  those triggers a
1330: 6e 64 20 76 69 65 77 73 20 6d 75 73 74 20 62 65  nd views must be
1340: 20 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63   dropped and rec
1350: 72 65 61 74 65 64 20 73 65 70 61 72 61 74 65 6c  reated separatel
1360: 79 0a 62 79 20 74 68 65 20 61 70 70 6c 69 63 61  y.by the applica
1370: 74 69 6f 6e 2e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e  tion..</td></tr>
1380: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1390: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 49 66 20 5b  quote>..<p>^If [
13a0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
13b0: 74 72 61 69 6e 74 73 5d 20 61 72 65 20 0a 5b 66  traints] are .[f
13c0: 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61 67  oreign_keys prag
13d0: 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20 77 68  ma | enabled] wh
13e0: 65 6e 20 61 20 74 61 62 6c 65 20 69 73 20 72 65  en a table is re
13f0: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 61 6e 79 0a  named, then any.
1400: 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61  [foreign-key-cla
1410: 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45 53  use | REFERENCES
1420: 20 63 6c 61 75 73 65 73 5d 20 69 6e 20 61 6e 79   clauses] in any
1430: 20 74 61 62 6c 65 20 28 65 69 74 68 65 72 20 74   table (either t
1440: 68 65 0a 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he.table being r
1450: 65 6e 61 6d 65 64 20 6f 72 20 73 6f 6d 65 20 6f  enamed or some o
1460: 74 68 65 72 20 74 61 62 6c 65 29 0a 74 68 61 74  ther table).that
1470: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 74 61   refer to the ta
1480: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1490: 64 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 74  d are modified t
14a0: 6f 20 72 65 66 65 72 20 0a 74 6f 20 74 68 65 20  o refer .to the 
14b0: 72 65 6e 61 6d 65 64 20 74 61 62 6c 65 20 62 79  renamed table by
14c0: 20 69 74 73 20 6e 65 77 20 6e 61 6d 65 2e 0a 0a   its new name...
14d0: 3c 70 3e 20 5e 54 68 65 20 41 44 44 20 43 4f 4c  <p> ^The ADD COL
14e0: 55 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75 73  UMN syntax.is us
14f0: 65 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  ed to add a new 
1500: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
1510: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 54 68  sting table..^Th
1520: 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20  e new column is 
1530: 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64 20  always appended 
1540: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
1550: 65 20 6c 69 73 74 20 6f 66 20 65 78 69 73 74 69  e list of existi
1560: 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20  ng columns..The 
1570: 5b 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c  [column-def] rul
1580: 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 68  e defines the ch
1590: 61 72 61 63 74 65 72 69 73 74 69 63 73 20 6f 66  aracteristics of
15a0: 20 74 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e   the new column.
15b0: 0a 5e 28 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  .^(The new colum
15c0: 6e 20 6d 61 79 20 74 61 6b 65 20 61 6e 79 20 6f  n may take any o
15d0: 66 20 74 68 65 20 66 6f 72 6d 73 20 70 65 72 6d  f the forms perm
15e0: 69 73 73 69 62 6c 65 20 69 6e 20 61 20 5b 43 52  issible in a [CR
15f0: 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
1600: 65 6d 65 6e 74 2c 20 77 69 74 68 20 74 68 65 20  ement, with the 
1610: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69  following restri
1620: 63 74 69 6f 6e 73 3a 29 5e 0a 3c 75 6c 3e 0a 3c  ctions:)^.<ul>.<
1630: 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d  li>^The column m
1640: 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 50 52  ay not have a PR
1650: 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 55 4e 49  IMARY KEY or UNI
1660: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 3c  QUE constraint.<
1670: 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f  /li>.<li>^The co
1680: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76  lumn may not hav
1690: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
16a0: 65 20 6f 66 20 43 55 52 52 45 4e 54 5f 54 49 4d  e of CURRENT_TIM
16b0: 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c  E, CURRENT_DATE,
16c0: 20 0a 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49   .    CURRENT_TI
16d0: 4d 45 53 54 41 4d 50 2c 20 6f 72 20 61 6e 20 65  MESTAMP, or an e
16e0: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70 61 72  xpression in par
16f0: 65 6e 74 68 65 73 65 73 2e 3c 2f 6c 69 3e 0a 3c  entheses.</li>.<
1700: 6c 69 3e 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c  li>^If a NOT NUL
1710: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  L constraint is 
1720: 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
1730: 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20  the column must 
1740: 68 61 76 65 20 61 0a 20 20 20 20 64 65 66 61 75  have a.    defau
1750: 6c 74 20 76 61 6c 75 65 20 6f 74 68 65 72 20 74  lt value other t
1760: 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c 69 3e 5e 49  han NULL..<li>^I
1770: 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  f [foreign key c
1780: 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20  onstraints] are 
1790: 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72  [foreign_keys pr
17a0: 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20  agma | enabled] 
17b0: 61 6e 64 0a 20 20 20 20 61 20 63 6f 6c 75 6d 6e  and.    a column
17c0: 20 77 69 74 68 20 61 20 5b 66 6f 72 65 69 67 6e   with a [foreign
17d0: 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45  -key-clause | RE
17e0: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 5d  FERENCES clause]
17f0: 0a 20 20 20 20 69 73 20 61 64 64 65 64 2c 20 74  .    is added, t
1800: 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68  he column must h
1810: 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 76 61  ave a default va
1820: 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 3c 2f 75  lue of NULL..</u
1830: 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 61 6c 73  l>..<p>^Note als
1840: 6f 20 74 68 61 74 20 77 68 65 6e 20 61 64 64 69  o that when addi
1850: 6e 67 20 61 20 5b 43 48 45 43 4b 20 63 6f 6e 73  ng a [CHECK cons
1860: 74 72 61 69 6e 74 5d 2c 20 74 68 65 20 43 48 45  traint], the CHE
1870: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a 69 73  CK constraint.is
1880: 20 6e 6f 74 20 74 65 73 74 65 64 20 61 67 61 69   not tested agai
1890: 6e 73 74 20 70 72 65 65 78 69 73 74 69 6e 67 20  nst preexisting 
18a0: 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c  rows of the tabl
18b0: 65 2e 0a 5e 54 68 69 73 20 63 61 6e 20 72 65 73  e..^This can res
18c0: 75 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20 74  ult in a table t
18d0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61 74  hat contains dat
18e0: 61 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69 6f  a that.is in vio
18f0: 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43 48  lation of the CH
1900: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ECK constraint. 
1910: 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   Future versions
1920: 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74   of SQLite might
1930: 0a 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69 64  .change to valid
1940: 61 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  ate CHECK constr
1950: 61 69 6e 74 73 20 61 73 20 74 68 65 79 20 61 72  aints as they ar
1960: 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  e added.</p>..<p
1970: 3e 20 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20  > The execution 
1980: 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54 45  time of the ALTE
1990: 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  R TABLE command 
19a0: 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f  is independent o
19b0: 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  f.the amount of 
19c0: 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62 6c  data in the tabl
19d0: 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54 41  e.  The ALTER TA
19e0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  BLE command runs
19f0: 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20 61   as quickly.on a
1a00: 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20 6d   table with 10 m
1a10: 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20 69  illion rows as i
1a20: 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62 6c  t does on a tabl
1a30: 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c 2f  e with 1 row..</
1a40: 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44 44  p>..<p>After ADD
1a50: 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65 6e   COLUMN has been
1a60: 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62 61   run on a databa
1a70: 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61 73  se, that databas
1a80: 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72 65  e will not.be re
1a90: 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74 65  adable by SQLite
1aa0: 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 61   version 3.1.3 a
1ab0: 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a  nd earlier.</p>.
1ac0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
1ad0: 74 20 6f 74 68 65 72 61 6c 74 65 72 3c 2f 74 63  t otheralter</tc
1ae0: 6c 3e 0a 3c 68 33 3e 4d 61 6b 69 6e 67 20 4f 74  l>.<h3>Making Ot
1af0: 68 65 72 20 4b 69 6e 64 73 20 4f 66 20 54 61 62  her Kinds Of Tab
1b00: 6c 65 20 53 63 68 65 6d 61 20 43 68 61 6e 67 65  le Schema Change
1b10: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 54 68 65 20  s</h3>..<p> The 
1b20: 6f 6e 6c 79 20 73 63 68 65 6d 61 20 61 6c 74 65  only schema alte
1b30: 72 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 20 64 69  ring commands di
1b40: 72 65 63 74 6c 79 20 73 75 70 70 6f 72 74 65 64  rectly supported
1b50: 20 62 79 20 53 51 4c 69 74 65 20 61 72 65 20 74   by SQLite are t
1b60: 68 65 0a 22 72 65 6e 61 6d 65 20 74 61 62 6c 65  he."rename table
1b70: 22 20 61 6e 64 20 22 61 64 64 20 63 6f 6c 75 6d  " and "add colum
1b80: 6e 22 20 63 6f 6d 6d 61 6e 64 73 20 73 68 6f 77  n" commands show
1b90: 6e 20 61 62 6f 76 65 2e 20 20 48 6f 77 65 76 65  n above.  Howeve
1ba0: 72 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  r, applications.
1bb0: 63 61 6e 20 6d 61 6b 65 20 6f 74 68 65 72 20 61  can make other a
1bc0: 72 62 69 74 72 61 72 79 20 63 68 61 6e 67 65 73  rbitrary changes
1bd0: 20 74 6f 20 74 68 65 20 66 6f 72 6d 61 74 20 6f   to the format o
1be0: 66 20 61 20 74 61 62 6c 65 20 75 73 69 6e 67 20  f a table using 
1bf0: 61 20 73 69 6d 70 6c 65 0a 73 65 71 75 65 6e 63  a simple.sequenc
1c00: 65 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e  e of operations.
1c10: 0a 54 68 65 20 73 74 65 70 73 20 74 6f 20 6d 61  .The steps to ma
1c20: 6b 65 20 61 72 62 69 74 72 61 72 79 20 63 68 61  ke arbitrary cha
1c30: 6e 67 65 73 20 74 6f 20 74 68 65 20 73 63 68 65  nges to the sche
1c40: 6d 61 20 64 65 73 69 67 6e 20 6f 66 20 73 6f 6d  ma design of som
1c50: 65 20 74 61 62 6c 65 20 58 0a 61 72 65 20 61 73  e table X.are as
1c60: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
1c70: 3c 6c 69 3e 3c 70 3e 0a 52 65 6d 65 6d 62 65 72  <li><p>.Remember
1c80: 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61   the format of a
1c90: 6c 6c 20 69 6e 64 65 78 65 73 20 61 6e 64 20 74  ll indexes and t
1ca0: 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
1cb0: 65 64 20 77 69 74 68 20 74 61 62 6c 65 20 58 2e  ed with table X.
1cc0: 0a 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f  .This informatio
1cd0: 6e 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64  n will be needed
1ce0: 20 69 6e 20 73 74 65 70 20 37 20 62 65 6c 6f 77   in step 7 below
1cf0: 2e 20 20 4f 6e 65 20 77 61 79 20 74 6f 20 64 6f  .  One way to do
1d00: 20 74 68 69 73 20 69 73 0a 74 6f 20 72 75 6e 20   this is.to run 
1d10: 61 20 71 75 65 72 79 20 6c 69 6b 65 20 74 68 65  a query like the
1d20: 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 53 45 4c 45   following:.SELE
1d30: 43 54 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f  CT type, sql FRO
1d40: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1d50: 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d 65 3d 27  WHERE tbl_name='
1d60: 58 27 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65  X'...<li><p>.Use
1d70: 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20   [CREATE TABLE] 
1d80: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 61 20 6e  to construct a n
1d90: 65 77 20 74 61 62 6c 65 20 22 6e 65 77 5f 58 22  ew table "new_X"
1da0: 20 74 68 61 74 20 69 73 20 69 6e 20 74 68 65 20   that is in the 
1db0: 64 65 73 69 72 65 64 0a 72 65 76 69 73 65 64 20  desired.revised 
1dc0: 66 6f 72 6d 61 74 20 6f 66 20 74 61 62 6c 65 20  format of table 
1dd0: 58 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  X.  Make sure th
1de0: 61 74 20 74 68 65 20 6e 61 6d 65 20 22 6e 65 77  at the name "new
1df0: 5f 58 22 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6c  _X" does not col
1e00: 6c 69 64 65 0a 77 69 74 68 20 61 6e 79 20 65 78  lide.with any ex
1e10: 69 73 74 69 6e 67 20 74 61 62 6c 65 20 6e 61 6d  isting table nam
1e20: 65 2c 20 6f 66 20 63 6f 75 72 73 65 2e 0a 0a 3c  e, of course...<
1e30: 6c 69 3e 3c 70 3e 0a 54 72 61 6e 73 66 65 72 20  li><p>.Transfer 
1e40: 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 58 20 69  content from X i
1e50: 6e 74 6f 20 6e 65 77 5f 58 20 75 73 69 6e 67 20  nto new_X using 
1e60: 61 20 73 74 61 74 65 6d 65 6e 74 0a 6c 69 6b 65  a statement.like
1e70: 3a 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e 65  : INSERT INTO ne
1e80: 77 5f 58 20 53 45 4c 45 43 54 20 2e 2e 2e 20 46  w_X SELECT ... F
1e90: 52 4f 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ROM X...<li><p>.
1ea0: 49 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  If foreign key c
1eb0: 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 65  onstraints are e
1ec0: 6e 61 62 6c 65 64 2c 0a 64 69 73 61 62 6c 65 20  nabled,.disable 
1ed0: 74 68 65 6d 20 75 73 69 6e 67 20 5b 50 52 41 47  them using [PRAG
1ee0: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20  MA foreign_keys 
1ef0: 7c 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e  | PRAGMA foreign
1f00: 5f 6b 65 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69  _keys=OFF]...<li
1f10: 3e 3c 70 3e 0a 44 72 6f 70 20 74 68 65 20 6f 6c  ><p>.Drop the ol
1f20: 64 20 74 61 62 6c 65 20 58 3a 20 20 5b 44 52 4f  d table X:  [DRO
1f30: 50 20 54 41 42 4c 45 20 7c 20 44 52 4f 50 20 54  P TABLE | DROP T
1f40: 41 42 4c 45 20 58 5d 2e 0a 0a 3c 6c 69 3e 3c 70  ABLE X]...<li><p
1f50: 3e 0a 43 68 61 6e 67 65 20 74 68 65 20 6e 61 6d  >.Change the nam
1f60: 65 20 6f 66 20 6e 65 77 5f 58 20 74 6f 20 58 20  e of new_X to X 
1f70: 75 73 69 6e 67 3a 20 41 4c 54 45 52 20 54 41 42  using: ALTER TAB
1f80: 4c 45 20 6e 65 77 5f 58 20 52 45 4e 41 4d 45 20  LE new_X RENAME 
1f90: 54 4f 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55  TO X...<li><p>.U
1fa0: 73 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58  se [CREATE INDEX
1fb0: 5d 20 61 6e 64 20 5b 43 52 45 41 54 45 20 54 52  ] and [CREATE TR
1fc0: 49 47 47 45 52 5d 20 74 6f 20 72 65 63 6f 6e 73  IGGER] to recons
1fd0: 74 72 75 63 74 20 69 6e 64 65 78 65 73 20 61 6e  truct indexes an
1fe0: 64 20 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63  d triggers.assoc
1ff0: 69 61 74 65 64 20 77 69 74 68 20 74 61 62 6c 65  iated with table
2000: 20 58 2e 20 20 50 65 72 68 61 70 73 20 75 73 65   X.  Perhaps use
2010: 20 74 68 65 20 6f 6c 64 20 66 6f 72 6d 61 74 20   the old format 
2020: 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 73 20  of the triggers 
2030: 61 6e 64 0a 69 6e 64 65 78 65 73 20 73 61 76 65  and.indexes save
2040: 64 20 66 72 6f 6d 20 73 74 65 70 20 31 20 61 62  d from step 1 ab
2050: 6f 76 65 20 61 73 20 61 20 67 75 69 64 65 2c 20  ove as a guide, 
2060: 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 61  making changes a
2070: 73 20 61 70 70 72 6f 70 72 69 61 74 65 0a 66 6f  s appropriate.fo
2080: 72 20 74 68 65 20 61 6c 74 65 72 61 74 69 6f 6e  r the alteration
2090: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f  ...<li><p>.If fo
20a0: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
20b0: 61 69 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69  aints were origi
20c0: 6e 61 6c 6c 79 20 65 6e 61 62 6c 65 64 20 28 70  nally enabled (p
20d0: 72 69 6f 72 20 74 6f 0a 73 74 65 70 20 34 29 20  rior to.step 4) 
20e0: 74 68 65 6e 20 72 75 6e 20 5b 50 52 41 47 4d 41  then run [PRAGMA
20f0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65   foreign_key_che
2100: 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74 68  ck] to verify th
2110: 61 74 20 74 68 65 20 73 63 68 65 6d 61 0a 63 68  at the schema.ch
2120: 61 6e 67 65 20 64 69 64 20 6e 6f 74 20 62 72 65  ange did not bre
2130: 61 6b 20 61 6e 79 20 66 6f 72 65 69 67 6e 20 6b  ak any foreign k
2140: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  ey constraints, 
2150: 61 6e 64 20 72 75 6e 0a 5b 50 52 41 47 4d 41 20  and run.[PRAGMA 
2160: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 7c 20 50  foreign_keys | P
2170: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
2180: 79 73 3d 4f 4e 5d 20 74 6f 20 72 65 2d 65 6e 61  ys=ON] to re-ena
2190: 62 6c 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a  ble foreign key.
21a0: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 3c 6c  constraints...<l
21b0: 69 3e 3c 70 3e 49 66 20 61 6e 79 20 76 69 65 77  i><p>If any view
21c0: 73 20 72 65 66 65 72 20 74 6f 20 74 61 62 6c 65  s refer to table
21d0: 20 58 20 69 6e 20 61 20 77 61 79 20 74 68 61 74   X in a way that
21e0: 20 69 73 20 61 66 66 65 63 74 65 64 20 62 79 20   is affected by 
21f0: 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67  the.schema chang
2200: 65 2c 20 74 68 65 6e 20 64 72 6f 70 20 74 68 6f  e, then drop tho
2210: 73 65 20 76 69 65 77 73 20 75 73 69 6e 67 20 5b  se views using [
2220: 44 52 4f 50 20 56 49 45 57 5d 20 61 6e 64 20 72  DROP VIEW] and r
2230: 65 63 72 65 61 74 65 20 74 68 65 6d 0a 77 69 74  ecreate them.wit
2240: 68 20 77 68 61 74 65 76 65 72 20 63 68 61 6e 67  h whatever chang
2250: 65 73 20 61 72 65 20 6e 65 63 65 73 73 61 72 79  es are necessary
2260: 20 74 6f 20 61 63 63 6f 6d 6d 6f 64 61 74 65 20   to accommodate 
2270: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
2280: 65 0a 75 73 69 6e 67 20 5b 43 52 45 41 54 45 20  e.using [CREATE 
2290: 56 49 45 57 5d 2e 0a 0a 3c 2f 6f 6c 3e 0a 0a 3c  VIEW]...</ol>..<
22a0: 70 3e 54 68 65 20 70 72 6f 63 65 64 75 72 65 20  p>The procedure 
22b0: 61 62 6f 76 65 20 69 73 20 63 6f 6d 70 6c 65 74  above is complet
22c0: 65 6c 79 20 67 65 6e 65 72 61 6c 20 61 6e 64 20  ely general and 
22d0: 77 69 6c 6c 20 77 6f 72 6b 20 65 76 65 6e 20 69  will work even i
22e0: 66 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61  f the.schema cha
22f0: 6e 67 65 20 63 61 75 73 65 73 20 74 68 65 20 69  nge causes the i
2300: 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 74 6f 72 65  nformation store
2310: 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74  d in the table t
2320: 6f 20 63 68 61 6e 67 65 2e 0a 53 6f 20 74 68 65  o change..So the
2330: 20 66 75 6c 6c 20 70 72 6f 63 65 64 75 72 65 20   full procedure 
2340: 61 62 6f 76 65 20 69 73 20 61 70 70 72 6f 70 72  above is appropr
2350: 69 61 74 65 20 66 6f 72 20 64 72 6f 70 70 69 6e  iate for droppin
2360: 67 20 61 20 63 6f 6c 75 6d 6e 2c 0a 63 68 61 6e  g a column,.chan
2370: 67 69 6e 67 20 74 68 65 20 6f 72 64 65 72 20 6f  ging the order o
2380: 66 20 63 6f 6c 75 6d 6e 73 2c 20 61 64 64 69 6e  f columns, addin
2390: 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20 61 20  g or removing a 
23a0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
23b0: 74 0a 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59  t.or PRIMARY KEY
23c0: 2c 20 61 64 64 69 6e 67 20 43 48 45 43 4b 20 6f  , adding CHECK o
23d0: 72 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72  r FOREIGN KEY or
23e0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
23f0: 61 69 6e 74 73 2c 0a 6f 72 20 63 68 61 6e 67 69  aints,.or changi
2400: 6e 67 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ng the datatype 
2410: 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 2c 20 66 6f  for a column, fo
2420: 72 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65  r example.  Howe
2430: 76 65 72 2c 20 61 20 73 69 6d 70 6c 65 72 0a 61  ver, a simpler.a
2440: 6e 64 20 66 61 73 74 65 72 20 70 72 6f 63 65 64  nd faster proced
2450: 75 72 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c  ure can optional
2460: 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 73  ly be used for.s
2470: 6f 6d 65 20 63 68 61 6e 67 65 73 20 74 68 61 74  ome changes that
2480: 20 64 6f 20 6e 6f 20 61 66 66 65 63 74 20 74 68   do no affect th
2490: 65 20 6f 6e 2d 64 69 73 6b 20 63 6f 6e 74 65 6e  e on-disk conten
24a0: 74 20 69 6e 20 61 6e 79 20 77 61 79 2e 0a 54 68  t in any way..Th
24b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 69 6d 70  e following simp
24c0: 6c 65 72 20 70 72 6f 63 65 64 75 72 65 20 69 73  ler procedure is
24d0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
24e0: 20 72 65 6d 6f 76 69 6e 67 0a 43 48 45 43 4b 20   removing.CHECK 
24f0: 6f 72 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f  or FOREIGN KEY o
2500: 72 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  r NOT NULL const
2510: 72 61 69 6e 74 73 2c 0a 72 65 6e 61 6d 69 6e 67  raints,.renaming
2520: 20 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20 61 64 64   columns, or add
2530: 69 6e 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20  ing or removing 
2540: 6f 72 20 63 68 61 6e 67 69 6e 67 20 64 65 66 61  or changing defa
2550: 75 6c 74 20 76 61 6c 75 65 73 20 6f 6e 0a 61 20  ult values on.a 
2560: 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c  column...<ol>.<l
2570: 69 3e 3c 70 3e 20 52 75 6e 20 5b 50 52 41 47 4d  i><p> Run [PRAGM
2580: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
2590: 5d 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  ] to determine t
25a0: 68 65 20 63 75 72 72 65 6e 74 20 73 63 68 65 6d  he current schem
25b0: 61 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a.version number
25c0: 2e 20 20 54 68 69 73 20 6e 75 6d 62 65 72 20 77  .  This number w
25d0: 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20 66 6f  ill be needed fo
25e0: 72 20 73 74 65 70 20 35 20 62 65 6c 6f 77 2e 0a  r step 5 below..
25f0: 0a 3c 6c 69 3e 3c 70 3e 20 41 63 74 69 76 61 74  .<li><p> Activat
2600: 65 20 73 63 68 65 6d 61 20 65 64 69 74 69 6e 67  e schema editing
2610: 20 75 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41 20   using .[PRAGMA 
2620: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 20  writable_schema 
2630: 7c 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c  | PRAGMA writabl
2640: 65 5f 73 63 68 65 6d 61 3d 4f 4e 5d 2e 0a 0a 3c  e_schema=ON]...<
2650: 6c 69 3e 3c 70 3e 20 52 75 6e 20 61 6e 20 5b 55  li><p> Run an [U
2660: 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  PDATE] statement
2670: 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20 64   to change the d
2680: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 61 62  efinition of tab
2690: 6c 65 20 58 0a 69 6e 20 74 68 65 20 5b 73 71 6c  le X.in the [sql
26a0: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
26b0: 5d 3a 20 0a 55 50 44 41 54 45 20 73 71 6c 69 74  ]: .UPDATE sqlit
26c0: 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71 6c  e_master SET sql
26d0: 3d 2e 2e 2e 20 57 48 45 52 45 20 74 79 70 65 3d  =... WHERE type=
26e0: 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65  'table' AND name
26f0: 3d 27 58 27 3b 0a 3c 70 3e 3c 65 6d 3e 43 61 75  ='X';.<p><em>Cau
2700: 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4d 61 6b 69  tion:</em>  Maki
2710: 6e 67 20 61 20 63 68 61 6e 67 65 20 74 6f 20 74  ng a change to t
2720: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
2730: 20 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73   table like this
2740: 20 77 69 6c 6c 0a 72 65 6e 64 65 72 20 74 68 65   will.render the
2750: 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
2760: 74 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65  t and unreadable
2770: 20 69 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   if the change c
2780: 6f 6e 74 61 69 6e 73 0a 61 20 73 79 6e 74 61 78  ontains.a syntax
2790: 20 65 72 72 6f 72 2e 20 20 49 74 20 69 73 20 73   error.  It is s
27a0: 75 67 67 65 73 74 65 64 20 74 68 61 74 20 63 61  uggested that ca
27b0: 72 65 66 75 6c 20 74 65 73 74 69 6e 67 20 6f 66  reful testing of
27c0: 20 74 68 65 20 55 50 44 41 54 45 0a 73 74 61 74   the UPDATE.stat
27d0: 65 6d 65 6e 74 20 62 65 20 64 6f 6e 65 20 6f 6e  ement be done on
27e0: 20 61 20 73 65 70 61 72 61 74 65 20 62 6c 61 6e   a separate blan
27f0: 6b 20 64 61 74 61 62 61 73 65 20 70 72 69 6f 72  k database prior
2800: 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e 0a   to using it on.
2810: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61  a database conta
2820: 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74 20  ining important 
2830: 64 61 74 61 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49  data...<li><p> I
2840: 66 20 74 68 65 20 63 68 61 6e 67 65 20 74 6f 20  f the change to 
2850: 74 61 62 6c 65 20 58 20 61 6c 73 6f 20 61 66 66  table X also aff
2860: 65 63 74 73 20 6f 74 68 65 72 20 74 61 62 6c 65  ects other table
2870: 73 20 6f 72 20 69 6e 64 65 78 65 73 20 6f 72 0a  s or indexes or.
2880: 74 72 69 67 67 65 72 73 20 61 72 65 20 76 69 65  triggers are vie
2890: 77 73 20 77 69 74 68 69 6e 20 73 63 68 65 6d 61  ws within schema
28a0: 2c 20 74 68 65 6e 20 72 75 6e 20 5b 55 50 44 41  , then run [UPDA
28b0: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 74  TE] statements t
28c0: 6f 20 6d 6f 64 69 66 79 0a 74 68 6f 73 65 20 6f  o modify.those o
28d0: 74 68 65 72 20 74 61 62 6c 65 73 20 69 6e 64 65  ther tables inde
28e0: 78 65 73 20 61 6e 64 20 76 69 65 77 73 20 74 6f  xes and views to
28f0: 6f 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  o.  For example,
2900: 20 69 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a   if the name of.
2910: 61 20 63 6f 6c 75 6d 6e 20 63 68 61 6e 67 65 73  a column changes
2920: 2c 20 61 6c 6c 20 46 4f 52 45 49 47 4e 20 4b 45  , all FOREIGN KE
2930: 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74  Y constraints, t
2940: 72 69 67 67 65 72 73 2c 20 69 6e 64 65 78 65 73  riggers, indexes
2950: 2c 20 61 6e 64 0a 76 69 65 77 73 20 74 68 61 74  , and.views that
2960: 20 72 65 66 65 72 20 74 6f 20 74 68 61 74 20 63   refer to that c
2970: 6f 6c 75 6d 6e 20 6d 75 73 74 20 62 65 20 6d 6f  olumn must be mo
2980: 64 69 66 69 65 64 2e 0a 3c 70 3e 3c 65 6d 3e 43  dified..<p><em>C
2990: 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4f 6e  aution:</em>  On
29a0: 63 65 20 61 67 61 69 6e 2c 20 6d 61 6b 69 6e 67  ce again, making
29b0: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
29c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a 74  sqlite_master .t
29d0: 61 62 6c 65 20 6c 69 6b 65 20 74 68 69 73 20 77  able like this w
29e0: 69 6c 6c 20 72 65 6e 64 65 72 20 74 68 65 20 64  ill render the d
29f0: 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 20  atabase corrupt 
2a00: 61 6e 64 20 75 6e 72 65 61 64 61 62 6c 65 20 69  and unreadable i
2a10: 66 20 74 68 65 20 0a 63 68 61 6e 67 65 20 63 6f  f the .change co
2a20: 6e 74 61 69 6e 73 20 61 6e 20 65 72 72 6f 72 2e  ntains an error.
2a30: 20 20 43 61 72 65 66 75 6c 6c 79 20 74 65 73 74    Carefully test
2a40: 20 6f 66 20 74 68 69 73 20 65 6e 74 69 72 65 20   of this entire 
2a50: 70 72 6f 63 65 64 75 72 65 0a 6f 6e 20 61 20 73  procedure.on a s
2a60: 65 70 61 72 61 74 65 20 74 65 73 74 20 64 61 74  eparate test dat
2a70: 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20 75  abase prior to u
2a80: 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61 74  sing it on.a dat
2a90: 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67  abase containing
2aa0: 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61 20   important data 
2ab0: 61 6e 64 2f 6f 72 20 6d 61 6b 65 20 62 61 63 6b  and/or make back
2ac0: 75 70 20 63 6f 70 69 65 73 20 6f 66 0a 69 6d 70  up copies of.imp
2ad0: 6f 72 74 61 6e 74 20 64 61 74 61 62 61 73 65 73  ortant databases
2ae0: 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e   prior to runnin
2af0: 67 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  g this procedure
2b00: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 6e 63 72 65  ...<li><p> Incre
2b10: 6d 65 6e 74 20 74 68 65 20 73 63 68 65 6d 61 20  ment the schema 
2b20: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 75  version number u
2b30: 73 69 6e 67 0a 5b 50 52 41 47 4d 41 20 73 63 68  sing.[PRAGMA sch
2b40: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7c 20 50 52  ema_version | PR
2b50: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
2b60: 69 6f 6e 3d 58 5d 20 77 68 65 72 65 20 58 20 69  ion=X] where X i
2b70: 73 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e 20  s one.more than 
2b80: 74 68 65 20 6f 6c 64 20 73 63 68 65 6d 61 20 76  the old schema v
2b90: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
2ba0: 75 6e 64 20 69 6e 20 73 74 65 70 20 32 20 61 62  und in step 2 ab
2bb0: 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 44 69  ove...<li><p> Di
2bc0: 73 61 62 6c 65 20 73 63 68 65 6d 61 20 65 64 69  sable schema edi
2bd0: 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52 41  ting using .[PRA
2be0: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
2bf0: 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72 69  ema | PRAGMA wri
2c00: 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46  table_schema=OFF
2c10: 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 28 4f 70 74  ]...<li><p> (Opt
2c20: 69 6f 6e 61 6c 29 20 52 75 6e 20 5b 50 52 41 47  ional) Run [PRAG
2c30: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2c40: 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74 68  ck] to verify th
2c50: 61 74 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68  at the.schema ch
2c60: 61 6e 67 65 73 20 64 69 64 20 6e 6f 74 20 64 61  anges did not da
2c70: 6d 61 67 65 20 74 68 65 20 64 61 74 61 62 61 73  mage the databas
2c80: 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 74 20  e..</ol>..<p>It 
2c90: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 68 61  is important tha
2ca0: 74 20 62 6f 74 68 20 6f 66 20 74 68 65 20 61 62  t both of the ab
2cb0: 6f 76 65 20 70 72 6f 63 65 64 75 72 65 73 20 62  ove procedures b
2cc0: 65 20 72 75 6e 20 66 72 6f 6d 20 77 69 74 68 69  e run from withi
2cd0: 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n.a transaction 
2ce0: 74 6f 20 70 72 65 76 65 6e 74 20 6f 74 68 65 72  to prevent other
2cf0: 20 70 72 6f 63 65 73 73 65 73 20 66 72 6f 6d 20   processes from 
2d00: 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 64 61  accessing the da
2d10: 74 61 62 61 73 65 20 66 69 6c 65 0a 77 68 69 6c  tabase file.whil
2d20: 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  e the schema cha
2d30: 6e 67 65 20 69 73 20 6f 6e 6c 79 20 70 61 72 74  nge is only part
2d40: 69 61 6c 6c 79 20 63 6f 6d 70 6c 65 74 65 2e 20  ially complete. 
2d50: 20 0a 0a 3c 70 3e 49 66 20 73 6f 6d 65 20 66 75   ..<p>If some fu
2d60: 74 75 72 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  ture version of 
2d70: 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20  SQLite adds new 
2d80: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61 70 61  ALTER TABLE capa
2d90: 62 69 6c 69 74 69 65 73 2c 20 0a 74 68 6f 73 65  bilities, .those
2da0: 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 77 69   capabilities wi
2db0: 6c 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79 20 75  ll very likely u
2dc0: 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77  se one of the tw
2dd0: 6f 20 70 72 6f 63 65 64 75 72 65 73 0a 6f 75 74  o procedures.out
2de0: 6c 69 6e 65 64 20 61 62 6f 76 65 2e 0a 0a 3c 74  lined above...<t
2df0: 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f 66 20 74 68  cl>.#  One of th
2e00: 65 20 72 65 61 73 6f 6e 73 20 74 68 61 74 0a 23  e reasons that.#
2e10: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
2e20: 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f   currently suppo
2e30: 72 74 20 6d 6f 72 65 20 41 4c 54 45 52 20 54 41  rt more ALTER TA
2e40: 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69 65 73  BLE capabilities
2e50: 20 69 73 20 74 68 61 74 0a 23 20 74 68 65 20 70   is that.# the p
2e60: 72 6f 63 65 64 75 72 65 20 73 68 6f 77 6e 20 61  rocedure shown a
2e70: 62 6f 76 65 20 69 73 20 64 69 66 66 69 63 75 6c  bove is difficul
2e80: 74 20 74 6f 20 61 75 74 6f 6d 61 74 65 20 66 6f  t to automate fo
2e90: 72 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73  r an arbitrary s
2ea0: 63 68 65 6d 61 2e 0a 23 20 50 61 72 74 69 63 75  chema..# Particu
2eb0: 6c 61 72 6c 79 20 74 72 6f 75 62 6c 65 73 6f 6d  larly troublesom
2ec0: 65 20 61 72 65 61 73 20 61 72 65 20 69 64 65 6e  e areas are iden
2ed0: 74 69 66 79 69 6e 67 20 61 6c 6c 20 76 69 65 77  tifying all view
2ee0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2ef0: 68 0a 23 20 74 61 62 6c 65 20 58 20 69 6e 20 73  h.# table X in s
2f00: 74 65 70 20 31 20 61 6e 64 20 63 72 65 61 74 69  tep 1 and creati
2f10: 6e 67 20 6e 65 77 20 76 69 65 77 73 20 61 6e 64  ng new views and
2f20: 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20 61   triggers that a
2f30: 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 0a 23 20  re compatible.# 
2f40: 77 69 74 68 20 74 68 65 20 61 6c 74 65 72 65 64  with the altered
2f50: 20 73 63 68 65 6d 61 20 66 6f 72 20 74 61 62 6c   schema for tabl
2f60: 65 20 58 20 69 6e 20 73 74 65 70 20 36 2e 20 20  e X in step 6.  
2f70: 49 74 20 69 73 20 61 20 74 72 69 63 6b 79 20 62  It is a tricky b
2f80: 75 74 20 73 6f 6c 76 61 62 6c 65 0a 23 20 70 72  ut solvable.# pr
2f90: 6f 62 6c 65 6d 20 74 6f 20 63 72 65 61 74 65 20  oblem to create 
2fa0: 63 6f 64 65 20 74 68 61 74 20 77 69 6c 6c 20 70  code that will p
2fb0: 65 72 66 6f 72 6d 20 74 68 65 20 73 74 65 70 73  erform the steps
2fc0: 20 61 62 6f 76 65 20 0a 23 20 66 6f 72 20 22 72   above .# for "r
2fd0: 65 61 73 6f 6e 61 62 6c 65 22 20 73 63 68 65 6d  easonable" schem
2fe0: 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75 6e  as commonly foun
2ff0: 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20  d in practice.  
3000: 0a 23 20 42 75 74 20 74 68 65 72 65 20 65 78 69  .# But there exi
3010: 73 74 20 6d 61 6c 65 76 6f 6c 65 6e 74 20 73 63  st malevolent sc
3020: 68 65 6d 61 73 20 66 6f 72 20 77 68 69 63 68 0a  hemas for which.
3030: 23 20 74 68 65 73 65 20 73 74 65 70 73 20 61 72  # these steps ar
3040: 65 20 6d 61 64 64 65 6e 69 6e 67 6c 79 20 64 69  e maddeningly di
3050: 66 66 69 63 75 6c 74 20 74 6f 20 64 6f 20 63 6f  fficult to do co
3060: 72 72 65 63 74 6c 79 2e 20 20 52 61 74 68 65 72  rrectly.  Rather
3070: 20 74 68 61 6e 20 63 72 65 61 74 65 0a 23 20 41   than create.# A
3080: 4c 54 45 52 20 54 41 42 4c 45 20 66 65 61 74 75  LTER TABLE featu
3090: 72 65 73 20 74 68 61 74 20 77 6f 72 6b 20 63 6f  res that work co
30a0: 72 72 65 63 74 6c 79 20 39 39 2e 39 25 20 6f 66  rrectly 99.9% of
30b0: 20 74 68 65 20 74 69 6d 65 20 62 75 74 20 70 6f   the time but po
30c0: 73 73 69 62 6c 79 0a 23 20 63 6f 72 72 75 70 74  ssibly.# corrupt
30d0: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 6e 20 74   the schema on t
30e0: 68 65 20 6f 74 68 65 72 20 30 2e 31 25 2c 20 74  he other 0.1%, t
30f0: 68 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f  he SQLite develo
3100: 70 65 72 73 20 68 61 76 65 20 64 65 63 69 64 65  pers have decide
3110: 64 0a 23 20 74 6f 20 70 75 73 68 20 74 68 65 20  d.# to push the 
3120: 70 72 6f 62 6c 65 6d 20 69 6e 74 6f 20 74 68 65  problem into the
3130: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d   application dom
3140: 61 69 6e 2c 20 77 68 65 72 65 20 69 74 20 69 73  ain, where it is
3150: 20 6d 75 63 68 20 65 61 73 69 65 72 0a 23 20 74   much easier.# t
3160: 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e 0a  o solve..</tcl>.
3170: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
3180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31c0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
31d0: 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65  ANALYZE} analyze
31e0: 20 41 4e 41 4c 59 5a 45 0a 0a 52 65 63 75 72 73   ANALYZE..Recurs
31f0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
3200: 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c 2f   analyze-stmt.</
3210: 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41  tcl>..<p> ^The A
3220: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67  NALYZE command g
3230: 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69 63  athers statistic
3240: 73 20 61 62 6f 75 74 20 74 61 62 6c 65 73 20 61  s about tables a
3250: 6e 64 0a 69 6e 64 69 63 65 73 20 61 6e 64 20 73  nd.indices and s
3260: 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 6c 65 63  tores the collec
3270: 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ted information.
3280: 69 6e 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62  in [internal tab
3290: 6c 65 73 5d 20 6f 66 20 74 68 65 20 64 61 74 61  les] of the data
32a0: 62 61 73 65 20 77 68 65 72 65 20 74 68 65 20 71  base where the q
32b0: 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63  uery optimizer c
32c0: 61 6e 0a 61 63 63 65 73 73 20 74 68 65 20 69 6e  an.access the in
32d0: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73  formation and us
32e0: 65 20 69 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b  e it to help mak
32f0: 65 20 62 65 74 74 65 72 20 71 75 65 72 79 20 70  e better query p
3300: 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e  lanning choices.
3310: 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74  .^If no argument
3320: 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c  s are given, all
3330: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
3340: 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64  ses are.analyzed
3350: 2e 20 20 5e 49 66 20 61 20 64 61 74 61 62 61 73  .  ^If a databas
3360: 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e 20  e name is given 
3370: 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2c  as the argument,
3380: 20 74 68 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73   then all tables
3390: 0a 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20  .and indices in 
33a0: 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61 73  that one databas
33b0: 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20  e are analyzed. 
33c0: 20 0a 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65   .^If the argume
33d0: 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61  nt is a table na
33e0: 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  me, then only th
33f0: 61 74 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  at table and the
3400: 0a 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61  .indices associa
3410: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61  ted with that ta
3420: 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64  ble are analyzed
3430: 2e 20 20 5e 49 66 20 74 68 65 20 61 72 67 75 6d  .  ^If the argum
3440: 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64 65 78 20  ent.is an index 
3450: 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  name, then only 
3460: 74 68 61 74 20 6f 6e 65 20 69 6e 64 65 78 20 69  that one index i
3470: 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a  s analyzed.</p>.
3480: 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61 75 6c  .<p> ^The defaul
3490: 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  t implementation
34a0: 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61 74   stores all stat
34b0: 69 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e 67  istics in a sing
34c0: 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  le.table named "
34d0: 5b 73 71 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e  [sqlite_stat1]".
34e0: 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20    ^If SQLite is 
34f0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
3500: 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e.[SQLITE_ENABLE
3510: 5f 53 54 41 54 33 5d 20 6f 70 74 69 6f 6e 20 61  _STAT3] option a
3520: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 5b  nd without the [
3530: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
3540: 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68 65  AT4].option, the
3550: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
3560: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
3570: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
3580: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
3590: 74 61 74 33 5d 2e 0a 20 5e 49 66 20 53 51 4c 69  tat3].. ^If SQLi
35a0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
35b0: 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
35c0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 6f 70  ENABLE_STAT4] op
35d0: 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74  tion, then addit
35e0: 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20  ional histogram 
35f0: 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65  data is.collecte
3600: 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20  d and stored in 
3610: 5b 73 71 6c 69 74 65 5f 73 74 61 74 34 5d 2e 0a  [sqlite_stat4]..
3620: 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Older versions o
3630: 66 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 6d  f SQLite would m
3640: 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65 20 5b  ake use of the [
3650: 73 71 6c 69 74 65 5f 73 74 61 74 32 5d 20 74 61  sqlite_stat2] ta
3660: 62 6c 65 0a 77 68 65 6e 20 63 6f 6d 70 69 6c 65  ble.when compile
3670: 64 20 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45  d with [SQLITE_E
3680: 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 62 75 74  NABLE_STAT2] but
3690: 20 61 6c 6c 20 72 65 63 65 6e 74 20 76 65 72 73   all recent vers
36a0: 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 69  ions of.SQLite i
36b0: 67 6e 6f 72 65 20 74 68 65 20 73 71 6c 69 74 65  gnore the sqlite
36c0: 5f 73 74 61 74 32 20 74 61 62 6c 65 2e 0a 46 75  _stat2 table..Fu
36d0: 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ture enhancement
36e0: 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64 64  s may create.add
36f0: 69 74 69 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e 61  itional [interna
3700: 6c 20 74 61 62 6c 65 73 5d 20 77 69 74 68 20 74  l tables] with t
3710: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61 74  he same name pat
3720: 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74 68  tern except with
3730: 0a 66 69 6e 61 6c 20 64 69 67 69 74 20 6c 61 72  .final digit lar
3740: 67 65 72 20 74 68 61 6e 20 22 34 22 2e 0a 41 6c  ger than "4"..Al
3750: 6c 20 6f 66 20 74 68 65 73 65 20 74 61 62 6c 65  l of these table
3760: 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65  s are collective
3770: 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61  ly referred to a
3780: 73 20 22 73 74 61 74 69 73 74 69 63 73 20 74 61  s "statistics ta
3790: 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  bles"..</p>..<p>
37a0: 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66   ^The content of
37b0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
37c0: 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75  tables can be qu
37d0: 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c  eried using [SEL
37e0: 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20  ECT].and can be 
37f0: 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 74 68  changed using th
3800: 65 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  e [DELETE], [INS
3810: 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41 54  ERT], and [UPDAT
3820: 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28 54  E] commands..^(T
3830: 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  he [DROP TABLE] 
3840: 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f 6e  command works on
3850: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
3860: 65 73 0a 61 73 20 6f 66 20 53 51 4c 69 74 65 20  es.as of SQLite 
3870: 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29 5e  version 3.7.9.)^
3880: 0a 5e 54 68 65 20 5b 41 4c 54 45 52 20 54 41 42  .^The [ALTER TAB
3890: 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73  LE] command does
38a0: 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 73 74 61   not work on sta
38b0: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 2e 0a  tistics tables..
38c0: 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72 65  Appropriate care
38d0: 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
38e0: 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74 68  when changing th
38f0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
3900: 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62 6c   statistics.tabl
3910: 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63 6f  es as invalid co
3920: 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65 20  ntent can cause 
3930: 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63 74  SQLite to select
3940: 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75 65   inefficient.que
3950: 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65 72  ry plans.  Gener
3960: 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20 6f  ally speaking, o
3970: 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f  ne should not mo
3980: 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e 74  dify the content
3990: 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74 69   of.the statisti
39a0: 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e 79  cs tables by any
39b0: 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65 72   mechanism other
39c0: 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20 74   than invoking t
39d0: 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61  he.ANALYZE comma
39e0: 6e 64 2e 20 20 0a 53 65 65 20 22 5b 4d 61 6e 75  nd.  .See "[Manu
39f0: 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66 20 51 75  al Control Of Qu
3a00: 65 72 79 20 50 6c 61 6e 73 20 55 73 69 6e 67 20  ery Plans Using 
3a10: 53 51 4c 49 54 45 5f 53 54 41 54 20 54 61 62 6c  SQLITE_STAT Tabl
3a20: 65 73 5d 22 20 66 6f 72 0a 66 75 72 74 68 65 72  es]" for.further
3a30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
3a40: 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74 69  >..<p> ^Statisti
3a50: 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20 41  cs gathered by A
3a60: 4e 41 4c 59 5a 45 20 61 72 65 20 6e 6f 74 20 61  NALYZE are not a
3a70: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64  utomatically upd
3a80: 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e 74  ated as.the cont
3a90: 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
3aa0: 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49 66  ase changes.  If
3ab0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
3ac0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68 61  the database.cha
3ad0: 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e 74  nges significant
3ae0: 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64 61  ly, or if the da
3af0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
3b00: 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20  anges, then one 
3b10: 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20  should.consider 
3b20: 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e  rerunning the AN
3b30: 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  ALYZE command in
3b40: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
3b50: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 2e   the statistics.
3b60: 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71 75  </p>..<p> The qu
3b70: 65 72 79 20 70 6c 61 6e 6e 65 72 20 6c 6f 61 64  ery planner load
3b80: 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  s the content of
3b90: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
3ba0: 74 61 62 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d 6f  tables.into memo
3bb0: 72 79 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  ry when the sche
3bc0: 6d 61 20 69 73 20 72 65 61 64 2e 20 20 5e 48 65  ma is read.  ^He
3bd0: 6e 63 65 2c 20 77 68 65 6e 20 61 6e 20 61 70 70  nce, when an app
3be0: 6c 69 63 61 74 69 6f 6e 0a 63 68 61 6e 67 65 73  lication.changes
3bf0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
3c00: 74 61 62 6c 65 73 20 64 69 72 65 63 74 6c 79 2c  tables directly,
3c10: 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74   SQLite will not
3c20: 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 6e 6f 74   immediately.not
3c30: 69 63 65 20 74 68 65 20 63 68 61 6e 67 65 73 2e  ice the changes.
3c40: 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e   ^An application
3c50: 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71  .can force the q
3c60: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20  uery planner to 
3c70: 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74 69  reread the stati
3c80: 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79 20  stics tables by 
3c90: 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59  running.<b>ANALY
3ca0: 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
3cb0: 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 20  </b>. </p>..<p> 
3cc0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
3cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d10: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
3d20: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d  ATTACH DATABASE}
3d30: 20 61 74 74 61 63 68 20 7b 61 74 74 61 63 68 65   attach {attache
3d40: 64 20 2a 41 54 54 41 43 48 7d 0a 0a 52 65 63 75  d *ATTACH}..Recu
3d50: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
3d60: 61 6d 20 61 74 74 61 63 68 2d 73 74 6d 74 0a 3c  am attach-stmt.<
3d70: 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  /tcl>..<p> ^The 
3d80: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20  ATTACH DATABASE 
3d90: 73 74 61 74 65 6d 65 6e 74 20 61 64 64 73 20 61  statement adds a
3da0: 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20  nother database 
3db0: 0a 66 69 6c 65 20 74 6f 20 74 68 65 20 63 75 72  .file to the cur
3dc0: 72 65 6e 74 20 5b 64 61 74 61 62 61 73 65 20 63  rent [database c
3dd0: 6f 6e 6e 65 63 74 69 6f 6e 5d 2e 20 0a 5e 54 68  onnection]. .^Th
3de0: 65 20 66 69 6c 65 6e 61 6d 65 20 66 6f 72 20 74  e filename for t
3df0: 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 62  he database to b
3e00: 65 20 61 74 74 61 63 68 65 64 20 69 73 20 74 68  e attached is th
3e10: 65 20 76 61 6c 75 65 20 6f 66 0a 74 68 65 20 65  e value of.the e
3e20: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 6f  xpression that o
3e30: 63 63 75 72 73 20 62 65 66 6f 72 65 20 74 68 65  ccurs before the
3e40: 20 41 53 20 6b 65 79 77 6f 72 64 2e 0a 5e 54 68   AS keyword..^Th
3e50: 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68  e filename of th
3e60: 65 20 64 61 74 61 62 61 73 65 20 66 6f 6c 6c 6f  e database follo
3e70: 77 73 20 74 68 65 20 73 61 6d 65 20 73 65 6d 61  ws the same sema
3e80: 6e 74 69 63 73 20 61 73 20 74 68 65 0a 66 69 6c  ntics as the.fil
3e90: 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  ename argument t
3ea0: 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  o [sqlite3_open(
3eb0: 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f  )] and [sqlite3_
3ec0: 6f 70 65 6e 5f 76 32 28 29 5d 3b 20 74 68 65 0a  open_v2()]; the.
3ed0: 73 70 65 63 69 61 6c 20 6e 61 6d 65 20 22 5b 3a  special name "[:
3ee0: 6d 65 6d 6f 72 79 3a 5d 22 20 72 65 73 75 6c 74  memory:]" result
3ef0: 73 20 69 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f  s in an [in-memo
3f00: 72 79 20 64 61 74 61 62 61 73 65 5d 20 61 6e 64  ry database] and
3f10: 20 61 6e 0a 65 6d 70 74 79 20 73 74 72 69 6e 67   an.empty string
3f20: 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 6e 65   results in a ne
3f30: 77 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61  w temporary data
3f40: 62 61 73 65 2e 0a 5e 54 68 65 20 66 69 6c 65 6e  base..^The filen
3f50: 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 63 61 6e  ame argument can
3f60: 20 62 65 20 61 20 5b 55 52 49 20 66 69 6c 65 6e   be a [URI filen
3f70: 61 6d 65 5d 20 69 66 20 55 52 49 20 66 69 6c 65  ame] if URI file
3f80: 6e 61 6d 65 20 70 72 6f 63 65 73 73 69 6e 67 0a  name processing.
3f90: 69 73 20 65 6e 61 62 6c 65 20 6f 6e 20 74 68 65  is enable on the
3fa0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
3fb0: 74 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75  tion.  The defau
3fc0: 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 66  lt behavior is f
3fd0: 6f 72 0a 55 52 49 20 66 69 6c 65 6e 61 6d 65 73  or.URI filenames
3fe0: 20 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64 2c   to be disabled,
3ff0: 20 68 6f 77 65 76 65 72 20 74 68 61 74 20 6d 69   however that mi
4000: 67 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61 20  ght change in a 
4010: 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 0a 6f  future release.o
4020: 66 20 53 51 4c 69 74 65 2c 20 73 6f 20 61 70 70  f SQLite, so app
4030: 6c 69 63 61 74 69 6f 6e 20 64 65 76 65 6c 6f 70  lication develop
4040: 65 72 73 20 61 72 65 20 61 64 76 69 73 65 64 20  ers are advised 
4050: 74 6f 20 70 6c 61 6e 20 61 63 63 6f 72 64 69 6e  to plan accordin
4060: 67 6c 79 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61 6d  gly...<p>The nam
4070: 65 20 74 68 61 74 20 6f 63 63 75 72 73 20 61 66  e that occurs af
4080: 74 65 72 20 74 68 65 20 41 53 20 6b 65 79 77 6f  ter the AS keywo
4090: 72 64 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  rd is the name o
40a0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 75  f the database.u
40b0: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  sed internally b
40c0: 79 20 53 51 4c 69 74 65 2e 0a 5e 54 68 65 20 64  y SQLite..^The d
40d0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 73 20 27 6d  atabase-names 'm
40e0: 61 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70 27  ain' and .'temp'
40f0: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d 61   refer to the ma
4100: 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  in database and 
4110: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
4120: 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79  d for .temporary
4130: 20 74 61 62 6c 65 73 2e 20 20 5e 54 68 65 20 6d   tables.  ^The m
4140: 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61 74  ain and temp dat
4150: 61 62 61 73 65 73 20 63 61 6e 6e 6f 74 20 62 65  abases cannot be
4160: 20 61 74 74 61 63 68 65 64 20 6f 72 0a 64 65 74   attached or.det
4170: 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  ached.</p>..<p> 
4180: 5e 28 54 61 62 6c 65 73 20 69 6e 20 61 6e 20 61  ^(Tables in an a
4190: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
41a0: 20 63 61 6e 20 62 65 20 72 65 66 65 72 72 65 64   can be referred
41b0: 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73 79   to using the sy
41c0: 6e 74 61 78 20 0a 3c 69 3e 64 61 74 61 62 61 73  ntax .<i>databas
41d0: 65 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d  e-name.table-nam
41e0: 65 3c 2f 69 3e 2e 29 5e 20 20 5e 49 66 20 74 68  e</i>.)^  ^If th
41f0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
4200: 62 6c 65 20 69 73 20 75 6e 69 71 75 65 0a 61 63  ble is unique.ac
4210: 72 6f 73 73 20 61 6c 6c 20 61 74 74 61 63 68 65  ross all attache
4220: 64 20 64 61 74 61 62 61 73 65 73 20 61 6e 64 20  d databases and 
4230: 74 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d  the main and tem
4240: 70 20 64 61 74 61 62 61 73 65 73 2c 20 74 68 65  p databases, the
4250: 6e 20 74 68 65 0a 3c 69 3e 64 61 74 61 62 61 73  n the.<i>databas
4260: 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69  e-name</i> prefi
4270: 78 20 69 73 20 6e 6f 74 20 72 65 71 75 69 72 65  x is not require
4280: 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f 72 20 6d  d.  ^If two or m
4290: 6f 72 65 20 74 61 62 6c 65 73 20 69 6e 0a 64 69  ore tables in.di
42a0: 66 66 65 72 65 6e 74 20 64 61 74 61 62 61 73 65  fferent database
42b0: 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  s have the same 
42c0: 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 0a 3c 69  name and the .<i
42d0: 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
42e0: 69 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74  i> prefix is not
42f0: 20 75 73 65 64 20 6f 6e 20 61 20 74 61 62 6c 65   used on a table
4300: 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65 6e   reference, then
4310: 20 74 68 65 0a 74 61 62 6c 65 20 63 68 6f 73 65   the.table chose
4320: 6e 20 69 73 20 74 68 65 20 6f 6e 65 20 69 6e 20  n is the one in 
4330: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68 61  the database tha
4340: 74 20 77 61 73 20 6c 65 61 73 74 20 72 65 63 65  t was least rece
4350: 6e 74 6c 79 20 61 74 74 61 63 68 65 64 2e 3c 2f  ntly attached.</
4360: 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  p>..<p>.^Transac
4370: 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67 20  tions involving 
4380: 6d 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68 65  multiple attache
4390: 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65 20  d databases are 
43a0: 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e 67  atomic,.assuming
43b0: 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20 64   that the main d
43c0: 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 22  atabase is not "
43d0: 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61 6e 64 20  [:memory:]" and 
43e0: 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f  the .[journal_mo
43f0: 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57 41 4c 5d  de] is not [WAL]
4400: 2e 20 20 5e 28 49 66 20 74 68 65 20 6d 61 69 6e  .  ^(If the main
4410: 0a 64 61 74 61 62 61 73 65 20 69 73 20 22 3a 6d  .database is ":m
4420: 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66 20 74 68  emory:" or if th
4430: 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 69  e journal_mode i
4440: 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a 74 72 61  s WAL, then .tra
4450: 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74 69 6e  nsactions contin
4460: 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69 63 20  ue to be atomic 
4470: 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e 64 69  within each indi
4480: 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73 65 20  vidual.database 
4490: 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74 68 65  file. But if the
44a0: 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20 63   host computer c
44b0: 72 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d 69  rashes in the mi
44c0: 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f 4d 4d 49  ddle.of a [COMMI
44d0: 54 5d 20 77 68 65 72 65 20 74 77 6f 20 6f 72 20  T] where two or 
44e0: 6d 6f 72 65 20 64 61 74 61 62 61 73 65 20 66 69  more database fi
44f0: 6c 65 73 20 61 72 65 20 75 70 64 61 74 65 64 2c  les are updated,
4500: 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73 65 20 66  .some of those f
4510: 69 6c 65 73 20 6d 69 67 68 74 20 67 65 74 20 74  iles might get t
4520: 68 65 20 63 68 61 6e 67 65 73 20 77 68 65 72 65  he changes where
4530: 20 6f 74 68 65 72 73 0a 6d 69 67 68 74 20 6e 6f   others.might no
4540: 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  t.)^.</p>..<p> ^
4550: 54 68 65 72 65 20 69 73 20 61 20 6c 69 6d 69 74  There is a limit
4560: 2c 20 73 65 74 20 75 73 69 6e 67 20 5b 73 71 6c  , set using [sql
4570: 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 61 6e  ite3_limit()] an
4580: 64 20 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  d .[SQLITE_LIMIT
4590: 5f 41 54 54 41 43 48 45 44 5d 2c 20 74 6f 20 74  _ATTACHED], to t
45a0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 74  he number of dat
45b0: 61 62 61 73 65 73 20 74 68 61 74 20 63 61 6e 20  abases that can 
45c0: 62 65 0a 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c  be.simultaneousl
45d0: 79 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  y attached to a 
45e0: 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65 20  single database 
45f0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e 0a  connection.</p>.
4600: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
4610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4650: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
4660: 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f  BEGIN TRANSACTIO
4670: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b  N} transaction {
4680: 2a 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20 52 4f  *BEGIN COMMIT RO
4690: 4c 4c 42 41 43 4b 7d 0a 0a 52 65 63 75 72 73 69  LLBACK}..Recursi
46a0: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
46b0: 62 65 67 69 6e 2d 73 74 6d 74 0a 52 65 63 75 72  begin-stmt.Recur
46c0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
46d0: 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 52 65  m commit-stmt.Re
46e0: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
46f0: 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74  gram rollback-st
4700: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e  mt.</tcl>..<p>.^
4710: 4e 6f 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62  No changes can b
4720: 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61  e made to the da
4730: 74 61 62 61 73 65 20 65 78 63 65 70 74 20 77 69  tabase except wi
4740: 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
4750: 6f 6e 2e 0a 5e 41 6e 79 20 63 6f 6d 6d 61 6e 64  on..^Any command
4760: 20 74 68 61 74 20 63 68 61 6e 67 65 73 20 74 68   that changes th
4770: 65 20 64 61 74 61 62 61 73 65 20 28 62 61 73 69  e database (basi
4780: 63 61 6c 6c 79 2c 20 61 6e 79 20 53 51 4c 20 63  cally, any SQL c
4790: 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72 20 74 68 61  ommand.other tha
47a0: 6e 20 5b 53 45 4c 45 43 54 5d 29 20 77 69 6c 6c  n [SELECT]) will
47b0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73   automatically s
47c0: 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
47d0: 6f 6e 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f 74  on if.one is not
47e0: 20 61 6c 72 65 61 64 79 20 69 6e 20 65 66 66 65   already in effe
47f0: 63 74 2e 20 20 5e 41 75 74 6f 6d 61 74 69 63 61  ct.  ^Automatica
4800: 6c 6c 79 20 73 74 61 72 74 65 64 20 74 72 61 6e  lly started tran
4810: 73 61 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f 6d  sactions.are com
4820: 6d 69 74 74 65 64 20 77 68 65 6e 20 74 68 65 20  mitted when the 
4830: 6c 61 73 74 20 71 75 65 72 79 20 66 69 6e 69 73  last query finis
4840: 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  hes..</p>..<p>.^
4850: 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e  Transactions can
4860: 20 62 65 20 73 74 61 72 74 65 64 20 6d 61 6e 75   be started manu
4870: 61 6c 6c 79 20 75 73 69 6e 67 20 74 68 65 20 42  ally using the B
4880: 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20 5e  EGIN.command.  ^
4890: 28 53 75 63 68 20 74 72 61 6e 73 61 63 74 69 6f  (Such transactio
48a0: 6e 73 20 75 73 75 61 6c 6c 79 20 70 65 72 73 69  ns usually persi
48b0: 73 74 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  st until the nex
48c0: 74 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c  t.COMMIT or ROLL
48d0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 42  BACK command.  B
48e0: 75 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ut a transaction
48f0: 20 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c 4c   will also .ROLL
4900: 42 41 43 4b 20 69 66 20 74 68 65 20 64 61 74 61  BACK if the data
4910: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 6f  base is closed o
4920: 72 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  r if an error oc
4930: 63 75 72 73 0a 61 6e 64 20 74 68 65 20 52 4f 4c  curs.and the ROL
4940: 4c 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20 72  LBACK conflict r
4950: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
4960: 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64  thm is specified
4970: 2e 29 5e 0a 53 65 65 20 74 68 65 20 64 6f 63 75  .)^.See the docu
4980: 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65  mentation on the
4990: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a 63   [ON CONFLICT].c
49a0: 6c 61 75 73 65 20 66 6f 72 20 61 64 64 69 74 69  lause for additi
49b0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
49c0: 20 61 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c 42   about the ROLLB
49d0: 41 43 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACK.conflict res
49e0: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
49f0: 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 45 4e  m..</p>..<p>.^EN
4a00: 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 20 69 73  D TRANSACTION is
4a10: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 43 4f   an alias for CO
4a20: 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20  MMIT..</p>..<p> 
4a30: 5e 28 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63  ^(Transactions c
4a40: 72 65 61 74 65 64 20 75 73 69 6e 67 20 42 45 47  reated using BEG
4a50: 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 20 64 6f 20 6e  IN...COMMIT do n
4a60: 6f 74 20 6e 65 73 74 2e 29 5e 0a 5e 46 6f 72 20  ot nest.)^.^For 
4a70: 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63 74 69  nested transacti
4a80: 6f 6e 73 2c 20 75 73 65 20 74 68 65 20 5b 53 41  ons, use the [SA
4a90: 56 45 50 4f 49 4e 54 5d 20 61 6e 64 20 5b 52 45  VEPOINT] and [RE
4aa0: 4c 45 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e  LEASE] commands.
4ab0: 0a 54 68 65 20 22 54 4f 20 53 41 56 45 50 4f 49  .The "TO SAVEPOI
4ac0: 4e 54 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22 20  NT <i>name</i>" 
4ad0: 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 52 4f  clause of the RO
4ae0: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 73  LLBACK command s
4af0: 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e 74  hown.in the synt
4b00: 61 78 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65  ax diagram above
4b10: 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63 61   is only applica
4b20: 62 6c 65 20 74 6f 20 5b 53 41 56 45 50 4f 49 4e  ble to [SAVEPOIN
4b30: 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  T].transactions.
4b40: 20 20 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f    ^An attempt to
4b50: 20 69 6e 76 6f 6b 65 20 74 68 65 20 42 45 47 49   invoke the BEGI
4b60: 4e 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e  N command within
4b70: 0a 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  .a transaction w
4b80: 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
4b90: 20 65 72 72 6f 72 2c 20 72 65 67 61 72 64 6c 65   error, regardle
4ba0: 73 73 20 6f 66 20 77 68 65 74 68 65 72 0a 74 68  ss of whether.th
4bb0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61  e transaction wa
4bc0: 73 20 73 74 61 72 74 65 64 20 62 79 20 5b 53 41  s started by [SA
4bd0: 56 45 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70 72  VEPOINT] or a pr
4be0: 69 6f 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65 20  ior BEGIN..^The 
4bf0: 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 61  COMMIT command a
4c00: 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  nd the ROLLBACK 
4c10: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20  command without 
4c20: 74 68 65 20 54 4f 20 63 6c 61 75 73 65 0a 77 6f  the TO clause.wo
4c30: 72 6b 20 74 68 65 20 73 61 6d 65 20 6f 6e 20 5b  rk the same on [
4c40: 53 41 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e 73  SAVEPOINT] trans
4c50: 61 63 74 69 6f 6e 73 20 61 73 20 74 68 65 79 20  actions as they 
4c60: 64 6f 20 77 69 74 68 20 74 72 61 6e 73 61 63 74  do with transact
4c70: 69 6f 6e 73 0a 73 74 61 72 74 65 64 20 62 79 20  ions.started by 
4c80: 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  BEGIN.</p>..<tcl
4c90: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6d 6d  >hd_fragment imm
4ca0: 65 64 69 61 74 65 20 7b 42 45 47 49 4e 20 49 4d  ediate {BEGIN IM
4cb0: 4d 45 44 49 41 54 45 7d 20 7b 42 45 47 49 4e 20  MEDIATE} {BEGIN 
4cc0: 45 58 43 4c 55 53 49 56 45 7d 3c 2f 74 63 6c 3e  EXCLUSIVE}</tcl>
4cd0: 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f  .<p>.^Transactio
4ce0: 6e 73 20 63 61 6e 20 62 65 20 64 65 66 65 72 72  ns can be deferr
4cf0: 65 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f  ed, immediate, o
4d00: 72 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 5e  r exclusive.  .^
4d10: 54 68 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e  The default tran
4d20: 73 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72  saction behavior
4d30: 20 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e 44   is deferred..^D
4d40: 65 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74 68  eferred means th
4d50: 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20  at no locks are 
4d60: 61 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65 20  acquired.on the 
4d70: 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74  database until t
4d80: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66  he database is f
4d90: 69 72 73 74 20 61 63 63 65 73 73 65 64 2e 20 20  irst accessed.  
4da0: 5e 54 68 75 73 20 77 69 74 68 20 61 0a 64 65 66  ^Thus with a.def
4db0: 65 72 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f  erred transactio
4dc0: 6e 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74 61  n, the BEGIN sta
4dd0: 74 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64 6f  tement itself do
4de0: 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68  es nothing to th
4df0: 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 5e  e.filesystem.  ^
4e00: 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63  Locks.are not ac
4e10: 71 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65  quired until the
4e20: 20 66 69 72 73 74 20 72 65 61 64 20 6f 72 20 77   first read or w
4e30: 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rite operation. 
4e40: 20 5e 54 68 65 20 66 69 72 73 74 20 72 65 61 64   ^The first read
4e50: 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e  .operation again
4e60: 73 74 20 61 20 64 61 74 61 62 61 73 65 20 63 72  st a database cr
4e70: 65 61 74 65 73 20 61 20 5b 53 48 41 52 45 44 5d  eates a [SHARED]
4e80: 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66 69   lock and the fi
4e90: 72 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61 74  rst.write operat
4ea0: 69 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b 52  ion creates a [R
4eb0: 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20  ESERVED] lock.  
4ec0: 20 5e 42 65 63 61 75 73 65 20 74 68 65 20 61 63   ^Because the ac
4ed0: 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63  quisition of.loc
4ee0: 6b 73 20 69 73 20 64 65 66 65 72 72 65 64 20 75  ks is deferred u
4ef0: 6e 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65  ntil they are ne
4f00: 65 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73  eded, it is poss
4f10: 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65  ible that anothe
4f20: 72 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63  r.thread or proc
4f30: 65 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65  ess could create
4f40: 20 61 20 73 65 70 61 72 61 74 65 20 74 72 61 6e   a separate tran
4f50: 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74  saction and writ
4f60: 65 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73  e to.the databas
4f70: 65 20 61 66 74 65 72 20 74 68 65 20 42 45 47 49  e after the BEGI
4f80: 4e 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  N on the current
4f90: 20 74 68 72 65 61 64 20 68 61 73 20 65 78 65 63   thread has exec
4fa0: 75 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74 72  uted..^If the tr
4fb0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d  ansaction is imm
4fc0: 65 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52 45  ediate, then [RE
4fd0: 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72  SERVED] locks.ar
4fe0: 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c  e acquired on al
4ff0: 6c 20 64 61 74 61 62 61 73 65 73 20 61 73 20 73  l databases as s
5000: 6f 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e  oon as the BEGIN
5010: 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63   command is.exec
5020: 75 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61  uted, without wa
5030: 69 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61  iting for the.da
5040: 74 61 62 61 73 65 20 74 6f 20 62 65 20 75 73 65  tabase to be use
5050: 64 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45 47  d.  ^After a BEG
5060: 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a 6e  IN IMMEDIATE, .n
5070: 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73  o other [databas
5080: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77 69  e connection] wi
5090: 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72  ll be able to wr
50a0: 69 74 65 20 74 6f 20 74 68 65 20 64 61 74 61 62  ite to the datab
50b0: 61 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49  ase or.do a BEGI
50c0: 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42  N IMMEDIATE or B
50d0: 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20  EGIN EXCLUSIVE. 
50e0: 20 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65   ^Other processe
50f0: 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74  s can continue.t
5100: 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20  o read from the 
5110: 64 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65  database, howeve
5120: 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69 76  r.  ^An exclusiv
5130: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61  e transaction ca
5140: 75 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d  uses.[EXCLUSIVE]
5150: 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71   locks to be acq
5160: 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74  uired on all dat
5170: 61 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72 20  abases.  ^After 
5180: 61 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56  a BEGIN.EXCLUSIV
5190: 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74  E, no other [dat
51a0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
51b0: 5d 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72 65  ] except for [re
51c0: 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a  ad_uncommitted].
51d0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c 6c  connections will
51e0: 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64   be able to read
51f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
5200: 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65  d no other conne
5210: 63 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65 78  ction without.ex
5220: 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ception will be 
5230: 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74 68  able to write th
5240: 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c  e database until
5250: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
5260: 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f   is.complete..</
5270: 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70  p>..<p>.^(An imp
5280: 6c 69 63 69 74 20 74 72 61 6e 73 61 63 74 69 6f  licit transactio
5290: 6e 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  n (a transaction
52a0: 20 74 68 61 74 20 69 73 20 73 74 61 72 74 65 64   that is started
52b0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a   automatically,.
52c0: 6e 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  not a transactio
52d0: 6e 20 73 74 61 72 74 65 64 20 62 79 20 42 45 47  n started by BEG
52e0: 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65 64  IN) is committed
52f0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
5300: 68 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63 74  hen.the last act
5310: 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66 69  ive statement fi
5320: 6e 69 73 68 65 73 2e 20 20 41 20 73 74 61 74 65  nishes.  A state
5330: 6d 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77 68  ment finishes wh
5340: 65 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64 20  en its.prepared 
5350: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73 71  statement is [sq
5360: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c 20  lite3_reset() | 
5370: 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69 74  reset] or.[sqlit
5380: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c 20  e3_finalize() | 
5390: 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e 20  finalized].  An 
53a0: 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62 6c  open [sqlite3_bl
53b0: 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e 63  ob] used for.inc
53c0: 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f  remental BLOB I/
53d0: 4f 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20 75  O counts as an u
53e0: 6e 66 69 6e 69 73 68 65 64 20 73 74 61 74 65 6d  nfinished statem
53f0: 65 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69 74  ent.  The [sqlit
5400: 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68 65  e3_blob].finishe
5410: 73 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73 71  s when it is [sq
5420: 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65  lite3_blob_close
5430: 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a  () | closed].)^.
5440: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65  </p>..<p>.^The e
5450: 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20 63  xplicit COMMIT c
5460: 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65  ommand runs imme
5470: 64 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69 66  diately, even if
5480: 20 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64 69   there are.pendi
5490: 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  ng [SELECT] stat
54a0: 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76 65  ements.  ^Howeve
54b0: 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 20  r, if there are 
54c0: 70 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f 70  pending.write op
54d0: 65 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f  erations, the CO
54e0: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c  MMIT command.wil
54f0: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
5500: 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54  rror code [SQLIT
5510: 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c  E_BUSY]..</p>..<
5520: 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74  p>.^An attempt t
5530: 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54  o execute COMMIT
5540: 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75   might also resu
5550: 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45  lt in an [SQLITE
5560: 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f  _BUSY] return co
5570: 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72  de.if an another
5580: 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65   thread or proce
5590: 73 73 20 68 61 73 20 61 20 5b 73 68 61 72 65 64  ss has a [shared
55a0: 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61   lock] on the da
55b0: 74 61 62 61 73 65 0a 74 68 61 74 20 70 72 65 76  tabase.that prev
55c0: 65 6e 74 65 64 20 74 68 65 20 64 61 74 61 62 61  ented the databa
55d0: 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70  se from being up
55e0: 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f  dated.  ^When CO
55f0: 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68  MMIT fails in th
5600: 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e  is.way, the tran
5610: 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20  saction remains 
5620: 61 63 74 69 76 65 20 61 6e 64 20 74 68 65 20 43  active and the C
5630: 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74  OMMIT can be ret
5640: 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72  ried later.after
5650: 20 74 68 65 20 72 65 61 64 65 72 20 68 61 73 20   the reader has 
5660: 68 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20  had a chance to 
5670: 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  clear..</p>..<p>
5680: 0a 49 6e 20 76 65 72 79 20 6f 6c 64 20 76 65 72  .In very old ver
5690: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
56a0: 28 62 65 66 6f 72 65 20 76 65 72 73 69 6f 6e 20  (before version 
56b0: 33 2e 37 2e 31 31 20 63 69 72 63 61 20 32 30 31  3.7.11 circa 201
56c0: 32 2d 30 33 2d 32 30 29 0a 74 68 65 20 52 4f 4c  2-03-20).the ROL
56d0: 4c 42 41 43 4b 20 77 69 6c 6c 20 66 61 69 6c 20  LBACK will fail 
56e0: 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f  with an error co
56f0: 64 65 20 0a 5b 53 51 4c 49 54 45 5f 42 55 53 59  de .[SQLITE_BUSY
5700: 5d 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  ] if there are a
5710: 6e 79 20 70 65 6e 64 69 6e 67 20 71 75 65 72 69  ny pending queri
5720: 65 73 2e 20 20 5e 49 6e 20 6d 6f 72 65 20 72 65  es.  ^In more re
5730: 63 65 6e 74 0a 76 65 72 73 69 6f 6e 73 20 6f 66  cent.versions of
5740: 20 53 51 4c 69 74 65 2c 20 74 68 65 20 52 4f 4c   SQLite, the ROL
5750: 4c 42 41 43 4b 20 77 69 6c 6c 20 70 72 6f 63 65  LBACK will proce
5760: 65 64 20 61 6e 64 20 70 65 6e 64 69 6e 67 20 73  ed and pending s
5770: 74 61 74 65 6d 65 6e 74 73 0a 77 69 6c 6c 20 6f  tatements.will o
5780: 66 74 65 6e 20 62 65 20 61 62 6f 72 74 65 64 2c  ften be aborted,
5790: 20 63 61 75 73 69 6e 67 20 74 68 65 6d 20 74 6f   causing them to
57a0: 20 72 65 74 75 72 6e 20 61 6e 20 5b 53 51 4c 49   return an [SQLI
57b0: 54 45 5f 41 42 4f 52 54 5d 20 6f 72 0a 5b 53 51  TE_ABORT] or.[SQ
57c0: 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
57d0: 41 43 4b 5d 20 65 72 72 6f 72 2e 0a 5e 49 6e 20  ACK] error..^In 
57e0: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
57f0: 2e 38 2e 38 20 61 6e 64 20 6c 61 74 65 72 2c 20  .8.8 and later, 
5800: 61 20 70 65 6e 64 69 6e 67 20 72 65 61 64 20 77  a pending read w
5810: 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 66 75 6e  ill continue fun
5820: 63 74 69 6f 6e 69 6e 67 0a 61 66 74 65 72 20 74  ctioning.after t
5830: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 61 73 20 6c  he ROLLBACK as l
5840: 6f 6e 67 20 61 73 20 74 68 65 20 52 4f 4c 4c 42  ong as the ROLLB
5850: 41 43 4b 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64  ACK does not mod
5860: 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65  ify the database
5870: 0a 73 63 68 65 6d 61 2e 0a 3c 2f 70 3e 0a 0a 3c  .schema..</p>..<
5880: 70 3e 0a 49 66 20 5b 50 52 41 47 4d 41 20 6a 6f  p>.If [PRAGMA jo
5890: 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 73  urnal_mode] is s
58a0: 65 74 20 74 6f 20 4f 46 46 20 28 74 68 75 73 20  et to OFF (thus 
58b0: 64 69 73 61 62 6c 69 6e 67 20 74 68 65 20 72 6f  disabling the ro
58c0: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 66  llback journal.f
58d0: 69 6c 65 29 20 74 68 65 6e 20 74 68 65 20 62 65  ile) then the be
58e0: 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 52 4f  havior of the RO
58f0: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 69  LLBACK command i
5900: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70  s undefined..</p
5910: 3e 0a 0a 3c 68 33 3e 52 65 73 70 6f 6e 73 65 20  >..<h3>Response 
5920: 54 6f 20 45 72 72 6f 72 73 20 57 69 74 68 69 6e  To Errors Within
5930: 20 41 20 54 72 61 6e 73 61 63 74 69 6f 6e 3c 2f   A Transaction</
5940: 68 33 3e 0a 0a 3c 70 3e 20 5e 28 49 66 20 63 65  h3>..<p> ^(If ce
5950: 72 74 61 69 6e 20 6b 69 6e 64 73 20 6f 66 20 65  rtain kinds of e
5960: 72 72 6f 72 73 20 6f 63 63 75 72 20 77 69 74 68  rrors occur with
5970: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
5980: 2c 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f  , the.transactio
5990: 6e 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  n may or may not
59a0: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
59b0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 20  automatically.  
59c0: 54 68 65 0a 65 72 72 6f 72 73 20 74 68 61 74 20  The.errors that 
59d0: 63 61 6e 20 63 61 75 73 65 20 61 6e 20 61 75 74  can cause an aut
59e0: 6f 6d 61 74 69 63 20 72 6f 6c 6c 62 61 63 6b 20  omatic rollback 
59f0: 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75  include:</p>..<u
5a00: 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  l>.<li> [SQLITE_
5a10: 46 55 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65 20  FULL]: database 
5a20: 6f 72 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69  or disk full.<li
5a30: 3e 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d  > [SQLITE_IOERR]
5a40: 3a 20 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72  : disk I/O error
5a50: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55  .<li> [SQLITE_BU
5a60: 53 59 5d 3a 20 64 61 74 61 62 61 73 65 20 69 6e  SY]: database in
5a70: 20 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72 20   use by another 
5a80: 70 72 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51  process.<li> [SQ
5a90: 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74  LITE_NOMEM]: out
5aa0: 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e 20   or memory.<li> 
5ab0: 5b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50  [SQLITE_INTERRUP
5ac0: 54 5d 3a 20 70 72 6f 63 65 73 73 69 6e 67 20 5b  T]: processing [
5ad0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5ae0: 74 7c 69 6e 74 65 72 72 75 70 74 65 64 5d 0a 20  t|interrupted]. 
5af0: 20 20 20 20 62 79 20 61 70 70 6c 69 63 61 74 69      by applicati
5b00: 6f 6e 20 72 65 71 75 65 73 74 0a 3c 2f 75 6c 3e  on request.</ul>
5b10: 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c 6c  )^..<p>.^For all
5b20: 20 6f 66 20 74 68 65 73 65 20 65 72 72 6f 72 73   of these errors
5b30: 2c 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74  , SQLite attempt
5b40: 73 20 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20 74  s to undo just t
5b50: 68 65 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e 74  he one statement
5b60: 0a 69 74 20 77 61 73 20 77 6f 72 6b 69 6e 67 20  .it was working 
5b70: 6f 6e 20 61 6e 64 20 6c 65 61 76 65 20 63 68 61  on and leave cha
5b80: 6e 67 65 73 20 66 72 6f 6d 20 70 72 69 6f 72 20  nges from prior 
5b90: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
5ba0: 6e 20 74 68 65 0a 73 61 6d 65 20 74 72 61 6e 73  n the.same trans
5bb0: 61 63 74 69 6f 6e 20 69 6e 74 61 63 74 20 61 6e  action intact an
5bc0: 64 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20  d continue with 
5bd0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
5be0: 20 20 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65 70    ^However, .dep
5bf0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 73 74  ending on the st
5c00: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65 76  atement being ev
5c10: 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20  aluated and the 
5c20: 70 6f 69 6e 74 20 61 74 20 77 68 69 63 68 20 74  point at which t
5c30: 68 65 0a 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  he.error occurs,
5c40: 20 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65 63   it might be nec
5c50: 65 73 73 61 72 79 20 66 6f 72 20 53 51 4c 69 74  essary for SQLit
5c60: 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  e to rollback an
5c70: 64 0a 63 61 6e 63 65 6c 20 74 68 65 20 65 6e 74  d.cancel the ent
5c80: 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
5c90: 20 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f    ^An applicatio
5ca0: 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68 69 63 68  n can tell which
5cb0: 0a 63 6f 75 72 73 65 20 6f 66 20 61 63 74 69 6f  .course of actio
5cc0: 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62 79  n SQLite took by
5cd0: 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69   using the.[sqli
5ce0: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
5cf0: 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65  it()] C-language
5d00: 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a   interface.</p>.
5d10: 0a 3c 70 3e 49 74 20 69 73 20 72 65 63 6f 6d 6d  .<p>It is recomm
5d20: 65 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c 69  ended that appli
5d30: 63 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64 20  cations respond 
5d40: 74 6f 20 74 68 65 20 65 72 72 6f 72 73 0a 6c 69  to the errors.li
5d50: 73 74 65 64 20 61 62 6f 76 65 20 62 79 20 65 78  sted above by ex
5d60: 70 6c 69 63 69 74 6c 79 20 69 73 73 75 69 6e 67  plicitly issuing
5d70: 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d   a ROLLBACK comm
5d80: 61 6e 64 2e 20 20 5e 49 66 20 74 68 65 20 0a 74  and.  ^If the .t
5d90: 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20 61  ransaction has a
5da0: 6c 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c 6c  lready been roll
5db0: 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69  ed back automati
5dc0: 63 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72 72  cally.by the err
5dd0: 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68 65  or response, the
5de0: 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  n the ROLLBACK c
5df0: 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c  ommand will fail
5e00: 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c 20   with an.error, 
5e10: 62 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20 63  but no harm is c
5e20: 61 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c 2f  aused by this.</
5e30: 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76 65  p>..<p>Future ve
5e40: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
5e50: 20 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65 20   may extend the 
5e60: 6c 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20 77  list of errors w
5e70: 68 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73 65  hich.might cause
5e80: 20 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e 73   automatic trans
5e90: 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 2e  action rollback.
5ea0: 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
5eb0: 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68  s of.SQLite migh
5ec0: 74 20 63 68 61 6e 67 65 20 74 68 65 20 65 72 72  t change the err
5ed0: 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49 6e  or response.  In
5ee0: 20 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65 20   particular, we 
5ef0: 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73 69  may.choose to si
5f00: 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65 72  mplify the inter
5f10: 66 61 63 65 20 69 6e 20 66 75 74 75 72 65 20 76  face in future v
5f20: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
5f30: 65 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68 65  e by.causing the
5f40: 20 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74 6f   errors above to
5f50: 20 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e 64   force an uncond
5f60: 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63 6b  itional rollback
5f70: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
5f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5fc0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
5fd0: 74 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54 7d  tion {SAVEPOINT}
5fe0: 20 73 61 76 65 70 6f 69 6e 74 20 7b 53 41 56 45   savepoint {SAVE
5ff0: 50 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a 0a  POINT RELEASE}..
6000: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
6010: 69 61 67 72 61 6d 20 73 61 76 65 70 6f 69 6e 74  iagram savepoint
6020: 2d 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42  -stmt.RecursiveB
6030: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 6c  ubbleDiagram rel
6040: 65 61 73 65 2d 73 74 6d 74 0a 52 65 63 75 72 73  ease-stmt.Recurs
6050: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
6060: 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c   rollback-stmt.<
6070: 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41 56 45  /tcl>..<p> ^SAVE
6080: 50 4f 49 4e 54 73 20 61 72 65 20 61 20 6d 65 74  POINTs are a met
6090: 68 6f 64 20 6f 66 20 63 72 65 61 74 69 6e 67 20  hod of creating 
60a0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 73 69  transactions, si
60b0: 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49 4e 5d  milar to.[BEGIN]
60c0: 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c 20 65   and [COMMIT], e
60d0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 53  xcept that the S
60e0: 41 56 45 50 4f 49 4e 54 20 61 6e 64 20 52 45 4c  AVEPOINT and REL
60f0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a 61 72  EASE commands.ar
6100: 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61 79 20  e named and may 
6110: 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e 0a 0a  be nested.</p>..
6120: 3c 70 3e 20 5e 54 68 65 20 53 41 56 45 50 4f 49  <p> ^The SAVEPOI
6130: 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74  NT command start
6140: 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74  s a new transact
6150: 69 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d 65 2e  ion with a name.
6160: 0a 5e 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f  .^The transactio
6170: 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e 6f 74  n names need not
6180: 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28 41 20   be unique..^(A 
6190: 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20 62 65  SAVEPOINT can be
61a0: 20 73 74 61 72 74 65 64 20 65 69 74 68 65 72 20   started either 
61b0: 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73 69 64  within or outsid
61c0: 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d 2e 2e  e of.a [BEGIN]..
61d0: 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20 5e 28  .[COMMIT].)^  ^(
61e0: 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49 4e 54  When a SAVEPOINT
61f0: 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f   is the outer-mo
6200: 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e 64  st savepoint.and
6210: 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69   it is not withi
6220: 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43  n a [BEGIN]...[C
6230: 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68 65 20  OMMIT] then the 
6240: 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 65 0a  behavior is the.
6250: 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20 44 45  same as BEGIN DE
6260: 46 45 52 52 45 44 20 54 52 41 4e 53 41 43 54 49  FERRED TRANSACTI
6270: 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ON.)^</p>..<p>^T
6280: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
6290: 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74 73 20 74  ommand reverts t
62a0: 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
62b0: 64 61 74 61 62 61 73 65 20 62 61 63 6b 20 74 6f  database back to
62c0: 20 77 68 61 74 0a 69 74 20 77 61 73 20 6a 75 73   what.it was jus
62d0: 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 72 72  t after the corr
62e0: 65 73 70 6f 6e 64 69 6e 67 20 53 41 56 45 50 4f  esponding SAVEPO
62f0: 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68 61 74  INT.  ^Note that
6300: 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70 6c 61   unlike that.pla
6310: 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f  in [ROLLBACK] co
6320: 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75 74 20 74  mmand (without t
6330: 68 65 20 54 4f 20 6b 65 79 77 6f 72 64 29 20 74  he TO keyword) t
6340: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
6350: 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f 74 20  ommand.does not 
6360: 63 61 6e 63 65 6c 20 74 68 65 20 74 72 61 6e 73  cancel the trans
6370: 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74 65 61  action.  ^Instea
6380: 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e 67 20  d of cancelling 
6390: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  the transaction,
63a0: 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  .the ROLLBACK TO
63b0: 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61 72 74   command restart
63c0: 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  s the transactio
63d0: 6e 20 61 67 61 69 6e 20 61 74 20 74 68 65 20 62  n again at the b
63e0: 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c 20 69  eginning..^All i
63f0: 6e 74 65 72 76 65 6e 69 6e 67 20 53 41 56 45 50  ntervening SAVEP
6400: 4f 49 4e 54 73 20 61 72 65 20 63 61 6e 63 65 6c  OINTs are cancel
6410: 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f 70 3e  ed, however.</p>
6420: 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41 53  ..<p>^The RELEAS
6430: 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c 69 6b  E command is lik
6440: 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f 72  e a [COMMIT] for
6450: 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 5e 54   a SAVEPOINT..^T
6460: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
6470: 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20 73 61  nd causes all sa
6480: 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20 74 6f  vepoints back to
6490: 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
64a0: 68 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e 74 20  he .most recent 
64b0: 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61  savepoint with a
64c0: 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 74   matching name t
64d0: 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 66 72 6f  o be removed fro
64e0: 6d 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69  m the .transacti
64f0: 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68 65 20  on stack.  ^The 
6500: 52 45 4c 45 41 53 45 20 6f 66 20 61 6e 20 69 6e  RELEASE of an in
6510: 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ner transaction.
6520: 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20 61  does not cause a
6530: 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 62 65  ny changes to be
6540: 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20   written to the 
6550: 64 61 74 61 62 61 73 65 20 66 69 6c 65 3b 20 69  database file; i
6560: 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76 65 73  t merely.removes
6570: 20 73 61 76 65 70 6f 69 6e 74 73 20 66 72 6f 6d   savepoints from
6580: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6590: 20 73 74 61 63 6b 20 73 75 63 68 20 74 68 61 74   stack such that
65a0: 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67 65 72   it is.no longer
65b0: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 52 4f 4c   possible to ROL
65c0: 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73 65 20 73  LBACK TO those s
65d0: 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66 20 61  avepoints..^If a
65e0: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
65f0: 20 72 65 6c 65 61 73 65 73 20 74 68 65 20 6f 75   releases the ou
6600: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
6610: 74 2c 20 73 6f 0a 74 68 61 74 20 74 68 65 20 74  t, so.that the t
6620: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
6630: 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79 2c 20   becomes empty, 
6640: 74 68 65 6e 20 52 45 4c 45 41 53 45 20 69 73 20  then RELEASE is 
6650: 74 68 65 20 73 61 6d 65 0a 61 73 20 5b 43 4f 4d  the same.as [COM
6660: 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f 4d 4d  MIT]..^The [COMM
6670: 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20  IT] command may 
6680: 62 65 20 75 73 65 64 20 74 6f 20 72 65 6c 65 61  be used to relea
6690: 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74  se all savepoint
66a0: 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68 65  s and.commit the
66b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76 65   transaction eve
66c0: 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73 61 63  n if the transac
66d0: 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e 61  tion was origina
66e0: 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20 61  lly started.by a
66f0: 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61   SAVEPOINT comma
6700: 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20  nd instead of a 
6710: 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 2e  [BEGIN] command.
6720: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  </p>..<p>^If the
6730: 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20   savepoint-name 
6740: 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  in a RELEASE com
6750: 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61  mand does not ma
6760: 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f 69 6e  tch any.savepoin
6770: 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74  t currently in t
6780: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
6790: 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20 73 61  tack, then no sa
67a0: 76 65 70 6f 69 6e 74 73 20 61 72 65 0a 72 65 6c  vepoints are.rel
67b0: 65 61 73 65 64 2c 20 74 68 65 20 64 61 74 61 62  eased, the datab
67c0: 61 73 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64  ase is unchanged
67d0: 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53  , and the RELEAS
67e0: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e  E command return
67f0: 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a  s.an error.</p>.
6800: 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 61  .<p>^Note that a
6810: 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74  n inner transact
6820: 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d 69 74  ion might commit
6830: 20 28 75 73 69 6e 67 20 74 68 65 20 52 45 4c 45   (using the RELE
6840: 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62 75 74  ASE command).but
6850: 20 74 68 65 6e 20 6c 61 74 65 72 20 68 61 76 65   then later have
6860: 20 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f 6e 65   its work undone
6870: 20 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b 20 69   by a ROLLBACK i
6880: 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73  n an outer trans
6890: 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77 65 72  action..^A power
68a0: 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72 6f 67   failure or prog
68b0: 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f 53 20  ram crash or OS 
68c0: 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75 73 65  crash will cause
68d0: 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 0a   the outer-most.
68e0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 72  transaction to r
68f0: 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69 6e 67  ollback, undoing
6900: 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61   all changes tha
6910: 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
6920: 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75 74 65  within.that oute
6930: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 65  r transaction, e
6940: 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68 61 74  ven changes that
6950: 20 68 61 76 65 20 73 75 70 70 6f 73 65 64 6c 79   have supposedly
6960: 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74 65 64   been "committed
6970: 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41 53 45  ".by the RELEASE
6980: 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f 6e 74   command.  ^Cont
6990: 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74 75 61  ent is not actua
69a0: 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e  lly committed on
69b0: 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74 69 6c   the disk .until
69c0: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 74   the outermost t
69d0: 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69  ransaction commi
69e0: 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72  ts.</p>..<p>Ther
69f0: 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 77 61  e are several wa
6a00: 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67 20 61  ys of thinking a
6a10: 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41 53 45  bout the RELEASE
6a20: 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c   command:</p>..<
6a30: 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d 65  ul>.<li><p>.Some
6a40: 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52 45 4c   people view REL
6a50: 45 41 53 45 20 61 73 20 74 68 65 20 65 71 75 69  EASE as the equi
6a60: 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d 49 54  valent of COMMIT
6a70: 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54   for a SAVEPOINT
6a80: 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61 63 63  ..This is an acc
6a90: 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20 6f 66  eptable point of
6aa0: 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20 61 73   view as long as
6ab0: 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73 20 74   one remembers t
6ac0: 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65 73 20  hat the.changes 
6ad0: 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61 6e 20  committed by an 
6ae0: 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f  inner transactio
6af0: 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20 62 65  n might later be
6b00: 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72 6f 6c   undone by a.rol
6b10: 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75 74 65  lback in an oute
6b20: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f  r transaction.</
6b30: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
6b40: 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20 6f 66  .Another view of
6b50: 20 52 45 4c 45 41 53 45 20 69 73 20 74 68 61 74   RELEASE is that
6b60: 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e 61 6d   it merges a nam
6b70: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ed transaction i
6b80: 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74 20 74  nto its.parent t
6b90: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f 20 74  ransaction, so t
6ba0: 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 74 72  hat the named tr
6bb0: 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69 74  ansaction and it
6bc0: 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d 65 0a  s parent become.
6bd0: 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63  the same transac
6be0: 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52 45 4c  tion.  After REL
6bf0: 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65 64 20  EASE, the named 
6c00: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
6c10: 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c 6c 20  its parent.will 
6c20: 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62 61  commit or rollba
6c30: 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77 68 61  ck together, wha
6c40: 74 65 76 65 72 20 74 68 65 69 72 20 66 61 74 65  tever their fate
6c50: 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c   may be..</p></l
6c60: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65 20  i>..<li><p>.One 
6c70: 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b 20 6f  can also think o
6c80: 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61 73 0a  f savepoints as.
6c90: 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65 20 74  "marks" in the t
6ca0: 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d 65 6c  ransaction timel
6cb0: 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20 76 69  ine.  In this vi
6cc0: 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f 49 4e  ew, the SAVEPOIN
6cd0: 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61 74 65  T command.create
6ce0: 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20 74 68  s a new mark, th
6cf0: 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f  e ROLLBACK TO co
6d00: 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20 74 68  mmand rewinds th
6d10: 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63 6b 0a  e timeline back.
6d20: 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73 74 20  to a point just 
6d30: 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65 64 20  after the named 
6d40: 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20 52 45  mark, and the RE
6d50: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a 65 72  LEASE command.er
6d60: 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f 6d 20  ases marks from 
6d70: 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77 69 74  the timeline wit
6d80: 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20 6d 61  hout actually ma
6d90: 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67 65 73  king any.changes
6da0: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
6db0: 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c  ..</p></li>.</ul
6dc0: 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73 61 63  >....<h3>Transac
6dd0: 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52 75 6c  tion Nesting Rul
6de0: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  es</h3>..<p>^The
6df0: 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74 69 6f   last transactio
6e00: 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c 20 62  n started will b
6e10: 65 20 74 68 65 20 66 69 72 73 74 0a 74 72 61 6e  e the first.tran
6e20: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74 65  saction committe
6e30: 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b  d or rolled back
6e40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  .</p>..<p>^The [
6e50: 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 6f  BEGIN] command o
6e60: 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 74 68 65  nly works if the
6e70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
6e80: 63 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f 72 0a  ck is empty, or.
6e90: 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 20 69  in other words i
6ea0: 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 70  f there are no p
6eb0: 65 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69  ending transacti
6ec0: 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65 20 74 72  ons.  ^If the tr
6ed0: 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63 6b 20  ansaction.stack 
6ee0: 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 77 68 65  is not empty whe
6ef0: 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f  n the [BEGIN] co
6f00: 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64  mmand is invoked
6f10: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d 61  , then the comma
6f20: 6e 64 0a 66 61 69 6c 73 20 77 69 74 68 20 61 6e  nd.fails with an
6f30: 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e   error.</p>..<p>
6f40: 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f  ^The [COMMIT] co
6f50: 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20 61 6c  mmand commits al
6f60: 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 74 72  l outstanding tr
6f70: 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 20 6c  ansactions and l
6f80: 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e 73 61  eaves.the transa
6f90: 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74  ction stack empt
6fa0: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  y.</p>..<p>^The 
6fb0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
6fc0: 73 74 61 72 74 73 20 77 69 74 68 20 74 68 65 20  starts with the 
6fd0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64 64 69  most recent addi
6fe0: 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72 61 6e  tion to the.tran
6ff0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 61 6e  saction stack an
7000: 64 20 72 65 6c 65 61 73 65 73 20 73 61 76 65 70  d releases savep
7010: 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64 73 20  oints backwards 
7020: 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c 20 69  .in time until i
7030: 74 20 72 65 6c 65 61 73 65 73 20 61 20 73 61 76  t releases a sav
7040: 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61  epoint with a ma
7050: 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  tching savepoint
7060: 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20 73 61  -name..^Prior sa
7070: 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20 73  vepoints, even s
7080: 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20 6d  avepoints with m
7090: 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e  atching savepoin
70a0: 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e 63  t-names, are.unc
70b0: 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68 65 20  hanged..^If the 
70c0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
70d0: 63 61 75 73 65 73 20 74 68 65 0a 74 72 61 6e 73  causes the.trans
70e0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 74 6f 20  action stack to 
70f0: 62 65 63 6f 6d 65 20 65 6d 70 74 79 20 28 69 66  become empty (if
7100: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
7110: 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68  mand releases th
7120: 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e  e.outermost tran
7130: 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  saction from the
7140: 20 73 74 61 63 6b 29 20 74 68 65 6e 20 74 68 65   stack) then the
7150: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
7160: 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  mits.</p>..<p>^T
7170: 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f  he [ROLLBACK] co
7180: 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 61 20  mmand without a 
7190: 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20  TO clause rolls 
71a0: 62 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e 73 61  backs all transa
71b0: 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61 76 65  ctions.and leave
71c0: 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  s the transactio
71d0: 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f  n stack empty.</
71e0: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c  p>..<p>^The ROLL
71f0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74  BACK command wit
7200: 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f  h a TO clause ro
7210: 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73 61 63  lls back transac
7220: 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61 63 6b  tions going.back
7230: 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20 62 61  wards in time ba
7240: 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74 20 72  ck to the most r
7250: 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e 54 20  ecent SAVEPOINT 
7260: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
7270: 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56 45 50  name..^The SAVEP
7280: 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20 6d 61  OINT with the ma
7290: 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65 6d 61  tching name rema
72a0: 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61 6e 73  ins on the trans
72b0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a 62 75  action stack,.bu
72c0: 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63  t all database c
72d0: 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63 63 75  hanges that occu
72e0: 72 72 65 64 20 61 66 74 65 72 20 74 68 61 74 20  rred after that 
72f0: 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20 63 72  SAVEPOINT was cr
7300: 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c 65 64  eated.are rolled
7310: 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20   back.  ^If the 
7320: 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69  savepoint-name i
7330: 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  n a ROLLBACK TO 
7340: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74  command does not
7350: 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56 45 50  .match any SAVEP
7360: 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74 61 63  OINT on the stac
7370: 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  k, then the ROLL
7380: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66 61 69  BACK command fai
7390: 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72  ls with an.error
73a0: 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20   and leaves the 
73b0: 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61 74  state of the dat
73c0: 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65 64 2e  abase unchanged.
73d0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
73e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7420: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
7430: 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d  ion comment comm
7440: 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a 63 6f  ent {comment *co
7450: 6d 6d 65 6e 74 73 7d 0a 0a 52 65 63 75 72 73 69  mments}..Recursi
7460: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
7470: 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74 61 78 0a 3c  comment-syntax.<
7480: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65  /tcl>..<p>^Comme
7490: 6e 74 73 20 61 72 65 20 6e 6f 74 20 53 51 4c 20  nts are not SQL 
74a0: 63 6f 6d 6d 61 6e 64 73 2c 20 62 75 74 20 63 61  commands, but ca
74b0: 6e 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74  n occur within t
74c0: 68 65 20 74 65 78 74 20 6f 66 0a 53 51 4c 20 71  he text of.SQL q
74d0: 75 65 72 69 65 73 20 70 61 73 73 65 64 20 74 6f  ueries passed to
74e0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
74f0: 65 5f 76 32 28 29 5d 20 61 6e 64 20 72 65 6c 61  e_v2()] and rela
7500: 74 65 64 20 69 6e 74 65 72 66 61 63 65 73 2e 0a  ted interfaces..
7510: 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 74 72  ^Comments are tr
7520: 65 61 74 65 64 20 61 73 20 77 68 69 74 65 73 70  eated as whitesp
7530: 61 63 65 20 62 79 20 74 68 65 20 70 61 72 73 65  ace by the parse
7540: 72 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e  r..^Comments can
7550: 20 62 65 67 69 6e 20 61 6e 79 77 68 65 72 65 20   begin anywhere 
7560: 77 68 69 74 65 73 70 61 63 65 20 0a 63 61 6e 20  whitespace .can 
7570: 62 65 20 66 6f 75 6e 64 2c 20 69 6e 63 6c 75 64  be found, includ
7580: 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72 65  ing inside expre
7590: 73 73 69 6f 6e 73 20 74 68 61 74 20 73 70 61 6e  ssions that span
75a0: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
75b0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 20 63  .</p>..<p>^SQL c
75c0: 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 20 77 69  omments begin wi
75d0: 74 68 20 74 77 6f 20 63 6f 6e 73 65 63 75 74 69  th two consecuti
75e0: 76 65 20 22 2d 22 20 63 68 61 72 61 63 74 65 72  ve "-" character
75f0: 73 20 28 41 53 43 49 49 20 30 78 32 64 29 0a 61  s (ASCII 0x2d).a
7600: 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74 6f 20  nd extend up to 
7610: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
7620: 65 20 6e 65 78 74 20 6e 65 77 6c 69 6e 65 20 63  e next newline c
7630: 68 61 72 61 63 74 65 72 20 28 41 53 43 49 49 20  haracter (ASCII 
7640: 30 78 30 61 29 0a 6f 72 20 75 6e 74 69 6c 20 74  0x0a).or until t
7650: 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c  he end of input,
7660: 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73   whichever comes
7670: 20 66 69 72 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e   first.</p>..<p>
7680: 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74  ^C-style comment
7690: 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22 2f 2a  s begin.with "/*
76a0: 22 20 61 6e 64 20 65 78 74 65 6e 64 20 75 70 20  " and extend up 
76b0: 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
76c0: 20 74 68 65 20 6e 65 78 74 20 22 2a 2f 22 20 63   the next "*/" c
76d0: 68 61 72 61 63 74 65 72 20 70 61 69 72 0a 6f 72  haracter pair.or
76e0: 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 6f   until the end o
76f0: 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65 76  f input, whichev
7700: 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e 20  er comes first. 
7710: 20 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e   ^C-style commen
7720: 74 73 0a 63 61 6e 20 73 70 61 6e 20 6d 75 6c 74  ts.can span mult
7730: 69 70 6c 65 20 6c 69 6e 65 73 2e 20 3c 2f 70 3e  iple lines. </p>
7740: 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 63  ..<p>^Comments c
7750: 61 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68 65  an appear anywhe
7760: 72 65 20 77 68 69 74 65 73 70 61 63 65 20 63 61  re whitespace ca
7770: 6e 20 6f 63 63 75 72 2c 0a 69 6e 63 6c 75 64 69  n occur,.includi
7780: 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72 65 73  ng inside expres
7790: 73 69 6f 6e 73 20 61 6e 64 20 69 6e 20 74 68 65  sions and in the
77a0: 20 6d 69 64 64 6c 65 20 6f 66 20 6f 74 68 65 72   middle of other
77b0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
77c0: 0a 5e 43 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e 6f  .^Comments do no
77d0: 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e 0a 0a 0a 3c  t nest..</p>...<
77e0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
77f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7830: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
7840: 41 54 45 20 49 4e 44 45 58 7d 20 63 72 65 61 74  ATE INDEX} creat
7850: 65 69 6e 64 65 78 20 7b 7b 43 52 45 41 54 45 20  eindex {{CREATE 
7860: 49 4e 44 45 58 7d 7d 0a 0a 52 65 63 75 72 73 69  INDEX}}..Recursi
7870: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
7880: 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74 6d  create-index-stm
7890: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
78a0: 65 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63  e CREATE INDEX c
78b0: 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20  ommand consists 
78c0: 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20  of the keywords 
78d0: 22 43 52 45 41 54 45 20 49 4e 44 45 58 22 20 66  "CREATE INDEX" f
78e0: 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e  ollowed.by the n
78f0: 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69  ame of the new i
7900: 6e 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72  ndex, the keywor
7910: 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65  d "ON", the name
7920: 20 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79   of a previously
7930: 0a 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 74  .created table t
7940: 68 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64  hat is to be ind
7950: 65 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65  exed, and a pare
7960: 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f  nthesized list o
7970: 66 20 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d  f names of.colum
7980: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ns in the table 
7990: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 66 6f  that are used fo
79a0: 72 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  r the index key.
79b0: 0a 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  .If the optional
79c0: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
79d0: 20 69 6e 63 6c 75 64 65 64 2c 20 74 68 65 6e 20   included, then 
79e0: 74 68 65 20 69 6e 64 65 78 20 69 73 20 61 20 22  the index is a "
79f0: 5b 70 61 72 74 69 61 6c 20 69 6e 64 65 78 5d 22  [partial index]"
7a00: 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ..</p>..<tcl>hd_
7a10: 66 72 61 67 6d 65 6e 74 20 7b 64 65 73 63 69 64  fragment {descid
7a20: 78 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20 69  x} {descending i
7a30: 6e 64 69 63 65 73 7d 20 7b 64 65 73 63 65 6e 64  ndices} {descend
7a40: 69 6e 67 20 69 6e 64 65 78 7d 20 7b 64 65 73 63  ing index} {desc
7a50: 65 6e 64 69 6e 67 20 69 6e 64 65 78 65 73 7d 3c  ending indexes}<
7a60: 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63 68 20 63  /tcl>.<p>^Each c
7a70: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62  olumn name can b
7a80: 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e  e followed by on
7a90: 65 20 6f 66 20 74 68 65 20 22 41 53 43 22 20 6f  e of the "ASC" o
7aa0: 72 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72 64  r "DESC" keyword
7ab0: 73 0a 74 6f 20 69 6e 64 69 63 61 74 65 20 73 6f  s.to indicate so
7ac0: 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20  rt order.  ^The 
7ad0: 73 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20 6f  sort order may o
7ae0: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67 6e  r may not be ign
7af0: 6f 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f  ored depending.o
7b00: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
7b10: 69 6c 65 20 66 6f 72 6d 61 74 2c 20 61 6e 64 20  ile format, and 
7b20: 69 6e 20 70 61 72 74 69 63 75 6c 61 72 20 74 68  in particular th
7b30: 65 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  e [schema format
7b40: 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68 65 20 22   number]..^The "
7b50: 6c 65 67 61 63 79 22 20 73 63 68 65 6d 61 20 66  legacy" schema f
7b60: 6f 72 6d 61 74 20 28 31 29 20 69 67 6e 6f 72 65  ormat (1) ignore
7b70: 73 20 69 6e 64 65 78 0a 73 6f 72 74 20 6f 72 64  s index.sort ord
7b80: 65 72 2e 20 20 5e 54 68 65 20 64 65 73 63 65 6e  er.  ^The descen
7b90: 64 69 6e 67 20 69 6e 64 65 78 20 73 63 68 65 6d  ding index schem
7ba0: 61 20 66 6f 72 6d 61 74 20 28 34 29 20 74 61 6b  a format (4) tak
7bb0: 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20 6f 72  es index sort or
7bc0: 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74  der.into account
7bd0: 2e 20 20 4f 6e 6c 79 20 76 65 72 73 69 6f 6e 73  .  Only versions
7be0: 20 6f 66 20 53 51 4c 69 74 65 20 33 2e 33 2e 30   of SQLite 3.3.0
7bf0: 20 61 6e 64 20 6c 61 74 65 72 20 61 72 65 20 61   and later are a
7c00: 62 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61 6e  ble to understan
7c10: 64 0a 74 68 65 20 64 65 73 63 65 6e 64 69 6e 67  d.the descending
7c20: 20 69 6e 64 65 78 20 66 6f 72 6d 61 74 2e 20 46   index format. F
7c30: 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
7c40: 2c 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  , version of SQL
7c50: 69 74 65 20 62 65 74 77 65 65 6e 20 33 2e 33 2e  ite between 3.3.
7c60: 30 0a 61 6e 64 20 33 2e 37 2e 39 20 75 73 65 20  0.and 3.7.9 use 
7c70: 74 68 65 20 6c 65 67 61 63 79 20 73 63 68 65 6d  the legacy schem
7c80: 61 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61  a format by defa
7c90: 75 6c 74 2e 20 20 54 68 65 20 6e 65 77 65 72 20  ult.  The newer 
7ca0: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73  schema format is
7cb0: 0a 75 73 65 64 20 62 79 20 64 65 66 61 75 6c 74  .used by default
7cc0: 20 69 6e 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e   in version 3.7.
7cd0: 31 30 20 61 6e 64 20 6c 61 74 65 72 2e 0a 5e 54  10 and later..^T
7ce0: 68 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f  he [legacy_file_
7cf0: 66 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63  format pragma] c
7d00: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 68  an be used to ch
7d10: 61 6e 67 65 20 73 65 74 20 74 68 65 20 73 70 65  ange set the spe
7d20: 63 69 66 69 63 0a 62 65 68 61 76 69 6f 72 20 66  cific.behavior f
7d30: 6f 72 20 61 6e 79 20 76 65 72 73 69 6f 6e 20 6f  or any version o
7d40: 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c  f SQLite.</p>..<
7d50: 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63  p>^The COLLATE c
7d60: 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  lause optionally
7d70: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20   following each 
7d80: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65 66 69  column name defi
7d90: 6e 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20  nes a.collating 
7da0: 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f  sequence used fo
7db0: 72 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 69  r text entries i
7dc0: 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e  n that column..^
7dd0: 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  The default coll
7de0: 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69  ating.sequence i
7df0: 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  s the collating 
7e00: 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64  sequence defined
7e10: 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e   for that column
7e20: 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20   in the.[CREATE 
7e30: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
7e40: 2e 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c  .  ^Or if no col
7e50: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
7e60: 69 73 20 6f 74 68 65 72 77 69 73 65 20 64 65 66  is otherwise def
7e70: 69 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d  ined,.the built-
7e80: 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74  in BINARY collat
7e90: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
7ea0: 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  used.</p>..<p>Th
7eb0: 65 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74  ere are no arbit
7ec0: 72 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74  rary limits on t
7ed0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64  he number of ind
7ee0: 69 63 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  ices that can be
7ef0: 0a 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 73  .attached to a s
7f00: 69 6e 67 6c 65 20 74 61 62 6c 65 2e 20 20 5e 28  ingle table.  ^(
7f10: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
7f20: 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65  lumns in an inde
7f30: 78 20 69 73 20 0a 6c 69 6d 69 74 65 64 20 74 6f  x is .limited to
7f40: 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 20 62   the value set b
7f50: 79 0a 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  y.[sqlite3_limit
7f60: 5d 28 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  ]([SQLITE_LIMIT_
7f70: 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c  COLUMN],...).)^<
7f80: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
7f90: 67 6d 65 6e 74 20 75 6e 69 71 75 65 69 64 78 20  gment uniqueidx 
7fa0: 7b 75 6e 69 71 75 65 20 69 6e 64 65 78 7d 3c 2f  {unique index}</
7fb0: 74 63 6c 3e 0a 3c 70 3e 5e 49 66 20 74 68 65 20  tcl>.<p>^If the 
7fc0: 55 4e 49 51 55 45 20 6b 65 79 77 6f 72 64 20 61  UNIQUE keyword a
7fd0: 70 70 65 61 72 73 20 62 65 74 77 65 65 6e 20 43  ppears between C
7fe0: 52 45 41 54 45 20 61 6e 64 20 49 4e 44 45 58 20  REATE and INDEX 
7ff0: 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65 0a 69  then duplicate.i
8000: 6e 64 65 78 20 65 6e 74 72 69 65 73 20 61 72 65  ndex entries are
8010: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e 20 20 5e   not allowed.  ^
8020: 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 69  Any attempt to i
8030: 6e 73 65 72 74 20 61 20 64 75 70 6c 69 63 61 74  nsert a duplicat
8040: 65 20 65 6e 74 72 79 0a 77 69 6c 6c 20 72 65 73  e entry.will res
8050: 75 6c 74 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e  ult in an error.
8060: 20 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f    ^For the purpo
8070: 73 65 73 20 6f 66 20 75 6e 69 71 75 65 20 69 6e  ses of unique in
8080: 64 69 63 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20  dices, all NULL 
8090: 76 61 6c 75 65 73 0a 61 72 65 20 63 6f 6e 73 69  values.are consi
80a0: 64 65 72 65 64 20 74 6f 20 64 69 66 66 65 72 65  dered to differe
80b0: 6e 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65  nt from all othe
80c0: 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e  r NULL values an
80d0: 64 20 61 72 65 20 74 68 75 73 20 75 6e 69 71 75  d are thus uniqu
80e0: 65 2e 0a 54 68 69 73 20 69 73 20 6f 6e 65 20 6f  e..This is one o
80f0: 66 20 74 68 65 20 74 77 6f 20 70 6f 73 73 69 62  f the two possib
8100: 6c 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  le interpretatio
8110: 6e 73 20 6f 66 20 74 68 65 20 53 51 4c 2d 39 32  ns of the SQL-92
8120: 20 73 74 61 6e 64 61 72 64 0a 28 74 68 65 20 6c   standard.(the l
8130: 61 6e 67 75 61 67 65 20 69 6e 20 74 68 65 20 73  anguage in the s
8140: 74 61 6e 64 61 72 64 20 69 73 20 61 6d 62 69 67  tandard is ambig
8150: 75 6f 75 73 29 20 61 6e 64 20 69 73 20 74 68 65  uous) and is the
8160: 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 0a   interpretation.
8170: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 50 6f 73 74  followed by Post
8180: 67 72 65 53 51 4c 2c 20 4d 79 53 51 4c 2c 20 46  greSQL, MySQL, F
8190: 69 72 65 62 69 72 64 2c 20 61 6e 64 20 4f 72 61  irebird, and Ora
81a0: 63 6c 65 2e 20 20 49 6e 66 6f 72 6d 69 78 20 61  cle.  Informix a
81b0: 6e 64 0a 4d 69 63 72 6f 73 6f 66 74 20 53 51 4c  nd.Microsoft SQL
81c0: 20 53 65 72 76 65 72 20 66 6f 6c 6c 6f 77 20 74   Server follow t
81d0: 68 65 20 6f 74 68 65 72 20 69 6e 74 65 72 70 72  he other interpr
81e0: 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  etation of the s
81f0: 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70  tandard.</p>..<p
8200: 3e 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61  >^If the optiona
8210: 6c 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  l IF NOT EXISTS 
8220: 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
8230: 74 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e  t and another in
8240: 64 65 78 0a 77 69 74 68 20 74 68 65 20 73 61 6d  dex.with the sam
8250: 65 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65  e name already e
8260: 78 69 73 74 73 2c 20 74 68 65 6e 20 74 68 69 73  xists, then this
8270: 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73   command becomes
8280: 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c   a no-op.</p>..<
8290: 70 3e 5e 49 6e 64 65 78 65 73 20 61 72 65 20 72  p>^Indexes are r
82a0: 65 6d 6f 76 65 64 20 77 69 74 68 20 74 68 65 20  emoved with the 
82b0: 5b 44 52 4f 50 20 49 4e 44 45 58 5d 20 63 6f 6d  [DROP INDEX] com
82c0: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  mand.</p>...<tcl
82d0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
82e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8320: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
8330: 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 74   TABLE} {createt
8340: 61 62 6c 65 7d 20 7b 7b 43 52 45 41 54 45 20 54  able} {{CREATE T
8350: 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76  ABLE}}..Recursiv
8360: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
8370: 72 65 61 74 65 2d 74 61 62 6c 65 2d 73 74 6d 74  reate-table-stmt
8380: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
8390: 22 43 52 45 41 54 45 20 54 41 42 4c 45 22 20 63  "CREATE TABLE" c
83a0: 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
83b0: 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74  o create a new t
83c0: 61 62 6c 65 20 69 6e 20 61 6e 20 53 51 4c 69 74  able in an SQLit
83d0: 65 20 0a 64 61 74 61 62 61 73 65 2e 20 41 20 43  e .database. A C
83e0: 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d  REATE TABLE comm
83f0: 61 6e 64 20 73 70 65 63 69 66 69 65 73 20 74 68  and specifies th
8400: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 74 74 72  e following attr
8410: 69 62 75 74 65 73 20 6f 66 20 74 68 65 0a 6e 65  ibutes of the.ne
8420: 77 20 74 61 62 6c 65 3a 0a 0a 3c 75 6c 3e 0a 20  w table:..<ul>. 
8430: 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 6e 61 6d 65   <li><p>The name
8440: 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
8450: 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68  e...  <li><p> Th
8460: 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 77 68  e database in wh
8470: 69 63 68 20 74 68 65 20 6e 65 77 20 74 61 62 6c  ich the new tabl
8480: 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 54 61  e is created. Ta
8490: 62 6c 65 73 20 6d 61 79 20 62 65 20 0a 20 20 20  bles may be .   
84a0: 20 20 20 63 72 65 61 74 65 64 20 69 6e 20 74 68     created in th
84b0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
84c0: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
84d0: 73 65 2c 20 6f 72 20 69 6e 20 61 6e 79 20 61 74  se, or in any at
84e0: 74 61 63 68 65 64 0a 20 20 20 20 20 20 64 61 74  tached.      dat
84f0: 61 62 61 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  abase...  <li><p
8500: 3e 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 65 61  > The name of ea
8510: 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
8520: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
8530: 70 3e 20 54 68 65 20 64 65 63 6c 61 72 65 64 20  p> The declared 
8540: 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  type of each col
8550: 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
8560: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64  ...  <li><p> A d
8570: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20  efault value or 
8580: 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 65  expression for e
8590: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
85a0: 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  e table...  <li>
85b0: 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20 63 6f  <p> A default co
85c0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
85d0: 20 74 6f 20 75 73 65 20 77 69 74 68 20 65 61 63   to use with eac
85e0: 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20 20 3c 6c 69  h column...  <li
85f0: 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c  ><p> Optionally,
8600: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66   a PRIMARY KEY f
8610: 6f 72 20 74 68 65 20 74 61 62 6c 65 2e 20 42 6f  or the table. Bo
8620: 74 68 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e  th single column
8630: 20 61 6e 64 0a 20 20 20 20 20 20 20 63 6f 6d 70   and.       comp
8640: 6f 73 69 74 65 20 28 6d 75 6c 74 69 70 6c 65 20  osite (multiple 
8650: 63 6f 6c 75 6d 6e 29 20 70 72 69 6d 61 72 79 20  column) primary 
8660: 6b 65 79 73 20 61 72 65 20 73 75 70 70 6f 72 74  keys are support
8670: 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41  ed...  <li><p> A
8680: 20 73 65 74 20 6f 66 20 53 51 4c 20 63 6f 6e 73   set of SQL cons
8690: 74 72 61 69 6e 74 73 20 66 6f 72 20 65 61 63 68  traints for each
86a0: 20 74 61 62 6c 65 2e 20 53 51 4c 69 74 65 20 73   table. SQLite s
86b0: 75 70 70 6f 72 74 73 20 55 4e 49 51 55 45 2c 20  upports UNIQUE, 
86c0: 4e 4f 54 0a 20 20 20 20 20 20 20 4e 55 4c 4c 2c  NOT.       NULL,
86d0: 20 43 48 45 43 4b 20 61 6e 64 20 46 4f 52 45 49   CHECK and FOREI
86e0: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
86f0: 74 73 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 57  ts...  <li><p> W
8700: 68 65 74 68 65 72 20 74 68 65 20 74 61 62 6c 65  hether the table
8710: 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52   is a [WITHOUT R
8720: 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a 3c 2f 75  OWID] table..</u
8730: 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 43 52 45  l>..<p>Every CRE
8740: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
8750: 65 6e 74 20 6d 75 73 74 20 73 70 65 63 69 66 79  ent must specify
8760: 20 61 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20   a name for the 
8770: 6e 65 77 20 74 61 62 6c 65 2e 0a 20 20 5e 28 54  new table..  ^(T
8780: 61 62 6c 65 20 6e 61 6d 65 73 20 74 68 61 74 20  able names that 
8790: 62 65 67 69 6e 20 77 69 74 68 20 22 73 71 6c 69  begin with "sqli
87a0: 74 65 5f 22 20 61 72 65 20 72 65 73 65 72 76 65  te_" are reserve
87b0: 64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75  d for internal u
87c0: 73 65 2e 20 49 74 0a 20 20 69 73 20 61 6e 20 65  se. It.  is an e
87d0: 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20  rror to attempt 
87e0: 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c  to create a tabl
87f0: 65 20 77 69 74 68 20 61 20 6e 61 6d 65 20 74 68  e with a name th
8800: 61 74 20 73 74 61 72 74 73 20 77 69 74 68 0a 20  at starts with. 
8810: 20 22 73 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a 3c   "sqlite_".)^..<
8820: 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74  p> ^If a &lt;dat
8830: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
8840: 73 20 73 70 65 63 69 66 69 65 64 2c 20 69 74 20  s specified, it 
8850: 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 22  must be either "
8860: 6d 61 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22  main", .  "temp"
8870: 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66  , or the name of
8880: 20 61 6e 20 5b 41 54 54 41 43 48 20 44 41 54 41   an [ATTACH DATA
8890: 42 41 53 45 7c 61 74 74 61 63 68 65 64 20 64 61  BASE|attached da
88a0: 74 61 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69  tabase]. ^In thi
88b0: 73 20 63 61 73 65 0a 20 20 74 68 65 20 6e 65 77  s case.  the new
88c0: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
88d0: 64 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 64  d in the named d
88e0: 61 74 61 62 61 73 65 2e 20 5e 49 66 20 74 68 65  atabase. ^If the
88f0: 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50   "TEMP" or "TEMP
8900: 4f 52 41 52 59 22 0a 20 20 6b 65 79 77 6f 72 64  ORARY".  keyword
8910: 20 6f 63 63 75 72 73 20 62 65 74 77 65 65 6e 20   occurs between 
8920: 74 68 65 20 22 43 52 45 41 54 45 22 20 61 6e 64  the "CREATE" and
8930: 20 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68   "TABLE" then th
8940: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 0a 20  e new table is. 
8950: 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20   created in the 
8960: 74 65 6d 70 20 64 61 74 61 62 61 73 65 2e 20 5e  temp database. ^
8970: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
8980: 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61  o specify both a
8990: 20 0a 20 20 26 6c 74 3b 64 61 74 61 62 61 73 65   .  &lt;database
89a0: 2d 6e 61 6d 65 26 67 74 3b 20 61 6e 64 20 74 68  -name&gt; and th
89b0: 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52  e TEMP or TEMPOR
89c0: 41 52 59 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c  ARY keyword, unl
89d0: 65 73 73 20 74 68 65 0a 20 20 26 6c 74 3b 64 61  ess the.  &lt;da
89e0: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
89f0: 69 73 20 22 74 65 6d 70 22 2e 20 5e 49 66 20 6e  is "temp". ^If n
8a00: 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  o database name 
8a10: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 64  is specified and
8a20: 20 74 68 65 0a 20 20 54 45 4d 50 20 6b 65 79 77   the.  TEMP keyw
8a30: 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ord is not prese
8a40: 6e 74 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  nt then the tabl
8a50: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
8a60: 74 68 65 20 6d 61 69 6e 0a 20 20 64 61 74 61 62  the main.  datab
8a70: 61 73 65 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20  ase...<p>.  ^It 
8a80: 69 73 20 75 73 75 61 6c 6c 79 20 61 6e 20 65 72  is usually an er
8a90: 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74  ror to attempt t
8aa0: 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74  o create a new t
8ab0: 61 62 6c 65 20 69 6e 20 61 20 64 61 74 61 62 61  able in a databa
8ac0: 73 65 20 74 68 61 74 0a 20 20 61 6c 72 65 61 64  se that.  alread
8ad0: 79 20 63 6f 6e 74 61 69 6e 73 20 61 20 74 61 62  y contains a tab
8ae0: 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20 76 69 65  le, index or vie
8af0: 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  w of the same na
8b00: 6d 65 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  me. ^However, if
8b10: 20 74 68 65 0a 20 20 22 49 46 20 4e 4f 54 20 45   the.  "IF NOT E
8b20: 58 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73  XISTS" clause is
8b30: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
8b40: 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54 45  rt of the CREATE
8b50: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
8b60: 20 61 6e 64 0a 20 20 61 20 74 61 62 6c 65 20 6f   and.  a table o
8b70: 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  r view of the sa
8b80: 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20  me name already 
8b90: 65 78 69 73 74 73 2c 20 74 68 65 20 43 52 45 41  exists, the CREA
8ba0: 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  TE TABLE command
8bb0: 0a 20 20 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f  .  simply has no
8bc0: 20 65 66 66 65 63 74 20 28 61 6e 64 20 6e 6f 20   effect (and no 
8bd0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73  error message is
8be0: 20 72 65 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20   returned). ^An 
8bf0: 65 72 72 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20  error is still. 
8c00: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
8c10: 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65   table cannot be
8c20: 20 63 72 65 61 74 65 64 20 62 65 63 61 75 73 65   created because
8c30: 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   of an existing 
8c40: 69 6e 64 65 78 2c 20 65 76 65 6e 20 0a 20 20 69  index, even .  i
8c50: 66 20 74 68 65 20 22 49 46 20 4e 4f 54 20 45 58  f the "IF NOT EX
8c60: 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20  ISTS" clause is 
8c70: 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e  specified...<p>^
8c80: 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72  It is not an err
8c90: 6f 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 74  or to create a t
8ca0: 61 62 6c 65 20 74 68 61 74 20 68 61 73 20 74 68  able that has th
8cb0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
8cc0: 6e 20 0a 20 20 65 78 69 73 74 69 6e 67 20 5b 43  n .  existing [C
8cd0: 52 45 41 54 45 20 54 52 49 47 47 45 52 7c 74 72  REATE TRIGGER|tr
8ce0: 69 67 67 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62  igger]...<p>^Tab
8cf0: 6c 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  les are removed 
8d00: 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20  using the [DROP 
8d10: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
8d20: 2e 20 20 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 52 45  .  </p>..<h3>CRE
8d30: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
8d40: 20 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e   SELECT Statemen
8d50: 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  ts</h3>..<p>^(A 
8d60: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
8d70: 2e 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61  . AS SELECT" sta
8d80: 74 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61  tement creates a
8d90: 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64  nd populates a d
8da0: 61 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61  atabase.table ba
8db0: 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
8dc0: 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  ts of a SELECT s
8dd0: 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68  tatement.)^ ^(Th
8de0: 65 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20  e table has the 
8df0: 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63  same.number of c
8e00: 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f  olumns as the ro
8e10: 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ws returned by t
8e20: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
8e30: 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66  ent. The name of
8e40: 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20  .each column is 
8e50: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
8e60: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72  name of the corr
8e70: 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e  esponding column
8e80: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73   in the result.s
8e90: 65 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et of the SELECT
8ea0: 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28   statement.)^ ^(
8eb0: 54 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  The declared typ
8ec0: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
8ed0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62   is determined.b
8ee0: 79 20 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f  y the [expressio
8ef0: 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74  n affinity] of t
8f00: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
8f10: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
8f20: 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66  he result set.of
8f30: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
8f40: 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77  ement, as follow
8f50: 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  s:.</p>..<center
8f60: 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  ><table border=1
8f70: 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72  >.  <tr><th>Expr
8f80: 65 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20  ession Affinity 
8f90: 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63    <th>Column Dec
8fa0: 6c 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72  lared Type.  <tr
8fb0: 3e 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20 20  ><td>TEXT       
8fc0: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
8fd0: 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e  TEXT".  <tr><td>
8fe0: 4e 55 4d 45 52 49 43 20 20 20 20 20 20 20 20 20  NUMERIC         
8ff0: 20 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a        <td>"NUM".
9000: 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45    <tr><td>INTEGE
9010: 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R               
9020: 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e  <td>"INT".  <tr>
9030: 3c 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20  <td>REAL        
9040: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52            <td>"R
9050: 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e  EAL".  <tr><td>N
9060: 4f 4e 45 20 20 20 20 20 20 20 20 20 20 20 20 20  ONE             
9070: 20 20 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70       <td>"" (emp
9080: 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62  ty string).</tab
9090: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  le></center>)^..
90a0: 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65  <p>^(A table cre
90b0: 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
90c0: 45 20 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e  E TABLE AS has n
90d0: 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  o PRIMARY KEY an
90e0: 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73  d no.constraints
90f0: 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68   of any kind. Th
9100: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
9110: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
9120: 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61  s NULL. The defa
9130: 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult.collation se
9140: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
9150: 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
9160: 77 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52  w table is BINAR
9170: 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  Y.)^..<p>^Tables
9180: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   created using C
9190: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 61  REATE TABLE AS a
91a0: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70  re initially pop
91b0: 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 0a  ulated with the.
91c0: 72 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65 74  rows of data ret
91d0: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
91e0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
91f0: 52 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e 65  Rows are assigne
9200: 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61  d contiguously.a
9210: 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d  scending [rowid]
9220: 20 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e   values, startin
9230: 67 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65  g with 1, in the
9240: 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72   [order by|order
9250: 5d 20 74 68 61 74 20 74 68 65 79 0a 61 72 65 20  ] that they.are 
9260: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
9270: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
9280: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
9290: 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66  ent {tablecoldef
92a0: 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  } {column defini
92b0: 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65  tion} {column de
92c0: 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e  finitions}</tcl>
92d0: 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69  .<h3>Column Defi
92e0: 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  nitions</h3>..<p
92f0: 3e 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20  >Unless it is a 
9300: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
9310: 20 41 53 20 53 45 4c 45 43 54 20 73 74 61 74 65   AS SELECT state
9320: 6d 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54  ment, a CREATE T
9330: 41 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e  ABLE includes.on
9340: 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d  e or more [colum
9350: 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66  n-def|column def
9360: 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f  initions], optio
9370: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
9380: 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62  y a list of.[tab
9390: 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61  le-constraint|ta
93a0: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  ble constraints]
93b0: 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64  .  Each column d
93c0: 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73  efinition consis
93d0: 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f  ts of the.name o
93e0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70  f the column, op
93f0: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
9400: 64 20 62 79 20 74 68 65 20 64 65 63 6c 61 72 65  d by the declare
9410: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  d type of the co
9420: 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f  lumn,.then one o
9430: 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20  r more optional 
9440: 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69  [column-constrai
9450: 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72  nt|column constr
9460: 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64  aints]. Included
9470: 20 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69   in.the definiti
9480: 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f  on of "column co
9490: 6e 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74  nstraints" for t
94a0: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
94b0: 68 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74  he previous.stat
94c0: 65 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f  ement are the CO
94d0: 4c 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c  LLATE and DEFAUL
94e0: 54 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20  T clauses, even 
94f0: 74 68 6f 75 67 68 20 74 68 65 73 65 20 61 72 65  though these are
9500: 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73   not really.cons
9510: 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73  traints in the s
9520: 65 6e 73 65 20 74 68 61 74 20 74 68 65 79 20 64  ense that they d
9530: 6f 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74  o not restrict t
9540: 68 65 20 64 61 74 61 20 74 68 61 74 20 74 68 65  he data that the
9550: 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61   table may.conta
9560: 69 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f  in. The other co
9570: 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20  nstraints - NOT 
9580: 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49  NULL, CHECK, UNI
9590: 51 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  QUE, PRIMARY KEY
95a0: 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59   and.FOREIGN KEY
95b0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69   constraints - i
95c0: 6d 70 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f  mpose restrictio
95d0: 6e 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73  ns on the tables
95e0: 20 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61   data, and are a
95f0: 72 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64  re.described und
9600: 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c  er [constraints|
9610: 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61  SQL Data Constra
9620: 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70  ints] below...<p
9630: 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51  >^Unlike most SQ
9640: 4c 20 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c  L databases, SQL
9650: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ite does not res
9660: 74 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f  trict the type o
9670: 66 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20  f data that.may 
9680: 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  be inserted into
9690: 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20   a column based 
96a0: 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64  on the columns d
96b0: 65 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e  eclared type. In
96c0: 73 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73  stead,.SQLite us
96d0: 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69  es [dynamic typi
96e0: 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72  ng]. ^The declar
96f0: 65 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c  ed type of a col
9700: 75 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64  umn is used to.d
9710: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66  etermine the [af
9720: 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
9730: 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 70 3e  olumn only...<p>
9740: 54 68 65 20 44 45 46 41 55 4c 54 20 63 6c 61 75  The DEFAULT clau
9750: 73 65 20 73 70 65 63 69 66 69 65 73 20 61 20 64  se specifies a d
9760: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74 6f 20  efault value to 
9770: 75 73 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  use for the colu
9780: 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c 75 65 20 69  mn if no.value i
9790: 73 20 65 78 70 6c 69 63 69 74 6c 79 20 70 72 6f  s explicitly pro
97a0: 76 69 64 65 64 20 62 79 20 74 68 65 20 75 73 65  vided by the use
97b0: 72 20 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20  r when doing an 
97c0: 5b 49 4e 53 45 52 54 5d 2e 20 5e 49 66 20 74 68  [INSERT]. ^If th
97d0: 65 72 65 0a 69 73 20 6e 6f 20 65 78 70 6c 69 63  ere.is no explic
97e0: 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73  it DEFAULT claus
97f0: 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  e attached to a 
9800: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
9810: 6e 2c 20 74 68 65 6e 20 74 68 65 20 0a 64 65 66  n, then the .def
9820: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
9830: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c  e column is NULL
9840: 2e 20 5e 28 41 6e 20 65 78 70 6c 69 63 69 74 20  . ^(An explicit 
9850: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 6d  DEFAULT clause m
9860: 61 79 20 73 70 65 63 69 66 79 0a 74 68 61 74 20  ay specify.that 
9870: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
9880: 65 20 69 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72  e is NULL, a str
9890: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20  ing constant, a 
98a0: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2c 20 61  blob constant, a
98b0: 0a 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 2c 20  .signed-number, 
98c0: 6f 72 20 61 6e 79 20 63 6f 6e 73 74 61 6e 74 20  or any constant 
98d0: 65 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6c 6f  expression enclo
98e0: 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
98f0: 65 73 2e 20 41 0a 64 65 66 61 75 6c 74 20 76 61  es. A.default va
9900: 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  lue may also be 
9910: 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  one of the speci
9920: 61 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64  al case-independ
9930: 65 6e 74 20 6b 65 79 77 6f 72 64 73 0a 43 55 52  ent keywords.CUR
9940: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
9950: 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45  NT_DATE or CURRE
9960: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e 29 5e 20  NT_TIMESTAMP.)^ 
9970: 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
9980: 73 20 6f 66 20 74 68 65 0a 44 45 46 41 55 4c 54  s of the.DEFAULT
9990: 20 63 6c 61 75 73 65 2c 20 61 6e 20 65 78 70 72   clause, an expr
99a0: 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64  ession is consid
99b0: 65 72 65 64 20 63 6f 6e 73 74 61 6e 74 20 69 66  ered constant if
99c0: 20 69 74 20 64 6f 65 73 0a 63 6f 6e 74 61 69 6e   it does.contain
99d0: 73 20 6e 6f 20 73 75 62 2d 71 75 65 72 69 65 73  s no sub-queries
99e0: 2c 20 63 6f 6c 75 6d 6e 20 6f 72 20 74 61 62 6c  , column or tabl
99f0: 65 20 72 65 66 65 72 65 6e 63 65 73 2c 20 5b 62  e references, [b
9a00: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 5d  ound parameters]
9a10: 2c 0a 6f 72 20 73 74 72 69 6e 67 20 6c 69 74 65  ,.or string lite
9a20: 72 61 6c 73 20 65 6e 63 6c 6f 73 65 64 20 69 6e  rals enclosed in
9a30: 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69   double-quotes i
9a40: 6e 73 74 65 61 64 20 6f 66 20 73 69 6e 67 6c 65  nstead of single
9a50: 2d 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45  -quotes...<p>^(E
9a60: 61 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20 69  ach time a row i
9a70: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
9a80: 74 68 65 20 74 61 62 6c 65 20 62 79 20 61 6e 20  the table by an 
9a90: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
9aa0: 20 74 68 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20   that .does not 
9ab0: 70 72 6f 76 69 64 65 20 65 78 70 6c 69 63 69 74  provide explicit
9ac0: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
9ad0: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68  table columns th
9ae0: 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20  e values stored 
9af0: 69 6e 0a 74 68 65 20 6e 65 77 20 72 6f 77 20 61  in.the new row a
9b00: 72 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  re determined by
9b10: 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76   their default v
9b20: 61 6c 75 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c  alues)^, as foll
9b30: 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  ows:..<ul>.  <li
9b40: 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61  ><p>^If the defa
9b50: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ult value of the
9b60: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e   column is a con
9b70: 73 74 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74  stant NULL, text
9b80: 2c 20 62 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69  , blob or.    si
9b90: 67 6e 65 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75  gned-number valu
9ba0: 65 2c 20 74 68 65 6e 20 74 68 61 74 20 76 61 6c  e, then that val
9bb0: 75 65 20 69 73 20 75 73 65 64 20 64 69 72 65 63  ue is used direc
9bc0: 74 6c 79 20 69 6e 20 74 68 65 20 6e 65 77 20 72  tly in the new r
9bd0: 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49  ow...  <li><p>^I
9be0: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  f the default va
9bf0: 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  lue of a column 
9c00: 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
9c10: 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2c   in parentheses,
9c20: 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20 65 78   then.    the ex
9c30: 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
9c40: 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65  uated once for e
9c50: 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64  ach row inserted
9c60: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 73   and the results
9c70: 0a 20 20 20 20 75 73 65 64 20 69 6e 20 74 68 65  .    used in the
9c80: 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69   new row...  <li
9c90: 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61  ><p>^If the defa
9ca0: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63  ult value of a c
9cb0: 6f 6c 75 6d 6e 20 69 73 20 43 55 52 52 45 4e 54  olumn is CURRENT
9cc0: 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44  _TIME, CURRENT_D
9cd0: 41 54 45 20 6f 72 0a 20 20 20 20 43 55 52 52 45  ATE or.    CURRE
9ce0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68  NT_TIMESTAMP, th
9cf0: 65 6e 20 74 68 65 20 76 61 6c 75 65 20 75 73 65  en the value use
9d00: 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  d in the new row
9d10: 20 69 73 20 61 20 74 65 78 74 0a 20 20 20 20 72   is a text.    r
9d20: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
9d30: 20 74 68 65 20 63 75 72 72 65 6e 74 20 55 54 43   the current UTC
9d40: 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d   date and/or tim
9d50: 65 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f  e. ^For CURRENT_
9d60: 54 49 4d 45 2c 20 74 68 65 0a 20 20 20 20 66 6f  TIME, the.    fo
9d70: 72 6d 61 74 20 6f 66 20 74 68 65 20 76 61 6c 75  rmat of the valu
9d80: 65 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e  e is "HH:MM:SS".
9d90: 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41   ^For CURRENT_DA
9da0: 54 45 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22  TE, "YYYY-MM-DD"
9db0: 2e 20 5e 54 68 65 0a 20 20 20 20 66 6f 72 6d 61  . ^The.    forma
9dc0: 74 20 66 6f 72 20 43 55 52 52 45 4e 54 5f 54 49  t for CURRENT_TI
9dd0: 4d 45 53 54 41 4d 50 20 69 73 20 22 59 59 59 59  MESTAMP is "YYYY
9de0: 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22  -MM-DD HH:MM:SS"
9df0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  ..</ul>..<p>^The
9e00: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
9e10: 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 61  specifies the na
9e20: 6d 65 20 6f 66 20 61 20 5b 63 6f 6c 6c 61 74 69  me of a [collati
9e30: 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f 20  ng sequence] to 
9e40: 75 73 65 20 61 73 0a 74 68 65 20 64 65 66 61 75  use as.the defau
9e50: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
9e60: 75 65 6e 63 65 20 66 6f 72 20 74 68 65 20 63 6f  uence for the co
9e70: 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c  lumn. ^If no COL
9e80: 4c 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a 73  LATE clause is.s
9e90: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 65  pecified, the de
9ea0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
9eb0: 73 65 71 75 65 6e 63 65 20 69 73 20 5b 42 49 4e  sequence is [BIN
9ec0: 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e  ARY]...<p>^The n
9ed0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
9ee0: 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c   in a table is l
9ef0: 69 6d 69 74 65 64 20 62 79 20 74 68 65 20 5b 53  imited by the [S
9f00: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
9f10: 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70  ].compile-time p
9f20: 61 72 61 6d 65 74 65 72 2e 20 5e 41 20 73 69 6e  arameter. ^A sin
9f30: 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62  gle row of a tab
9f40: 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20  le cannot store 
9f50: 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54  more than.[SQLIT
9f60: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79  E_MAX_LENGTH] by
9f70: 74 65 73 20 6f 66 20 64 61 74 61 2e 20 5e 42 6f  tes of data. ^Bo
9f80: 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69  th of these limi
9f90: 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65  ts can be lowere
9fa0: 64 20 61 74 0a 72 75 6e 74 69 6d 65 20 75 73 69  d at.runtime usi
9fb0: 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
9fc0: 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69  limit()] C/C++ i
9fd0: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
9fe0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
9ff0: 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 20 7b 63  {constraints} {c
a000: 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c  onstraints}</tcl
a010: 3e 0a 3c 68 33 3e 53 51 4c 20 44 61 74 61 20 43  >.<h3>SQL Data C
a020: 6f 6e 73 74 72 61 69 6e 74 73 3c 2f 68 33 3e 0a  onstraints</h3>.
a030: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
a040: 74 20 70 72 69 6d 6b 65 79 63 6f 6e 73 74 20 7b  t primkeyconst {
a050: 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 7b 50 52  PRIMARY KEY} {PR
a060: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72  IMARY KEY constr
a070: 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  aint}</tcl>.<p>^
a080: 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51  Each table in SQ
a090: 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20 61 74  Lite may have at
a0a0: 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52 49   most one <b>PRI
a0b0: 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e 49  MARY KEY</b>. ^I
a0c0: 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64 73  f the.  keywords
a0d0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65   PRIMARY KEY are
a0e0: 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c 75   added to a colu
a0f0: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74  mn definition, t
a100: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
a110: 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74 61  key.  for the ta
a120: 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ble consists of 
a130: 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c 75  that single colu
a140: 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50 52  mn. ^Or, if a PR
a150: 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65  IMARY KEY clause
a160: 20 0a 20 20 69 73 20 73 70 65 63 69 66 69 65 64   .  is specified
a170: 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f 6e   as a [table-con
a180: 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20 74  straint], then t
a190: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  he primary key o
a1a0: 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63 6f  f the table.  co
a1b0: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c 69  nsists of the li
a1c0: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 70  st of columns sp
a1d0: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
a1e0: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
a1f0: 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 41 6e  EY clause..  ^An
a200: 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64   error is raised
a210: 20 69 66 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e   if more than on
a220: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c  e PRIMARY KEY cl
a230: 61 75 73 65 20 61 70 70 65 61 72 73 20 69 6e 20  ause appears in 
a240: 61 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  a.  CREATE TABLE
a250: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68   statement.  ^Th
a260: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  e PRIMARY KEY is
a270: 20 6f 70 74 69 6f 6e 61 6c 20 66 6f 72 20 6f 72   optional for or
a280: 64 69 6e 61 72 79 20 74 61 62 6c 65 73 0a 20 20  dinary tables.  
a290: 62 75 74 20 69 73 20 72 65 71 75 69 72 65 64 20  but is required 
a2a0: 66 6f 72 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  for [WITHOUT ROW
a2b0: 49 44 5d 20 74 61 62 6c 65 73 2e 0a 0a 3c 70 3e  ID] tables...<p>
a2c0: 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 61  If a table has a
a2d0: 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 70   single column p
a2e0: 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 74  rimary key and t
a2f0: 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  he declared type
a300: 20 6f 66 20 74 68 61 74 0a 20 20 63 6f 6c 75 6d   of that.  colum
a310: 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22 20 61  n is "INTEGER" a
a320: 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  nd the table is 
a330: 6e 6f 74 20 61 20 5b 57 49 54 48 4f 55 54 20 52  not a [WITHOUT R
a340: 4f 57 49 44 5d 20 74 61 62 6c 65 2c 0a 20 20 74  OWID] table,.  t
a350: 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  hen the column i
a360: 73 20 6b 6e 6f 77 6e 20 61 73 20 61 6e 20 5b 49  s known as an [I
a370: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
a380: 45 59 5d 2e 0a 20 20 53 65 65 20 62 65 6c 6f 77  EY]..  See below
a390: 20 66 6f 72 20 61 20 64 65 73 63 72 69 70 74 69   for a descripti
a3a0: 6f 6e 20 6f 66 20 74 68 65 20 73 70 65 63 69 61  on of the specia
a3b0: 6c 20 70 72 6f 70 65 72 74 69 65 73 20 61 6e 64  l properties and
a3c0: 20 62 65 68 61 76 69 6f 72 73 0a 20 20 61 73 73   behaviors.  ass
a3d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 6e 20  ociated with an 
a3e0: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
a3f0: 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e 45 61 63 68   KEY]...<p>^Each
a400: 20 72 6f 77 20 69 6e 20 61 20 74 61 62 6c 65 20   row in a table 
a410: 77 69 74 68 20 61 20 70 72 69 6d 61 72 79 20 6b  with a primary k
a420: 65 79 20 6d 75 73 74 20 68 61 76 65 20 61 20 75  ey must have a u
a430: 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f  nique combinatio
a440: 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  n.  of values in
a450: 20 69 74 73 20 70 72 69 6d 61 72 79 20 6b 65 79   its primary key
a460: 20 63 6f 6c 75 6d 6e 73 2e 20 5e 46 6f 72 20 74   columns. ^For t
a470: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
a480: 65 74 65 72 6d 69 6e 69 6e 67 0a 20 20 74 68 65  etermining.  the
a490: 20 75 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 70   uniqueness of p
a4a0: 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65  rimary key value
a4b0: 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  s, NULL values a
a4c0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69  re considered di
a4d0: 73 74 69 6e 63 74 20 66 72 6f 6d 0a 20 20 61 6c  stinct from.  al
a4e0: 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20  l other values, 
a4f0: 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20  including other 
a500: 4e 55 4c 4c 73 2e 20 5e 49 66 20 61 6e 20 5b 49  NULLs. ^If an [I
a510: 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54  NSERT] or [UPDAT
a520: 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 61  E].  statement a
a530: 74 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64 69 66  ttempts to modif
a540: 79 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e 74  y the table cont
a550: 65 6e 74 20 73 6f 20 74 68 61 74 20 74 77 6f 20  ent so that two 
a560: 6f 72 20 6d 6f 72 65 20 72 6f 77 73 0a 20 20 68  or more rows.  h
a570: 61 76 65 20 69 64 65 6e 74 69 63 61 6c 20 70 72  ave identical pr
a580: 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73  imary key values
a590: 2c 20 74 68 61 74 20 69 73 20 61 20 63 6f 6e 73  , that is a cons
a5a0: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
a5b0: 2e 0a 0a 3c 70 3e 20 41 63 63 6f 72 64 69 6e 67  ...<p> According
a5c0: 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74 61 6e   to the SQL stan
a5d0: 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20 4b 45  dard, PRIMARY KE
a5e0: 59 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20  Y should always 
a5f0: 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e 0a  imply NOT NULL..
a600: 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c    Unfortunately,
a610: 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69 6e   due to a bug in
a620: 20 73 6f 6d 65 20 65 61 72 6c 79 20 76 65 72 73   some early vers
a630: 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20 6e 6f  ions, this is no
a640: 74 20 74 68 65 0a 20 20 63 61 73 65 20 69 6e 20  t the.  case in 
a650: 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73 20  SQLite. ^Unless 
a660: 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  the column is an
a670: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
a680: 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74 68 65 20  Y KEY] or.  the 
a690: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
a6a0: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
a6b0: 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69   or the column i
a6c0: 73 20 64 65 63 6c 61 72 65 64 20 4e 4f 54 20 4e  s declared NOT N
a6d0: 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65 20 61 6c  ULL,.  SQLite al
a6e0: 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73  lows NULL values
a6f0: 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45   in a PRIMARY KE
a700: 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c 69 74  Y column.  SQLit
a710: 65 20 63 6f 75 6c 64 20 62 65 20 66 69 78 65 64  e could be fixed
a720: 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74 6f   to.  conform to
a730: 20 74 68 65 20 73 74 61 6e 64 61 72 64 2c 20 62   the standard, b
a740: 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d 69 67 68  ut doing so migh
a750: 74 20 62 72 65 61 6b 20 6c 65 67 61 63 79 20 61  t break legacy a
a760: 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20 20 48  pplications..  H
a770: 65 6e 63 65 2c 20 69 74 20 68 61 73 20 62 65 65  ence, it has bee
a780: 6e 20 64 65 63 69 64 65 64 20 74 6f 20 6d 65 72  n decided to mer
a790: 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20 74 68 65  ely document the
a7a0: 20 66 61 63 74 20 74 68 61 74 20 53 51 4c 69 74   fact that SQLit
a7b0: 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20 4e 55 4c  e.  allowing NUL
a7c0: 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52 49 4d 41  Ls in most PRIMA
a7d0: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a  RY KEY columns..
a7e0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
a7f0: 74 20 75 6e 69 71 75 65 63 6f 6e 73 74 20 7b 55  t uniqueconst {U
a800: 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75 65 20 63  NIQUE} {unique c
a810: 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 55 4e 49 51  onstraint} {UNIQ
a820: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f  UE constraint}</
a830: 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55 4e  tcl>.<p>^A <b>UN
a840: 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72 61  IQUE</b> constra
a850: 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74  int is similar t
a860: 6f 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  o a PRIMARY KEY 
a870: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78 63 65  constraint, exce
a880: 70 74 0a 20 20 74 68 61 74 20 61 20 73 69 6e 67  pt.  that a sing
a890: 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76  le table may hav
a8a0: 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20  e any number of 
a8b0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
a8c0: 74 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20 20  ts. ^For each.  
a8d0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
a8e0: 74 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  t on the table, 
a8f0: 65 61 63 68 20 72 6f 77 20 6d 75 73 74 20 63 6f  each row must co
a900: 6e 74 61 69 6e 20 61 20 75 6e 69 71 75 65 20 63  ntain a unique c
a910: 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20  ombination.  of 
a920: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f  values in the co
a930: 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64  lumns identified
a940: 20 62 79 20 74 68 65 20 55 4e 49 51 55 45 20 63   by the UNIQUE c
a950: 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 20 20 5e 46  onstraint. .  ^F
a960: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
a970: 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  of UNIQUE constr
a980: 61 69 6e 74 73 2c 20 4e 55 4c 4c 20 76 61 6c 75  aints, NULL valu
a990: 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69 64 65  es.  are conside
a9a0: 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f  red distinct fro
a9b0: 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  m all other valu
a9c0: 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74  es, including ot
a9d0: 68 65 72 20 4e 55 4c 4c 73 2e 0a 0a 3c 70 3e 5e  her NULLs...<p>^
a9e0: 49 6e 20 6d 6f 73 74 20 63 61 73 65 73 2c 20 55  In most cases, U
a9f0: 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52  NIQUE and PRIMAR
aa00: 59 20 4b 45 59 0a 20 20 63 6f 6e 73 74 72 61 69  Y KEY.  constrai
aa10: 6e 74 73 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e  nts are implemen
aa20: 74 65 64 20 62 79 20 63 72 65 61 74 69 6e 67 20  ted by creating 
aa30: 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 20 69  a unique index i
aa40: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  n the database..
aa50: 20 20 28 54 68 65 20 65 78 63 65 70 74 69 6f 6e    (The exception
aa60: 73 20 61 72 65 20 5b 49 4e 54 45 47 45 52 20 50  s are [INTEGER P
aa70: 52 49 4d 41 52 59 20 4b 45 59 5d 20 61 6e 64 20  RIMARY KEY] and 
aa80: 50 52 49 4d 41 52 59 20 4b 45 59 73 20 6f 6e 20  PRIMARY KEYs on 
aa90: 0a 20 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49  .  [WITHOUT ROWI
aaa0: 44 5d 20 74 61 62 6c 65 73 2e 29 0a 20 20 48 65  D] tables.).  He
aab0: 6e 63 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  nce, the followi
aac0: 6e 67 20 73 63 68 65 6d 61 73 20 61 72 65 20 6c  ng schemas are l
aad0: 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c  ogically equival
aae0: 65 6e 74 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20 20 3c  ent:..  <ol>.  <
aaf0: 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42  li><p>CREATE TAB
ab00: 4c 45 20 74 31 28 61 2c 20 62 20 55 4e 49 51 55  LE t1(a, b UNIQU
ab10: 45 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45  E);.  <li><p>CRE
ab20: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
ab30: 62 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a  b PRIMARY KEY);.
ab40: 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20    <li><p>CREATE 
ab50: 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 3c  TABLE t1(a, b);<
ab60: 62 72 3e 0a 20 20 20 20 20 20 20 20 20 43 52 45  br>.         CRE
ab70: 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58  ATE UNIQUE INDEX
ab80: 20 74 31 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20   t1b ON t1(b);. 
ab90: 20 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f   </ol>..<tcl>hd_
aba0: 66 72 61 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73  fragment {ckcons
abb0: 74 7d 20 7b 43 48 45 43 4b 7d 20 7b 43 48 45 43  t} {CHECK} {CHEC
abc0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 43  K constraint} {C
abd0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
abe0: 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c  }</tcl>.<p>^(A <
abf0: 62 3e 43 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73  b>CHECK</b> cons
ac00: 74 72 61 69 6e 74 20 6d 61 79 20 62 65 20 61 74  traint may be at
ac10: 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75  tached to a colu
ac20: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72  mn definition or
ac30: 0a 20 20 73 70 65 63 69 66 69 65 64 20 61 73 20  .  specified as 
ac40: 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  a table constrai
ac50: 6e 74 2e 20 49 6e 20 70 72 61 63 74 69 63 65 20  nt. In practice 
ac60: 69 74 20 6d 61 6b 65 73 20 6e 6f 20 64 69 66 66  it makes no diff
ac70: 65 72 65 6e 63 65 2e 29 5e 20 5e 28 45 61 63 68  erence.)^ ^(Each
ac80: 0a 20 20 74 69 6d 65 20 61 20 6e 65 77 20 72 6f  .  time a new ro
ac90: 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e  w is inserted in
aca0: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  to the table or 
acb0: 61 6e 20 65 78 69 73 74 69 6e 67 20 72 6f 77 20  an existing row 
acc0: 69 73 20 75 70 64 61 74 65 64 2c 0a 20 20 74 68  is updated,.  th
acd0: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 73  e expression ass
ace0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
acf0: 68 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  h CHECK constrai
ad00: 6e 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  nt is evaluated 
ad10: 61 6e 64 0a 20 20 63 61 73 74 20 74 6f 20 61 20  and.  cast to a 
ad20: 4e 55 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e  NUMERIC value in
ad30: 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
ad40: 20 61 20 5b 43 41 53 54 20 65 78 70 72 65 73 73   a [CAST express
ad50: 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 0a 20 20  ion]. If the .  
ad60: 72 65 73 75 6c 74 20 69 73 20 7a 65 72 6f 20 28  result is zero (
ad70: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 30 20  integer value 0 
ad80: 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e  or real value 0.
ad90: 30 29 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73 74  0), then a const
ada0: 72 61 69 6e 74 0a 20 20 76 69 6f 6c 61 74 69 6f  raint.  violatio
adb0: 6e 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e 29  n has occurred.)
adc0: 5e 20 5e 49 66 20 74 68 65 20 43 48 45 43 4b 20  ^ ^If the CHECK 
add0: 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
ade0: 61 74 65 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72  ates to NULL, or
adf0: 0a 20 20 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e  .  any other non
ae00: 2d 7a 65 72 6f 20 76 61 6c 75 65 2c 20 69 74 20  -zero value, it 
ae10: 69 73 20 6e 6f 74 20 61 20 63 6f 6e 73 74 72 61  is not a constra
ae20: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20  int violation.. 
ae30: 20 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e   ^The expression
ae40: 20 6f 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   of a CHECK cons
ae50: 74 72 61 69 6e 74 20 6d 61 79 20 6e 6f 74 20 63  traint may not c
ae60: 6f 6e 74 61 69 6e 20 61 20 73 75 62 71 75 65 72  ontain a subquer
ae70: 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  y...<tcl>hd_frag
ae80: 6d 65 6e 74 20 7b 6e 6f 74 6e 75 6c 6c 63 6f 6e  ment {notnullcon
ae90: 73 74 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 7d 20 7b  st} {NOT NULL} {
aea0: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
aeb0: 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41  int}</tcl>.<p>^A
aec0: 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c 3c 2f 62 3e   <b>NOT NULL</b>
aed0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
aee0: 6f 6e 6c 79 20 62 65 20 61 74 74 61 63 68 65 64  only be attached
aef0: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
af00: 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e 6f 74 20 73  inition,.  not s
af10: 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61  pecified as a ta
af20: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ble constraint. 
af30: 20 4e 6f 74 20 73 75 72 70 72 69 73 69 6e 67 6c   Not surprisingl
af40: 79 2c 20 5e 28 61 20 4e 4f 54 20 4e 55 4c 4c 0a  y, ^(a NOT NULL.
af50: 20 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 69 63    constraint dic
af60: 74 61 74 65 73 20 74 68 61 74 20 74 68 65 20 61  tates that the a
af70: 73 73 6f 63 69 61 74 65 64 20 63 6f 6c 75 6d 6e  ssociated column
af80: 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e   may not contain
af90: 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 0a 20   a NULL value.. 
afa0: 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73   Attempting to s
afb0: 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61  et the column va
afc0: 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 77 68 65 6e  lue to NULL when
afd0: 20 69 6e 73 65 72 74 69 6e 67 20 61 20 6e 65 77   inserting a new
afe0: 20 72 6f 77 20 6f 72 0a 20 20 75 70 64 61 74 69   row or.  updati
aff0: 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6f  ng an existing o
b000: 6e 65 20 63 61 75 73 65 73 20 61 20 63 6f 6e 73  ne causes a cons
b010: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
b020: 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63 74 6c 79 20  .)^..<p>Exactly 
b030: 68 6f 77 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  how a constraint
b040: 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20 64 65   violation is de
b050: 61 6c 74 20 77 69 74 68 20 69 73 20 64 65 74 65  alt with is dete
b060: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 20  rmined by the.  
b070: 5b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65  [conflict clause
b080: 7c 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66  |constraint conf
b090: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
b0a0: 61 6c 67 6f 72 69 74 68 6d 5d 2e 20 45 61 63 68  algorithm]. Each
b0b0: 20 0a 20 20 50 52 49 4d 41 52 59 20 4b 45 59 2c   .  PRIMARY KEY,
b0c0: 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e 55 4c   UNIQUE, NOT NUL
b0d0: 4c 20 61 6e 64 20 43 48 45 43 4b 20 63 6f 6e 73  L and CHECK cons
b0e0: 74 72 61 69 6e 74 20 68 61 73 20 61 20 64 65 66  traint has a def
b0f0: 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 0a 20 20  ault conflict.  
b100: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
b110: 69 74 68 6d 2e 20 5e 50 52 49 4d 41 52 59 20 4b  ithm. ^PRIMARY K
b120: 45 59 2c 20 55 4e 49 51 55 45 20 61 6e 64 20 4e  EY, UNIQUE and N
b130: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
b140: 6e 74 73 20 6d 61 79 20 62 65 0a 20 20 65 78 70  nts may be.  exp
b150: 6c 69 63 69 74 6c 79 20 61 73 73 69 67 6e 65 64  licitly assigned
b160: 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c   a default confl
b170: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
b180: 6c 67 6f 72 69 74 68 6d 20 62 79 20 69 6e 63 6c  lgorithm by incl
b190: 75 64 69 6e 67 0a 20 20 61 20 5b 63 6f 6e 66 6c  uding.  a [confl
b1a0: 69 63 74 2d 63 6c 61 75 73 65 5d 20 69 6e 20 74  ict-clause] in t
b1b0: 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f 6e 73  heir definitions
b1c0: 2e 20 5e 4f 72 2c 20 69 66 20 61 20 63 6f 6e 73  . ^Or, if a cons
b1d0: 74 72 61 69 6e 74 20 64 65 66 69 6e 69 74 69 6f  traint definitio
b1e0: 6e 0a 20 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63  n.  does not inc
b1f0: 6c 75 64 65 20 61 20 5b 63 6f 6e 66 6c 69 63 74  lude a [conflict
b200: 2d 63 6c 61 75 73 65 5d 20 6f 72 20 69 74 20 69  -clause] or it i
b210: 73 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  s a CHECK constr
b220: 61 69 6e 74 2c 20 74 68 65 20 64 65 66 61 75 6c  aint, the defaul
b230: 74 0a 20 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  t.  conflict res
b240: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
b250: 6d 20 69 73 20 41 42 4f 52 54 2e 20 5e 44 69 66  m is ABORT. ^Dif
b260: 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  ferent constrain
b270: 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20  ts within the.  
b280: 73 61 6d 65 20 74 61 62 6c 65 20 6d 61 79 20 68  same table may h
b290: 61 76 65 20 64 69 66 66 65 72 65 6e 74 20 64 65  ave different de
b2a0: 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72  fault conflict r
b2b0: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
b2c0: 74 68 6d 73 2e 20 53 65 65 0a 20 20 74 68 65 20  thms. See.  the 
b2d0: 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 20 5b  section titled [
b2e0: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72  ON CONFLICT] for
b2f0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
b300: 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 68  rmation...<tcl>h
b310: 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 77 69 64  d_fragment rowid
b320: 20 7b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   {INTEGER PRIMAR
b330: 59 20 4b 45 59 7d 20 52 4f 57 49 44 20 72 6f 77  Y KEY} ROWID row
b340: 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 4f 57  id</tcl>.<h3>ROW
b350: 49 44 73 20 61 6e 64 20 74 68 65 20 49 4e 54 45  IDs and the INTE
b360: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 3c  GER PRIMARY KEY<
b370: 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 78 63 65 70 74  /h3>..<p>^Except
b380: 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20 52 4f   for [WITHOUT RO
b390: 57 49 44 5d 20 74 61 62 6c 65 73 2c 20 61 6c 6c  WID] tables, all
b3a0: 20 72 6f 77 73 20 77 69 74 68 69 6e 20 53 51 4c   rows within SQL
b3b0: 69 74 65 20 74 61 62 6c 65 73 0a 68 61 76 65 20  ite tables.have 
b3c0: 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  a 64-bit signed 
b3d0: 69 6e 74 65 67 65 72 20 6b 65 79 20 74 68 61 74  integer key that
b3e0: 20 75 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69   uniquely identi
b3f0: 66 69 65 73 20 74 68 65 20 72 6f 77 20 77 69 74  fies the row wit
b400: 68 69 6e 20 69 74 73 20 74 61 62 6c 65 2e 0a 54  hin its table..T
b410: 68 69 73 20 69 6e 74 65 67 65 72 20 69 73 20 75  his integer is u
b420: 73 75 61 6c 6c 79 0a 63 61 6c 6c 65 64 20 74 68  sually.called th
b430: 65 20 22 72 6f 77 69 64 22 2e 20 5e 54 68 65 20  e "rowid". ^The 
b440: 72 6f 77 69 64 20 76 61 6c 75 65 20 63 61 6e 20  rowid value can 
b450: 62 65 20 61 63 63 65 73 73 65 64 20 75 73 69 6e  be accessed usin
b460: 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65  g one of the spe
b470: 63 69 61 6c 0a 63 61 73 65 2d 69 6e 64 65 70 65  cial.case-indepe
b480: 6e 64 65 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77  ndent names "row
b490: 69 64 22 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22  id", "oid", or "
b4a0: 5f 72 6f 77 69 64 5f 22 20 69 6e 20 70 6c 61 63  _rowid_" in plac
b4b0: 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  e of a column na
b4c0: 6d 65 2e 0a 5e 49 66 20 61 20 74 61 62 6c 65 20  me..^If a table 
b4d0: 63 6f 6e 74 61 69 6e 73 20 61 20 75 73 65 72 20  contains a user 
b4e0: 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e  defined column n
b4f0: 61 6d 65 64 20 22 72 6f 77 69 64 22 2c 20 22 6f  amed "rowid", "o
b500: 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22  id" or "_rowid_"
b510: 2c 0a 74 68 65 6e 20 74 68 61 74 20 6e 61 6d 65  ,.then that name
b520: 20 61 6c 77 61 79 73 20 72 65 66 65 72 73 20 74   always refers t
b530: 68 65 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65  he explicitly de
b540: 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20 61 6e  clared column an
b550: 64 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  d cannot be used
b560: 0a 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65  .to retrieve the
b570: 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 20 76   integer rowid v
b580: 61 6c 75 65 2e 0a 0a 3c 70 3e 54 68 65 20 72 6f  alue...<p>The ro
b590: 77 69 64 20 28 61 6e 64 20 22 6f 69 64 22 20 61  wid (and "oid" a
b5a0: 6e 64 20 22 5f 72 6f 77 69 64 5f 22 29 20 69 73  nd "_rowid_") is
b5b0: 20 6f 6d 69 74 74 65 64 20 69 6e 20 5b 57 49 54   omitted in [WIT
b5c0: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
b5d0: 65 73 2e 0a 57 49 54 48 4f 55 54 20 52 4f 57 49  es..WITHOUT ROWI
b5e0: 44 20 74 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  D tables are onl
b5f0: 79 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 53  y available in S
b600: 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33  QLite [version 3
b610: 2e 38 2e 32 5d 20 61 6e 64 20 6c 61 74 65 72 2e  .8.2] and later.
b620: 0a 41 20 74 61 62 6c 65 20 74 68 61 74 20 6c 61  .A table that la
b630: 63 6b 73 20 74 68 65 20 57 49 54 48 4f 55 54 20  cks the WITHOUT 
b640: 52 4f 57 49 44 20 63 6c 61 75 73 65 20 69 73 20  ROWID clause is 
b650: 63 61 6c 6c 65 64 20 61 20 22 72 6f 77 69 64 20  called a "rowid 
b660: 74 61 62 6c 65 22 2e 0a 0a 3c 70 3e 54 68 65 20  table"...<p>The 
b670: 64 61 74 61 20 66 6f 72 20 72 6f 77 69 64 20 74  data for rowid t
b680: 61 62 6c 65 73 20 69 73 20 73 74 6f 72 65 64 20  ables is stored 
b690: 61 73 20 61 20 42 2d 54 72 65 65 20 73 74 72 75  as a B-Tree stru
b6a0: 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
b6b0: 0a 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65  .one entry for e
b6c0: 61 63 68 20 74 61 62 6c 65 20 72 6f 77 2c 20 75  ach table row, u
b6d0: 73 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 76  sing the rowid v
b6e0: 61 6c 75 65 20 61 73 20 74 68 65 20 6b 65 79 2e  alue as the key.
b6f0: 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74   This means that
b700: 0a 72 65 74 72 69 65 76 69 6e 67 20 6f 72 20 73  .retrieving or s
b710: 6f 72 74 69 6e 67 20 72 65 63 6f 72 64 73 20 62  orting records b
b720: 79 20 72 6f 77 69 64 20 69 73 20 66 61 73 74 2e  y rowid is fast.
b730: 20 53 65 61 72 63 68 69 6e 67 20 66 6f 72 20 61   Searching for a
b740: 20 72 65 63 6f 72 64 20 77 69 74 68 20 61 0a 73   record with a.s
b750: 70 65 63 69 66 69 63 20 72 6f 77 69 64 2c 20 6f  pecific rowid, o
b760: 72 20 66 6f 72 20 61 6c 6c 20 72 65 63 6f 72 64  r for all record
b770: 73 20 77 69 74 68 20 72 6f 77 69 64 73 20 77 69  s with rowids wi
b780: 74 68 69 6e 20 61 20 73 70 65 63 69 66 69 65 64  thin a specified
b790: 20 72 61 6e 67 65 20 69 73 0a 61 72 6f 75 6e 64   range is.around
b7a0: 20 74 77 69 63 65 20 61 73 20 66 61 73 74 20 61   twice as fast a
b7b0: 73 20 61 20 73 69 6d 69 6c 61 72 20 73 65 61 72  s a similar sear
b7c0: 63 68 20 6d 61 64 65 20 62 79 20 73 70 65 63 69  ch made by speci
b7d0: 66 79 69 6e 67 20 61 6e 79 20 6f 74 68 65 72 20  fying any other 
b7e0: 50 52 49 4d 41 52 59 0a 4b 45 59 20 6f 72 20 69  PRIMARY.KEY or i
b7f0: 6e 64 65 78 65 64 20 76 61 6c 75 65 2e 0a 0a 3c  ndexed value...<
b800: 70 3e 20 5e 57 69 74 68 20 6f 6e 65 20 65 78 63  p> ^With one exc
b810: 65 70 74 69 6f 6e 20 6e 6f 74 65 64 20 62 65 6c  eption noted bel
b820: 6f 77 2c 20 69 66 20 61 20 72 6f 77 69 64 20 74  ow, if a rowid t
b830: 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
b840: 72 79 20 6b 65 79 20 74 68 61 74 20 63 6f 6e 73  ry key that cons
b850: 69 73 74 73 0a 6f 66 20 61 20 73 69 6e 67 6c 65  ists.of a single
b860: 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20   column and the 
b870: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66  declared type of
b880: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20   that column is 
b890: 22 49 4e 54 45 47 45 52 22 20 69 6e 20 61 6e 79  "INTEGER" in any
b8a0: 20 6d 69 78 74 75 72 65 20 6f 66 0a 75 70 70 65   mixture of.uppe
b8b0: 72 20 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65  r and lower case
b8c0: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d  , then the colum
b8d0: 6e 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69  n becomes an ali
b8e0: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
b8f0: 2e 20 53 75 63 68 20 61 0a 63 6f 6c 75 6d 6e 20  . Such a.column 
b900: 69 73 20 75 73 75 61 6c 6c 79 20 72 65 66 65 72  is usually refer
b910: 72 65 64 20 74 6f 20 61 73 20 61 6e 20 22 69 6e  red to as an "in
b920: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
b930: 79 22 2e 20 41 20 50 52 49 4d 41 52 59 20 4b 45  y". A PRIMARY KE
b940: 59 20 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79 20 62 65  Y column.only be
b950: 63 6f 6d 65 73 20 61 6e 20 69 6e 74 65 67 65 72  comes an integer
b960: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 66 20   primary key if 
b970: 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  the declared typ
b980: 65 20 6e 61 6d 65 20 69 73 20 65 78 61 63 74 6c  e name is exactl
b990: 79 0a 22 49 4e 54 45 47 45 52 22 2e 20 20 5e 4f  y."INTEGER".  ^O
b9a0: 74 68 65 72 20 69 6e 74 65 67 65 72 20 74 79 70  ther integer typ
b9b0: 65 20 6e 61 6d 65 73 20 6c 69 6b 65 20 22 49 4e  e names like "IN
b9c0: 54 22 20 6f 72 20 22 42 49 47 49 4e 54 22 20 6f  T" or "BIGINT" o
b9d0: 72 20 22 53 48 4f 52 54 20 49 4e 54 45 47 45 52  r "SHORT INTEGER
b9e0: 22 0a 6f 72 20 22 55 4e 53 49 47 4e 45 44 20 49  ".or "UNSIGNED I
b9f0: 4e 54 45 47 45 52 22 20 63 61 75 73 65 73 20 74  NTEGER" causes t
ba00: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63  he primary key c
ba10: 6f 6c 75 6d 6e 20 74 6f 20 62 65 68 61 76 65 20  olumn to behave 
ba20: 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 0a 74  as an ordinary.t
ba30: 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68  able column with
ba40: 20 69 6e 74 65 67 65 72 20 5b 61 66 66 69 6e 69   integer [affini
ba50: 74 79 5d 20 61 6e 64 20 61 20 75 6e 69 71 75 65  ty] and a unique
ba60: 20 69 6e 64 65 78 2c 20 6e 6f 74 20 61 73 20 61   index, not as a
ba70: 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20  n alias for.the 
ba80: 72 6f 77 69 64 2e 0a 0a 3c 70 3e 20 54 68 65 20  rowid...<p> The 
ba90: 65 78 63 65 70 74 69 6f 6e 20 6d 65 6e 74 69 6f  exception mentio
baa0: 6e 65 64 20 61 62 6f 76 65 20 69 73 20 74 68 61  ned above is tha
bab0: 74 20 5e 69 66 20 74 68 65 20 64 65 63 6c 61 72  t ^if the declar
bac0: 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75 6d  ation of a colum
bad0: 6e 20 77 69 74 68 0a 64 65 63 6c 61 72 65 64 20  n with.declared 
bae0: 74 79 70 65 20 22 49 4e 54 45 47 45 52 22 20 69  type "INTEGER" i
baf0: 6e 63 6c 75 64 65 73 20 61 6e 20 22 50 52 49 4d  ncludes an "PRIM
bb00: 41 52 59 20 4b 45 59 20 44 45 53 43 22 20 63 6c  ARY KEY DESC" cl
bb10: 61 75 73 65 2c 20 69 74 20 64 6f 65 73 20 6e 6f  ause, it does no
bb20: 74 0a 62 65 63 6f 6d 65 20 61 6e 20 61 6c 69 61  t.become an alia
bb30: 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20  s for the rowid 
bb40: 61 6e 64 20 69 73 20 6e 6f 74 20 63 6c 61 73 73  and is not class
bb50: 69 66 69 65 64 20 61 73 20 61 6e 20 69 6e 74 65  ified as an inte
bb60: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e  ger primary key.
bb70: 0a 54 68 69 73 20 71 75 69 72 6b 20 69 73 20 6e  .This quirk is n
bb80: 6f 74 20 62 79 20 64 65 73 69 67 6e 2e 20 49 74  ot by design. It
bb90: 20 69 73 20 64 75 65 20 74 6f 20 61 20 62 75 67   is due to a bug
bba0: 20 69 6e 20 65 61 72 6c 79 20 76 65 72 73 69 6f   in early versio
bbb0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 0a 42 75  ns of SQLite..Bu
bbc0: 74 20 66 69 78 69 6e 67 20 74 68 65 20 62 75 67  t fixing the bug
bbd0: 20 63 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e   could result in
bbe0: 20 62 61 63 6b 77 61 72 64 73 20 69 6e 63 6f 6d   backwards incom
bbf0: 70 61 74 69 62 69 6c 69 74 69 65 73 2e 0a 48 65  patibilities..He
bc00: 6e 63 65 2c 20 74 68 65 20 6f 72 69 67 69 6e 61  nce, the origina
bc10: 6c 20 62 65 68 61 76 69 6f 72 20 68 61 73 20 62  l behavior has b
bc20: 65 65 6e 20 72 65 74 61 69 6e 65 64 20 28 61 6e  een retained (an
bc30: 64 20 64 6f 63 75 6d 65 6e 74 65 64 29 20 62 65  d documented) be
bc40: 63 61 75 73 65 20 6f 64 64 0a 62 65 68 61 76 69  cause odd.behavi
bc50: 6f 72 20 69 6e 20 61 20 63 6f 72 6e 65 72 20 63  or in a corner c
bc60: 61 73 65 20 69 73 20 66 61 72 20 62 65 74 74 65  ase is far bette
bc70: 72 20 74 68 61 6e 20 61 20 63 6f 6d 70 61 74 69  r than a compati
bc80: 62 69 6c 69 74 79 20 62 72 65 61 6b 2e 20 20 54  bility break.  T
bc90: 68 69 73 20 6d 65 61 6e 73 0a 74 68 61 74 20 5e  his means.that ^
bca0: 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  (the following t
bcb0: 68 72 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61  hree table decla
bcc0: 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73  rations all caus
bcd0: 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22  e the column "x"
bce0: 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69 61 73 20   to be an.alias 
bcf0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 28 61  for the rowid (a
bd00: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
bd10: 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c  y key):..<ul>.<l
bd20: 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42  i><tt>CREATE TAB
bd30: 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 20 50  LE t(x INTEGER P
bd40: 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20  RIMARY KEY ASC, 
bd50: 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e  y, z);</tt>.<li>
bd60: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
bd70: 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c   t(x INTEGER, y,
bd80: 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   z, PRIMARY KEY(
bd90: 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 6c  x ASC));</tt>.<l
bda0: 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42  i><tt>CREATE TAB
bdb0: 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20  LE t(x INTEGER, 
bdc0: 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45  y, z, PRIMARY KE
bdd0: 59 28 78 20 44 45 53 43 29 29 3b 3c 2f 74 74 3e  Y(x DESC));</tt>
bde0: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 42 75 74  .</ul>)^..<p>But
bdf0: 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67   ^(the following
be00: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 64 6f 65   declaration doe
be10: 73 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20  s not result in 
be20: 22 78 22 20 62 65 69 6e 67 20 61 6e 20 61 6c 69  "x" being an ali
be30: 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64  as for.the rowid
be40: 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  :.<ul>.<li><tt>C
be50: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
be60: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
be70: 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b  KEY DESC, y, z);
be80: 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  </tt>.</ul>)^..<
be90: 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75 65 73 20  p>^Rowid values 
bea0: 6d 61 79 20 62 65 20 6d 6f 64 69 66 69 65 64 20  may be modified 
beb0: 75 73 69 6e 67 20 61 6e 20 55 50 44 41 54 45 20  using an UPDATE 
bec0: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65  statement in the
bed0: 20 73 61 6d 65 0a 77 61 79 20 61 73 20 61 6e 79   same.way as any
bee0: 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 20 76 61   other column va
bef0: 6c 75 65 20 63 61 6e 2c 20 65 69 74 68 65 72 20  lue can, either 
bf00: 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65  using one of the
bf10: 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69 61 73 65   built-in aliase
bf20: 73 0a 28 22 72 6f 77 69 64 22 2c 20 22 6f 69 64  s.("rowid", "oid
bf30: 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 29 20  " or "_rowid_") 
bf40: 6f 72 20 62 79 20 75 73 69 6e 67 20 61 6e 20 61  or by using an a
bf50: 6c 69 61 73 20 63 72 65 61 74 65 64 20 62 79 20  lias created by 
bf60: 61 6e 20 69 6e 74 65 67 65 72 0a 70 72 69 6d 61  an integer.prima
bf70: 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69 6c 61 72  ry key. ^Similar
bf80: 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ly, an INSERT st
bf90: 61 74 65 6d 65 6e 74 20 6d 61 79 20 70 72 6f 76  atement may prov
bfa0: 69 64 65 20 61 20 76 61 6c 75 65 20 74 6f 20 75  ide a value to u
bfb0: 73 65 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20  se as the.rowid 
bfc0: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
bfd0: 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69 6b 65 20  erted. ^(Unlike 
bfe0: 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f  normal SQLite co
bff0: 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74 65 67 65  lumns, an intege
c000: 72 20 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 72  r primary.key or
c010: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75   rowid column mu
c020: 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67  st contain integ
c030: 65 72 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67  er values. Integ
c040: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  er primary key o
c050: 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d 6e 73 20  r rowid.columns 
c060: 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20  are not able to 
c070: 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f  hold floating po
c080: 69 6e 74 20 76 61 6c 75 65 73 2c 20 73 74 72 69  int values, stri
c090: 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e  ngs, BLOBs, or N
c0a0: 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  ULLs.)^..<p>^If 
c0b0: 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
c0c0: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
c0d0: 73 65 74 20 61 6e 20 69 6e 74 65 67 65 72 20 70  set an integer p
c0e0: 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f  rimary key or ro
c0f0: 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f 20 61 20  wid column.to a 
c100: 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c  NULL or blob val
c110: 75 65 2c 20 6f 72 20 74 6f 20 61 20 73 74 72 69  ue, or to a stri
c120: 6e 67 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65  ng or real value
c130: 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20   that cannot be 
c140: 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65  losslessly.conve
c150: 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
c160: 65 72 2c 20 61 20 22 64 61 74 61 74 79 70 65 20  er, a "datatype 
c170: 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20  mismatch" error 
c180: 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 20 73  occurs and the s
c190: 74 61 74 65 6d 65 6e 74 0a 69 73 20 61 62 6f 72  tatement.is abor
c1a0: 74 65 64 2e 20 5e 49 66 20 61 6e 20 49 4e 53 45  ted. ^If an INSE
c1b0: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  RT statement att
c1c0: 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20  empts to insert 
c1d0: 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72  a blob value, or
c1e0: 20 61 20 73 74 72 69 6e 67 0a 6f 72 20 72 65 61   a string.or rea
c1f0: 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  l value that can
c200: 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
c210: 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
c220: 6e 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61  n integer into a
c230: 6e 0a 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n.integer primar
c240: 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y key or rowid c
c250: 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74 61 74 79  olumn, a "dataty
c260: 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72  pe mismatch" err
c270: 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68  or occurs and th
c280: 65 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  e.statement is a
c290: 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20  borted...<p>^If 
c2a0: 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
c2b0: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
c2c0: 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c 20 76 61  insert a NULL va
c2d0: 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f 77 69 64  lue into a rowid
c2e0: 20 6f 72 0a 69 6e 74 65 67 65 72 20 70 72 69 6d   or.integer prim
c2f0: 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 2c 20  ary key column, 
c300: 74 68 65 20 73 79 73 74 65 6d 20 63 68 6f 6f 73  the system choos
c310: 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  es an integer va
c320: 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20 74 68  lue to use as th
c330: 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d 61 74 69  e.rowid automati
c340: 63 61 6c 6c 79 2e 20 41 20 64 65 74 61 69 6c 65  cally. A detaile
c350: 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  d description of
c360: 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e   how this is don
c370: 65 20 69 73 20 70 72 6f 76 69 64 65 64 0a 3c 61  e is provided.<a
c380: 20 68 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68   href="autoinc.h
c390: 74 6d 6c 22 3e 73 65 70 61 72 61 74 65 6c 79 3c  tml">separately<
c3a0: 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  /a>.</p>..<p>^(T
c3b0: 68 65 20 5b 70 61 72 65 6e 74 20 6b 65 79 5d 20  he [parent key] 
c3c0: 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e 20 6b 65  of a [foreign ke
c3d0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20 69 73  y constraint] is
c3e0: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
c3f0: 75 73 65 20 74 68 65 20 72 6f 77 69 64 2e 20 20  use the rowid.  
c400: 54 68 65 20 70 61 72 65 6e 74 20 6b 65 79 20 6d  The parent key m
c410: 75 73 74 20 75 73 65 64 20 6e 61 6d 65 64 20 63  ust used named c
c420: 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29 5e 3c 2f  olumns only.)^</
c430: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
c440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c480: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
c490: 20 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   {CREATE TRIGGER
c4a0: 7d 20 63 72 65 61 74 65 74 72 69 67 67 65 72 20  } createtrigger 
c4b0: 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52  {{CREATE TRIGGER
c4c0: 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
c4d0: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
c4e0: 65 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 0a 3c  e-trigger-stmt.<
c4f0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43  /tcl>..<p>^The C
c500: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73 74  REATE TRIGGER st
c510: 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
c520: 74 6f 20 61 64 64 20 74 72 69 67 67 65 72 73 20  to add triggers 
c530: 74 6f 20 74 68 65 20 0a 64 61 74 61 62 61 73 65  to the .database
c540: 20 73 63 68 65 6d 61 2e 20 5e 54 72 69 67 67 65   schema. ^Trigge
c550: 72 73 20 61 72 65 20 64 61 74 61 62 61 73 65 20  rs are database 
c560: 6f 70 65 72 61 74 69 6f 6e 73 20 0a 74 68 61 74  operations .that
c570: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
c580: 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65  ly performed whe
c590: 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 64 61  n a specified da
c5a0: 74 61 62 61 73 65 20 65 76 65 6e 74 0a 6f 63 63  tabase event.occ
c5b0: 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e  urs.  </p>..<p>^
c5c0: 41 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65  A trigger may be
c5d0: 20 73 70 65 63 69 66 69 65 64 20 74 6f 20 66 69   specified to fi
c5e0: 72 65 20 77 68 65 6e 65 76 65 72 20 61 20 5b 44  re whenever a [D
c5f0: 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d  ELETE], [INSERT]
c600: 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 66  ,.or [UPDATE] of
c610: 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20 64 61   a.particular da
c620: 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 63 63  tabase table occ
c630: 75 72 73 2c 20 6f 72 20 77 68 65 6e 65 76 65 72  urs, or whenever
c640: 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63 63   an [UPDATE] occ
c650: 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72  urs on.on one or
c660: 20 6d 6f 72 65 20 73 70 65 63 69 66 69 65 64 20   more specified 
c670: 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62  columns of a tab
c680: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20  le.</p>..<p>^At 
c690: 74 68 69 73 20 74 69 6d 65 20 53 51 4c 69 74 65  this time SQLite
c6a0: 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46   supports only F
c6b0: 4f 52 20 45 41 43 48 20 52 4f 57 20 74 72 69 67  OR EACH ROW trig
c6c0: 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41  gers, not FOR EA
c6d0: 43 48 0a 53 54 41 54 45 4d 45 4e 54 20 74 72 69  CH.STATEMENT tri
c6e0: 67 67 65 72 73 2e 20 5e 48 65 6e 63 65 20 65 78  ggers. ^Hence ex
c6f0: 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69 66 79  plicitly specify
c700: 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52 4f 57  ing FOR EACH ROW
c710: 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46   is optional..^F
c720: 4f 52 20 45 41 43 48 20 52 4f 57 20 69 6d 70 6c  OR EACH ROW impl
c730: 69 65 73 20 74 68 61 74 20 74 68 65 20 53 51 4c  ies that the SQL
c740: 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
c750: 69 66 69 65 64 20 69 6e 20 74 68 65 20 74 72 69  ified in the tri
c760: 67 67 65 72 0a 6d 61 79 20 62 65 20 65 78 65 63  gger.may be exec
c770: 75 74 65 64 20 28 64 65 70 65 6e 64 69 6e 67 20  uted (depending 
c780: 6f 6e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  on the WHEN clau
c790: 73 65 29 20 66 6f 72 20 65 61 63 68 20 64 61 74  se) for each dat
c7a0: 61 62 61 73 65 20 72 6f 77 20 62 65 69 6e 67 0a  abase row being.
c7b0: 69 6e 73 65 72 74 65 64 2c 20 75 70 64 61 74 65  inserted, update
c7c0: 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20  d or deleted by 
c7d0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61  the statement ca
c7e0: 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  using the trigge
c7f0: 72 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a  r to fire.</p>..
c800: 3c 70 3e 5e 28 42 6f 74 68 20 74 68 65 20 57 48  <p>^(Both the WH
c810: 45 4e 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68  EN clause and th
c820: 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e  e trigger action
c830: 73 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65  s may access ele
c840: 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f  ments of .the ro
c850: 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64  w being inserted
c860: 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64  , deleted or upd
c870: 61 74 65 64 20 75 73 69 6e 67 20 72 65 66 65 72  ated using refer
c880: 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72  ences of the for
c890: 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d  m ."NEW.<i>colum
c8a0: 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20  n-name</i>" and 
c8b0: 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  "OLD.<i>column-n
c8c0: 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a  ame</i>", where.
c8d0: 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  <i>column-name</
c8e0: 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  i> is the name o
c8f0: 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20  f a column from 
c900: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74  the table that t
c910: 68 65 20 74 72 69 67 67 65 72 0a 69 73 20 61 73  he trigger.is as
c920: 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 29 5e  sociated with.)^
c930: 20 5e 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72   ^(OLD and NEW r
c940: 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e  eferences may on
c950: 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 72  ly be used in tr
c960: 69 67 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73  iggers on.events
c970: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 79 20   for which they 
c980: 61 72 65 20 72 65 6c 65 76 61 6e 74 2c 20 61 73  are relevant, as
c990: 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
c9a0: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63  table border=0 c
c9b0: 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c  ellpadding=10>.<
c9c0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
c9d0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
c9e0: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
c9f0: 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a  INSERT</i></td>.
ca00: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
ca10: 3e 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20  >NEW references 
ca20: 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c  are valid</td>.<
ca30: 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  /tr>.<tr>.<td va
ca40: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
ca50: 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31  ="right" width=1
ca60: 32 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e  20><i>UPDATE</i>
ca70: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
ca80: 3d 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f  ="top">NEW and O
ca90: 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  LD references ar
caa0: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
cab0: 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  r>.<tr>.<td vali
cac0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
cad0: 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30  right" width=120
cae0: 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f  ><i>DELETE</i></
caf0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
cb00: 74 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e  top">OLD referen
cb10: 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74  ces are valid</t
cb20: 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  d>.</tr>.</table
cb30: 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66  >.</p>)^..<p>^If
cb40: 20 61 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69   a WHEN clause i
cb50: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20  s supplied, the 
cb60: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
cb70: 70 65 63 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c  pecified.are onl
cb80: 79 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 72  y executed for r
cb90: 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
cba0: 65 20 57 48 45 4e 0a 63 6c 61 75 73 65 20 69 73  e WHEN.clause is
cbb0: 20 74 72 75 65 2e 20 5e 49 66 20 6e 6f 20 57 48   true. ^If no WH
cbc0: 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70  EN clause is sup
cbd0: 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73  plied, the SQL s
cbe0: 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 65 78  tatements.are ex
cbf0: 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72  ecuted for all r
cc00: 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ows.</p>..<p>^Th
cc10: 65 20 42 45 46 4f 52 45 20 6f 72 20 41 46 54 45  e BEFORE or AFTE
cc20: 52 20 6b 65 79 77 6f 72 64 20 64 65 74 65 72 6d  R keyword determ
cc30: 69 6e 65 73 20 77 68 65 6e 20 74 68 65 20 74 72  ines when the tr
cc40: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 0a 77 69  igger actions.wi
cc50: 6c 6c 20 62 65 20 65 78 65 63 75 74 65 64 20 72  ll be executed r
cc60: 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69  elative to the i
cc70: 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69  nsertion, modifi
cc80: 63 61 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61  cation or remova
cc90: 6c 20 6f 66 20 74 68 65 0a 61 73 73 6f 63 69 61  l of the.associa
cca0: 74 65 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70  ted row.</p>..<p
ccb0: 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  >^An [ON CONFLIC
ccc0: 54 5d 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65  T] clause may be
ccd0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
cce0: 72 74 20 6f 66 20 61 6e 20 5b 55 50 44 41 54 45  rt of an [UPDATE
ccf0: 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61 63  ] or [INSERT].ac
cd00: 74 69 6f 6e 20 77 69 74 68 69 6e 20 74 68 65 20  tion within the 
cd10: 62 6f 64 79 20 6f 66 20 74 68 65 20 74 72 69 67  body of the trig
cd20: 67 65 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69 66  ger..^However if
cd30: 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54   an [ON CONFLICT
cd40: 5d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  ] clause is spec
cd50: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
cd60: 20 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20   .the statement 
cd70: 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67  causing the trig
cd80: 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65  ger to fire, the
cd90: 6e 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c  n conflict handl
cda0: 69 6e 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74 68  ing.policy of th
cdb0: 65 20 6f 75 74 65 72 20 73 74 61 74 65 6d 65 6e  e outer statemen
cdc0: 74 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 61  t is used instea
cdd0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67  d.</p>..<p>^Trig
cde0: 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74  gers are automat
cdf0: 69 63 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52 49  ically [DROP TRI
ce00: 47 47 45 52 20 7c 20 64 72 6f 70 70 65 64 5d 0a  GGER | dropped].
ce10: 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  when the table t
ce20: 68 61 74 20 74 68 65 79 20 61 72 65 20 0a 61 73  hat they are .as
ce30: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 28 74  sociated with (t
ce40: 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65  he <i>table-name
ce50: 3c 2f 69 3e 20 74 61 62 6c 65 29 20 69 73 20 0a  </i> table) is .
ce60: 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72  [DROP TABLE | dr
ce70: 6f 70 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76 65  opped].  ^Howeve
ce80: 72 20 69 66 20 74 68 65 20 74 72 69 67 67 65 72  r if the trigger
ce90: 20 61 63 74 69 6f 6e 73 20 72 65 66 65 72 65 6e   actions referen
cea0: 63 65 0a 6f 74 68 65 72 20 74 61 62 6c 65 73 2c  ce.other tables,
ceb0: 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
cec0: 6e 6f 74 20 64 72 6f 70 70 65 64 20 6f 72 20 6d  not dropped or m
ced0: 6f 64 69 66 69 65 64 20 69 66 20 74 68 6f 73 65  odified if those
cee0: 20 6f 74 68 65 72 0a 74 61 62 6c 65 73 20 61 72   other.tables ar
cef0: 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20  e [DROP TABLE | 
cf00: 64 72 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c 54  dropped] or [ALT
cf10: 45 52 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69 66  ER TABLE | modif
cf20: 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ied].</p>..<p>^T
cf30: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 6d 6f  riggers are remo
cf40: 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44  ved using the [D
cf50: 52 4f 50 20 54 52 49 47 47 45 52 5d 20 73 74 61  ROP TRIGGER] sta
cf60: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33  tement.</p>..<h3
cf70: 3e 53 79 6e 74 61 78 20 52 65 73 74 72 69 63 74  >Syntax Restrict
cf80: 69 6f 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c 20  ions On UPDATE, 
cf90: 44 45 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53 45  DELETE, and INSE
cfa0: 52 54 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69  RT Statements Wi
cfb0: 74 68 69 6e 0a 20 20 20 20 54 72 69 67 67 65 72  thin.    Trigger
cfc0: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s</h3>..<p>^The 
cfd0: 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54  [UPDATE], [DELET
cfe0: 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d  E], and [INSERT]
cff0: 0a 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68  .statements with
d000: 69 6e 20 74 72 69 67 67 65 72 73 20 64 6f 20 6e  in triggers do n
d010: 6f 74 20 73 75 70 70 6f 72 74 0a 74 68 65 20 66  ot support.the f
d020: 75 6c 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 5b  ull syntax for [
d030: 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45  UPDATE], [DELETE
d040: 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 20  ], and [INSERT] 
d050: 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 54 68 65  statements.  The
d060: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74 72   following.restr
d070: 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f  ictions apply:</
d080: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ul>.<li><p>
d090: 0a 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66  .  ^(The name of
d0a0: 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
d0b0: 20 6d 6f 64 69 66 69 65 64 20 69 6e 20 61 6e 20   modified in an 
d0c0: 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54  [UPDATE], [DELET
d0d0: 45 5d 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a  E], or [INSERT].
d0e0: 20 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74    statement must
d0f0: 20 62 65 20 61 6e 20 75 6e 71 75 61 6c 69 66 69   be an unqualifi
d100: 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20  ed table name.  
d110: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
d120: 6f 6e 65 20 6d 75 73 74 0a 20 20 75 73 65 20 6a  one must.  use j
d130: 75 73 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61 6d  ust "<i>tablenam
d140: 65 3c 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e 64  e</i>" not "<i>d
d150: 61 74 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c  atabase</i><b>.<
d160: 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c  /b><i>tablename<
d170: 2f 69 3e 22 0a 20 20 77 68 65 6e 20 73 70 65 63  /i>".  when spec
d180: 69 66 79 69 6e 67 20 74 68 65 20 74 61 62 6c 65  ifying the table
d190: 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20  .)^  ^The table 
d1a0: 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 6d  to be modified m
d1b0: 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68 65  ust exist in the
d1c0: 0a 20 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  .  same database
d1d0: 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6f 72   as the table or
d1e0: 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
d1f0: 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
d200: 74 61 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f  tached..  </p></
d210: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  li>..<li><p>.  ^
d220: 54 68 65 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  The "INSERT INTO
d230: 20 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44 45   <i>table</i> DE
d240: 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f  FAULT VALUES" fo
d250: 72 6d 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52  rm of the [INSER
d260: 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 69  T] statement.  i
d270: 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e  s not supported.
d280: 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  .  </p></li>..<l
d290: 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e 44  i><p>.  ^The IND
d2a0: 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20  EXED BY and NOT 
d2b0: 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20  INDEXED clauses 
d2c0: 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65  are not supporte
d2d0: 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 61  d for [UPDATE] a
d2e0: 6e 64 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73 74  nd.  [DELETE] st
d2f0: 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e  atements..  </p>
d300: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20  </li>..<li><p>. 
d310: 20 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59 20   ^(The ORDER BY 
d320: 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
d330: 73 20 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61 6e  s on [UPDATE] an
d340: 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65  d [DELETE] state
d350: 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20 20  ments are not.  
d360: 73 75 70 70 6f 72 74 65 64 2e 20 20 4f 52 44 45  supported.  ORDE
d370: 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 61  R BY and LIMIT a
d380: 72 65 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20  re not normally 
d390: 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55  supported for [U
d3a0: 50 44 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45 4c  PDATE] or.  [DEL
d3b0: 45 54 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e 74  ETE] in any cont
d3c0: 65 78 74 20 62 75 74 20 63 61 6e 20 62 65 20 65  ext but can be e
d3d0: 6e 61 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d 6c  nabled for top-l
d3e0: 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 73 0a  evel statements.
d3f0: 20 20 75 73 69 6e 67 20 74 68 65 20 5b 53 51 4c    using the [SQL
d400: 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
d410: 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 20  E_DELETE_LIMIT] 
d420: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
d430: 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a 20  ion.  However,. 
d440: 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69   that compile-ti
d450: 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20 61  me option only a
d460: 70 70 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c 65  pplies to top-le
d470: 76 65 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e 64  vel [UPDATE] and
d480: 20 5b 44 45 4c 45 54 45 5d 0a 20 20 73 74 61 74   [DELETE].  stat
d490: 65 6d 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50 44  ements, not [UPD
d4a0: 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45  ATE] and [DELETE
d4b0: 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  ] statements wit
d4c0: 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 0a  hin triggers.)^.
d4d0: 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69    </p></li>..<li
d4e0: 3e 3c 70 3e 0a 20 20 5e 5b 63 6f 6d 6d 6f 6e 2d  ><p>.  ^[common-
d4f0: 74 61 62 6c 65 2d 65 78 70 72 65 73 73 69 6f 6e  table-expression
d500: 7c 43 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  |Common table ex
d510: 70 72 65 73 73 69 6f 6e 5d 20 61 72 65 20 6e 6f  pression] are no
d520: 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a  t supported for.
d530: 20 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 73    statements ins
d540: 69 64 65 20 6f 66 20 74 72 69 67 67 65 72 73 2e  ide of triggers.
d550: 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75  .  </p></li>.</u
d560: 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  l>..<tcl>hd_frag
d570: 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f  ment instead_of_
d580: 74 72 69 67 67 65 72 20 7b 49 4e 53 54 45 41 44  trigger {INSTEAD
d590: 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46   OF} {INSTEAD OF
d5a0: 20 74 72 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a   trigger}</tcl>.
d5b0: 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f 46 20 74  <h3>INSTEAD OF t
d5c0: 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  riggers</h3>..<p
d5d0: 3e 5e 54 72 69 67 67 65 72 73 20 6d 61 79 20 62  >^Triggers may b
d5e0: 65 20 63 72 65 61 74 65 64 20 6f 6e 20 5b 76 69  e created on [vi
d5f0: 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c 20 61 73  ews], as well as
d600: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73   ordinary tables
d610: 2c 20 62 79 0a 73 70 65 63 69 66 79 69 6e 67 20  , by.specifying 
d620: 49 4e 53 54 45 41 44 20 4f 46 20 69 6e 20 74 68  INSTEAD OF in th
d630: 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  e CREATE TRIGGER
d640: 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 49 66   statement. .^If
d650: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 4f 4e 20   one or more ON 
d660: 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45 4c 45 54  INSERT, ON DELET
d670: 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54 45 20 74  E.or ON UPDATE t
d680: 72 69 67 67 65 72 73 20 61 72 65 20 64 65 66 69  riggers are defi
d690: 6e 65 64 20 6f 6e 20 61 20 76 69 65 77 2c 20 74  ned on a view, t
d6a0: 68 65 6e 20 69 74 20 69 73 20 6e 6f 74 20 61 6e  hen it is not an
d6b0: 0a 65 72 72 6f 72 20 74 6f 20 65 78 65 63 75 74  .error to execut
d6c0: 65 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  e an INSERT, DEL
d6d0: 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
d6e0: 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65 20 76  atement on the v
d6f0: 69 65 77 2c 20 0a 72 65 73 70 65 63 74 69 76 65  iew, .respective
d700: 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64 2c 0a 65  ly.  ^Instead,.e
d710: 78 65 63 75 74 69 6e 67 20 61 6e 20 49 4e 53 45  xecuting an INSE
d720: 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50  RT, DELETE or UP
d730: 44 41 54 45 20 6f 6e 20 74 68 65 20 76 69 65 77  DATE on the view
d740: 20 63 61 75 73 65 73 20 74 68 65 20 61 73 73 6f   causes the asso
d750: 63 69 61 74 65 64 0a 74 72 69 67 67 65 72 73 20  ciated.triggers 
d760: 74 6f 20 66 69 72 65 2e 20 5e 54 68 65 20 72 65  to fire. ^The re
d770: 61 6c 20 74 61 62 6c 65 73 20 75 6e 64 65 72 6c  al tables underl
d780: 79 69 6e 67 20 74 68 65 20 76 69 65 77 20 61 72  ying the view ar
d790: 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65 64 0a 28  e not modified.(
d7a0: 65 78 63 65 70 74 20 70 6f 73 73 69 62 6c 79 20  except possibly 
d7b0: 65 78 70 6c 69 63 69 74 6c 79 2c 20 62 79 20 61  explicitly, by a
d7c0: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
d7d0: 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65  ).</p>..<p>^Note
d7e0: 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74   that the [sqlit
d7f0: 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e  e3_changes()] an
d800: 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  d [sqlite3_total
d810: 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65  _changes()] inte
d820: 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74 20 63 6f  rfaces.do not co
d830: 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74  unt INSTEAD OF t
d840: 72 69 67 67 65 72 20 66 69 72 69 6e 67 73 2c 20  rigger firings, 
d850: 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e 74 5f 63  but the.[count_c
d860: 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 20 64  hanges pragma] d
d870: 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53 54 45 41  oes count INSTEA
d880: 44 20 4f 46 20 74 72 69 67 67 65 72 20 66 69 72  D OF trigger fir
d890: 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 6f  ing.</p>..<h3>So
d8a0: 6d 65 20 45 78 61 6d 70 6c 65 20 54 72 69 67 67  me Example Trigg
d8b0: 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41  ers</h3>..<p>^(A
d8c0: 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63 75 73  ssuming that cus
d8d0: 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20 61 72  tomer records ar
d8e0: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
d8f0: 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61 62 6c  "customers" tabl
d900: 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72 64 65  e, and.that orde
d910: 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74  r records are st
d920: 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f 72 64  ored in the "ord
d930: 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68 65 20  ers" table, the 
d940: 66 6f 6c 6c 6f 77 69 6e 67 0a 55 50 44 41 54 45  following.UPDATE
d950: 20 74 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73   trigger.ensures
d960: 20 74 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69   that all associ
d970: 61 74 65 64 20 6f 72 64 65 72 73 20 61 72 65 20  ated orders are 
d980: 72 65 64 69 72 65 63 74 65 64 20 77 68 65 6e 20  redirected when 
d990: 61 20 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67  a customer chang
d9a0: 65 73 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64  es.his or her ad
d9b0: 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  dress:</p>..<tcl
d9c0: 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54  >Example {.CREAT
d9d0: 45 20 54 52 49 47 47 45 52 20 75 70 64 61 74 65  E TRIGGER update
d9e0: 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73  _customer_addres
d9f0: 73 20 55 50 44 41 54 45 20 4f 46 20 61 64 64 72  s UPDATE OF addr
da00: 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73  ess ON customers
da10: 20 0a 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50   .  BEGIN.    UP
da20: 44 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20  DATE orders SET 
da30: 61 64 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64  address = new.ad
da40: 64 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74  dress WHERE cust
da50: 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e  omer_name = old.
da60: 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f  name;.  END;.}</
da70: 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68  tcl>..<p>With th
da80: 69 73 20 74 72 69 67 67 65 72 20 69 6e 73 74 61  is trigger insta
da90: 6c 6c 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20  lled, executing 
daa0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f  the statement:</
dab0: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
dac0: 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d   {.UPDATE custom
dad0: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
dae0: 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57  = '1 Main St.' W
daf0: 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63  HERE name = 'Jac
db00: 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c  k Jones';.}</tcl
db10: 3e 0a 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65  >..<p>causes the
db20: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65   following to be
db30: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65   automatically e
db40: 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74  xecuted:</p>..<t
db50: 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44  cl>Example {.UPD
db60: 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61  ATE orders SET a
db70: 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e  ddress = '1 Main
db80: 20 53 74 2e 27 20 57 48 45 52 45 20 63 75 73 74   St.' WHERE cust
db90: 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63  omer_name = 'Jac
dba0: 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c  k Jones';.}</tcl
dbb0: 3e 29 5e 0a 0a 3c 70 3e 46 6f 72 20 61 6e 20 65  >)^..<p>For an e
dbc0: 78 61 6d 70 6c 65 20 6f 66 20 61 6e 20 49 4e 53  xample of an INS
dbd0: 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 2c  TEAD OF trigger,
dbe0: 20 63 6f 6e 73 69 64 65 72 20 74 68 65 20 66 6f   consider the fo
dbf0: 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d 61 3a 0a  llowing schema:.
dc00: 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a  .<tcl>Example {.
dc10: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 75 73  CREATE TABLE cus
dc20: 74 6f 6d 65 72 28 0a 20 20 63 75 73 74 5f 69 64  tomer(.  cust_id
dc30: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
dc40: 20 4b 45 59 2c 0a 20 20 63 75 73 74 5f 6e 61 6d   KEY,.  cust_nam
dc50: 65 20 54 45 58 54 2c 0a 20 20 63 75 73 74 5f 61  e TEXT,.  cust_a
dc60: 64 64 72 20 54 45 58 54 0a 29 3b 0a 43 52 45 41  ddr TEXT.);.CREA
dc70: 54 45 20 56 49 45 57 20 63 75 73 74 6f 6d 65 72  TE VIEW customer
dc80: 5f 61 64 64 72 65 73 73 20 41 53 0a 20 20 20 53  _address AS.   S
dc90: 45 4c 45 43 54 20 63 75 73 74 5f 69 64 2c 20 63  ELECT cust_id, c
dca0: 75 73 74 5f 61 64 64 72 20 46 52 4f 4d 20 63 75  ust_addr FROM cu
dcb0: 73 74 6f 6d 65 72 3b 0a 43 52 45 41 54 45 20 54  stomer;.CREATE T
dcc0: 52 49 47 47 45 52 20 63 75 73 74 5f 61 64 64 72  RIGGER cust_addr
dcd0: 5f 63 68 6e 67 0a 49 4e 53 54 45 41 44 20 4f 46  _chng.INSTEAD OF
dce0: 20 55 50 44 41 54 45 20 4f 46 20 63 75 73 74 5f   UPDATE OF cust_
dcf0: 61 64 64 72 20 4f 4e 20 63 75 73 74 6f 6d 65 72  addr ON customer
dd00: 5f 61 64 64 72 65 73 73 0a 42 45 47 49 4e 0a 20  _address.BEGIN. 
dd10: 20 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72   UPDATE customer
dd20: 20 53 45 54 20 63 75 73 74 5f 61 64 64 72 3d 4e   SET cust_addr=N
dd30: 45 57 2e 63 75 73 74 5f 61 64 64 72 0a 20 20 20  EW.cust_addr.   
dd40: 57 48 45 52 45 20 63 75 73 74 5f 69 64 3d 4e 45  WHERE cust_id=NE
dd50: 57 2e 63 75 73 74 5f 69 64 3b 0a 45 4e 44 3b 0a  W.cust_id;.END;.
dd60: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68  }</tcl>..<p>With
dd70: 20 74 68 65 20 73 63 68 65 6d 61 20 61 62 6f 76   the schema abov
dd80: 65 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 6f  e, a statement o
dd90: 66 20 74 68 65 20 66 6f 72 6d 3a 3c 2f 70 3e 0a  f the form:</p>.
dda0: 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a  .<tcl>Example {.
ddb0: 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72 5f  UPDATE customer_
ddc0: 61 64 64 72 65 73 73 20 53 45 54 20 63 75 73 74  address SET cust
ddd0: 5f 61 64 64 72 3d 24 6e 65 77 5f 61 64 64 72 65  _addr=$new_addre
dde0: 73 73 20 57 48 45 52 45 20 63 75 73 74 5f 69 64  ss WHERE cust_id
ddf0: 3d 24 63 75 73 74 5f 69 64 3b 0a 7d 3c 2f 74 63  =$cust_id;.}</tc
de00: 6c 3e 0a 0a 3c 70 3e 43 61 75 73 65 73 20 74 68  l>..<p>Causes th
de10: 65 20 63 75 73 74 6f 6d 65 72 2e 63 75 73 74 5f  e customer.cust_
de20: 61 64 64 72 20 66 69 65 6c 64 20 74 6f 20 62 65  addr field to be
de30: 20 75 70 64 61 74 65 64 20 66 6f 72 20 61 20 73   updated for a s
de40: 70 65 63 69 66 69 63 0a 63 75 73 74 6f 6d 65 72  pecific.customer
de50: 20 65 6e 74 72 79 20 74 68 61 74 20 68 61 73 20   entry that has 
de60: 63 75 73 74 6f 6d 65 72 2e 63 75 73 74 5f 69 64  customer.cust_id
de70: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 24 63   equal to the $c
de80: 75 73 74 5f 69 64 20 70 61 72 61 6d 65 74 65 72  ust_id parameter
de90: 2e 0a 4e 6f 74 65 20 68 6f 77 20 74 68 65 20 76  ..Note how the v
dea0: 61 6c 75 65 73 20 61 73 73 69 67 6e 65 64 20 74  alues assigned t
deb0: 6f 20 74 68 65 20 76 69 65 77 20 61 72 65 20 6d  o the view are m
dec0: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 20 61 73  ade available as
ded0: 20 66 69 65 6c 64 0a 69 6e 20 74 68 65 20 73 70   field.in the sp
dee0: 65 63 69 61 6c 20 22 4e 45 57 22 20 74 61 62 6c  ecial "NEW" tabl
def0: 65 20 77 69 74 68 69 6e 20 74 68 65 20 74 72 69  e within the tri
df00: 67 67 65 72 20 62 6f 64 79 2e 3c 2f 70 3e 0a 0a  gger body.</p>..
df10: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
df20: 20 75 6e 64 65 66 5f 62 65 66 6f 72 65 20 7b 75   undef_before {u
df30: 6e 64 65 66 69 6e 65 64 20 42 45 46 4f 52 45 20  ndefined BEFORE 
df40: 74 72 69 67 67 65 72 20 62 65 68 61 76 69 6f 72  trigger behavior
df50: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 61 75 74  }</tcl>.<h3>Caut
df60: 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55 73 65 20  ions On The Use 
df70: 4f 66 20 42 45 46 4f 52 45 20 74 72 69 67 67 65  Of BEFORE trigge
df80: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61  rs</h3>..<p>If a
df90: 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 6f   BEFORE UPDATE o
dfa0: 72 20 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20  r BEFORE DELETE 
dfb0: 74 72 69 67 67 65 72 20 6d 6f 64 69 66 69 65 73  trigger modifies
dfc0: 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f   or deletes a ro
dfd0: 77 0a 74 68 61 74 20 77 61 73 20 74 6f 20 68 61  w.that was to ha
dfe0: 76 65 20 62 65 65 6e 20 75 70 64 61 74 65 64 20  ve been updated 
dff0: 6f 72 20 64 65 6c 65 74 65 64 2c 20 74 68 65 6e  or deleted, then
e000: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
e010: 68 65 20 73 75 62 73 65 71 75 65 6e 74 0a 75 70  he subsequent.up
e020: 64 61 74 65 20 6f 72 20 64 65 6c 65 74 65 20 6f  date or delete o
e030: 70 65 72 61 74 69 6f 6e 20 69 73 20 75 6e 64 65  peration is unde
e040: 66 69 6e 65 64 2e 20 20 46 75 72 74 68 65 72 6d  fined.  Furtherm
e050: 6f 72 65 2c 20 69 66 20 61 20 42 45 46 4f 52 45  ore, if a BEFORE
e060: 20 74 72 69 67 67 65 72 0a 6d 6f 64 69 66 69 65   trigger.modifie
e070: 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72  s or deletes a r
e080: 6f 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 75  ow, then it is u
e090: 6e 64 65 66 69 6e 65 64 20 77 68 65 74 68 65 72  ndefined whether
e0a0: 20 6f 72 20 6e 6f 74 20 41 46 54 45 52 20 74 72   or not AFTER tr
e0b0: 69 67 67 65 72 73 0a 74 68 61 74 20 77 6f 75 6c  iggers.that woul
e0c0: 64 20 68 61 76 65 20 6f 74 68 65 72 77 69 73 65  d have otherwise
e0d0: 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65 20 72 6f   run on those ro
e0e0: 77 73 20 77 69 6c 6c 20 69 6e 20 66 61 63 74 20  ws will in fact 
e0f0: 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  run..</p>..<p>Th
e100: 65 20 76 61 6c 75 65 20 6f 66 20 4e 45 57 2e 72  e value of NEW.r
e110: 6f 77 69 64 20 69 73 20 75 6e 64 65 66 69 6e 65  owid is undefine
e120: 64 20 69 6e 20 61 20 42 45 46 4f 52 45 20 49 4e  d in a BEFORE IN
e130: 53 45 52 54 20 74 72 69 67 67 65 72 20 69 6e 20  SERT trigger in 
e140: 77 68 69 63 68 0a 74 68 65 20 72 6f 77 69 64 20  which.the rowid 
e150: 69 73 20 6e 6f 74 20 65 78 70 6c 69 63 69 74 6c  is not explicitl
e160: 79 20 73 65 74 20 74 6f 20 61 6e 20 69 6e 74 65  y set to an inte
e170: 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63  ger.</p>..<p>Bec
e180: 61 75 73 65 20 6f 66 20 74 68 65 20 62 65 68 61  ause of the beha
e190: 76 69 6f 72 73 20 64 65 73 63 72 69 62 65 64 20  viors described 
e1a0: 61 62 6f 76 65 2c 20 70 72 6f 67 72 61 6d 6d 65  above, programme
e1b0: 72 73 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65  rs are encourage
e1c0: 64 20 74 6f 0a 70 72 65 66 65 72 20 41 46 54 45  d to.prefer AFTE
e1d0: 52 20 74 72 69 67 67 65 72 73 20 6f 76 65 72 20  R triggers over 
e1e0: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 73 2e  BEFORE triggers.
e1f0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
e200: 61 67 6d 65 6e 74 20 72 61 69 73 65 20 7b 52 41  agment raise {RA
e210: 49 53 45 20 66 75 6e 63 74 69 6f 6e 7d 3c 2f 74  ISE function}</t
e220: 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 52 41 49 53  cl>.<h3>The RAIS
e230: 45 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f 68 33  E() function</h3
e240: 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70 65 63 69 61  >..<p>^(A specia
e250: 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52  l SQL function R
e260: 41 49 53 45 28 29 20 6d 61 79 20 62 65 20 75 73  AISE() may be us
e270: 65 64 20 77 69 74 68 69 6e 20 61 20 74 72 69 67  ed within a trig
e280: 67 65 72 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a 77  ger-program,)^.w
e290: 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ith the followin
e2a0: 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c  g syntax</p> ..<
e2b0: 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
e2c0: 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e  m raise-function
e2d0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65  </tcl>..<p>^(Whe
e2e0: 6e 20 6f 6e 65 20 6f 66 20 52 41 49 53 45 28 52  n one of RAISE(R
e2f0: 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e 29 2c 20 52 41  OLLBACK,...), RA
e300: 49 53 45 28 41 42 4f 52 54 2c 2e 2e 2e 29 20 6f  ISE(ABORT,...) o
e310: 72 20 52 41 49 53 45 28 46 41 49 4c 2c 2e 2e 2e  r RAISE(FAIL,...
e320: 29 0a 69 73 20 63 61 6c 6c 65 64 20 64 75 72 69  ).is called duri
e330: 6e 67 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72  ng trigger-progr
e340: 61 6d 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74 68  am.execution, th
e350: 65 20 73 70 65 63 69 66 69 65 64 20 5b 4f 4e 20  e specified [ON 
e360: 43 4f 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65 73  CONFLICT] proces
e370: 73 69 6e 67 20 69 73 20 70 65 72 66 6f 72 6d 65  sing is performe
e380: 64 0a 74 68 65 20 63 75 72 72 65 6e 74 20 71 75  d.the current qu
e390: 65 72 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 29  ery terminates.)
e3a0: 5e 0a 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  ^.An error code 
e3b0: 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54  of [SQLITE_CONST
e3c0: 52 41 49 4e 54 5d 20 69 73 20 72 65 74 75 72 6e  RAINT] is return
e3d0: 65 64 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63  ed to the applic
e3e0: 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74  ation,.along wit
e3f0: 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  h the specified 
e400: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c 2f  error message.</
e410: 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41 49  p>..<p>^When RAI
e420: 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20 63 61  SE(IGNORE) is ca
e430: 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61 69 6e  lled, the remain
e440: 64 65 72 20 6f 66 20 74 68 65 20 63 75 72 72 65  der of the curre
e450: 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  nt trigger progr
e460: 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d 65 6e  am,.the statemen
e470: 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  t that caused th
e480: 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
e490: 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 64  m to execute and
e4a0: 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74 0a   any subsequent.
e4b0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
e4c0: 20 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65   that would have
e4d0: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 61   been executed a
e4e0: 72 65 20 61 62 61 6e 64 6f 6e 65 64 2e 20 5e 4e  re abandoned. ^N
e4f0: 6f 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67  o database.chang
e500: 65 73 20 61 72 65 20 72 6f 6c 6c 65 64 20 62 61  es are rolled ba
e510: 63 6b 2e 20 20 5e 49 66 20 74 68 65 20 73 74 61  ck.  ^If the sta
e520: 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73  tement that caus
e530: 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ed the trigger p
e540: 72 6f 67 72 61 6d 0a 74 6f 20 65 78 65 63 75 74  rogram.to execut
e550: 65 20 69 73 20 69 74 73 65 6c 66 20 70 61 72 74  e is itself part
e560: 20 6f 66 20 61 20 74 72 69 67 67 65 72 20 70 72   of a trigger pr
e570: 6f 67 72 61 6d 2c 20 74 68 65 6e 20 74 68 61 74  ogram, then that
e580: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
e590: 0a 72 65 73 75 6d 65 73 20 65 78 65 63 75 74 69  .resumes executi
e5a0: 6f 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  on at the beginn
e5b0: 69 6e 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20  ing of the next 
e5c0: 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  step..</p>..<tcl
e5d0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 65 6d  >hd_fragment tem
e5e0: 70 74 72 69 67 20 7b 54 45 4d 50 20 74 72 69 67  ptrig {TEMP trig
e5f0: 67 65 72 73 20 6f 6e 20 6e 6f 6e 2d 54 45 4d 50  gers on non-TEMP
e600: 20 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c   tables}</tcl>.<
e610: 68 33 3e 54 45 4d 50 20 54 72 69 67 67 65 72 73  h3>TEMP Triggers
e620: 20 6f 6e 20 4e 6f 6e 2d 54 45 4d 50 20 54 61 62   on Non-TEMP Tab
e630: 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41  les</h3>..<p>^(A
e640: 20 74 72 69 67 67 65 72 20 6e 6f 72 6d 61 6c 6c   trigger normall
e650: 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20  y exists in the 
e660: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73  same database as
e670: 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
e680: 0a 61 66 74 65 72 20 74 68 65 20 22 4f 4e 22 20  .after the "ON" 
e690: 6b 65 79 77 6f 72 64 20 69 6e 20 74 68 65 20 43  keyword in the C
e6a0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73 74  REATE TRIGGER st
e6b0: 61 74 65 6d 65 6e 74 2e 20 20 45 78 63 65 70 74  atement.  Except
e6c0: 2c 20 69 74 20 69 73 0a 70 6f 73 73 69 62 6c 65  , it is.possible
e6d0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 54 45 4d   to create a TEM
e6e0: 50 20 54 52 49 47 47 45 52 20 6f 6e 20 61 20 74  P TRIGGER on a t
e6f0: 61 62 6c 65 20 69 6e 20 61 6e 6f 74 68 65 72 20  able in another 
e700: 64 61 74 61 62 61 73 65 2e 29 5e 20 20 0a 53 75  database.)^  .Su
e710: 63 68 20 61 20 74 72 69 67 67 65 72 20 77 69 6c  ch a trigger wil
e720: 6c 20 6f 6e 6c 79 20 66 69 72 65 20 77 68 65 6e  l only fire when
e730: 20 63 68 61 6e 67 65 73 0a 61 72 65 20 6d 61 64   changes.are mad
e740: 65 20 74 6f 20 74 68 65 20 74 61 72 67 65 74 20  e to the target 
e750: 74 61 62 6c 65 20 62 79 20 74 68 65 20 61 70 70  table by the app
e760: 6c 69 63 61 74 69 6f 6e 20 74 68 61 74 20 64 65  lication that de
e770: 66 69 6e 65 64 20 74 68 65 20 74 72 69 67 67 65  fined the trigge
e780: 72 2e 0a 4f 74 68 65 72 20 61 70 70 6c 69 63 61  r..Other applica
e790: 74 69 6f 6e 73 20 74 68 61 74 20 6d 6f 64 69 66  tions that modif
e7a0: 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  y the database w
e7b0: 69 6c 6c 20 6e 6f 74 20 62 65 20 61 62 6c 65 20  ill not be able 
e7c0: 74 6f 20 73 65 65 20 74 68 65 0a 54 45 4d 50 20  to see the.TEMP 
e7d0: 74 72 69 67 67 65 72 20 61 6e 64 20 68 65 6e 63  trigger and henc
e7e0: 65 20 63 61 6e 6e 6f 74 20 72 75 6e 20 74 68 65  e cannot run the
e7f0: 20 74 72 69 67 67 65 72 2e 3c 2f 70 3e 0a 0a 3c   trigger.</p>..<
e800: 70 3e 57 68 65 6e 20 64 65 66 69 6e 69 6e 67 20  p>When defining 
e810: 61 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 6f  a TEMP trigger o
e820: 6e 20 61 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62  n a non-TEMP tab
e830: 6c 65 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74  le, it is import
e840: 61 6e 74 20 74 6f 0a 73 70 65 63 69 66 79 20 74  ant to.specify t
e850: 68 65 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  he database hold
e860: 69 6e 67 20 74 68 65 20 6e 6f 6e 2d 54 45 4d 50  ing the non-TEMP
e870: 20 74 61 62 6c 65 2e 20 20 46 6f 72 20 65 78 61   table.  For exa
e880: 6d 70 6c 65 2c 0a 69 6e 20 74 68 65 20 66 6f 6c  mple,.in the fol
e890: 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
e8a0: 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e  , it is importan
e8b0: 74 20 74 6f 20 73 61 79 20 22 6d 61 69 6e 2e 74  t to say "main.t
e8c0: 61 62 31 22 20 69 6e 73 74 65 61 64 0a 6f 66 20  ab1" instead.of 
e8d0: 6a 75 73 74 20 22 74 61 62 31 22 3a 3c 2f 70 3e  just "tab1":</p>
e8e0: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
e8f0: 72 65 3e 0a 43 52 45 41 54 45 20 54 45 4d 50 20  re>.CREATE TEMP 
e900: 54 52 49 47 47 45 52 20 65 78 31 20 41 46 54 45  TRIGGER ex1 AFTE
e910: 52 20 49 4e 53 45 52 54 20 4f 4e 20 3c 62 3e 6d  R INSERT ON <b>m
e920: 61 69 6e 2e 3c 2f 62 3e 74 61 62 31 20 42 45 47  ain.</b>tab1 BEG
e930: 49 4e 20 2e 2e 2e 0a 3c 2f 70 72 65 3e 3c 2f 62  IN ....</pre></b
e940: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 46  lockquote>..<p>F
e950: 61 69 6c 75 72 65 20 74 6f 20 73 70 65 63 69 66  ailure to specif
e960: 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e  y the database n
e970: 61 6d 65 20 6f 6e 20 74 68 65 20 74 61 72 67 65  ame on the targe
e980: 74 20 74 61 62 6c 65 20 63 6f 75 6c 64 20 72 65  t table could re
e990: 73 75 6c 74 0a 69 6e 20 74 68 65 20 54 45 4d 50  sult.in the TEMP
e9a0: 20 74 72 69 67 67 65 72 20 62 65 69 6e 67 20 72   trigger being r
e9b0: 65 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 74  eattached to a t
e9c0: 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 73 61  able with the sa
e9d0: 6d 65 20 6e 61 6d 65 20 69 6e 0a 61 6e 6f 74 68  me name in.anoth
e9e0: 65 72 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  er database when
e9f0: 65 76 65 72 20 61 6e 79 20 73 63 68 65 6d 61 20  ever any schema 
ea00: 63 68 61 6e 67 65 20 6f 63 63 75 72 73 2e 3c 2f  change occurs.</
ea10: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
ea20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ea60: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
ea70: 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20  n {CREATE VIEW} 
ea80: 7b 63 72 65 61 74 65 76 69 65 77 7d 20 7b 7b 43  {createview} {{C
ea90: 52 45 41 54 45 20 56 49 45 57 7d 20 76 69 65 77  REATE VIEW} view
eaa0: 20 2a 76 69 65 77 73 7d 0a 0a 52 65 63 75 72 73   *views}..Recurs
eab0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
eac0: 20 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74 6d   create-view-stm
ead0: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
eae0: 65 20 43 52 45 41 54 45 20 56 49 45 57 20 63 6f  e CREATE VIEW co
eaf0: 6d 6d 61 6e 64 20 61 73 73 69 67 6e 73 20 61 20  mmand assigns a 
eb00: 6e 61 6d 65 20 74 6f 20 61 20 70 72 65 2d 70 61  name to a pre-pa
eb10: 63 6b 61 67 65 64 20 0a 5b 53 45 4c 45 43 54 5d  ckaged .[SELECT]
eb20: 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f 6e   statement. .^On
eb30: 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20 63  ce the view is c
eb40: 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20 62  reated, it can b
eb50: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46 52  e used in the FR
eb60: 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e 6f  OM clause.of ano
eb70: 74 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69 6e  ther [SELECT] in
eb80: 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
eb90: 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70  e name..</p>..<p
eba0: 3e 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22 20  >^If the "TEMP" 
ebb0: 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20 6b  or "TEMPORARY" k
ebc0: 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69 6e  eyword occurs in
ebd0: 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54 45   between "CREATE
ebe0: 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68 65  ".and "VIEW" the
ebf0: 6e 20 74 68 65 20 76 69 65 77 20 74 68 61 74 20  n the view that 
ec00: 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f 6e  is created is on
ec10: 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74 68  ly visible to th
ec20: 65 0a 70 72 6f 63 65 73 73 20 74 68 61 74 20 6f  e.process that o
ec30: 70 65 6e 65 64 20 74 68 65 20 64 61 74 61 62 61  pened the databa
ec40: 73 65 20 61 6e 64 20 69 73 20 61 75 74 6f 6d 61  se and is automa
ec50: 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20  tically deleted 
ec60: 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73  when.the databas
ec70: 65 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e  e is closed.</p>
ec80: 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b  ..<p> ^If a &lt;
ec90: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74  database-name&gt
eca0: 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  ; is specified, 
ecb0: 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 69 73  then the view is
ecc0: 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68 65   created in .the
ecd0: 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e   named database.
ece0: 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72   ^It is an error
ecf0: 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68   to specify both
ed00: 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d   a &lt;database-
ed10: 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68 65  name&gt;.and the
ed20: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f 6e   TEMP keyword on
ed30: 20 61 20 56 49 45 57 2c 20 75 6e 6c 65 73 73 20   a VIEW, unless 
ed40: 74 68 65 20 26 6c 74 3b 64 61 74 61 62 61 73 65  the &lt;database
ed50: 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 22 74 65  -name&gt; is "te
ed60: 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 64 61 74 61  mp"..^If no data
ed70: 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70 65  base name is spe
ed80: 63 69 66 69 65 64 2c 20 61 6e 64 20 74 68 65 20  cified, and the 
ed90: 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73 20  TEMP keyword is 
eda0: 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74 68 65  not present,.the
edb0: 20 56 49 45 57 20 69 73 20 63 72 65 61 74 65 64   VIEW is created
edc0: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
edd0: 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  abase.</p>..<p>^
ede0: 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c 45  You cannot [DELE
edf0: 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 6f  TE], [INSERT], o
ee00: 72 20 5b 55 50 44 41 54 45 5d 20 61 20 76 69 65  r [UPDATE] a vie
ee10: 77 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72  w.  ^Views are r
ee20: 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c  ead-only .in SQL
ee30: 69 74 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  ite.  ^However, 
ee40: 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 79 6f  in many cases yo
ee50: 75 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49 4e  u can use an.[IN
ee60: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
ee70: 5d 20 6f 6e 20 74 68 65 20 76 69 65 77 20 74 6f  ] on the view to
ee80: 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68 65   accomplish .the
ee90: 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e 56   same thing.  ^V
eea0: 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  iews are removed
eeb0: 20 0a 77 69 74 68 20 74 68 65 20 5b 44 52 4f 50   .with the [DROP
eec0: 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c   VIEW] command.<
eed0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
eee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef20: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
ef30: 6e 20 7b 43 52 45 41 54 45 20 56 49 52 54 55 41  n {CREATE VIRTUA
ef40: 4c 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65  L TABLE} {create
ef50: 76 74 61 62 7d 20 7b 7b 43 52 45 41 54 45 20 56  vtab} {{CREATE V
ef60: 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a  IRTUAL TABLE}}..
ef70: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
ef80: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69  iagram create-vi
ef90: 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d 74  rtual-table-stmt
efa0: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 5b 76  .</tcl>..<p>A [v
efb0: 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 69 73  irtual table] is
efc0: 20 61 6e 20 69 6e 74 65 72 66 61 63 65 20 74 6f   an interface to
efd0: 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 73 74 6f   an external sto
efe0: 72 61 67 65 20 6f 72 20 63 6f 6d 70 75 74 61 74  rage or computat
eff0: 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68 61 74 20  ion.engine that 
f000: 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 20  appears to be a 
f010: 74 61 62 6c 65 20 62 75 74 20 64 6f 65 73 20 6e  table but does n
f020: 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74 6f 72  ot actually stor
f030: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e  e information.in
f040: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
f050: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 67  le.</p>..<p>In g
f060: 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63 61 6e 20  eneral, you can 
f070: 64 6f 20 61 6e 79 74 68 69 6e 67 20 77 69 74 68  do anything with
f080: 20 61 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c   a [virtual tabl
f090: 65 5d 20 74 68 61 74 20 63 61 6e 20 62 65 20 64  e] that can be d
f0a0: 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f 72 64 69  one.with an ordi
f0b0: 6e 61 72 79 20 74 61 62 6c 65 2c 20 65 78 63 65  nary table, exce
f0c0: 70 74 20 74 68 61 74 20 5e 79 6f 75 20 63 61 6e  pt that ^you can
f0d0: 6e 6f 74 20 63 72 65 61 74 65 20 69 6e 64 69 63  not create indic
f0e0: 65 73 20 6f 72 20 74 72 69 67 67 65 72 73 20 6f  es or triggers o
f0f0: 6e 20 61 0a 76 69 72 74 75 61 6c 20 74 61 62 6c  n a.virtual tabl
f100: 65 2e 20 20 5e 53 6f 6d 65 20 76 69 72 74 75 61  e.  ^Some virtua
f110: 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
f120: 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 69 6d  tations might im
f130: 70 6f 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a  pose additional.
f140: 72 65 73 74 72 69 63 74 69 6f 6e 73 2e 20 20 46  restrictions.  F
f150: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e 79  or example, many
f160: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
f170: 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f  are read-only.</
f180: 70 3e 0a 0a 3c 70 3e 54 68 65 20 26 6c 74 3b 6d  p>..<p>The &lt;m
f190: 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 69  odule-name&gt; i
f1a0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e  s the name of an
f1b0: 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 6d 70   object that imp
f1c0: 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69 72 74  lements.the virt
f1d0: 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54 68 65  ual table.  ^The
f1e0: 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65   &lt;module-name
f1f0: 26 67 74 3b 20 6d 75 73 74 20 62 65 20 72 65 67  &gt; must be reg
f200: 69 73 74 65 72 65 64 20 77 69 74 68 0a 74 68 65  istered with.the
f210: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
f220: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75 73 69 6e   connection usin
f230: 67 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  g.[sqlite3_creat
f240: 65 5f 6d 6f 64 75 6c 65 28 29 5d 20 6f 72 20 5b  e_module()] or [
f250: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
f260: 6f 64 75 6c 65 5f 76 32 28 29 5d 0a 70 72 69 6f  odule_v2()].prio
f270: 72 20 74 6f 20 69 73 73 75 69 6e 67 20 74 68 65  r to issuing the
f280: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
f290: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
f2a0: 0a 5e 54 68 65 20 6d 6f 64 75 6c 65 20 74 61 6b  .^The module tak
f2b0: 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  es zero or more 
f2c0: 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20  comma-separated 
f2d0: 61 72 67 75 6d 65 6e 74 73 2e 0a 5e 54 68 65 20  arguments..^The 
f2e0: 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65  arguments can be
f2f0: 20 6a 75 73 74 20 61 62 6f 75 74 20 61 6e 79 20   just about any 
f300: 74 65 78 74 20 61 73 20 6c 6f 6e 67 20 61 73 20  text as long as 
f310: 69 74 20 68 61 73 20 62 61 6c 61 6e 63 65 64 0a  it has balanced.
f320: 70 61 72 65 6e 74 68 65 73 65 73 2e 20 20 54 68  parentheses.  Th
f330: 65 20 61 72 67 75 6d 65 6e 74 20 73 79 6e 74 61  e argument synta
f340: 78 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 6c  x is sufficientl
f350: 79 20 67 65 6e 65 72 61 6c 20 74 68 61 74 20 74  y general that t
f360: 68 65 0a 61 72 67 75 6d 65 6e 74 73 20 63 61 6e  he.arguments can
f370: 20 62 65 20 6d 61 64 65 20 74 6f 20 61 70 70 65   be made to appe
f380: 61 72 20 61 73 20 5b 63 6f 6c 75 6d 6e 20 64 65  ar as [column de
f390: 66 69 6e 69 74 69 6f 6e 73 5d 20 69 6e 20 61 20  finitions] in a 
f3a0: 74 72 61 64 69 74 69 6f 6e 61 6c 0a 5b 43 52 45  traditional.[CRE
f3b0: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
f3c0: 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c 69 74 65 20  ment.  .^SQLite 
f3d0: 70 61 73 73 65 73 20 74 68 65 20 6d 6f 64 75 6c  passes the modul
f3e0: 65 20 61 72 67 75 6d 65 6e 74 73 20 64 69 72 65  e arguments dire
f3f0: 63 74 6c 79 0a 74 6f 20 74 68 65 20 5b 78 43 72  ctly.to the [xCr
f400: 65 61 74 65 5d 20 61 6e 64 20 5b 78 43 6f 6e 6e  eate] and [xConn
f410: 65 63 74 5d 20 6d 65 74 68 6f 64 73 20 6f 66 20  ect] methods of 
f420: 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
f430: 6d 65 6e 74 61 74 69 6f 6e 0a 77 69 74 68 6f 75  mentation.withou
f440: 74 20 61 6e 79 20 69 6e 74 65 72 70 72 65 74 61  t any interpreta
f450: 74 69 6f 6e 2e 20 20 49 74 20 69 73 20 74 68 65  tion.  It is the
f460: 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 0a   responsibility.
f470: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  of the module im
f480: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
f490: 70 61 72 73 65 20 61 6e 64 20 69 6e 74 65 72 70  parse and interp
f4a0: 72 65 74 20 69 74 73 20 6f 77 6e 20 61 72 67 75  ret its own argu
f4b0: 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ments.</p>..<p>^
f4c0: 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  A virtual table 
f4d0: 69 73 20 64 65 73 74 72 6f 79 65 64 20 75 73 69  is destroyed usi
f4e0: 6e 67 20 74 68 65 20 6f 72 64 69 6e 61 72 79 0a  ng the ordinary.
f4f0: 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61  [DROP TABLE] sta
f500: 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65 20 69  tement.  There i
f510: 73 20 6e 6f 0a 44 52 4f 50 20 56 49 52 54 55 41  s no.DROP VIRTUA
f520: 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
f530: 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  t.</p>..<tcl>.##
f540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f580: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
f590: 74 69 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c 65  tion DELETE dele
f5a0: 74 65 20 7b 44 45 4c 45 54 45 20 2a 44 45 4c 45  te {DELETE *DELE
f5b0: 54 45 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  TEs}..RecursiveB
f5c0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c  ubbleDiagram del
f5d0: 65 74 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ete-stmt.</tcl>.
f5e0: 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20 63  .<p>The DELETE c
f5f0: 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20 72  ommand removes r
f600: 65 63 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20  ecords from the 
f610: 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64  table identified
f620: 20 62 79 20 74 68 65 0a 20 20 20 3c 69 3e 71 75   by the.   <i>qu
f630: 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61  alified-table-na
f640: 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c 70 3e 5e 49 66  me</i>. ..<p>^If
f650: 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
f660: 65 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  e is not present
f670: 2c 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 69 6e  , all records in
f680: 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20 64   the table are d
f690: 65 6c 65 74 65 64 2e 0a 20 20 20 5e 49 66 20 61  eleted..   ^If a
f6a0: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
f6b0: 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e 20   supplied, then 
f6c0: 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73 20  only those rows 
f6d0: 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 20 20  for which the.  
f6e0: 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75   result of evalu
f6f0: 61 74 69 6e 67 20 74 68 65 20 57 48 45 52 45 20  ating the WHERE 
f700: 63 6c 61 75 73 65 20 61 73 20 61 20 5b 62 6f 6f  clause as a [boo
f710: 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c  lean expression|
f720: 0a 20 20 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  .   boolean expr
f730: 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 20  ession is true] 
f740: 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 68  are deleted...<h
f750: 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f  3>Restrictions o
f760: 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65  n DELETE Stateme
f770: 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41 54  nts Within CREAT
f780: 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a  E TRIGGER</h3>..
f790: 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  <p>The following
f7a0: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70   restrictions ap
f7b0: 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73 74  ply to DELETE st
f7c0: 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63  atements that oc
f7d0: 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a 20  cur within the. 
f7e0: 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45    body of a [CRE
f7f0: 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
f800: 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20 20  tement:..<ul>.  
f810: 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e 74  <li><p>^The <i>t
f820: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70  able-name</i> sp
f830: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
f840: 6f 66 20 61 20 44 45 4c 45 54 45 20 73 74 61 74  of a DELETE stat
f850: 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20  ement within.   
f860: 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79 20   a trigger body 
f870: 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66  must be unqualif
f880: 69 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65 72  ied.  ^(In other
f890: 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20   words, the.    
f8a0: 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  <i>database-name
f8b0: 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65  </i><b>.</b> pre
f8c0: 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c 65  fix on the table
f8d0: 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c   name is not all
f8e0: 6f 77 65 64 20 0a 20 20 20 20 77 69 74 68 69 6e  owed .    within
f8f0: 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 49 66   triggers.)^ ^If
f900: 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68   the table to wh
f910: 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
f920: 69 73 20 61 74 74 61 63 68 65 64 20 69 73 0a 20  is attached is. 
f930: 20 20 20 6e 6f 74 20 69 6e 20 74 68 65 20 74 65     not in the te
f940: 6d 70 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  mp database, the
f950: 6e 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  n DELETE stateme
f960: 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20 74  nts within the t
f970: 72 69 67 67 65 72 0a 20 20 20 20 62 6f 64 79 20  rigger.    body 
f980: 6d 75 73 74 20 6f 70 65 72 61 74 65 20 6f 6e 20  must operate on 
f990: 74 61 62 6c 65 73 20 77 69 74 68 69 6e 20 74 68  tables within th
f9a0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
f9b0: 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74  as it. ^If the t
f9c0: 61 62 6c 65 0a 20 20 20 20 74 6f 20 77 68 69 63  able.    to whic
f9d0: 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
f9e0: 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20   attached is in 
f9f0: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
fa00: 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20  e, then the.    
fa10: 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65  unqualified name
fa20: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65   of the table be
fa30: 69 6e 67 20 64 65 6c 65 74 65 64 20 69 73 20 72  ing deleted is r
fa40: 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73  esolved in the s
fa50: 61 6d 65 20 77 61 79 20 61 73 0a 20 20 20 20 69  ame way as.    i
fa60: 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c  t is for a top-l
fa70: 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28  evel statement (
fa80: 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69 72  by searching fir
fa90: 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  st the TEMP data
faa0: 62 61 73 65 2c 20 74 68 65 6e 0a 20 20 20 20 74  base, then.    t
fab0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
fac0: 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65 72  , then any other
fad0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68   databases in th
fae0: 65 20 6f 72 64 65 72 20 74 68 65 79 20 77 65 72  e order they wer
faf0: 65 0a 20 20 20 20 61 74 74 61 63 68 65 64 29 2e  e.    attached).
fb00: 0a 20 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  .    .  <li><p>^
fb10: 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61  The INDEXED BY a
fb20: 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63  nd NOT INDEXED c
fb30: 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61  lauses are not a
fb40: 6c 6c 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54 45  llowed on DELETE
fb50: 0a 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20  .    statements 
fb60: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
fb70: 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  </p>..  <li><p>^
fb80: 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52  The LIMIT and OR
fb90: 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20 28  DER BY clauses (
fba0: 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 29  described below)
fbb0: 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64   are unsupported
fbc0: 20 66 6f 72 0a 20 20 20 20 44 45 4c 45 54 45 20   for.    DELETE 
fbd0: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
fbe0: 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  n triggers.</p>.
fbf0: 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f  </ul>..<h3>Optio
fc00: 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52  nal LIMIT and OR
fc10: 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 3c 2f  DER BY clauses</
fc20: 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c  h3>..<p>^(If SQL
fc30: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
fc40: 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45  with the [SQLITE
fc50: 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
fc60: 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d  ELETE_LIMIT].com
fc70: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
fc80: 2c 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61  , then the synta
fc90: 78 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  x of the DELETE 
fca0: 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 65 78 74  statement is.ext
fcb0: 65 6e 64 65 64 20 62 79 20 74 68 65 20 61 64 64  ended by the add
fcc0: 69 74 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61  ition of optiona
fcd0: 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  l ORDER BY and L
fce0: 49 4d 49 54 20 63 6c 61 75 73 65 73 3a 29 5e 3c  IMIT clauses:)^<
fcf0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  /p>..<tcl>Bubble
fd00: 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73  Diagram delete-s
fd10: 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c  tmt-limited</tcl
fd20: 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c 45  >..<p>^If a DELE
fd30: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
fd40: 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
fd50: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
fd60: 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74  ber of rows that
fd70: 0a 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64  .will be deleted
fd80: 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61   is found by eva
fd90: 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f  luating the acco
fda0: 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73  mpanying express
fdb0: 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a  ion and casting.
fdc0: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
fdd0: 20 76 61 6c 75 65 2e 20 5e 49 66 20 74 68 65 20   value. ^If the 
fde0: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65 76  result of the ev
fdf0: 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4c 49 4d  aluating the LIM
fe00: 49 54 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f 74  IT clause.cannot
fe10: 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be losslessly c
fe20: 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
fe30: 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69 74  nteger value, it
fe40: 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 41   is an error. ^A
fe50: 20 0a 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54   .negative LIMIT
fe60: 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70   value is interp
fe70: 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d  reted as "no lim
fe80: 69 74 22 2e 20 5e 28 49 66 20 74 68 65 20 44 45  it". ^(If the DE
fe90: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 0a  LETE statement .
fea0: 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53  also has an OFFS
feb0: 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  ET clause, then 
fec0: 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20  it is similarly 
fed0: 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61  evaluated and ca
fee0: 73 74 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72  st to an.integer
fef0: 20 76 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20 69   value. Again, i
ff00: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69 66  t is an error if
ff10: 20 74 68 65 20 76 61 6c 75 65 20 63 61 6e 6e 6f   the value canno
ff20: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a  t be losslessly.
ff30: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
ff40: 69 6e 74 65 67 65 72 2e 29 5e 20 5e 49 66 20 74  integer.)^ ^If t
ff50: 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45  here is no OFFSE
ff60: 54 20 63 6c 61 75 73 65 2c 20 6f 72 20 74 68 65  T clause, or the
ff70: 20 63 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74 65   calculated.inte
ff80: 67 65 72 20 76 61 6c 75 65 20 69 73 20 6e 65 67  ger value is neg
ff90: 61 74 69 76 65 2c 20 74 68 65 20 65 66 66 65 63  ative, the effec
ffa0: 74 69 76 65 20 4f 46 46 53 45 54 20 76 61 6c 75  tive OFFSET valu
ffb0: 65 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e  e is zero...<p>^
ffc0: 28 49 66 20 74 68 65 20 44 45 4c 45 54 45 20 73  (If the DELETE s
ffd0: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20  tatement has an 
ffe0: 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
fff0: 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74   then all rows t
10000 68 61 74 20 77 6f 75 6c 64 20 0a 62 65 20 64 65  hat would .be de
10010 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62 73  leted in the abs
10020 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49  ence of the LIMI
10030 54 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f 72  T clause are sor
10040 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ted according to
10050 20 74 68 65 20 0a 4f 52 44 45 52 20 42 59 2e 20   the .ORDER BY. 
10060 54 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f  The first <i>M</
10070 69 3e 20 72 6f 77 73 2c 20 77 68 65 72 65 20 3c  i> rows, where <
10080 69 3e 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20 76  i>M</i> is the v
10090 61 6c 75 65 20 66 6f 75 6e 64 20 62 79 0a 65 76  alue found by.ev
100a0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4f 46 46  aluating the OFF
100b0 53 45 54 20 63 6c 61 75 73 65 20 65 78 70 72 65  SET clause expre
100c0 73 73 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70 70  ssion, are skipp
100d0 65 64 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c  ed, and the foll
100e0 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c  owing .<i>N</i>,
100f0 20 77 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e 20   where <i>N</i> 
10100 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  is the value of 
10110 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
10120 73 69 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74 65  sion, are delete
10130 64 2e 29 5e 0a 5e 49 66 20 74 68 65 72 65 20 61  d.)^.^If there a
10140 72 65 20 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e  re less than <i>
10150 4e 3c 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61 69  N</i> rows remai
10160 6e 69 6e 67 20 61 66 74 65 72 20 74 61 6b 69 6e  ning after takin
10170 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61  g the OFFSET cla
10180 75 73 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74  use.into account
10190 2c 20 6f 72 20 69 66 20 74 68 65 20 4c 49 4d 49  , or if the LIMI
101a0 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74  T clause evaluat
101b0 65 64 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65  ed to a negative
101c0 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c 6c   value, then all
101d0 0a 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20  .remaining rows 
101e0 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70  are deleted...<p
101f0 3e 5e 49 66 20 74 68 65 20 44 45 4c 45 54 45 20  >^If the DELETE 
10200 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f  statement has no
10210 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
10220 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
10230 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 64 65  that.would be de
10240 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62 73  leted in the abs
10250 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49  ence of the LIMI
10260 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73 73  T clause are ass
10270 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62  embled in an.arb
10280 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65 66  itrary order bef
10290 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65  ore applying the
102a0 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
102b0 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74  T clauses to det
102c0 65 72 6d 69 6e 65 20 0a 74 68 65 20 73 75 62 73  ermine .the subs
102d0 65 74 20 74 68 61 74 20 61 72 65 20 61 63 74 75  et that are actu
102e0 61 6c 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a 3c  ally deleted...<
102f0 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59  p>^(The ORDER BY
10300 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44 45 4c   clause on a DEL
10310 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ETE statement is
10320 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65   used only to de
10330 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f  termine which.ro
10340 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74  ws fall within t
10350 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72  he LIMIT. The or
10360 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
10370 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69 73  s are deleted is
10380 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69   arbitrary.and i
10390 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64  s not influenced
103a0 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59   by the ORDER BY
103b0 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c   clause.)^..<tcl
103c0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72 75  >hd_fragment tru
103d0 6e 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63 61  ncateopt {trunca
103e0 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d  te optimization}
103f0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54  </tcl>.<h3>The T
10400 72 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a 61  runcate Optimiza
10410 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57  tion</h3>..<p>^W
10420 68 65 6e 20 74 68 65 20 57 48 45 52 45 20 69 73  hen the WHERE is
10430 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20   omitted from a 
10440 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
10450 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a 62   and the table.b
10460 65 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61 73  eing deleted has
10470 20 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53 51   no triggers,.SQ
10480 4c 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70 74  Lite uses an opt
10490 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61  imization to era
104a0 73 65 20 74 68 65 20 65 6e 74 69 72 65 20 74 61  se the entire ta
104b0 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68  ble content.with
104c0 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76 69  out having to vi
104d0 73 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20  sit each row of 
104e0 74 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76 69  the table indivi
104f0 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72  dually..This "tr
10500 75 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a 61  uncate" optimiza
10510 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20 64  tion makes the d
10520 65 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20 66  elete run much f
10530 61 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20  aster..Prior to 
10540 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e 20  SQLite [version 
10550 33 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75 6e  3.6.5], the trun
10560 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
10570 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61  n.also meant tha
10580 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  t the [sqlite3_c
10590 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73  hanges()] and.[s
105a0 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
105b0 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63  nges()] interfac
105c0 65 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e  es.and the [coun
105d0 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61  t_changes pragma
105e0 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61  ].will not actua
105f0 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 6e  lly return the n
10600 75 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65 64  umber of deleted
10610 20 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70 72   rows.  .That pr
10620 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 66  oblem has been f
10630 69 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73  ixed as of [vers
10640 69 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70 3e  ion 3.6.5]...<p>
10650 5e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70  ^The truncate op
10660 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62  timization can b
10670 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69  e permanently di
10680 73 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71  sabled for all q
10690 75 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d 70  ueries.by recomp
106a0 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74  iling.SQLite wit
106b0 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d  h the [SQLITE_OM
106c0 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49  IT_TRUNCATE_OPTI
106d0 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c  MIZATION] compil
106e0 65 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f  e-time switch.</
106f0 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63  p>..<p>The trunc
10700 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
10710 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69 73   can also be dis
10720 61 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d 65  abled at runtime
10730 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69   using.the [sqli
10740 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a  te3_set_authoriz
10750 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e  er()] interface.
10760 20 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72 69    ^If an authori
10770 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74  zer callback.ret
10780 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e  urns [SQLITE_IGN
10790 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c  ORE] for an [SQL
107a0 49 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74 69  ITE_DELETE] acti
107b0 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68  on code, then.th
107c0 65 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74 69  e DELETE operati
107d0 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20  on will proceed 
107e0 62 75 74 20 74 68 65 20 74 72 75 6e 63 61 74 65  but the truncate
107f0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69   optimization wi
10800 6c 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20 61  ll.be bypassed a
10810 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20  nd rows will be 
10820 64 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20 6f  deleted one by o
10830 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ne.</p>..<tcl>.#
10840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
10890 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20 44  ection {DETACH D
108a0 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68 20  ATABASE} detach 
108b0 2a 44 45 54 41 43 48 0a 0a 52 65 63 75 72 73 69  *DETACH..Recursi
108c0 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
108d0 64 65 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63  detach-stmt.</tc
108e0 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61  l>..<p>^This sta
108f0 74 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73 20  tement detaches 
10900 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61  an additional da
10910 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10920 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61 74  n previously .at
10930 74 61 63 68 65 64 20 75 73 69 6e 67 20 74 68 65  tached using the
10940 20 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65 6d   [ATTACH] statem
10950 65 6e 74 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f 74  ent.  .^When not
10960 20 69 6e 20 5b 73 68 61 72 65 64 20 63 61 63 68   in [shared cach
10970 65 20 6d 6f 64 65 5d 2c 20 0a 69 74 20 69 73 20  e mode], .it is 
10980 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65  possible to have
10990 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
109a0 73 65 20 66 69 6c 65 20 61 74 74 61 63 68 65 64  se file attached
109b0 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20   multiple times 
109c0 75 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e 74  using .different
109d0 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74 61   names, and deta
109e0 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63  ching one connec
109f0 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20 77  tion to a file w
10a00 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a 6f  ill leave the .o
10a10 74 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70  thers intact.</p
10a20 3e 0a 5e 49 6e 20 5b 73 68 61 72 65 64 20 63 61  >.^In [shared ca
10a30 63 68 65 20 6d 6f 64 65 5d 2c 20 61 74 74 65 6d  che mode], attem
10a40 70 74 69 6e 67 20 74 6f 20 61 74 74 61 63 68 20  pting to attach 
10a50 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
10a60 65 20 66 69 6c 65 20 6d 6f 72 65 0a 74 68 61 6e  e file more.than
10a70 20 6f 6e 63 65 20 72 65 73 75 6c 74 73 20 69 6e   once results in
10a80 20 61 6e 20 65 72 72 6f 72 2e 0a 0a 3c 70 3e 5e   an error...<p>^
10a90 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77  This statement w
10aa0 69 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69  ill fail if SQLi
10ab0 74 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64  te is in the mid
10ac0 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63  dle of a transac
10ad0 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  tion.</p>...<tcl
10ae0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
10af0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10b00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10b20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10b30 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49  .Section {DROP I
10b40 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20  NDEX} dropindex 
10b50 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a  {{DROP INDEX}}..
10b60 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
10b70 69 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65  iagram drop-inde
10b80 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
10b90 70 3e 5e 54 68 65 20 44 52 4f 50 20 49 4e 44 45  p>^The DROP INDE
10ba0 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  X statement remo
10bb0 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64  ves an index add
10bc0 65 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52 45  ed.with the [CRE
10bd0 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65  ATE INDEX] state
10be0 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65 78  ment.  The index
10bf0 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72   is completely r
10c00 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65 20  emoved from.the 
10c10 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20  disk.  The only 
10c20 77 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20 74  way to recover t
10c30 68 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20 72  he index is to r
10c40 65 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72 6f  eenter the.appro
10c50 70 72 69 61 74 65 20 5b 43 52 45 41 54 45 20 49  priate [CREATE I
10c60 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f  NDEX] command.</
10c70 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
10c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10c90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10ca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10cc0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
10cd0 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64 72   {DROP TABLE} dr
10ce0 6f 70 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54  optable {{DROP T
10cf0 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76  ABLE}}..Recursiv
10d00 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  eBubbleDiagram d
10d10 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c  rop-table-stmt.<
10d20 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
10d30 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ROP TABLE statem
10d40 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 61  ent removes a ta
10d50 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20 74  ble added with t
10d60 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he.[CREATE TABLE
10d70 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
10d80 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64  e name specified
10d90 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e 61   is the.table na
10da0 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70 65  me.  ^The droppe
10db0 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c  d table is compl
10dc0 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72  etely removed fr
10dd0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
10de0 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20  .schema and the 
10df0 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65 20  disk file.  The 
10e00 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65  table can not be
10e10 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e 41   recovered.  .^A
10e20 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20 74  ll indices and t
10e30 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61 74  riggers.associat
10e40 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
10e50 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65 74  e are also delet
10e60 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ed.</p>..<p>^The
10e70 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58 49   optional IF EXI
10e80 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70 72  STS clause suppr
10e90 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72 20  esses the error 
10ea0 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61  that would norma
10eb0 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74 68  lly.result if th
10ec0 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  e table does not
10ed0 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e   exist.</p>..<p>
10ee0 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
10ef0 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
10f00 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52 4f  e enabled, a DRO
10f10 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  P TABLE command 
10f20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c  performs an.impl
10f30 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20 44  icit [DELETE | D
10f40 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74  ELETE FROM &lt;t
10f50 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64 20  bl&gt;] command 
10f60 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67 20  before removing 
10f70 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20 74  the.table from t
10f80 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
10f90 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65 72  ma. ^Any trigger
10fa0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
10fb0 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f 70  e table are.drop
10fc0 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ped from the dat
10fd0 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65 66  abase schema bef
10fe0 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69 74  ore the implicit
10ff0 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74   DELETE FROM &lt
11000 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78 65  ;tbl&gt; .is exe
11010 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20 63  cuted, so this c
11020 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79 20  annot cause any 
11030 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65  triggers to fire
11040 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20 5e  . By contrast, ^
11050 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  an.implicit DELE
11060 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
11070 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20 61  gt; does cause a
11080 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b 66  ny configured.[f
11090 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
110a0 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61 63  ns] to take plac
110b0 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70 6c  e. .^If the impl
110c0 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d  icit DELETE FROM
110d0 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78 65   &lt;tbl&gt; exe
110e0 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f 66  cuted.as part of
110f0 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f   a DROP TABLE co
11100 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20 61  mmand violates a
11110 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  ny immediate for
11120 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
11130 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20 69  ints,.an error i
11140 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74  s returned and t
11150 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  he table is not 
11160 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74 68  dropped. ^If .th
11170 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  e implicit DELET
11180 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67  E FROM &lt;tbl&g
11190 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a 64  t; causes any .d
111a0 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20  eferred foreign 
111b0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
111c0 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c 20  to be violated, 
111d0 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69 6f  and the violatio
111e0 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20 77  ns still.exist w
111f0 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74  hen the transact
11200 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65 64  ion is committed
11210 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  , an error is re
11220 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74 69  turned at the ti
11230 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a 3c  me.of commit...<
11240 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
11250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11290 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
112a0 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
112b0 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54 52  rigger {{DROP TR
112c0 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69  IGGER}}..Recursi
112d0 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
112e0 64 72 6f 70 2d 74 72 69 67 67 65 72 2d 73 74 6d  drop-trigger-stm
112f0 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
11300 65 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 73  e DROP TRIGGER s
11310 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
11320 20 61 20 74 72 69 67 67 65 72 20 63 72 65 61 74   a trigger creat
11330 65 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45 41  ed by the .[CREA
11340 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
11350 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20 72 65 6d  ement. ^Once rem
11360 6f 76 65 64 2c 20 74 68 65 20 74 72 69 67 67 65  oved, the trigge
11370 72 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20  r definition is 
11380 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72 65 73 65 6e  no.longer presen
11390 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  t in the sqlite_
113a0 6d 61 73 74 65 72 20 28 6f 72 20 73 71 6c 69 74  master (or sqlit
113b0 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 74  e_temp_master) t
113c0 61 62 6c 65 20 61 6e 64 20 69 73 0a 6e 6f 74 20  able and is.not 
113d0 66 69 72 65 64 20 62 79 20 61 6e 79 20 73 75 62  fired by any sub
113e0 73 65 71 75 65 6e 74 20 49 4e 53 45 52 54 2c 20  sequent INSERT, 
113f0 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
11400 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 70   statements...<p
11410 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 72 69 67  >^Note that trig
11420 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74  gers are automat
11430 69 63 61 6c 6c 79 20 64 72 6f 70 70 65 64 20 77  ically dropped w
11440 68 65 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74  hen the associat
11450 65 64 20 74 61 62 6c 65 20 69 73 0a 64 72 6f 70  ed table is.drop
11460 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  ped...<tcl>.####
11470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
114a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
114b0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
114c0 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20 64  on {DROP VIEW} d
114d0 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20 56  ropview {{DROP V
114e0 49 45 57 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  IEW}}..Recursive
114f0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
11500 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f 74  op-view-stmt.</t
11510 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f  cl>..<p>^The DRO
11520 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74  P VIEW statement
11530 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77 20   removes a view 
11540 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20 5b  created by the [
11550 43 52 45 41 54 45 20 56 49 45 57 5d 20 0a 20 20  CREATE VIEW] .  
11560 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54 68 65 20  statement. ^The 
11570 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e 20  view definition 
11580 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
11590 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
115a0 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e 6f 20 61  ema, but .  no a
115b0 63 74 75 61 6c 20 64 61 74 61 20 69 6e 20 74 68  ctual data in th
115c0 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 62 61 73  e underlying bas
115d0 65 20 74 61 62 6c 65 73 20 69 73 20 6d 6f 64 69  e tables is modi
115e0 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  fied...<p>^(The 
115f0 76 69 65 77 20 74 6f 20 64 72 6f 70 20 69 73 20  view to drop is 
11600 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68  identified by th
11610 65 20 76 69 65 77 2d 6e 61 6d 65 20 61 6e 64 20  e view-name and 
11620 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 64 61 74 61  optional .  data
11630 62 61 73 65 2d 6e 61 6d 65 20 73 70 65 63 69 66  base-name specif
11640 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
11650 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61  he DROP VIEW sta
11660 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20 20  tement. This .  
11670 72 65 66 65 72 65 6e 63 65 20 69 73 20 72 65 73  reference is res
11680 6f 6c 76 65 64 20 75 73 69 6e 67 20 74 68 65 20  olved using the 
11690 73 74 61 6e 64 61 72 64 20 70 72 6f 63 65 64 75  standard procedu
116a0 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20 72  re for [object r
116b0 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a 3c  esolution].)^..<
116c0 70 3e 0a 20 20 5e 49 66 20 74 68 65 20 73 70 65  p>.  ^If the spe
116d0 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e 6e  cified view cann
116e0 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64 20  ot be found and 
116f0 74 68 65 20 49 46 20 45 58 49 53 54 53 20 63 6c  the IF EXISTS cl
11700 61 75 73 65 20 69 73 20 6e 6f 74 20 0a 20 20 70  ause is not .  p
11710 72 65 73 65 6e 74 2c 20 69 74 20 69 73 20 61 6e  resent, it is an
11720 20 65 72 72 6f 72 2e 20 5e 49 66 20 74 68 65 20   error. ^If the 
11730 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20 63  specified view c
11740 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61  annot be found a
11750 6e 64 20 61 6e 20 49 46 0a 20 20 45 58 49 53 54  nd an IF.  EXIST
11760 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  S clause is pres
11770 65 6e 74 20 69 6e 20 74 68 65 20 44 52 4f 50 20  ent in the DROP 
11780 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2c 20  VIEW statement, 
11790 74 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65  then the stateme
117a0 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  nt.  is a no-op.
117b0 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
117c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11800 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
11810 7b 44 61 74 61 62 61 73 65 20 4f 62 6a 65 63 74  {Database Object
11820 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f 6e   Name Resolution
11830 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62 6a  } {naming} {{obj
11840 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d 7d  ect resolution}}
11850 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 49  .</tcl>..<p>.  I
11860 6e 20 53 51 4c 69 74 65 2c 20 61 20 64 61 74 61  n SQLite, a data
11870 62 61 73 65 20 6f 62 6a 65 63 74 20 28 61 20 74  base object (a t
11880 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72 69  able, index, tri
11890 67 67 65 72 20 6f 72 20 76 69 65 77 29 20 69 73  gger or view) is
118a0 20 69 64 65 6e 74 69 66 69 65 64 0a 20 20 62 79   identified.  by
118b0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
118c0 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20   object and the 
118d0 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
118e0 62 61 73 65 20 74 68 61 74 20 69 74 20 72 65 73  base that it res
118f0 69 64 65 73 20 69 6e 2e 20 0a 20 20 44 61 74 61  ides in. .  Data
11900 62 61 73 65 20 6f 62 6a 65 63 74 73 20 6d 61 79  base objects may
11910 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20 6d   reside in the m
11920 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68  ain database, th
11930 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 2c  e temp database,
11940 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54 54   or in.  an [ATT
11950 41 43 48 7c 61 74 74 61 63 68 65 64 20 64 61 74  ACH|attached dat
11960 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20 54  abase]...<p>.  T
11970 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65  he syntax of the
11980 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20 5b   [DROP TABLE], [
11990 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44 52  DROP INDEX], [DR
119a0 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50 20  OP VIEW], [DROP 
119b0 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45 49  TRIGGER],.  [REI
119c0 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54 41  NDEX], [ALTER TA
119d0 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f 74  BLE] and many ot
119e0 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c 6c  her commands all
119f0 20 70 65 72 6d 69 74 20 74 68 65 20 75 73 65 72   permit the user
11a00 20 74 6f 0a 20 20 73 70 65 63 69 66 79 20 61 20   to.  specify a 
11a10 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20  database object 
11a20 65 69 74 68 65 72 20 62 79 20 69 74 73 20 6e 61  either by its na
11a30 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79 20  me alone, or by 
11a40 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  a combination of
11a50 0a 20 20 69 74 73 20 6e 61 6d 65 20 61 6e 64 20  .  its name and 
11a60 74 68 65 20 6e 61 6d 65 20 6f 66 20 69 74 73 20  the name of its 
11a70 64 61 74 61 62 61 73 65 2e 20 5e 28 49 66 20 6e  database. ^(If n
11a80 6f 20 64 61 74 61 62 61 73 65 20 69 73 20 73 70  o database is sp
11a90 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a  ecified as part.
11aa0 20 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20    of the object 
11ab0 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65 6e 20  reference, then 
11ac0 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73 20  SQLite searches 
11ad0 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20 61  the main, temp a
11ae0 6e 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64 0a  nd all attached.
11af0 20 20 64 61 74 61 62 61 73 65 73 20 66 6f 72 20    databases for 
11b00 61 6e 20 6f 62 6a 65 63 74 20 77 69 74 68 20 61  an object with a
11b10 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e 20   matching name. 
11b20 54 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  The temp databas
11b30 65 20 69 73 20 73 65 61 72 63 68 65 64 0a 20 20  e is searched.  
11b40 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64 20  first, followed 
11b50 62 79 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  by the main data
11b60 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20 61  base, followed a
11b70 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
11b80 62 61 73 65 73 20 69 6e 20 74 68 65 0a 20 20 6f  bases in the.  o
11b90 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20 77  rder that they w
11ba0 65 72 65 20 61 74 74 61 63 68 65 64 2e 20 54 68  ere attached. Th
11bb0 65 20 72 65 66 65 72 65 6e 63 65 20 72 65 73 6f  e reference reso
11bc0 6c 76 65 73 20 74 6f 20 74 68 65 20 66 69 72 73  lves to the firs
11bd0 74 20 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64 2e  t match.  found.
11be0 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a  )^ For example:.
11bf0 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 20 20 2f  .<pre>^(.      /
11c00 2a 20 41 64 64 20 61 20 74 61 62 6c 65 20 6e 61  * Add a table na
11c10 6d 65 64 20 27 74 31 27 20 74 6f 20 74 68 65 20  med 't1' to the 
11c20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20 61  temp, main and a
11c30 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
11c40 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 41 54 54  ase */.      ATT
11c50 41 43 48 20 27 66 69 6c 65 2e 64 62 27 20 41 53  ACH 'file.db' AS
11c60 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45 41   aux;.      CREA
11c70 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79  TE TABLE t1(x, y
11c80 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  );.      CREATE 
11c90 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 78 2c  TEMP TABLE t1(x,
11ca0 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   y);.      CREAT
11cb0 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28 78  E TABLE aux.t1(x
11cc0 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20 44 52 4f  , y);..      DRO
11cd0 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20  P TABLE t1;     
11ce0 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c      /* Drop tabl
11cf0 65 20 69 6e 20 74 65 6d 70 20 64 61 74 61 62 61  e in temp databa
11d00 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50  se */.      DROP
11d10 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20   TABLE t1;      
11d20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65     /* Drop table
11d30 20 69 6e 20 6d 61 69 6e 20 64 61 74 61 62 61 73   in main databas
11d40 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50 20  e */.      DROP 
11d50 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20  TABLE t1;       
11d60 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20    /* Drop table 
11d70 69 6e 20 61 75 78 20 64 61 74 61 62 61 73 65 20  in aux database 
11d80 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70 3e  */.)^</pre>..<p>
11d90 0a 20 20 5e 49 66 20 61 20 64 61 74 61 62 61 73  .  ^If a databas
11da0 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  e name is specif
11db0 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  ied as part of a
11dc0 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e  n object referen
11dd0 63 65 2c 20 69 74 20 6d 75 73 74 20 62 65 0a 20  ce, it must be. 
11de0 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c 20   either "main", 
11df0 6f 72 20 22 74 65 6d 70 22 20 6f 72 20 74 68 65  or "temp" or the
11e00 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61 74 74 61   name of an atta
11e10 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e  ched database. ^
11e20 4c 69 6b 65 20 6f 74 68 65 72 0a 20 20 53 51 4c  Like other.  SQL
11e30 20 69 64 65 6e 74 69 66 69 65 72 73 2c 20 64 61   identifiers, da
11e40 74 61 62 61 73 65 20 6e 61 6d 65 73 20 61 72 65  tabase names are
11e50 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76   case-insensitiv
11e60 65 2e 20 5e 49 66 20 61 20 64 61 74 61 62 61 73  e. ^If a databas
11e70 65 20 6e 61 6d 65 0a 20 20 69 73 20 73 70 65 63  e name.  is spec
11e80 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79  ified, then only
11e90 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62   the named datab
11ea0 61 73 65 20 69 73 20 73 65 61 72 63 68 65 64 20  ase is searched 
11eb0 66 6f 72 20 74 68 65 20 6e 61 6d 65 64 20 6f 62  for the named ob
11ec0 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f 73  ject...<p>.  Mos
11ed0 74 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e  t object referen
11ee0 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73  ces may only res
11ef0 6f 6c 76 65 20 74 6f 20 61 20 73 70 65 63 69 66  olve to a specif
11f00 69 63 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63  ic type of objec
11f10 74 20 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c 65  t (for.  example
11f20 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 68 61   a reference tha
11f30 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 20 44  t is part of a D
11f40 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ROP TABLE statem
11f50 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73  ent may only res
11f60 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74 61 62 6c  olve.  to a tabl
11f70 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61 6e  e object, not an
11f80 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72 20   index, trigger 
11f90 6f 72 20 76 69 65 77 29 2e 20 48 6f 77 65 76 65  or view). Howeve
11fa0 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65 78  r in some contex
11fb0 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45 49  ts .  (e.g. [REI
11fc0 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63 74  NDEX]) an object
11fd0 20 72 65 66 65 72 65 6e 63 65 20 6d 61 79 20 62   reference may b
11fe0 65 20 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f 72  e resolve to mor
11ff0 65 20 74 68 61 6e 20 6f 6e 65 20 74 79 70 65 0a  e than one type.
12000 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57 68    of object. ^Wh
12010 65 6e 20 73 65 61 72 63 68 69 6e 67 20 64 61 74  en searching dat
12020 61 62 61 73 65 20 73 63 68 65 6d 61 73 20 66 6f  abase schemas fo
12030 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74  r a named object
12040 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20 74  , objects of.  t
12050 79 70 65 73 20 74 68 61 74 20 63 61 6e 6e 6f 74  ypes that cannot
12060 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20   be used in the 
12070 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20 72  context of the r
12080 65 66 65 72 65 6e 63 65 20 61 72 65 20 61 6c 77  eference are alw
12090 61 79 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e 0a  ays .  ignored..
120a0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
120b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
120f0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58  #####.Section EX
12100 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58  PLAIN explain EX
12110 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61  PLAIN..BubbleDia
12120 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f  gram sql-stmt.</
12130 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51 4c  tcl>..<p>^An SQL
12140 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62   statement can b
12150 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68  e preceded by th
12160 65 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c 41  e keyword "EXPLA
12170 49 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70 68  IN" or.by the ph
12180 72 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51 55  rase "EXPLAIN QU
12190 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69 74  ERY PLAN".  ^Eit
121a0 68 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e  her modification
121b0 20 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c 20   causes the.SQL 
121c0 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 68  statement to beh
121d0 61 76 65 20 61 73 20 61 20 71 75 65 72 79 20 61  ave as a query a
121e0 6e 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 66  nd to return inf
121f0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68  ormation about.h
12200 6f 77 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ow the SQL state
12210 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ment would have 
12220 6f 70 65 72 61 74 65 64 20 69 66 20 74 68 65 20  operated if the 
12230 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20  EXPLAIN keyword 
12240 6f 72 0a 70 68 72 61 73 65 20 68 61 64 20 62 65  or.phrase had be
12250 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a  en omitted.</p>.
12260 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20 66  .<p>The output f
12270 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64 20  rom EXPLAIN and 
12280 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
12290 41 4e 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  AN is intended f
122a0 6f 72 0a 69 6e 74 65 72 61 63 74 69 76 65 20 61  or.interactive a
122b0 6e 61 6c 79 73 69 73 20 61 6e 64 20 74 72 6f 75  nalysis and trou
122c0 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c 79  bleshooting only
122d0 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f  .  The details o
122e0 66 20 74 68 65 20 0a 6f 75 74 70 75 74 20 66 6f  f the .output fo
122f0 72 6d 61 74 20 61 72 65 20 73 75 62 6a 65 63 74  rmat are subject
12300 20 74 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d 20   to change from 
12310 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f 66 20 53  one release of S
12320 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65 78  QLite to the nex
12330 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73 20  t..Applications 
12340 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20 45  should not use E
12350 58 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41 49  XPLAIN or EXPLAI
12360 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 69 6e  N QUERY PLAN sin
12370 63 65 0a 74 68 65 69 72 20 65 78 61 63 74 20 62  ce.their exact b
12380 65 68 61 76 69 6f 72 20 69 73 20 76 61 72 69 61  ehavior is varia
12390 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61 72  ble and only par
123a0 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74 65  tially documente
123b0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  d.</p>..<p>^When
123c0 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79   the EXPLAIN key
123d0 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 79 20  word appears by 
123e0 69 74 73 65 6c 66 20 69 74 20 63 61 75 73 65 73  itself it causes
123f0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 74   the statement.t
12400 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71 75  o behave as a qu
12410 65 72 79 20 74 68 61 74 20 72 65 74 75 72 6e 73  ery that returns
12420 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66   the sequence of
12430 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63 68 69   .[virtual machi
12440 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 5d  ne instructions]
12450 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 20 75   it would have u
12460 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 74  sed to execute t
12470 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a 74  he command had.t
12480 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
12490 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65 73  rd not been pres
124a0 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68 65 20 45  ent. ^When the E
124b0 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
124c0 4e 20 70 68 72 61 73 65 0a 61 70 70 65 61 72 73  N phrase.appears
124d0 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
124e0 72 65 74 75 72 6e 73 20 68 69 67 68 2d 6c 65 76  returns high-lev
124f0 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 72  el information r
12500 65 67 61 72 64 69 6e 67 20 74 68 65 20 71 75 65  egarding the que
12510 72 79 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f 75  ry.plan that wou
12520 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75 73 65  ld have been use
12530 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e 20  d...The EXPLAIN 
12540 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d 61  QUERY PLAN comma
12550 6e 64 20 69 73 20 64 65 73 63 72 69 62 65 64 20  nd is described 
12560 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75 65  in .[explain que
12570 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65 74  ry plan|more det
12580 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63 6c  ail here]...<tcl
12590 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
125a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125e0 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73 73  .Section express
125f0 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72 65  ion expr {*expre
12600 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69 6f  ssion {expressio
12610 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 52 65 63 75  n syntax}}..Recu
12620 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
12630 61 6d 20 65 78 70 72 0a 3c 2f 74 63 6c 3e 0a 0a  am expr.</tcl>..
12640 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20  <p>This section 
12650 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  is different fro
12660 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d  m the others.  M
12670 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f  ost other sectio
12680 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d  ns of.this docum
12690 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20  ent talks about 
126a0 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c  a particular SQL
126b0 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20   command.  This 
126c0 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74  section does.not
126d0 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74   talk about a st
126e0 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64  andalone command
126f0 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72   but about "expr
12700 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61  essions" which a
12710 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74  re .subcomponent
12720 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20  s of most other 
12730 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c  commands.</p>..<
12740 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
12750 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61 72  binaryops {binar
12760 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63  y operators}</tc
12770 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73  l>.<h3>Operators
12780 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74  </h3>.<p>^(SQLit
12790 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68  e understands th
127a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61  e following bina
127b0 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e  ry operators, in
127c0 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68   order from.high
127d0 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72  est to lowest pr
127e0 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c  ecedence:</p>..<
127f0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
12800 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32  .<font color="#2
12810 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a  c2cf0"><big>||.*
12820 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20      /    %.+    
12830 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74  -.&lt;&lt;   &gt
12840 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20  ;&gt;   &amp;   
12850 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d   |.&lt;    &lt;=
12860 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d     &gt;    &gt;=
12870 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20  .=    ==   !=   
12880 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67  &lt;&gt;   </big
12890 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20 49  >IS   IS NOT   I
128a0 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42 20  N   LIKE   GLOB 
128b0 20 20 4d 41 54 43 48 20 20 20 52 45 47 45 58 50    MATCH   REGEXP
128c0 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74  .AND   .OR</font
128d0 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  >.</pre></blockq
128e0 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53 75  uote>)^..<p>^(Su
128f0 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70 72  pported unary pr
12900 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20 61  efix operators a
12910 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c  re these:</p>..<
12920 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
12930 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32  .<font color="#2
12940 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20  c2cf0"><big>-   
12950 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c 2f   +    ~    NOT</
12960 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72  big></font>.</pr
12970 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
12980 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
12990 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b 43  ent collateop {C
129a0 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 7d  OLLATE operator}
129b0 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 43  </tcl>.<p>^The C
129c0 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
129d0 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74 66  is a unary postf
129e0 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61 74  ix.operator that
129f0 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c 6c   assigns a [coll
12a00 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20  ating sequence] 
12a10 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  to an expression
12a20 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f  ..^The COLLATE o
12a30 70 65 72 61 74 6f 72 20 68 61 73 20 61 20 68 69  perator has a hi
12a40 67 68 65 72 20 70 72 65 63 65 64 65 6e 63 65 20  gher precedence 
12a50 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67 68  (binds more tigh
12a60 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 62 69  tly) than any.bi
12a70 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 61 6e  nary operator an
12a80 64 20 61 6e 79 20 75 6e 61 72 79 20 70 72 65 66  d any unary pref
12a90 69 78 20 6f 70 65 72 61 74 6f 72 20 65 78 63 65  ix operator exce
12aa0 70 74 20 22 7e 22 2e 0a 28 43 4f 4c 4c 41 54 45  pt "~"..(COLLATE
12ab0 20 61 6e 64 20 22 7e 22 20 61 72 65 20 61 73 73   and "~" are ass
12ac0 6f 63 69 61 74 69 76 65 20 73 6f 20 74 68 65 69  ociative so thei
12ad0 72 20 62 69 6e 64 69 6e 67 20 6f 72 64 65 72 20  r binding order 
12ae0 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 2e  does not matter.
12af0 29 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67  ).^The collating
12b00 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79   sequence set by
12b10 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65   the COLLATE ope
12b20 72 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73 20  rator overrides 
12b30 74 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the.collating se
12b40 71 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e 65  quence determine
12b50 64 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45  d by the COLLATE
12b60 20 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61 62   clause in a tab
12b70 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  le.[column defin
12b80 69 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65 20  ition]..See the 
12b90 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  [collating seque
12ba0 6e 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64 69  nce| detailed di
12bb0 73 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c 6c  scussion on coll
12bc0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 5d  ating sequences]
12bd0 0a 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79 70  .in the [datatyp
12be0 65 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e 20  e | Datatype In 
12bf0 53 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65 6e  SQLite3] documen
12c00 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
12c10 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c 2f   information..</
12c20 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73  p>..<tcl>hd_puts
12c30 20 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72 79   ".<p>^The unary
12c40 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61   operator [Opera
12c50 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f  tor +] is a no-o
12c60 70 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20 61  p.  ^It can be a
12c70 70 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67  pplied.to string
12c80 73 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f 62  s, numbers, blob
12c90 73 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69 74  s or NULL and it
12ca0 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20   always returns 
12cb0 61 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74 68  a result.with th
12cc0 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20  e same value as 
12cd0 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e  the operand.</p>
12ce0 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65  "</tcl>..<p>Note
12cf0 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65 20   that there are 
12d00 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f  two variations o
12d10 66 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64  f the equals and
12d20 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72   not equals.oper
12d30 61 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73 20  ators.  ^Equals 
12d40 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a 3c  can be either..<
12d50 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f  tcl>.hd_puts "[O
12d60 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f  perator =] or [O
12d70 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68  perator ==]..^Th
12d80 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65  e non-equals ope
12d90 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69 74  rator can be eit
12da0 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d  her.[Operator !=
12db0 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b  ] or [Operator {
12dc0 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65  &lt;&gt;}]..^The
12dd0 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f   [Operator ||] o
12de0 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e  perator is \"con
12df0 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20  catenate\" - it 
12e00 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74  joins together.t
12e10 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f  he two strings o
12e20 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a  f its operands..
12e30 5e 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f  ^The operator [O
12e40 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75  perator %] outpu
12e50 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ts the value of 
12e60 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72 61 6e  its left .operan
12e70 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69 67  d modulo its rig
12e80 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 0a  ht operand.</p>.
12e90 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20  .<p>^The result 
12ea0 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f 70  of any binary op
12eb0 65 72 61 74 6f 72 20 69 73 20 65 69 74 68 65 72  erator is either
12ec0 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
12ed0 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65 70   or .NULL, excep
12ee0 74 20 66 6f 72 20 74 68 65 20 5b 4f 70 65 72 61  t for the [Opera
12ef0 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65 6e  tor ||] concaten
12f00 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20 77  ation operator w
12f10 68 69 63 68 20 61 6c 77 61 79 73 20 0a 65 76 61  hich always .eva
12f20 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65 72  luates to either
12f30 20 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78 74 20   NULL or a text 
12f40 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64 5f  value.</p>"..hd_
12f50 66 72 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e 6f  fragment {isisno
12f60 74 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f 72 7d  t} {IS operator}
12f70 20 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f   {IS NOT operato
12f80 72 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70 3e  r}..hd_puts "<p>
12f90 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 49  ^The [Operator I
12fa0 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72  S] and [Operator
12fb0 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72 61   {IS NOT}] opera
12fc0 74 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20 5b  tors work.like [
12fd0 4f 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64 20  Operator =] and 
12fe0 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 65 78  [Operator !=] ex
12ff0 63 65 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f 72  cept when one or
13000 20 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70 65   both of the.ope
13010 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e 20  rands are NULL. 
13020 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 69  ^In this case, i
13030 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
13040 61 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  are NULL, then t
13050 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65  he.IS operator e
13060 76 61 6c 75 61 74 65 73 20 74 6f 20 31 20 28 74  valuates to 1 (t
13070 72 75 65 29 20 61 6e 64 20 74 68 65 20 49 53 20  rue) and the IS 
13080 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 65 76 61  NOT operator eva
13090 6c 75 61 74 65 73 0a 74 6f 20 30 20 28 66 61 6c  luates.to 0 (fal
130a0 73 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70 65  se). ^If one ope
130b0 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e 64  rand is NULL and
130c0 20 74 68 65 20 6f 74 68 65 72 20 69 73 20 6e 6f   the other is no
130d0 74 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f  t, then the.IS o
130e0 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
130f0 73 20 74 6f 20 30 20 28 66 61 6c 73 65 29 20 61  s to 0 (false) a
13100 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70  nd the IS NOT op
13110 65 72 61 74 6f 72 20 69 73 20 31 20 28 74 72 75  erator is 1 (tru
13120 65 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20 70  e)..^It is not p
13130 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 6e 20 49  ossible for an I
13140 53 20 6f 72 20 49 53 20 4e 4f 54 20 65 78 70 72  S or IS NOT expr
13150 65 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75 61  ession to evalua
13160 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70 65  te to NULL..^Ope
13170 72 61 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f 72  rators [Operator
13180 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74   IS] and [Operat
13190 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61 76  or {IS NOT}] hav
131a0 65 20 74 68 65 20 73 61 6d 65 20 0a 70 72 65 63  e the same .prec
131b0 65 64 65 6e 63 65 20 61 73 20 5b 4f 70 65 72 61  edence as [Opera
131c0 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e 68  tor =]."..<tcl>h
131d0 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74 76 61  d_fragment litva
131e0 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20 76 61 6c  lue {literal val
131f0 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c 69  ue}</tcl>.<h3>Li
13200 74 65 72 61 6c 20 56 61 6c 75 65 73 20 28 43 6f  teral Values (Co
13210 6e 73 74 61 6e 74 73 29 3c 2f 68 33 3e 0a 3c 70  nstants)</h3>.<p
13220 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75  >.A literal valu
13230 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 63  e represents a c
13240 6f 6e 73 74 61 6e 74 2e 0a 5e 4c 69 74 65 72 61  onstant..^Litera
13250 6c 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20  l values may be 
13260 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61 74 69  integers, floati
13270 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73  ng point numbers
13280 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42 73  , strings,.BLOBs
13290 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a 3c 70 3e 0a  , or NULLs..<p>.
132a0 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20 69  The syntax for i
132b0 6e 74 65 67 65 72 20 61 6e 64 20 66 6c 6f 61 74  nteger and float
132c0 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
132d0 6c 73 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79  ls (collectively
132e0 0a 22 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61  ."numeric litera
132f0 6c 73 22 29 20 69 73 20 73 68 6f 77 6e 20 62 79  ls") is shown by
13300 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64   the following d
13310 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63  iagram:</p>..<tc
13320 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
13330 6e 75 6d 65 72 69 63 2d 6c 69 74 65 72 61 6c 3c  numeric-literal<
13340 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49 66 20  /tcl>..<p>.^(If 
13350 61 20 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61  a numeric litera
13360 6c 20 68 61 73 20 61 20 64 65 63 69 6d 61 6c 20  l has a decimal 
13370 70 6f 69 6e 74 20 6f 72 20 61 6e 20 65 78 70 6f  point or an expo
13380 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73  nentiation.claus
13390 65 20 6f 72 20 69 66 20 69 74 73 20 6d 61 67 6e  e or if its magn
133a0 69 74 75 64 65 20 69 73 20 6c 65 73 73 20 74 68  itude is less th
133b0 61 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  an -922337203685
133c0 34 37 37 35 38 30 38 20 6f 72 0a 67 72 65 61 74  4775808 or.great
133d0 65 72 20 74 68 61 6e 20 39 32 32 33 33 37 32 30  er than 92233720
133e0 33 36 38 35 34 37 37 35 38 30 37 2c 20 74 68 65  36854775807, the
133f0 6e 20 69 74 20 69 73 20 61 20 66 6c 6f 61 74 69  n it is a floati
13400 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c  ng point literal
13410 2e 0a 4f 74 68 65 72 77 69 73 65 20 69 73 20 69  ..Otherwise is i
13420 74 20 69 73 20 61 6e 20 20 69 6e 74 65 67 65 72  t is an  integer
13430 20 6c 69 74 65 72 61 6c 2e 29 5e 0a 5e 54 68 65   literal.)^.^The
13440 20 22 45 22 20 63 68 61 72 61 63 74 65 72 20 74   "E" character t
13450 68 61 74 20 62 65 67 69 6e 73 20 74 68 65 20 65  hat begins the e
13460 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c  xponentiation.cl
13470 61 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74 69  ause of a floati
13480 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c  ng point literal
13490 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 75   can be either u
134a0 70 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63 61  pper or lower ca
134b0 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63 68  se..^(The "." ch
134c0 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61 79  aracter is alway
134d0 73 20 75 73 65 64 20 0a 61 73 20 74 68 65 20 64  s used .as the d
134e0 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65  ecimal point eve
134f0 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20  n if the locale 
13500 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69 65  setting specifie
13510 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72  s "," for.this r
13520 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66  ole - the use of
13530 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63   "," for the dec
13540 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64  imal point would
13550 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61   result in.synta
13560 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e 29  ctic ambiguity.)
13570 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
13580 65 6e 74 20 68 65 78 69 6e 74 20 7b 68 65 78 61  ent hexint {hexa
13590 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20  decimal integer 
135a0 6c 69 74 65 72 61 6c 73 7d 20 7b 68 65 78 61 64  literals} {hexad
135b0 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 7d  ecimal integers}
135c0 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 48 65 78 61 64  </tcl>.<p>^Hexad
135d0 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c  ecimal integer l
135e0 69 74 65 72 61 6c 73 20 66 6f 6c 6c 6f 77 20 74  iterals follow t
135f0 68 65 20 43 2d 6c 61 6e 67 75 61 67 65 20 6e 6f  he C-language no
13600 74 61 74 69 6f 6e 20 6f 66 0a 22 30 78 22 20 6f  tation of."0x" o
13610 72 20 22 30 58 22 20 66 6f 6c 6c 6f 77 65 64 20  r "0X" followed 
13620 62 79 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64  by hexadecimal d
13630 69 67 69 74 73 2e 0a 5e 46 6f 72 20 65 78 61 6d  igits..^For exam
13640 70 6c 65 2c 20 30 78 31 32 33 34 20 6d 65 61 6e  ple, 0x1234 mean
13650 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 34 36  s the same as 46
13660 36 30 0a 61 6e 64 20 30 78 38 30 30 30 30 30 30  60.and 0x8000000
13670 30 30 30 30 30 30 30 30 30 20 6d 65 61 6e 73 20  000000000 means 
13680 74 68 65 20 73 61 6d 65 20 61 73 20 2d 39 32 32  the same as -922
13690 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
136a0 2e 0a 20 5e 28 48 65 78 61 64 65 63 69 6d 61 6c  .. ^(Hexadecimal
136b0 20 69 6e 74 65 67 65 72 20 6c 69 74 65 72 61 6c   integer literal
136c0 73 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65  s are interprete
136d0 64 20 61 73 20 36 34 2d 62 69 74 0a 74 77 6f 27  d as 64-bit.two'
136e0 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
136f0 65 67 65 72 73 20 61 6e 64 20 61 72 65 20 74 68  egers and are th
13700 75 73 20 6c 69 6d 69 74 65 64 0a 74 6f 20 73 69  us limited.to si
13710 78 74 65 65 6e 20 73 69 67 6e 69 66 69 63 61 6e  xteen significan
13720 74 20 64 69 67 69 74 73 20 6f 66 20 70 72 65 63  t digits of prec
13730 69 73 69 6f 6e 2e 29 5e 0a 53 75 70 70 6f 72 74  ision.)^.Support
13740 20 66 6f 72 20 68 65 78 61 64 65 63 69 6d 61 6c   for hexadecimal
13750 20 69 6e 74 65 67 65 72 73 20 77 61 73 20 61 64   integers was ad
13760 64 65 64 20 74 6f 20 53 51 4c 69 74 65 20 76 65  ded to SQLite ve
13770 72 73 69 6f 6e 20 33 2e 38 2e 36 2e 0a 5e 46 6f  rsion 3.8.6..^Fo
13780 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
13790 61 74 69 62 69 6c 69 74 79 2c 20 74 68 65 20 22  atibility, the "
137a0 30 78 22 20 68 65 78 61 64 65 63 69 6d 61 6c 20  0x" hexadecimal 
137b0 69 6e 74 65 67 65 72 0a 6e 6f 74 61 74 69 6f 6e  integer.notation
137c0 20 69 73 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74   is only underst
137d0 6f 6f 64 20 62 79 20 74 68 65 20 53 51 4c 20 6c  ood by the SQL l
137e0 61 6e 67 75 61 67 65 20 70 61 72 73 65 72 2c 20  anguage parser, 
137f0 6e 6f 74 20 62 79 20 74 68 65 0a 74 79 70 65 20  not by the.type 
13800 63 6f 6e 76 65 72 73 69 6f 6e 73 20 72 6f 75 74  conversions rout
13810 69 6e 65 73 2e 0a 5e 28 53 74 72 69 6e 67 20 76  ines..^(String v
13820 61 72 69 61 62 6c 65 73 20 74 68 61 74 0a 63 6f  ariables that.co
13830 6e 74 61 69 6e 20 74 65 78 74 20 66 6f 72 6d 61  ntain text forma
13840 74 74 65 64 20 6c 69 6b 65 20 68 65 78 61 64 65  tted like hexade
13850 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 61  cimal integers a
13860 72 65 20 6e 6f 74 0a 69 6e 74 65 72 70 72 65 74  re not.interpret
13870 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d 61  ed as hexadecima
13880 6c 20 69 6e 74 65 67 65 72 73 20 77 68 65 6e 20  l integers when 
13890 63 6f 65 72 63 69 6e 67 20 74 68 65 20 73 74 72  coercing the str
138a0 69 6e 67 20 76 61 6c 75 65 0a 69 6e 74 6f 20 61  ing value.into a
138b0 6e 20 69 6e 74 65 67 65 72 20 64 75 65 20 74 6f  n integer due to
138c0 20 61 20 5b 43 41 53 54 20 65 78 70 72 65 73 73   a [CAST express
138d0 69 6f 6e 5d 20 6f 72 20 66 6f 72 20 61 20 5b 63  ion] or for a [c
138e0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 0a  olumn affinity].
138f0 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 6f  transformation o
13900 72 20 70 72 69 6f 72 20 74 6f 20 70 65 72 66 6f  r prior to perfo
13910 72 6d 69 6e 67 20 61 20 6e 75 6d 65 72 69 63 20  rming a numeric 
13920 6f 70 65 72 61 74 69 6f 6e 20 6f 72 20 66 6f 72  operation or for
13930 0a 61 6e 79 20 6f 74 68 65 72 20 72 75 6e 2d 74  .any other run-t
13940 69 6d 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e  ime conversions.
13950 29 5e 20 20 5e 28 57 68 65 6e 20 63 6f 65 72 63  )^  ^(When coerc
13960 69 6e 67 20 61 0a 73 74 72 69 6e 67 20 76 61 6c  ing a.string val
13970 75 65 20 69 6e 20 74 68 65 20 66 6f 72 6d 61 74  ue in the format
13980 20 6f 66 20 61 20 68 65 78 61 64 65 63 69 6d 61   of a hexadecima
13990 6c 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61  l integer into a
139a0 6e 20 69 6e 74 65 67 65 72 0a 76 61 6c 75 65 2c  n integer.value,
139b0 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
139c0 70 72 6f 63 65 73 73 20 73 74 6f 70 73 20 77 68  process stops wh
139d0 65 6e 20 74 68 65 20 27 78 27 20 63 68 61 72 61  en the 'x' chara
139e0 63 74 65 72 20 69 73 20 73 65 65 6e 0a 73 6f 20  cter is seen.so 
139f0 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 69 6e  the resulting in
13a00 74 65 67 65 72 20 76 61 6c 75 65 20 69 73 20 61  teger value is a
13a10 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 5e 28  lways zero.)^.^(
13a20 53 51 4c 69 74 65 20 6f 6e 6c 79 20 75 6e 64 65  SQLite only unde
13a30 72 73 74 61 6e 64 73 20 74 68 65 20 68 65 78 61  rstands the hexa
13a40 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20  decimal integer 
13a50 6e 6f 74 61 74 69 6f 6e 20 77 68 65 6e 20 69 74  notation when it
13a60 0a 61 70 70 65 61 72 73 20 69 6e 20 74 68 65 20  .appears in the 
13a70 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 65  SQL statement te
13a80 78 74 2c 20 6e 6f 74 20 77 68 65 6e 20 69 74 20  xt, not when it 
13a90 61 70 70 65 61 72 73 20 61 73 0a 70 61 72 74 20  appears as.part 
13aa0 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  of the content o
13ab0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 29  f the database.)
13ac0 5e 0a 0a 3c 70 3e 20 5e 41 20 73 74 72 69 6e 67  ^..<p> ^A string
13ad0 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72   constant is for
13ae0 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67  med by enclosing
13af0 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73   the.string in s
13b00 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29  ingle quotes (')
13b10 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 71 75 6f  .  ^A single quo
13b20 74 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 74  te within the st
13b30 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f  ring can.be enco
13b40 64 65 64 20 62 79 20 70 75 74 74 69 6e 67 20 74  ded by putting t
13b50 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73  wo single quotes
13b60 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73 20 69   in a row - as i
13b70 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c  n Pascal..C-styl
13b80 65 20 65 73 63 61 70 65 73 20 75 73 69 6e 67 20  e escapes using 
13b90 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20 63 68  the backslash ch
13ba0 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f 74 20  aracter are not 
13bb0 73 75 70 70 6f 72 74 65 64 20 62 65 63 61 75 73  supported becaus
13bc0 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74 20 73  e.they are not s
13bd0 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 0a 3c 70  tandard SQL...<p
13be0 3e 20 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73  > ^BLOB literals
13bf0 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65   are string lite
13c00 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20  rals containing 
13c10 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61  hexadecimal data
13c20 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79   and.preceded by
13c30 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72   a single "x" or
13c40 20 22 58 22 20 63 68 61 72 61 63 74 65 72 2e 20   "X" character. 
13c50 20 5e 28 45 78 61 6d 70 6c 65 3a 20 58 27 35 33   ^(Example: X'53
13c60 35 31 34 43 36 39 37 34 36 35 27 29 5e 0a 0a 3c  514C697465')^..<
13c70 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61  p>.^A literal va
13c80 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  lue can also be 
13c90 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22  the token "NULL"
13ca0 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ..</p>..<tcl>hd_
13cb0 66 72 61 67 6d 65 6e 74 20 76 61 72 70 61 72 61  fragment varpara
13cc0 6d 20 70 61 72 61 6d 65 74 65 72 20 70 61 72 61  m parameter para
13cd0 6d 65 74 65 72 73 20 7b 62 6f 75 6e 64 20 70 61  meters {bound pa
13ce0 72 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20  rameter} {bound 
13cf0 70 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c  parameters}</tcl
13d00 3e 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65 72 73  >.<h3>Parameters
13d10 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72  </h3>.<p>.A "var
13d20 69 61 62 6c 65 22 20 6f 72 20 22 70 61 72 61 6d  iable" or "param
13d30 65 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63  eter" token.spec
13d40 69 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c  ifies a placehol
13d50 64 65 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  der in the expre
13d60 73 73 69 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c  ssion for a .val
13d70 75 65 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65  ue that is fille
13d80 64 20 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20  d in at runtime 
13d90 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74  using the.[sqlit
13da0 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c  e3_bind_blob() |
13db0 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d   sqlite3_bind()]
13dc0 20 66 61 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b   family of C/C++
13dd0 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 50 61 72   interfaces..Par
13de0 61 6d 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65  ameters can take
13df0 20 73 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a   several forms:.
13e00 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
13e10 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a  e>.<table>.<tr>.
13e20 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
13e30 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
13e40 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69  b>?</b><i>NNN</i
13e50 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
13e60 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
13e70 28 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  (A question mark
13e80 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e   followed by a n
13e90 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e  umber <i>NNN</i>
13ea0 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f   holds a spot fo
13eb0 72 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72  r the.NNN-th par
13ec0 61 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73  ameter.  NNN mus
13ed0 74 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61  t be between 1 a
13ee0 6e 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56  nd [SQLITE_MAX_V
13ef0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e  ARIABLE_NUMBER].
13f00 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  )^.</td>.</tr>.<
13f10 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
13f20 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
13f30 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e  p"><b>?</b></td>
13f40 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
13f50 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73  /td>.<td>^A ques
13f60 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74 20 69  tion mark that i
13f70 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62  s not followed b
13f80 79 20 61 20 6e 75 6d 62 65 72 20 63 72 65 61 74  y a number creat
13f90 65 73 20 61 20 70 61 72 61 6d 65 74 65 72 0a 77  es a parameter.w
13fa0 69 74 68 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65  ith a number one
13fb0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
13fc0 65 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65  e largest parame
13fd0 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61  ter number alrea
13fe0 64 79 20 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66  dy assigned..^If
13ff0 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20   this means the 
14000 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
14010 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
14020 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  .[SQLITE_MAX_VAR
14030 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69  IABLE_NUMBER], i
14040 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 54  t is an error..T
14050 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 66 6f  his parameter fo
14060 72 6d 61 74 20 69 73 20 70 72 6f 76 69 64 65 64  rmat is provided
14070 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69   for compatibili
14080 74 79 20 77 69 74 68 20 6f 74 68 65 72 20 64 61  ty with other da
14090 74 61 62 61 73 65 0a 65 6e 67 69 6e 65 73 2e 20  tabase.engines. 
140a0 20 42 75 74 20 62 65 63 61 75 73 65 20 69 74 20   But because it 
140b0 69 73 20 65 61 73 79 20 74 6f 20 6d 69 73 63 6f  is easy to misco
140c0 75 6e 74 20 74 68 65 20 71 75 65 73 74 69 6f 6e  unt the question
140d0 20 6d 61 72 6b 73 2c 20 74 68 65 0a 75 73 65 20   marks, the.use 
140e0 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  of this paramete
140f0 72 20 66 6f 72 6d 61 74 20 69 73 20 64 69 73 63  r format is disc
14100 6f 75 72 61 67 65 64 2e 20 20 50 72 6f 67 72 61  ouraged.  Progra
14110 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75 72  mmers are encour
14120 61 67 65 64 0a 74 6f 20 75 73 65 20 6f 6e 65 20  aged.to use one 
14130 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  of the symbolic 
14140 66 6f 72 6d 61 74 73 20 62 65 6c 6f 77 20 6f 72  formats below or
14150 20 74 68 65 20 3f 4e 4e 4e 20 66 6f 72 6d 61 74   the ?NNN format
14160 20 61 62 6f 76 65 20 69 6e 73 74 65 61 64 2e 0a   above instead..
14170 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
14180 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
14190 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
141a0 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c  <b>:</b><i>AAAA<
141b0 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /i></td><td widt
141c0 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
141d0 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77  >^A colon follow
141e0 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66  ed by an identif
141f0 69 65 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61  ier name holds a
14200 20 73 70 6f 74 20 66 6f 72 20 61 20 0a 5b 73 71   spot for a .[sq
14210 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
14220 65 74 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20  eter_name|named 
14230 70 61 72 61 6d 65 74 65 72 5d 20 77 69 74 68 20  parameter] with 
14240 74 68 65 20 6e 61 6d 65 20 3a 41 41 41 41 2e 20  the name :AAAA. 
14250 20 0a 5e 28 4e 61 6d 65 64 20 70 61 72 61 6d 65   .^(Named parame
14260 74 65 72 73 20 61 72 65 20 61 6c 73 6f 20 6e 75  ters are also nu
14270 6d 62 65 72 65 64 2e 20 54 68 65 20 6e 75 6d 62  mbered. The numb
14280 65 72 20 61 73 73 69 67 6e 65 64 20 69 73 20 6f  er assigned is o
14290 6e 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a  ne greater than.
142a0 74 68 65 20 6c 61 72 67 65 73 74 20 70 61 72 61  the largest para
142b0 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72  meter number alr
142c0 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e 29 5e  eady assigned.)^
142d0 20 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20   ^If this means 
142e0 74 68 65 20 70 61 72 61 6d 65 74 65 72 0a 77 6f  the parameter.wo
142f0 75 6c 64 20 62 65 20 61 73 73 69 67 6e 65 64 20  uld be assigned 
14300 61 20 6e 75 6d 62 65 72 20 67 72 65 61 74 65 72  a number greater
14310 20 74 68 61 6e 20 5b 53 51 4c 49 54 45 5f 4d 41   than [SQLITE_MA
14320 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
14330 52 5d 2c 20 69 74 20 69 73 0a 61 6e 20 65 72 72  R], it is.an err
14340 6f 72 2e 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e  or. To avoid con
14350 66 75 73 69 6f 6e 2c 20 69 74 20 69 73 20 62 65  fusion, it is be
14360 73 74 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69  st to avoid mixi
14370 6e 67 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d  ng named and num
14380 62 65 72 65 64 0a 70 61 72 61 6d 65 74 65 72 73  bered.parameters
14390 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
143a0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
143b0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
143c0 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41  ><b>@</b><i>AAAA
143d0 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </i></td><td wid
143e0 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
143f0 64 3e 5e 41 6e 20 22 61 74 22 20 73 69 67 6e 20  d>^An "at" sign 
14400 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
14410 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20 65 78 63 65  ke a colon, exce
14420 70 74 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65  pt that the name
14430 20 6f 66 0a 74 68 65 20 70 61 72 61 6d 65 74 65   of.the paramete
14440 72 20 63 72 65 61 74 65 64 20 69 73 20 40 41 41  r created is @AA
14450 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  AA.</td>.</tr>.<
14460 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
14470 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
14480 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41  p"><b>$</b><i>AA
14490 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  AA</i></td><td w
144a0 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
144b0 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d 73 69  <td>^A dollar-si
144c0 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  gn followed by a
144d0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  n identifier nam
144e0 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73  e also holds a s
144f0 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a  pot for a named.
14500 70 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74  parameter with t
14510 68 65 20 6e 61 6d 65 20 24 41 41 41 41 2e 20 20  he name $AAAA.  
14520 5e 28 54 68 65 20 69 64 65 6e 74 69 66 69 65 72  ^(The identifier
14530 20 6e 61 6d 65 20 69 6e 20 74 68 69 73 20 63 61   name in this ca
14540 73 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f  se can include.o
14550 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72  ne or more occur
14560 72 65 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61  rences of "::" a
14570 6e 64 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c  nd a suffix encl
14580 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20  osed in "(...)" 
14590 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74  containing.any t
145a0 65 78 74 20 61 74 20 61 6c 6c 2e 29 5e 20 20 54  ext at all.)^  T
145b0 68 69 73 20 73 79 6e 74 61 78 20 69 73 20 74 68  his syntax is th
145c0 65 20 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69  e form of a vari
145d0 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65  able name in the
145e0 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c  .[http://www.tcl
145f0 2e 74 6b 2f 20 7c 20 54 63 6c 20 70 72 6f 67 72  .tk/ | Tcl progr
14600 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 5d  amming language]
14610 2e 20 20 54 68 65 20 70 72 65 73 65 6e 63 65 0a  .  The presence.
14620 6f 66 20 74 68 69 73 20 73 79 6e 74 61 78 20 72  of this syntax r
14630 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20  esults from the 
14640 66 61 63 74 20 74 68 61 74 20 53 51 4c 69 74 65  fact that SQLite
14650 20 69 73 20 72 65 61 6c 6c 79 20 61 20 0a 5b 54   is really a .[T
14660 63 6c 20 65 78 74 65 6e 73 69 6f 6e 5d 20 74 68  cl extension] th
14670 61 74 20 68 61 73 20 65 73 63 61 70 65 64 20 69  at has escaped i
14680 6e 74 6f 20 74 68 65 20 77 69 6c 64 2e 3c 2f 74  nto the wild.</t
14690 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  d>.</tr>.</table
146a0 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >.</blockquote>.
146b0 0a 3c 70 3e 5e 50 61 72 61 6d 65 74 65 72 73 20  .<p>^Parameters 
146c0 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61 73 73  that are not ass
146d0 69 67 6e 65 64 20 76 61 6c 75 65 73 20 75 73 69  igned values usi
146e0 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64  ng.[sqlite3_bind
146f0 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65  _blob() | sqlite
14700 33 5f 62 69 6e 64 28 29 5d 20 61 72 65 20 74 72  3_bind()] are tr
14710 65 61 74 65 64 0a 61 73 20 4e 55 4c 4c 2e 20 20  eated.as NULL.  
14720 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 62 69 6e  The [sqlite3_bin
14730 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65  d_parameter_inde
14740 78 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63  x()] interface c
14750 61 6e 20 62 65 20 75 73 65 64 0a 74 6f 20 74 72  an be used.to tr
14760 61 6e 73 6c 61 74 65 20 61 20 73 79 6d 62 6f 6c  anslate a symbol
14770 69 63 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d  ic parameter nam
14780 65 20 69 6e 74 6f 20 69 74 73 20 65 71 75 69 76  e into its equiv
14790 61 6c 65 6e 74 20 6e 75 6d 65 72 69 63 20 69 6e  alent numeric in
147a0 64 65 78 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  dex.</p>..<p>^Th
147b0 65 20 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d 65  e maximum parame
147c0 74 65 72 20 6e 75 6d 62 65 72 20 69 73 20 73 65  ter number is se
147d0 74 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  t at compile-tim
147e0 65 20 62 79 0a 74 68 65 20 5b 53 51 4c 49 54 45  e by.the [SQLITE
147f0 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
14800 4d 42 45 52 5d 20 6d 61 63 72 6f 2e 20 20 5e 28  MBER] macro.  ^(
14810 41 6e 20 69 6e 64 69 76 69 64 75 61 6c 20 5b 64  An individual [d
14820 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
14830 6f 6e 5d 0a 44 20 63 61 6e 20 72 65 64 75 63 65  on].D can reduce
14840 20 69 74 73 20 6d 61 78 69 6d 75 6d 20 70 61 72   its maximum par
14850 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 62 65  ameter number be
14860 6c 6f 77 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d  low the compile-
14870 74 69 6d 65 20 6d 61 78 69 6d 75 6d 0a 75 73 69  time maximum.usi
14880 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
14890 6c 69 6d 69 74 5d 28 44 2c 20 5b 53 51 4c 49 54  limit](D, [SQLIT
148a0 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45  E_LIMIT_VARIABLE
148b0 5f 4e 55 4d 42 45 52 5d 2c 2e 2e 2e 29 20 69 6e  _NUMBER],...) in
148c0 74 65 72 66 61 63 65 2e 29 5e 0a 3c 2f 70 3e 0a  terface.)^.</p>.
148d0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
148e0 74 20 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41  t like LIKE ESCA
148f0 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  PE</tcl>.<h3>The
14900 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f   LIKE and GLOB o
14910 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70  perators</h3>.<p
14920 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61  >^The LIKE opera
14930 74 6f 72 20 64 6f 65 73 20 61 20 70 61 74 74 65  tor does a patte
14940 72 6e 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70  rn matching comp
14950 61 72 69 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65  arison. ^The ope
14960 72 61 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68  rand.to the righ
14970 74 20 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f 70  t of the LIKE op
14980 65 72 61 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20  erator contains 
14990 74 68 65 20 70 61 74 74 65 72 6e 20 61 6e 64 20  the pattern and 
149a0 74 68 65 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70  the left hand.op
149b0 65 72 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74  erand contains t
149c0 68 65 20 73 74 72 69 6e 67 20 74 6f 20 6d 61 74  he string to mat
149d0 63 68 20 61 67 61 69 6e 73 74 20 74 68 65 20 70  ch against the p
149e0 61 74 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64  attern...<tcl>hd
149f0 5f 70 75 74 73 20 22 5e 41 20 70 65 72 63 65 6e  _puts "^A percen
14a00 74 20 73 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29  t symbol (\"%\")
14a10 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74   in the LIKE pat
14a20 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79  tern matches any
14a30 0a 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72  .sequence of zer
14a40 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63  o or more charac
14a50 74 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69  ters in the stri
14a60 6e 67 2e 20 20 5e 41 6e 20 75 6e 64 65 72 73 63  ng.  ^An undersc
14a70 6f 72 65 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74  ore.(\"_\") in t
14a80 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20  he LIKE pattern 
14a90 6d 61 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67  matches any sing
14aa0 6c 65 20 63 68 61 72 61 63 74 65 72 20 69 6e 20  le character in 
14ab0 74 68 65 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41  the.string.  ^(A
14ac0 6e 79 20 6f 74 68 65 72 20 63 68 61 72 61 63 74  ny other charact
14ad0 65 72 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c  er matches itsel
14ae0 66 20 6f 72 20 69 74 73 20 6c 6f 77 65 72 2f 75  f or its lower/u
14af0 70 70 65 72 20 63 61 73 65 0a 65 71 75 69 76 61  pper case.equiva
14b00 6c 65 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d  lent (i.e. case-
14b10 69 6e 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63  insensitive matc
14b20 68 69 6e 67 29 2e 29 5e 20 20 28 41 20 62 75 67  hing).)^  (A bug
14b30 3a 20 5e 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75  : ^SQLite only.u
14b40 6e 64 65 72 73 74 61 6e 64 73 20 75 70 70 65 72  nderstands upper
14b50 2f 6c 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20  /lower case for 
14b60 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
14b70 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 5e 54   by default.  ^T
14b80 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he.LIKE operator
14b90 20 69 73 20 63 61 73 65 20 73 65 6e 73 69 74 69   is case sensiti
14ba0 76 65 20 62 79 20 64 65 66 61 75 6c 74 20 66 6f  ve by default fo
14bb0 72 20 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63  r unicode charac
14bc0 74 65 72 73 20 74 68 61 74 20 61 72 65 0a 62 65  ters that are.be
14bd0 79 6f 6e 64 20 74 68 65 20 41 53 43 49 49 20 72  yond the ASCII r
14be0 61 6e 67 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ange.  For examp
14bf0 6c 65 2c 0a 5e 74 68 65 20 65 78 70 72 65 73 73  le,.^the express
14c00 69 6f 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70 3b  ion <b>'a'&nbsp;
14c10 4c 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62  LIKE&nbsp;'A'</b
14c20 3e 0a 69 73 20 54 52 55 45 20 62 75 74 20 3c 62  >.is TRUE but <b
14c30 3e 27 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b  >'&aelig;'&nbsp;
14c40 4c 49 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69  LIKE&nbsp;'&AEli
14c50 67 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45  g;'</b> is FALSE
14c60 2e 29 3c 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70  .)<p>"</tcl>..<p
14c70 3e 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61  >^If the optiona
14c80 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20  l ESCAPE clause 
14c90 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  is present, then
14ca0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
14cb0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53  following the ES
14cc0 43 41 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73  CAPE keyword mus
14cd0 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20  t evaluate to a 
14ce0 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e  string consistin
14cf0 67 20 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68  g of.a single ch
14d00 61 72 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63  aracter. ^This c
14d10 68 61 72 61 63 74 65 72 20 6d 61 79 20 62 65 20  haracter may be 
14d20 75 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45  used in the LIKE
14d30 20 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c   pattern.to incl
14d40 75 64 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63  ude literal perc
14d50 65 6e 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72  ent or underscor
14d60 65 20 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54  e characters. ^T
14d70 68 65 20 65 73 63 61 70 65 0a 63 68 61 72 61 63  he escape.charac
14d80 74 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ter followed by 
14d90 61 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  a percent symbol
14da0 20 28 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65   (%), underscore
14db0 20 28 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e   (_), or a secon
14dc0 64 0a 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  d.instance of th
14dd0 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74  e escape charact
14de0 65 72 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65  er itself matche
14df0 73 20 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63  s a.literal perc
14e00 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65  ent symbol, unde
14e10 72 73 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e  rscore, or a sin
14e20 67 6c 65 20 65 73 63 61 70 65 20 63 68 61 72 61  gle escape chara
14e30 63 74 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65  cter,.respective
14e40 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66  ly...<p>^The inf
14e50 69 78 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  ix LIKE operator
14e60 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
14e70 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61  by calling the.a
14e80 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
14e90 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73  ed SQL functions
14ea0 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c   [like(<i>Y</i>,
14eb0 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c  <i>X</i>)] or.[l
14ec0 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  ike(<i>Y</i>,<i>
14ed0 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d  X</i>,<i>Z</i>)]
14ee0 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  </a>.</p>..<p>^T
14ef0 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
14f00 20 63 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73   can be made cas
14f10 65 20 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e  e sensitive usin
14f20 67 20 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73  g the.[case_sens
14f30 69 74 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d  itive_like pragm
14f40 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  a].</p>..<tcl>hd
14f50 5f 66 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47  _fragment glob G
14f60 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  LOB</tcl>.<p>^Th
14f70 65 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20  e GLOB operator 
14f80 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49  is similar to LI
14f90 4b 45 20 62 75 74 20 75 73 65 73 20 74 68 65 20  KE but uses the 
14fa0 55 6e 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69  Unix.file globbi
14fb0 6e 67 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74  ng syntax for it
14fc0 73 20 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41  s wildcards.  ^A
14fd0 6c 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73  lso, GLOB is cas
14fe0 65 0a 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c  e.sensitive, unl
14ff0 69 6b 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68  ike LIKE.  ^Both
15000 20 47 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d   GLOB and LIKE m
15010 61 79 20 62 65 20 70 72 65 63 65 64 65 64 20 62  ay be preceded b
15020 79 0a 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72  y.the NOT keywor
15030 64 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20  d to invert the 
15040 73 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73  sense of the tes
15050 74 2e 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47  t.  ^The infix G
15060 4c 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73  LOB .operator is
15070 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
15080 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63  calling the func
15090 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c  tion.[glob(<i>Y<
150a0 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61  /i>,<i>X</i>)] a
150b0 6e 64 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69  nd can be modifi
150c0 65 64 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67  ed by overriding
150d0 0a 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c  .that function.<
150e0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
150f0 67 6d 65 6e 74 20 72 65 67 65 78 70 20 52 45 47  gment regexp REG
15100 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  EXP</tcl>.<p>^Th
15110 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f  e REGEXP operato
15120 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73  r is a special s
15130 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 72 65  yntax for the re
15140 67 65 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63  gexp().user func
15150 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78  tion.  ^No regex
15160 70 28 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f  p() user functio
15170 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
15180 64 65 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75  default.and so u
15190 73 65 20 6f 66 20 74 68 65 20 52 45 47 45 58 50  se of the REGEXP
151a0 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e   operator will n
151b0 6f 72 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69  ormally result i
151c0 6e 20 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61  n an.error messa
151d0 67 65 2e 20 20 5e 49 66 20 61 6e 20 5b 61 70 70  ge.  ^If an [app
151e0 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
151f0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e   SQL function] n
15200 61 6d 65 64 20 22 72 65 67 65 78 70 22 0a 69 73  amed "regexp".is
15210 20 61 64 64 65 64 20 61 74 20 72 75 6e 2d 74 69   added at run-ti
15220 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 22 3c 69  me, then the "<i
15230 3e 58 3c 2f 69 3e 20 52 45 47 45 58 50 20 3c 69  >X</i> REGEXP <i
15240 3e 59 3c 2f 69 3e 22 20 6f 70 65 72 61 74 6f 72  >Y</i>" operator
15250 20 77 69 6c 6c 0a 62 65 20 69 6d 70 6c 65 6d 65   will.be impleme
15260 6e 74 65 64 20 61 73 20 61 20 63 61 6c 6c 20 74  nted as a call t
15270 6f 20 22 72 65 67 65 78 70 28 3c 69 3e 59 3c 2f  o "regexp(<i>Y</
15280 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 22 2e 3c 2f  i>,<i>X</i>)".</
15290 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
152a0 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41 54 43 48  ment match MATCH
152b0 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d  </tcl>.<p>^The M
152c0 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69 73  ATCH operator is
152d0 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61   a special synta
152e0 78 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68 28  x for the match(
152f0 29 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  ).application-de
15300 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 2e 20  fined function. 
15310 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 6d 61   ^The default ma
15320 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  tch() function i
15330 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61  mplementation.ra
15340 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f  ises an exceptio
15350 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20 72 65 61  n and is not rea
15360 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20 61  lly useful for a
15370 6e 79 74 68 69 6e 67 2e 0a 5e 42 75 74 20 65 78  nything..^But ex
15380 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65  tensions can ove
15390 72 72 69 64 65 20 74 68 65 20 6d 61 74 63 68 28  rride the match(
153a0 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ) function with 
153b0 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67  more.helpful log
153c0 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ic.</p>..<tcl>hd
153d0 5f 66 72 61 67 6d 65 6e 74 20 62 65 74 77 65 65  _fragment betwee
153e0 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a  n BETWEEN</tcl>.
153f0 3c 68 33 3e 54 68 65 20 42 45 54 57 45 45 4e 20  <h3>The BETWEEN 
15400 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70  operator</h3>.<p
15410 3e 5e 28 54 68 65 20 42 45 54 57 45 45 4e 20 6f  >^(The BETWEEN o
15420 70 65 72 61 74 6f 72 20 69 73 20 6c 6f 67 69 63  perator is logic
15430 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 20  ally equivalent 
15440 74 6f 20 61 20 70 61 69 72 20 6f 66 20 63 6f 6d  to a pair of com
15450 70 61 72 69 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c  parisons.."<i>x<
15460 2f 69 3e 20 3c 62 3e 42 45 54 57 45 45 4e 3c 2f  /i> <b>BETWEEN</
15470 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41  b> <i>y</i> <b>A
15480 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22  ND</b> <i>z</i>"
15490 20 69 73 20 0a 65 71 75 69 76 61 6c 65 6e 74 20   is .equivalent 
154a0 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e  to ."<i>x</i><b>
154b0 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69  &gt;=</b><i>y</i
154c0 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e  > <b>AND</b> <i>
154d0 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62  x</i><b>&lt;=</b
154e0 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65 78 63 65 70  ><i>z</i>" excep
154f0 74 0a 74 68 61 74 20 77 69 74 68 20 42 45 54 57  t.that with BETW
15500 45 45 4e 2c 20 74 68 65 20 3c 69 3e 78 3c 2f 69  EEN, the <i>x</i
15510 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  > expression is 
15520 6f 6e 6c 79 20 65 76 61 6c 75 61 74 65 64 20 6f  only evaluated o
15530 6e 63 65 2e 29 5e 0a 5e 54 68 65 20 70 72 65 63  nce.)^.^The prec
15540 65 64 65 6e 63 65 20 6f 66 20 74 68 65 20 42 45  edence of the BE
15550 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69  TWEEN operator i
15560 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
15570 65 20 70 72 65 63 65 64 65 6e 63 65 0a 61 73 20  e precedence.as 
15580 6f 70 65 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c  operators <b>==<
15590 2f 62 3e 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62  /b> and <b>!=</b
155a0 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62  > and <b>LIKE</b
155b0 3e 20 61 6e 64 20 67 72 6f 75 70 73 20 6c 65 66  > and groups lef
155c0 74 20 74 6f 20 72 69 67 68 74 2e 0a 0a 3c 74 63  t to right...<tc
155d0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61  l>hd_fragment ca
155e0 73 65 20 7b 43 41 53 45 20 65 78 70 72 65 73 73  se {CASE express
155f0 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  ion}</tcl>.<h3>T
15600 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
15610 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20 43 41 53  on</h3>.<p>A CAS
15620 45 20 65 78 70 72 65 73 73 69 6f 6e 20 73 65 72  E expression ser
15630 76 65 73 20 61 20 72 6f 6c 65 20 73 69 6d 69 6c  ves a role simil
15640 61 72 20 74 6f 20 49 46 2d 54 48 45 4e 2d 45 4c  ar to IF-THEN-EL
15650 53 45 20 69 6e 20 6f 74 68 65 72 0a 70 72 6f 67  SE in other.prog
15660 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65  ramming language
15670 73 2e 20 20 0a 0a 3c 70 3e 54 68 65 20 6f 70 74  s.  ..<p>The opt
15680 69 6f 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ional expression
15690 20 74 68 61 74 20 6f 63 63 75 72 73 20 69 6e 20   that occurs in 
156a0 62 65 74 77 65 65 6e 20 74 68 65 20 43 41 53 45  between the CASE
156b0 20 6b 65 79 77 6f 72 64 20 61 6e 64 20 74 68 65   keyword and the
156c0 0a 66 69 72 73 74 20 57 48 45 4e 20 6b 65 79 77  .first WHEN keyw
156d0 6f 72 64 20 69 73 20 63 61 6c 6c 65 64 20 74 68  ord is called th
156e0 65 20 22 62 61 73 65 22 20 65 78 70 72 65 73 73  e "base" express
156f0 69 6f 6e 2e 20 5e 54 68 65 72 65 20 61 72 65 20  ion. ^There are 
15700 74 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73 0a  two basic forms.
15710 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
15720 65 73 73 69 6f 6e 3a 20 74 68 6f 73 65 20 77 69  ession: those wi
15730 74 68 20 61 20 62 61 73 65 20 65 78 70 72 65 73  th a base expres
15740 73 69 6f 6e 20 61 6e 64 20 74 68 6f 73 65 20 77  sion and those w
15750 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20  ithout...<p>^In 
15760 61 20 43 41 53 45 20 77 69 74 68 6f 75 74 20 61  a CASE without a
15770 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
15780 2c 20 65 61 63 68 20 57 48 45 4e 20 65 78 70 72  , each WHEN expr
15790 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
157a0 74 65 64 0a 61 6e 64 20 74 68 65 20 72 65 73 75  ted.and the resu
157b0 6c 74 20 74 72 65 61 74 65 64 20 61 73 20 61 20  lt treated as a 
157c0 62 6f 6f 6c 65 61 6e 2c 20 73 74 61 72 74 69 6e  boolean, startin
157d0 67 20 77 69 74 68 20 74 68 65 20 6c 65 66 74 6d  g with the leftm
157e0 6f 73 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 69  ost and continui
157f0 6e 67 0a 74 6f 20 74 68 65 20 72 69 67 68 74 2e  ng.to the right.
15800 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
15810 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
15820 69 6f 6e 20 69 73 20 74 68 65 20 65 76 61 6c 75  ion is the evalu
15830 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45  ation of the THE
15840 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  N.expression tha
15850 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
15860 20 74 68 65 20 66 69 72 73 74 20 57 48 45 4e 20   the first WHEN 
15870 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
15880 65 76 61 6c 75 61 74 65 73 20 74 6f 0a 74 72 75  evaluates to.tru
15890 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20  e. ^Or, if none 
158a0 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72  of the WHEN expr
158b0 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
158c0 20 74 6f 20 74 72 75 65 2c 20 74 68 65 20 72 65   to true, the re
158d0 73 75 6c 74 20 6f 66 0a 65 76 61 6c 75 61 74 69  sult of.evaluati
158e0 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
158f0 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20  ession, if any. 
15900 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
15910 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
15920 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and.none of the 
15930 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
15940 20 61 72 65 20 74 72 75 65 2c 20 74 68 65 6e 20   are true, then 
15950 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75  the overall resu
15960 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  lt is NULL...<p>
15970 5e 41 20 4e 55 4c 4c 20 72 65 73 75 6c 74 20 69  ^A NULL result i
15980 73 20 63 6f 6e 73 69 64 65 72 65 64 20 75 6e 74  s considered unt
15990 72 75 65 20 77 68 65 6e 20 65 76 61 6c 75 61 74  rue when evaluat
159a0 69 6e 67 20 57 48 45 4e 20 74 65 72 6d 73 2e 0a  ing WHEN terms..
159b0 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77  .<p>^In a CASE w
159c0 69 74 68 20 61 20 62 61 73 65 20 65 78 70 72 65  ith a base expre
159d0 73 73 69 6f 6e 2c 20 74 68 65 20 62 61 73 65 20  ssion, the base 
159e0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
159f0 61 6c 75 61 74 65 64 20 6a 75 73 74 0a 6f 6e 63  aluated just.onc
15a00 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  e and the result
15a10 20 69 73 20 63 6f 6d 70 61 72 65 64 20 61 67 61   is compared aga
15a20 69 6e 73 74 20 74 68 65 20 65 76 61 6c 75 61 74  inst the evaluat
15a30 69 6f 6e 20 6f 66 20 65 61 63 68 20 57 48 45 4e  ion of each WHEN
15a40 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f   .expression fro
15a50 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  m left to right.
15a60 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
15a70 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
15a80 69 6f 6e 20 69 73 20 74 68 65 20 0a 65 76 61 6c  ion is the .eval
15a90 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48  uation of the TH
15aa0 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  EN expression th
15ab0 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
15ac0 6f 20 74 68 65 20 66 69 72 73 74 20 57 48 45 4e  o the first WHEN
15ad0 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20  .expression for 
15ae0 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 61 72  which the compar
15af0 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 5e 4f  ison is true. ^O
15b00 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  r, if none of th
15b10 65 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  e WHEN.expressio
15b20 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61  ns evaluate to a
15b30 20 76 61 6c 75 65 20 65 71 75 61 6c 20 74 6f 20   value equal to 
15b40 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73  the base express
15b50 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 0a  ion, the result.
15b60 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
15b70 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f  e ELSE expressio
15b80 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74  n, if any. ^If t
15b90 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20  here is no ELSE 
15ba0 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e  expression and.n
15bb0 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
15bc0 65 78 70 72 65 73 73 69 6f 6e 73 20 70 72 6f 64  expressions prod
15bd0 75 63 65 20 61 20 72 65 73 75 6c 74 20 65 71 75  uce a result equ
15be0 61 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65  al to the base e
15bf0 78 70 72 65 73 73 69 6f 6e 2c 0a 74 68 65 20 6f  xpression,.the o
15c00 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73  verall result is
15c10 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e   NULL...<p>^When
15c20 20 63 6f 6d 70 61 72 69 6e 67 20 61 20 62 61 73   comparing a bas
15c30 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 67 61  e expression aga
15c40 69 6e 73 74 20 61 20 57 48 45 4e 20 65 78 70 72  inst a WHEN expr
15c50 65 73 73 69 6f 6e 2c 20 74 68 65 20 73 61 6d 65  ession, the same
15c60 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  .collating seque
15c70 6e 63 65 2c 20 61 66 66 69 6e 69 74 79 2c 20 61  nce, affinity, a
15c80 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67  nd NULL-handling
15c90 20 72 75 6c 65 73 20 61 70 70 6c 79 20 61 73 20   rules apply as 
15ca0 69 66 20 74 68 65 0a 62 61 73 65 20 65 78 70 72  if the.base expr
15cb0 65 73 73 69 6f 6e 20 61 6e 64 20 57 48 45 4e 20  ession and WHEN 
15cc0 65 78 70 72 65 73 73 69 6f 6e 20 61 72 65 20 72  expression are r
15cd0 65 73 70 65 63 74 69 76 65 6c 79 20 74 68 65 20  espectively the 
15ce0 6c 65 66 74 2d 20 61 6e 64 0a 72 69 67 68 74 2d  left- and.right-
15cf0 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66  hand operands of
15d00 20 61 6e 20 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62   an <big><b>=</b
15d10 3e 3c 2f 62 69 67 3e 20 6f 70 65 72 61 74 6f 72  ></big> operator
15d20 2e 3c 2f 70 3e 20 5e 49 66 20 74 68 65 20 62 61  .</p> ^If the ba
15d30 73 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 69  se .expression i
15d40 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
15d50 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
15d60 53 45 20 69 73 20 61 6c 77 61 79 73 20 74 68 65  SE is always the
15d70 20 72 65 73 75 6c 74 20 0a 6f 66 20 65 76 61 6c   result .of eval
15d80 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20  uating the ELSE 
15d90 65 78 70 72 65 73 73 69 6f 6e 20 69 66 20 69 74  expression if it
15da0 20 65 78 69 73 74 73 2c 20 6f 72 20 4e 55 4c 4c   exists, or NULL
15db0 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 2e   if it does not.
15dc0 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66 6f 72 6d 73  ..<p>^Both forms
15dd0 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
15de0 72 65 73 73 69 6f 6e 20 75 73 65 20 6c 61 7a 79  ression use lazy
15df0 2c 20 6f 72 20 73 68 6f 72 74 2d 63 69 72 63 75  , or short-circu
15e00 69 74 2c 20 0a 65 76 61 6c 75 61 74 69 6f 6e 2e  it, .evaluation.
15e10 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 6e 6c 79 20  ..<p>^(The only 
15e20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
15e30 65 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  en the following
15e40 20 74 77 6f 20 43 41 53 45 20 65 78 70 72 65 73   two CASE expres
15e50 73 69 6f 6e 73 20 69 73 20 74 68 61 74 20 0a 74  sions is that .t
15e60 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72  he <i>x</i> expr
15e70 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
15e80 74 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 63 65  ted exactly once
15e90 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 65 78   in the first ex
15ea0 61 6d 70 6c 65 20 62 75 74 20 0a 6d 69 67 68 74  ample but .might
15eb0 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 6d 75   be evaluated mu
15ec0 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 69 6e 20  ltiple times in 
15ed0 74 68 65 20 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c  the second:..<ul
15ee0 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43 41 53 45 20  ><pre>.<li>CASE 
15ef0 78 20 57 48 45 4e 20 77 31 20 54 48 45 4e 20 72  x WHEN w1 THEN r
15f00 31 20 57 48 45 4e 20 77 32 20 54 48 45 4e 20 72  1 WHEN w2 THEN r
15f10 32 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 6c  2 ELSE r3 END.<l
15f20 69 3e 43 41 53 45 20 57 48 45 4e 20 78 3d 77 31  i>CASE WHEN x=w1
15f30 20 54 48 45 4e 20 72 31 20 57 48 45 4e 20 78 3d   THEN r1 WHEN x=
15f40 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45 20  w2 THEN r2 ELSE 
15f50 72 33 20 45 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75  r3 END.</pre></u
15f60 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66  l>)^...<tcl>hd_f
15f70 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 49  ragment in_op {I
15f80 4e 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54  N operator} {NOT
15f90 20 49 4e 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74   IN operator}</t
15fa0 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 49 4e 20 61  cl>.<h3>The IN a
15fb0 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  nd NOT IN operat
15fc0 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65  ors</h3>.<p>^The
15fd0 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f   IN and NOT IN o
15fe0 70 65 72 61 74 6f 72 73 20 74 61 6b 65 20 61 20  perators take a 
15ff0 73 69 6e 67 6c 65 20 73 63 61 6c 61 72 20 6f 70  single scalar op
16000 65 72 61 6e 64 20 6f 6e 20 74 68 65 0a 6c 65 66  erand on the.lef
16010 74 20 61 6e 64 20 61 20 76 65 63 74 6f 72 20 6f  t and a vector o
16020 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 72 69  perand on the ri
16030 67 68 74 0a 66 6f 72 6d 65 64 20 62 79 20 61 6e  ght.formed by an
16040 20 65 78 70 6c 69 63 69 74 20 6c 69 73 74 20 6f   explicit list o
16050 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 73  f zero or more s
16060 63 61 6c 61 72 73 20 6f 72 20 62 79 20 61 20 0a  calars or by a .
16070 73 69 6e 67 6c 65 20 73 75 62 71 75 65 72 79 2e  single subquery.
16080 0a 5e 57 68 65 6e 20 74 68 65 20 72 69 67 68 74  .^When the right
16090 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49   operand of an I
160a0 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72  N or NOT IN oper
160b0 61 74 6f 72 20 69 73 20 61 20 73 75 62 71 75 65  ator is a subque
160c0 72 79 2c 20 74 68 65 0a 73 75 62 71 75 65 72 79  ry, the.subquery
160d0 20 6d 75 73 74 20 68 61 76 65 20 61 20 73 69 6e   must have a sin
160e0 67 6c 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  gle result colum
160f0 6e 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69 67  n..^When the rig
16100 68 74 20 6f 70 65 72 61 6e 64 20 69 73 20 61 6e  ht operand is an
16110 20 65 6d 70 74 79 20 73 65 74 2c 20 74 68 65 20   empty set, the 
16120 72 65 73 75 6c 74 20 6f 66 20 49 4e 20 69 73 20  result of IN is 
16130 66 61 6c 73 65 20 61 6e 64 20 74 68 65 0a 72 65  false and the.re
16140 73 75 6c 74 20 6f 66 20 4e 4f 54 20 49 4e 20 69  sult of NOT IN i
16150 73 20 74 72 75 65 2c 20 72 65 67 61 72 64 6c 65  s true, regardle
16160 73 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f  ss of the left o
16170 70 65 72 61 6e 64 20 61 6e 64 20 65 76 65 6e 20  perand and even 
16180 69 66 20 74 68 65 0a 6c 65 66 74 20 6f 70 65 72  if the.left oper
16190 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 5e 28 54  and is NULL..^(T
161a0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20  he result of an 
161b0 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65  IN or NOT IN ope
161c0 72 61 74 6f 72 20 69 73 20 64 65 74 65 72 6d 69  rator is determi
161d0 6e 65 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f  ned by the follo
161e0 77 69 6e 67 0a 6d 61 74 72 69 78 3a 0a 0a 3c 63  wing.matrix:..<c
161f0 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f  enter>.<table bo
16200 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 3c 74 68  rder=1>.<tr>.<th
16210 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 3c 62  >Left operand <b
16220 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69  r>is NULL.<th>Ri
16230 67 68 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e  ght operand <br>
16240 63 6f 6e 74 61 69 6e 73 20 4e 55 4c 4c 0a 3c 74  contains NULL.<t
16250 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20  h>Right operand 
16260 3c 62 72 3e 69 73 20 61 6e 20 65 6d 70 74 79 20  <br>is an empty 
16270 73 65 74 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65  set.<th>Left ope
16280 72 61 6e 64 20 66 6f 75 6e 64 20 3c 62 72 3e 77  rand found <br>w
16290 69 74 68 69 6e 20 72 69 67 68 74 20 6f 70 65 72  ithin right oper
162a0 61 6e 64 0a 3c 74 68 3e 52 65 73 75 6c 74 20 6f  and.<th>Result o
162b0 66 20 3c 62 72 3e 49 4e 20 6f 70 65 72 61 74 6f  f <br>IN operato
162c0 72 0a 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66 20  r.<th>Result of 
162d0 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f 70 65 72 61  <br>NOT IN opera
162e0 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tor.<tr>.<td ali
162f0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
16300 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16310 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
16320 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
16330 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
16340 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16350 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c  er">false.<td al
16360 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75  ign="center">tru
16370 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  e.<tr>.<td align
16380 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
16390 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
163a0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
163b0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
163c0 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
163d0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
163e0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
163f0 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d  false.<td align=
16400 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74  "center">true.<t
16410 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
16420 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
16430 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73  gn="center">does
16440 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20   not matter.<td 
16450 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
16460 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
16470 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69  ter">yes.<td ali
16480 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65  gn="center">true
16490 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
164a0 65 72 22 3e 66 61 6c 73 65 0a 3c 74 72 3e 0a 3c  er">false.<tr>.<
164b0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
164c0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
164d0 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
164e0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
164f0 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
16500 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
16510 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a  n="center">NULL.
16520 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16530 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e 0a 3c 74 64  r">NULL.<tr>.<td
16540 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16550 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  yes.<td align="c
16560 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20  enter">does not 
16570 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e  matter.<td align
16580 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
16590 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
165a0 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
165b0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
165c0 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67  r">NULL.<td alig
165d0 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a  n="center">NULL.
165e0 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
165f0 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  r>)^..<p>^Note t
16600 68 61 74 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77  hat SQLite allow
16610 73 20 74 68 65 20 70 61 72 65 6e 74 68 65 73 69  s the parenthesi
16620 7a 65 64 20 6c 69 73 74 20 6f 66 20 73 63 61 6c  zed list of scal
16630 61 72 20 76 61 6c 75 65 73 20 6f 6e 0a 74 68 65  ar values on.the
16640 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65   right-hand side
16650 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54   of an IN or NOT
16660 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 74 6f 20   IN operator to 
16670 62 65 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74  be an empty list
16680 20 62 75 74 0a 6d 6f 73 74 20 6f 74 68 65 72 20   but.most other 
16690 53 51 4c 20 64 61 74 61 62 61 73 65 20 64 61 74  SQL database dat
166a0 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 61 6e  abase engines an
166b0 64 20 74 68 65 20 53 51 4c 39 32 20 73 74 61 6e  d the SQL92 stan
166c0 64 61 72 64 20 72 65 71 75 69 72 65 0a 74 68 65  dard require.the
166d0 20 6c 69 73 74 20 74 6f 20 63 6f 6e 74 61 69 6e   list to contain
166e0 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 65 6c   at least one el
166f0 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ement.</p>..<tcl
16700 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f  >hd_fragment in_
16710 6f 70 20 7b 45 58 49 53 54 53 20 6f 70 65 72 61  op {EXISTS opera
16720 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49 53 54 53  tor} {NOT EXISTS
16730 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e   operator}</tcl>
16740 0a 3c 68 33 3e 54 68 65 20 45 58 49 53 54 53 20  .<h3>The EXISTS 
16750 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 0a 3c  operator</h3>..<
16760 70 3e 5e 54 68 65 20 45 58 49 53 54 53 20 6f 70  p>^The EXISTS op
16770 65 72 61 74 6f 72 20 61 6c 77 61 79 73 20 65 76  erator always ev
16780 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e 65 20 6f  aluates to one o
16790 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  f the integer va
167a0 6c 75 65 73 20 30 20 0a 61 6e 64 20 31 2e 20 5e  lues 0 .and 1. ^
167b0 49 66 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  If executing the
167c0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
167d0 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  t specified as t
167e0 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 0a 6f  he right-hand .o
167f0 70 65 72 61 6e 64 20 6f 66 20 74 68 65 20 45 58  perand of the EX
16800 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 77 6f  ISTS operator wo
16810 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e 65 20 6f  uld return one o
16820 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20 74 68 65  r more rows, the
16830 6e 20 74 68 65 0a 45 58 49 53 54 53 20 6f 70 65  n the.EXISTS ope
16840 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20  rator evaluates 
16850 74 6f 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74  to 1. ^If execut
16860 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 77  ing the SELECT w
16870 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e 6f 20 72  ould return.no r
16880 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74 68 65 6e  ows at all, then
16890 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65 72   the EXISTS oper
168a0 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74  ator evaluates t
168b0 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 6e  o 0. ..<p>^The n
168c0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
168d0 20 69 6e 20 65 61 63 68 20 72 6f 77 20 72 65 74   in each row ret
168e0 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
168f0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 28 69  ECT statement.(i
16900 66 20 61 6e 79 29 20 61 6e 64 20 74 68 65 20 73  f any) and the s
16910 70 65 63 69 66 69 63 20 76 61 6c 75 65 73 20 72  pecific values r
16920 65 74 75 72 6e 65 64 20 68 61 76 65 20 6e 6f 20  eturned have no 
16930 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65  effect on the re
16940 73 75 6c 74 73 0a 6f 66 20 74 68 65 20 45 58 49  sults.of the EXI
16950 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 20 5e 49  STS operator. ^I
16960 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 72 6f  n particular, ro
16970 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 4e 55  ws containing NU
16980 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 0a 6e 6f  LL values are.no
16990 74 20 68 61 6e 64 6c 65 64 20 61 6e 79 20 64 69  t handled any di
169a0 66 66 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20 72  fferently from r
169b0 6f 77 73 20 77 69 74 68 6f 75 74 20 4e 55 4c 4c  ows without NULL
169c0 20 76 61 6c 75 65 73 2e 0a 0a 3c 68 33 3e 53 63   values...<h3>Sc
169d0 61 6c 61 72 20 53 75 62 71 75 65 72 69 65 73 3c  alar Subqueries<
169e0 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c  /h3>..<p>^A [SEL
169f0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 65  ECT] statement e
16a00 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e  nclosed in paren
16a10 74 68 65 73 65 73 20 6d 61 79 20 61 70 70 65 61  theses may appea
16a20 72 20 61 73 20 61 20 73 63 61 6c 61 72 0a 71 75  r as a scalar.qu
16a30 61 6e 74 69 74 79 2e 20 5e 41 20 5b 53 45 4c 45  antity. ^A [SELE
16a40 43 54 5d 20 75 73 65 64 20 61 73 20 61 20 73 63  CT] used as a sc
16a50 61 6c 61 72 20 71 75 61 6e 74 69 74 79 20 6d 75  alar quantity mu
16a60 73 74 20 72 65 74 75 72 6e 20 61 20 72 65 73 75  st return a resu
16a70 6c 74 20 73 65 74 0a 77 69 74 68 20 61 20 73 69  lt set.with a si
16a80 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 5e 54 68  ngle column. ^Th
16a90 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
16aa0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
16ab0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 6f  e value of the.o
16ac0 6e 6c 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  nly column in th
16ad0 65 20 66 69 72 73 74 20 72 6f 77 20 72 65 74 75  e first row retu
16ae0 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
16af0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49  CT statement. ^I
16b00 66 20 74 68 65 20 53 45 4c 45 43 54 20 0a 79 69  f the SELECT .yi
16b10 65 6c 64 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f  elds more than o
16b20 6e 65 20 72 65 73 75 6c 74 20 72 6f 77 2c 20 61  ne result row, a
16b30 6c 6c 20 72 6f 77 73 20 61 66 74 65 72 20 74 68  ll rows after th
16b40 65 20 66 69 72 73 74 20 61 72 65 20 69 67 6e 6f  e first are igno
16b50 72 65 64 2e 20 5e 49 66 0a 74 68 65 20 53 45 4c  red. ^If.the SEL
16b60 45 43 54 20 79 69 65 6c 64 73 20 6e 6f 20 72 6f  ECT yields no ro
16b70 77 73 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ws, then the val
16b80 75 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  ue of the expres
16b90 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 2e 0a 5e 28  sion is NULL..^(
16ba0 54 68 65 20 4c 49 4d 49 54 20 6f 66 20 61 20 73  The LIMIT of a s
16bb0 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20 69  calar subquery i
16bc0 73 20 61 6c 77 61 79 73 20 31 2e 0a 41 6e 79 20  s always 1..Any 
16bd0 6f 74 68 65 72 20 4c 49 4d 49 54 20 76 61 6c 75  other LIMIT valu
16be0 65 20 67 69 76 65 6e 20 69 6e 20 74 68 65 20 53  e given in the S
16bf0 51 4c 20 74 65 78 74 20 69 73 20 69 67 6e 6f 72  QL text is ignor
16c00 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 6c 6c 20 74  ed.)^..<p>^All t
16c10 79 70 65 73 20 6f 66 20 5b 53 45 4c 45 43 54 5d  ypes of [SELECT]
16c20 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c   statement, incl
16c30 75 64 69 6e 67 20 61 67 67 72 65 67 61 74 65 20  uding aggregate 
16c40 61 6e 64 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  and [compound SE
16c50 4c 45 43 54 5d 0a 71 75 65 72 69 65 73 20 28 71  LECT].queries (q
16c60 75 65 72 69 65 73 20 77 69 74 68 20 6b 65 79 77  ueries with keyw
16c70 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e 20  ords like UNION 
16c80 6f 72 20 45 58 43 45 50 54 29 20 61 72 65 20 61  or EXCEPT) are a
16c90 6c 6c 6f 77 65 64 20 61 73 20 73 63 61 6c 61 72  llowed as scalar
16ca0 0a 73 75 62 71 75 65 72 69 65 73 2e 0a 0a 3c 68  .subqueries...<h
16cb0 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 20 4e  3>Table Column N
16cc0 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41  ames</h3>..<p>^A
16cd0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e   column name can
16ce0 20 62 65 20 61 6e 79 20 6f 66 20 74 68 65 20 6e   be any of the n
16cf0 61 6d 65 73 20 64 65 66 69 6e 65 64 20 69 6e 20  ames defined in 
16d00 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c  the [CREATE TABL
16d10 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  E].statement or 
16d20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
16d30 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69 64 65  wing special ide
16d40 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e 52 4f  ntifiers: "<b>RO
16d50 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f 49  WID</b>",."<b>OI
16d60 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f  D</b>", or "<b>_
16d70 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e 54 68  ROWID_</b>"..^Th
16d80 65 20 74 68 72 65 65 20 73 70 65 63 69 61 6c 20  e three special 
16d90 69 64 65 6e 74 69 66 69 65 72 73 20 64 65 73 63  identifiers desc
16da0 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75 65 20  ribe the.unique 
16db0 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74 68 65  integer key (the
16dc0 20 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f 63 69   [rowid]) associ
16dd0 61 74 65 64 20 77 69 74 68 20 65 76 65 72 79 20  ated with every 
16de0 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74 61  .row of every ta
16df0 62 6c 65 20 61 6e 64 20 73 6f 20 61 72 65 20 6e  ble and so are n
16e00 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  ot available on 
16e10 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
16e20 74 61 62 6c 65 73 2e 0a 5e 54 68 65 20 73 70 65  tables..^The spe
16e30 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
16e40 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74   only refer to t
16e50 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68  he row key if th
16e60 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
16e70 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20  .statement does 
16e80 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61  not define a rea
16e90 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68  l column with th
16ea0 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68  e same name..^Th
16eb0 65 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75  e rowid can be u
16ec0 73 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72  sed anywhere a r
16ed0 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61  egular.column ca
16ee0 6e 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  n be used.</p>..
16ef0 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73  <p>^A [SELECT] s
16f00 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73  tatement used as
16f10 20 65 69 74 68 65 72 20 61 20 73 63 61 6c 61 72   either a scalar
16f20 20 73 75 62 71 75 65 72 79 20 6f 72 20 61 73 20   subquery or as 
16f30 74 68 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20  the .right-hand 
16f40 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
16f50 2c 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53  , NOT IN or EXIS
16f60 54 53 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  TS expression ma
16f70 79 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72  y contain .refer
16f80 65 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73  ences to columns
16f90 20 69 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75   in the outer qu
16fa0 65 72 79 2e 20 53 75 63 68 20 61 20 73 75 62 71  ery. Such a subq
16fb0 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73  uery is known as
16fc0 0a 61 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75  .a correlated su
16fd0 62 71 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65  bquery. ^A corre
16fe0 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
16ff0 73 20 72 65 65 76 61 6c 75 61 74 65 64 20 65 61  s reevaluated ea
17000 63 68 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75  ch time.its resu
17010 6c 74 20 69 73 20 72 65 71 75 69 72 65 64 2e 20  lt is required. 
17020 5e 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64  ^An uncorrelated
17030 20 73 75 62 71 75 65 72 79 20 69 73 20 65 76 61   subquery is eva
17040 6c 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65  luated only once
17050 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20  .and the result 
17060 72 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73  reused as necess
17070 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ary...<tcl>hd_fr
17080 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20  agment castexpr 
17090 7b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  {CAST expression
170a0 7d 20 7b 43 41 53 54 7d 20 7b 63 61 73 74 7d 20  } {CAST} {cast} 
170b0 7b 43 41 53 54 20 6f 70 65 72 61 74 6f 72 7d 3c  {CAST operator}<
170c0 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65  /tcl>.<h3>CAST e
170d0 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a  xpressions</h3>.
170e0 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70 72 65  .<p>A CAST expre
170f0 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
17100 6d 20 22 43 41 53 54 28 26 6c 74 3b 65 78 70 72  m "CAST(&lt;expr
17110 26 67 74 3b 20 41 53 20 26 6c 74 3b 74 79 70 65  &gt; AS &lt;type
17120 2d 6e 61 6d 65 26 67 74 3b 29 22 0a 69 73 20 75  -name&gt;)".is u
17130 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  sed to convert t
17140 68 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b  he value of &lt;
17150 65 78 70 72 26 67 74 3b 20 74 6f 20 0a 61 20 64  expr&gt; to .a d
17160 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72 61 67  ifferent [storag
17170 65 20 63 6c 61 73 73 5d 20 73 70 65 63 69 66 69  e class] specifi
17180 65 64 20 62 79 20 26 6c 74 3b 74 79 70 65 2d 6e  ed by &lt;type-n
17190 61 6d 65 26 67 74 3b 2e 0a 5e 41 20 43 41 53 54  ame&gt;..^A CAST
171a0 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 73   conversion is s
171b0 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 63 6f  imilar to the co
171c0 6e 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61  nversion that ta
171d0 6b 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61  kes.place when a
171e0 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74   [column affinit
171f0 79 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f  y] is applied to
17200 20 61 20 76 61 6c 75 65 20 65 78 63 65 70 74 20   a value except 
17210 74 68 61 74 20 77 69 74 68 0a 74 68 65 20 43 41  that with.the CA
17220 53 54 20 6f 70 65 72 61 74 6f 72 20 74 68 65 20  ST operator the 
17230 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61 79  conversion alway
17240 73 20 74 61 6b 65 73 20 70 6c 61 63 65 20 65 76  s takes place ev
17250 65 6e 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72  en if the conver
17260 73 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20 69  sion.lossy and i
17270 72 72 65 76 65 72 73 69 62 6c 65 2c 20 77 68 65  rreversible, whe
17280 72 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66 69  reas column affi
17290 6e 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67 65  nity only change
172a0 73 20 74 68 65 20 64 61 74 61 20 74 79 70 65 0a  s the data type.
172b0 6f 66 20 61 20 76 61 6c 75 65 20 69 66 20 74 68  of a value if th
172c0 65 20 63 68 61 6e 67 65 20 69 73 20 6c 6f 73 73  e change is loss
172d0 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72 73 69  less and reversi
172e0 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ble...<p>^If the
172f0 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78   value of &lt;ex
17300 70 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c 20  pr&gt; is NULL, 
17310 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
17320 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70 72  of the CAST.expr
17330 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e  ession is also N
17340 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ULL. ^Otherwise,
17350 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61   the storage cla
17360 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ss of the result
17370 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62  .is determined b
17380 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 5b  y applying the [
17390 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65 72 6d  rules for determ
173a0 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66  ining column aff
173b0 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20 26 6c  inity] to.the &l
173c0 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 2e  t;type-name&gt;.
173d0 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
173e0 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41  1>.<tr>.  <th> A
173f0 66 66 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74  ffinity of &lt;t
17400 79 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c  ype-name&gt;.  <
17410 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50  th> Conversion P
17420 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20  rocessing.<tr>. 
17430 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74   <td> NONE .  <t
17440 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61  d> ^Casting a va
17450 6c 75 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70  lue to a &lt;typ
17460 65 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20  e-name&gt; with 
17470 6e 6f 20 61 66 66 69 6e 69 74 79 20 63 61 75 73  no affinity caus
17480 65 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a  es the value to.
17490 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69    be converted i
174a0 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61  nto a BLOB.  ^Ca
174b0 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20  sting to a BLOB 
174c0 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73  consists of firs
174d0 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20  t casting.  the 
174e0 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e  value to TEXT in
174f0 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20   the [encoding] 
17500 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
17510 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e  connection, then
17520 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  .  interpreting 
17530 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79  the resulting by
17540 74 65 20 73 65 71 75 65 6e 63 65 20 61 73 20 61  te sequence as a
17550 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66   BLOB instead of
17560 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a   as TEXT...<tr>.
17570 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74    <td> TEXT.  <t
17580 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c  d> ^To cast a BL
17590 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54  OB value to TEXT
175a0 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  , the sequence o
175b0 66 20 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b  f bytes that mak
175c0 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20  e up the.  BLOB 
175d0 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
175e0 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75  s text encoded u
175f0 73 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  sing the databas
17600 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70  e encoding..  <p
17610 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e  >.   ^Casting an
17620 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
17630 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54   value into TEXT
17640 20 72 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c   renders the val
17650 75 65 20 61 73 20 69 66 20 76 69 61 20 0a 20 20  ue as if via .  
17660 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69    [sqlite3_snpri
17670 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20 74 68  ntf()] except th
17680 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  at the resulting
17690 20 54 45 58 54 20 75 73 65 73 20 74 68 65 20 5b   TEXT uses the [
176a0 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20  encoding] of.   
176b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
176c0 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a  nnection...<tr>.
176d0 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74    <td> REAL.  <t
176e0 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  d> ^When casting
176f0 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
17700 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c   a REAL, the val
17710 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76  ue is first conv
17720 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20  erted to.       
17730 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70   TEXT..       <p
17740 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61  >^When casting a
17750 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52   TEXT value to R
17760 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74  EAL, the longest
17770 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78   possible prefix
17780 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20   of.        the 
17790 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
177a0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
177b0 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69   a real number i
177c0 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
177d0 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58  .        the TEX
177e0 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  T value and the 
177f0 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65  remainder ignore
17800 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20  d. ^Any leading 
17810 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20  spaces in the.  
17820 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65        TEXT value
17830 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65   are ignored whe
17840 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f  n converging fro
17850 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20  m TEXT to REAL. 
17860 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a 20 20  ^(If there is.  
17870 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20        no prefix 
17880 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65  that can be inte
17890 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61  rpreted as a rea
178a0 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  l number, the re
178b0 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20  sult of the.    
178c0 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69      conversion i
178d0 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20  s 0.0.)^..<tr>. 
178e0 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20   <td> INTEGER.  
178f0 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69  <td> ^When casti
17900 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20  ng a BLOB value 
17910 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20  to INTEGER, the 
17920 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63  value is first c
17930 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20  onverted to.    
17940 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20      TEXT..      
17950 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e   <p>^When castin
17960 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74  g a TEXT value t
17970 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c  o INTEGER, the l
17980 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  ongest possible 
17990 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20  prefix of.      
179a0 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74    the value that
179b0 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
179c0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
179d0 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72  r number is extr
179e0 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20  acted from.     
179f0 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75     the TEXT valu
17a00 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
17a10 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e  der ignored. ^An
17a20 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73  y leading spaces
17a30 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20   in the.        
17a40 54 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20  TEXT value when 
17a50 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20  converting from 
17a60 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20  TEXT to INTEGER 
17a70 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66  are ignored. ^If
17a80 20 74 68 65 72 65 0a 20 20 20 20 20 20 20 20 69   there.        i
17a90 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74  s no prefix that
17aa0 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
17ab0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
17ac0 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  r number, the re
17ad0 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20  sult.        of 
17ae0 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
17af0 73 20 30 2e 20 20 5e 28 54 68 65 20 43 41 53 54  s 0.  ^(The CAST
17b00 20 6f 70 65 72 61 74 6f 72 20 75 6e 64 65 72 73   operator unders
17b10 74 61 6e 64 73 20 64 65 63 69 6d 61 6c 20 69 6e  tands decimal in
17b20 74 65 67 65 72 73 0a 20 20 20 20 20 20 20 20 6f  tegers.        o
17b30 6e 6c 79 20 26 6d 64 61 73 68 3b 20 63 6f 6e 76  nly &mdash; conv
17b40 65 72 73 69 6f 6e 20 6f 66 20 5b 68 65 78 61 64  ersion of [hexad
17b50 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 5d  ecimal integers]
17b60 20 73 74 6f 70 73 20 61 74 20 74 68 65 20 22 78   stops at the "x
17b70 22 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  " in the.       
17b80 20 22 30 78 22 20 70 72 65 66 69 78 20 6f 66 20   "0x" prefix of 
17b90 74 68 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20  the hexadecimal 
17ba0 69 6e 74 65 67 65 72 20 73 74 72 69 6e 67 20 61  integer string a
17bb0 6e 64 20 74 68 75 73 20 72 65 73 75 6c 74 20 6f  nd thus result o
17bc0 66 20 74 68 65 20 0a 20 20 20 20 20 20 20 20 43  f the .        C
17bd0 41 53 54 20 69 73 20 61 6c 77 61 79 73 20 7a 65  AST is always ze
17be0 72 6f 2e 29 5e 0a 0a 20 20 20 20 20 20 3c 70 3e  ro.)^..      <p>
17bf0 5e 41 20 63 61 73 74 20 6f 66 20 61 20 52 45 41  ^A cast of a REA
17c00 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20  L value into an 
17c10 49 4e 54 45 47 45 52 20 72 65 73 75 6c 74 73 20  INTEGER results 
17c20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20  in the integer. 
17c30 20 20 20 20 20 62 65 74 77 65 65 6e 20 74 68 65       between the
17c40 20 52 45 41 4c 20 76 61 6c 75 65 20 61 6e 64 20   REAL value and 
17c50 7a 65 72 6f 20 74 68 61 74 20 69 73 20 63 6c 6f  zero that is clo
17c60 73 65 73 74 20 74 6f 20 74 68 65 20 52 45 41 4c  sest to the REAL
17c70 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49   value..      ^I
17c80 66 20 61 20 52 45 41 4c 20 69 73 20 67 72 65 61  f a REAL is grea
17c90 74 65 72 20 74 68 61 6e 20 74 68 65 20 67 72 65  ter than the gre
17ca0 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65 20 73  atest possible s
17cb0 69 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65  igned.      inte
17cc0 67 65 72 20 28 2b 39 32 32 33 33 37 32 30 33 36  ger (+9223372036
17cd0 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
17ce0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
17cf0 65 20 67 72 65 61 74 65 73 74 20 70 6f 73 73 69  e greatest possi
17d00 62 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64  ble.      signed
17d10 20 69 6e 74 65 67 65 72 20 61 6e 64 20 69 66 20   integer and if 
17d20 74 68 65 20 52 45 41 4c 20 69 73 20 6c 65 73 73  the REAL is less
17d30 20 74 68 61 6e 20 74 68 65 20 6c 65 61 73 74 20   than the least 
17d40 70 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a  possible signed.
17d50 20 20 20 20 20 20 69 6e 74 65 67 65 72 20 28 2d        integer (-
17d60 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
17d70 38 30 38 29 20 74 68 65 6e 20 74 68 65 20 72 65  808) then the re
17d80 73 75 6c 74 20 69 73 20 74 68 65 20 6c 65 61 73  sult is the leas
17d90 74 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20  t possible.     
17da0 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e   signed integer.
17db0 0a 0a 20 20 20 20 20 20 3c 70 3e 50 72 69 6f 72  ..      <p>Prior
17dc0 20 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73 69   to SQLite versi
17dd0 6f 6e 20 33 2e 38 2e 32 2c 20 63 61 73 74 69 6e  on 3.8.2, castin
17de0 67 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20 67  g a REAL value g
17df0 72 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20 20  reater than.    
17e00 20 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34    +9223372036854
17e10 37 37 35 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e  775807.0 into an
17e20 20 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74 65   integer resulte
17e30 64 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65  d in the most ne
17e40 67 61 74 69 76 65 0a 20 20 20 20 20 20 69 6e 74  gative.      int
17e50 65 67 65 72 2c 20 2d 39 32 32 33 33 37 32 30 33  eger, -922337203
17e60 36 38 35 34 37 37 35 38 30 38 2e 20 20 54 68 69  6854775808.  Thi
17e70 73 20 62 65 68 61 76 69 6f 72 20 77 61 73 20 6d  s behavior was m
17e80 65 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65 20  eant to emulate 
17e90 74 68 65 0a 20 20 20 20 20 20 62 65 68 61 76 69  the.      behavi
17ea0 6f 72 20 6f 66 20 78 38 36 2f 78 36 34 20 68 61  or of x86/x64 ha
17eb0 72 64 77 61 72 65 20 77 68 65 6e 20 64 6f 69 6e  rdware when doin
17ec0 67 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74  g the equivalent
17ed0 20 63 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c   cast...<tr>.  <
17ee0 74 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74  td> NUMERIC.  <t
17ef0 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45  d> ^Casting a TE
17f00 58 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65  XT or BLOB value
17f10 20 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69   into NUMERIC fi
17f20 72 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65  rst does a force
17f30 64 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20  d.   conversion 
17f40 69 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68  into REAL but th
17f50 65 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65  en further conve
17f60 72 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69  rts the result i
17f70 6e 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20  nto INTEGER if. 
17f80 20 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68    and only if th
17f90 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f  e conversion fro
17fa0 6d 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45  m REAL to INTEGE
17fb0 52 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e  R is lossless an
17fc0 64 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20  d reversible..  
17fd0 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
17fe0 79 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c  y context in SQL
17ff0 69 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55  ite where the NU
18000 4d 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45  MERIC and INTEGE
18010 52 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20  R [affinities]. 
18020 20 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65    behave differe
18030 6e 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61  ntly..   <p> ^Ca
18040 73 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20  sting a REAL or 
18050 49 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f  INTEGER value to
18060 20 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f   NUMERIC is a no
18070 2d 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72  -op, even if a r
18080 65 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75  eal.   value cou
18090 6c 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ld be losslessly
180a0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
180b0 20 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e   integer...</tr>
180c0 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e  ..</table>..<p>^
180d0 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65  Note that the re
180e0 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e  sult from castin
180f0 67 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76  g any non-BLOB v
18100 61 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f  alue into a .BLO
18110 42 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  B and the result
18120 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e   from casting an
18130 79 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74  y BLOB value int
18140 6f 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c  o a non-BLOB val
18150 75 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72  ue.may be differ
18160 65 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ent depending on
18170 20 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74   whether the dat
18180 61 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d  abase [encoding]
18190 20 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31   is UTF-8,.UTF-1
181a0 36 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65  6be, or UTF-16le
181b0 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  ....<tcl>hd_frag
181c0 6d 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72  ment booleanexpr
181d0 20 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   {boolean expres
181e0 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  sion}</tcl>.<h3>
181f0 42 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69  Boolean Expressi
18200 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ons</h3>..<p>The
18210 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65   SQL language fe
18220 61 74 75 72 65 73 20 73 65 76 65 72 61 6c 20 63  atures several c
18230 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20 61 6e  ontexts where an
18240 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a   expression is .
18250 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68  evaluated and th
18260 65 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74  e result convert
18270 65 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20  ed to a boolean 
18280 28 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20  (true or false) 
18290 76 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e  value. These.con
182a0 74 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75  texts are:..  <u
182b0 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20  l>.    <li> the 
182c0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
182d0 61 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45  a SELECT, UPDATE
182e0 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65   or DELETE state
182f0 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
18300 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63  he ON or USING c
18310 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
18320 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
18330 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20  ement,.    <li> 
18340 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  the HAVING claus
18350 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
18360 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69  atement,.    <li
18370 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73  > the WHEN claus
18380 65 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67  e of an SQL trig
18390 67 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69  ger, and.    <li
183a0 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73  > the WHEN claus
183b0 65 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20  e or clauses of 
183c0 73 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65 73  some CASE expres
183d0 73 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a  sions..  </ul>..
183e0 3c 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20  <p>^(To convert 
183f0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  the results of a
18400 6e 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e  n SQL expression
18410 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   to a boolean va
18420 6c 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73  lue, SQLite.firs
18430 74 20 63 61 73 74 73 20 74 68 65 20 72 65 73 75  t casts the resu
18440 6c 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20  lt to a NUMERIC 
18450 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d  value in the sam
18460 65 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53  e way as a .[CAS
18470 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41  T expression]. A
18480 20 6e 75 6d 65 72 69 63 20 7a 65 72 6f 20 76 61   numeric zero va
18490 6c 75 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c  lue (integer val
184a0 75 65 20 30 20 6f 72 20 72 65 61 6c 20 0a 76 61  ue 0 or real .va
184b0 6c 75 65 20 30 2e 30 29 20 69 73 20 63 6f 6e 73  lue 0.0) is cons
184c0 69 64 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c  idered to be fal
184d0 73 65 2e 20 20 41 20 4e 55 4c 4c 20 76 61 6c 75  se.  A NULL valu
184e0 65 20 69 73 20 73 74 69 6c 6c 20 4e 55 4c 4c 2e  e is still NULL.
184f0 0a 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65  .All other value
18500 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
18510 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46   true.)^..<p>^(F
18520 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
18530 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30  values NULL, 0.0
18540 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20 61  , 0, 'english' a
18550 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20 63  nd '0' are all c
18560 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65 20  onsidered.to be 
18570 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65  false.)^ ^(Value
18580 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d  s 1, 1.0, 0.1, -
18590 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69 73  0.1 and '1englis
185a0 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  h' are considere
185b0 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e  d to .be true.)^
185c0 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c  ..<h3>Functions<
185d0 2f 68 33 3e 0a 3c 70 3e 53 51 4c 69 74 65 20 73  /h3>.<p>SQLite s
185e0 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 5b 63 6f  upports many [co
185f0 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20 61  refunc|simple] a
18600 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72  nd [aggfunc|aggr
18610 65 67 61 74 65 5d 0a 53 51 4c 20 66 75 6e 63 74  egate].SQL funct
18620 69 6f 6e 73 2e 20 20 46 6f 72 20 70 72 65 73 65  ions.  For prese
18630 6e 74 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 73  ntation purposes
18640 2c 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  , simple functio
18650 6e 73 20 61 72 65 20 66 75 72 74 68 65 72 0a 73  ns are further.s
18660 75 62 64 69 76 69 64 65 64 20 69 6e 74 6f 20 5b  ubdivided into [
18670 63 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72 65 20  corefunc | core 
18680 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 20 5b  functions] and [
18690 64 61 74 65 66 75 6e 63 7c 64 61 74 65 2d 74 69  datefunc|date-ti
186a0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 0a 41  me functions]..A
186b0 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20  pplications can 
186c0 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e  add new function
186d0 73 2c 20 77 72 69 74 74 65 6e 20 69 6e 20 43 2f  s, written in C/
186e0 43 2b 2b 2c 20 75 73 69 6e 67 20 74 68 65 0a 5b  C++, using the.[
186f0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
18700 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72  unction()] inter
18710 66 61 63 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  face..</p>..<p>^
18720 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  It is possible t
18730 6f 20 68 61 76 65 20 61 6e 20 61 67 67 72 65 67  o have an aggreg
18740 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
18750 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  h the same name 
18760 61 73 20 61 0a 73 69 6d 70 6c 65 20 66 75 6e 63  as a.simple func
18770 74 69 6f 6e 2c 20 61 73 20 6c 6f 6e 67 20 61 73  tion, as long as
18780 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
18790 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  rguments for the
187a0 20 74 77 6f 20 66 6f 72 6d 73 20 6f 66 20 74 68   two forms of th
187b0 65 0a 66 75 6e 63 74 69 6f 6e 20 61 72 65 20 64  e.function are d
187c0 69 66 66 65 72 65 6e 74 2e 20 20 5e 46 6f 72 20  ifferent.  ^For 
187d0 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 5b 61 67  example, the [ag
187e0 67 5f 6d 61 78 7c 6d 61 78 28 29 5d 20 66 75 6e  g_max|max()] fun
187f0 63 74 69 6f 6e 20 77 69 74 68 20 61 0a 73 69 6e  ction with a.sin
18800 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  gle argument is 
18810 61 6e 20 61 67 67 72 65 67 61 74 65 20 61 6e 64  an aggregate and
18820 20 74 68 65 20 5b 6d 61 78 28 29 5d 20 66 75 6e   the [max()] fun
18830 63 74 69 6f 6e 20 77 69 74 68 20 74 77 6f 20 6f  ction with two o
18840 72 20 6d 6f 72 65 0a 61 72 67 75 6d 65 6e 74 73  r more.arguments
18850 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e   is a simple fun
18860 63 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  ction...<tcl>.##
18870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
188a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
188b0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
188c0 74 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74  tion {Core Funct
188d0 69 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b  ions} corefunc {
188e0 2a 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20  *corefunc}.proc 
188f0 66 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20  funcdef {syntax 
18900 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b  keywords desc} {
18910 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e  .  hd_puts {<tr>
18920 7d 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  }.  regsub -all 
18930 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72  {\s+} [string tr
18940 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72  im $syntax] {<br
18950 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65   />} syntax.  re
18960 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e  gsub -all {\(([^
18970 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78  *)]+)\)} $syntax
18980 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73   {(<i>\1</i>)} s
18990 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d  yntax.  regsub -
189a0 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20  all {,} $syntax 
189b0 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61  {</i>,<i>} synta
189c0 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
189d0 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20  {<i>\.\.\.</i>} 
189e0 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79  $syntax {...} sy
189f0 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20 22  ntax.  hd_puts "
18a00 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
18a10 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74  \" align=\"right
18a20 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c 22  \" width=\"120\"
18a30 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74  >".  if {[llengt
18a40 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d  h $keywords]==0}
18a50 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b   {.    regexp {[
18a60 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20  a-z_]+} $syntax 
18a70 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67  name.    hd_frag
18a80 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d  ment $name *$nam
18a90 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c  e "${name}() SQL
18aa0 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65   function".  } e
18ab0 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72  lse {.    set fr
18ac0 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24  agname [lindex $
18ad0 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20  keywords 0].    
18ae0 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61  regsub -all {[^a
18af0 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b  -z]} $fragname {
18b00 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68  } fragname.    h
18b10 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67  d_fragment $frag
18b20 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64  name.    eval hd
18b30 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e  _keywords [strin
18b40 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24  g map {\n { }} $
18b50 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20  keywords].  }.  
18b60 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74 61 78  hd_puts "$syntax
18b70 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74 73  </td>".  hd_puts
18b80 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f   {<td valign="to
18b90 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c 76  p">}.  hd_resolv
18ba0 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70 75 74  e $desc.  hd_put
18bb0 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d  s {</td></tr>}.}
18bc0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
18bd0 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  core functions s
18be0 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61  hown below are a
18bf0 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
18c00 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20  ult. .[datefunc 
18c10 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69 6d  | Date &amp; Tim
18c20 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64  e functions] and
18c30 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72  .[aggfunc | aggr
18c40 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d  egate functions]
18c50 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20   are documented 
18c60 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a  separately.  An.
18c70 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20  application may 
18c80 64 65 66 69 6e 65 20 61 64 64 69 74 69 6f 6e 61  define additiona
18c90 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74  l.functions writ
18ca0 74 65 6e 20 69 6e 20 43 20 61 6e 64 20 61 64 64  ten in C and add
18cb0 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
18cc0 73 65 20 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a  se engine using.
18cd0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  the [sqlite3_cre
18ce0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20  ate_function()] 
18cf0 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65  API.</p>..<table
18d00 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
18d10 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a  dding=10>.<tcl>.
18d20 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29 7d  funcdef {abs(X)}
18d30 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62 73   {} {.  ^The abs
18d40 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
18d50 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75 74  urns the absolut
18d60 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6e  e value of the n
18d70 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65 6e  umeric.  argumen
18d80 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72 65  t X.  ^Abs(X) re
18d90 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58 20  turns NULL if X 
18da0 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41 62  is NULL. .  ^(Ab
18db0 73 28 58 29 20 72 65 74 75 72 6e 73 20 30 2e 30  s(X) returns 0.0
18dc0 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69 6e   if X is a strin
18dd0 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61 74  g or blob.  that
18de0 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
18df0 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72 69  rted to a numeri
18e00 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20  c value.)^  ^If 
18e10 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74 65  X is the .  inte
18e20 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36 38  ger -92233720368
18e30 35 34 37 37 35 38 30 38 20 74 68 65 6e 20 61 62  54775808 then ab
18e40 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20 69  s(X) throws an i
18e50 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a  nteger overflow.
18e60 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74 68    error since th
18e70 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76 61  ere is no equiva
18e80 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36 34  lent positive 64
18e90 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d  -bit two complem
18ea0 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75  ent value..}..fu
18eb0 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28 29  ncdef {changes()
18ec0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68  } {} {.  ^The ch
18ed0 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e  anges() function
18ee0 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
18ef0 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 20  ber of database 
18f00 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20 63  rows that were c
18f10 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73 65  hanged.  or inse
18f20 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20  rted or deleted 
18f30 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
18f40 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20 49  ntly completed I
18f50 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a 20  NSERT, DELETE,. 
18f60 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
18f70 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65 20  ment, exclusive 
18f80 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  of statements in
18f90 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72 69   lower-level tri
18fa0 67 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63 68  ggers..  ^The ch
18fb0 61 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e 63  anges() SQL func
18fc0 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65  tion is a wrappe
18fd0 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
18fe0 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
18ff0 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  .  C/C++ functio
19000 6e 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c  n and hence foll
19010 6f 77 73 20 74 68 65 20 73 61 6d 65 20 72 75 6c  ows the same rul
19020 65 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20  es for counting 
19030 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63  changes..}..func
19040 64 65 66 20 7b 63 68 61 72 28 58 31 2c 58 32 2c  def {char(X1,X2,
19050 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20 20  ...,XN)} {} {.  
19060 5e 28 54 68 65 20 63 68 61 72 28 58 31 2c 58 32  ^(The char(X1,X2
19070 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63 74 69 6f  ,...,XN) functio
19080 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
19090 6e 67 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 63  ng composed of c
190a0 68 61 72 61 63 74 65 72 73 20 68 61 76 69 6e 67  haracters having
190b0 20 74 68 65 0a 20 20 20 75 6e 69 63 6f 64 65 20   the.   unicode 
190c0 63 6f 64 65 20 70 6f 69 6e 74 20 76 61 6c 75 65  code point value
190d0 73 20 6f 66 20 69 6e 74 65 67 65 72 73 20 58 31  s of integers X1
190e0 20 74 68 72 6f 75 67 68 20 58 4e 2c 20 72 65 73   through XN, res
190f0 70 65 63 74 69 76 65 6c 79 2e 29 5e 0a 7d 0a 0a  pectively.)^.}..
19100 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73 63  funcdef {coalesc
19110 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b  e(X,Y,...)} {} {
19120 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65 73 63 65  .  ^The coalesce
19130 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
19140 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74  rns a copy of it
19150 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c  s first non-NULL
19160 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20   argument, or.  
19170 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61 72 67 75  NULL if all argu
19180 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20  ments are NULL. 
19190 20 5e 43 6f 61 6c 65 73 63 65 28 29 20 6d 75 73   ^Coalesce() mus
191a0 74 20 68 61 76 65 20 61 74 20 6c 65 61 73 74 20  t have at least 
191b0 0a 20 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a  .  2 arguments..
191c0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62  }..funcdef {glob
191d0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
191e0 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e  he glob(X,Y) fun
191f0 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
19200 65 6e 74 20 74 6f 20 74 68 65 0a 20 20 65 78 70  ent to the.  exp
19210 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47 4c  ression "<b>Y GL
19220 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74  OB X</b>"..  Not
19230 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e 64  e that the X and
19240 20 59 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65   Y arguments are
19250 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68 65   reversed in the
19260 20 67 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e   glob() function
19270 0a 20 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  .  relative to t
19280 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20  he infix [GLOB] 
19290 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 49 66 20  operator..  ^If 
192a0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  the [sqlite3_cre
192b0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20  ate_function()] 
192c0 69 6e 74 65 72 66 61 63 65 20 69 73 20 75 73 65  interface is use
192d0 64 20 74 6f 0a 20 20 6f 76 65 72 72 69 64 65 20  d to.  override 
192e0 74 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75  the glob(X,Y) fu
192f0 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 6e 20 61  nction with an a
19300 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
19310 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65 6e 0a 20  mentation then. 
19320 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65 72   the [GLOB] oper
19330 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76 6f 6b 65  ator will invoke
19340 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76 65   the alternative
19350 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
19360 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66 6e  .}..funcdef {ifn
19370 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  ull(X,Y)} {} {. 
19380 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66   ^The ifnull() f
19390 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
193a0 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69  a copy of its fi
193b0 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67  rst non-NULL arg
193c0 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c  ument, or.  NULL
193d0 20 69 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e   if both argumen
193e0 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 49  ts are NULL.  ^I
193f0 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20 68 61 76  fnull() must hav
19400 65 20 65 78 61 63 74 6c 79 20 32 20 61 72 67 75  e exactly 2 argu
19410 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65 20 69 66  ments..  ^The if
19420 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20  null() function 
19430 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  is equivalent to
19440 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d 20 77 69   [coalesce()] wi
19450 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  th two arguments
19460 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 6e  ..}..funcdef {in
19470 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  str(X,Y)} {} {. 
19480 20 5e 54 68 65 20 69 6e 73 74 72 28 58 2c 59 29   ^The instr(X,Y)
19490 20 66 75 6e 63 74 69 6f 6e 20 66 69 6e 64 73 20   function finds 
194a0 74 68 65 20 66 69 72 73 74 20 6f 63 63 75 72 72  the first occurr
194b0 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59  ence of string Y
194c0 20 77 69 74 68 69 6e 20 0a 20 20 73 74 72 69 6e   within .  strin
194d0 67 20 58 20 61 6e 64 20 72 65 74 75 72 6e 73 20  g X and returns 
194e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 72  the number of pr
194f0 69 6f 72 20 63 68 61 72 61 63 74 65 72 73 20 70  ior characters p
19500 6c 75 73 20 31 2c 20 6f 72 20 30 20 69 66 0a 20  lus 1, or 0 if. 
19510 20 59 20 69 73 20 6e 6f 77 68 65 72 65 20 66 6f   Y is nowhere fo
19520 75 6e 64 20 77 69 74 68 69 6e 20 58 2e 0a 20 20  und within X..  
19530 5e 4f 72 2c 20 69 66 20 58 20 61 6e 64 20 59 20  ^Or, if X and Y 
19540 61 72 65 20 62 6f 74 68 20 42 4c 4f 42 73 2c 20  are both BLOBs, 
19550 74 68 65 6e 20 69 6e 73 74 72 28 58 2c 59 29 20  then instr(X,Y) 
19560 72 65 74 75 72 6e 73 20 6f 6e 65 0a 20 20 6d 6f  returns one.  mo
19570 72 65 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62  re than the numb
19580 65 72 20 62 79 74 65 73 20 70 72 69 6f 72 20 74  er bytes prior t
19590 6f 20 74 68 65 20 66 69 72 73 74 20 6f 63 63 75  o the first occu
195a0 72 72 65 6e 63 65 20 6f 66 20 59 2c 20 6f 72 20  rrence of Y, or 
195b0 30 20 69 66 0a 20 20 59 20 64 6f 65 73 20 6e 6f  0 if.  Y does no
195c0 74 20 6f 63 63 75 72 20 61 6e 79 77 68 65 72 65  t occur anywhere
195d0 20 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 49 66   within X..  ^If
195e0 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20   both arguments 
195f0 58 20 61 6e 64 20 59 20 74 6f 20 69 6e 73 74 72  X and Y to instr
19600 28 58 2c 59 29 20 61 72 65 20 6e 6f 6e 2d 4e 55  (X,Y) are non-NU
19610 4c 4c 20 61 6e 64 20 61 72 65 20 6e 6f 74 20 42  LL and are not B
19620 4c 4f 42 73 0a 20 20 74 68 65 6e 20 62 6f 74 68  LOBs.  then both
19630 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
19640 20 61 73 20 73 74 72 69 6e 67 73 2e 0a 20 20 5e   as strings..  ^
19650 49 66 20 65 69 74 68 65 72 20 58 20 6f 72 20 59  If either X or Y
19660 20 61 72 65 20 4e 55 4c 4c 20 69 6e 20 69 6e 73   are NULL in ins
19670 74 72 28 58 2c 59 29 20 74 68 65 6e 20 74 68 65  tr(X,Y) then the
19680 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
19690 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65 78  .}..funcdef {hex
196a0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
196b0 20 68 65 78 28 29 20 66 75 6e 63 74 69 6f 6e 20   hex() function 
196c0 69 6e 74 65 72 70 72 65 74 73 20 69 74 73 20 61  interprets its a
196d0 72 67 75 6d 65 6e 74 20 61 73 20 61 20 42 4c 4f  rgument as a BLO
196e0 42 20 61 6e 64 20 72 65 74 75 72 6e 73 0a 20 20  B and returns.  
196f0 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69  a string which i
19700 73 20 74 68 65 20 75 70 70 65 72 2d 63 61 73 65  s the upper-case
19710 20 68 65 78 61 64 65 63 69 6d 61 6c 20 72 65 6e   hexadecimal ren
19720 64 65 72 69 6e 67 20 6f 66 20 74 68 65 20 63 6f  dering of the co
19730 6e 74 65 6e 74 20 6f 66 0a 20 20 74 68 61 74 20  ntent of.  that 
19740 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  blob..}..funcdef
19750 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f   {last_insert_ro
19760 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  wid()} {} {.  ^T
19770 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  he last_insert_r
19780 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  owid() function 
19790 72 65 74 75 72 6e 73 20 74 68 65 20 5b 52 4f 57  returns the [ROW
197a0 49 44 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61 73  ID].  of the las
197b0 74 20 72 6f 77 20 69 6e 73 65 72 74 20 66 72 6f  t row insert fro
197c0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  m the database c
197d0 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63 68 20  onnection which 
197e0 69 6e 76 6f 6b 65 64 20 74 68 65 0a 20 20 66 75  invoked the.  fu
197f0 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 6c  nction..  ^The l
19800 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
19810 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  () SQL function 
19820 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f  is a wrapper aro
19830 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  und the.  [sqlit
19840 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
19850 6f 77 69 64 28 29 5d 20 43 2f 43 2b 2b 20 69 6e  owid()] C/C++ in
19860 74 65 72 66 61 63 65 20 66 75 6e 63 74 69 6f 6e  terface function
19870 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 65  ..}..funcdef {le
19880 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  ngth(X)} {} {.  
19890 5e 46 6f 72 20 61 20 73 74 72 69 6e 67 20 76 61  ^For a string va
198a0 6c 75 65 20 58 2c 20 74 68 65 20 6c 65 6e 67 74  lue X, the lengt
198b0 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  h(X) function re
198c0 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
198d0 20 6f 66 20 0a 20 20 63 68 61 72 61 63 74 65 72   of .  character
198e0 73 20 28 6e 6f 74 20 62 79 74 65 73 29 20 69 6e  s (not bytes) in
198f0 20 58 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20   X prior to the 
19900 66 69 72 73 74 20 4e 55 4c 20 63 68 61 72 61 63  first NUL charac
19910 74 65 72 2e 0a 20 20 53 69 6e 63 65 20 53 51 4c  ter..  Since SQL
19920 69 74 65 20 73 74 72 69 6e 67 73 20 64 6f 20 6e  ite strings do n
19930 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74  ot normally cont
19940 61 69 6e 20 4e 55 4c 20 63 68 61 72 61 63 74 65  ain NUL characte
19950 72 73 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58  rs, the length(X
19960 29 0a 20 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c  ).  function wil
19970 6c 20 75 73 75 61 6c 6c 79 20 72 65 74 75 72 6e  l usually return
19980 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
19990 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
199a0 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e  in the string X.
199b0 0a 20 20 5e 46 6f 72 20 61 20 62 6c 6f 62 20 76  .  ^For a blob v
199c0 61 6c 75 65 20 58 2c 20 6c 65 6e 67 74 68 28 58  alue X, length(X
199d0 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  ) returns the nu
199e0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
199f0 20 74 68 65 20 62 6c 6f 62 2e 0a 20 20 5e 49 66   the blob..  ^If
19a00 20 58 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20   X is NULL then 
19a10 6c 65 6e 67 74 68 28 58 29 20 69 73 20 4e 55 4c  length(X) is NUL
19a20 4c 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 6e 75  L..  ^If X is nu
19a30 6d 65 72 69 63 20 74 68 65 6e 20 6c 65 6e 67 74  meric then lengt
19a40 68 28 58 29 20 72 65 74 75 72 6e 73 20 74 68 65  h(X) returns the
19a50 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74 72   length of a str
19a60 69 6e 67 0a 20 20 72 65 70 72 65 73 65 6e 74 61  ing.  representa
19a70 74 69 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75  tion of X..}..fu
19a80 6e 63 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59 29  ncdef {like(X,Y)
19a90 20 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d   like(X,Y,Z)} {}
19aa0 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28 29   {.  ^The like()
19ab0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
19ac0 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
19ad0 68 65 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45 20  he.  "<b>Y LIKE 
19ae0 58 20 26 23 39 31 3b 45 53 43 41 50 45 20 5a 26  X &#91;ESCAPE Z&
19af0 23 39 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65 73  #93;</b>" expres
19b00 73 69 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68 65  sion. .  ^If the
19b10 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45   optional ESCAPE
19b20 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
19b30 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 6c  nt, then the.  l
19b40 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  ike() function i
19b50 73 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74  s invoked with t
19b60 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e 20  hree arguments. 
19b70 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20   ^Otherwise, it 
19b80 69 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69 74  is.  invoked wit
19b90 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20  h two arguments 
19ba0 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74 20  only. Note that 
19bb0 74 68 65 20 58 20 61 6e 64 20 59 20 70 61 72 61  the X and Y para
19bc0 6d 65 74 65 72 73 20 61 72 65 0a 20 20 72 65 76  meters are.  rev
19bd0 65 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69 6b  ersed in the lik
19be0 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c  e() function rel
19bf0 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66  ative to the inf
19c00 69 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74  ix [LIKE] operat
19c10 6f 72 2e 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69  or..  ^The [sqli
19c20 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
19c30 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ion()] interface
19c40 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
19c50 6f 76 65 72 72 69 64 65 20 74 68 65 0a 20 20 6c  override the.  l
19c60 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61  ike() function a
19c70 6e 64 20 74 68 65 72 65 62 79 20 63 68 61 6e 67  nd thereby chang
19c80 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  e the operation 
19c90 6f 66 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20  of the.  [LIKE] 
19ca0 6f 70 65 72 61 74 6f 72 2e 20 20 57 68 65 6e 20  operator.  When 
19cb0 6f 76 65 72 72 69 64 69 6e 67 20 74 68 65 20 6c  overriding the l
19cc0 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  ike() function, 
19cd0 69 74 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74  it may be import
19ce0 61 6e 74 0a 20 20 74 6f 20 6f 76 65 72 72 69 64  ant.  to overrid
19cf0 65 20 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61  e both the two a
19d00 6e 64 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e  nd three argumen
19d10 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68  t versions of th
19d20 65 20 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e 63  e like() .  func
19d30 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c  tion. Otherwise,
19d40 20 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20   different code 
19d50 6d 61 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f  may be called to
19d60 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20   implement the. 
19d70 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72   [LIKE] operator
19d80 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
19d90 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
19da0 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 77 61  ESCAPE clause wa
19db0 73 20 0a 20 20 73 70 65 63 69 66 69 65 64 2e 0a  s .  specified..
19dc0 7d 0a 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b  }...funcdef {lik
19dd0 65 6c 69 68 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d  elihood(X,Y)} {}
19de0 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 69   {.  ^The likeli
19df0 68 6f 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69  hood(X,Y) functi
19e00 6f 6e 20 72 65 74 75 72 6e 73 20 61 72 67 75 6d  on returns argum
19e10 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e  ent X unchanged.
19e20 0a 20 20 5e 28 54 68 65 20 76 61 6c 75 65 20 59  .  ^(The value Y
19e30 20 69 6e 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58   in likelihood(X
19e40 2c 59 29 20 6d 75 73 74 20 62 65 20 61 20 66 6c  ,Y) must be a fl
19e50 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 63 6f 6e  oating point con
19e60 73 74 61 6e 74 0a 20 20 62 65 74 77 65 65 6e 20  stant.  between 
19e70 30 2e 30 20 61 6e 64 20 31 2e 30 2c 20 69 6e 63  0.0 and 1.0, inc
19e80 6c 75 73 69 76 65 2e 29 5e 0a 20 20 5e 54 68 65  lusive.)^.  ^The
19e90 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 29 20 66   likelihood(X) f
19ea0 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  unction is a no-
19eb0 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  op that the code
19ec0 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74   generator.  opt
19ed0 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74  imizes away so t
19ee0 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20  hat it consumes 
19ef0 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20 64 75  no CPU cycles du
19f00 72 69 6e 67 20 72 75 6e 2d 74 69 6d 65 0a 20 20  ring run-time.  
19f10 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67  (that is, during
19f20 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74   calls to [sqlit
19f30 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e  e3_step()])..  ^
19f40 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74  The purpose of t
19f50 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c  he likelihood(X,
19f60 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74  Y) function is t
19f70 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74  o provide a hint
19f80 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  .  to the query 
19f90 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65  planner that the
19fa0 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61   argument X is a
19fb0 20 62 6f 6f 6c 65 61 6e 20 74 68 61 74 20 69 73   boolean that is
19fc0 0a 20 20 74 72 75 65 20 77 69 74 68 20 61 20 70  .  true with a p
19fd0 72 6f 62 61 62 69 6c 69 74 79 20 6f 66 20 61 70  robability of ap
19fe0 70 72 6f 78 69 6d 61 74 65 6c 79 20 59 2e 0a 20  proximately Y.. 
19ff0 20 5e 28 54 68 65 20 5b 75 6e 6c 69 6b 65 6c 79   ^(The [unlikely
1a000 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69 73  (X)] function is
1a010 20 73 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72 20   short-hand for 
1a020 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e 30  likelihood(X,0.0
1a030 36 32 35 29 2e 29 5e 0a 20 20 5e 28 54 68 65 20  625).)^.  ^(The 
1a040 5b 6c 69 6b 65 6c 79 28 58 29 5d 20 66 75 6e 63  [likely(X)] func
1a050 74 69 6f 6e 20 69 73 20 73 68 6f 72 74 2d 68 61  tion is short-ha
1a060 6e 64 20 66 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  nd for likelihoo
1a070 64 28 58 2c 30 2e 39 33 37 35 29 2e 29 5e 0a 7d  d(X,0.9375).)^.}
1a080 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c  ..funcdef {likel
1a090 79 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  y(X)} {} {.  ^Th
1a0a0 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63  e likely(X) func
1a0b0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1a0c0 20 61 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68   argument X unch
1a0d0 61 6e 67 65 64 2e 0a 20 20 5e 54 68 65 20 6c 69  anged..  ^The li
1a0e0 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
1a0f0 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74   is a no-op that
1a100 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1a110 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20  tor.  optimizes 
1a120 61 77 61 79 20 73 6f 20 74 68 61 74 20 69 74 20  away so that it 
1a130 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55 20  consumes no CPU 
1a140 63 79 63 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d  cycles at.  run-
1a150 74 69 6d 65 20 28 74 68 61 74 20 69 73 2c 20 64  time (that is, d
1a160 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b  uring calls to [
1a170 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29  sqlite3_step()])
1a180 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65  ..  ^The purpose
1a190 20 6f 66 20 74 68 65 20 6c 69 6b 65 6c 79 28 58   of the likely(X
1a1a0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f  ) function is to
1a1b0 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a   provide a hint.
1a1c0 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70    to the query p
1a1d0 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20  lanner that the 
1a1e0 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20  argument X is a 
1a1f0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20  boolean value.  
1a200 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20  that is usually 
1a210 74 72 75 65 2e 20 5e 28 54 68 65 20 6c 69 6b 65  true. ^(The like
1a220 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  ly(X) function i
1a230 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 74  s equivalent.  t
1a240 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28 58  o [likelihood](X
1a250 2c 30 2e 39 33 37 35 29 2e 29 5e 20 53 65 65 20  ,0.9375).)^ See 
1a260 61 6c 73 6f 3a 20 5b 75 6e 6c 69 6b 65 6c 79 28  also: [unlikely(
1a270 58 29 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  X)]..}..funcdef 
1a280 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  {load_extension(
1a290 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  X) load_extensio
1a2a0 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  n(X,Y)} {} {.  ^
1a2b0 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  The load_extensi
1a2c0 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  on(X,Y) function
1a2d0 20 6c 6f 61 64 73 20 5b 53 51 4c 69 74 65 20 65   loads [SQLite e
1a2e0 78 74 65 6e 73 69 6f 6e 73 5d 20 6f 75 74 20 6f  xtensions] out o
1a2f0 66 20 74 68 65 20 73 68 61 72 65 64 0a 20 20 6c  f the shared.  l
1a300 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65  ibrary file name
1a310 64 20 58 20 75 73 69 6e 67 20 74 68 65 20 65 6e  d X using the en
1a320 74 72 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e 54  try point Y.  ^T
1a330 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f 61  he result of loa
1a340 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20 20  d_extension().  
1a350 69 73 20 61 6c 77 61 79 73 20 61 20 4e 55 4c 4c  is always a NULL
1a360 2e 20 20 5e 49 66 20 59 20 69 73 20 6f 6d 69 74  .  ^If Y is omit
1a370 74 65 64 20 74 68 65 6e 20 74 68 65 20 64 65 66  ted then the def
1a380 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74  ault entry point
1a390 20 6e 61 6d 65 20 69 73 20 75 73 65 64 2e 0a 20   name is used.. 
1a3a0 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e   ^The load_exten
1a3b0 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  sion() function 
1a3c0 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70 74  raises an except
1a3d0 69 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e  ion if the exten
1a3e0 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f 0a 20 20  sion fails to.  
1a3f0 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c 69  load or initiali
1a400 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20  ze correctly... 
1a410 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65 78   <p>^The load_ex
1a420 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69  tension() functi
1a430 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  on will fail if 
1a440 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 74  the extension at
1a450 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f 64  tempts to .  mod
1a460 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61 6e  ify or delete an
1a470 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72   SQL function or
1a480 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
1a490 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78 74  nce.  ^The.  ext
1a4a0 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e  ension can add n
1a4b0 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  ew functions or 
1a4c0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
1a4d0 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a  ces, but cannot.
1a4e0 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65    modify or dele
1a4f0 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63  te existing func
1a500 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69  tions or collati
1a510 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65 63  ng sequences bec
1a520 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75 6e  ause.  those fun
1a530 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f  ctions and/or co
1a540 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1a550 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64 20  s might be used 
1a560 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20 74  elsewhere.  in t
1a570 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e  he currently run
1a580 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d 65  ning SQL stateme
1a590 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20  nt.  To load an 
1a5a0 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20  extension that. 
1a5b0 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c 65   changes or dele
1a5c0 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  tes functions or
1a5d0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
1a5e0 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20 20  nces, use the.  
1a5f0 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  [sqlite3_load_ex
1a600 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e  tension()] C-lan
1a610 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a  guage API.</p>..
1a620 20 20 3c 70 3e 46 6f 72 20 73 65 63 75 72 69 74    <p>For securit
1a630 79 20 72 65 61 73 6f 6e 73 2c 20 65 78 74 65 6e  y reasons, exten
1a640 73 69 6f 6e 20 6c 6f 61 64 65 64 20 69 73 20 74  sion loaded is t
1a650 75 72 6e 65 64 20 6f 66 66 20 62 79 20 64 65 66  urned off by def
1a660 61 75 6c 74 20 61 6e 64 20 6d 75 73 74 0a 20 20  ault and must.  
1a670 62 65 20 65 6e 61 62 6c 65 64 20 62 79 20 61 20  be enabled by a 
1a680 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 5b 73  prior call to [s
1a690 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f  qlite3_enable_lo
1a6a0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 2e  ad_extension()].
1a6b0 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  </p>.}..funcdef 
1a6c0 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a  {lower(X)} {} {.
1a6d0 20 20 5e 54 68 65 20 6c 6f 77 65 72 28 58 29 20    ^The lower(X) 
1a6e0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1a6f0 20 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69 6e   a copy of strin
1a700 67 20 58 20 77 69 74 68 20 61 6c 6c 20 41 53 43  g X with all ASC
1a710 49 49 20 63 68 61 72 61 63 74 65 72 73 0a 20 20  II characters.  
1a720 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77  converted to low
1a730 65 72 20 63 61 73 65 2e 20 20 5e 54 68 65 20 64  er case.  ^The d
1a740 65 66 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20  efault built-in 
1a750 6c 6f 77 65 72 28 29 20 66 75 6e 63 74 69 6f 6e  lower() function
1a760 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53 43   works.  for ASC
1a770 49 49 20 63 68 61 72 61 63 74 65 72 73 20 6f 6e  II characters on
1a780 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61 73 65 20  ly.  To do case 
1a790 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e  conversions on n
1a7a0 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68 61 72 61  on-ASCII.  chara
1a7b0 63 74 65 72 73 2c 20 6c 6f 61 64 20 74 68 65 20  cters, load the 
1a7c0 49 43 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d  ICU extension..}
1a7d0 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d  ..funcdef {ltrim
1a7e0 28 58 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20  (X) ltrim(X,Y)} 
1a7f0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72 69  {} {.  ^The ltri
1a800 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  m(X,Y) function 
1a810 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
1a820 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76   formed by remov
1a830 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a  ing any and all.
1a840 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61    characters tha
1a850 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72  t appear in Y fr
1a860 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64 65  om the left side
1a870 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65   of X..  ^If the
1a880 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f   Y argument is o
1a890 6d 69 74 74 65 64 2c 20 6c 74 72 69 6d 28 58 29  mitted, ltrim(X)
1a8a0 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20   removes spaces 
1a8b0 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69  from the left si
1a8c0 64 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75  de.  of X..}..fu
1a8d0 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c 2e  ncdef {max(X,Y,.
1a8e0 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46 75  ..)} {*maxCoreFu
1a8f0 6e 63 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20 53  nc *max {max() S
1a900 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  QL function}} {.
1a910 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67    ^The multi-arg
1a920 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63  ument max() func
1a930 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1a940 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74   argument with t
1a950 68 65 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76 61  he .  maximum va
1a960 6c 75 65 2c 20 6f 72 20 72 65 74 75 72 6e 20 4e  lue, or return N
1a970 55 4c 4c 20 69 66 20 61 6e 79 20 61 72 67 75 6d  ULL if any argum
1a980 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20  ent is NULL. .  
1a990 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
1a9a0 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69  ent max() functi
1a9b0 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73 20  on searches its 
1a9c0 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c  arguments from l
1a9d0 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66  eft to right.  f
1a9e0 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74  or an argument t
1a9f0 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  hat defines a co
1aa00 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1aa10 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63   and uses that c
1aa20 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74  ollating.  funct
1aa30 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
1aa40 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  ng comparisons. 
1aa50 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65   ^If none of the
1aa60 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 61   arguments to ma
1aa70 78 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63  x().  define a c
1aa80 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1aa90 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41  n, then the BINA
1aaa0 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  RY collating fun
1aab0 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20  ction is used.. 
1aac0 20 5e 28 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e   ^(Note that <b>
1aad0 6d 61 78 28 29 3c 2f 62 3e 20 69 73 20 61 20 73  max()</b> is a s
1aae0 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77  imple function w
1aaf0 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f  hen.  it has 2 o
1ab00 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73  r more arguments
1ab10 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61 73   but operates as
1ab20 20 61 6e 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e   an.  [maxAggFun
1ab30 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75  c | aggregate fu
1ab40 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e  nction] if given
1ab50 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61   only a single a
1ab60 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75  rgument.)^.}..fu
1ab70 6e 63 64 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e  ncdef {min(X,Y,.
1ab80 2e 2e 29 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46 75  ..)} {*minCoreFu
1ab90 6e 63 20 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20 53  nc *min {min() S
1aba0 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  QL function}} {.
1abb0 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67    ^The multi-arg
1abc0 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63  ument min() func
1abd0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1abe0 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74   argument with t
1abf0 68 65 0a 20 20 6d 69 6e 69 6d 75 6d 20 76 61 6c  he.  minimum val
1ac00 75 65 2e 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69  ue..  ^The multi
1ac10 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20  -argument min() 
1ac20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65  function searche
1ac30 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20  s its arguments 
1ac40 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
1ac50 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75  ht.  for an argu
1ac60 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
1ac70 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
1ac80 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20  nction and uses 
1ac90 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20  that collating. 
1aca0 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
1acb0 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69  l string compari
1acc0 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20  sons.  ^If none 
1acd0 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  of the arguments
1ace0 20 74 6f 20 6d 69 6e 28 29 0a 20 20 64 65 66 69   to min().  defi
1acf0 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ne a collating f
1ad00 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  unction, then th
1ad10 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  e BINARY collati
1ad20 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75  ng function is u
1ad30 73 65 64 2e 0a 20 20 5e 28 4e 6f 74 65 20 74 68  sed..  ^(Note th
1ad40 61 74 20 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20  at <b>min()</b> 
1ad50 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63  is a simple func
1ad60 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68  tion when.  it h
1ad70 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67  as 2 or more arg
1ad80 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61  uments but opera
1ad90 74 65 73 20 61 73 20 61 6e 20 0a 20 20 5b 6d 69  tes as an .  [mi
1ada0 6e 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65  nAggFunc | aggre
1adb0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69  gate function] i
1adc0 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20 61  f given.  only a
1add0 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
1ade0 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
1adf0 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20 7b 7d 20  nullif(X,Y)} {} 
1ae00 7b 0a 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28  {.  ^The nullif(
1ae10 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
1ae20 74 75 72 6e 73 20 69 74 73 20 66 69 72 73 74 20  turns its first 
1ae30 61 72 67 75 6d 65 6e 74 20 69 66 20 74 68 65 20  argument if the 
1ae40 61 72 67 75 6d 65 6e 74 73 20 61 72 65 0a 20 20  arguments are.  
1ae50 64 69 66 66 65 72 65 6e 74 20 61 6e 64 20 4e 55  different and NU
1ae60 4c 4c 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  LL if the argume
1ae70 6e 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  nts are the same
1ae80 2e 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58  .  ^The nullif(X
1ae90 2c 59 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 73  ,Y) function.  s
1aea0 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
1aeb0 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
1aec0 74 6f 20 72 69 67 68 74 20 66 6f 72 20 61 6e 20  to right for an 
1aed0 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65  argument that de
1aee0 66 69 6e 65 73 20 61 0a 20 20 63 6f 6c 6c 61 74  fines a.  collat
1aef0 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
1af00 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
1af10 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f  ting function fo
1af20 72 20 61 6c 6c 20 73 74 72 69 6e 67 0a 20 20 63  r all string.  c
1af30 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
1af40 20 6e 65 69 74 68 65 72 20 61 72 67 75 6d 65 6e   neither argumen
1af50 74 20 74 6f 20 6e 75 6c 6c 69 66 28 29 20 64 65  t to nullif() de
1af60 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e  fines a collatin
1af70 67 20 66 75 6e 63 74 69 6f 6e 0a 20 20 74 68 65  g function.  the
1af80 6e 20 74 68 65 20 42 49 4e 41 52 59 20 69 73 20  n the BINARY is 
1af90 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  used..}..funcdef
1afa0 20 7b 70 72 69 6e 74 66 28 46 4f 52 4d 41 54 2c   {printf(FORMAT,
1afb0 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54  ...)} {} {.  ^(T
1afc0 68 65 20 70 72 69 6e 74 66 28 46 4f 52 4d 41 54  he printf(FORMAT
1afd0 2c 2e 2e 2e 29 20 53 51 4c 20 66 75 6e 63 74 69  ,...) SQL functi
1afe0 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65 20 74 68  on works like th
1aff0 65 20 5b 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  e [sqlite3_mprin
1b000 74 66 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65  tf()] C-language
1b010 0a 20 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  .  function and 
1b020 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
1b030 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73  ction from the s
1b040 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
1b050 79 2e 29 5e 0a 20 20 54 68 65 20 66 69 72 73 74  y.)^.  The first
1b060 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 66   argument is a f
1b070 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74 68 61  ormat string tha
1b080 74 20 73 70 65 63 69 66 69 65 73 20 68 6f 77 20  t specifies how 
1b090 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
1b0a0 20 6f 75 74 70 75 74 0a 20 20 73 74 72 69 6e 67   output.  string
1b0b0 20 75 73 69 6e 67 20 76 61 6c 75 65 73 20 74 61   using values ta
1b0c0 6b 65 6e 20 66 72 6f 6d 20 73 75 62 73 65 71 75  ken from subsequ
1b0d0 65 6e 74 20 61 72 67 75 6d 65 6e 74 73 2e 20 20  ent arguments.  
1b0e0 5e 49 66 20 74 68 65 20 46 4f 52 4d 41 54 20 61  ^If the FORMAT a
1b0f0 72 67 75 6d 65 6e 74 20 69 73 0a 20 20 6d 69 73  rgument is.  mis
1b100 73 69 6e 67 20 6f 72 20 4e 55 4c 4c 20 74 68 65  sing or NULL the
1b110 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
1b120 4e 55 4c 4c 2e 20 20 5e 54 68 65 20 25 6e 20 66  NULL.  ^The %n f
1b130 6f 72 6d 61 74 20 69 73 20 73 69 6c 65 6e 74 6c  ormat is silentl
1b140 79 20 69 67 6e 6f 72 65 64 20 61 6e 64 0a 20 20  y ignored and.  
1b150 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 73 75 6d 65  does not consume
1b160 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 20 5e   an argument.  ^
1b170 54 68 65 20 25 70 20 66 6f 72 6d 61 74 20 69 73  The %p format is
1b180 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 25 58   an alias for %X
1b190 2e 20 20 5e 54 68 65 20 25 7a 20 66 6f 72 6d 61  .  ^The %z forma
1b1a0 74 0a 20 20 69 73 20 69 6e 74 65 72 63 68 61 6e  t.  is interchan
1b1b0 67 65 61 62 6c 65 20 77 69 74 68 20 25 73 2e 20  geable with %s. 
1b1c0 20 5e 28 49 66 20 74 68 65 72 65 20 61 72 65 20   ^(If there are 
1b1d0 74 6f 6f 20 66 65 77 20 61 72 67 75 6d 65 6e 74  too few argument
1b1e0 73 20 69 6e 20 74 68 65 20 61 72 67 75 6d 65 6e  s in the argumen
1b1f0 74 20 6c 69 73 74 2c 0a 20 20 6d 69 73 73 69 6e  t list,.  missin
1b200 67 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  g arguments are 
1b210 61 73 73 75 6d 65 64 20 74 6f 20 68 61 76 65 20  assumed to have 
1b220 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 77 68  a NULL value, wh
1b230 69 63 68 20 69 73 20 74 72 61 6e 73 6c 61 74 65  ich is translate
1b240 64 20 69 6e 74 6f 0a 20 20 30 20 6f 72 20 30 2e  d into.  0 or 0.
1b250 30 20 66 6f 72 20 6e 75 6d 65 72 69 63 20 66 6f  0 for numeric fo
1b260 72 6d 61 74 73 20 6f 72 20 61 6e 20 65 6d 70 74  rmats or an empt
1b270 79 20 73 74 72 69 6e 67 20 66 6f 72 20 25 73 2e  y string for %s.
1b280 29 5e 0a 7d 0a 20 20 0a 0a 66 75 6e 63 64 65 66  )^.}.  ..funcdef
1b290 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b 7d 20 7b   {quote(X)} {} {
1b2a0 0a 20 20 5e 54 68 65 20 71 75 6f 74 65 28 58 29  .  ^The quote(X)
1b2b0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1b2c0 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  s the text of an
1b2d0 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 77 68 69   SQL literal whi
1b2e0 63 68 0a 20 20 69 73 20 74 68 65 20 76 61 6c 75  ch.  is the valu
1b2f0 65 20 6f 66 20 69 74 73 20 61 72 67 75 6d 65 6e  e of its argumen
1b300 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69  t suitable for i
1b310 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e  nclusion into an
1b320 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a   SQL statement..
1b330 20 20 5e 53 74 72 69 6e 67 73 20 61 72 65 20 73    ^Strings are s
1b340 75 72 72 6f 75 6e 64 65 64 20 62 79 20 73 69 6e  urrounded by sin
1b350 67 6c 65 2d 71 75 6f 74 65 73 20 77 69 74 68 20  gle-quotes with 
1b360 65 73 63 61 70 65 73 20 6f 6e 20 69 6e 74 65 72  escapes on inter
1b370 69 6f 72 20 71 75 6f 74 65 73 0a 20 20 61 73 20  ior quotes.  as 
1b380 6e 65 65 64 65 64 2e 20 20 5e 42 4c 4f 42 73 20  needed.  ^BLOBs 
1b390 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 68  are encoded as h
1b3a0 65 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65 72  exadecimal liter
1b3b0 61 6c 73 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20  als..  ^Strings 
1b3c0 77 69 74 68 20 65 6d 62 65 64 64 65 64 20 4e 55  with embedded NU
1b3d0 4c 20 63 68 61 72 61 63 74 65 72 73 20 63 61 6e  L characters can
1b3e0 6e 6f 74 20 62 65 20 72 65 70 72 65 73 65 6e 74  not be represent
1b3f0 65 64 20 61 73 20 73 74 72 69 6e 67 0a 20 20 6c  ed as string.  l
1b400 69 74 65 72 61 6c 73 20 69 6e 20 53 51 4c 20 61  iterals in SQL a
1b410 6e 64 20 68 65 6e 63 65 20 74 68 65 20 72 65 74  nd hence the ret
1b420 75 72 6e 65 64 20 73 74 72 69 6e 67 20 6c 69 74  urned string lit
1b430 65 72 61 6c 20 69 73 20 74 72 75 6e 63 61 74 65  eral is truncate
1b440 64 20 70 72 69 6f 72 0a 20 20 74 6f 20 74 68 65  d prior.  to the
1b450 20 66 69 72 73 74 20 4e 55 4c 2e 0a 7d 0a 0a 66   first NUL..}..f
1b460 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 28 29  uncdef {random()
1b470 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61  } {} {.  ^The ra
1b480 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20  ndom() function 
1b490 72 65 74 75 72 6e 73 20 61 20 70 73 65 75 64 6f  returns a pseudo
1b4a0 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a  -random integer.
1b4b0 20 20 62 65 74 77 65 65 6e 20 2d 39 32 32 33 33    between -92233
1b4c0 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20 61  72036854775808 a
1b4d0 6e 64 20 2b 39 32 32 33 33 37 32 30 33 36 38 35  nd +922337203685
1b4e0 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63  4775807..}..func
1b4f0 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28  def {randomblob(
1b500 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  N)} {} {.  ^The 
1b510 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20 66 75  randomblob(N) fu
1b520 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 20 61 6e  nction return an
1b530 20 4e 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e   N-byte blob con
1b540 74 61 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72  taining pseudo-r
1b550 61 6e 64 6f 6d 0a 20 20 62 79 74 65 73 2e 20 5e  andom.  bytes. ^
1b560 49 66 20 4e 20 69 73 20 6c 65 73 73 20 74 68 61  If N is less tha
1b570 6e 20 31 20 74 68 65 6e 20 61 20 31 2d 62 79 74  n 1 then a 1-byt
1b580 65 20 72 61 6e 64 6f 6d 20 62 6c 6f 62 20 69 73  e random blob is
1b590 20 72 65 74 75 72 6e 65 64 2e 0a 0a 20 20 3c 70   returned...  <p
1b5a0 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69 63 61 74  >Hint:  applicat
1b5b0 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72 61 74  ions can generat
1b5c0 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71 75  e globally uniqu
1b5d0 65 20 69 64 65 6e 74 69 66 69 65 72 73 0a 20 20  e identifiers.  
1b5e0 75 73 69 6e 67 20 74 68 69 73 20 66 75 6e 63 74  using this funct
1b5f0 69 6f 6e 20 74 6f 67 65 74 68 65 72 20 77 69 74  ion together wit
1b600 68 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f 72  h [hex()] and/or
1b610 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69 6b  .  [lower()] lik
1b620 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c  e this:</p>..  <
1b630 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68 65  blockquote>.  he
1b640 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29  x(randomblob(16)
1b650 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77  )<br></br>.  low
1b660 65 72 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f  er(hex(randomblo
1b670 62 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f 63  b(16))).  </bloc
1b680 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64  kquote>.}..funcd
1b690 65 66 20 7b 72 65 70 6c 61 63 65 28 58 2c 59 2c  ef {replace(X,Y,
1b6a0 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Z)} {} {.  ^The 
1b6b0 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 20 66  replace(X,Y,Z) f
1b6c0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1b6d0 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20  a string formed 
1b6e0 62 79 20 73 75 62 73 74 69 74 75 74 69 6e 67 0a  by substituting.
1b6f0 20 20 73 74 72 69 6e 67 20 5a 20 66 6f 72 20 65    string Z for e
1b700 76 65 72 79 20 6f 63 63 75 72 72 65 6e 63 65 20  very occurrence 
1b710 6f 66 20 73 74 72 69 6e 67 20 59 20 69 6e 20 73  of string Y in s
1b720 74 72 69 6e 67 20 58 2e 20 20 5e 54 68 65 20 5b  tring X.  ^The [
1b730 42 49 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74  BINARY].  collat
1b740 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
1b750 75 73 65 64 20 66 6f 72 20 63 6f 6d 70 61 72 69  used for compari
1b760 73 6f 6e 73 2e 20 20 5e 49 66 20 59 20 69 73 20  sons.  ^If Y is 
1b770 61 6e 20 65 6d 70 74 79 0a 20 20 73 74 72 69 6e  an empty.  strin
1b780 67 20 74 68 65 6e 20 72 65 74 75 72 6e 20 58 20  g then return X 
1b790 75 6e 63 68 61 6e 67 65 64 2e 20 20 5e 49 66 20  unchanged.  ^If 
1b7a0 5a 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  Z is not initial
1b7b0 6c 79 0a 20 20 61 20 73 74 72 69 6e 67 2c 20 69  ly.  a string, i
1b7c0 74 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 55  t is cast to a U
1b7d0 54 46 2d 38 20 73 74 72 69 6e 67 20 70 72 69 6f  TF-8 string prio
1b7e0 72 20 74 6f 20 70 72 6f 63 65 73 73 69 6e 67 2e  r to processing.
1b7f0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75  .}..funcdef {rou
1b800 6e 64 28 58 29 20 72 6f 75 6e 64 28 58 2c 59 29  nd(X) round(X,Y)
1b810 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 6f  } {} {.  ^The ro
1b820 75 6e 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  und(X,Y) functio
1b830 6e 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61  n returns a floa
1b840 74 69 6e 67 2d 70 6f 69 6e 74 0a 20 20 76 61 6c  ting-point.  val
1b850 75 65 20 58 20 72 6f 75 6e 64 65 64 20 74 6f 20  ue X rounded to 
1b860 59 20 64 69 67 69 74 73 20 74 6f 20 74 68 65 20  Y digits to the 
1b870 72 69 67 68 74 20 6f 66 20 74 68 65 20 64 65 63  right of the dec
1b880 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a 20 20 5e 49  imal point..  ^I
1b890 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74  f the Y argument
1b8a0 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 69 74 20   is omitted, it 
1b8b0 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65  is assumed to be
1b8c0 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b   0..}..funcdef {
1b8d0 72 74 72 69 6d 28 58 29 20 72 74 72 69 6d 28 58  rtrim(X) rtrim(X
1b8e0 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1b8f0 20 72 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63   rtrim(X,Y) func
1b900 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1b910 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
1b920 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
1b930 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
1b940 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
1b950 20 59 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68   Y from the righ
1b960 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e  t side of X..  ^
1b970 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
1b980 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 72 74  t is omitted, rt
1b990 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73  rim(X) removes s
1b9a0 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 72  paces from the r
1b9b0 69 67 68 74 0a 20 20 73 69 64 65 20 6f 66 20 58  ight.  side of X
1b9c0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 6f  ..}..funcdef {so
1b9d0 75 6e 64 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20  undex(X)} {} {. 
1b9e0 20 5e 54 68 65 20 73 6f 75 6e 64 65 78 28 58 29   ^The soundex(X)
1b9f0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1ba00 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
1ba10 69 73 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65  is the soundex e
1ba20 6e 63 6f 64 69 6e 67 20 0a 20 20 6f 66 20 74 68  ncoding .  of th
1ba30 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 54  e string X..  ^T
1ba40 68 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22  he string "?000"
1ba50 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
1ba60 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
1ba70 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74 61 69 6e 73  NULL or contains
1ba80 0a 20 20 6e 6f 20 41 53 43 49 49 20 61 6c 70 68  .  no ASCII alph
1ba90 61 62 65 74 69 63 20 63 68 61 72 61 63 74 65 72  abetic character
1baa0 73 2e 0a 20 20 5e 28 54 68 69 73 20 66 75 6e 63  s..  ^(This func
1bab0 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64 20  tion is omitted 
1bac0 66 72 6f 6d 20 53 51 4c 69 74 65 20 62 79 20 64  from SQLite by d
1bad0 65 66 61 75 6c 74 2e 0a 20 20 49 74 20 69 73 20  efault..  It is 
1bae0 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
1baf0 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 53 4f  f the [SQLITE_SO
1bb00 55 4e 44 45 58 5d 20 63 6f 6d 70 69 6c 65 2d 74  UNDEX] compile-t
1bb10 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20  ime option.  is 
1bb20 75 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74 65  used when SQLite
1bb30 20 69 73 20 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a   is built.)^.}..
1bb40 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
1bb50 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
1bb60 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  t(N)} {} {.  ^Th
1bb70 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  e sqlite_compile
1bb80 6f 70 74 69 6f 6e 5f 67 65 74 28 29 20 53 51 4c  option_get() SQL
1bb90 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
1bba0 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
1bbb0 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  e.  [sqlite3_com
1bbc0 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29  pileoption_get()
1bbd0 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e  ] C/C++ function
1bbe0 2e 0a 20 20 5e 54 68 69 73 20 72 6f 75 74 69 6e  ..  ^This routin
1bbf0 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 4e 2d  e returns the N-
1bc00 74 68 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  th compile-time 
1bc10 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 62  option used to b
1bc20 75 69 6c 64 20 53 51 4c 69 74 65 0a 20 20 6f 72  uild SQLite.  or
1bc30 20 4e 55 4c 4c 20 69 66 20 4e 20 69 73 20 6f 75   NULL if N is ou
1bc40 74 20 6f 66 20 72 61 6e 67 65 2e 20 20 53 65 65  t of range.  See
1bc50 20 61 6c 73 6f 20 74 68 65 20 5b 63 6f 6d 70 69   also the [compi
1bc60 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72 61 67 6d  le_options pragm
1bc70 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  a]..}..funcdef {
1bc80 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
1bc90 74 69 6f 6e 5f 75 73 65 64 28 58 29 7d 20 7b 7d  tion_used(X)} {}
1bca0 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65   {.  ^The sqlite
1bcb0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
1bcc0 73 65 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69  sed() SQL functi
1bcd0 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
1bce0 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71  around the.  [sq
1bcf0 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
1bd00 69 6f 6e 5f 75 73 65 64 28 29 5d 20 43 2f 43 2b  ion_used()] C/C+
1bd10 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57  + function..  ^W
1bd20 68 65 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74  hen the argument
1bd30 20 58 20 74 6f 20 73 71 6c 69 74 65 5f 63 6f 6d   X to sqlite_com
1bd40 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
1bd50 58 29 20 69 73 20 61 20 73 74 72 69 6e 67 20 77  X) is a string w
1bd60 68 69 63 68 0a 20 20 69 73 20 74 68 65 20 6e 61  hich.  is the na
1bd70 6d 65 20 6f 66 20 61 20 63 6f 6d 70 69 6c 65 2d  me of a compile-
1bd80 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 69  time option, thi
1bd90 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
1bda0 73 20 74 72 75 65 20 28 31 29 20 6f 72 0a 20 20  s true (1) or.  
1bdb0 66 61 6c 73 65 20 28 30 29 20 64 65 70 65 6e 64  false (0) depend
1bdc0 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f  ing on whether o
1bdd0 72 20 6e 6f 74 20 74 68 61 74 20 6f 70 74 69 6f  r not that optio
1bde0 6e 20 77 61 73 20 75 73 65 64 20 64 75 72 69 6e  n was used durin
1bdf0 67 20 74 68 65 0a 20 20 62 75 69 6c 64 2e 0a 7d  g the.  build..}
1be00 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74  ..funcdef {sqlit
1be10 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 7d 20 7b  e_source_id()} {
1be20 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74  } {.  ^The sqlit
1be30 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 66 75  e_source_id() fu
1be40 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1be50 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 64 65   string that ide
1be60 6e 74 69 66 69 65 73 20 74 68 65 0a 20 20 73 70  ntifies the.  sp
1be70 65 63 69 66 69 63 20 76 65 72 73 69 6f 6e 20 6f  ecific version o
1be80 66 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64  f the source cod
1be90 65 20 74 68 61 74 20 77 61 73 20 75 73 65 64 20  e that was used 
1bea0 74 6f 20 62 75 69 6c 64 20 74 68 65 20 53 51 4c  to build the SQL
1beb0 69 74 65 0a 20 20 6c 69 62 72 61 72 79 2e 20 20  ite.  library.  
1bec0 5e 54 68 65 20 73 74 72 69 6e 67 20 72 65 74 75  ^The string retu
1bed0 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73  rned by sqlite_s
1bee0 6f 75 72 63 65 5f 69 64 28 29 20 62 65 67 69 6e  ource_id() begin
1bef0 73 20 77 69 74 68 0a 20 20 74 68 65 20 64 61 74  s with.  the dat
1bf00 65 20 61 6e 64 20 74 69 6d 65 20 74 68 61 74 20  e and time that 
1bf10 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  the source code 
1bf20 77 61 73 20 63 68 65 63 6b 65 64 20 69 6e 20 61  was checked in a
1bf30 6e 64 20 69 73 20 66 6f 6c 6c 6f 77 73 20 62 79  nd is follows by
1bf40 0a 20 20 61 6e 20 53 48 41 31 20 68 61 73 68 20  .  an SHA1 hash 
1bf50 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64  that uniquely id
1bf60 65 6e 74 69 66 69 65 73 20 74 68 65 20 73 6f 75  entifies the sou
1bf70 72 63 65 20 74 72 65 65 2e 20 20 5e 54 68 69 73  rce tree.  ^This
1bf80 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a 20 20 61   function is.  a
1bf90 6e 20 53 51 4c 20 77 72 61 70 70 65 72 20 61 72  n SQL wrapper ar
1bfa0 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
1bfb0 33 5f 73 6f 75 72 63 65 69 64 28 29 5d 20 43 20  3_sourceid()] C 
1bfc0 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
1bfd0 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 76 65  ncdef {sqlite_ve
1bfe0 72 73 69 6f 6e 28 29 7d 20 7b 7d 20 7b 0a 20 20  rsion()} {} {.  
1bff0 5e 54 68 65 20 73 71 6c 69 74 65 5f 76 65 72 73  ^The sqlite_vers
1c000 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ion() function r
1c010 65 74 75 72 6e 73 20 74 68 65 20 76 65 72 73 69  eturns the versi
1c020 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  on string for th
1c030 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61  e SQLite.  libra
1c040 72 79 20 74 68 61 74 20 69 73 20 72 75 6e 6e 69  ry that is runni
1c050 6e 67 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74  ng.  ^This funct
1c060 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 0a 20 20  ion is an SQL.  
1c070 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
1c080 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 62 76  he [sqlite3_libv
1c090 65 72 73 69 6f 6e 28 29 5d 20 43 2d 69 6e 74 65  ersion()] C-inte
1c0a0 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  rface..}..funcde
1c0b0 66 20 7b 73 75 62 73 74 72 28 58 2c 59 2c 5a 29  f {substr(X,Y,Z)
1c0c0 20 73 75 62 73 74 72 28 58 2c 59 29 7d 20 7b 7d   substr(X,Y)} {}
1c0d0 20 7b 0a 20 20 5e 54 68 65 20 73 75 62 73 74 72   {.  ^The substr
1c0e0 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e  (X,Y,Z) function
1c0f0 20 72 65 74 75 72 6e 73 20 61 20 73 75 62 73 74   returns a subst
1c100 72 69 6e 67 20 6f 66 20 69 6e 70 75 74 20 73 74  ring of input st
1c110 72 69 6e 67 20 58 20 74 68 61 74 20 62 65 67 69  ring X that begi
1c120 6e 73 0a 20 20 77 69 74 68 20 74 68 65 20 59 2d  ns.  with the Y-
1c130 74 68 20 63 68 61 72 61 63 74 65 72 20 61 6e 64  th character and
1c140 20 77 68 69 63 68 20 69 73 20 5a 20 63 68 61 72   which is Z char
1c150 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a 20 20 5e  acters long..  ^
1c160 49 66 20 5a 20 69 73 20 6f 6d 69 74 74 65 64 20  If Z is omitted 
1c170 74 68 65 6e 20 73 75 62 73 74 72 28 58 2c 59 29  then substr(X,Y)
1c180 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 63 68 61   returns all cha
1c190 72 61 63 74 65 72 73 20 74 68 72 6f 75 67 68 20  racters through 
1c1a0 74 68 65 20 65 6e 64 0a 20 20 6f 66 20 74 68 65  the end.  of the
1c1b0 20 73 74 72 69 6e 67 20 58 20 62 65 67 69 6e 6e   string X beginn
1c1c0 69 6e 67 20 77 69 74 68 20 74 68 65 20 59 2d 74  ing with the Y-t
1c1d0 68 2e 0a 20 20 5e 54 68 65 20 6c 65 66 74 2d 6d  h..  ^The left-m
1c1e0 6f 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  ost character of
1c1f0 20 58 20 69 73 20 6e 75 6d 62 65 72 20 31 2e 20   X is number 1. 
1c200 20 5e 49 66 20 59 20 69 73 20 6e 65 67 61 74 69   ^If Y is negati
1c210 76 65 0a 20 20 74 68 65 6e 20 74 68 65 20 66 69  ve.  then the fi
1c220 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  rst character of
1c230 20 74 68 65 20 73 75 62 73 74 72 69 6e 67 20 69   the substring i
1c240 73 20 66 6f 75 6e 64 20 62 79 20 63 6f 75 6e 74  s found by count
1c250 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a 20 20 72  ing from the.  r
1c260 69 67 68 74 20 72 61 74 68 65 72 20 74 68 61 6e  ight rather than
1c270 20 74 68 65 20 6c 65 66 74 2e 20 20 5e 49 66 20   the left.  ^If 
1c280 5a 20 69 73 20 6e 65 67 61 74 69 76 65 20 74 68  Z is negative th
1c290 65 6e 0a 20 20 74 68 65 20 61 62 73 28 5a 29 20  en.  the abs(Z) 
1c2a0 63 68 61 72 61 63 74 65 72 73 20 70 72 65 63 65  characters prece
1c2b0 64 69 6e 67 20 74 68 65 20 59 2d 74 68 20 63 68  ding the Y-th ch
1c2c0 61 72 61 63 74 65 72 20 61 72 65 20 72 65 74 75  aracter are retu
1c2d0 72 6e 65 64 2e 0a 20 20 5e 49 66 20 58 20 69 73  rned..  ^If X is
1c2e0 20 61 20 73 74 72 69 6e 67 20 74 68 65 6e 20 63   a string then c
1c2f0 68 61 72 61 63 74 65 72 73 20 69 6e 64 69 63 65  haracters indice
1c300 73 20 72 65 66 65 72 20 74 6f 20 61 63 74 75 61  s refer to actua
1c310 6c 20 55 54 46 2d 38 20 0a 20 20 63 68 61 72 61  l UTF-8 .  chara
1c320 63 74 65 72 73 2e 20 20 5e 49 66 20 58 20 69 73  cters.  ^If X is
1c330 20 61 20 42 4c 4f 42 20 74 68 65 6e 20 74 68 65   a BLOB then the
1c340 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
1c350 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63  o bytes..}..func
1c360 64 65 66 20 7b 74 6f 74 61 6c 5f 63 68 61 6e 67  def {total_chang
1c370 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  es()} {} {.  ^Th
1c380 65 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  e total_changes(
1c390 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1c3a0 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
1c3b0 20 72 6f 77 20 63 68 61 6e 67 65 73 0a 20 20 63   row changes.  c
1c3c0 61 75 73 65 64 20 62 79 20 49 4e 53 45 52 54 2c  aused by INSERT,
1c3d0 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
1c3e0 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 20 73  E.  statements s
1c3f0 69 6e 63 65 20 74 68 65 20 63 75 72 72 65 6e 74  ince the current
1c400 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1c410 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64 2e  tion was opened.
1c420 0a 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f  .  ^This functio
1c430 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
1c440 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
1c450 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
1c460 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 69 6e 74 65  ()].  C/C++ inte
1c470 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  rface..}..funcde
1c480 66 20 7b 74 72 69 6d 28 58 29 20 74 72 69 6d 28  f {trim(X) trim(
1c490 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1c4a0 65 20 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63  e trim(X,Y) func
1c4b0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1c4c0 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
1c4d0 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
1c4e0 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
1c4f0 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
1c500 20 59 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64   Y from both end
1c510 73 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  s of X..  ^If th
1c520 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
1c530 6f 6d 69 74 74 65 64 2c 20 74 72 69 6d 28 58 29  omitted, trim(X)
1c540 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20   removes spaces 
1c550 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f  from both ends o
1c560 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
1c570 7b 74 79 70 65 6f 66 28 58 29 7d 20 7b 7d 20 7b  {typeof(X)} {} {
1c580 0a 20 20 5e 54 68 65 20 74 79 70 65 6f 66 28 58  .  ^The typeof(X
1c590 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1c5a0 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  ns a string that
1c5b0 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 5b   indicates the [
1c5c0 64 61 74 61 74 79 70 65 5d 20 6f 66 0a 20 20 74  datatype] of.  t
1c5d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 58 3a  he expression X:
1c5e0 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67 65   "null", "intege
1c5f0 72 22 2c 20 22 72 65 61 6c 22 2c 20 22 74 65 78  r", "real", "tex
1c600 74 22 2c 20 6f 72 20 22 62 6c 6f 62 22 2e 0a 7d  t", or "blob"..}
1c610 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 6c 69 6b  ..funcdef {unlik
1c620 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ely(X)} {} {.  ^
1c630 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  The unlikely(X) 
1c640 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1c650 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20   the argument X 
1c660 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 54 68  unchanged..  ^Th
1c670 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75  e unlikely(X) fu
1c680 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  nction is a no-o
1c690 70 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  p that the code 
1c6a0 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69  generator.  opti
1c6b0 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68  mizes away so th
1c6c0 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e  at it consumes n
1c6d0 6f 20 43 50 55 20 63 79 63 6c 65 73 20 61 74 0a  o CPU cycles at.
1c6e0 20 20 72 75 6e 2d 74 69 6d 65 20 28 74 68 61 74    run-time (that
1c6f0 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c   is, during call
1c700 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74  s to [sqlite3_st
1c710 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70  ep()])..  ^The p
1c720 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 75 6e  urpose of the un
1c730 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69  likely(X) functi
1c740 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65  on is to provide
1c750 20 61 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65   a hint.  to the
1c760 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74   query planner t
1c770 68 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  hat the argument
1c780 20 58 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20   X is a boolean 
1c790 76 61 6c 75 65 0a 20 20 74 68 61 74 20 69 73 20  value.  that is 
1c7a0 75 73 75 61 6c 6c 79 20 6e 6f 74 20 74 72 75 65  usually not true
1c7b0 2e 20 5e 28 54 68 65 20 75 6e 6c 69 6b 65 6c 79  . ^(The unlikely
1c7c0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
1c7d0 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20  equivalent.  to 
1c7e0 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 20  [likelihood](X, 
1c7f0 30 2e 30 36 32 35 29 2e 29 5e 0a 7d 0a 0a 66 75  0.0625).)^.}..fu
1c800 6e 63 64 65 66 20 7b 75 6e 69 63 6f 64 65 28 58  ncdef {unicode(X
1c810 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75  )} {} {.  ^The u
1c820 6e 69 63 6f 64 65 28 58 29 20 66 75 6e 63 74 69  nicode(X) functi
1c830 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  on returns the n
1c840 75 6d 65 72 69 63 20 75 6e 69 63 6f 64 65 20 63  umeric unicode c
1c850 6f 64 65 20 70 6f 69 6e 74 20 63 6f 72 72 65 73  ode point corres
1c860 70 6f 6e 64 69 6e 67 20 74 6f 0a 20 20 74 68 65  ponding to.  the
1c870 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72   first character
1c880 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
1c890 2e 20 20 49 66 20 74 68 65 20 61 72 67 75 6d 65  .  If the argume
1c8a0 6e 74 20 74 6f 20 75 6e 69 63 6f 64 65 28 58 29  nt to unicode(X)
1c8b0 20 69 73 20 6e 6f 74 20 61 20 73 74 72 69 6e 67   is not a string
1c8c0 0a 20 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  .  then the resu
1c8d0 6c 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  lt is undefined.
1c8e0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 70 70  .}..funcdef {upp
1c8f0 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  er(X)} {} {.  ^T
1c900 68 65 20 75 70 70 65 72 28 58 29 20 66 75 6e 63  he upper(X) func
1c910 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
1c920 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73 74 72  opy of input str
1c930 69 6e 67 20 58 20 69 6e 20 77 68 69 63 68 20 61  ing X in which a
1c940 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d 63 61 73 65  ll .  lower-case
1c950 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
1c960 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20  s are converted 
1c970 74 6f 20 74 68 65 69 72 20 75 70 70 65 72 2d 63  to their upper-c
1c980 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74 2e 0a  ase equivalent..
1c990 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72 6f  }..funcdef {zero
1c9a0 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20  blob(N)} {} {.  
1c9b0 5e 54 68 65 20 7a 65 72 6f 62 6c 6f 62 28 4e 29  ^The zeroblob(N)
1c9c0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1c9d0 73 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74  s a BLOB consist
1c9e0 69 6e 67 20 6f 66 20 4e 20 62 79 74 65 73 20 6f  ing of N bytes o
1c9f0 66 20 30 78 30 30 2e 0a 20 20 53 51 4c 69 74 65  f 0x00..  SQLite
1ca00 20 6d 61 6e 61 67 65 73 20 74 68 65 73 65 20 7a   manages these z
1ca10 65 72 6f 62 6c 6f 62 73 20 76 65 72 79 20 65 66  eroblobs very ef
1ca20 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a 65 72 6f  ficiently.  Zero
1ca30 62 6c 6f 62 73 20 63 61 6e 20 62 65 20 75 73 65  blobs can be use
1ca40 64 20 74 6f 0a 20 20 72 65 73 65 72 76 65 20 73  d to.  reserve s
1ca50 70 61 63 65 20 66 6f 72 20 61 20 42 4c 4f 42 20  pace for a BLOB 
1ca60 74 68 61 74 20 69 73 20 6c 61 74 65 72 20 77 72  that is later wr
1ca70 69 74 74 65 6e 20 75 73 69 6e 67 20 0a 20 20 5b  itten using .  [
1ca80 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f 70 65  sqlite3_blob_ope
1ca90 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65 6e 74 61  n() | incrementa
1caa0 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20 20 5e  l BLOB I/O]..  ^
1cab0 54 68 69 73 20 53 51 4c 20 66 75 6e 63 74 69 6f  This SQL functio
1cac0 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  n is implemented
1cad0 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69   using the [sqli
1cae0 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62  te3_result_zerob
1caf0 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74 69 6e 65  lob()].  routine
1cb00 20 66 72 6f 6d 20 74 68 65 20 43 2f 43 2b 2b 20   from the C/C++ 
1cb10 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 3c 2f 74  interface..}.</t
1cb20 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74  cl>.</table>..<t
1cb30 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1cb40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb80 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74 65  ##.Section {Date
1cb90 20 41 6e 64 20 54 69 6d 65 20 46 75 6e 63 74 69   And Time Functi
1cba0 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 7b 2a  ons} datefunc {*
1cbb0 64 61 74 65 66 75 6e 63 20 7b 64 61 74 65 20 61  datefunc {date a
1cbc0 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1cbd0 73 7d 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  s}}.hd_keywords 
1cbe0 7b 64 61 74 65 28 29 20 53 51 4c 20 66 75 6e 63  {date() SQL func
1cbf0 74 69 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51  tion} {time() SQ
1cc00 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b  L function}.hd_k
1cc10 65 79 77 6f 72 64 73 20 7b 64 61 74 65 74 69 6d  eywords {datetim
1cc20 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
1cc30 7d 20 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20 53  } {julianday() S
1cc40 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f  QL function}.hd_
1cc50 6b 65 79 77 6f 72 64 73 20 7b 73 74 72 66 74 69  keywords {strfti
1cc60 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  me() SQL functio
1cc70 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53  n}.</tcl>..<p>.S
1cc80 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 66  QLite supports f
1cc90 69 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ive date and tim
1cca0 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 20 66  e functions as f
1ccb0 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70  ollows:.</p>..<p
1ccc0 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62  >.<ol>.<li> ^(<b
1ccd0 3e 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d  >date(</b><i>tim
1cce0 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
1ccf0 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
1cd00 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
1cd10 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74  /li>.<li> ^(<b>t
1cd20 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  ime(</b><i>times
1cd30 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
1cd40 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
1cd50 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
1cd60 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74  i>.<li> ^(<b>dat
1cd70 65 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d  etime(</b><i>tim
1cd80 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
1cd90 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
1cda0 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
1cdb0 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a  /li>.<li> ^(<b>j
1cdc0 75 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e  ulianday(</b><i>
1cdd0 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
1cde0 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
1cdf0 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
1ce00 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c  ^ </li>.<li> ^(<
1ce10 62 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c  b>strftime(</b><
1ce20 69 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74  i>format, timest
1ce30 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1ce40 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1ce50 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1ce60 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c  >.</ol>..<p>.^Al
1ce70 6c 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20  l five date and 
1ce80 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74  time functions t
1ce90 61 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e  ake a time strin
1cea0 67 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74  g as an argument
1ceb0 2e 20 0a 5e 54 68 65 20 74 69 6d 65 20 73 74 72  . .^The time str
1cec0 69 6e 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ing is followed 
1ced0 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  by zero or more 
1cee0 6d 6f 64 69 66 69 65 72 73 2e 20 0a 5e 54 68 65  modifiers. .^The
1cef0 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63   strftime() func
1cf00 74 69 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20  tion also takes 
1cf10 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  a format string 
1cf20 61 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67  as its first arg
1cf30 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ument..</p>..<p>
1cf40 0a 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69  .The date and ti
1cf50 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65  me functions use
1cf60 20 61 20 73 75 62 73 65 74 20 6f 66 0a 5b 68 74   a subset of.[ht
1cf70 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1cf80 61 2e 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38  a.org/wiki/ISO_8
1cf90 36 30 31 20 7c 20 49 53 30 2d 38 36 30 31 5d 20  601 | IS0-8601] 
1cfa0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f  date and time.fo
1cfb0 72 6d 61 74 73 2e 0a 5e 54 68 65 20 64 61 74 65  rmats..^The date
1cfc0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1cfd0 72 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20  rns the date in 
1cfe0 74 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59  this format: YYY
1cff0 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74  Y-MM-DD. .^The t
1d000 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ime() function r
1d010 65 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20  eturns the time 
1d020 61 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54  as HH:MM:SS. .^T
1d030 68 65 20 64 61 74 65 74 69 6d 65 28 29 20 66 75  he datetime() fu
1d040 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22  nction returns "
1d050 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
1d060 3a 53 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c  :SS". .^(The jul
1d070 69 61 6e 64 61 79 28 29 20 66 75 6e 63 74 69 6f  ianday() functio
1d080 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 0a 5b  n returns the .[
1d090 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1d0a0 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c  dia.org/wiki/Jul
1d0b0 69 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e  ian_day | Julian
1d0c0 20 64 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62   day] - the.numb
1d0d0 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65  er of days since
1d0e0 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69   noon in Greenwi
1d0f0 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32  ch on November 2
1d100 34 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b  4, 4714 B.C. .([
1d110 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1d120 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f  dia.org/wiki/Pro
1d130 6c 65 70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e  leptic_Gregorian
1d140 5f 63 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c  _calendar | Prol
1d150 65 70 74 69 63 20 47 72 65 67 6f 72 69 61 6e 20  eptic Gregorian 
1d160 63 61 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54  calendar]).)^.^T
1d170 68 65 20 73 74 72 66 74 69 6d 65 28 29 20 72 6f  he strftime() ro
1d180 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68  utine returns th
1d190 65 20 64 61 74 65 20 66 6f 72 6d 61 74 74 65 64  e date formatted
1d1a0 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74   according to .t
1d1b0 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
1d1c0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
1d1d0 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
1d1e0 2e 0a 5e 54 68 65 20 66 6f 72 6d 61 74 20 73 74  ..^The format st
1d1f0 72 69 6e 67 20 73 75 70 70 6f 72 74 73 20 74 68  ring supports th
1d200 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75  e most common su
1d210 62 73 74 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e  bstitutions foun
1d220 64 20 69 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a  d in the .[http:
1d230 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f  //opengroup.org/
1d240 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30  onlinepubs/00790
1d250 38 37 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d  8799/xsh/strftim
1d260 65 2e 68 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d  e.html | strftim
1d270 65 28 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72  e() function].fr
1d280 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  om the standard 
1d290 43 20 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74  C library plus t
1d2a0 77 6f 20 6e 65 77 20 73 75 62 73 74 69 74 75 74  wo new substitut
1d2b0 69 6f 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e  ions, %f and %J.
1d2c0 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .^(The following
1d2d0 20 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c   is a complete l
1d2e0 69 73 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72  ist of valid str
1d2f0 66 74 69 6d 65 28 29 20 73 75 62 73 74 69 74 75  ftime() substitu
1d300 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  tions:.</p>..<bl
1d310 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
1d320 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
1d330 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
1d340 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
1d350 3e 3c 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  ><td><td width="
1d360 31 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  10"><td></tr>..<
1d370 74 72 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c  tr><td> %d <td><
1d380 74 64 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68  td> day of month
1d390 3a 20 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66  : 00.<tr><td> %f
1d3a0 20 3c 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69   <td><td> fracti
1d3b0 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53  onal seconds: SS
1d3c0 2e 53 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48  .SSS.<tr><td> %H
1d3d0 20 3c 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20   <td><td> hour: 
1d3e0 30 30 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20  00-24 .<tr><td> 
1d3f0 25 6a 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %j <td><td> day 
1d400 6f 66 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36  of year: 001-366
1d410 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64  .<tr><td> %J <td
1d420 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79  ><td> Julian day
1d430 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e   number.<tr><td>
1d440 20 25 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e   %m <td><td> mon
1d450 74 68 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74  th: 01-12.<tr><t
1d460 64 3e 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d  d> %M <td><td> m
1d470 69 6e 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72  inute: 00-59.<tr
1d480 3e 3c 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64  ><td> %s <td><td
1d490 3e 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  > seconds since 
1d4a0 31 39 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c  1970-01-01.<tr><
1d4b0 74 64 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20  td> %S <td><td> 
1d4c0 73 65 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c  seconds: 00-59.<
1d4d0 74 72 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c  tr><td> %w <td><
1d4e0 74 64 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20  td> day of week 
1d4f0 30 2d 36 20 77 69 74 68 20 53 75 6e 64 61 79 3d  0-6 with Sunday=
1d500 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c  =0.<tr><td> %W <
1d510 74 64 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20  td><td> week of 
1d520 79 65 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e  year: 00-53.<tr>
1d530 3c 74 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e  <td> %Y <td><td>
1d540 20 79 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39   year: 0000-9999
1d550 0a 3c 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64  .<tr><td> %% <td
1d560 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e  ><td> %.</table>
1d570 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1d580 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74  ..<p>.^(Notice t
1d590 68 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61  hat all other da
1d5a0 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1d5b0 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70  tions can be exp
1d5c0 72 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20  ressed.in terms 
1d5d0 6f 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c  of strftime():.<
1d5e0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1d5f0 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
1d600 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "0" cellpadding=
1d610 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  "0" cellspacing=
1d620 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e  "0">.<tr><td><b>
1d630 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20  Function</b><td 
1d640 77 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c  width="30"><td><
1d650 62 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72  b>Equivalent str
1d660 66 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e  ftime()</b>.<tr>
1d670 3c 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29  <td>   date(...)
1d680 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20        <td><td>  
1d690 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d  strftime('%Y-%m-
1d6a0 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74  %d', ...).<tr><t
1d6b0 64 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20  d>   time(...)  
1d6c0 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74      <td><td>  st
1d6d0 72 66 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53  rftime('%H:%M:%S
1d6e0 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e  ', ...).<tr><td>
1d6f0 20 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29     datetime(...)
1d700 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66    <td><td>  strf
1d710 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25  time('%Y-%m-%d %
1d720 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c  H:%M:%S', ...).<
1d730 74 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e  tr><td>   julian
1d740 64 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64  day(...) <td><td
1d750 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27  >  strftime('%J'
1d760 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a  , ...).</table>.
1d770 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1d780 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65  .<p>.The only re
1d790 61 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64  asons for provid
1d7a0 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74  ing functions ot
1d7b0 68 65 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d  her than strftim
1d7c0 65 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65  e() is.for conve
1d7d0 6e 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65  nience and for e
1d7e0 66 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a  fficiency..</p>.
1d7f0 0a 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67  .<h3>Time String
1d800 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74  s</h3>..<p>^(A t
1d810 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  ime string can b
1d820 65 20 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 20  e in any of the 
1d830 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74  following format
1d840 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
1d850 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1d860 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1d870 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e  -MM-DD HH:MM</i>
1d880 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1d890 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e  -DD HH:MM:SS</i>
1d8a0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1d8b0 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53  -DD HH:MM:SS.SSS
1d8c0 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
1d8d0 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c  Y-MM-DD</i><b>T<
1d8e0 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a  /b><i>HH:MM</i>.
1d8f0 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1d900 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69  DD</i><b>T</b><i
1d910 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c  >HH:MM:SS</i>.<l
1d920 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1d930 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48  </i><b>T</b><i>H
1d940 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
1d950 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69  <li> <i>HH:MM</i
1d960 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a  >.<li> <i>HH:MM:
1d970 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48  SS</i>.<li> <i>H
1d980 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
1d990 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a  <li> <b>now</b>.
1d9a0 3c 6c 69 3e 20 3c 69 3e 44 44 44 44 44 44 44 44  <li> <i>DDDDDDDD
1d9b0 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a  DD</i>.</ol>)^..
1d9c0 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20  <p>.^In formats 
1d9d0 35 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65  5 through 7, the
1d9e0 20 22 54 22 20 69 73 20 61 20 6c 69 74 65 72 61   "T" is a litera
1d9f0 6c 20 63 68 61 72 61 63 74 65 72 20 73 65 70 61  l character sepa
1da00 72 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65  rating .the date
1da10 20 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61   and the time, a
1da20 73 20 72 65 71 75 69 72 65 64 20 62 79 20 0a 5b  s required by .[
1da30 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f  http://www.w3c.o
1da40 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74  rg/TR/NOTE-datet
1da50 69 6d 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e  ime | ISO-8601].
1da60 20 0a 5e 46 6f 72 6d 61 74 73 20 38 20 74 68 72   .^Formats 8 thr
1da70 6f 75 67 68 20 31 30 20 74 68 61 74 20 73 70 65  ough 10 that spe
1da80 63 69 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65  cify only a time
1da90 20 61 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f   assume a date o
1daa0 66 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46  f .2000-01-01. F
1dab0 6f 72 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74  ormat 11, the st
1dac0 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63  ring 'now', is c
1dad0 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68  onverted into th
1dae0 65 20 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20  e .current date 
1daf0 61 6e 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61  and time as obta
1db00 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43  ined from the xC
1db10 75 72 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f  urrentTime metho
1db20 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65  d.of the [sqlite
1db30 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e  3_vfs] object in
1db40 20 75 73 65 2e 0a 5e 54 68 65 20 27 6e 6f 77 27   use..^The 'now'
1db50 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 64 61 74   argument to dat
1db60 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1db70 69 6f 6e 73 20 61 6c 77 61 79 73 20 72 65 74 75  ions always retu
1db80 72 6e 73 20 65 78 61 63 74 6c 79 20 74 68 65 0a  rns exactly the.
1db90 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 6d  same value for m
1dba0 75 6c 74 69 70 6c 65 20 69 6e 76 6f 63 61 74 69  ultiple invocati
1dbb0 6f 6e 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  ons within the s
1dbc0 61 6d 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 65  ame [sqlite3_ste
1dbd0 70 28 29 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74 74  p()] call..^[htt
1dbe0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1dbf0 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69  .org/wiki/Coordi
1dc00 6e 61 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f  nated_Universal_
1dc10 54 69 6d 65 20 7c 20 55 6e 69 76 65 72 73 61 6c  Time | Universal
1dc20 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d   Coordinated Tim
1dc30 65 20 28 55 54 43 29 5d 20 69 73 20 75 73 65 64  e (UTC)] is used
1dc40 2e 20 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69 73  . .^Format 12 is
1dc50 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e   the .[http://en
1dc60 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1dc70 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c  iki/Julian_day |
1dc80 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
1dc90 65 72 5d 0a 65 78 70 72 65 73 73 65 64 20 61 73  er].expressed as
1dca0 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
1dcb0 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c  t value..</p>..<
1dcc0 70 3e 0a 46 6f 72 6d 61 74 73 20 32 20 74 68 72  p>.Formats 2 thr
1dcd0 6f 75 67 68 20 31 30 20 6d 61 79 20 62 65 20 6f  ough 10 may be o
1dce0 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
1dcf0 65 64 20 62 79 20 61 20 74 69 6d 65 7a 6f 6e 65  ed by a timezone
1dd00 20 69 6e 64 69 63 61 74 6f 72 20 6f 66 20 74 68   indicator of th
1dd10 65 20 66 6f 72 6d 0a 22 3c 69 3e 26 23 39 31 3b  e form."<i>&#91;
1dd20 2b 2d 26 23 39 33 3b 48 48 3a 4d 4d 3c 2f 69 3e  +-&#93;HH:MM</i>
1dd30 22 20 6f 72 20 6a 75 73 74 20 22 3c 69 3e 5a 3c  " or just "<i>Z<
1dd40 2f 69 3e 22 2e 20 20 54 68 65 20 64 61 74 65 20  /i>".  The date 
1dd50 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1dd60 6e 73 20 75 73 65 20 55 54 43 20 6f 72 20 22 7a  ns use UTC or "z
1dd70 75 6c 75 22 0a 74 69 6d 65 20 69 6e 74 65 72 6e  ulu".time intern
1dd80 61 6c 6c 79 2c 20 61 6e 64 20 73 6f 20 74 68 65  ally, and so the
1dd90 20 22 5a 22 20 73 75 66 66 69 78 20 69 73 20 61   "Z" suffix is a
1dda0 20 6e 6f 2d 6f 70 2e 20 20 41 6e 79 20 6e 6f 6e   no-op.  Any non
1ddb0 2d 7a 65 72 6f 20 22 48 48 3a 4d 4d 22 20 73 75  -zero "HH:MM" su
1ddc0 66 66 69 78 20 69 73 0a 73 75 62 74 72 61 63 74  ffix is.subtract
1ddd0 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 69  ed from the indi
1dde0 63 61 74 65 64 20 64 61 74 65 20 61 6e 64 20 74  cated date and t
1ddf0 69 6d 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ime in order to 
1de00 63 6f 6d 70 75 74 65 20 7a 75 6c 75 20 74 69 6d  compute zulu tim
1de10 65 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e..For example, 
1de20 61 6c 6c 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  all of the follo
1de30 77 69 6e 67 20 74 69 6d 65 20 73 74 72 69 6e 67  wing time string
1de40 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74  s are equivalent
1de50 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
1de60 6f 74 65 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20  ote>.2013-10-07 
1de70 30 38 3a 32 33 3a 31 39 2e 31 32 30 3c 62 72 3e  08:23:19.120<br>
1de80 0a 32 30 31 33 2d 31 30 2d 30 37 54 30 38 3a 32  .2013-10-07T08:2
1de90 33 3a 31 39 2e 31 32 30 5a 3c 62 72 3e 0a 32 30  3:19.120Z<br>.20
1dea0 31 33 2d 31 30 2d 30 37 20 30 34 3a 32 33 3a 31  13-10-07 04:23:1
1deb0 39 2e 31 32 30 2d 30 34 3a 30 30 3c 62 72 3e 0a  9.120-04:00<br>.
1dec0 32 34 35 36 35 37 32 2e 38 34 39 35 32 36 38 35  2456572.84952685
1ded0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
1dee0 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61 74 73  <p>.^(In formats
1def0 20 34 2c 20 37 2c 20 61 6e 64 20 31 30 2c 20 74   4, 7, and 10, t
1df00 68 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65  he fractional se
1df10 63 6f 6e 64 73 20 76 61 6c 75 65 20 53 53 2e 53  conds value SS.S
1df20 53 53 20 63 61 6e 20 68 61 76 65 0a 6f 6e 65 20  SS can have.one 
1df30 6f 72 20 6d 6f 72 65 20 64 69 67 69 74 73 20 66  or more digits f
1df40 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 65 63  ollowing the dec
1df50 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 45 78 61  imal point.  Exa
1df60 63 74 6c 79 20 74 68 72 65 65 20 64 69 67 69 74  ctly three digit
1df70 73 20 61 72 65 0a 73 68 6f 77 6e 20 69 6e 20 74  s are.shown in t
1df80 68 65 20 65 78 61 6d 70 6c 65 73 20 62 65 63 61  he examples beca
1df90 75 73 65 20 6f 6e 6c 79 20 74 68 65 20 66 69 72  use only the fir
1dfa0 73 74 20 74 68 72 65 65 20 64 69 67 69 74 73 20  st three digits 
1dfb0 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 0a  are significant.
1dfc0 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2c 20 62  to the result, b
1dfd0 75 74 20 74 68 65 20 69 6e 70 75 74 20 73 74 72  ut the input str
1dfe0 69 6e 67 20 63 61 6e 20 68 61 76 65 20 66 65 77  ing can have few
1dff0 65 72 20 6f 72 20 6d 6f 72 65 20 74 68 61 6e 20  er or more than 
1e000 74 68 72 65 65 20 64 69 67 69 74 73 0a 61 6e 64  three digits.and
1e010 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65 20 66   the date/time f
1e020 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 74  unctions will st
1e030 69 6c 6c 20 6f 70 65 72 61 74 65 20 63 6f 72 72  ill operate corr
1e040 65 63 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61 72  ectly.)^.Similar
1e050 6c 79 2c 20 66 6f 72 6d 61 74 20 31 32 20 69 73  ly, format 12 is
1e060 20 73 68 6f 77 6e 20 77 69 74 68 20 31 30 20 73   shown with 10 s
1e070 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74  ignificant digit
1e080 73 2c 20 62 75 74 20 74 68 65 20 64 61 74 65 2f  s, but the date/
1e090 74 69 6d 65 0a 66 75 6e 63 74 69 6f 6e 73 20 77  time.functions w
1e0a0 69 6c 6c 20 72 65 61 6c 6c 79 20 61 63 63 65 70  ill really accep
1e0b0 74 20 61 73 20 6d 61 6e 79 20 6f 72 20 61 73 20  t as many or as 
1e0c0 66 65 77 20 64 69 67 69 74 73 20 61 73 20 61 72  few digits as ar
1e0d0 65 20 6e 65 63 65 73 73 61 72 79 20 74 6f 0a 72  e necessary to.r
1e0e0 65 70 72 65 73 65 6e 74 20 74 68 65 20 4a 75 6c  epresent the Jul
1e0f0 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 2e 0a  ian day number..
1e100 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69  </p>..<h3>Modifi
1e110 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ers</h3>..<p>^Th
1e120 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61  e time string ca
1e130 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  n be followed by
1e140 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f   zero or more mo
1e150 64 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c  difiers that .al
1e160 74 65 72 20 64 61 74 65 20 61 6e 64 2f 6f 72 20  ter date and/or 
1e170 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64 69  time. ^Each modi
1e180 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66  fier.is a transf
1e190 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
1e1a0 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20   applied to the 
1e1b0 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69 74  time value to it
1e1c0 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65  s left..^Modifie
1e1d0 72 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 66  rs are applied f
1e1e0 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
1e1f0 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f  t; order is impo
1e200 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61  rtant..^(The ava
1e210 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73  ilable modifiers
1e220 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e   are as follows.
1e230 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  </p>..<ol>.<li> 
1e240 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e  NNN days.<li> NN
1e250 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e  N hours.<li> NNN
1e260 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e   minutes.<li> NN
1e270 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c  N.NNNN seconds.<
1e280 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c  li> NNN months.<
1e290 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c  li> NNN years.<l
1e2a0 69 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74  i> start of mont
1e2b0 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20  h.<li> start of 
1e2c0 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20  year.<li> start 
1e2d0 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b  of day.<li> week
1e2e0 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65  day N.<li> unixe
1e2f0 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74  poch.<li> localt
1e300 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f  ime.<li> utc .</
1e310 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66  ol>)^..<p>^The f
1e320 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69 65  irst six modifie
1e330 72 73 20 28 31 20 74 68 72 6f 75 67 68 20 36 29  rs (1 through 6)
1e340 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68 65   .simply add the
1e350 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75 6e   specified amoun
1e360 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68 65  t of time to the
1e370 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 0a   date and time .
1e380 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
1e390 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73   preceding times
1e3a0 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69  tring and modifi
1e3b0 65 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20  ers..^Note that 
1e3c0 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e  "&plusmn;NNN mon
1e3d0 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65  ths" works by re
1e3e0 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67  ndering the orig
1e3f0 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74  inal date into.t
1e400 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f  he YYYY-MM-DD fo
1e410 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65  rmat, adding the
1e420 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20   &plusmn;NNN to 
1e430 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c  the MM month val
1e440 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69  ue, then.normali
1e450 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e  zing the result.
1e460 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78 61    ^Thus, for exa
1e470 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32  mple, the data 2
1e480 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69  001-03-31 modifi
1e490 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27  ed.by '+1 month'
1e4a0 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64   initially yield
1e4b0 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75  s 2001-04-31, bu
1e4c0 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73  t April only has
1e4d0 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20   30 days.so the 
1e4e0 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a  date is normaliz
1e4f0 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31  ed to 2001-05-01
1e500 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65 66  .  ^A similar ef
1e510 66 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e  fect occurs when
1e520 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61  .the original da
1e530 74 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32  te is February 2
1e540 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20  9 of a leapyear 
1e550 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72  and the modifier
1e560 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65   is.&plusmn;N ye
1e570 61 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e  ars where N is n
1e580 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66  ot a multiple of
1e590 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   four.</p>..<p>^
1e5a0 54 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d  The "start of" m
1e5b0 6f 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f  odifiers (7 thro
1e5c0 75 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65  ugh 9) shift the
1e5d0 20 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20   date backwards 
1e5e0 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  .to the beginnin
1e5f0 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  g of the current
1e600 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20   month, year or 
1e610 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  day.</p>..<p>^Th
1e620 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69  e "weekday" modi
1e630 66 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68  fier advances th
1e640 65 20 64 61 74 65 20 66 6f 72 77 61 72 64 20 74  e date forward t
1e650 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20  o the next date 
1e660 0a 77 68 65 72 65 20 74 68 65 20 77 65 65 6b 64  .where the weekd
1e670 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20  ay number is N. 
1e680 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e  Sunday is 0, Mon
1e690 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f  day is 1, and so
1e6a0 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e   forth.</p>..<p>
1e6b0 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22  ^The "unixepoch"
1e6c0 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f   modifier (11) o
1e6d0 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20  nly works if it 
1e6e0 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
1e6f0 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e  ows .a timestrin
1e700 67 20 69 6e 20 74 68 65 20 44 44 44 44 44 44 44  g in the DDDDDDD
1e710 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68  DDD format. .^Th
1e720 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73  is modifier caus
1e730 65 73 20 74 68 65 20 44 44 44 44 44 44 44 44 44  es the DDDDDDDDD
1e740 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65  D to be interpre
1e750 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75  ted not .as a Ju
1e760 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20  lian day number 
1e770 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77  as it normally w
1e780 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a  ould be, but as.
1e790 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1e7a0 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e  edia.org/wiki/Un
1e7b0 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54  ix_time | Unix T
1e7c0 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62  ime] - the .numb
1e7d0 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
1e7e0 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20 74 68  nce 1970.  If th
1e7f0 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
1e800 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a  difier does not.
1e810 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72  follow a timestr
1e820 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ing of the form 
1e830 44 44 44 44 44 44 44 44 44 44 20 77 68 69 63 68  DDDDDDDDDD which
1e840 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6e   expresses the n
1e850 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73  umber.of seconds
1e860 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69   since 1970 or i
1e870 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72  f other modifier
1e880 73 0a 73 65 70 61 72 61 74 65 20 74 68 65 20 22  s.separate the "
1e890 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
1e8a0 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44  ier from prior D
1e8b0 44 44 44 44 44 44 44 44 44 20 74 68 65 6e 20 74  DDDDDDDDD then t
1e8c0 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75  he.behavior is u
1e8d0 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74 6f  ndefined..Due to
1e8e0 20 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69 74   precision limit
1e8f0 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20 62  ations imposed b
1e900 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
1e910 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34 2d  tions use.of 64-
1e920 62 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74 68  bit integers, th
1e930 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
1e940 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b  difier only work
1e950 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77  s for.dates betw
1e960 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30  een 0000-01-01 0
1e970 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32  0:00:00 and 5352
1e980 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20  -11-01 10:52:47 
1e990 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d  (unix times.of -
1e9a0 36 32 31 36 37 32 31 39 32 30 30 20 74 68 72 6f  62167219200 thro
1e9b0 75 67 68 20 31 30 36 37 35 31 39 39 31 36 37 29  ugh 10675199167)
1e9c0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
1e9d0 72 61 67 6d 65 6e 74 20 6c 6f 63 61 6c 74 69 6d  ragment localtim
1e9e0 65 20 7b 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f 64  e {localtime mod
1e9f0 69 66 69 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  ifier}</tcl>.<p>
1ea00 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22  ^The "localtime"
1ea10 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20 61   modifier (12) a
1ea20 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65 20  ssumes the time 
1ea30 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c 65  string to its le
1ea40 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72 73  ft is in.Univers
1ea50 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54  al Coordinated T
1ea60 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61 64  ime (UTC) and ad
1ea70 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a 73  justs the time.s
1ea80 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69 74  tring so that it
1ea90 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c 74   displays localt
1eaa0 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c 74  ime.  If "localt
1eab0 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20 74  ime".follows a t
1eac0 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ime that is not 
1ead0 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62 65  UTC, then the be
1eae0 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
1eaf0 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74 63 22  ned..^(The "utc"
1eb00 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69 74 65   is the opposite
1eb10 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 2e   of "localtime".
1eb20 20 20 22 75 74 63 22 20 61 73 73 75 6d 65 73 20    "utc" assumes 
1eb30 74 68 61 74 20 74 68 65 20 73 74 72 69 6e 67 0a  that the string.
1eb40 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69  to its left is i
1eb50 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69 6d 65  n the local time
1eb60 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73 74 73  zone and adjusts
1eb70 20 74 68 61 74 20 73 74 72 69 6e 67 20 74 6f 20   that string to 
1eb80 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49 66 20  be in UTC.)^.If 
1eb90 74 68 65 20 70 72 69 6f 72 20 73 74 72 69 6e 67  the prior string
1eba0 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c   is not in local
1ebb0 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 72  time, then the r
1ebc0 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22 20 69  esult of "utc" i
1ebd0 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e  s.undefined.</p>
1ebe0 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f  ..<h3>Examples</
1ebf0 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  h3>..^(<p>Comput
1ec00 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61  e the current da
1ec10 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  te.<p>..<blockqu
1ec20 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28  ote>SELECT date(
1ec30 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75  'now');</blockqu
1ec40 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1ec50 70 75 74 65 20 74 68 65 20 6c 61 73 74 20 64 61  pute the last da
1ec60 79 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  y of the current
1ec70 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c   month.</p>..<bl
1ec80 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20  ockquote>SELECT 
1ec90 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61 72  date('now','star
1eca0 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b 31 20  t of month','+1 
1ecb0 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79 27 29  month','-1 day')
1ecc0 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1ecd0 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1ece0 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
1ecf0 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74  e given a unix t
1ed00 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31  imestamp 1092941
1ed10 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  466.</p>..<block
1ed20 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45 43  quote>.    SELEC
1ed30 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39  T datetime(10929
1ed40 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63  41466, 'unixepoc
1ed50 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  h');.</blockquot
1ed60 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
1ed70 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  te the date and 
1ed80 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69  time given a uni
1ed90 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32  x timestamp 1092
1eda0 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63 6f 6d  941466, and .com
1edb0 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f 75 72  pensate for your
1edc0 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e   local timezone.
1edd0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1ede0 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65  e>.  SELECT date
1edf0 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c  time(1092941466,
1ee00 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20 27 6c   'unixepoch', 'l
1ee10 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c  ocaltime');.</bl
1ee20 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1ee30 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75  p>Compute the cu
1ee40 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d 65 73  rrent unix times
1ee50 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  tamp.</p>..<bloc
1ee60 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1ee70 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
1ee80 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  now');.</blockqu
1ee90 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1eea0 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  pute the number 
1eeb0 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 74 68  of days since th
1eec0 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74 68 65  e signing of the
1eed0 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f 6e 0a   US Declaration.
1eee0 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 63 65 2e  of Independence.
1eef0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1ef00 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75 6c 69  e>.  SELECT juli
1ef10 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 6a  anday('now') - j
1ef20 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36 2d 30  ulianday('1776-0
1ef30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  7-04');.</blockq
1ef40 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
1ef50 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
1ef60 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63   of seconds sinc
1ef70 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 6d  e a particular m
1ef80 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c 2f  oment in 2004:</
1ef90 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1efa0 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
1efb0 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 2d  me('%s','now') -
1efc0 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
1efd0 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33 34  2004-01-01 02:34
1efe0 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  :56');.</blockqu
1eff0 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f  ote>)^..^(<p>.Co
1f000 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 6f  mpute the date o
1f010 66 20 74 68 65 20 66 69 72 73 74 20 54 75 65 73  f the first Tues
1f020 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72 0a 66  day in October.f
1f030 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 79  or the current y
1f040 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ear..</p>..<bloc
1f050 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1f060 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61   date('now','sta
1f070 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b 39 20  rt of year','+9 
1f080 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64 61 79  months','weekday
1f090 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f   2');.</blockquo
1f0a0 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
1f0b0 75 74 65 20 74 68 65 20 74 69 6d 65 20 73 69 6e  ute the time sin
1f0c0 63 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f 63  ce the unix epoc
1f0d0 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28 6c  h in seconds .(l
1f0e0 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25 73  ike strftime('%s
1f0f0 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74 20  ','now') except 
1f100 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69 6f  includes fractio
1f110 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a  nal part):</p>..
1f120 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1f130 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61 79  ELECT (julianday
1f140 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35 38  ('now') - 244058
1f150 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f  7.5)*86400.0;.</
1f160 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
1f170 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64 20 42  h3>Caveats And B
1f180 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ugs</h3>..<p>The
1f190 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20   computation of 
1f1a0 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70 65 6e  local time depen
1f1b0 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20 74 68  ds heavily on th
1f1c0 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69 74  e whim .of polit
1f1d0 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20 74 68  icians and is th
1f1e0 75 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20  us difficult to 
1f1f0 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f 72 20  get correct for 
1f200 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 5e 49  .all locales. ^I
1f210 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74  n this implement
1f220 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61 6e 64  ation, the stand
1f230 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 0a 66  ard C library .f
1f240 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d  unction localtim
1f250 65 5f 72 28 29 20 69 73 20 75 73 65 64 20 74 6f  e_r() is used to
1f260 20 61 73 73 69 73 74 20 69 6e 20 74 68 65 20 63   assist in the c
1f270 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c  alculation of .l
1f280 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28 54 68  ocal time.  ^(Th
1f290 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29  e .localtime_r()
1f2a0 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d   C function norm
1f2b0 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ally only works 
1f2c0 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77 65 65  for years.betwee
1f2d0 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33 37 2e  n 1970 and 2037.
1f2e0 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73 69   For dates outsi
1f2f0 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c 20 53  de this range, S
1f300 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74 73 20  QLite .attempts 
1f310 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61 72 20  to map the year 
1f320 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61 6c 65  into an equivale
1f330 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e 20 0a  nt year within .
1f340 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f 20 74  this range, do t
1f350 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20  he calculation, 
1f360 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79 65 61  then map the yea
1f370 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a  r back.)^</p>...
1f380 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e 63 74  <p>^(These funct
1f390 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
1f3a0 6f 72 20 64 61 74 65 73 20 62 65 74 77 65 65 6e  or dates between
1f3b0 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30   0000-01-01 00:0
1f3c0 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d 31 32  0:00.and 9999-12
1f3d0 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28 6a 75  -31 23:59:59 (ju
1f3e0 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  lidan day number
1f3f0 73 20 31 37 32 31 30 35 39 2e 35 20 74 68 72 6f  s 1721059.5 thro
1f400 75 67 68 20 35 33 37 33 34 38 34 2e 35 29 2e 29  ugh 5373484.5).)
1f410 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73  ^.For dates outs
1f420 69 64 65 20 74 68 61 74 20 72 61 6e 67 65 2c 20  ide that range, 
1f430 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
1f440 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73 20 61  hese.functions a
1f450 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70  re undefined.</p
1f460 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61 20  >..<p>Non-Vista 
1f470 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d  Windows platform
1f480 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f  s only support o
1f490 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20 72 75  ne set of DST ru
1f4a0 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e 6c 79  les. .Vista only
1f4b0 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e 20 54   supports two. T
1f4c0 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74 68 65  herefore, on the
1f4d0 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20 0a 68  se platforms, .h
1f4e0 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20 63 61  istorical DST ca
1f4f0 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c 6c 20  lculations will 
1f500 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 0a 46  be incorrect. .F
1f510 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 20 74  or example, in t
1f520 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37 20 74  he US, in 2007 t
1f530 68 65 20 44 53 54 20 72 75 6c 65 73 20 63 68 61  he DST rules cha
1f540 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61  nged. .Non-Vista
1f550 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72   Windows platfor
1f560 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e 65 77  ms apply the new
1f570 20 32 30 30 37 20 44 53 54 20 72 75 6c 65 73 20   2007 DST rules 
1f580 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f 75 73  .to all previous
1f590 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c 2e 20   years as well. 
1f5a0 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d 65 77  Vista does somew
1f5b0 68 61 74 20 62 65 74 74 65 72 0a 67 65 74 74 69  hat better.getti
1f5c0 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72 72 65  ng results corre
1f5d0 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38 36 2c  ct back to 1986,
1f5e0 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65 73 20   when the rules 
1f5f0 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e 67 65  were also change
1f600 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69  d.</p>..<p>All i
1f610 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74 61 74  nternal computat
1f620 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68 65 20  ions assume the 
1f630 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
1f640 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 47  pedia.org/wiki/G
1f650 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
1f660 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20 63 61  r | Gregorian ca
1f670 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d 2e 20  lendar].system. 
1f680 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73 73 75   It is also assu
1f690 6d 65 64 20 74 68 61 74 20 65 76 65 72 79 0a 64  med that every.d
1f6a0 61 79 20 69 73 20 65 78 61 63 74 6c 79 20 38 36  ay is exactly 86
1f6b0 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e 20 64  400 seconds in d
1f6c0 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  uration.</p>..<t
1f6d0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1f6e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f720 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67 67 72  ##.Section {Aggr
1f730 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73 7d  egate Functions}
1f740 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67 66 75   aggfunc {*aggfu
1f750 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  nc}.</tcl>..<p>.
1f760 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
1f770 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65  nctions shown be
1f780 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c  low are availabl
1f790 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41  e by default.  A
1f7a0 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65 67  dditional.aggreg
1f7b0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 72  ate functions wr
1f7c0 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20 62  itten in C may b
1f7d0 65 20 61 64 64 65 64 20 75 73 69 6e 67 20 74 68  e added using th
1f7e0 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  e .[sqlite3_crea
1f7f0 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f  te_function()]</
1f800 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e  a>.API.</p>..<p>
1f810 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61  .^In any aggrega
1f820 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  te function that
1f830 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
1f840 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61  argument, that a
1f850 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70  rgument.can be p
1f860 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b  receded by the k
1f870 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54 2e  eyword DISTINCT.
1f880 20 20 5e 49 6e 20 73 75 63 68 20 63 61 73 65 73    ^In such cases
1f890 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d  , duplicate.elem
1f8a0 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72 65  ents are filtere
1f8b0 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70  d before being p
1f8c0 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61  assed into the a
1f8d0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1f8e0 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  n..^For example,
1f8f0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63   the function "c
1f900 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29  ount(distinct X)
1f910 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68  " will return th
1f920 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74  e number.of dist
1f930 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63  inct values of c
1f940 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20  olumn X instead 
1f950 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  of the total num
1f960 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a  ber of non-null.
1f970 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e  values in column
1f980 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65   X..</p>..<table
1f990 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
1f9a0 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a  dding=10>.<tcl>.
1f9b0 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58 29 7d  funcdef {avg(X)}
1f9c0 20 7b 2a 61 76 67 20 7b 61 76 67 28 29 20 61 67   {*avg {avg() ag
1f9d0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1f9e0 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76 67 28  }} {.  ^The avg(
1f9f0 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  ) function.  ret
1fa00 75 72 6e 73 20 74 68 65 20 61 76 65 72 61 67 65  urns the average
1fa10 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f   value of all no
1fa20 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20  n-NULL <i>X</i> 
1fa30 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f 75 70  within a.  group
1fa40 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e 64 20 42  .  ^String and B
1fa50 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74 20  LOB values that 
1fa60 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65  do not look like
1fa70 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20 69   numbers are.  i
1fa80 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 30 2e  nterpreted as 0.
1fa90 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
1faa0 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61 79  f avg() is alway
1fab0 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
1fac0 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e 67  nt value as long
1fad0 20 61 73 0a 20 20 61 74 20 74 68 65 72 65 20 69   as.  at there i
1fae0 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6e  s at least one n
1faf0 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65 76  on-NULL input ev
1fb00 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70 75  en if all.  inpu
1fb10 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
1fb20 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
1fb30 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20 69   avg() is NULL i
1fb40 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20 20  f and only if.  
1fb50 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
1fb60 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20 0a  -NULL inputs.  .
1fb70 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75 6e  }..funcdef {coun
1fb80 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20 7b  t(X) count(*)} {
1fb90 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29 20  *count {count() 
1fba0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1fbb0 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f  on}} {.  ^The co
1fbc0 75 6e 74 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  unt(X) function 
1fbd0 72 65 74 75 72 6e 73 0a 20 20 61 20 63 6f 75 6e  returns.  a coun
1fbe0 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
1fbf0 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74 20  of times.  that 
1fc00 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20  <i>X</i> is not 
1fc10 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e  NULL in a group.
1fc20 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29 20    ^The count(*) 
1fc30 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74 68  function.  (with
1fc40 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29 20 72   no arguments) r
1fc50 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
1fc60 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
1fc70 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
1fc80 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70 5f  .funcdef {group_
1fc90 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70 5f  concat(X) group_
1fca0 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a 20  concat(X,Y)} {. 
1fcb0 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20 7b   *group_concat {
1fcc0 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 61  group_concat() a
1fcd0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1fce0 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67 72  n}.} {.  ^The gr
1fcf0 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 66 75 6e  oup_concat() fun
1fd00 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20  ction returns.  
1fd10 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69  a string which i
1fd20 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  s the concatenat
1fd30 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e  ion of.  all non
1fd40 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66 20  -NULL values of 
1fd50 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20 70  <i>X</i>.  ^If p
1fd60 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f 69  arameter <i>Y</i
1fd70 3e 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 65  > is present the
1fd80 6e 0a 20 20 69 74 20 69 73 20 75 73 65 64 20 61  n.  it is used a
1fd90 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a  s the separator.
1fda0 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61 6e    between instan
1fdb0 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ces of <i>X</i>.
1fdc0 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22 29    ^A comma (",")
1fdd0 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
1fde0 73 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20 3c  separator.  if <
1fdf0 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74  i>Y</i> is omitt
1fe00 65 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20 6f  ed.  The order o
1fe10 66 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  f the concatenat
1fe20 65 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a 20  ed elements is. 
1fe30 20 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a 66   arbitrary..}..f
1fe40 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d 20  uncdef {max(X)} 
1fe50 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a 61 67  {*maxAggFunc *ag
1fe60 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61 67 67  g_max {max() agg
1fe70 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
1fe80 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28 29  } {.  ^The max()
1fe90 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1fea0 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
1feb0 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  e maximum value 
1fec0 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e  of all values in
1fed0 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54   the group..  ^T
1fee0 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
1fef0 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74 68   is the value th
1ff00 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75  at would be retu
1ff10 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e 0a  rned last in an.
1ff20 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74 68    ORDER BY on th
1ff30 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20  e same column.  
1ff40 5e 41 67 67 72 65 67 61 74 65 20 6d 61 78 28 29  ^Aggregate max()
1ff50 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a 20   returns NULL . 
1ff60 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
1ff70 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
1ff80 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
1ff90 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75  the group..}..fu
1ffa0 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b  ncdef {min(X)} {
1ffb0 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67 67  *minAggFunc *agg
1ffc0 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67 72  _min {min() aggr
1ffd0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
1ffe0 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29 20   {.  ^The min() 
1fff0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
20000 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65  on.  returns the
20010 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c   minimum non-NUL
20020 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76  L value of all v
20030 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
20040 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69 6d  up..  ^The minim
20050 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  um value is the 
20060 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  first non-NULL v
20070 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
20080 61 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20 4f  appear.  in an O
20090 52 44 45 52 20 42 59 20 6f 66 20 74 68 65 20 63  RDER BY of the c
200a0 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65 67  olumn..  ^Aggreg
200b0 61 74 65 20 6d 69 6e 28 29 20 72 65 74 75 72 6e  ate min() return
200c0 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e  s NULL if and on
200d0 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ly if there are 
200e0 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61  no non-NULL.  va
200f0 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
20100 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  p..}..funcdef {s
20110 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29 7d 20  um(X) total(X)} 
20120 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73 75  {.  *sumFunc *su
20130 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d 28  m *total.  {sum(
20140 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
20150 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28 29  tion}.  {total()
20160 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
20170 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20  ion}.} {.  ^The 
20180 73 75 6d 28 29 20 61 6e 64 20 74 6f 74 61 6c 28  sum() and total(
20190 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
201a0 74 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e 20 73  tions.  return s
201b0 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  um of all non-NU
201c0 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  LL values in the
201d0 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20 74 68   group..  ^If th
201e0 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e  ere are no non-N
201f0 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20 74  ULL input rows t
20200 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e  hen sum() return
20210 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f 74  s.  NULL but tot
20220 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e 30  al() returns 0.0
20230 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74 20  ..  NULL is not 
20240 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66  normally a helpf
20250 75 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74 68  ul result for th
20260 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73  e sum of no rows
20270 0a 20 20 62 75 74 20 74 68 65 20 53 51 4c 20 73  .  but the SQL s
20280 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 73  tandard requires
20290 20 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68   it and most oth
202a0 65 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61 73  er.  SQL databas
202b0 65 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d  e engines implem
202c0 65 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20 77  ent sum() that w
202d0 61 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f 65  ay so SQLite doe
202e0 73 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73 61  s it in the.  sa
202f0 6d 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72 20  me way in order 
20300 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65  to be compatible
20310 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e  .   The non-stan
20320 64 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e  dard total() fun
20330 63 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69  ction.  is provi
20340 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69  ded as a conveni
20350 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20  ent way to work 
20360 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69  around this desi
20370 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20  gn problem.  in 
20380 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
20390 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65  .</p>..  <p>^The
203a0 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c   result of total
203b0 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  () is always a f
203c0 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
203d0 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72 65 73 75  lue..  ^The resu
203e0 6c 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20 61  lt of sum() is a
203f0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  n integer value 
20400 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  if all non-NULL 
20410 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67  inputs are integ
20420 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20 69  ers..  ^If any i
20430 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69 73  nput to sum() is
20440 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65   neither an inte
20450 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20 20  ger or a NULL.  
20460 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72  then sum() retur
20470 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ns a floating po
20480 69 6e 74 20 76 61 6c 75 65 0a 20 20 77 68 69 63  int value.  whic
20490 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61 70  h might be an ap
204a0 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74  proximation to t
204b0 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e  he true sum.</p>
204c0 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77 69  ..  <p>^Sum() wi
204d0 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e 74  ll throw an "int
204e0 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20 65  eger overflow" e
204f0 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20  xception if all 
20500 69 6e 70 75 74 73 0a 20 20 61 72 65 20 69 6e 74  inputs.  are int
20510 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20  egers or NULL.  
20520 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  and an integer o
20530 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20 61  verflow occurs a
20540 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69  t any point duri
20550 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69  ng the computati
20560 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20 6e  on..  ^Total() n
20570 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20 69  ever throws an i
20580 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 2e  nteger overflow.
20590 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c  .}.</tcl>.</tabl
205a0 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  e>..<tcl>.######
205b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
205c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
205d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
205e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
205f0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
20600 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74 20 7b   INSERT insert {
20610 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54 73 7d  INSERT *INSERTs}
20620 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
20630 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72 74 2d  eDiagram insert-
20640 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
20650 54 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65  The INSERT state
20660 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74 68  ment comes in th
20670 72 65 65 20 62 61 73 69 63 20 66 6f 72 6d 73 2e  ree basic forms.
20680 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e    .<ul>.<li><p>^
20690 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 28  The first form (
206a0 77 69 74 68 20 74 68 65 20 22 56 41 4c 55 45 53  with the "VALUES
206b0 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61 74  " keyword) creat
206c0 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 6e  es one or more.n
206d0 65 77 20 72 6f 77 73 20 69 6e 0a 61 6e 20 65 78  ew rows in.an ex
206e0 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 5e 49  isting table. ^I
206f0 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  f no column-list
20700 20 69 73 20 73 70 65 63 69 66 69 65 64 20 74 68   is specified th
20710 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  en the number.of
20720 20 76 61 6c 75 65 73 20 69 6e 73 65 72 74 65 64   values inserted
20730 20 69 6e 74 6f 20 65 61 63 68 20 72 6f 77 0a 6d   into each row.m
20740 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
20750 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
20760 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
20770 74 61 62 6c 65 2e 20 5e 49 6e 20 74 68 69 73 20  table. ^In this 
20780 63 61 73 65 0a 74 68 65 20 72 65 73 75 6c 74 20  case.the result 
20790 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
207a0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72  e left-most expr
207b0 65 73 73 69 6f 6e 20 66 72 6f 6d 20 65 61 63 68  ession from each
207c0 20 74 65 72 6d 20 6f 66 0a 74 68 65 20 56 41 4c   term of.the VAL
207d0 55 45 53 20 6c 69 73 74 20 69 73 20 69 6e 73 65  UES list is inse
207e0 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 6c 65  rted into the le
207f0 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f  ft-most column o
20800 66 20 65 61 63 68 20 6e 65 77 20 72 6f 77 2c 0a  f each new row,.
20810 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 66 6f 72  and so forth for
20820 20 65 61 63 68 20 73 75 62 73 65 71 75 65 6e 74   each subsequent
20830 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 49 66   expression. ^If
20840 20 61 0a 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69   a.column-list i
20850 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
20860 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
20870 76 61 6c 75 65 73 20 69 6e 20 65 61 63 68 20 74  values in each t
20880 65 72 6d 20 6f 66 20 74 68 65 0a 56 41 4c 55 45  erm of the.VALUE
20890 20 6c 69 73 74 20 6d 75 73 74 20 6d 61 74 63 68   list must match
208a0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73   the number of.s
208b0 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73  pecified columns
208c0 2e 20 5e 45 61 63 68 20 6f 66 20 74 68 65 20 6e  . ^Each of the n
208d0 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  amed columns of 
208e0 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70  the new row is p
208f0 6f 70 75 6c 61 74 65 64 0a 77 69 74 68 20 74 68  opulated.with th
20900 65 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61  e results of eva
20910 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72  luating the corr
20920 65 73 70 6f 6e 64 69 6e 67 20 56 41 4c 55 45 53  esponding VALUES
20930 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54 61   expression. ^Ta
20940 62 6c 65 0a 63 6f 6c 75 6d 6e 73 20 74 68 61 74  ble.columns that
20950 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69   do not appear i
20960 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73  n the column lis
20970 74 20 61 72 65 20 70 6f 70 75 6c 61 74 65 64 20  t are populated 
20980 77 69 74 68 20 74 68 65 20 64 65 66 61 75 6c 74  with the default
20990 0a 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 28 73  .column value (s
209a0 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
209b0 20 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 54   of the CREATE T
209c0 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 29 2c  ABLE statement),
209d0 20 6f 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66   or with NULL if
209e0 0a 6e 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75  .no default valu
209f0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
20a00 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 65 63 6f  .<li><p>The seco
20a10 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49  nd form of the I
20a20 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
20a30 63 6f 6e 74 61 69 6e 73 20 61 20 53 45 4c 45 43  contains a SELEC
20a40 54 20 73 74 61 74 65 6d 65 6e 74 0a 69 6e 73 74  T statement.inst
20a50 65 61 64 20 6f 66 20 61 20 56 41 4c 55 45 53 20  ead of a VALUES 
20a60 63 6c 61 75 73 65 2e 20 5e 41 20 6e 65 77 20 65  clause. ^A new e
20a70 6e 74 72 79 20 69 73 20 69 6e 73 65 72 74 65 64  ntry is inserted
20a80 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20   into the table 
20a90 66 6f 72 20 65 61 63 68 0a 72 6f 77 20 6f 66 20  for each.row of 
20aa0 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
20ab0 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 53   executing the S
20ac0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
20ad0 20 5e 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69   ^If a column-li
20ae0 73 74 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c  st is.specified,
20af0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
20b00 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
20b10 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45  sult of the SELE
20b20 43 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  CT must be the s
20b30 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65  ame.as the numbe
20b40 72 20 6f 66 20 69 74 65 6d 73 20 69 6e 20 74 68  r of items in th
20b50 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 2e 20 5e  e column-list. ^
20b60 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 6e 6f  Otherwise, if no
20b70 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a   column-list is.
20b80 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e  specified, the n
20b90 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
20ba0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f   in the result o
20bb0 66 20 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73  f the SELECT mus
20bc0 74 20 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73  t be the same.as
20bd0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
20be0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
20bf0 62 6c 65 2e 20 5e 41 6e 79 20 53 45 4c 45 43 54  ble. ^Any SELECT
20c00 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c   statement, incl
20c10 75 64 69 6e 67 0a 5b 63 6f 6d 70 6f 75 6e 64 20  uding.[compound 
20c20 53 45 4c 45 43 54 73 5d 20 61 6e 64 20 53 45 4c  SELECTs] and SEL
20c30 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ECT statements w
20c40 69 74 68 20 5b 4f 52 44 45 52 20 42 59 5d 20 61  ith [ORDER BY] a
20c50 6e 64 2f 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c  nd/or [LIMIT] cl
20c60 61 75 73 65 73 2c 20 0a 6d 61 79 20 62 65 20 75  auses, .may be u
20c70 73 65 64 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  sed in an INSERT
20c80 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68   statement of th
20c90 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70  is form...<li><p
20ca0 3e 54 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20  >The third form 
20cb0 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  of an INSERT sta
20cc0 74 65 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44  tement is with D
20cd0 45 46 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e  EFAULT VALUES..^
20ce0 28 54 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20  (The INSERT ... 
20cf0 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73  DEFAULT VALUES s
20d00 74 61 74 65 6d 65 6e 74 20 69 6e 73 65 72 74 73  tatement inserts
20d10 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f   a single new ro
20d20 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64  w into the.named
20d30 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20   table.)^ ^Each 
20d40 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
20d50 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74  w row is populat
20d60 65 64 20 77 69 74 68 20 69 74 73 20 64 65 66 61  ed with its defa
20d70 75 6c 74 20 76 61 6c 75 65 2c 0a 6f 72 20 77 69  ult value,.or wi
20d80 74 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e 6f 20  th a NULL if no 
20d90 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73  default value is
20da0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
20db0 72 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  rt of the column
20dc0 0a 64 65 66 69 6e 69 74 69 6f 6e 20 69 6e 20 74  .definition in t
20dd0 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
20de0 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c  statement...</ul
20df0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f  >..<p>^The optio
20e00 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  nal conflict-cla
20e10 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73  use allows the s
20e20 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
20e30 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63  an alternative.c
20e40 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
20e50 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
20e60 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64  gorithm to use d
20e70 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 49  uring this one I
20e80 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53  NSERT command..S
20e90 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74  ee the section t
20ea0 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49  itled.[ON CONFLI
20eb0 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  CT] for addition
20ec0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
20ed0 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  For compatibilit
20ee0 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74  y with MySQL, ^t
20ef0 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77 73  he parser allows
20f00 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 0a   the use of the.
20f10 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c  single keyword <
20f20 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70  a href="lang_rep
20f30 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41  lace.html">REPLA
20f40 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c  CE</a> as an .al
20f50 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54 20  ias for "INSERT 
20f60 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70  OR REPLACE"...<p
20f70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  >^(The optional 
20f80 22 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d  "<i>database-nam
20f90 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70  e</i><b>.</b>" p
20fa0 72 65 66 69 78 20 6f 6e 20 74 68 65 20 3c 69 3e  refix on the <i>
20fb0 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69  table-name</i>.i
20fc0 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74 6f  s support for to
20fd0 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
20fe0 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29  tatements only.)
20ff0 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e 61  ^  ^The table na
21000 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75 61  me must be.unqua
21010 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45 52  lified for INSER
21020 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
21030 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 5b  t occur within [
21040 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
21050 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d  statements..^Sim
21060 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45 46  ilarly, the "DEF
21070 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72  AULT VALUES" for
21080 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
21090 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75 70  statement is sup
210a0 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c  ported for.top-l
210b0 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
210c0 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20  ements only and 
210d0 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20 73  not for INSERT s
210e0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
210f0 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a  .triggers..<p>..
21100 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
21110 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21150 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e  ####.Section {ON
21160 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
21170 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e  } conflict {{con
21180 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f  flict clause} {O
21190 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 52 65  N CONFLICT}}..Re
211a0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
211b0 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  gram conflict-cl
211c0 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause.</tcl>..<p>
211d0 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
211e0 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61 20  clause is not a 
211f0 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f 6d  separate SQL com
21200 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a 6e  mand.  It is a.n
21210 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61 75  on-standard clau
21220 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70 65  se that can appe
21230 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72  ar in many other
21240 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49   SQL commands..I
21250 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20 6f  t is given its o
21260 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74 68  wn section in th
21270 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63 61  is document beca
21280 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70 61  use it is not.pa
21290 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53  rt of standard S
212a0 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72 65  QL and therefore
212b0 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66 61   might not be fa
212c0 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  miliar.</p>..<p>
212d0 5e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20  ^The syntax for 
212e0 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
212f0 63 6c 61 75 73 65 20 69 73 20 61 73 20 73 68 6f  clause is as sho
21300 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68 65  wn above for.the
21310 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
21320 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20 74 68 65  mmand.  ^For the
21330 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44 41   INSERT and.UPDA
21340 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65  TE commands, the
21350 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f   keywords "ON CO
21360 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65 70 6c  NFLICT" are repl
21370 61 63 65 64 20 62 79 20 22 4f 52 22 20 73 6f 20  aced by "OR" so 
21380 74 68 61 74 0a 74 68 65 20 73 79 6e 74 61 78 20  that.the syntax 
21390 72 65 61 64 73 20 6d 6f 72 65 20 6e 61 74 75 72  reads more natur
213a0 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78 61 6d 70  ally.  For examp
213b0 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22  le, instead of."
213c0 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49  INSERT ON CONFLI
213d0 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61  CT IGNORE" we ha
213e0 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47  ve "INSERT OR IG
213f0 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f  NORE"..The keywo
21400 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74  rds change but t
21410 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
21420 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  e clause is the 
21430 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e  same.either way.
21440 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20  </p>..<p>The ON 
21450 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
21460 61 70 70 6c 69 65 73 20 74 6f 20 5b 55 4e 49 51  applies to [UNIQ
21470 55 45 5d 2c 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 2c  UE], [NOT NULL],
21480 0a 5b 43 48 45 43 4b 5d 2c 20 61 6e 64 20 5b 50  .[CHECK], and [P
21490 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73  RIMARY KEY] cons
214a0 74 72 61 69 6e 74 73 2e 0a 54 68 65 20 4f 4e 20  traints..The ON 
214b0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
214c0 68 6d 20 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c  hm does not.appl
214d0 79 20 74 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45  y to [FOREIGN KE
214e0 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a  Y constraints]..
214f0 54 68 65 72 65 20 61 72 65 20 66 69 76 65 20 63  There are five c
21500 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
21510 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f  on algorithm cho
21520 69 63 65 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20  ices:.ROLLBACK, 
21530 41 42 4f 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e  ABORT, FAIL, IGN
21540 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45  ORE, and REPLACE
21550 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  ..^The default c
21560 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
21570 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
21580 41 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20  ABORT.  This.is 
21590 77 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c  what they mean:<
215a0 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62  /p>..<dl>.<dt><b
215b0 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64  >ROLLBACK</b></d
215c0 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
215d0 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
215e0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
215f0 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
21600 52 4f 4c 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74  ROLLBACK.resolut
21610 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62  ion algorithm ab
21620 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
21630 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
21640 69 74 68 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f  ith.an SQLITE_CO
21650 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61  NSTRAINT error a
21660 6e 64 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68  nd rolls back th
21670 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
21680 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72  ction..^If no tr
21690 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61 63 74  ansaction is.act
216a0 69 76 65 20 28 6f 74 68 65 72 20 74 68 61 6e 20  ive (other than 
216b0 74 68 65 20 69 6d 70 6c 69 65 64 20 74 72 61 6e  the implied tran
216c0 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20  saction that is 
216d0 63 72 65 61 74 65 64 20 6f 6e 20 65 76 65 72 79  created on every
216e0 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74  .command) then t
216f0 68 65 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f  he ROLLBACK reso
21700 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
21710 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
21720 61 73 20 74 68 65 0a 41 42 4f 52 54 20 61 6c 67  as the.ABORT alg
21730 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e  orithm.</p></dd>
21740 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f  ..<dt><b>ABORT</
21750 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
21760 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
21770 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
21780 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
21790 20 74 68 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c   the ABORT.resol
217a0 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
217b0 61 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  aborts the curre
217c0 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
217d0 0a 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f  .with an SQLITE_
217e0 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72  CONSTRAINT error
217f0 20 61 6e 64 20 62 61 63 6b 73 20 6f 75 74 20 61   and backs out a
21800 6e 79 20 63 68 61 6e 67 65 73 0a 6d 61 64 65 20  ny changes.made 
21810 62 79 20 74 68 65 20 63 75 72 72 65 6e 74 20 53  by the current S
21820 51 4c 20 73 74 61 74 65 6d 65 6e 74 3b 20 62 75  QL statement; bu
21830 74 20 63 68 61 6e 67 65 73 20 63 61 75 73 65 64  t changes caused
21840 0a 62 79 20 70 72 69 6f 72 20 53 51 4c 20 73 74  .by prior SQL st
21850 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
21860 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63  the same transac
21870 74 69 6f 6e 20 61 72 65 20 70 72 65 73 65 72 76  tion are preserv
21880 65 64 20 61 6e 64 20 74 68 65 0a 74 72 61 6e 73  ed and the.trans
21890 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61  action remains a
218a0 63 74 69 76 65 2e 0a 54 68 69 73 20 69 73 20 74  ctive..This is t
218b0 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
218c0 69 6f 72 20 61 6e 64 20 74 68 65 20 62 65 68 61  ior and the beha
218d0 76 69 6f 72 20 73 70 65 63 69 66 69 65 64 20 62  vior specified b
218e0 79 20 74 68 65 20 53 51 4c 0a 73 74 61 6e 64 61  y the SQL.standa
218f0 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  rd.</p></dd>..<d
21900 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64  t><b>FAIL</b></d
21910 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
21920 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
21930 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
21940 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
21950 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  FAIL.resolution 
21960 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73  algorithm aborts
21970 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c   the current SQL
21980 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 20   statement with 
21990 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  an.SQLITE_CONSTR
219a0 41 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e 42 75  AINT error.  ^Bu
219b0 74 20 74 68 65 20 46 41 49 4c 20 72 65 73 6f 6c  t the FAIL resol
219c0 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 62  ution does not.b
219d0 61 63 6b 20 6f 75 74 20 70 72 69 6f 72 20 63 68  ack out prior ch
219e0 61 6e 67 65 73 20 6f 66 20 74 68 65 20 53 51 4c  anges of the SQL
219f0 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
21a00 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65 73 0a  failed nor does.
21a10 69 74 20 65 6e 64 20 74 68 65 20 74 72 61 6e 73  it end the trans
21a20 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61  action..^For exa
21a30 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44 41  mple, if an UPDA
21a40 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e 63  TE.statement enc
21a50 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73 74  ountered a const
21a60 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
21a70 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f 77  on the 100th row
21a80 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70 74   that.it attempt
21a90 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68 65  s to update, the
21aa0 6e 20 74 68 65 20 66 69 72 73 74 20 39 39 20 72  n the first 99 r
21ab0 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65 20 70  ow changes are p
21ac0 72 65 73 65 72 76 65 64 0a 62 75 74 20 63 68 61  reserved.but cha
21ad0 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30 30  nges to rows 100
21ae0 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76 65   and beyond neve
21af0 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64  r occur.</p></dd
21b00 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45  >..<dt><b>IGNORE
21b10 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
21b20 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69  > ^When an appli
21b30 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  cable constraint
21b40 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
21b50 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52 45 20 72  s, .the IGNORE r
21b60 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
21b70 74 68 6d 20 73 6b 69 70 73 20 74 68 65 20 6f 6e  thm skips the on
21b80 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 74 61  e row that conta
21b90 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72 61 69  ins.the constrai
21ba0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 6e 64  nt violation and
21bb0 20 63 6f 6e 74 69 6e 75 65 73 20 70 72 6f 63 65   continues proce
21bc0 73 73 69 6e 67 20 73 75 62 73 65 71 75 65 6e 74  ssing subsequent
21bd0 20 72 6f 77 73 0a 6f 66 20 74 68 65 20 53 51 4c   rows.of the SQL
21be0 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20 69 66   statement as if
21bf0 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74 20 77 72   nothing went wr
21c00 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f 77 73 20  ong..Other rows 
21c10 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
21c20 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63 6f   the row that.co
21c30 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e 73  ntained the cons
21c40 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
21c50 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 6f 72   are inserted or
21c60 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c   updated.normall
21c70 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20  y. ^No error is 
21c80 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 74 68  returned when th
21c90 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63  e IGNORE conflic
21ca0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67  t resolution.alg
21cb0 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c  orithm is used.<
21cc0 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
21cd0 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74  >REPLACE</b></dt
21ce0 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
21cf0 61 20 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50  a [UNIQUE] or [P
21d00 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73  RIMARY KEY] cons
21d10 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
21d20 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 52 45   occurs, .the RE
21d30 50 4c 41 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a  PLACE algorithm.
21d40 64 65 6c 65 74 65 73 20 70 72 65 2d 65 78 69 73  deletes pre-exis
21d50 74 69 6e 67 20 72 6f 77 73 20 74 68 61 74 20 61  ting rows that a
21d60 72 65 20 63 61 75 73 69 6e 67 20 74 68 65 20 63  re causing the c
21d70 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
21d80 69 6f 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73  ion.prior to ins
21d90 65 72 74 69 6e 67 20 6f 72 20 75 70 64 61 74 69  erting or updati
21da0 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  ng the current r
21db0 6f 77 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61  ow and the comma
21dc0 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78  nd continues .ex
21dd0 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79  ecuting normally
21de0 2e 0a 5e 49 66 20 61 20 5b 4e 4f 54 20 4e 55 4c  ..^If a [NOT NUL
21df0 4c 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  L] constraint vi
21e00 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
21e10 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66  the REPLACE conf
21e20 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  lict.resolution 
21e30 72 65 70 6c 61 63 65 73 20 74 68 65 20 4e 55 4c  replaces the NUL
21e40 4c 20 76 61 6c 75 65 20 77 69 74 68 0a 74 68 65  L value with.the
21e50 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
21e60 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20  or that column, 
21e70 6f 72 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  or if the column
21e80 20 68 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a   has no default.
21e90 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20  value, then the 
21ea0 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20  ABORT algorithm 
21eb0 69 73 20 75 73 65 64 2e 0a 5e 49 66 20 61 20 5b  is used..^If a [
21ec0 43 48 45 43 4b 5d 20 63 6f 6e 73 74 72 61 69 6e  CHECK] constrain
21ed0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
21ee0 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20  rs, the REPLACE 
21ef0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
21f00 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 61 6c  ion.algorithm al
21f10 77 61 79 73 20 77 6f 72 6b 73 20 6c 69 6b 65 20  ways works like 
21f20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ABORT.</p>..<p>^
21f30 57 68 65 6e 20 74 68 65 20 52 45 50 4c 41 43 45  When the REPLACE
21f40 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
21f50 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65  tion strategy de
21f60 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72  letes rows in or
21f70 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61  der to.satisfy a
21f80 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52   constraint, [CR
21f90 45 41 54 45 20 54 52 49 47 47 45 52 20 7c 20 64  EATE TRIGGER | d
21fa0 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d 20  elete triggers] 
21fb0 66 69 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79  fire if and only
21fc0 20 69 66 0a 5b 72 65 63 75 72 73 69 76 65 5f 74   if.[recursive_t
21fd0 72 69 67 67 65 72 73 20 70 72 61 67 6d 61 20 7c  riggers pragma |
21fe0 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
21ff0 65 72 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64  ers] are enabled
22000 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  .</p>..<p>^The [
22010 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68  sqlite3_update_h
22020 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20 68 6f 6f  ook | update hoo
22030 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65  k] is not invoke
22040 64 20 66 6f 72 20 72 6f 77 73 20 74 68 61 74 0a  d for rows that.
22050 61 72 65 20 64 65 6c 65 74 65 64 20 62 79 20 74  are deleted by t
22060 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
22070 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73  ict resolution s
22080 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f 72 20 64  trategy.  ^Nor d
22090 6f 65 73 0a 52 45 50 4c 41 43 45 20 69 6e 63 72  oes.REPLACE incr
220a0 65 6d 65 6e 74 20 74 68 65 20 5b 73 71 6c 69 74  ement the [sqlit
220b0 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68 61  e3_changes | cha
220c0 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54 68  nge counter]..Th
220d0 65 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 62 65  e exceptional be
220e0 68 61 76 69 6f 72 73 20 64 65 66 69 6e 65 64 20  haviors defined 
220f0 69 6e 20 74 68 69 73 20 70 61 72 61 67 72 61 70  in this paragrap
22100 68 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 0a  h might change .
22110 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65  in a future rele
22120 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a  ase.</p>.</dl>..
22130 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74 68  <p>^The algorith
22140 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  m specified in t
22150 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f 66 20  he OR clause of 
22160 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  an INSERT or UPD
22170 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61 6e  ATE.overrides an
22180 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  y algorithm spec
22190 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41 54  ified in a CREAT
221a0 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20  E TABLE..^If no 
221b0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
221c0 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65 2c  cified anywhere,
221d0 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
221e0 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70  ithm is used.</p
221f0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
22200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22210 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22240 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
22250 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 20  REINDEX reindex 
22260 52 45 49 4e 44 45 58 0a 0a 52 65 63 75 72 73 69  REINDEX..Recursi
22270 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
22280 72 65 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74  reindex-stmt.</t
22290 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49  cl>..<p>^The REI
222a0 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20  NDEX command is 
222b0 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20 61  used to delete a
222c0 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64 69  nd recreate indi
222d0 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63 68  ces from scratch
222e0 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75 6c  ..This is useful
222f0 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69   when the defini
22300 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74  tion of a collat
22310 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61 73  ion sequence has
22320 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a   changed..</p>..
22330 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44  <p>^If the REIND
22340 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f  EX keyword is no
22350 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
22360 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e  collation-sequen
22370 63 65 20 6f 72 20 64 61 74 61 62 61 73 65 20 0a  ce or database .
22380 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 66 69 65  object identifie
22390 72 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69  r, then all indi
223a0 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63  ces in all attac
223b0 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72  hed databases ar
223c0 65 20 72 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e  e rebuilt...<p>^
223d0 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b  If the REINDEX k
223e0 65 79 77 6f 72 64 20 69 73 20 66 6f 6c 6c 6f 77  eyword is follow
223f0 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f  ed by a collatio
22400 6e 2d 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 2c  n-sequence name,
22410 20 74 68 65 6e 0a 61 6c 6c 20 69 6e 64 69 63 65   then.all indice
22420 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  s in all attache
22430 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  d databases that
22440 20 75 73 65 20 74 68 65 20 6e 61 6d 65 64 20 63   use the named c
22450 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
22460 65 73 0a 61 72 65 20 72 65 63 72 65 61 74 65 64  es.are recreated
22470 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20 74  . ..<p>^Or, if t
22480 68 65 20 61 72 67 75 6d 65 6e 74 20 61 74 74 61  he argument atta
22490 63 68 65 64 20 74 6f 20 74 68 65 20 52 45 49 4e  ched to the REIN
224a0 44 45 58 20 69 64 65 6e 74 69 66 69 65 73 20 61  DEX identifies a
224b0 20 73 70 65 63 69 66 69 63 20 0a 64 61 74 61 62   specific .datab
224c0 61 73 65 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  ase table, then 
224d0 61 6c 6c 20 69 6e 64 69 63 65 73 20 61 74 74 61  all indices atta
224e0 63 68 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  ched to the data
224f0 62 61 73 65 20 74 61 62 6c 65 20 61 72 65 20 72  base table are r
22500 65 62 75 69 6c 74 2e 20 0a 5e 49 66 20 69 74 20  ebuilt. .^If it 
22510 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70 65  identifies a spe
22520 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20 69  cific database i
22530 6e 64 65 78 2c 20 74 68 65 6e 20 6a 75 73 74 20  ndex, then just 
22540 74 68 61 74 20 69 6e 64 65 78 20 69 73 20 72 65  that index is re
22550 63 72 65 61 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66  created...<p>^If
22560 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73 65 2d   no <i>database-
22570 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70 65 63  name</i> is spec
22580 69 66 69 65 64 20 61 6e 64 20 74 68 65 72 65 20  ified and there 
22590 65 78 69 73 74 73 20 62 6f 74 68 20 61 20 74 61  exists both a ta
225a0 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64  ble or.index and
225b0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
225c0 75 65 6e 63 65 20 6f 66 20 74 68 65 20 73 70 65  uence of the spe
225d0 63 69 66 69 65 64 20 6e 61 6d 65 2c 20 53 51 4c  cified name, SQL
225e0 69 74 65 20 69 6e 74 65 72 70 72 65 74 73 0a 74  ite interprets.t
225f0 68 69 73 20 61 73 20 61 20 72 65 71 75 65 73 74  his as a request
22600 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20   to rebuild the 
22610 69 6e 64 69 63 65 73 20 74 68 61 74 20 75 73 65  indices that use
22620 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61   the named colla
22630 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e 0a 54  tion sequence..T
22640 68 69 73 20 61 6d 62 69 67 75 69 74 79 20 69 6e  his ambiguity in
22650 20 74 68 65 20 73 79 6e 74 61 78 20 6d 61 79 20   the syntax may 
22660 62 65 20 61 76 6f 69 64 65 64 20 62 79 20 61 6c  be avoided by al
22670 77 61 79 73 20 73 70 65 63 69 66 79 69 6e 67 20  ways specifying 
22680 61 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61  a.<i>database-na
22690 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65 69 6e  me</i> when rein
226a0 64 65 78 69 6e 67 20 61 20 73 70 65 63 69 66 69  dexing a specifi
226b0 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  c table or index
226c0 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
226d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
226e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
226f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22710 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
22720 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65   REPLACE replace
22730 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e   REPLACE..</tcl>
22740 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41 43  ..<p>^The REPLAC
22750 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20  E command is an 
22760 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 22 5b  alias for the "[
22770 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e  ON CONFLICT | IN
22780 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 5d  SERT OR REPLACE]
22790 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74 68 65  ".variant of the
227a0 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e   [INSERT] comman
227b0 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61 73 20  d.  .This alias 
227c0 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20  is provided for 
227d0 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 6f 74  compatibility ot
227e0 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
227f0 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65 20 74   engines.  See t
22800 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d  he .[INSERT] com
22810 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74 69  mand documentati
22820 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  on for additiona
22830 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  l information.</
22840 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  p>  ..<tcl>.####
22850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22890 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
228a0 69 6f 6e 20 7b 57 49 54 48 20 63 6c 61 75 73 65  ion {WITH clause
228b0 7d 20 77 69 74 68 20 7b 7b 63 6f 6d 6d 6f 6e 20  } with {{common 
228c0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
228d0 73 7d 20 57 49 54 48 7d 0a 0a 52 65 63 75 72 73  s} WITH}..Recurs
228e0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
228f0 20 77 69 74 68 2d 63 6c 61 75 73 65 0a 3c 2f 74   with-clause.</t
22900 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f 6e 20 54  cl>..<p>Common T
22910 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73  able Expressions
22920 20 6f 72 20 43 54 45 73 20 61 63 74 20 6c 69 6b   or CTEs act lik
22930 65 20 74 65 6d 70 6f 72 61 72 79 20 5b 76 69 65  e temporary [vie
22940 77 73 5d 20 74 68 61 74 20 65 78 69 73 74 0a 6f  ws] that exist.o
22950 6e 6c 79 20 66 6f 72 20 74 68 65 20 64 75 72 61  nly for the dura
22960 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65  tion of a single
22970 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20   SQL statement. 
22980 20 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 6b   There are two k
22990 69 6e 64 73 20 6f 66 0a 63 6f 6d 6d 6f 6e 20 74  inds of.common t
229a0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
229b0 3a 20 22 6f 72 64 69 6e 61 72 79 22 20 61 6e 64  : "ordinary" and
229c0 20 22 72 65 63 75 72 73 69 76 65 22 2e 20 4f 72   "recursive". Or
229d0 64 69 6e 61 72 79 20 0a 63 6f 6d 6d 6f 6e 20 74  dinary .common t
229e0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
229f0 20 61 72 65 20 68 65 6c 70 66 75 6c 20 66 6f 72   are helpful for
22a00 20 6d 61 6b 69 6e 67 0a 71 75 65 72 69 65 73 20   making.queries 
22a10 65 61 73 69 65 72 20 74 6f 20 75 6e 64 65 72 73  easier to unders
22a20 74 61 6e 64 20 62 79 20 66 61 63 74 6f 72 69 6e  tand by factorin
22a30 67 0a 73 75 62 71 75 65 72 69 65 73 20 6f 75 74  g.subqueries out
22a40 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 53 51 4c   of the main SQL
22a50 20 73 74 61 74 65 6d 65 6e 74 2e 0a 52 65 63 75   statement..Recu
22a60 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62  rsive common tab
22a70 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 0a 70  le expressions.p
22a80 72 6f 76 69 64 65 20 74 68 65 20 61 62 69 6c 69  rovide the abili
22a90 74 79 20 74 6f 20 64 6f 20 68 69 65 72 61 72 63  ty to do hierarc
22aa0 68 69 63 61 6c 20 6f 72 0a 72 65 63 75 72 73 69  hical or.recursi
22ab0 76 65 20 71 75 65 72 69 65 73 20 6f 66 20 74 72  ve queries of tr
22ac0 65 65 73 20 61 6e 64 20 67 72 61 70 68 73 2c 20  ees and graphs, 
22ad0 61 20 63 61 70 61 62 69 6c 69 74 79 0a 74 68 61  a capability.tha
22ae0 74 20 69 73 20 6e 6f 74 20 6f 74 68 65 72 77 69  t is not otherwi
22af0 73 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20  se available in 
22b00 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
22b10 2e 0a 0a 3c 70 3e 41 6c 6c 20 63 6f 6d 6d 6f 6e  ...<p>All common
22b20 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
22b30 6e 73 20 28 6f 72 64 69 6e 61 72 79 20 61 6e 64  ns (ordinary and
22b40 20 72 65 63 75 72 73 69 76 65 29 20 61 72 65 20   recursive) are 
22b50 0a 63 72 65 61 74 65 64 20 62 79 20 70 72 65 70  .created by prep
22b60 65 6e 64 69 6e 67 20 61 20 57 49 54 48 20 63 6c  ending a WITH cl
22b70 61 75 73 65 20 69 6e 20 66 72 6f 6e 74 20 6f 66  ause in front of
22b80 20 61 20 5b 53 45 4c 45 43 54 5d 2c 20 5b 49 4e   a [SELECT], [IN
22b90 53 45 52 54 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c  SERT], [DELETE],
22ba0 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61  .or [UPDATE] sta
22bb0 74 65 6d 65 6e 74 2e 20 20 41 20 73 69 6e 67 6c  tement.  A singl
22bc0 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61  e WITH clause ca
22bd0 6e 20 73 70 65 63 69 66 79 20 6f 6e 65 20 6f 72  n specify one or
22be0 20 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62   more.common tab
22bf0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  le expressions, 
22c00 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 20 61 72  some of which ar
22c10 65 20 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 73  e ordinary and s
22c20 6f 6d 65 20 6f 66 20 77 68 69 63 68 0a 61 72 65  ome of which.are
22c30 20 72 65 63 75 72 73 69 76 65 2e 0a 0a 3c 74 63   recursive...<tc
22c40 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72  l>hd_fragment or
22c50 64 69 6e 61 72 79 63 74 65 20 7b 6f 72 64 69 6e  dinarycte {ordin
22c60 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
22c70 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 3c 2f 74   expressions}</t
22c80 63 6c 3e 0a 3c 68 33 3e 4f 72 64 69 6e 61 72 79  cl>.<h3>Ordinary
22c90 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78   Common Table Ex
22ca0 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
22cb0 3c 70 3e 41 6e 20 6f 72 64 69 6e 61 72 79 20 63  <p>An ordinary c
22cc0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
22cd0 65 73 73 69 6f 6e 20 77 6f 72 6b 73 20 61 73 20  ession works as 
22ce0 69 66 20 69 74 20 77 65 72 65 20 61 20 5b 76 69  if it were a [vi
22cf0 65 77 5d 20 74 68 61 74 0a 65 78 69 73 74 73 20  ew] that.exists 
22d00 66 6f 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e  for the duration
22d10 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 73 74 61   of a single sta
22d20 74 65 6d 65 6e 74 2e 20 20 4f 72 64 69 6e 61 72  tement.  Ordinar
22d30 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 0a 65  y common table.e
22d40 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 75  xpressions are u
22d50 73 65 66 75 6c 20 66 6f 72 20 66 61 63 74 6f 72  seful for factor
22d60 69 6e 67 20 6f 75 74 20 73 75 62 71 75 65 72 69  ing out subqueri
22d70 65 73 20 61 6e 64 20 6d 61 6b 69 6e 67 20 74 68  es and making th
22d80 65 20 6f 76 65 72 61 6c 6c 0a 53 51 4c 20 73 74  e overall.SQL st
22d90 61 74 65 6d 65 6e 74 20 65 61 73 69 65 72 20 74  atement easier t
22da0 6f 20 72 65 61 64 20 61 6e 64 20 75 6e 64 65 72  o read and under
22db0 73 74 61 6e 64 2e 0a 0a 3c 70 3e 41 20 57 49 54  stand...<p>A WIT
22dc0 48 20 63 6c 61 75 73 65 20 63 61 6e 20 63 6f 6e  H clause can con
22dd0 74 61 69 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f  tain ordinary co
22de0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
22df0 73 73 69 6f 6e 73 20 65 76 65 6e 20 69 66 0a 69  ssions even if.i
22e00 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 52  t includes the R
22e10 45 43 55 52 53 49 56 45 20 6b 65 79 77 6f 72 64  ECURSIVE keyword
22e20 2e 20 20 54 68 65 20 75 73 65 20 6f 66 20 52 45  .  The use of RE
22e30 43 55 52 53 49 56 45 20 64 6f 65 73 20 6e 6f 74  CURSIVE does not
22e40 20 66 6f 72 63 65 0a 63 6f 6d 6d 6f 6e 20 74 61   force.common ta
22e50 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ble expressions 
22e60 74 6f 20 62 65 20 72 65 63 75 72 73 69 76 65 2e  to be recursive.
22e70 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d  ..<tcl>.hd_fragm
22e80 65 6e 74 20 72 65 63 75 72 73 69 76 65 63 74 65  ent recursivecte
22e90 20 7b 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d   {recursive comm
22ea0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22eb0 69 6f 6e 73 7d 20 5c 0a 7b 72 65 63 75 72 73 69  ions} \.{recursi
22ec0 76 65 20 71 75 65 72 79 7d 0a 3c 2f 74 63 6c 3e  ve query}.</tcl>
22ed0 0a 3c 68 33 3e 52 65 63 75 72 73 69 76 65 20 43  .<h3>Recursive C
22ee0 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72  ommon Table Expr
22ef0 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
22f00 3e 41 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d  >A recursive com
22f10 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
22f20 73 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  sion can be used
22f30 20 74 6f 20 77 72 69 74 65 20 61 20 71 75 65 72   to write a quer
22f40 79 20 74 68 61 74 0a 77 61 6c 6b 73 20 61 20 74  y that.walks a t
22f50 72 65 65 20 6f 72 20 67 72 61 70 68 2e 20 20 41  ree or graph.  A
22f60 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f   recursive commo
22f70 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
22f80 6f 6e 20 68 61 73 20 74 68 65 20 73 61 6d 65 0a  on has the same.
22f90 62 61 73 69 63 20 73 79 6e 74 61 78 20 61 73 20  basic syntax as 
22fa0 61 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  an ordinary comm
22fb0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
22fc0 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20 74 68  ion, but with th
22fd0 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 61 64 64 69  e following.addi
22fe0 74 69 6f 6e 61 6c 20 66 65 61 74 75 72 65 73 3a  tional features:
22ff0 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54 68 65 20  ..<ol>.<li> The 
23000 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 0a  "[select-stmt]".
23010 20 20 20 20 20 6d 75 73 74 20 62 65 20 61 20 5b       must be a [
23020 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d  compound select]
23030 20 77 68 65 72 65 20 74 68 65 20 72 69 67 68 74   where the right
23040 2d 6d 6f 73 74 20 5b 63 6f 6d 70 6f 75 6e 64 2d  -most [compound-
23050 6f 70 65 72 61 74 6f 72 5d 20 69 73 0a 20 20 20  operator] is.   
23060 20 20 65 69 74 68 65 72 20 55 4e 49 4f 4e 20 6f    either UNION o
23070 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c 6c 69  r UNION ALL..<li
23080 3e 20 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  > The table name
23090 64 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61  d on the left-ha
230a0 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 41  nd side of the A
230b0 53 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 61  S keyword must a
230c0 70 70 65 61 72 0a 20 20 20 20 20 65 78 61 63 74  ppear.     exact
230d0 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 46  ly once in the F
230e0 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ROM clause of th
230f0 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 53 45 4c  e right-most SEL
23100 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 20 20  ECT statement.  
23110 20 20 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75     of the compou
23120 6e 64 20 73 65 6c 65 63 74 2c 20 61 6e 64 20 6e  nd select, and n
23130 6f 77 68 65 72 65 20 65 6c 73 65 2e 0a 3c 2f 6f  owhere else..</o
23140 6c 3e 0a 0a 3c 70 3e 54 6f 20 70 75 74 20 69 74  l>..<p>To put it
23150 20 61 6e 6f 74 68 65 72 20 77 61 79 2c 20 61 20   another way, a 
23160 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  recursive common
23170 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
23180 6e 20 6d 75 73 74 0a 6c 6f 6f 6b 20 6c 69 6b 65  n must.look like
23190 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a   the following:.
231a0 0a 3c 74 63 6c 3e 52 65 63 75 72 73 69 76 65 42  .<tcl>RecursiveB
231b0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 63  ubbleDiagram rec
231c0 75 72 73 69 76 65 2d 63 74 65 3c 2f 74 63 6c 3e  ursive-cte</tcl>
231d0 0a 0a 3c 70 3e 57 65 20 72 65 66 65 72 20 74 6f  ..<p>We refer to
231e0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64   the table named
231f0 20 62 79 20 74 68 65 20 63 74 65 2d 74 61 62 6c   by the cte-tabl
23200 65 2d 6e 61 6d 65 20 69 6e 20 61 20 72 65 63 75  e-name in a recu
23210 72 73 69 76 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62  rsive.common tab
23220 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  le expression as
23230 20 74 68 65 20 22 72 65 63 75 72 73 69 76 65 20   the "recursive 
23240 74 61 62 6c 65 22 2e 0a 49 6e 20 74 68 65 20 72  table"..In the r
23250 65 63 75 72 73 69 76 65 2d 63 74 65 20 62 75 62  ecursive-cte bub
23260 62 6c 65 20 64 69 61 67 72 61 6d 20 61 62 6f 76  ble diagram abov
23270 65 2c 20 74 68 65 20 72 65 63 75 72 73 69 76 65  e, the recursive
23280 0a 74 61 62 6c 65 20 6d 75 73 74 20 61 70 70 65  .table must appe
23290 61 72 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20  ar exactly once 
232a0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
232b0 73 65 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  se of the recurs
232c0 69 76 65 2d 73 65 6c 65 63 74 0a 61 6e 64 20 6d  ive-select.and m
232d0 75 73 74 20 6e 6f 74 20 61 70 70 65 61 72 20 61  ust not appear a
232e0 6e 79 77 68 65 72 65 20 65 6c 73 65 20 69 6e 20  nywhere else in 
232f0 65 69 74 68 65 72 20 74 68 65 20 69 6e 69 74 69  either the initi
23300 61 6c 2d 73 65 6c 65 63 74 20 6f 72 20 74 68 65  al-select or the
23310 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  .recursive-selec
23320 74 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 75 62  t, including sub
23330 71 75 65 72 69 65 73 2e 20 20 54 68 65 20 69 6e  queries.  The in
23340 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 6d 61 79  itial-select may
23350 20 62 65 0a 61 20 5b 63 6f 6d 70 6f 75 6e 64 20   be.a [compound 
23360 73 65 6c 65 63 74 5d 2c 20 62 75 74 20 69 74 20  select], but it 
23370 6d 61 79 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20  may not include 
23380 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d  an ORDER BY, LIM
23390 49 54 2c 20 6f 72 20 4f 46 46 53 45 54 2e 0a 54  IT, or OFFSET..T
233a0 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
233b0 65 63 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ect must be a si
233c0 6d 70 6c 65 20 73 65 6c 65 63 74 2c 20 6e 6f 74  mple select, not
233d0 20 61 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 54 68   a compound.  Th
233e0 65 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e.recursive-sele
233f0 63 74 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ct is allowed to
23400 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45   include an ORDE
23410 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20 61 6e 64  R BY, LIMIT, and
23420 2f 6f 72 20 4f 46 46 53 45 54 2e 0a 0a 3c 70 3e  /or OFFSET...<p>
23430 54 68 65 20 62 61 73 69 63 20 61 6c 67 6f 72 69  The basic algori
23440 74 68 6d 20 66 6f 72 20 63 6f 6d 70 75 74 69 6e  thm for computin
23450 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
23460 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
23470 61 62 6c 65 0a 69 73 20 61 73 20 66 6f 6c 6c 6f  able.is as follo
23480 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 52  ws:..<ol>.<li> R
23490 75 6e 20 74 68 65 20 69 6e 69 74 69 61 6c 2d 73  un the initial-s
234a0 65 6c 65 63 74 20 61 6e 64 20 61 64 64 20 74 68  elect and add th
234b0 65 20 72 65 73 75 6c 74 73 20 74 6f 20 61 20 71  e results to a q
234c0 75 65 75 65 2e 0a 3c 6c 69 3e 20 57 68 69 6c 65  ueue..<li> While
234d0 20 74 68 65 20 71 75 65 75 65 20 69 73 20 6e 6f   the queue is no
234e0 74 20 65 6d 70 74 79 3a 0a 3c 6f 6c 20 74 79 70  t empty:.<ol typ
234f0 65 3d 22 61 22 3e 0a 3c 6c 69 3e 20 45 78 74 72  e="a">.<li> Extr
23500 61 63 74 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  act a single row
23510 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 2e   from the queue.
23520 0a 3c 6c 69 3e 20 49 6e 73 65 72 74 20 74 68 61  .<li> Insert tha
23530 74 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e 74  t single row int
23540 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
23550 74 61 62 6c 65 0a 3c 6c 69 3e 20 50 72 65 74 65  table.<li> Prete
23560 6e 64 20 74 68 61 74 20 74 68 65 20 73 69 6e 67  nd that the sing
23570 6c 65 20 72 6f 77 20 6a 75 73 74 20 65 78 74 72  le row just extr
23580 61 63 74 65 64 20 69 73 20 74 68 65 20 6f 6e 6c  acted is the onl
23590 79 0a 20 20 20 20 20 72 6f 77 20 69 6e 20 74 68  y.     row in th
235a0 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
235b0 65 20 61 6e 64 20 72 75 6e 20 74 68 65 20 72 65  e and run the re
235c0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 0a  cursive-select,.
235d0 20 20 20 20 20 61 64 64 69 6e 67 20 61 6c 6c 20       adding all 
235e0 72 65 73 75 6c 74 73 20 74 6f 20 74 68 65 20 71  results to the q
235f0 75 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 6f 6c  ueue..</ol>.</ol
23600 3e 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63 20  >..<p>The basic 
23610 70 72 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20  procedure above 
23620 6d 61 79 20 6d 6f 64 69 66 69 65 64 20 62 79 20  may modified by 
23630 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64  the following ad
23640 64 69 74 69 6f 6e 61 6c 20 72 75 6c 65 73 3a 0a  ditional rules:.
23650 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  .<ul>.<li><p>.  
23660 49 66 20 61 20 55 4e 49 4f 4e 20 6f 70 65 72 61  If a UNION opera
23670 74 6f 72 20 63 6f 6e 6e 65 63 74 73 20 74 68 65  tor connects the
23680 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20   initial-select 
23690 77 69 74 68 20 74 68 65 0a 20 20 72 65 63 75 72  with the.  recur
236a0 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 74 68 65  sive-select, the
236b0 6e 20 6f 6e 6c 79 20 61 64 64 20 72 6f 77 73 20  n only add rows 
236c0 74 6f 20 74 68 65 20 71 75 65 75 65 20 69 66 20  to the queue if 
236d0 6e 6f 20 69 64 65 6e 74 69 63 61 6c 20 72 6f 77  no identical row
236e0 20 68 61 73 0a 20 20 62 65 65 6e 20 70 72 65 76   has.  been prev
236f0 69 6f 75 73 6c 79 20 61 64 64 65 64 20 74 6f 20  iously added to 
23700 74 68 65 20 71 75 65 75 65 2e 20 20 52 65 70 65  the queue.  Repe
23710 61 74 65 64 20 72 6f 77 73 20 61 72 65 20 64 69  ated rows are di
23720 73 63 61 72 64 65 64 20 62 65 66 6f 72 65 20 62  scarded before b
23730 65 69 6e 67 0a 20 20 61 64 64 65 64 20 74 6f 20  eing.  added to 
23740 74 68 65 20 71 75 65 75 65 20 65 76 65 6e 20 69  the queue even i
23750 66 20 74 68 65 20 72 65 70 65 61 74 65 64 20 72  f the repeated r
23760 6f 77 73 20 68 61 76 65 20 61 6c 72 65 61 64 79  ows have already
23770 20 62 65 65 6e 20 65 78 74 72 61 63 74 65 64 0a   been extracted.
23780 20 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65    from the queue
23790 20 62 79 20 74 68 65 20 72 65 63 75 72 73 69 6f   by the recursio
237a0 6e 20 73 74 65 70 2e 20 20 49 66 20 74 68 65 20  n step.  If the 
237b0 6f 70 65 72 61 74 6f 72 20 69 73 20 55 4e 49 4f  operator is UNIO
237c0 4e 20 41 4c 4c 2c 0a 20 20 74 68 65 6e 20 61 6c  N ALL,.  then al
237d0 6c 20 72 6f 77 73 20 67 65 6e 65 72 61 74 65 64  l rows generated
237e0 20 62 79 20 62 6f 74 68 20 74 68 65 20 69 6e 69   by both the ini
237f0 74 69 61 6c 2d 73 65 6c 65 63 74 20 61 6e 64 20  tial-select and 
23800 74 68 65 0a 20 20 72 65 63 75 72 73 69 76 65 2d  the.  recursive-
23810 73 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79  select are alway
23820 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71  s added to the q
23830 75 65 75 65 20 65 76 65 6e 20 69 66 20 74 68 65  ueue even if the
23840 79 20 61 72 65 20 72 65 70 65 61 74 73 2e 0a 20  y are repeats.. 
23850 20 57 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e   When determinin
23860 67 20 69 66 20 61 20 72 6f 77 20 69 73 20 72 65  g if a row is re
23870 70 65 61 74 65 64 2c 20 4e 55 4c 4c 20 76 61 6c  peated, NULL val
23880 75 65 73 20 63 6f 6d 70 61 72 65 0a 20 20 65 71  ues compare.  eq
23890 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68  ual to one anoth
238a0 65 72 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c  er and not equal
238b0 20 74 6f 20 61 6e 79 20 6f 74 68 65 72 20 76 61   to any other va
238c0 6c 75 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54  lue..<li><p>.  T
238d0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c  he LIMIT clause,
238e0 20 69 66 20 70 72 65 73 65 6e 74 2c 20 64 65 74   if present, det
238f0 65 72 6d 69 6e 65 73 20 74 68 65 20 6d 61 78 69  ermines the maxi
23900 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mum number of ro
23910 77 73 20 74 68 61 74 0a 20 20 77 69 6c 6c 20 65  ws that.  will e
23920 76 65 72 20 62 65 20 61 64 64 65 64 20 74 6f 20  ver be added to 
23930 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61  the recursive ta
23940 62 6c 65 20 69 6e 20 73 74 65 70 20 32 62 2e 0a  ble in step 2b..
23950 20 20 4f 6e 63 65 20 74 68 65 20 6c 69 6d 69 74    Once the limit
23960 20 69 73 20 72 65 61 63 68 65 64 2c 20 74 68 65   is reached, the
23970 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 73   recursion stops
23980 2e 0a 20 20 41 20 6c 69 6d 69 74 20 6f 66 20 7a  ..  A limit of z
23990 65 72 6f 20 6d 65 61 6e 73 20 74 68 61 74 20 6e  ero means that n
239a0 6f 20 72 6f 77 73 20 61 72 65 20 65 76 65 72 20  o rows are ever 
239b0 61 64 64 65 64 20 74 6f 20 74 68 65 0a 20 20 72  added to the.  r
239c0 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2c 20  ecursive table, 
239d0 61 6e 64 20 61 20 6e 65 67 61 74 69 76 65 20 6c  and a negative l
239e0 69 6d 69 74 20 6d 65 61 6e 73 20 61 6e 20 75 6e  imit means an un
239f0 6c 69 6d 69 74 65 64 20 6e 75 6d 62 65 72 20 6f  limited number o
23a00 66 20 72 6f 77 73 0a 20 20 6d 61 79 20 62 65 20  f rows.  may be 
23a10 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65 63  added to the rec
23a20 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 3c 6c  ursive table..<l
23a30 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4f 46 46 53  i><p>.  The OFFS
23a40 45 54 20 63 6c 61 75 73 65 2c 20 69 66 20 69 74  ET clause, if it
23a50 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20   is present and 
23a60 68 61 73 20 61 20 70 6f 73 69 74 69 76 65 20 76  has a positive v
23a70 61 6c 75 65 20 4e 2c 20 70 72 65 76 65 6e 74 73  alue N, prevents
23a80 20 74 68 65 0a 20 20 66 69 72 73 74 20 4e 20 72   the.  first N r
23a90 6f 77 73 20 66 72 6f 6d 20 62 65 69 6e 67 20 61  ows from being a
23aa0 64 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75  dded to the recu
23ab0 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 20 20 54  rsive table..  T
23ac0 68 65 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20  he first N rows 
23ad0 61 72 65 20 73 74 69 6c 6c 20 70 72 6f 63 65 73  are still proces
23ae0 73 65 64 20 62 79 20 74 68 65 20 72 65 63 75 72  sed by the recur
23af0 73 69 76 65 2d 73 65 6c 65 63 74 3b 20 74 68 65  sive-select; the
23b00 79 0a 20 20 6a 75 73 74 20 61 72 65 20 6e 6f 74  y.  just are not
23b10 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
23b20 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 20 20  cursive table.  
23b30 52 6f 77 73 20 61 72 65 20 6e 6f 74 20 63 6f 75  Rows are not cou
23b40 6e 74 65 64 20 74 6f 77 61 72 64 0a 20 20 66 75  nted toward.  fu
23b50 6c 66 69 6c 6c 69 6e 67 20 74 68 65 20 4c 49 4d  lfilling the LIM
23b60 49 54 20 75 6e 74 69 6c 20 61 6c 6c 20 4f 46 46  IT until all OFF
23b70 53 45 54 20 72 6f 77 73 20 68 61 76 65 20 62 65  SET rows have be
23b80 65 6e 20 73 6b 69 70 70 65 64 2e 0a 3c 6c 69 3e  en skipped..<li>
23b90 3c 70 3e 0a 20 20 49 66 20 61 6e 20 4f 52 44 45  <p>.  If an ORDE
23ba0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 70  R BY clause is p
23bb0 72 65 73 65 6e 74 2c 20 69 74 20 64 65 74 65 72  resent, it deter
23bc0 6d 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20  mines the order 
23bd0 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 20 20  in which rows.  
23be0 61 72 65 20 65 78 74 72 61 63 74 65 64 20 66 72  are extracted fr
23bf0 6f 6d 20 74 68 65 20 71 75 65 75 65 20 69 6e 20  om the queue in 
23c00 73 74 65 70 20 32 61 2e 20 20 49 66 20 74 68 65  step 2a.  If the
23c10 72 65 20 69 73 20 6e 6f 20 4f 52 44 45 52 20 42  re is no ORDER B
23c20 59 20 63 6c 61 75 73 65 2c 0a 20 20 74 68 65 6e  Y clause,.  then
23c30 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   the order in wh
23c40 69 63 68 20 72 6f 77 73 20 61 72 65 20 65 78 74  ich rows are ext
23c50 72 61 63 74 65 64 20 69 73 20 75 6e 64 65 66 69  racted is undefi
23c60 6e 65 64 2e 20 20 28 49 6e 20 74 68 65 20 63 75  ned.  (In the cu
23c70 72 72 65 6e 74 0a 20 20 69 6d 70 6c 65 6d 65 6e  rrent.  implemen
23c80 74 61 74 69 6f 6e 2c 20 74 68 65 20 71 75 65 75  tation, the queu
23c90 65 20 62 65 63 6f 6d 65 73 20 61 20 46 49 46 4f  e becomes a FIFO
23ca0 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
23cb0 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74   clause is omitt
23cc0 65 64 2c 0a 20 20 62 75 74 20 61 70 70 6c 69 63  ed,.  but applic
23cd0 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f  ations should no
23ce0 74 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 61 74  t depend on that
23cf0 20 66 61 63 74 20 73 69 6e 63 65 20 69 74 20 6d   fact since it m
23d00 69 67 68 74 20 63 68 61 6e 67 65 2e 29 0a 3c 2f  ight change.).</
23d10 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ul>..<tcl>hd_fra
23d20 67 6d 65 6e 74 20 72 63 65 78 31 3c 2f 74 63 6c  gment rcex1</tcl
23d30 3e 0a 3c 68 34 3e 52 65 63 75 72 73 69 76 65 20  >.<h4>Recursive 
23d40 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f  Query Examples</
23d50 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h4>..<p>The foll
23d60 6f 77 69 6e 67 20 71 75 65 72 79 20 72 65 74 75  owing query retu
23d70 72 6e 73 20 61 6c 6c 20 69 6e 74 65 67 65 72 73  rns all integers
23d80 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 31   between 1 and 1
23d90 30 30 30 30 30 30 3a 0a 0a 3c 62 6c 6f 63 6b 71  000000:..<blockq
23da0 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
23db0 52 45 43 55 52 53 49 56 45 0a 20 20 63 6e 74 28  RECURSIVE.  cnt(
23dc0 78 29 20 41 53 20 28 56 41 4c 55 45 53 28 31 29  x) AS (VALUES(1)
23dd0 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
23de0 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74 20 57  T x+1 FROM cnt W
23df0 48 45 52 45 20 78 3c 31 30 30 30 30 30 30 29 0a  HERE x<1000000).
23e00 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 6e  SELECT x FROM cn
23e10 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t;.</pre></block
23e20 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6e 73 69  quote>..<p>Consi
23e30 64 65 72 20 68 6f 77 20 74 68 69 73 20 71 75 65  der how this que
23e40 72 79 20 77 6f 72 6b 73 2e 20 20 54 68 65 20 69  ry works.  The i
23e50 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 0a 72 75  nitial-select.ru
23e60 6e 73 20 66 69 72 73 74 20 61 6e 64 20 72 65 74  ns first and ret
23e70 75 72 6e 73 20 61 20 73 69 6e 67 6c 65 20 72 6f  urns a single ro
23e80 77 0a 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  w.with a single 
23e90 63 6f 6c 75 6d 6e 20 22 31 22 2e 20 20 54 68 69  column "1".  Thi
23ea0 73 20 6f 6e 65 20 72 6f 77 20 69 73 20 61 64 64  s one row is add
23eb0 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e  ed to the queue.
23ec0 20 20 49 6e 0a 73 74 65 70 20 32 61 2c 20 74 68    In.step 2a, th
23ed0 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 65 78  at one row is ex
23ee0 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65  tracted from the
23ef0 20 71 75 65 75 65 20 61 6e 64 20 61 64 64 65 64   queue and added
23f00 20 74 6f 20 22 63 6e 74 22 2e 0a 54 68 65 6e 20   to "cnt"..Then 
23f10 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
23f20 6c 65 63 74 20 69 73 20 72 75 6e 20 69 6e 20 61  lect is run in a
23f30 63 63 6f 72 64 61 6e 63 65 20 77 69 74 68 20 73  ccordance with s
23f40 74 65 70 20 32 63 20 67 65 6e 65 72 61 74 69 6e  tep 2c generatin
23f50 67 0a 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72  g.a single new r
23f60 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20 22 32  ow with value "2
23f70 22 20 74 6f 20 61 64 64 20 74 6f 20 74 68 65 20  " to add to the 
23f80 71 75 65 75 65 2e 20 20 54 68 65 20 71 75 65 75  queue.  The queu
23f90 65 20 73 74 69 6c 6c 0a 68 61 73 20 6f 6e 65 20  e still.has one 
23fa0 72 6f 77 2c 20 73 6f 20 73 74 65 70 20 32 20 72  row, so step 2 r
23fb0 65 70 65 61 74 73 2e 20 20 54 68 65 20 22 32 22  epeats.  The "2"
23fc0 20 72 6f 77 20 69 73 20 65 78 74 72 61 63 74 65   row is extracte
23fd0 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74  d and added to t
23fe0 68 65 0a 72 65 63 75 72 73 69 76 65 20 74 61 62  he.recursive tab
23ff0 6c 65 20 62 79 20 73 74 65 70 73 20 32 61 20 61  le by steps 2a a
24000 6e 64 20 32 62 2e 20 20 54 68 65 6e 20 74 68 65  nd 2b.  Then the
24010 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20   row containing 
24020 32 20 69 73 20 75 73 65 64 20 0a 61 73 20 69 66  2 is used .as if
24030 20 69 74 20 77 65 72 65 20 74 68 65 20 63 6f 6d   it were the com
24040 70 6c 65 74 65 20 63 6f 6e 74 65 6e 74 20 6f 66  plete content of
24050 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
24060 61 62 6c 65 20 61 6e 64 20 74 68 65 20 0a 72 65  able and the .re
24070 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 69  cursive-select i
24080 73 20 72 75 6e 20 61 67 61 69 6e 2c 20 72 65 73  s run again, res
24090 75 6c 74 69 6e 67 20 69 6e 20 61 20 72 6f 77 20  ulting in a row 
240a0 77 69 74 68 20 76 61 6c 75 65 20 22 33 22 20 62  with value "3" b
240b0 65 69 6e 67 20 61 64 64 65 64 0a 74 6f 20 74 68  eing added.to th
240c0 65 20 71 75 65 75 65 2e 20 20 54 68 69 73 20 72  e queue.  This r
240d0 65 70 65 61 74 73 20 39 39 39 39 39 39 20 74 69  epeats 999999 ti
240e0 6d 65 73 20 75 6e 74 69 6c 20 66 69 6e 61 6c 6c  mes until finall
240f0 79 20 61 74 20 73 74 65 70 20 32 61 20 74 68 65  y at step 2a the
24100 0a 6f 6e 6c 79 20 76 61 6c 75 65 20 6f 6e 20 74  .only value on t
24110 68 65 20 71 75 65 75 65 20 69 73 20 61 20 72 6f  he queue is a ro
24120 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 31 30 30  w containing 100
24130 30 30 30 30 2e 20 20 54 68 61 74 20 72 6f 77 20  0000.  That row 
24140 69 73 0a 65 78 74 72 61 63 74 65 64 20 61 6e 64  is.extracted and
24150 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
24160 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 20 20  cursive table.  
24170 42 75 74 20 74 68 69 73 20 74 69 6d 65 2c 20 74  But this time, t
24180 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
24190 63 61 75 73 65 73 20 74 68 65 20 72 65 63 75 72  causes the recur
241a0 73 69 76 65 2d 73 65 6c 65 63 74 20 74 6f 20 72  sive-select to r
241b0 65 74 75 72 6e 20 6e 6f 20 72 6f 77 73 2c 20 73  eturn no rows, s
241c0 6f 20 74 68 65 0a 71 75 65 75 65 20 72 65 6d 61  o the.queue rema
241d0 69 6e 73 20 65 6d 70 74 79 20 61 6e 64 20 74 68  ins empty and th
241e0 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70  e recursion stop
241f0 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70 74 69 6d 69  s...<p><b>Optimi
24200 7a 61 74 69 6f 6e 20 6e 6f 74 65 3a 3c 2f 62 3e  zation note:</b>
24210 0a 49 6e 20 74 68 65 20 64 69 73 63 75 73 73 69  .In the discussi
24220 6f 6e 20 61 62 6f 76 65 2c 20 73 74 61 74 65 6d  on above, statem
24230 65 6e 74 73 20 6c 69 6b 65 20 22 69 6e 73 65 72  ents like "inser
24240 74 20 74 68 65 20 72 6f 77 20 69 6e 74 6f 0a 74  t the row into.t
24250 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
24260 6c 65 22 20 73 68 6f 75 6c 64 20 62 65 20 75 6e  le" should be un
24270 64 65 72 73 74 6f 6f 64 20 63 6f 6e 63 65 70 74  derstood concept
24280 75 61 6c 6c 79 2c 20 6e 6f 74 20 6c 69 74 65 72  ually, not liter
24290 61 6c 6c 79 2e 0a 49 74 20 73 6f 75 6e 64 73 20  ally..It sounds 
242a0 61 73 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  as if SQLite is 
242b0 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 61 20 68  accumulating a h
242c0 75 67 65 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69  uge table.contai
242d0 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c 6c 69 6f 6e  ning one million
242e0 20 72 6f 77 73 2c 20 74 68 65 6e 20 67 6f 69 6e   rows, then goin
242f0 67 20 62 61 63 6b 20 61 6e 64 20 73 63 61 6e 6e  g back and scann
24300 69 6e 67 20 74 68 61 74 20 74 61 62 6c 65 0a 66  ing that table.f
24310 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f 74 74 6f  rom top to botto
24320 6d 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74 68  m to generate th
24330 65 20 72 65 73 75 6c 74 2e 20 20 57 68 61 74 20  e result.  What 
24340 72 65 61 6c 6c 79 20 68 61 70 70 65 6e 73 0a 69  really happens.i
24350 73 20 74 68 61 74 20 74 68 65 20 71 75 65 72 79  s that the query
24360 20 6f 70 74 69 6d 69 7a 65 72 20 73 65 65 73 20   optimizer sees 
24370 74 68 61 74 20 76 61 6c 75 65 73 20 69 6e 20 74  that values in t
24380 68 65 0a 22 63 6e 74 22 20 72 65 63 75 72 73 69  he."cnt" recursi
24390 76 65 20 74 61 62 6c 65 20 61 72 65 20 6f 6e 6c  ve table are onl
243a0 79 20 75 73 65 64 20 6f 6e 63 65 2e 20 20 53 6f  y used once.  So
243b0 20 61 73 20 65 61 63 68 20 72 6f 77 20 69 73 20   as each row is 
243c0 61 64 64 65 64 20 74 6f 0a 74 68 65 20 72 65 63  added to.the rec
243d0 75 72 73 69 76 65 20 74 61 62 6c 65 2c 20 74 68  ursive table, th
243e0 61 74 20 72 6f 77 20 69 73 20 69 6d 6d 65 64 69  at row is immedi
243f0 61 74 65 6c 79 20 72 65 74 75 72 6e 65 64 20 61  ately returned a
24400 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 74 68  s a result of th
24410 65 20 6d 61 69 6e 0a 53 45 4c 45 43 54 20 73 74  e main.SELECT st
24420 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 6e  atement and then
24430 20 64 69 73 63 61 72 64 65 64 2e 20 20 53 51 4c   discarded.  SQL
24440 69 74 65 20 64 6f 65 73 20 3c 65 6d 3e 6e 6f 74  ite does <em>not
24450 3c 2f 65 6d 3e 20 61 63 63 75 6d 75 6c 61 74 65  </em> accumulate
24460 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  .a temporary tab
24470 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 20  le containing a 
24480 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2e 20 20 56  million rows.  V
24490 65 72 79 20 6c 69 74 74 6c 65 20 6d 65 6d 6f 72  ery little memor
244a0 79 20 69 73 0a 6e 65 65 64 65 64 20 74 6f 20 72  y is.needed to r
244b0 75 6e 20 74 68 65 20 61 62 6f 76 65 20 65 78 61  un the above exa
244c0 6d 70 6c 65 2e 20 20 48 6f 77 65 76 65 72 2c 20  mple.  However, 
244d0 69 66 20 74 68 65 20 65 78 61 6d 70 6c 65 20 68  if the example h
244e0 61 64 20 75 73 65 64 0a 55 4e 49 4f 4e 20 69 6e  ad used.UNION in
244f0 73 74 65 61 64 20 6f 66 20 55 4e 49 4f 4e 20 41  stead of UNION A
24500 4c 4c 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20  LL, then SQLite 
24510 77 6f 75 6c 64 20 68 61 76 65 20 68 61 64 20 74  would have had t
24520 6f 20 6b 65 65 70 20 61 72 6f 75 6e 64 0a 61 6c  o keep around.al
24530 6c 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  l previously gen
24540 65 72 61 74 65 64 20 63 6f 6e 74 65 6e 74 20 69  erated content i
24550 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63 6b  n order to check
24560 20 66 6f 72 20 64 75 70 6c 69 63 61 74 65 73 2e   for duplicates.
24570 0a 46 6f 72 20 74 68 69 73 20 72 65 61 73 6f 6e  .For this reason
24580 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 73 68  , programmers sh
24590 6f 75 6c 64 20 73 74 72 69 76 65 20 74 6f 20 75  ould strive to u
245a0 73 65 20 55 4e 49 4f 4e 20 41 4c 4c 20 69 6e 73  se UNION ALL ins
245b0 74 65 61 64 0a 6f 66 20 55 4e 49 4f 4e 20 77 68  tead.of UNION wh
245c0 65 6e 20 66 65 61 73 69 62 6c 65 2e 0a 0a 3c 70  en feasible...<p
245d0 3e 48 65 72 65 20 69 73 20 61 20 76 61 72 69 61  >Here is a varia
245e0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 70 72 65 76  tion on the prev
245f0 69 6f 75 73 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c  ious example:..<
24600 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
24610 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
24620 20 20 63 6e 74 28 78 29 20 41 53 20 28 0a 20 20    cnt(x) AS (.  
24630 20 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20 20     SELECT 1.    
24640 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20   UNION ALL.     
24650 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20  SELECT x+1 FROM 
24660 63 6e 74 0a 20 20 20 20 20 20 4c 49 4d 49 54 20  cnt.      LIMIT 
24670 31 30 30 30 30 30 30 0a 20 20 29 0a 53 45 4c 45  1000000.  ).SELE
24680 43 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c  CT x FROM cnt;.<
24690 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
246a0 65 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  e>..<p>There are
246b0 20 74 77 6f 20 64 69 66 66 65 72 65 6e 63 65 73   two differences
246c0 20 69 6e 20 74 68 69 73 20 76 61 72 69 61 74 69   in this variati
246d0 6f 6e 2e 20 20 54 68 65 20 69 6e 69 74 69 61 6c  on.  The initial
246e0 2d 73 65 6c 65 63 74 20 69 73 0a 22 53 45 4c 45  -select is."SELE
246f0 43 54 20 31 22 20 69 6e 73 74 65 61 64 20 6f 66  CT 1" instead of
24700 20 22 56 41 4c 55 45 53 28 31 29 22 2e 20 20 42   "VALUES(1)".  B
24710 75 74 20 74 68 6f 73 65 20 61 72 65 20 6a 75 73  ut those are jus
24720 74 20 64 69 66 66 65 72 65 6e 74 0a 73 79 6e 74  t different.synt
24730 61 78 65 73 20 66 6f 72 20 73 61 79 69 6e 67 20  axes for saying 
24740 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
24750 20 74 68 69 6e 67 2e 20 20 54 68 65 20 6f 74 68   thing.  The oth
24760 65 72 20 63 68 61 6e 67 65 20 69 73 20 74 68 61  er change is tha
24770 74 20 74 68 65 0a 72 65 63 75 72 73 69 6f 6e 20  t the.recursion 
24780 69 73 20 73 74 6f 70 70 65 64 20 62 79 20 61 20  is stopped by a 
24790 4c 49 4d 49 54 20 72 61 74 68 65 72 20 74 68 61  LIMIT rather tha
247a0 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  n a WHERE clause
247b0 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 4c 49  .  The use of.LI
247c0 4d 49 54 20 6d 65 61 6e 73 20 74 68 61 74 20 77  MIT means that w
247d0 68 65 6e 20 74 68 65 20 6f 6e 65 2d 6d 69 6c 6c  hen the one-mill
247e0 69 6f 6e 74 68 20 72 6f 77 20 69 73 20 61 64 64  ionth row is add
247f0 65 64 20 74 6f 20 74 68 65 20 22 63 6e 74 22 20  ed to the "cnt" 
24800 74 61 62 6c 65 0a 28 61 6e 64 20 72 65 74 75 72  table.(and retur
24810 6e 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e 20  ned by the main 
24820 53 45 4c 45 43 54 2c 20 74 68 61 6e 6b 73 20 74  SELECT, thanks t
24830 6f 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  o the query opti
24840 6d 69 7a 65 72 29 0a 74 68 65 6e 20 74 68 65 20  mizer).then the 
24850 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 20  recursion stops 
24860 69 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 67 61  immediately rega
24870 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d 61  rdless of how ma
24880 6e 79 20 72 6f 77 73 20 6d 69 67 68 74 20 62 65  ny rows might be
24890 0a 6c 65 66 74 20 69 6e 20 74 68 65 20 71 75 65  .left in the que
248a0 75 65 2e 20 20 4f 6e 20 6d 6f 72 65 20 63 6f 6d  ue.  On more com
248b0 70 6c 65 78 20 71 75 65 72 69 65 73 2c 20 69 74  plex queries, it
248c0 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62   can sometimes b
248d0 65 0a 64 69 66 66 69 63 75 6c 74 20 74 6f 20 65  e.difficult to e
248e0 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 57  nsure that the W
248f0 48 45 52 45 20 63 6c 61 75 73 65 20 77 69 6c 6c  HERE clause will
24900 20 65 76 65 6e 74 75 61 6c 6c 79 20 63 61 75 73   eventually caus
24910 65 20 74 68 65 0a 71 75 65 75 65 20 74 6f 20 64  e the.queue to d
24920 72 61 69 6e 20 61 6e 64 20 74 68 65 20 72 65 63  rain and the rec
24930 75 72 73 69 6f 6e 20 74 6f 20 74 65 72 6d 69 6e  ursion to termin
24940 61 74 65 2e 20 20 42 75 74 20 74 68 65 20 4c 49  ate.  But the LI
24950 4d 49 54 20 63 6c 61 75 73 65 20 77 69 6c 6c 0a  MIT clause will.
24960 61 6c 77 61 79 73 20 73 74 6f 70 20 74 68 65 20  always stop the 
24970 72 65 63 75 72 73 69 6f 6e 2e 20 20 53 6f 20 69  recursion.  So i
24980 74 20 69 73 20 67 6f 6f 64 20 70 72 61 63 74 69  t is good practi
24990 63 65 20 74 6f 20 61 6c 77 61 79 73 20 69 6e 63  ce to always inc
249a0 6c 75 64 65 20 61 0a 4c 49 4d 49 54 20 63 6c 61  lude a.LIMIT cla
249b0 75 73 65 20 61 73 20 61 20 73 61 66 65 74 79 20  use as a safety 
249c0 69 66 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  if an upper boun
249d0 64 20 6f 6e 20 74 68 65 20 73 69 7a 65 20 6f 66  d on the size of
249e0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 0a   the recursion .
249f0 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 3c 74 63 6c 3e  is known...<tcl>
24a00 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78  hd_fragment rcex
24a10 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 48 69 65 72  2</tcl>.<h4>Hier
24a20 61 72 63 68 69 63 61 6c 20 51 75 65 72 79 20 45  archical Query E
24a30 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70  xamples</h4>..<p
24a40 3e 43 6f 6e 73 69 64 65 72 20 61 20 74 61 62 6c  >Consider a tabl
24a50 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
24a60 20 74 68 65 20 6d 65 6d 62 65 72 73 20 6f 66 20   the members of 
24a70 61 6e 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20  an organization 
24a80 61 73 0a 77 65 6c 6c 20 61 73 20 74 68 65 20 63  as.well as the c
24a90 68 61 69 6e 2d 6f 66 2d 63 6f 6d 6d 61 6e 64 20  hain-of-command 
24aa0 77 69 74 68 69 6e 20 74 68 61 74 20 6f 72 67 61  within that orga
24ab0 6e 69 7a 61 74 69 6f 6e 3a 0a 0a 3c 62 6c 6f 63  nization:..<bloc
24ac0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
24ad0 41 54 45 20 54 41 42 4c 45 20 6f 72 67 28 0a 20  ATE TABLE org(. 
24ae0 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41   name TEXT PRIMA
24af0 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73 20 54  RY KEY,.  boss T
24b00 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20 6f  EXT REFERENCES o
24b10 72 67 2c 0a 20 20 68 65 69 67 68 74 20 49 4e 54  rg,.  height INT
24b20 2c 0a 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e  ,.  -- other con
24b30 74 65 6e 74 20 6f 6d 69 74 74 65 64 0a 29 3b 0a  tent omitted.);.
24b40 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
24b50 74 65 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 6d 65  te>..<p>Every me
24b60 6d 62 65 72 20 69 6e 20 74 68 65 20 6f 72 67 61  mber in the orga
24b70 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20 61 20 6e  nization has a n
24b80 61 6d 65 2c 20 61 6e 64 20 6d 6f 73 74 20 6d 65  ame, and most me
24b90 6d 62 65 72 73 20 68 61 76 65 0a 61 20 73 69 6e  mbers have.a sin
24ba0 67 6c 65 20 62 6f 73 73 2e 20 20 28 54 68 65 20  gle boss.  (The 
24bb0 68 65 61 64 20 6f 66 20 74 68 65 20 77 68 6f 6c  head of the whol
24bc0 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68  e organization h
24bd0 61 73 20 61 20 4e 55 4c 4c 0a 22 62 6f 73 73 22  as a NULL."boss"
24be0 20 66 69 65 6c 64 2e 29 20 54 68 65 20 72 6f 77   field.) The row
24bf0 73 20 6f 66 20 74 68 65 20 22 6f 72 67 22 20 74  s of the "org" t
24c00 61 62 6c 65 20 66 6f 72 6d 20 61 20 74 72 65 65  able form a tree
24c10 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20  ...<p>Here is a 
24c20 71 75 65 72 79 20 74 68 61 74 20 63 6f 6d 70 75  query that compu
24c30 74 65 73 20 74 68 65 20 61 76 65 72 61 67 65 20  tes the average 
24c40 68 65 69 67 68 74 20 6f 76 65 72 20 65 76 65 72  height over ever
24c50 79 6f 6e 65 0a 69 6e 20 41 6c 69 63 65 27 73 20  yone.in Alice's 
24c60 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 2c 20 69 6e  organization, in
24c70 63 6c 75 64 69 6e 67 20 41 6c 69 63 65 3a 0a 0a  cluding Alice:..
24c80 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
24c90 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
24ca0 0a 20 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69  .  works_for_ali
24cb0 63 65 28 6e 29 20 41 53 20 28 0a 20 20 20 20 56  ce(n) AS (.    V
24cc0 41 4c 55 45 53 28 27 41 6c 69 63 65 27 29 0a 20  ALUES('Alice'). 
24cd0 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c     UNION.    SEL
24ce0 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 6f 72  ECT name FROM or
24cf0 67 2c 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69  g, works_for_ali
24d00 63 65 0a 20 20 20 20 20 57 48 45 52 45 20 6f 72  ce.     WHERE or
24d10 67 2e 62 6f 73 73 3d 77 6f 72 6b 73 5f 66 6f 72  g.boss=works_for
24d20 5f 61 6c 69 63 65 2e 6e 0a 20 20 29 0a 53 45 4c  _alice.n.  ).SEL
24d30 45 43 54 20 61 76 67 28 68 65 69 67 68 74 29 20  ECT avg(height) 
24d40 46 52 4f 4d 20 6f 72 67 0a 20 57 48 45 52 45 20  FROM org. WHERE 
24d50 6f 72 67 2e 6e 61 6d 65 20 49 4e 20 77 6f 72 6b  org.name IN work
24d60 73 5f 66 6f 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70  s_for_alice;.</p
24d70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
24d80 0a 0a 3c 70 3e 54 68 65 20 6e 65 78 74 20 65 78  ..<p>The next ex
24d90 61 6d 70 6c 65 20 75 73 65 73 20 74 77 6f 20 0a  ample uses two .
24da0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
24db0 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 73 69  ressions in a si
24dc0 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
24dd0 2e 20 20 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .  .The followin
24de0 67 20 74 61 62 6c 65 20 72 65 63 6f 72 64 73 20  g table records 
24df0 61 20 66 61 6d 69 6c 79 20 74 72 65 65 3a 0a 0a  a family tree:..
24e00 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
24e10 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 66  >.CREATE TABLE f
24e20 61 6d 69 6c 79 28 0a 20 20 6e 61 6d 65 20 54 45  amily(.  name TE
24e30 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  XT PRIMARY KEY,.
24e40 20 20 6d 6f 6d 20 54 45 58 54 20 52 45 46 45 52    mom TEXT REFER
24e50 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20  ENCES family,.  
24e60 64 61 64 20 54 45 58 54 20 52 45 46 45 52 45 4e  dad TEXT REFEREN
24e70 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20 62 6f  CES family,.  bo
24e80 72 6e 20 44 41 54 45 54 49 4d 45 2c 0a 20 20 64  rn DATETIME,.  d
24e90 69 65 64 20 44 41 54 45 54 49 4d 45 2c 20 2d 2d  ied DATETIME, --
24ea0 20 4e 55 4c 4c 20 69 66 20 73 74 69 6c 6c 20 61   NULL if still a
24eb0 6c 69 76 65 0a 20 20 2d 2d 20 6f 74 68 65 72 20  live.  -- other 
24ec0 63 6f 6e 74 65 6e 74 0a 29 3b 0a 3c 2f 70 72 65  content.);.</pre
24ed0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
24ee0 3c 70 3e 54 68 65 20 22 66 61 6d 69 6c 79 22 20  <p>The "family" 
24ef0 74 61 62 6c 65 20 69 73 20 73 69 6d 69 6c 61 72  table is similar
24f00 20 74 6f 20 74 68 65 20 65 61 72 6c 69 65 72 20   to the earlier 
24f10 22 6f 72 67 22 20 74 61 62 6c 65 20 65 78 63 65  "org" table exce
24f20 70 74 20 74 68 61 74 20 0a 6e 6f 77 20 74 68 65  pt that .now the
24f30 72 65 20 61 72 65 20 74 77 6f 20 70 61 72 65 6e  re are two paren
24f40 74 73 20 74 6f 20 65 61 63 68 20 6d 65 6d 62 65  ts to each membe
24f50 72 2e 0a 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e  r..We want to kn
24f60 6f 77 20 61 6c 6c 20 6c 69 76 69 6e 67 20 61 6e  ow all living an
24f70 63 65 73 74 6f 72 73 20 6f 66 20 41 6c 69 63 65  cestors of Alice
24f80 2c 20 66 72 6f 6d 20 6f 6c 64 65 73 74 20 74 6f  , from oldest to
24f90 20 79 6f 75 6e 67 65 73 74 2e 0a 41 6e 20 6f 72   youngest..An or
24fa0 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
24fb0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ble expression, 
24fc0 22 70 61 72 65 6e 74 5f 6f 66 22 2c 20 69 73 20  "parent_of", is 
24fd0 64 65 66 69 6e 65 64 20 66 69 72 73 74 2e 20 20  defined first.  
24fe0 54 68 61 74 0a 6f 72 64 69 6e 61 72 79 20 43 54  That.ordinary CT
24ff0 45 20 69 73 20 61 20 76 69 65 77 20 74 68 61 74  E is a view that
25000 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
25010 66 69 6e 64 20 61 6c 6c 20 70 61 72 65 6e 74 73  find all parents
25020 20 6f 66 20 61 6e 79 0a 69 6e 64 69 76 69 64 75   of any.individu
25030 61 6c 2e 20 20 54 68 61 74 20 6f 72 64 69 6e 61  al.  That ordina
25040 72 79 20 43 54 45 20 69 73 20 74 68 65 6e 20 75  ry CTE is then u
25050 73 65 64 20 69 6e 20 74 68 65 20 22 61 6e 63 65  sed in the "ance
25060 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 22 0a 72  stor_of_alice".r
25070 65 63 75 72 73 69 76 65 20 43 54 45 2e 20 20 54  ecursive CTE.  T
25080 68 65 20 72 65 63 75 72 73 69 76 65 20 43 54 45  he recursive CTE
25090 20 69 73 20 74 68 65 6e 20 75 73 65 64 20 69 6e   is then used in
250a0 20 74 68 65 20 66 69 6e 61 6c 20 71 75 65 72 79   the final query
250b0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
250c0 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
250d0 49 56 45 0a 20 20 70 61 72 65 6e 74 5f 6f 66 28  IVE.  parent_of(
250e0 6e 61 6d 65 2c 20 70 61 72 65 6e 74 29 20 41 53  name, parent) AS
250f0 0a 20 20 20 20 28 53 45 4c 45 43 54 20 6e 61 6d  .    (SELECT nam
25100 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20 66 61 6d 69  e, mom FROM fami
25110 6c 79 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20  ly UNION SELECT 
25120 6e 61 6d 65 2c 20 64 61 64 20 46 52 4f 4d 20 66  name, dad FROM f
25130 61 6d 69 6c 79 29 2c 0a 20 20 61 6e 63 65 73 74  amily),.  ancest
25140 6f 72 5f 6f 66 5f 61 6c 69 63 65 28 6e 61 6d 65  or_of_alice(name
25150 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43 54  ) AS.    (SELECT
25160 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61 72   parent FROM par
25170 65 6e 74 5f 6f 66 20 57 48 45 52 45 20 6e 61 6d  ent_of WHERE nam
25180 65 3d 27 41 6c 69 63 65 27 0a 20 20 20 20 20 55  e='Alice'.     U
25190 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45  NION ALL.     SE
251a0 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f 4d  LECT parent FROM
251b0 20 70 61 72 65 6e 74 5f 6f 66 20 4a 4f 49 4e 20   parent_of JOIN 
251c0 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63  ancestor_of_alic
251d0 65 20 55 53 49 4e 47 28 6e 61 6d 65 29 29 0a 53  e USING(name)).S
251e0 45 4c 45 43 54 20 66 61 6d 69 6c 79 2e 6e 61 6d  ELECT family.nam
251f0 65 20 46 52 4f 4d 20 61 6e 63 65 73 74 6f 72 5f  e FROM ancestor_
25200 6f 66 5f 61 6c 69 63 65 2c 20 66 61 6d 69 6c 79  of_alice, family
25210 0a 20 57 48 45 52 45 20 61 6e 63 65 73 74 6f 72  . WHERE ancestor
25220 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61 6d 65 3d 66  _of_alice.name=f
25230 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20 20 20 41 4e  amily.name.   AN
25240 44 20 64 69 65 64 20 49 53 20 4e 55 4c 4c 0a 20  D died IS NULL. 
25250 4f 52 44 45 52 20 42 59 20 62 6f 72 6e 3b 0a 3c  ORDER BY born;.<
25260 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
25270 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e>..<tcl>hd_frag
25280 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e  ment rcex2</tcl>
25290 0a 3c 68 34 3e 51 75 65 72 69 65 73 20 41 67 61  .<h4>Queries Aga
252a0 69 6e 73 74 20 41 20 47 72 61 70 68 3c 2f 68 34  inst A Graph</h4
252b0 3e 0a 0a 3c 70 3e 41 20 76 65 72 73 69 6f 6e 20  >..<p>A version 
252c0 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65 6d 20 28  control system (
252d0 56 43 53 29 20 77 69 6c 6c 20 74 79 70 69 63 61  VCS) will typica
252e0 6c 6c 79 20 73 74 6f 72 65 20 74 68 65 20 65 76  lly store the ev
252f0 6f 6c 76 69 6e 67 0a 76 65 72 73 69 6f 6e 73 20  olving.versions 
25300 6f 66 20 61 20 70 72 6f 6a 65 63 74 20 61 73 20  of a project as 
25310 61 20 64 69 72 65 63 74 65 64 20 61 63 79 63 6c  a directed acycl
25320 69 63 20 67 72 61 70 68 20 28 44 41 47 29 2e 20  ic graph (DAG). 
25330 20 43 61 6c 6c 20 65 61 63 68 0a 76 65 72 73 69   Call each.versi
25340 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 6a 65 63  on of the projec
25350 74 20 61 20 22 63 68 65 63 6b 69 6e 22 2e 20 20  t a "checkin".  
25360 41 20 73 69 6e 67 6c 65 0a 63 68 65 63 6b 69 6e  A single.checkin
25370 20 63 61 6e 20 68 61 76 65 20 7a 65 72 6f 20 6f   can have zero o
25380 72 20 6d 6f 72 65 20 70 61 72 65 6e 74 73 2e 20  r more parents. 
25390 20 4d 6f 73 74 20 63 68 65 63 6b 69 6e 73 20 28   Most checkins (
253a0 65 78 63 65 70 74 20 74 68 65 0a 66 69 72 73 74  except the.first
253b0 29 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 20  ) have a single 
253c0 70 61 72 65 6e 74 2c 20 62 75 74 20 69 6e 20 74  parent, but in t
253d0 68 65 20 63 61 73 65 20 6f 66 20 61 20 6d 65 72  he case of a mer
253e0 67 65 2c 20 61 20 63 68 65 63 6b 69 6e 0a 6d 69  ge, a checkin.mi
253f0 67 68 74 20 68 61 76 65 20 74 77 6f 20 6f 72 20  ght have two or 
25400 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 70 61  three or more pa
25410 72 65 6e 74 73 2e 20 20 41 20 73 63 68 65 6d 61  rents.  A schema
25420 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 20 6f   to keep track o
25430 66 0a 63 68 65 63 6b 69 6e 73 20 61 6e 64 20 74  f.checkins and t
25440 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
25450 68 20 74 68 65 79 20 6f 63 63 75 72 20 6d 69 67  h they occur mig
25460 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65 74 68 69 6e  ht look somethin
25470 67 20 6c 69 6b 65 0a 74 68 69 73 3a 0a 0a 3c 62  g like.this:..<b
25480 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
25490 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 68 65  CREATE TABLE che
254a0 63 6b 69 6e 28 0a 20 20 69 64 20 49 4e 54 45 47  ckin(.  id INTEG
254b0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
254c0 20 20 6d 74 69 6d 65 20 49 4e 54 45 47 45 52 20    mtime INTEGER 
254d0 2d 2d 20 74 69 6d 65 73 74 61 6d 70 20 77 68 65  -- timestamp whe
254e0 6e 20 74 68 69 73 20 63 68 65 63 6b 69 6e 20 6f  n this checkin o
254f0 63 63 75 72 72 65 64 0a 29 3b 0a 43 52 45 41 54  ccurred.);.CREAT
25500 45 20 54 41 42 4c 45 20 64 65 72 69 76 65 64 66  E TABLE derivedf
25510 72 6f 6d 28 0a 20 20 78 66 72 6f 6d 20 49 4e 54  rom(.  xfrom INT
25520 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45  EGER NOT NULL RE
25530 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69 6e  FERENCES checkin
25540 2c 20 2d 2d 20 70 61 72 65 6e 74 20 63 68 65 63  , -- parent chec
25550 6b 69 6e 0a 20 20 78 74 6f 20 49 4e 54 45 47 45  kin.  xto INTEGE
25560 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52  R NOT NULL REFER
25570 45 4e 43 45 53 20 63 68 65 63 6b 69 6e 2c 20 20  ENCES checkin,  
25580 20 2d 2d 20 64 65 72 69 76 65 64 20 63 68 65 63   -- derived chec
25590 6b 69 6e 0a 20 20 50 52 49 4d 41 52 59 20 4b 45  kin.  PRIMARY KE
255a0 59 28 78 66 72 6f 6d 2c 78 74 6f 29 0a 29 3b 0a  Y(xfrom,xto).);.
255b0 43 52 45 41 54 45 20 49 4e 44 45 58 20 64 65 72  CREATE INDEX der
255c0 69 76 65 64 66 72 6f 6d 5f 62 61 63 6b 20 4f 4e  ivedfrom_back ON
255d0 20 64 65 72 69 76 65 64 66 72 6f 6d 28 78 74 6f   derivedfrom(xto
255e0 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70 72 65 3e 3c  ,xfrom);.</pre><
255f0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
25600 3e 54 68 69 73 20 67 72 61 70 68 20 69 73 20 61  >This graph is a
25610 63 79 63 6c 69 63 2e 20 20 41 6e 64 20 77 65 20  cyclic.  And we 
25620 61 73 73 75 6d 65 20 74 68 61 74 20 74 68 65 20  assume that the 
25630 6d 74 69 6d 65 20 6f 66 20 65 76 65 72 79 0a 63  mtime of every.c
25640 68 69 6c 64 20 63 68 65 63 6b 69 6e 20 69 73 20  hild checkin is 
25650 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  no less than the
25660 20 6d 74 69 6d 65 20 6f 66 20 61 6c 6c 20 69 74   mtime of all it
25670 73 20 70 61 72 65 6e 74 73 2e 20 20 42 75 74 0a  s parents.  But.
25680 75 6e 6c 69 6b 65 20 74 68 65 20 65 61 72 6c 69  unlike the earli
25690 65 72 20 65 78 61 6d 70 6c 65 73 2c 20 74 68 69  er examples, thi
256a0 73 20 67 72 61 70 68 20 6d 69 67 68 74 20 68 61  s graph might ha
256b0 76 65 20 6d 75 6c 74 69 70 6c 65 20 70 61 74 68  ve multiple path
256c0 73 20 6f 66 0a 64 69 66 66 65 72 69 6e 67 20 6c  s of.differing l
256d0 65 6e 67 74 68 73 20 62 65 74 77 65 65 6e 20 61  engths between a
256e0 6e 79 20 74 77 6f 20 63 68 65 63 6b 69 6e 73 2e  ny two checkins.
256f0 0a 0a 3c 70 3e 57 65 20 77 61 6e 74 20 74 6f 20  ..<p>We want to 
25700 6b 6e 6f 77 20 74 68 65 20 74 77 65 6e 74 79 20  know the twenty 
25710 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65  most recent ance
25720 73 74 6f 72 73 20 69 6e 20 74 69 6d 65 20 28 6f  stors in time (o
25730 75 74 20 6f 66 0a 74 68 65 20 74 68 6f 75 73 61  ut of.the thousa
25740 6e 64 73 20 61 6e 64 20 74 68 6f 75 73 61 6e 64  nds and thousand
25750 73 20 6f 66 20 61 6e 63 65 73 74 6f 72 73 20 69  s of ancestors i
25760 6e 20 74 68 65 20 77 68 6f 6c 65 20 44 41 47 29  n the whole DAG)
25770 20 66 6f 72 0a 63 68 65 63 6b 69 6e 20 22 40 42   for.checkin "@B
25780 41 53 45 4c 49 4e 45 22 2e 20 20 28 41 20 71 75  ASELINE".  (A qu
25790 65 72 79 20 73 69 6d 69 6c 61 72 20 74 6f 20 74  ery similar to t
257a0 68 69 73 20 69 73 20 75 73 65 64 0a 62 79 20 74  his is used.by t
257b0 68 65 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70  he <a href="http
257c0 3a 2f 2f 77 77 77 2e 66 6f 73 73 69 6c 2d 73 63  ://www.fossil-sc
257d0 6d 2e 6f 72 67 2f 22 3e 46 6f 73 73 69 6c 3c 2f  m.org/">Fossil</
257e0 61 3e 20 56 43 53 20 74 6f 0a 73 68 6f 77 20 74  a> VCS to.show t
257f0 68 65 20 4e 20 6d 6f 73 74 20 72 65 63 65 6e 74  he N most recent
25800 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20 61 20   ancestors of a 
25810 63 68 65 63 6b 2e 20 20 46 6f 72 20 65 78 61 6d  check.  For exam
25820 70 6c 65 3a 0a 3c 61 20 68 72 65 66 3d 22 68 74  ple:.<a href="ht
25830 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
25840 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65  org/src/timeline
25850 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30 22 3e 68  ?p=trunk&n=30">h
25860 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65  ttp://www.sqlite
25870 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c 69 6e  .org/src/timelin
25880 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30 3c 2f  e?p=trunk&n=30</
25890 61 3e 2e 29 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  a>.)..<blockquot
258a0 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
258b0 55 52 53 49 56 45 0a 20 20 61 6e 63 65 73 74 6f  URSIVE.  ancesto
258c0 72 28 69 64 2c 6d 74 69 6d 65 29 20 41 53 20 28  r(id,mtime) AS (
258d0 0a 20 20 20 20 53 45 4c 45 43 54 20 69 64 2c 20  .    SELECT id, 
258e0 6d 74 69 6d 65 20 46 52 4f 4d 20 63 68 65 63 6b  mtime FROM check
258f0 69 6e 20 57 48 45 52 45 20 69 64 3d 40 42 41 53  in WHERE id=@BAS
25900 45 4c 49 4e 45 0a 20 20 20 20 55 4e 49 4f 4e 0a  ELINE.    UNION.
25910 20 20 20 20 53 45 4c 45 43 54 20 64 65 72 69 76      SELECT deriv
25920 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 2c 20 63 68  edfrom.xfrom, ch
25930 65 63 6b 69 6e 2e 6d 74 69 6d 65 0a 20 20 20 20  eckin.mtime.    
25940 20 20 46 52 4f 4d 20 61 6e 63 65 73 74 6f 72 2c    FROM ancestor,
25950 20 64 65 72 69 76 65 64 66 72 6f 6d 2c 20 63 68   derivedfrom, ch
25960 65 63 6b 69 6e 0a 20 20 20 20 20 57 48 45 52 45  eckin.     WHERE
25970 20 61 6e 63 65 73 74 6f 72 2e 69 64 3d 64 65 72   ancestor.id=der
25980 69 76 65 64 66 72 6f 6d 2e 78 74 6f 0a 20 20 20  ivedfrom.xto.   
25990 20 20 20 20 41 4e 44 20 63 68 65 63 6b 69 6e 2e      AND checkin.
259a0 69 64 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e 78  id=derivedfrom.x
259b0 66 72 6f 6d 0a 20 20 20 20 20 4f 52 44 45 52 20  from.     ORDER 
259c0 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65  BY checkin.mtime
259d0 20 44 45 53 43 0a 20 20 20 20 20 4c 49 4d 49 54   DESC.     LIMIT
259e0 20 32 30 0a 20 20 29 0a 53 45 4c 45 43 54 20 2a   20.  ).SELECT *
259f0 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20 4a 4f   FROM checkin JO
25a00 49 4e 20 61 6e 63 65 73 74 6f 72 20 55 53 49 4e  IN ancestor USIN
25a10 47 28 69 64 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  G(id);.</pre></b
25a20 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a  lockquote>..<p>.
25a30 54 68 65 20 22 4f 52 44 45 52 20 42 59 20 63 68  The "ORDER BY ch
25a40 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43  eckin.mtime DESC
25a50 22 20 74 65 72 6d 20 69 6e 20 74 68 65 20 72 65  " term in the re
25a60 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 6d  cursive-select m
25a70 61 6b 65 73 0a 74 68 65 20 71 75 65 72 79 20 72  akes.the query r
25a80 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72 20 62  un much faster b
25a90 79 20 70 72 65 76 65 6e 74 69 6e 67 20 69 74 20  y preventing it 
25aa0 66 72 6f 6d 20 66 6f 6c 6c 6f 77 69 6e 67 0a 62  from following.b
25ab0 72 61 6e 63 68 65 73 20 74 68 61 74 20 6d 65 72  ranches that mer
25ac0 67 65 20 63 68 65 63 6b 69 6e 73 0a 66 72 6f 6d  ge checkins.from
25ad0 20 6c 6f 6e 67 20 61 67 6f 2e 20 20 54 68 65 20   long ago.  The 
25ae0 4f 52 44 45 52 20 42 59 20 66 6f 72 63 65 73 20  ORDER BY forces 
25af0 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
25b00 6c 65 63 74 20 74 6f 20 66 6f 63 75 73 0a 6f 6e  lect to focus.on
25b10 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
25b20 20 63 68 65 63 6b 69 6e 73 2c 20 74 68 65 20 6f   checkins, the o
25b30 6e 65 73 20 77 65 20 77 61 6e 74 2e 20 20 57 69  nes we want.  Wi
25b40 74 68 6f 75 74 20 74 68 65 20 4f 52 44 45 52 20  thout the ORDER 
25b50 42 59 0a 6f 6e 20 74 68 65 20 72 65 63 75 72 73  BY.on the recurs
25b60 69 76 65 2d 73 65 6c 65 63 74 2c 20 6f 6e 65 20  ive-select, one 
25b70 77 6f 75 6c 64 20 62 65 20 66 6f 72 63 65 64 20  would be forced 
25b80 74 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20 63  to compute the c
25b90 6f 6d 70 6c 65 74 65 20 73 65 74 20 6f 66 0a 74  omplete set of.t
25ba0 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e 63 65  housands of ance
25bb0 73 74 6f 72 73 2c 20 73 6f 72 74 20 74 68 65 6d  stors, sort them
25bc0 20 61 6c 6c 20 62 79 20 6d 74 69 6d 65 2c 20 74   all by mtime, t
25bd0 68 65 6e 20 74 61 6b 65 20 74 68 65 20 74 6f 70  hen take the top
25be0 20 74 77 65 6e 74 79 2e 0a 54 68 65 20 4f 52 44   twenty..The ORD
25bf0 45 52 20 42 59 20 65 73 73 65 6e 74 69 61 6c 6c  ER BY essentiall
25c00 79 20 73 65 74 73 20 75 70 20 61 20 70 72 69 6f  y sets up a prio
25c10 72 69 74 79 20 71 75 65 75 65 20 74 68 61 74 0a  rity queue that.
25c20 66 6f 72 63 65 73 20 74 68 65 20 72 65 63 75 72  forces the recur
25c30 73 69 76 65 20 71 75 65 72 79 20 74 6f 20 6c 6f  sive query to lo
25c40 6f 6b 20 61 74 20 74 68 65 20 6d 6f 73 74 20 72  ok at the most r
25c50 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20  ecent ancestors 
25c60 66 69 72 73 74 2c 0a 61 6c 6c 6f 77 69 6e 67 20  first,.allowing 
25c70 74 68 65 20 75 73 65 20 6f 66 20 61 20 4c 49 4d  the use of a LIM
25c80 49 54 20 63 6c 61 75 73 65 20 74 6f 20 72 65 73  IT clause to res
25c90 74 72 69 63 74 20 74 68 65 20 73 63 6f 70 65 20  trict the scope 
25ca0 6f 66 20 74 68 65 0a 71 75 65 72 79 20 74 6f 20  of the.query to 
25cb0 6a 75 73 74 20 74 68 65 20 63 68 65 63 6b 69 6e  just the checkin
25cc0 73 20 6f 66 20 69 6e 74 65 72 65 73 74 2e 0a 0a  s of interest...
25cd0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
25ce0 20 77 69 74 68 6f 72 64 65 72 62 79 3c 2f 74 63   withorderby</tc
25cf0 6c 3e 0a 3c 68 34 3e 43 6f 6e 74 72 6f 6c 6c 69  l>.<h4>Controlli
25d00 6e 67 20 44 65 70 74 68 2d 46 69 72 73 74 20 56  ng Depth-First V
25d10 65 72 73 75 73 20 42 72 65 61 64 74 68 2d 46 69  ersus Breadth-Fi
25d20 72 73 74 20 53 65 61 72 63 68 20 4f 66 20 61 20  rst Search Of a 
25d30 54 72 65 65 0a 55 73 69 6e 67 20 4f 52 44 45 52  Tree.Using ORDER
25d40 20 42 59 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 6e 20   BY</h4>..<p>An 
25d50 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
25d60 6f 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  on the recursive
25d70 2d 73 65 6c 65 63 74 20 63 61 6e 20 62 65 20 75  -select can be u
25d80 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 0a 77  sed to control.w
25d90 68 65 74 68 65 72 20 74 68 65 20 73 65 61 72 63  hether the searc
25da0 68 20 6f 66 20 61 20 74 72 65 65 20 69 73 20 64  h of a tree is d
25db0 65 70 74 68 2d 66 69 72 73 74 20 6f 72 20 62 72  epth-first or br
25dc0 65 61 64 74 68 2d 66 69 72 73 74 2e 20 20 54 6f  eadth-first.  To
25dd0 0a 69 6c 6c 75 73 74 72 61 74 65 2c 20 77 65 20  .illustrate, we 
25de0 77 69 6c 6c 20 75 73 65 20 61 20 76 61 72 69 61  will use a varia
25df0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 22 6f 72 67  tion on the "org
25e00 22 20 74 61 62 6c 65 20 66 72 6f 6d 20 61 6e 20  " table from an 
25e10 65 78 61 6d 70 6c 65 0a 61 62 6f 76 65 2c 20 77  example.above, w
25e20 69 74 68 6f 75 74 20 74 68 65 20 22 68 65 69 67  ithout the "heig
25e30 68 74 22 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20  ht" column, and 
25e40 77 69 74 68 20 73 6f 6d 65 20 72 65 61 6c 20 64  with some real d
25e50 61 74 61 20 69 6e 73 65 72 74 65 64 3a 0a 0a 3c  ata inserted:..<
25e60 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
25e70 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72  .CREATE TABLE or
25e80 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50  g(.  name TEXT P
25e90 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f  RIMARY KEY,.  bo
25ea0 73 73 20 54 45 58 54 20 52 45 46 45 52 45 4e 43  ss TEXT REFERENC
25eb0 45 53 20 6f 72 67 0a 29 20 57 49 54 48 4f 55 54  ES org.) WITHOUT
25ec0 20 52 4f 57 49 44 3b 0a 49 4e 53 45 52 54 20 49   ROWID;.INSERT I
25ed0 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27  NTO org VALUES('
25ee0 41 6c 69 63 65 27 2c 4e 55 4c 4c 29 3b 0a 49 4e  Alice',NULL);.IN
25ef0 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41  SERT INTO org VA
25f00 4c 55 45 53 28 27 42 6f 62 27 2c 27 41 6c 69 63  LUES('Bob','Alic
25f10 65 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  e');.INSERT INTO
25f20 20 6f 72 67 20 56 41 4c 55 45 53 28 27 43 69 6e   org VALUES('Cin
25f30 64 79 27 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e  dy','Alice');.IN
25f40 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41  SERT INTO org VA
25f50 4c 55 45 53 28 27 44 61 76 65 27 2c 27 42 6f 62  LUES('Dave','Bob
25f60 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20  ');.INSERT INTO 
25f70 6f 72 67 20 56 41 4c 55 45 53 28 27 45 6d 6d 61  org VALUES('Emma
25f80 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54  ','Bob');.INSERT
25f90 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
25fa0 28 27 46 72 65 64 27 2c 27 43 69 6e 64 79 27 29  ('Fred','Cindy')
25fb0 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
25fc0 67 20 56 41 4c 55 45 53 28 27 47 61 69 6c 27 2c  g VALUES('Gail',
25fd0 27 43 69 6e 64 79 27 29 3b 0a 3c 2f 70 72 65 3e  'Cindy');.</pre>
25fe0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
25ff0 70 3e 48 65 72 65 20 69 73 20 61 20 71 75 65 72  p>Here is a quer
26000 79 20 74 6f 20 73 68 6f 77 20 74 68 65 20 74 72  y to show the tr
26010 65 65 20 73 74 72 75 63 74 75 72 65 20 69 6e 20  ee structure in 
26020 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20  a breadth-first 
26030 70 61 74 74 65 72 6e 3a 0a 0a 3c 62 6c 6f 63 6b  pattern:..<block
26040 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
26050 20 52 45 43 55 52 53 49 56 45 0a 20 20 75 6e 64   RECURSIVE.  und
26060 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65  er_alice(name,le
26070 76 65 6c 29 20 41 53 20 28 0a 20 20 20 20 56 41  vel) AS (.    VA
26080 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 30 29 0a  LUES('Alice',0).
26090 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
260a0 20 20 53 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d    SELECT org.nam
260b0 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c  e, under_alice.l
260c0 65 76 65 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f  evel+1.      FRO
260d0 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72  M org JOIN under
260e0 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f  _alice ON org.bo
260f0 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e  ss=under_alice.n
26100 61 6d 65 0a 20 20 20 20 20 4f 52 44 45 52 20 42  ame.     ORDER B
26110 59 20 32 0a 20 20 29 0a 53 45 4c 45 43 54 20 73  Y 2.  ).SELECT s
26120 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e  ubstr('.........
26130 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c  .',1,level*3) ||
26140 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64 65 72   name FROM under
26150 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f  _alice;.</pre></
26160 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
26170 54 68 65 20 22 4f 52 44 45 52 20 42 59 20 32 22  The "ORDER BY 2"
26180 20 28 77 68 69 63 68 20 6d 65 61 6e 73 20 74 68   (which means th
26190 65 20 73 61 6d 65 20 61 73 20 22 4f 52 44 45 52  e same as "ORDER
261a0 20 42 59 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e   BY under_alice.
261b0 6c 65 76 65 6c 2b 31 22 29 0a 63 61 75 73 65 73  level+1").causes
261c0 20 68 69 67 68 65 72 20 6c 65 76 65 6c 73 20 69   higher levels i
261d0 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69  n the organizati
261e0 6f 6e 20 63 68 61 72 74 20 28 77 69 74 68 20 73  on chart (with s
261f0 6d 61 6c 6c 65 72 20 22 6c 65 76 65 6c 22 20 76  maller "level" v
26200 61 6c 75 65 73 29 0a 74 6f 20 62 65 20 70 72 6f  alues).to be pro
26210 63 65 73 73 65 64 20 66 69 72 73 74 2c 20 72 65  cessed first, re
26220 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 62 72 65  sulting in a bre
26230 61 64 74 68 2d 66 69 72 73 74 20 73 65 61 72 63  adth-first searc
26240 68 2e 20 20 54 68 65 20 6f 75 74 70 75 74 20 69  h.  The output i
26250 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
26260 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42  <pre>.Alice....B
26270 6f 62 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e  ob....Cindy.....
26280 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d  ..Dave.......Emm
26290 61 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e  a.......Fred....
262a0 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f  ...Gail.</pre></
262b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
262c0 42 75 74 20 69 66 20 77 65 20 63 68 61 6e 67 65  But if we change
262d0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
262e0 61 75 73 65 20 74 6f 20 61 64 64 20 74 68 65 20  ause to add the 
262f0 22 44 45 53 43 22 20 6d 6f 64 69 66 69 65 72 2c  "DESC" modifier,
26300 20 74 68 61 74 20 77 69 6c 6c 0a 63 61 75 73 65   that will.cause
26310 20 6c 6f 77 65 72 20 6c 65 76 65 6c 73 20 69 6e   lower levels in
26320 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f   the organizatio
26330 6e 20 28 77 69 74 68 20 6c 61 72 67 65 72 20 22  n (with larger "
26340 6c 65 76 65 6c 22 20 76 61 6c 75 65 73 29 20 74  level" values) t
26350 6f 20 62 65 0a 70 72 6f 63 65 73 73 65 64 20 66  o be.processed f
26360 69 72 73 74 20 62 79 20 74 68 65 20 72 65 63 75  irst by the recu
26370 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 72 65  rsive-select, re
26380 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 64 65 70  sulting in a dep
26390 74 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 3a  th-first search:
263a0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
263b0 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
263c0 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c 69 63 65  VE.  under_alice
263d0 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20  (name,level) AS 
263e0 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c  (.    VALUES('Al
263f0 69 63 65 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f  ice',0).    UNIO
26400 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
26410 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72   org.name, under
26420 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20  _alice.level+1. 
26430 20 20 20 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f       FROM org JO
26440 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f  IN under_alice O
26450 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72  N org.boss=under
26460 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20  _alice.name.    
26470 20 4f 52 44 45 52 20 42 59 20 32 20 3c 62 3e 44   ORDER BY 2 <b>D
26480 45 53 43 3c 2f 62 3e 0a 20 20 29 0a 53 45 4c 45  ESC</b>.  ).SELE
26490 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e  CT substr('.....
264a0 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33  .....',1,level*3
264b0 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75  ) || name FROM u
264c0 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72  nder_alice;.</pr
264d0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
264e0 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20 6f  .<p>The output o
264f0 66 20 74 68 69 73 20 72 65 76 69 73 65 64 20 71  f this revised q
26500 75 65 72 79 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  uery is:..<block
26510 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63  quote><pre>.Alic
26520 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 2e 2e 2e 44  e....Bob.......D
26530 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e  ave.......Emma..
26540 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 46 72  ..Cindy.......Fr
26550 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f  ed.......Gail.</
26560 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
26570 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 4f  >..<p>When the O
26580 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
26590 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
265a0 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
265b0 65 63 74 2c 20 74 68 65 0a 71 75 65 75 65 20 62  ect, the.queue b
265c0 65 68 61 76 65 73 20 61 73 20 61 20 46 49 46 4f  ehaves as a FIFO
265d0 2c 20 77 68 69 63 68 20 72 65 73 75 6c 74 73 20  , which results 
265e0 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72  in a breadth-fir
265f0 73 74 20 73 65 61 72 63 68 2e 0a 0a 0a 3c 74 63  st search....<tc
26600 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61  l>hd_fragment ma
26610 6e 64 65 6c 62 72 6f 74 20 7b 63 6f 6d 70 75 74  ndelbrot {comput
26620 65 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74  e the Mandelbrot
26630 20 73 65 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e   set}</tcl>.<h4>
26640 4f 75 74 6c 61 6e 64 69 73 68 20 52 65 63 75 72  Outlandish Recur
26650 73 69 76 65 20 51 75 65 72 79 20 45 78 61 6d 70  sive Query Examp
26660 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  les</h4>..<p>The
26670 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79   following query
26680 20 63 6f 6d 70 75 74 65 73 20 61 6e 20 61 70 70   computes an app
26690 72 6f 78 69 6d 61 74 69 6f 6e 20 6f 66 20 74 68  roximation of th
266a0 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65 74  e Mandelbrot Set
266b0 0a 61 6e 64 20 6f 75 74 70 75 74 73 20 74 68 65  .and outputs the
266c0 20 72 65 73 75 6c 74 20 61 73 20 41 53 43 49 49   result as ASCII
266d0 2d 61 72 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  -art:..<blockquo
266e0 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
266f0 43 55 52 53 49 56 45 0a 20 20 78 61 78 69 73 28  CURSIVE.  xaxis(
26700 78 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d 32  x) AS (VALUES(-2
26710 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  .0) UNION ALL SE
26720 4c 45 43 54 20 78 2b 30 2e 30 35 20 46 52 4f 4d  LECT x+0.05 FROM
26730 20 78 61 78 69 73 20 57 48 45 52 45 20 78 3c 31   xaxis WHERE x<1
26740 2e 32 29 2c 0a 20 20 79 61 78 69 73 28 79 29 20  .2),.  yaxis(y) 
26750 41 53 20 28 56 41 4c 55 45 53 28 2d 31 2e 30 29  AS (VALUES(-1.0)
26760 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
26770 54 20 79 2b 30 2e 31 20 46 52 4f 4d 20 79 61 78  T y+0.1 FROM yax
26780 69 73 20 57 48 45 52 45 20 79 3c 31 2e 30 29 2c  is WHERE y<1.0),
26790 0a 20 20 6d 28 69 74 65 72 2c 20 63 78 2c 20 63  .  m(iter, cx, c
267a0 79 2c 20 78 2c 20 79 29 20 41 53 20 28 0a 20 20  y, x, y) AS (.  
267b0 20 20 53 45 4c 45 43 54 20 30 2c 20 78 2c 20 79    SELECT 0, x, y
267c0 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52 4f 4d 20  , 0.0, 0.0 FROM 
267d0 78 61 78 69 73 2c 20 79 61 78 69 73 0a 20 20 20  xaxis, yaxis.   
267e0 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
267f0 45 4c 45 43 54 20 69 74 65 72 2b 31 2c 20 63 78  ELECT iter+1, cx
26800 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79 20 2b 20  , cy, x*x-y*y + 
26810 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b 20 63 79  cx, 2.0*x*y + cy
26820 20 46 52 4f 4d 20 6d 20 0a 20 20 20 20 20 57 48   FROM m .     WH
26830 45 52 45 20 28 78 2a 78 20 2b 20 79 2a 79 29 20  ERE (x*x + y*y) 
26840 3c 20 34 2e 30 20 41 4e 44 20 69 74 65 72 3c 32  < 4.0 AND iter<2
26850 38 0a 20 20 29 2c 0a 20 20 6d 32 28 69 74 65 72  8.  ),.  m2(iter
26860 2c 20 63 78 2c 20 63 79 29 20 41 53 20 28 0a 20  , cx, cy) AS (. 
26870 20 20 20 53 45 4c 45 43 54 20 6d 61 78 28 69 74     SELECT max(it
26880 65 72 29 2c 20 63 78 2c 20 63 79 20 46 52 4f 4d  er), cx, cy FROM
26890 20 6d 20 47 52 4f 55 50 20 42 59 20 63 78 2c 20   m GROUP BY cx, 
268a0 63 79 0a 20 20 29 2c 0a 20 20 61 28 74 29 20 41  cy.  ),.  a(t) A
268b0 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 67  S (.    SELECT g
268c0 72 6f 75 70 5f 63 6f 6e 63 61 74 28 20 73 75 62  roup_concat( sub
268d0 73 74 72 28 27 20 2e 2b 2a 23 27 2c 20 31 2b 6d  str(' .+*#', 1+m
268e0 69 6e 28 69 74 65 72 2f 37 2c 34 29 2c 20 31 29  in(iter/7,4), 1)
268f0 2c 20 27 27 29 20 0a 20 20 20 20 46 52 4f 4d 20  , '') .    FROM 
26900 6d 32 20 47 52 4f 55 50 20 42 59 20 63 79 0a 20  m2 GROUP BY cy. 
26910 20 29 0a 53 45 4c 45 43 54 20 67 72 6f 75 70 5f   ).SELECT group_
26920 63 6f 6e 63 61 74 28 72 74 72 69 6d 28 74 29 2c  concat(rtrim(t),
26930 78 27 30 61 27 29 20 46 52 4f 4d 20 61 3b 0a 3c  x'0a') FROM a;.<
26940 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
26950 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69 73 20 71  e>..<p>In this q
26960 75 65 72 79 2c 20 74 68 65 20 22 78 61 78 69 73  uery, the "xaxis
26970 22 20 61 6e 64 20 22 79 61 78 69 73 22 20 43 54  " and "yaxis" CT
26980 45 73 20 64 65 66 69 6e 65 20 74 68 65 20 67 72  Es define the gr
26990 69 64 20 6f 66 20 70 6f 69 6e 74 73 20 66 6f 72  id of points for
269a0 0a 77 68 69 63 68 20 74 68 65 20 4d 61 6e 64 65  .which the Mande
269b0 6c 62 72 6f 74 20 53 65 74 20 77 69 6c 6c 20 62  lbrot Set will b
269c0 65 20 61 70 70 72 6f 78 69 6d 61 74 65 64 2e 20  e approximated. 
269d0 20 45 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   Each row in the
269e0 0a 22 6d 28 69 74 65 72 2c 63 78 2c 63 79 2c 78  ."m(iter,cx,cy,x
269f0 2c 79 29 22 20 43 54 45 20 6d 65 61 6e 73 20 74  ,y)" CTE means t
26a00 68 61 74 20 61 66 74 65 72 20 22 69 74 65 72 22  hat after "iter"
26a10 20 69 74 65 72 61 74 69 6f 6e 73 2c 20 74 68 65   iterations, the
26a20 20 4d 61 6e 64 65 6c 62 72 6f 74 0a 69 74 65 72   Mandelbrot.iter
26a30 61 74 69 6f 6e 20 73 74 61 72 74 69 6e 67 20 61  ation starting a
26a40 74 20 63 78 2c 63 79 20 68 61 73 20 72 65 61 63  t cx,cy has reac
26a50 68 65 64 20 70 6f 69 6e 74 20 78 2c 79 2e 20 20  hed point x,y.  
26a60 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  The number of it
26a70 65 72 61 74 69 6f 6e 73 0a 69 6e 20 74 68 69 73  erations.in this
26a80 20 65 78 61 6d 70 6c 65 20 69 73 20 6c 69 6d 69   example is limi
26a90 74 65 64 20 74 6f 20 32 38 20 28 77 68 69 63 68  ted to 28 (which
26aa0 20 73 65 76 65 72 65 6c 79 20 6c 69 6d 69 74 73   severely limits
26ab0 20 74 68 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20   the resolution 
26ac0 6f 66 0a 74 68 65 20 63 6f 6d 70 75 74 61 74 69  of.the computati
26ad0 6f 6e 2c 20 62 75 74 20 69 73 20 73 75 66 66 69  on, but is suffi
26ae0 63 69 65 6e 74 20 66 6f 72 20 6c 6f 77 2d 72 65  cient for low-re
26af0 73 6f 6c 75 74 69 6f 6e 20 41 53 43 49 49 2d 61  solution ASCII-a
26b00 72 74 20 6f 75 74 70 75 74 29 2e 0a 54 68 65 20  rt output)..The 
26b10 22 6d 32 28 69 74 65 72 2c 63 78 2c 63 79 29 22  "m2(iter,cx,cy)"
26b20 20 43 54 45 20 68 6f 6c 64 73 20 74 68 65 20 6d   CTE holds the m
26b30 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
26b40 20 69 74 65 72 61 74 69 6f 6e 73 20 72 65 61 63   iterations reac
26b50 68 65 64 20 77 68 65 6e 0a 73 74 61 72 74 69 6e  hed when.startin
26b60 67 20 61 74 20 70 6f 69 6e 74 20 63 78 2c 63 79  g at point cx,cy
26b70 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65 61 63 68 20  ..Finally, each 
26b80 72 6f 77 20 69 6e 20 74 68 65 20 22 61 28 74 29  row in the "a(t)
26b90 22 20 43 54 45 20 68 6f 6c 64 73 20 61 20 73 74  " CTE holds a st
26ba0 72 69 6e 67 20 0a 77 68 69 63 68 20 69 73 20 61  ring .which is a
26bb0 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f 66 20   single line of 
26bc0 74 68 65 20 6f 75 74 70 75 74 20 41 53 43 49 49  the output ASCII
26bd0 2d 61 72 74 2e 0a 54 68 65 20 53 45 4c 45 43 54  -art..The SELECT
26be0 20 73 74 61 74 65 6d 65 6e 74 20 61 74 20 74 68   statement at th
26bf0 65 20 65 6e 64 20 6a 75 73 74 20 71 75 65 72 69  e end just queri
26c00 65 73 20 74 68 65 20 22 61 22 20 43 54 45 20 74  es the "a" CTE t
26c10 6f 0a 72 65 74 72 69 65 76 65 20 61 6c 6c 20 6c  o.retrieve all l
26c20 69 6e 65 73 20 6f 66 20 41 53 43 49 49 2d 61 72  ines of ASCII-ar
26c30 74 2c 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 0a 0a  t, one by one...
26c40 3c 70 3e 52 75 6e 6e 69 6e 67 20 74 68 65 20 71  <p>Running the q
26c50 75 65 72 79 20 61 62 6f 76 65 20 69 6e 20 61 6e  uery above in an
26c60 20 53 51 4c 69 74 65 20 5b 63 6f 6d 6d 61 6e 64   SQLite [command
26c70 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20 72 65 73  -line shell] res
26c80 75 6c 74 73 0a 69 6e 20 74 68 65 20 66 6f 6c 6c  ults.in the foll
26c90 6f 77 69 6e 67 20 6f 75 74 70 75 74 3a 0a 0a 3c  owing output:..<
26ca0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
26cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cd0 20 20 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20       ....#.     
26ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
26d00 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20  #*...           
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a        ..+####+..
26d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d40 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
26d50 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20 2b  ...+####....   +
26d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26d70 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23 23              ..##
26d80 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 2b  +*##########+.++
26d90 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ++.             
26da0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b 2e               .+.
26db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26dc0 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ##+..           
26dd0 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e     .............
26de0 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +###############
26df0 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20 20  ####+.+.        
26e00 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e        ..++..#...
26e10 2e 2e 2a 23 23 23 23 23 23 23 23 23 23 23 23 23  ..*#############
26e20 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20  ########+..     
26e30 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23          ...+####
26e40 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23 23  ###++###########
26e50 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20  ############..  
26e60 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23          ....+*##
26e70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a  ##############..
26e90 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
26ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 2e  ##############..
26ec0 2e 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e  ..          ....
26ed0 2b 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +*##############
26ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26ef0 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ##..            
26f00 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23   ...+#######++##
26f10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f20 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20  #####..         
26f30 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e 2e       ..++..#....
26f40 2e 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .*##############
26f50 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20  #######+..      
26f60 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e          ........
26f70 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23  .....+##########
26f80 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20  #########+.+.   
26f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fa0 20 20 20 20 20 20 20 2e 2b 2e 23 23 23 23 23 23         .+.######
26fb0 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20  ############+.. 
26fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fd0 20 20 20 20 20 20 20 20 20 20 2e 2e 23 23 2b 2a            ..##+*
26fe0 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 2b 2b 2b  ##########+.++++
26ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
27010 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20  ....+####....   
27020 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27040 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a 20 20 20     ..+####+..   
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27070 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20 20  ..#*...         
27080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27090 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23             ....#
270a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
270b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270c0 20 20 20 20 20 2b 2e 0a 3c 2f 70 72 65 3e 3c 2f       +..</pre></
270d0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63  blockquote>..<tc
270e0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 75  l>hd_fragment su
270f0 64 6f 6b 75 20 7b 73 6f 6c 76 65 20 53 75 64 6f  doku {solve Sudo
27100 6b 75 20 70 75 7a 7a 6c 65 73 7d 20 3c 2f 74 63  ku puzzles} </tc
27110 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e 65 78 74 20  l>.<p>This next 
27120 71 75 65 72 79 20 73 6f 6c 76 65 73 20 61 20 53  query solves a S
27130 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 2e 20 20 54  udoku puzzle.  T
27140 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
27150 70 75 7a 7a 6c 65 20 69 73 0a 64 65 66 69 6e 65  puzzle is.define
27160 64 20 62 79 20 61 6e 20 38 31 2d 63 68 61 72 61  d by an 81-chara
27170 63 74 65 72 20 73 74 72 69 6e 67 20 66 6f 72 6d  cter string form
27180 65 64 20 62 79 20 72 65 61 64 69 6e 67 20 65 6e  ed by reading en
27190 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 0a 70  tries from the.p
271a0 75 7a 7a 6c 65 20 62 6f 78 20 72 6f 77 20 62 79  uzzle box row by
271b0 20 72 6f 77 20 66 72 6f 6d 20 6c 65 66 74 20 74   row from left t
271c0 6f 20 72 69 67 68 74 20 61 6e 64 20 74 68 65 6e  o right and then
271d0 20 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f 74   from top to bot
271e0 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73 71 75 61 72  tom..Blank squar
271f0 65 73 20 69 6e 20 74 68 65 20 70 75 7a 7a 6c 65  es in the puzzle
27200 20 61 72 65 20 64 65 6e 6f 74 65 64 20 62 79 20   are denoted by 
27210 61 20 22 2e 22 20 63 68 61 72 61 63 74 65 72 2e  a "." character.
27220 20 20 0a 54 68 75 73 20 74 68 65 20 69 6e 70 75    .Thus the inpu
27230 74 20 73 74 72 69 6e 67 3a 0a 0a 3c 62 6c 6f 63  t string:..<bloc
27240 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e 37 2e 2e 2e  kquote>.53..7...
27250 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e  .6..195....98...
27260 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38  .6.8...6...34..8
27270 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36  .3..17...2...6.6
27280 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35  ....28....419..5
27290 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f 62 6c 6f 63  ....8..79.</bloc
272a0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 72 72  kquote>..<p>Corr
272b0 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 70 75 7a  esponds to a puz
272c0 7a 6c 65 20 6c 69 6b 65 20 74 68 69 73 3a 0a 0a  zle like this:..
272d0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
272e0 62 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63  ble border="1" c
272f0 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35 22 3e 0a  ellpadding="5">.
27300 3c 74 72 3e 3c 74 64 3e 35 3c 74 64 3e 33 3c 74  <tr><td>5<td>3<t
27310 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64  d> <td> <td>7<td
27320 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
27330 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74 64 3e 20 3c  .<tr><td>6<td> <
27340 74 64 3e 20 3c 74 64 3e 31 3c 74 64 3e 39 3c 74  td> <td>1<td>9<t
27350 64 3e 35 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>5<td> <td> <td
27360 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 39  >.<tr><td> <td>9
27370 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>8<td> <td> <
27380 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 3c 74  td> <td> <td>6<t
27390 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38 3c 74 64 3e  d>.<tr><td>8<td>
273a0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36   <td> <td> <td>6
273b0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
273c0 74 64 3e 33 0a 3c 74 72 3e 3c 74 64 3e 34 3c 74  td>3.<tr><td>4<t
273d0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64  d> <td> <td>8<td
273e0 3e 20 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e  > <td>3<td> <td>
273f0 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c 74 64 3e 37   <td>1.<tr><td>7
27400 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
27410 74 64 3e 32 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>2<td> <td> <t
27420 64 3e 20 3c 74 64 3e 36 0a 3c 74 72 3e 3c 74 64  d> <td>6.<tr><td
27430 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e  > <td>6<td> <td>
27440 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 32   <td> <td> <td>2
27450 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td>8<td>.<tr><t
27460 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
27470 3e 34 3c 74 64 3e 31 3c 74 64 3e 39 3c 74 64 3e  >4<td>1<td>9<td>
27480 20 3c 74 64 3e 20 3c 74 64 3e 35 0a 3c 74 72 3e   <td> <td>5.<tr>
27490 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
274a0 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e 20 3c 74  td> <td>8<td> <t
274b0 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 39 0a 3c 2f  d> <td>7<td>9.</
274c0 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
274d0 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 69 73  ote>..<p>This is
274e0 20 74 68 65 20 71 75 65 72 79 20 74 68 61 74 20   the query that 
274f0 73 6f 6c 76 65 73 20 74 68 65 20 70 75 7a 7a 6c  solves the puzzl
27500 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
27510 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
27520 53 49 56 45 0a 20 20 69 6e 70 75 74 28 73 75 64  SIVE.  input(sud
27530 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
27540 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31  S('53..7....6..1
27550 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e  95....98....6.8.
27560 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31  ..6...34..8.3..1
27570 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32  7...2...6.6....2
27580 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38  8....419..5....8
27590 2e 2e 37 39 27 29 0a 20 20 29 2c 0a 20 20 64 69  ..79').  ),.  di
275a0 67 69 74 73 28 7a 2c 20 6c 70 29 20 41 53 20 28  gits(z, lp) AS (
275b0 0a 20 20 20 20 56 41 4c 55 45 53 28 27 31 27 2c  .    VALUES('1',
275c0 20 31 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c   1).    UNION AL
275d0 4c 20 53 45 4c 45 43 54 0a 20 20 20 20 43 41 53  L SELECT.    CAS
275e0 54 28 6c 70 2b 31 20 41 53 20 54 45 58 54 29 2c  T(lp+1 AS TEXT),
275f0 20 6c 70 2b 31 20 46 52 4f 4d 20 64 69 67 69 74   lp+1 FROM digit
27600 73 20 57 48 45 52 45 20 6c 70 3c 39 0a 20 20 29  s WHERE lp<9.  )
27610 2c 0a 20 20 78 28 73 2c 20 69 6e 64 29 20 41 53  ,.  x(s, ind) AS
27620 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 73 75   (.    SELECT su
27630 64 2c 20 69 6e 73 74 72 28 73 75 64 2c 20 27 2e  d, instr(sud, '.
27640 27 29 20 46 52 4f 4d 20 69 6e 70 75 74 0a 20 20  ') FROM input.  
27650 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20    UNION ALL.    
27660 53 45 4c 45 43 54 0a 20 20 20 20 20 20 73 75 62  SELECT.      sub
27670 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29  str(s, 1, ind-1)
27680 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28   || z || substr(
27690 73 2c 20 69 6e 64 2b 31 29 2c 0a 20 20 20 20 20  s, ind+1),.     
276a0 20 69 6e 73 74 72 28 20 73 75 62 73 74 72 28 73   instr( substr(s
276b0 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20 7a  , 1, ind-1) || z
276c0 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69 6e   || substr(s, in
276d0 64 2b 31 29 2c 20 27 2e 27 20 29 0a 20 20 20 20  d+1), '.' ).    
276e0 20 46 52 4f 4d 20 78 2c 20 64 69 67 69 74 73 20   FROM x, digits 
276f0 41 53 20 7a 0a 20 20 20 20 57 48 45 52 45 20 69  AS z.    WHERE i
27700 6e 64 3e 30 0a 20 20 20 20 20 20 41 4e 44 20 4e  nd>0.      AND N
27710 4f 54 20 45 58 49 53 54 53 20 28 0a 20 20 20 20  OT EXISTS (.    
27720 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 31          SELECT 1
27730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46  .              F
27740 52 4f 4d 20 64 69 67 69 74 73 20 41 53 20 6c 70  ROM digits AS lp
27750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48  .             WH
27760 45 52 45 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72  ERE z.z = substr
27770 28 73 2c 20 28 28 69 6e 64 2d 31 29 2f 39 29 2a  (s, ((ind-1)/9)*
27780 39 20 2b 20 6c 70 2c 20 31 29 0a 20 20 20 20 20  9 + lp, 1).     
27790 20 20 20 20 20 20 20 20 20 20 20 4f 52 20 7a 2e             OR z.
277a0 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28  z = substr(s, ((
277b0 69 6e 64 2d 31 29 25 39 29 20 2b 20 28 6c 70 2d  ind-1)%9) + (lp-
277c0 31 29 2a 39 20 2b 20 31 2c 20 31 29 0a 20 20 20  1)*9 + 1, 1).   
277d0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 20               OR 
277e0 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20  z.z = substr(s, 
277f0 28 28 28 69 6e 64 2d 31 29 2f 33 29 20 25 20 33  (((ind-1)/3) % 3
27800 29 20 2a 20 33 0a 20 20 20 20 20 20 20 20 20 20  ) * 3.          
27810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
27820 28 28 69 6e 64 2d 31 29 2f 32 37 29 20 2a 20 32  ((ind-1)/27) * 2
27830 37 20 2b 20 6c 70 0a 20 20 20 20 20 20 20 20 20  7 + lp.         
27840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b                 +
27850 20 28 28 6c 70 2d 31 29 20 2f 20 33 29 20 2a 20   ((lp-1) / 3) * 
27860 36 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20 29  6, 1).         )
27870 0a 20 20 29 0a 53 45 4c 45 43 54 20 73 20 46 52  .  ).SELECT s FR
27880 4f 4d 20 78 20 57 48 45 52 45 20 69 6e 64 3d 30  OM x WHERE ind=0
27890 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
278a0 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 69  uote>..<p>The "i
278b0 6e 70 75 74 22 20 43 54 45 20 64 65 66 69 6e 65  nput" CTE define
278c0 73 20 74 68 65 20 69 6e 70 75 74 20 70 75 7a 7a  s the input puzz
278d0 6c 65 2e 0a 54 68 65 20 22 64 69 67 69 74 73 22  le..The "digits"
278e0 20 43 54 45 20 64 65 66 69 6e 65 73 20 61 20 74   CTE defines a t
278f0 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20  able that holds 
27900 61 6c 6c 20 64 69 67 69 74 73 20 62 65 74 77 65  all digits betwe
27910 65 6e 20 31 20 61 6e 64 20 39 2e 0a 54 68 65 20  en 1 and 9..The 
27920 77 6f 72 6b 20 6f 66 20 73 6f 6c 76 69 6e 67 20  work of solving 
27930 74 68 65 20 70 75 7a 7a 6c 65 20 69 73 20 75 6e  the puzzle is un
27940 64 65 72 74 61 6b 65 6e 20 62 79 20 74 68 65 20  dertaken by the 
27950 22 78 22 20 43 54 45 2e 0a 41 6e 20 65 6e 74 72  "x" CTE..An entr
27960 79 20 69 6e 20 78 28 73 2c 69 6e 64 29 20 6d 65  y in x(s,ind) me
27970 61 6e 73 20 74 68 61 74 20 74 68 65 20 38 31 2d  ans that the 81-
27980 63 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67  character string
27990 20 22 73 22 20 69 73 20 61 20 76 61 6c 69 64 0a   "s" is a valid.
279a0 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 28 69  sudoku puzzle (i
279b0 74 20 68 61 73 20 6e 6f 20 63 6f 6e 66 6c 69 63  t has no conflic
279c0 74 73 29 20 61 6e 64 20 74 68 61 74 20 74 68 65  ts) and that the
279d0 20 66 69 72 73 74 20 75 6e 6b 6e 6f 77 6e 20 63   first unknown c
279e0 68 61 72 61 63 74 65 72 0a 69 73 20 61 74 20 70  haracter.is at p
279f0 6f 73 69 74 69 6f 6e 20 22 69 6e 64 22 2c 20 6f  osition "ind", o
27a00 72 20 69 6e 64 3d 3d 30 20 69 66 20 61 6c 6c 20  r ind==0 if all 
27a10 63 68 61 72 61 63 74 65 72 20 70 6f 73 69 74 69  character positi
27a20 6f 6e 73 20 61 72 65 20 66 69 6c 6c 65 64 20 69  ons are filled i
27a30 6e 2e 0a 54 68 65 20 67 6f 61 6c 2c 20 74 68 65  n..The goal, the
27a40 6e 2c 20 69 73 20 74 6f 20 63 6f 6d 70 75 74 65  n, is to compute
27a50 20 65 6e 74 72 69 65 73 20 66 6f 72 20 22 78 22   entries for "x"
27a60 20 77 69 74 68 20 61 6e 20 22 69 6e 64 22 20 6f   with an "ind" o
27a70 66 20 30 2e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c  f 0...<p>The sol
27a80 76 65 72 20 77 6f 72 6b 73 20 62 79 20 61 64 64  ver works by add
27a90 69 6e 67 20 6e 65 77 20 65 6e 74 72 69 65 73 20  ing new entries 
27aa0 74 6f 20 74 68 65 20 22 78 22 20 72 65 63 75 72  to the "x" recur
27ab0 73 69 76 65 20 74 61 62 6c 65 2e 0a 47 69 76 65  sive table..Give
27ac0 6e 20 70 72 69 6f 72 20 65 6e 74 72 69 65 73 2c  n prior entries,
27ad0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
27ae0 65 6c 65 63 74 20 74 72 69 65 73 20 74 6f 20 66  elect tries to f
27af0 69 6c 6c 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  ill in a single 
27b00 6e 65 77 0a 70 6f 73 69 74 69 6f 6e 20 77 69 74  new.position wit
27b10 68 20 61 6c 6c 20 76 61 6c 75 65 73 20 62 65 74  h all values bet
27b20 77 65 65 6e 20 31 20 61 6e 64 20 39 20 74 68 61  ween 1 and 9 tha
27b30 74 20 61 63 74 75 61 6c 6c 79 20 77 6f 72 6b 20  t actually work 
27b40 69 6e 20 74 68 61 74 0a 70 6f 73 69 74 69 6f 6e  in that.position
27b50 2e 20 20 54 68 65 20 63 6f 6d 70 6c 69 63 61 74  .  The complicat
27b60 65 64 20 22 4e 4f 54 20 45 58 49 53 54 53 22 20  ed "NOT EXISTS" 
27b70 73 75 62 71 75 65 72 79 20 69 73 20 74 68 65 20  subquery is the 
27b80 6d 61 67 69 63 20 74 68 61 74 0a 66 69 67 75 72  magic that.figur
27b90 65 73 20 6f 75 74 20 77 68 65 74 68 65 72 20 6f  es out whether o
27ba0 72 20 6e 6f 74 20 65 61 63 68 20 63 61 6e 64 69  r not each candi
27bb0 64 61 74 65 20 22 73 22 20 73 74 72 69 6e 67 20  date "s" string 
27bc0 69 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f 6b  is a valid.sudok
27bd0 75 20 70 75 7a 7a 6c 65 20 6f 72 20 6e 6f 74 2e  u puzzle or not.
27be0 0a 0a 3c 70 3e 54 68 65 20 66 69 6e 61 6c 20 61  ..<p>The final a
27bf0 6e 73 77 65 72 20 69 73 20 66 6f 75 6e 64 20 62  nswer is found b
27c00 79 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  y looking for a 
27c10 73 74 72 69 6e 67 20 77 69 74 68 20 69 6e 64 3d  string with ind=
27c20 3d 30 2e 0a 49 66 20 74 68 65 20 6f 72 69 67 69  =0..If the origi
27c30 6e 61 6c 20 73 75 64 6f 6b 75 20 70 72 6f 62 6c  nal sudoku probl
27c40 65 6d 20 64 69 64 20 6e 6f 74 20 68 61 76 65 20  em did not have 
27c50 61 20 75 6e 69 71 75 65 20 73 6f 6c 75 74 69 6f  a unique solutio
27c60 6e 2c 20 74 68 65 6e 0a 74 68 65 20 71 75 65 72  n, then.the quer
27c70 79 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 61 6c  y will return al
27c80 6c 20 70 6f 73 73 69 62 6c 65 20 73 6f 6c 75 74  l possible solut
27c90 69 6f 6e 73 2e 20 20 49 66 20 74 68 65 20 6f 72  ions.  If the or
27ca0 69 67 69 6e 61 6c 20 70 72 6f 62 6c 65 6d 0a 77  iginal problem.w
27cb0 61 73 20 75 6e 73 6f 6c 76 61 62 6c 65 2c 20 74  as unsolvable, t
27cc0 68 65 6e 20 6e 6f 20 72 6f 77 73 20 77 69 6c 6c  hen no rows will
27cd0 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 20 49   be returned.  I
27ce0 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
27cf0 20 75 6e 69 71 75 65 0a 61 6e 73 77 65 72 20 69   unique.answer i
27d00 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
27d10 0a 35 33 34 36 37 38 39 31 32 36 37 32 31 39 35  .534678912672195
27d20 33 34 38 31 39 38 33 34 32 35 36 37 38 35 39 37  3481983425678597
27d30 36 31 34 32 33 34 32 36 38 35 33 37 39 31 37 31  6142342685379171
27d40 33 39 32 34 38 35 36 39 36 31 35 33 37 32 38 34  3924856961537284
27d50 32 38 37 34 31 39 36 33 35 33 34 35 32 38 36 31  2874196353452861
27d60 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  79.</blockquote>
27d70 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 75 74 69 6f  ..<p>The solutio
27d80 6e 20 77 61 73 20 63 6f 6d 70 75 74 65 64 20 69  n was computed i
27d90 6e 20 6c 65 73 73 20 74 68 61 6e 20 33 30 30 20  n less than 300 
27da0 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 6f 6e 20  milliseconds on 
27db0 61 20 6d 6f 64 65 72 6e 0a 77 6f 72 6b 73 74 61  a modern.worksta
27dc0 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c 69 6d 69 74  tion...<h3>Limit
27dd0 61 74 69 6f 6e 73 20 41 6e 64 20 43 61 76 65 61  ations And Cavea
27de0 74 73 3c 2f 68 33 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  ts</h3>..<ul>.<l
27df0 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54 48 20 63  i><p>.The WITH c
27e00 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20  lause cannot be 
27e10 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 5b 43  used within a [C
27e20 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 2e 0a  REATE TRIGGER]..
27e30 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54 48  <li><p>.The WITH
27e40 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61 70 70   clause must app
27e50 65 61 72 20 61 74 20 74 68 65 20 62 65 67 69 6e  ear at the begin
27e60 6e 69 6e 67 20 6f 66 20 61 20 74 6f 70 2d 6c 65  ning of a top-le
27e70 76 65 6c 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  vel [SELECT] sta
27e80 74 65 6d 65 6e 74 0a 6f 72 20 61 74 20 74 68 65  tement.or at the
27e90 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20   beginning of a 
27ea0 73 75 62 71 75 65 72 79 2e 20 20 54 68 65 20 57  subquery.  The W
27eb0 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f  ITH clause canno
27ec0 74 20 62 65 20 70 72 65 70 65 6e 64 65 64 20 74  t be prepended t
27ed0 6f 0a 74 68 65 20 73 65 63 6f 6e 64 20 6f 72 20  o.the second or 
27ee0 73 75 62 73 65 71 75 65 6e 74 20 53 45 4c 45 43  subsequent SELEC
27ef0 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 61  T statement of a
27f00 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63   [compound selec
27f10 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20  t]..<li><p>.The 
27f20 53 51 4c 3a 31 39 39 39 20 73 70 65 63 20 72 65  SQL:1999 spec re
27f30 71 75 69 72 65 73 20 74 68 61 74 20 74 68 65 20  quires that the 
27f40 52 45 43 55 52 53 49 56 45 20 6b 65 79 77 6f 72  RECURSIVE keywor
27f50 64 20 66 6f 6c 6c 6f 77 20 57 49 54 48 20 69 6e  d follow WITH in
27f60 20 61 6e 79 0a 57 49 54 48 20 63 6c 61 75 73 65   any.WITH clause
27f70 20 74 68 61 74 20 69 6e 63 6c 75 64 65 73 20 61   that includes a
27f80 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f   recursive commo
27f90 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
27fa0 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 20 66 6f  on.  However, fo
27fb0 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r.compatibility 
27fc0 77 69 74 68 20 53 71 6c 53 65 72 76 65 72 20 61  with SqlServer a
27fd0 6e 64 20 4f 72 61 63 6c 65 2c 20 53 51 4c 69 74  nd Oracle, SQLit
27fe0 65 20 64 6f 65 73 20 6e 6f 74 20 65 6e 66 6f 72  e does not enfor
27ff0 63 65 20 74 68 69 73 20 72 75 6c 65 2e 0a 3c 2f  ce this rule..</
28000 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ul>..<tcl>.#####
28010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28050 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
28060 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c 65 63 74  on SELECT select
28070 20 7b 53 45 4c 45 43 54 20 71 75 65 72 79 7d 0a   {SELECT query}.
28080 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
28090 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d 73  Diagram select-s
280a0 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e  tmt.</tcl>...<p>
280b0 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  The SELECT state
280c0 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
280d0 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61  query the databa
280e0 73 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74 20  se.  The.result 
280f0 6f 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a  of a SELECT is z
28100 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  ero or more rows
28110 20 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65   of data where e
28120 61 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69  ach row.has a fi
28130 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  xed number of co
28140 6c 75 6d 6e 73 2e 20 20 41 20 53 45 4c 45 43 54  lumns.  A SELECT
28150 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20   statement does 
28160 6e 6f 74 20 6d 61 6b 65 0a 61 6e 79 20 63 68 61  not make.any cha
28170 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61  nges to the data
28180 62 61 73 65 2e 0a 0a 3c 70 3e 54 68 65 20 22 5b  base...<p>The "[
28190 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 73 79  select-stmt]" sy
281a0 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61 62 6f  ntax diagram abo
281b0 76 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 73  ve attempts to s
281c0 68 6f 77 20 61 73 20 6d 75 63 68 20 6f 66 20 74  how as much of t
281d0 68 65 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he.SELECT statem
281e0 65 6e 74 20 73 79 6e 74 61 78 20 61 73 20 70 6f  ent syntax as po
281f0 73 73 69 62 6c 65 20 69 6e 20 61 20 73 69 6e 67  ssible in a sing
28200 6c 65 20 64 69 61 67 72 61 6d 2c 20 62 65 63 61  le diagram, beca
28210 75 73 65 20 73 6f 6d 65 20 72 65 61 64 65 72 73  use some readers
28220 0a 66 69 6e 64 20 74 68 61 74 20 68 65 6c 70 66  .find that helpf
28230 75 6c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ul.  The followi
28240 6e 67 20 22 5b 66 61 63 74 6f 72 65 64 2d 73 65  ng "[factored-se
28250 6c 65 63 74 2d 73 74 6d 74 5d 22 20 69 73 20 61  lect-stmt]" is a
28260 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 73 79  n alternative.sy
28270 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20 74 68  ntax diagrams th
28280 61 74 20 65 78 70 72 65 73 73 65 73 20 74 68 65  at expresses the
28290 20 73 61 6d 65 20 73 79 6e 74 61 78 20 62 75 74   same syntax but
282a0 20 74 72 69 65 73 20 74 6f 20 62 72 65 61 6b 20   tries to break 
282b0 74 68 65 20 73 79 6e 74 61 78 20 0a 64 6f 77 6e  the syntax .down
282c0 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72 20 63 68   into smaller ch
282d0 75 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63  unks...<tcl>.Rec
282e0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
282f0 72 61 6d 20 2d 2d 69 6e 69 74 69 61 6c 6c 79 2d  ram --initially-
28300 68 69 64 64 65 6e 20 66 61 63 74 6f 72 65 64 2d  hidden factored-
28310 73 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65  select-stmt sele
28320 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a  ct-core.</tcl>..
28330 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65  <p>Note that the
28340 72 65 20 61 72 65 20 70 61 74 68 73 20 74 68 72  re are paths thr
28350 6f 75 67 68 20 74 68 65 20 73 79 6e 74 61 78 20  ough the syntax 
28360 64 69 61 67 72 61 6d 73 20 74 68 61 74 0a 61 72  diagrams that.ar
28370 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69 6e  e not allowed in
28380 20 70 72 61 63 74 69 63 65 2e 20 20 53 6f 6d 65   practice.  Some
28390 20 65 78 61 6d 70 6c 65 73 3a 0a 3c 75 6c 3e 0a   examples:.<ul>.
283a0 3c 6c 69 3e 41 20 5b 56 41 4c 55 45 53 5d 20 63  <li>A [VALUES] c
283b0 6c 61 75 73 65 20 63 61 6e 20 62 65 20 74 68 65  lause can be the
283c0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69   first element i
283d0 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
283e0 4c 45 43 54 5d 0a 20 20 20 20 74 68 61 74 20 75  LECT].    that u
283f0 73 65 73 20 61 20 5b 57 49 54 48 5d 20 63 6c 61  ses a [WITH] cla
28400 75 73 65 2c 20 62 75 74 20 61 20 5b 73 69 6d 70  use, but a [simp
28410 6c 65 20 53 45 4c 45 43 54 5d 20 74 68 61 74 20  le SELECT] that 
28420 63 6f 6e 73 69 73 74 73 20 6f 66 0a 20 20 20 20  consists of.    
28430 6a 75 73 74 20 61 20 5b 56 41 4c 55 45 53 5d 20  just a [VALUES] 
28440 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65  clause cannot be
28450 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20 5b   preceded by a [
28460 57 49 54 48 5d 20 63 6c 61 75 73 65 2e 0a 3c 6c  WITH] clause..<l
28470 69 3e 54 68 65 20 5b 57 49 54 48 5d 20 63 6c 61  i>The [WITH] cla
28480 75 73 65 20 6d 75 73 74 20 6f 63 63 75 72 20 6f  use must occur o
28490 6e 20 74 68 65 20 66 69 72 73 74 20 53 45 4c 45  n the first SELE
284a0 43 54 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e  CT of a [compoun
284b0 64 20 53 45 4c 45 43 54 5d 2e 0a 20 20 20 20 49  d SELECT]..    I
284c0 74 20 63 61 6e 6e 6f 74 20 66 6f 6c 6c 6f 77 20  t cannot follow 
284d0 61 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72  a [compound-oper
284e0 61 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e 0a 54 68 65  ator]..</ul>.The
284f0 73 65 20 61 6e 64 20 6f 74 68 65 72 20 73 69 6d  se and other sim
28500 69 6c 61 72 20 73 79 6e 74 61 78 20 72 65 73 74  ilar syntax rest
28510 72 69 63 74 69 6f 6e 73 20 61 72 65 20 64 65 73  rictions are des
28520 63 72 69 62 65 64 20 69 6e 20 74 68 65 20 74 65  cribed in the te
28530 78 74 2e 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45  xt...<p>The SELE
28540 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
28550 74 68 65 20 6d 6f 73 74 20 63 6f 6d 70 6c 69 63  the most complic
28560 61 74 65 64 20 63 6f 6d 6d 61 6e 64 20 69 6e 20  ated command in 
28570 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
28580 2e 0a 54 6f 20 6d 61 6b 65 20 74 68 65 20 64 65  ..To make the de
28590 73 63 72 69 70 74 69 6f 6e 20 65 61 73 69 65 72  scription easier
285a0 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65   to follow, some
285b0 20 6f 66 20 74 68 65 20 70 61 73 73 61 67 65 73   of the passages
285c0 20 62 65 6c 6f 77 20 64 65 73 63 72 69 62 65 0a   below describe.
285d0 74 68 65 20 77 61 79 20 74 68 65 20 64 61 74 61  the way the data
285e0 20 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 53   returned by a S
285f0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
28600 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73  is determined as
28610 20 61 20 73 65 72 69 65 73 20 6f 66 0a 73 74 65   a series of.ste
28620 70 73 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74  ps. It is import
28630 61 6e 74 20 74 6f 20 6b 65 65 70 20 69 6e 20 6d  ant to keep in m
28640 69 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 73  ind that this is
28650 20 70 75 72 65 6c 79 20 69 6c 6c 75 73 74 72 61   purely illustra
28660 74 69 76 65 20 2d 0a 69 6e 20 70 72 61 63 74 69  tive -.in practi
28670 63 65 20 6e 65 69 74 68 65 72 20 53 51 4c 69 74  ce neither SQLit
28680 65 20 6e 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  e nor any other 
28690 53 51 4c 20 65 6e 67 69 6e 65 20 69 73 20 72 65  SQL engine is re
286a0 71 75 69 72 65 64 20 74 6f 20 66 6f 6c 6c 6f 77  quired to follow
286b0 20 0a 74 68 69 73 20 6f 72 20 61 6e 79 20 6f 74   .this or any ot
286c0 68 65 72 20 73 70 65 63 69 66 69 63 20 70 72 6f  her specific pro
286d0 63 65 73 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  cess...<tcl>hd_f
286e0 72 61 67 6d 65 6e 74 20 73 69 6d 70 6c 65 73 65  ragment simplese
286f0 6c 65 63 74 20 7b 73 69 6d 70 6c 65 20 53 45 4c  lect {simple SEL
28700 45 43 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53  ECT}</tcl>.<h3>S
28710 69 6d 70 6c 65 20 53 65 6c 65 63 74 20 50 72 6f  imple Select Pro
28720 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70  cessing</h3>..<p
28730 3e 54 68 65 20 63 6f 72 65 20 6f 66 20 61 20 53  >The core of a S
28740 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
28750 69 73 20 61 20 22 73 69 6d 70 6c 65 20 53 45 4c  is a "simple SEL
28760 45 43 54 22 20 73 68 6f 77 6e 20 62 79 20 74 68  ECT" shown by th
28770 65 0a 5b 73 65 6c 65 63 74 2d 63 6f 72 65 5d 20  e.[select-core] 
28780 61 6e 64 20 5b 73 69 6d 70 6c 65 2d 73 65 6c 65  and [simple-sele
28790 63 74 2d 73 74 6d 74 5d 20 73 79 6e 74 61 78 20  ct-stmt] syntax 
287a0 64 69 61 67 72 61 6d 73 20 62 65 6c 6f 77 2e 20  diagrams below. 
287b0 20 0a 49 6e 20 70 72 61 63 74 69 63 65 2c 20 6d   .In practice, m
287c0 6f 73 74 20 53 45 4c 45 43 54 20 73 74 61 74 65  ost SELECT state
287d0 6d 65 6e 74 73 20 61 72 65 20 73 69 6d 70 6c 65  ments are simple
287e0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
287f0 74 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72  ts...<tcl>.Recur
28800 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
28810 6d 20 73 69 6d 70 6c 65 2d 73 65 6c 65 63 74 2d  m simple-select-
28820 73 74 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72 65  stmt select-core
28830 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 47 65 6e 65  .</tcl>..<p>Gene
28840 72 61 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c  rating the resul
28850 74 73 20 6f 66 20 61 20 73 69 6d 70 6c 65 20 53  ts of a simple S
28860 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20  ELECT.statement 
28870 69 73 20 70 72 65 73 65 6e 74 65 64 20 61 73 20  is presented as 
28880 61 20 66 6f 75 72 20 73 74 65 70 20 70 72 6f 63  a four step proc
28890 65 73 73 20 69 6e 20 74 68 65 20 64 65 73 63 72  ess in the descr
288a0 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a 0a 3c  iption below:..<
288b0 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 46  ol>.  <li> <p>[F
288c0 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72 6f 63  ROM clause] proc
288d0 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70 75  essing: The inpu
288e0 74 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 73  t data for the s
288f0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 0a  imple SELECT is.
28900 20 20 20 20 20 20 20 64 65 74 65 72 6d 69 6e 65         determine
28910 64 2e 20 54 68 65 20 69 6e 70 75 74 20 64 61 74  d. The input dat
28920 61 20 69 73 20 65 69 74 68 65 72 20 69 6d 70 6c  a is either impl
28930 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65 20  icitly a single 
28940 72 6f 77 20 77 69 74 68 20 30 0a 20 20 20 20 20  row with 0.     
28950 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20 74 68    columns (if th
28960 65 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d 20 63  ere is no FROM c
28970 6c 61 75 73 65 29 20 6f 72 20 69 73 20 64 65 74  lause) or is det
28980 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 46  ermined by the F
28990 52 4f 4d 0a 20 20 20 20 20 20 20 63 6c 61 75 73  ROM.       claus
289a0 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 57 48  e..  <li> <p>[WH
289b0 45 52 45 20 63 6c 61 75 73 65 5d 20 70 72 6f 63  ERE clause] proc
289c0 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70 75  essing: The inpu
289d0 74 20 64 61 74 61 20 69 73 20 66 69 6c 74 65 72  t data is filter
289e0 65 64 20 75 73 69 6e 67 20 74 68 65 20 57 48 45  ed using the WHE
289f0 52 45 0a 20 20 20 20 20 20 20 63 6c 61 75 73 65  RE.       clause
28a00 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 0a 20   expression.  . 
28a10 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f 55 50 20   <li> <p>[GROUP 
28a20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20 48 41 56  BY|GROUP BY, HAV
28a30 49 4e 47 20 61 6e 64 20 72 65 73 75 6c 74 2d 63  ING and result-c
28a40 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
28a50 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 0a 20  ] processing: . 
28a60 20 20 20 20 20 20 54 68 65 20 73 65 74 20 6f 66        The set of
28a70 20 72 65 73 75 6c 74 20 72 6f 77 73 20 69 73 20   result rows is 
28a80 63 6f 6d 70 75 74 65 64 20 62 79 20 61 67 67 72  computed by aggr
28a90 65 67 61 74 69 6e 67 20 74 68 65 20 64 61 74 61  egating the data
28aa0 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 20 20   according to.  
28ab0 20 20 20 20 20 61 6e 79 20 47 52 4f 55 50 20 42       any GROUP B
28ac0 59 20 63 6c 61 75 73 65 20 61 6e 64 20 63 61 6c  Y clause and cal
28ad0 63 75 6c 61 74 69 6e 67 20 74 68 65 20 72 65 73  culating the res
28ae0 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73 69  ult-set expressi
28af0 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20 20 20 20  ons for the.    
28b00 20 20 20 72 6f 77 73 20 6f 66 20 74 68 65 20 66     rows of the f
28b10 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64 61  iltered input da
28b20 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c 69 3e 20  taset.  .  <li> 
28b30 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c 44 49 53  <p>[DISTINCT|DIS
28b40 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79 77 6f 72  TINCT/ALL keywor
28b50 64 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 49  d] processing: I
28b60 66 20 74 68 65 20 71 75 65 72 79 20 69 73 20 61  f the query is a
28b70 20 22 53 45 4c 45 43 54 0a 20 20 20 20 20 20 20   "SELECT.       
28b80 44 49 53 54 49 4e 43 54 22 20 71 75 65 72 79 2c  DISTINCT" query,
28b90 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
28ba0 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  are removed from
28bb0 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
28bc0 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a  lt rows..</ol>..
28bd0 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74 77 6f  <p>There are two
28be0 20 74 79 70 65 73 20 6f 66 20 73 69 6d 70 6c 65   types of simple
28bf0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
28c00 74 20 2d 20 61 67 67 72 65 67 61 74 65 20 61 6e  t - aggregate an
28c10 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65  d .non-aggregate
28c20 20 71 75 65 72 69 65 73 2e 20 5e 41 20 73 69 6d   queries. ^A sim
28c30 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
28c40 6d 65 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65  ment is an aggre
28c50 67 61 74 65 20 71 75 65 72 79 20 69 66 0a 69 74  gate query if.it
28c60 20 63 6f 6e 74 61 69 6e 73 20 65 69 74 68 65 72   contains either
28c70 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
28c80 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20 6d 6f 72  se or one or mor
28c90 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
28ca0 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20 72 65 73  tions.in the res
28cb0 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68 65 72 77  ult-set. ^Otherw
28cc0 69 73 65 2c 20 69 66 20 61 20 73 69 6d 70 6c 65  ise, if a simple
28cd0 20 53 45 4c 45 43 54 20 63 6f 6e 74 61 69 6e 73   SELECT contains
28ce0 20 6e 6f 20 61 67 67 72 65 67 61 74 65 0a 66 75   no aggregate.fu
28cf0 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f  nctions or a GRO
28d00 55 50 20 42 59 20 63 6c 61 75 73 65 2c 20 69 74  UP BY clause, it
28d10 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67   is a non-aggreg
28d20 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c 70 3e 3c  ate query...<p><
28d30 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e 61 74 69  b>1. Determinati
28d40 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  on of input data
28d50 20 28 46 52 4f 4d 20 63 6c 61 75 73 65 20 70 72   (FROM clause pr
28d60 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c  ocessing).</b>.<
28d70 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
28d80 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74 63 6c 3e  fromclause</tcl>
28d90 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64  .<tcl>hd_keyword
28da0 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73 65 7d 3c  s {FROM clause}<
28db0 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e  /tcl>..<p>The in
28dc0 70 75 74 20 64 61 74 61 20 75 73 65 64 20 62 79  put data used by
28dd0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
28de0 20 71 75 65 72 79 20 69 73 20 61 20 73 65 74 20   query is a set 
28df0 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73  of <i>N</i> rows
28e00 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f 69 3e 20   .each <i>M</i> 
28e10 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e 0a 0a 3c  columns wide...<
28e20 70 3e 5e 28 49 66 20 74 68 65 20 46 52 4f 4d 20  p>^(If the FROM 
28e30 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65  clause is omitte
28e40 64 20 66 72 6f 6d 20 61 20 73 69 6d 70 6c 65 20  d from a simple 
28e50 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
28e60 2c 20 74 68 65 6e 20 74 68 65 20 0a 69 6e 70 75  , then the .inpu
28e70 74 20 64 61 74 61 20 69 73 20 69 6d 70 6c 69 63  t data is implic
28e80 69 74 6c 79 20 61 20 73 69 6e 67 6c 65 20 72 6f  itly a single ro
28e90 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e 73 20 77  w zero columns w
28ea0 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c 69 3e 4e  ide)^ (i.e. <i>N
28eb0 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69 3e 4d 3c  </i>=1 and.<i>M<
28ec0 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49 66 20 61  /i>=0)...<p>If a
28ed0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
28ee0 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64  specified, the d
28ef0 61 74 61 20 6f 6e 20 77 68 69 63 68 20 61 20 73  ata on which a s
28f00 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65  imple SELECT que
28f10 72 79 0a 6f 70 65 72 61 74 65 73 20 63 6f 6d 65  ry.operates come
28f20 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e 65 20 6f  s from the one o
28f30 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 6f 72  r more tables or
28f40 20 73 75 62 71 75 65 72 69 65 73 20 28 53 45 4c   subqueries (SEL
28f50 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 0a 69  ECT statements.i
28f60 6e 20 70 61 72 65 6e 74 68 65 73 69 73 29 20 73  n parenthesis) s
28f70 70 65 63 69 66 69 65 64 20 66 6f 6c 6c 6f 77 69  pecified followi
28f80 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65 79 77  ng the FROM keyw
28f90 6f 72 64 2e 20 5e 41 20 73 75 62 71 75 65 72 79  ord. ^A subquery
28fa0 20 73 70 65 63 69 66 69 65 64 0a 69 6e 20 74 68   specified.in th
28fb0 65 20 74 61 62 6c 65 2d 6f 72 2d 73 75 62 71 75  e table-or-subqu
28fc0 65 72 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ery following th
28fd0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 6e  e FROM clause in
28fe0 20 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43   a .simple SELEC
28ff0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 68  T statement is.h
29000 61 6e 64 6c 65 64 20 61 73 20 69 66 20 69 74 20  andled as if it 
29010 77 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 74  was a table cont
29020 61 69 6e 69 6e 67 20 74 68 65 20 64 61 74 61 20  aining the data 
29030 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65 63  returned by exec
29040 75 74 69 6e 67 20 74 68 65 0a 73 75 62 71 75 65  uting the.subque
29050 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 45  ry statement. ^E
29060 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
29070 65 20 73 75 62 71 75 65 72 79 20 68 61 73 20 74  e subquery has t
29080 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f  he.[collation|co
29090 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
290a0 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d  ] and [affinity]
290b0 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
290c0 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nding expression
290d0 0a 69 6e 20 74 68 65 20 73 75 62 71 75 65 72 79  .in the subquery
290e0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e   statement...<p>
290f0 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f 6e 6c  ^If there is onl
29100 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  y a single table
29110 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
29120 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c  the FROM.clause,
29130 20 74 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20   then the input 
29140 64 61 74 61 20 75 73 65 64 20 62 79 20 74 68 65  data used by the
29150 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
29160 74 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  t is the content
29170 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20 74  s of the.named t
29180 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 72 65 20  able. ^If there 
29190 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  is more than one
291a0 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
291b0 72 79 20 69 6e 20 46 52 4f 4d 20 63 6c 61 75 73  ry in FROM claus
291c0 65 0a 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65  e.then the conte
291d0 6e 74 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  nts of all table
291e0 73 20 61 6e 64 2f 6f 72 20 73 75 62 71 75 65 72  s and/or subquer
291f0 69 65 73 0a 61 72 65 20 6a 6f 69 6e 65 64 20 69  ies.are joined i
29200 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74  nto a single dat
29210 61 73 65 74 20 66 6f 72 20 74 68 65 20 73 69 6d  aset for the sim
29220 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
29230 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61 74 65 20  ment to operate 
29240 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f 77 20  on..Exactly how 
29250 74 68 65 20 64 61 74 61 20 69 73 20 63 6f 6d 62  the data is comb
29260 69 6e 65 64 20 64 65 70 65 6e 64 73 20 6f 6e 20  ined depends on 
29270 74 68 65 20 73 70 65 63 69 66 69 63 20 5b 6a 6f  the specific [jo
29280 69 6e 2d 6f 70 65 72 61 74 6f 72 5d 20 61 6e 64  in-operator] and
29290 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e  .[join-constrain
292a0 74 5d 20 75 73 65 64 20 74 6f 20 63 6f 6e 6e 65  t] used to conne
292b0 63 74 20 74 68 65 20 74 61 62 6c 65 73 20 6f 72  ct the tables or
292c0 20 73 75 62 71 75 65 72 69 65 73 20 74 6f 67 65   subqueries toge
292d0 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f  ther...<p>All jo
292e0 69 6e 73 20 69 6e 20 53 51 4c 69 74 65 20 61 72  ins in SQLite ar
292f0 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63  e based on the c
29300 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
29310 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
29320 0a 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61  .right-hand data
29330 73 65 74 73 2e 20 5e 54 68 65 20 63 6f 6c 75 6d  sets. ^The colum
29340 6e 73 20 6f 66 20 74 68 65 20 63 61 72 74 65 73  ns of the cartes
29350 69 61 6e 20 70 72 6f 64 75 63 74 20 64 61 74 61  ian product data
29360 73 65 74 20 61 72 65 2c 20 69 6e 20 0a 6f 72 64  set are, in .ord
29370 65 72 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75  er, all the colu
29380 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  mns of the left-
29390 68 61 6e 64 20 64 61 74 61 73 65 74 20 66 6f 6c  hand dataset fol
293a0 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 74 68 65  lowed by all the
293b0 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20   columns.of the 
293c0 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73  right-hand datas
293d0 65 74 2e 20 5e 54 68 65 72 65 20 69 73 20 61 20  et. ^There is a 
293e0 72 6f 77 20 69 6e 20 74 68 65 20 63 61 72 74 65  row in the carte
293f0 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64 61 74  sian product dat
29400 61 73 65 74 0a 66 6f 72 6d 65 64 20 62 79 20 63  aset.formed by c
29410 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68 20 75 6e  ombining each un
29420 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ique combination
29430 20 6f 66 20 61 20 72 6f 77 20 66 72 6f 6d 20 74   of a row from t
29440 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 0a 61 6e  he left-hand .an
29450 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  d right-hand dat
29460 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f 74 68 65  asets. ^(In othe
29470 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
29480 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65  left-hand datase
29490 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 3c 69  t consists of.<i
294a0 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65  >N<sub><small>le
294b0 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ft</small></sub>
294c0 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20 0a 3c 69  </i> rows of .<i
294d0 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65  >M<sub><small>le
294e0 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ft</small></sub>
294f0 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e  </i> columns, an
29500 64 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  d the right-hand
29510 20 64 61 74 61 73 65 74 20 6f 66 0a 3c 69 3e 4e   dataset of.<i>N
29520 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68  <sub><small>righ
29530 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c  t</small></sub><
29540 2f 69 3e 20 72 6f 77 73 20 6f 66 0a 3c 69 3e 4d  /i> rows of.<i>M
29550 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68  <sub><small>righ
29560 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c  t</small></sub><
29570 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65  /i> columns, the
29580 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
29590 70 72 6f 64 75 63 74 20 69 73 20 61 0a 64 61 74  product is a.dat
295a0 61 73 65 74 20 6f 66 20 0a 3c 69 3e 4e 3c 73 75  aset of .<i>N<su
295b0 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73  b><small>left</s
295c0 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 26 74 69 6d 65  mall></sub>&time
295d0 73 3b 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72  s;N<sub><small>r
295e0 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  ight</small></su
295f0 62 3e 3c 2f 69 3e 0a 72 6f 77 73 2c 20 65 61 63  b></i>.rows, eac
29600 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 0a 3c 69  h containing .<i
29610 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65  >M<sub><small>le
29620 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ft</small></sub>
29630 2b 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69  +M<sub><small>ri
29640 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62  ght</small></sub
29650 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e  ></i> columns.)^
29660 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69  ..<p>^If the joi
29670 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 22 43  n-operator is "C
29680 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e  ROSS JOIN", "INN
29690 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
296a0 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28 22 2c 22   or a comma.(","
296b0 29 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 6e  ) and there is n
296c0 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  o ON or USING cl
296d0 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72  ause, then the r
296e0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6a 6f 69  esult of the joi
296f0 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74 68 65 20  n is.simply the 
29700 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
29710 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  t of the left an
29720 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  d right-hand dat
29730 61 73 65 74 73 2e 20 0a 49 66 20 6a 6f 69 6e 2d  asets. .If join-
29740 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 68 61  operator does ha
29750 76 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63  ve ON or USING c
29760 6c 61 75 73 65 73 2c 20 74 68 6f 73 65 20 61 72  lauses, those ar
29770 65 20 68 61 6e 64 6c 65 64 20 61 63 63 6f 72 64  e handled accord
29780 69 6e 67 20 74 6f 0a 74 68 65 20 66 6f 6c 6c 6f  ing to.the follo
29790 77 69 6e 67 20 62 75 6c 6c 65 74 20 70 6f 69 6e  wing bullet poin
297a0 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  ts:..<ul>.  <li>
297b0 20 3c 70 3e 5e 28 49 66 20 74 68 65 72 65 20 69   <p>^(If there i
297c0 73 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 74  s an ON clause t
297d0 68 65 6e 20 74 68 65 20 4f 4e 20 65 78 70 72 65  hen the ON expre
297e0 73 73 69 6f 6e 20 69 73 0a 20 20 20 20 20 20 20  ssion is.       
297f0 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61  evaluated for ea
29800 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 63 61  ch row of the ca
29810 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
29820 61 73 20 61 20 0a 20 20 20 20 20 20 20 5b 62 6f  as a .       [bo
29830 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
29840 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72  ]. Only rows for
29850 20 77 68 69 63 68 20 74 68 65 20 65 78 70 72 65   which the expre
29860 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
29870 74 6f 20 0a 20 20 20 20 20 20 20 74 72 75 65 20  to .       true 
29880 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f  are included fro
29890 6d 20 74 68 65 20 64 61 74 61 73 65 74 2e 29 5e  m the dataset.)^
298a0 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20  ..  <li> <p>^If 
298b0 74 68 65 72 65 20 69 73 20 61 20 55 53 49 4e 47  there is a USING
298c0 20 63 6c 61 75 73 65 0a 20 20 20 20 20 20 20 74   clause.       t
298d0 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20  hen each of the 
298e0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73 70 65  column names spe
298f0 63 69 66 69 65 64 20 6d 75 73 74 20 65 78 69 73  cified must exis
29900 74 20 69 6e 20 74 68 65 20 64 61 74 61 73 65 74  t in the dataset
29910 73 20 74 6f 20 0a 20 20 20 20 20 20 20 62 6f 74  s to .       bot
29920 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  h the left and r
29930 69 67 68 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e  ight of the join
29940 2d 6f 70 65 72 61 74 6f 72 2e 20 5e 28 46 6f 72  -operator. ^(For
29950 20 65 61 63 68 20 70 61 69 72 20 6f 66 20 6e 61   each pair of na
29960 6d 65 64 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d  med.       colum
29970 6e 73 2c 20 74 68 65 20 65 78 70 72 65 73 73 69  ns, the expressi
29980 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72 68 73 2e  on "lhs.X = rhs.
29990 58 22 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  X" is evaluated 
299a0 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a  for each row of.
299b0 20 20 20 20 20 20 20 74 68 65 20 63 61 72 74 65         the carte
299c0 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20  sian product as 
299d0 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  a [boolean expre
299e0 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77  ssion]. Only row
299f0 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20 20  s for which.    
29a00 20 20 20 61 6c 6c 20 73 75 63 68 20 65 78 70 72     all such expr
29a10 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
29a20 73 20 74 6f 20 74 72 75 65 20 61 72 65 20 69 6e  s to true are in
29a30 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 0a  cluded from the.
29a40 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 73 65         result se
29a50 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61  t.)^ ^When compa
29a60 72 69 6e 67 20 76 61 6c 75 65 73 20 61 73 20 61  ring values as a
29a70 20 72 65 73 75 6c 74 20 6f 66 20 61 20 55 53 49   result of a USI
29a80 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 0a 20  NG clause, the. 
29a90 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20 72 75 6c        normal rul
29aa0 65 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  es for handling 
29ab0 61 66 66 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c  affinities, coll
29ac0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 20  ation sequences 
29ad0 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20  and NULL.       
29ae0 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70 61 72  values in compar
29af0 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68  isons apply. ^Th
29b00 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68  e column from th
29b10 65 20 64 61 74 61 73 65 74 20 6f 6e 20 74 68 65  e dataset on the
29b20 0a 20 20 20 20 20 20 20 6c 65 66 74 2d 68 61 6e  .       left-han
29b30 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 6a 6f  d side of the jo
29b40 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 63  in-operator is c
29b50 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
29b60 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  on the left-hand
29b70 0a 20 20 20 20 20 20 20 73 69 64 65 20 6f 66 20  .       side of 
29b80 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
29b90 70 65 72 61 74 6f 72 20 28 3d 29 20 66 6f 72 20  perator (=) for 
29ba0 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
29bb0 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 20 20 20  collation .     
29bc0 20 20 73 65 71 75 65 6e 63 65 20 61 6e 64 20 61    sequence and a
29bd0 66 66 69 6e 69 74 79 20 70 72 65 63 65 64 65 6e  ffinity preceden
29be0 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e  ce...       <p>^
29bf0 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
29c00 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66   columns identif
29c10 69 65 64 20 62 79 20 61 20 55 53 49 4e 47 20 63  ied by a USING c
29c20 6c 61 75 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d  lause, the colum
29c30 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68  n.       from th
29c40 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
29c50 61 73 65 74 20 69 73 20 6f 6d 69 74 74 65 64 20  aset is omitted 
29c60 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20  from the joined 
29c70 64 61 74 61 73 65 74 2e 20 5e 54 68 69 73 20 0a  dataset. ^This .
29c80 20 20 20 20 20 20 20 69 73 20 74 68 65 20 6f 6e         is the on
29c90 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  ly difference be
29ca0 74 77 65 65 6e 20 61 20 55 53 49 4e 47 20 63 6c  tween a USING cl
29cb0 61 75 73 65 20 61 6e 64 20 69 74 73 20 65 71 75  ause and its equ
29cc0 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20  ivalent ON.     
29cd0 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20    constraint... 
29ce0 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
29cf0 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72  e NATURAL keywor
29d00 64 20 69 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e  d is in the join
29d10 2d 6f 70 65 72 61 74 6f 72 20 74 68 65 6e 20 61  -operator then a
29d20 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c 69 63 69  n.       implici
29d30 74 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 69  t USING clause i
29d40 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6a  s added to the j
29d50 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 73 2e  oin-constraints.
29d60 20 54 68 65 20 69 6d 70 6c 69 63 69 74 0a 20 20   The implicit.  
29d70 20 20 20 20 20 55 53 49 4e 47 20 63 6c 61 75 73       USING claus
29d80 65 20 63 6f 6e 74 61 69 6e 73 20 65 61 63 68 20  e contains each 
29d90 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  of the column na
29da0 6d 65 73 20 74 68 61 74 20 61 70 70 65 61 72 20  mes that appear 
29db0 69 6e 20 62 6f 74 68 0a 20 20 20 20 20 20 20 74  in both.       t
29dc0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
29dd0 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 64 61 74  t-hand input dat
29de0 61 73 65 74 73 2e 29 5e 20 5e 49 66 20 74 68 65  asets.)^ ^If the
29df0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
29e00 68 61 6e 64 0a 20 20 20 20 20 20 20 69 6e 70 75  hand.       inpu
29e10 74 20 64 61 74 61 73 65 74 73 20 66 65 61 74 75  t datasets featu
29e20 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c  re no common col
29e30 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65 6e 20  umn names, then 
29e40 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77  the NATURAL keyw
29e50 6f 72 64 0a 20 20 20 20 20 20 20 68 61 73 20 6e  ord.       has n
29e60 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20  o effect on the 
29e70 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6a  results of the j
29e80 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20 6f 72  oin. ^A USING or
29e90 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79 0a 20   ON clause may. 
29ea0 20 20 20 20 20 20 6e 6f 74 20 62 65 20 61 64 64        not be add
29eb0 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74 68 61  ed to a join tha
29ec0 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
29ed0 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 2e  NATURAL keyword.
29ee0 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  ..  <li> <p>^(If
29ef0 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74   the join-operat
29f00 6f 72 20 69 73 20 61 20 22 4c 45 46 54 20 4a 4f  or is a "LEFT JO
29f10 49 4e 22 20 6f 72 20 22 4c 45 46 54 20 4f 55 54  IN" or "LEFT OUT
29f20 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65 6e 0a 20  ER JOIN", then. 
29f30 20 20 20 20 20 20 61 66 74 65 72 0a 20 20 20 20        after.    
29f40 20 20 20 74 68 65 20 4f 4e 20 6f 72 20 55 53 49     the ON or USI
29f50 4e 47 20 66 69 6c 74 65 72 69 6e 67 20 63 6c 61  NG filtering cla
29f60 75 73 65 73 20 68 61 76 65 20 62 65 65 6e 20 61  uses have been a
29f70 70 70 6c 69 65 64 2c 20 61 6e 20 65 78 74 72 61  pplied, an extra
29f80 20 72 6f 77 20 69 73 20 0a 20 20 20 20 20 20 20   row is .       
29f90 61 64 64 65 64 20 74 6f 20 74 68 65 20 6f 75 74  added to the out
29fa0 70 75 74 20 66 6f 72 20 65 61 63 68 20 72 6f 77  put for each row
29fb0 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
29fc0 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e 70 75 74   left-hand input
29fd0 20 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74   .       dataset
29fe0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
29ff0 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20 61 74 20  s to no rows at 
2a000 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  all in the compo
2a010 73 69 74 65 0a 20 20 20 20 20 20 20 64 61 74 61  site.       data
2a020 73 65 74 20 28 69 66 20 61 6e 79 29 2e 29 5e 20  set (if any).)^ 
2a030 5e 54 68 65 20 61 64 64 65 64 20 72 6f 77 73 20  ^The added rows 
2a040 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20 76 61 6c  contain NULL val
2a050 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ues in the colum
2a060 6e 73 0a 20 20 20 20 20 20 20 74 68 61 74 20 77  ns.       that w
2a070 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  ould normally co
2a080 6e 74 61 69 6e 20 76 61 6c 75 65 73 20 63 6f 70  ntain values cop
2a090 69 65 64 20 66 72 6f 6d 20 74 68 65 20 72 69 67  ied from the rig
2a0a0 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 0a 20 20  ht-hand input.  
2a0b0 20 20 20 20 20 64 61 74 61 73 65 74 2e 20 20 0a       dataset.  .
2a0c0 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e  </ul>..<p>^(When
2a0d0 20 6d 6f 72 65 20 74 68 61 6e 20 74 77 6f 20 74   more than two t
2a0e0 61 62 6c 65 73 20 61 72 65 20 6a 6f 69 6e 65 64  ables are joined
2a0f0 20 74 6f 67 65 74 68 65 72 20 61 73 20 70 61 72   together as par
2a100 74 20 6f 66 20 61 20 46 52 4f 4d 20 63 6c 61 75  t of a FROM clau
2a110 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20 6f 70 65  se,.the join ope
2a120 72 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 63  rations are proc
2a130 65 73 73 65 64 20 69 6e 20 6f 72 64 65 72 20 66  essed in order f
2a140 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
2a150 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a 77 6f 72  t. In other .wor
2a160 64 73 2c 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  ds, the FROM cla
2a170 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31  use (A join-op-1
2a180 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 20   B join-op-2 C) 
2a190 69 73 20 63 6f 6d 70 75 74 65 64 20 61 73 20 0a  is computed as .
2a1a0 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29  ((A join-op-1 B)
2a1b0 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e   join-op-2 C).)^
2a1c0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
2a1d0 6e 74 20 63 72 6f 73 73 6a 6f 69 6e 20 7b 74 72  nt crossjoin {tr
2a1e0 65 61 74 73 20 74 68 65 20 43 52 4f 53 53 20 4a  eats the CROSS J
2a1f0 4f 49 4e 20 6f 70 65 72 61 74 6f 72 20 73 70 65  OIN operator spe
2a200 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e 0a 3c 70  cially}</tcl>.<p
2a210 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65 3a 20 53  ><b>Side note: S
2a220 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
2a230 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 2e 3c 2f  of CROSS JOIN.</
2a240 62 3e 0a 5e 54 68 65 72 65 20 69 73 20 6e 6f 20  b>.^There is no 
2a250 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
2a260 65 6e 20 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f  en the "INNER JO
2a270 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20  IN", "JOIN" and 
2a280 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f  "," join.operato
2a290 72 73 2e 20 54 68 65 79 20 61 72 65 20 63 6f 6d  rs. They are com
2a2a0 70 6c 65 74 65 6c 79 20 69 6e 74 65 72 63 68 61  pletely intercha
2a2b0 6e 67 65 61 62 6c 65 20 69 6e 20 53 51 4c 69 74  ngeable in SQLit
2a2c0 65 2e 0a 5e 28 54 68 65 20 22 43 52 4f 53 53 20  e..^(The "CROSS 
2a2d0 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61  JOIN" join opera
2a2e0 74 6f 72 20 70 72 6f 64 75 63 65 73 20 74 68 65  tor produces the
2a2f0 20 73 61 6d 65 20 72 65 73 75 6c 74 20 61 73 20   same result as 
2a300 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e  the ."INNER JOIN
2a310 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c  ", "JOIN" and ",
2a320 22 20 6f 70 65 72 61 74 6f 72 73 29 5e 2c 20 62  " operators)^, b
2a330 75 74 20 69 73 20 0a 5b 43 52 4f 53 53 20 4a 4f  ut is .[CROSS JO
2a340 49 4e 7c 68 61 6e 64 6c 65 64 20 64 69 66 66 65  IN|handled diffe
2a350 72 65 6e 74 6c 79 20 62 79 20 74 68 65 20 71 75  rently by the qu
2a360 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 5d 0a 69  ery optimizer].i
2a370 6e 20 74 68 61 74 20 69 74 20 70 72 65 76 65 6e  n that it preven
2a380 74 73 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  ts the query opt
2a390 69 6d 69 7a 65 72 20 66 72 6f 6d 20 72 65 6f 72  imizer from reor
2a3a0 64 65 72 69 6e 67 0a 74 68 65 20 74 61 62 6c 65  dering.the table
2a3b0 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2e 20 20  s in the join.  
2a3c0 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 70  An application p
2a3d0 72 6f 67 72 61 6d 6d 65 72 20 63 61 6e 20 75 73  rogrammer can us
2a3e0 65 20 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e  e the CROSS JOIN
2a3f0 20 0a 6f 70 65 72 61 74 6f 72 20 74 6f 20 64 69   .operator to di
2a400 72 65 63 74 6c 79 20 69 6e 66 6c 75 65 6e 63 65  rectly influence
2a410 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 74   the algorithm t
2a420 68 61 74 20 69 73 20 63 68 6f 73 65 6e 20 74 6f  hat is chosen to
2a430 20 69 6d 70 6c 65 6d 65 6e 74 0a 74 68 65 20 53   implement.the S
2a440 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
2a450 20 20 41 76 6f 69 64 20 75 73 69 6e 67 20 43 52    Avoid using CR
2a460 4f 53 53 20 4a 4f 49 4e 20 65 78 63 65 70 74 20  OSS JOIN except 
2a470 69 6e 20 73 70 65 63 69 66 69 63 20 73 69 74 75  in specific situ
2a480 61 74 69 6f 6e 73 20 0a 77 68 65 72 65 20 6d 61  ations .where ma
2a490 6e 75 61 6c 20 63 6f 6e 74 72 6f 6c 20 6f 66 20  nual control of 
2a4a0 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
2a4b0 7a 65 72 20 69 73 20 64 65 73 69 72 65 64 2e 20  zer is desired. 
2a4c0 20 41 76 6f 69 64 20 75 73 69 6e 67 0a 43 52 4f   Avoid using.CRO
2a4d0 53 53 20 4a 4f 49 4e 20 65 61 72 6c 79 20 69 6e  SS JOIN early in
2a4e0 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74   the development
2a4f0 20 6f 66 20 61 6e 20 61 70 70 6c 69 63 61 74 69   of an applicati
2a500 6f 6e 20 61 73 20 64 6f 69 6e 67 20 73 6f 20 69  on as doing so i
2a510 73 0a 61 20 3c 61 20 68 72 65 66 3d 22 68 74 74  s.a <a href="htt
2a520 70 3a 2f 2f 63 32 2e 63 6f 6d 2f 63 67 69 2f 77  p://c2.com/cgi/w
2a530 69 6b 69 3f 50 72 65 6d 61 74 75 72 65 4f 70 74  iki?PrematureOpt
2a540 69 6d 69 7a 61 74 69 6f 6e 22 3e 70 72 65 6d 61  imization">prema
2a550 74 75 72 65 0a 6f 70 74 69 6d 69 7a 61 74 69 6f  ture.optimizatio
2a560 6e 3c 2f 61 3e 2e 20 20 54 68 65 20 73 70 65 63  n</a>.  The spec
2a570 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20  ial handling of 
2a580 43 52 4f 53 53 20 4a 4f 49 4e 20 69 73 20 61 6e  CROSS JOIN is an
2a590 20 53 51 4c 69 74 65 2d 73 70 65 63 69 66 69 63   SQLite-specific
2a5a0 0a 66 65 61 74 75 72 65 20 61 6e 64 20 69 73 20  .feature and is 
2a5b0 6e 6f 74 20 61 20 70 61 72 74 20 6f 66 20 73 74  not a part of st
2a5c0 61 6e 64 61 72 64 20 53 51 4c 2e 0a 20 20 20 20  andard SQL..    
2a5d0 20 20 20 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61     ..<tcl>hd_fra
2a5e0 67 6d 65 6e 74 20 77 68 65 72 65 63 6c 61 75 73  gment whereclaus
2a5f0 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  e</tcl>.<tcl>hd_
2a600 6b 65 79 77 6f 72 64 73 20 7b 57 48 45 52 45 20  keywords {WHERE 
2a610 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 70  clause}</tcl>.<p
2a620 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20 63 6c 61  ><b>2. WHERE cla
2a630 75 73 65 20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f  use filtering.</
2a640 62 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61 20 57 48  b>..<p>^(If a WH
2a650 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 73 70  ERE clause is sp
2a660 65 63 69 66 69 65 64 2c 20 74 68 65 20 57 48 45  ecified, the WHE
2a670 52 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  RE expression is
2a680 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 0a   evaluated for .
2a690 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
2a6a0 69 6e 70 75 74 20 64 61 74 61 20 61 73 20 61 20  input data as a 
2a6b0 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
2a6c0 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20  ion]. Only rows 
2a6d0 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 57 48  for which the.WH
2a6e0 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
2a6f0 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
2a700 74 6f 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c  to true are incl
2a710 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  uded from the da
2a720 74 61 73 65 74 20 62 65 66 6f 72 65 0a 63 6f 6e  taset before.con
2a730 74 69 6e 75 69 6e 67 2e 29 5e 20 20 52 6f 77 73  tinuing.)^  Rows
2a740 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72   are excluded fr
2a750 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 69 66  om the result if
2a760 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2a770 65 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65  e.evaluates to e
2a780 69 74 68 65 72 20 66 61 6c 73 65 20 6f 72 20 4e  ither false or N
2a790 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f 72 20 61 20 4a  ULL...<p>For a J
2a7a0 4f 49 4e 20 6f 72 20 49 4e 4e 45 52 20 4a 4f 49  OIN or INNER JOI
2a7b0 4e 20 6f 72 20 43 52 4f 53 53 20 4a 4f 49 4e 2c  N or CROSS JOIN,
2a7c0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66   there is no dif
2a7d0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
2a7e0 0a 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 65 78  .a constraint ex
2a7f0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
2a800 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 6e 64  WHERE clause and
2a810 20 6f 6e 65 20 69 6e 20 74 68 65 20 4f 4e 20 63   one in the ON c
2a820 6c 61 75 73 65 2e 20 20 48 6f 77 65 76 65 72 2c  lause.  However,
2a830 0a 66 6f 72 20 61 20 4c 45 46 54 20 4a 4f 49 4e  .for a LEFT JOIN
2a840 20 6f 72 20 4c 45 46 54 20 4f 55 54 45 52 20 4a   or LEFT OUTER J
2a850 4f 49 4e 2c 20 74 68 65 20 64 69 66 66 65 72 65  OIN, the differe
2a860 6e 63 65 20 69 73 20 76 65 72 79 20 69 6d 70 6f  nce is very impo
2a870 72 74 61 6e 74 2e 20 20 0a 49 6e 20 61 20 4c 45  rtant.  .In a LE
2a880 46 54 20 4a 4f 49 4e 2c 0a 74 68 65 20 65 78 74  FT JOIN,.the ext
2a890 72 61 20 4e 55 4c 4c 20 72 6f 77 20 66 6f 72 20  ra NULL row for 
2a8a0 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 74  the right-hand t
2a8b0 61 62 6c 65 20 69 73 20 61 64 64 65 64 20 61 66  able is added af
2a8c0 74 65 72 20 4f 4e 20 63 6c 61 75 73 65 20 70 72  ter ON clause pr
2a8d0 6f 63 65 73 73 69 6e 67 0a 62 75 74 20 62 65 66  ocessing.but bef
2a8e0 6f 72 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  ore WHERE clause
2a8f0 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 41 20   processing.  A 
2a900 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66 20 74 68  constraint of th
2a910 65 20 66 6f 72 6d 20 22 6c 65 66 74 2e 78 3d 72  e form "left.x=r
2a920 69 67 68 74 2e 79 22 0a 69 6e 20 61 6e 20 4f 4e  ight.y".in an ON
2a930 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 74 68 65   clause will the
2a940 72 65 66 6f 72 65 20 61 6c 6c 6f 77 20 74 68 72  refore allow thr
2a950 6f 75 67 68 20 74 68 65 20 61 64 64 65 64 20 61  ough the added a
2a960 6c 6c 2d 4e 55 4c 4c 20 72 6f 77 73 20 6f 66 20  ll-NULL rows of 
2a970 74 68 65 0a 72 69 67 68 74 20 74 61 62 6c 65 2e  the.right table.
2a980 20 20 42 75 74 20 69 66 20 74 68 61 74 20 73 61    But if that sa
2a990 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  me constraint is
2a9a0 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c   in the WHERE cl
2a9b0 61 75 73 65 20 61 20 4e 55 4c 4c 20 69 6e 0a 22  ause a NULL in."
2a9c0 72 69 67 68 74 2e 79 22 20 77 69 6c 6c 20 70 72  right.y" will pr
2a9d0 65 76 65 6e 74 20 74 68 65 20 65 78 70 72 65 73  event the expres
2a9e0 73 69 6f 6e 20 22 6c 65 66 74 2e 78 3d 72 69 67  sion "left.x=rig
2a9f0 68 74 2e 79 22 20 66 72 6f 6d 20 62 65 69 6e 67  ht.y" from being
2aa00 20 74 72 75 65 2c 20 61 6e 64 0a 74 68 75 73 20   true, and.thus 
2aa10 65 78 63 6c 75 64 65 20 74 68 61 74 20 72 6f 77  exclude that row
2aa20 20 66 72 6f 6d 20 74 68 65 20 6f 75 74 70 75 74   from the output
2aa30 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47 65 6e 65  ...<p><b>3. Gene
2aa40 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 65  ration of the se
2aa50 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
2aa60 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72  .</b>.<tcl>hd_fr
2aa70 61 67 6d 65 6e 74 20 72 65 73 75 6c 74 73 65 74  agment resultset
2aa80 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b  </tcl>.<tcl>hd_k
2aa90 65 79 77 6f 72 64 73 20 7b 72 65 73 75 6c 74 2d  eywords {result-
2aaa0 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73 7d  set expressions}
2aab0 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f 74 63 6c   {GROUP BY}</tcl
2aac0 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65 20 69  >..<p>Once the i
2aad0 6e 70 75 74 20 64 61 74 61 20 66 72 6f 6d 20 74  nput data from t
2aae0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 68  he FROM clause h
2aaf0 61 73 20 62 65 65 6e 20 66 69 6c 74 65 72 65 64  as been filtered
2ab00 20 62 79 20 74 68 65 0a 57 48 45 52 45 20 63 6c   by the.WHERE cl
2ab10 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ause expression 
2ab20 28 69 66 20 61 6e 79 29 2c 20 74 68 65 20 73 65  (if any), the se
2ab30 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
2ab40 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20   for the simple 
2ab50 0a 53 45 4c 45 43 54 20 61 72 65 20 63 61 6c 63  .SELECT are calc
2ab60 75 6c 61 74 65 64 2e 20 45 78 61 63 74 6c 79 20  ulated. Exactly 
2ab70 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e 65  how this is done
2ab80 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68 65 74   depends on whet
2ab90 68 65 72 20 74 68 65 20 73 69 6d 70 6c 65 20 0a  her the simple .
2aba0 53 45 4c 45 43 54 20 69 73 20 61 6e 20 61 67 67  SELECT is an agg
2abb0 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e 2d 61 67  regate or non-ag
2abc0 67 72 65 67 61 74 65 20 71 75 65 72 79 2c 20 61  gregate query, a
2abd0 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  nd whether or no
2abe0 74 20 61 20 47 52 4f 55 50 0a 42 59 20 63 6c 61  t a GROUP.BY cla
2abf0 75 73 65 20 77 61 73 20 73 70 65 63 69 66 69 65  use was specifie
2ac00 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c 69 73 74  d...<p> The list
2ac10 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
2ac20 62 65 74 77 65 65 6e 20 74 68 65 20 53 45 4c 45  between the SELE
2ac30 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65 79 77  CT and FROM keyw
2ac40 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e 20 61 73  ords is known as
2ac50 0a 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72  .the result expr
2ac60 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20 20 5e 49  ession list.  ^I
2ac70 66 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65  f a result expre
2ac80 73 73 69 6f 6e 20 69 73 20 74 68 65 20 73 70 65  ssion is the spe
2ac90 63 69 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 0a  cial expression.
2aca0 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c  "*" then all col
2acb0 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 70 75  umns in the inpu
2acc0 74 20 64 61 74 61 20 61 72 65 20 73 75 62 73 74  t data are subst
2acd0 69 74 75 74 65 64 20 66 6f 72 20 74 68 61 74 20  ituted for that 
2ace0 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  one expression..
2acf0 5e 28 49 66 20 74 68 65 20 65 78 70 72 65 73 73  ^(If the express
2ad00 69 6f 6e 20 69 73 20 74 68 65 20 61 6c 69 61 73  ion is the alias
2ad10 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20 73   of a table or s
2ad20 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
2ad30 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f 6c 6c 6f  ROM clause.follo
2ad40 77 65 64 20 62 79 20 22 2e 2a 22 20 74 68 65 6e  wed by ".*" then
2ad50 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 66 72 6f   all columns fro
2ad60 6d 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  m the named tabl
2ad70 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 61 72  e or subquery ar
2ad80 65 0a 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e.substituted fo
2ad90 72 20 74 68 65 20 73 69 6e 67 6c 65 20 65 78 70  r the single exp
2ada0 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28 49 74 20  ression.)^ ^(It 
2adb0 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 75  is an error to u
2adc0 73 65 20 61 20 22 2a 22 20 6f 72 0a 22 61 6c 69  se a "*" or."ali
2add0 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f 6e  as.*" expression
2ade0 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20   in any context 
2adf0 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 65 73  other than a res
2ae00 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
2ae10 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73 20 61  ist.)^.^(It is a
2ae20 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  lso an error to 
2ae30 75 73 65 20 61 20 22 2a 22 20 6f 72 20 22 61 6c  use a "*" or "al
2ae40 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f  ias.*" expressio
2ae50 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 53 45  n in a simple SE
2ae60 4c 45 43 54 0a 71 75 65 72 79 20 74 68 61 74 20  LECT.query that 
2ae70 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20  does not have a 
2ae80 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e 0a 0a  FROM clause.)^..
2ae90 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62 65 72  <p> ^(The number
2aea0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
2aeb0 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  he rows returned
2aec0 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   by a simple SEL
2aed0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69 73  ECT statement.is
2aee0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6e 75   equal to the nu
2aef0 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
2af00 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ons in the resul
2af10 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  t expression lis
2af20 74 20 61 66 74 65 72 0a 73 75 62 73 74 69 74 75  t after.substitu
2af30 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20 61 6c  tion of * and al
2af40 69 61 73 2e 2a 20 65 78 70 72 65 73 73 69 6f 6e  ias.* expression
2af50 73 2e 29 5e 20 45 61 63 68 20 72 65 73 75 6c 74  s.)^ Each result
2af60 20 72 6f 77 20 69 73 20 63 61 6c 63 75 6c 61 74   row is calculat
2af70 65 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67  ed by.evaluating
2af80 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
2af90 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65   in the result e
2afa0 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 77  xpression list w
2afb0 69 74 68 20 72 65 73 70 65 63 74 20 74 6f 20 61  ith respect to a
2afc0 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 69  .single row of i
2afd0 6e 70 75 74 20 64 61 74 61 20 6f 72 2c 20 66 6f  nput data or, fo
2afe0 72 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  r aggregate quer
2aff0 69 65 73 2c 20 77 69 74 68 20 72 65 73 70 65 63  ies, with respec
2b000 74 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f 66 20  t to a group.of 
2b010 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  rows...<ul>.  <l
2b020 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c  i><p>^If the SEL
2b030 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
2b040 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65 67   <b>a non-aggreg
2b050 61 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20 74  ate query</b>, t
2b060 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65 78  hen .    each ex
2b070 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
2b080 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2b090 6e 20 6c 69 73 74 20 69 73 20 65 76 61 6c 75 61  n list is evalua
2b0a0 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
2b0b0 20 69 6e 0a 20 20 20 20 74 68 65 20 64 61 74 61   in.    the data
2b0c0 73 65 74 20 66 69 6c 74 65 72 65 64 20 62 79 20  set filtered by 
2b0d0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
2b0e0 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  ...  <li><p>^If 
2b0f0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2b100 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67  ment is <b>an ag
2b110 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
2b120 74 68 6f 75 74 20 61 20 47 52 4f 55 50 0a 20 20  thout a GROUP.  
2b130 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c    BY</b> clause,
2b140 20 74 68 65 6e 20 65 61 63 68 20 61 67 67 72 65   then each aggre
2b150 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20  gate expression 
2b160 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
2b170 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61  t is .    evalua
2b180 74 65 64 20 6f 6e 63 65 20 61 63 72 6f 73 73 20  ted once across 
2b190 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 73  the entire datas
2b1a0 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d 61 67  et. ^Each non-ag
2b1b0 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2b1c0 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65 20 72 65  on.    in the re
2b1d0 73 75 6c 74 2d 73 65 74 20 69 73 20 65 76 61 6c  sult-set is eval
2b1e0 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 61  uated once for a
2b1f0 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65  n arbitrarily se
2b200 6c 65 63 74 65 64 20 72 6f 77 20 6f 66 0a 20 20  lected row of.  
2b210 20 20 74 68 65 20 64 61 74 61 73 65 74 2e 20 5e    the dataset. ^
2b220 54 68 65 20 73 61 6d 65 20 61 72 62 69 74 72 61  The same arbitra
2b230 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
2b240 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 65 61  w is used for ea
2b250 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67 72 65  ch.    non-aggre
2b260 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2e  gate expression.
2b270 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 64 61 74   ^Or, if the dat
2b280 61 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 7a 65  aset contains ze
2b290 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 0a 20  ro rows, then . 
2b2a0 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67 67 72     each non-aggr
2b2b0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
2b2c0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67   is evaluated ag
2b2d0 61 69 6e 73 74 20 61 20 72 6f 77 20 63 6f 6e 73  ainst a row cons
2b2e0 69 73 74 69 6e 67 0a 20 20 20 20 65 6e 74 69 72  isting.    entir
2b2f0 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75  ely of NULL valu
2b300 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68 65 20  es...   <p>^The 
2b310 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
2b320 73 75 6c 74 2d 73 65 74 20 64 61 74 61 20 63 72  sult-set data cr
2b330 65 61 74 65 64 20 62 79 20 65 76 61 6c 75 61 74  eated by evaluat
2b340 69 6e 67 20 74 68 65 20 61 67 67 72 65 67 61 74  ing the aggregat
2b350 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d 61 67  e.    and non-ag
2b360 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2b370 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ons in the resul
2b380 74 2d 73 65 74 20 66 6f 72 6d 73 20 74 68 65 20  t-set forms the 
2b390 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20 20 20  result of an.   
2b3a0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
2b3b0 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50   without a GROUP
2b3c0 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 41 6e 20   BY clause. ^An 
2b3d0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
2b3e0 77 69 74 68 6f 75 74 20 61 0a 20 20 20 20 47 52  without a.    GR
2b3f0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6c  OUP BY clause al
2b400 77 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61  ways returns exa
2b410 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f 66 20  ctly one row of 
2b420 64 61 74 61 2c 20 65 76 65 6e 20 69 66 20 74 68  data, even if th
2b430 65 72 65 20 61 72 65 0a 20 20 20 20 7a 65 72 6f  ere are.    zero
2b440 20 72 6f 77 73 20 6f 66 20 69 6e 70 75 74 20 64   rows of input d
2b450 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  ata...  <li><p>^
2b460 28 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  (If the SELECT s
2b470 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61  tatement is <b>a
2b480 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
2b490 79 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a 20  y with a GROUP. 
2b4a0 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65     BY</b> clause
2b4b0 2c 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74  , then each of t
2b4c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73  he expressions s
2b4d0 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
2b4e0 20 6f 66 20 74 68 65 0a 20 20 20 20 47 52 4f 55   of the.    GROU
2b4f0 50 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 65  P BY clause is e
2b500 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
2b510 68 20 72 6f 77 20 6f 66 20 74 68 65 20 64 61 74  h row of the dat
2b520 61 73 65 74 2e 20 45 61 63 68 20 72 6f 77 0a 20  aset. Each row. 
2b530 20 20 20 69 73 20 74 68 65 6e 20 61 73 73 69 67     is then assig
2b540 6e 65 64 20 74 6f 20 61 20 22 67 72 6f 75 70 22  ned to a "group"
2b550 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65   based on the re
2b560 73 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f 72 20  sults; rows for 
2b570 77 68 69 63 68 0a 20 20 20 20 74 68 65 20 72 65  which.    the re
2b580 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74  sults of evaluat
2b590 69 6e 67 20 74 68 65 20 47 52 4f 55 50 20 42 59  ing the GROUP BY
2b5a0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
2b5b0 20 74 68 65 20 73 61 6d 65 20 67 65 74 0a 20 20   the same get.  
2b5c0 20 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68    assigned to th
2b5d0 65 20 73 61 6d 65 20 67 72 6f 75 70 2e 29 5e 20  e same group.)^ 
2b5e0 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
2b5f0 73 20 6f 66 20 67 72 6f 75 70 69 6e 67 20 72 6f  s of grouping ro
2b600 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20 76 61  ws, NULL .    va
2b610 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
2b620 72 65 64 20 65 71 75 61 6c 2e 20 5e 54 68 65 20  red equal. ^The 
2b630 75 73 75 61 6c 20 72 75 6c 65 73 20 66 6f 72 20  usual rules for 
2b640 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65 63  [collation|selec
2b650 74 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c 6c 61  ting a.    colla
2b660 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 77  tion sequence] w
2b670 69 74 68 20 77 68 69 63 68 20 74 6f 20 63 6f 6d  ith which to com
2b680 70 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73  pare text values
2b690 20 61 70 70 6c 79 20 77 68 65 6e 20 65 76 61 6c   apply when eval
2b6a0 75 61 74 69 6e 67 0a 20 20 20 20 65 78 70 72 65  uating.    expre
2b6b0 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55  ssions in a GROU
2b6c0 50 20 42 59 20 63 6c 61 75 73 65 2e 20 20 5e 54  P BY clause.  ^T
2b6d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  he expressions i
2b6e0 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 63  n the GROUP BY c
2b6f0 6c 61 75 73 65 0a 20 20 20 20 64 6f 20 3c 65 6d  lause.    do <em
2b700 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74  >not</em> have t
2b710 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e 73  o be expressions
2b720 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
2b730 74 68 65 20 72 65 73 75 6c 74 2e 20 5e 54 68 65  the result. ^The
2b740 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73  .    expressions
2b750 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63   in a GROUP BY c
2b760 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74 20 62 65  lause may not be
2b770 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
2b780 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e  ssions...    <p>
2b790 5e 28 49 66 20 61 20 48 41 56 49 4e 47 20 63 6c  ^(If a HAVING cl
2b7a0 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
2b7b0 64 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  d, it is evaluat
2b7c0 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  ed once for each
2b7d0 20 67 72 6f 75 70 20 0a 20 20 20 20 6f 66 20 72   group .    of r
2b7e0 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61  ows as a [boolea
2b7f0 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49  n expression]. I
2b800 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
2b810 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 0a 20  evaluating the. 
2b820 20 20 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65     HAVING clause
2b830 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 20 67   is false, the g
2b840 72 6f 75 70 20 69 73 20 64 69 73 63 61 72 64 65  roup is discarde
2b850 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 48 41 56  d.)^ ^If the HAV
2b860 49 4e 47 20 63 6c 61 75 73 65 20 69 73 0a 20 20  ING clause is.  
2b870 20 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65    an aggregate e
2b880 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73  xpression, it is
2b890 20 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73   evaluated acros
2b8a0 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68  s all rows in th
2b8b0 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20 20 20  e group. ^If.   
2b8c0 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65   a HAVING clause
2b8d0 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67   is a non-aggreg
2b8e0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ate expression, 
2b8f0 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  it is evaluated 
2b900 77 69 74 68 20 72 65 73 70 65 63 74 0a 20 20 20  with respect.   
2b910 20 74 6f 20 61 6e 20 61 72 62 69 74 72 61 72 69   to an arbitrari
2b920 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20  ly selected row 
2b930 66 72 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e 20  from the group. 
2b940 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78 70   ^The HAVING exp
2b950 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20 20 20  ression may.    
2b960 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c  refer to values,
2b970 20 65 76 65 6e 20 61 67 67 72 65 67 61 74 65 20   even aggregate 
2b980 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20  functions, that 
2b990 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72  are not in the r
2b9a0 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20  esult.</p>..    
2b9b0 3c 70 3e 5e 45 61 63 68 20 65 78 70 72 65 73 73  <p>^Each express
2b9c0 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
2b9d0 74 2d 73 65 74 20 69 73 20 74 68 65 6e 20 65 76  t-set is then ev
2b9e0 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72  aluated once for
2b9f0 20 65 61 63 68 0a 20 20 20 20 67 72 6f 75 70 20   each.    group 
2ba00 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20 74 68 65  of rows. ^If the
2ba10 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
2ba20 6e 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n aggregate expr
2ba30 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a 20  ession, it is . 
2ba40 20 20 20 65 76 61 6c 75 61 74 65 64 20 61 63 72     evaluated acr
2ba50 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20  oss all rows in 
2ba60 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68 65  the group. ^Othe
2ba70 72 77 69 73 65 2c 20 69 74 20 69 73 20 65 76 61  rwise, it is eva
2ba80 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a 20  luated against. 
2ba90 20 20 20 61 20 73 69 6e 67 6c 65 20 61 72 62 69     a single arbi
2baa0 74 72 61 72 69 6c 79 20 63 68 6f 73 65 6e 20 72  trarily chosen r
2bab0 6f 77 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74  ow from within t
2bac0 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 74 68  he group. ^If th
2bad0 65 72 65 20 69 73 20 6d 6f 72 65 0a 20 20 20 20  ere is more.    
2bae0 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67  than one non-agg
2baf0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2bb00 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  n in the result-
2bb10 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73 75  set, then all su
2bb20 63 68 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  ch.    expressio
2bb30 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  ns are evaluated
2bb40 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 72 6f   for the same ro
2bb50 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68  w...    <p>^Each
2bb60 20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75 74 20   group of input 
2bb70 64 61 74 61 73 65 74 20 72 6f 77 73 20 63 6f 6e  dataset rows con
2bb80 74 72 69 62 75 74 65 73 20 61 20 73 69 6e 67 6c  tributes a singl
2bb90 65 20 72 6f 77 20 74 6f 20 74 68 65 20 0a 20 20  e row to the .  
2bba0 20 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20    set of result 
2bbb0 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74 20 74  rows. ^Subject t
2bbc0 6f 20 66 69 6c 74 65 72 69 6e 67 20 61 73 73 6f  o filtering asso
2bbd0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
2bbe0 44 49 53 54 49 4e 43 54 0a 20 20 20 20 6b 65 79  DISTINCT.    key
2bbf0 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62 65 72  word, the number
2bc00 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65   of rows returne
2bc10 64 20 62 79 20 61 6e 20 61 67 67 72 65 67 61 74  d by an aggregat
2bc20 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47  e query with a G
2bc30 52 4f 55 50 0a 20 20 20 20 42 59 20 63 6c 61 75  ROUP.    BY clau
2bc40 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  se is the same a
2bc50 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2bc60 67 72 6f 75 70 73 20 6f 66 20 72 6f 77 73 20 70  groups of rows p
2bc70 72 6f 64 75 63 65 64 20 62 79 20 61 70 70 6c 79  roduced by apply
2bc80 69 6e 67 0a 20 20 20 20 74 68 65 20 47 52 4f 55  ing.    the GROU
2bc90 50 20 42 59 20 61 6e 64 20 48 41 56 49 4e 47 20  P BY and HAVING 
2bca0 63 6c 61 75 73 65 73 20 74 6f 20 74 68 65 20 66  clauses to the f
2bcb0 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64 61  iltered input da
2bcc0 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  taset..</ul>..<p
2bcd0 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f  ><b>4. Removal o
2bce0 66 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  f duplicate rows
2bcf0 20 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63 65   (DISTINCT proce
2bd00 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c  ssing).</b>.<tcl
2bd10 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69 73  >hd_fragment dis
2bd20 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  tinct</tcl>.<tcl
2bd30 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49  >hd_keywords {DI
2bd40 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c  STINCT}</tcl>..<
2bd50 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c  p>^One of the AL
2bd60 4c 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b 65  L or DISTINCT ke
2bd70 79 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f  ywords may follo
2bd80 77 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65 79  w the SELECT key
2bd90 77 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c  word in a .simpl
2bda0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2bdb0 6e 74 2e 20 5e 49 66 20 74 68 65 20 73 69 6d 70  nt. ^If the simp
2bdc0 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53  le SELECT is a S
2bdd0 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20  ELECT ALL, then 
2bde0 74 68 65 0a 65 6e 74 69 72 65 20 73 65 74 20 6f  the.entire set o
2bdf0 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 72  f result rows ar
2be00 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  e returned by th
2be10 65 20 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65  e SELECT. ^If ne
2be20 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53  ither ALL or.DIS
2be30 54 49 4e 43 54 20 61 72 65 20 70 72 65 73 65 6e  TINCT are presen
2be40 74 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  t, then the beha
2be50 76 69 6f 72 20 69 73 20 61 73 20 69 66 20 41 4c  vior is as if AL
2be60 4c 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64  L were specified
2be70 2e 20 0a 5e 49 66 20 74 68 65 20 73 69 6d 70 6c  . .^If the simpl
2be80 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45  e SELECT is a SE
2be90 4c 45 43 54 20 44 49 53 54 49 4e 43 54 2c 20 74  LECT DISTINCT, t
2bea0 68 65 6e 20 64 75 70 6c 69 63 61 74 65 20 72 6f  hen duplicate ro
2beb0 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 0a 66  ws are removed.f
2bec0 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
2bed0 65 73 75 6c 74 20 72 6f 77 73 20 62 65 66 6f 72  esult rows befor
2bee0 65 20 69 74 20 69 73 20 72 65 74 75 72 6e 65 64  e it is returned
2bef0 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  . ^For the purpo
2bf00 73 65 73 20 6f 66 0a 64 65 74 65 63 74 69 6e 67  ses of.detecting
2bf10 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 2c   duplicate rows,
2bf20 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73   two NULL values
2bf30 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
2bf40 74 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e 54 68  to be equal. ^Th
2bf50 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66  e.normal rules f
2bf60 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20 63  or selecting a c
2bf70 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2bf80 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  e to compare tex
2bf90 74 20 76 61 6c 75 65 73 20 77 69 74 68 0a 61 70  t values with.ap
2bfa0 70 6c 79 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66  ply...<tcl>.hd_f
2bfb0 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e 64  ragment compound
2bfc0 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63   {compound selec
2bfd0 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 71 75 65  t} {compound que
2bfe0 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 53 45  ry} {compound SE
2bff0 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20  LECT} {compound 
2c000 53 45 4c 45 43 54 73 7d 0a 3c 2f 74 63 6c 3e 0a  SELECTs}.</tcl>.
2c010 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53 65 6c  <h3>Compound Sel
2c020 65 63 74 20 53 74 61 74 65 6d 65 6e 74 73 3c 2f  ect Statements</
2c030 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72 20 6d  h3>..<p>Two or m
2c040 6f 72 65 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45  ore [simple SELE
2c050 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 6d  CT] statements m
2c060 61 79 20 62 65 20 63 6f 6e 6e 65 63 74 65 64 20  ay be connected 
2c070 74 6f 67 65 74 68 65 72 20 74 6f 20 66 6f 72 6d  together to form
2c080 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  .a compound SELE
2c090 43 54 20 75 73 69 6e 67 20 74 68 65 20 55 4e 49  CT using the UNI
2c0a0 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49  ON, UNION ALL, I
2c0b0 4e 54 45 52 53 45 43 54 20 6f 72 20 45 58 43 45  NTERSECT or EXCE
2c0c0 50 54 20 6f 70 65 72 61 74 6f 72 2c 0a 61 73 20  PT operator,.as 
2c0d0 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f 6c  shown by the fol
2c0e0 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a 0a  lowing diagram:.
2c0f0 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65  .<tcl>.Recursive
2c100 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f  BubbleDiagram co
2c110 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74 2d 73 74  mpound-select-st
2c120 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49  mt.</tcl>..<p>^I
2c130 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  n a compound SEL
2c140 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e  ECT, all the con
2c150 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73  stituent SELECTs
2c160 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74 68 65   must return the
2c170 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72 20 6f 66   same .number of
2c180 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e   result columns.
2c190 20 5e 41 73 20 74 68 65 20 63 6f 6d 70 6f 6e 65   ^As the compone
2c1a0 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e  nts of a compoun
2c1b0 64 20 53 45 4c 45 43 54 20 6d 75 73 74 0a 62 65  d SELECT must.be
2c1c0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
2c1d0 74 61 74 65 6d 65 6e 74 73 2c 20 74 68 65 79 20  tatements, they 
2c1e0 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  may not contain 
2c1f0 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72 20 5b 4c  [ORDER BY] or [L
2c200 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 2e 0a 5e  IMIT] clauses..^
2c210 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64 20 5b  [ORDER BY] and [
2c220 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 20 6d  LIMIT] clauses m
2c230 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72 20 61 74  ay only occur at
2c240 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
2c250 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64 0a  entire compound.
2c260 53 45 4c 45 43 54 2c 20 61 6e 64 20 74 68 65 6e  SELECT, and then
2c270 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 69 6e   only if the fin
2c280 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  al element of th
2c290 65 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20 6e 6f  e compound is no
2c2a0 74 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61  t a [VALUES] cla
2c2b0 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63 6f 6d 70  use...<p>^A comp
2c2c0 6f 75 6e 64 20 53 45 4c 45 43 54 20 63 72 65 61  ound SELECT crea
2c2d0 74 65 64 20 75 73 69 6e 67 20 55 4e 49 4f 4e 20  ted using UNION 
2c2e0 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72 65 74  ALL operator ret
2c2f0 75 72 6e 73 20 61 6c 6c 20 74 68 65 20 72 6f 77  urns all the row
2c300 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45 43  s.from the SELEC
2c310 54 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66  T to the left of
2c320 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f   the UNION ALL o
2c330 70 65 72 61 74 6f 72 2c 20 61 6e 64 20 61 6c 6c  perator, and all
2c340 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74   the rows.from t
2c350 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65  he SELECT to the
2c360 20 72 69 67 68 74 20 6f 66 20 69 74 2e 20 5e 54   right of it. ^T
2c370 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74 6f  he UNION operato
2c380 72 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  r works the same
2c390 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20 41 4c   way as.UNION AL
2c3a0 4c 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 64  L, except that d
2c3b0 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72  uplicate rows ar
2c3c0 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  e removed from t
2c3d0 68 65 20 66 69 6e 61 6c 20 72 65 73 75 6c 74 20  he final result 
2c3e0 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45 52 53  set..^The INTERS
2c3f0 45 43 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74  ECT operator ret
2c400 75 72 6e 73 20 74 68 65 20 69 6e 74 65 72 73 65  urns the interse
2c410 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65 73  ction of the res
2c420 75 6c 74 73 20 6f 66 20 74 68 65 20 6c 65 66 74  ults of the left
2c430 20 61 6e 64 0a 72 69 67 68 74 20 53 45 4c 45 43   and.right SELEC
2c440 54 73 2e 20 20 5e 54 68 65 20 45 58 43 45 50 54  Ts.  ^The EXCEPT
2c450 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e   operator return
2c460 73 20 74 68 65 20 73 75 62 73 65 74 20 6f 66 20  s the subset of 
2c470 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79  rows returned by
2c480 20 74 68 65 0a 6c 65 66 74 20 53 45 4c 45 43 54   the.left SELECT
2c490 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61 6c   that are not al
2c4a0 73 6f 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  so returned by t
2c4b0 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 53 45  he right-hand SE
2c4c0 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63 61 74 65  LECT. ^Duplicate
2c4d0 0a 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65  .rows are remove
2c4e0 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c  d from the resul
2c4f0 74 73 20 6f 66 20 49 4e 54 45 52 53 45 43 54 20  ts of INTERSECT 
2c500 61 6e 64 20 45 58 43 45 50 54 20 6f 70 65 72 61  and EXCEPT opera
2c510 74 6f 72 73 20 62 65 66 6f 72 65 20 74 68 65 0a  tors before the.
2c520 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 72 65  result set is re
2c530 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72  turned...<p>^For
2c540 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
2c550 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 64 75 70   determining dup
2c560 6c 69 63 61 74 65 20 72 6f 77 73 20 66 6f 72 20  licate rows for 
2c570 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 63  the results of c
2c580 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 20 6f  ompound.SELECT o
2c590 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c 20 76  perators, NULL v
2c5a0 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
2c5b0 65 72 65 64 20 65 71 75 61 6c 20 74 6f 20 6f 74  ered equal to ot
2c5c0 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  her NULL values 
2c5d0 61 6e 64 0a 64 69 73 74 69 6e 63 74 20 66 72 6f  and.distinct fro
2c5e0 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  m all non-NULL v
2c5f0 61 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f 6c 6c  alues. ^The coll
2c600 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75  ation sequence u
2c610 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 0a  sed to compare .
2c620 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20  two text values 
2c630 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73  is determined as
2c640 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   if the columns 
2c650 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  of the left and 
2c660 72 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c 45 43  right-hand.SELEC
2c670 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 65 72  T statements wer
2c680 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
2c690 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e  ight-hand operan
2c6a0 64 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73  ds of the equals
2c6b0 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c 20 65   (=).operator, e
2c6c0 78 63 65 70 74 20 74 68 61 74 20 67 72 65 61 74  xcept that great
2c6d0 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 69 73  er precedence is
2c6e0 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 74 6f   not assigned to
2c6f0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 73 65   a collation .se
2c700 71 75 65 6e 63 65 20 73 70 65 63 69 66 69 65 64  quence specified
2c710 20 77 69 74 68 20 74 68 65 20 70 6f 73 74 66 69   with the postfi
2c720 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  x COLLATE operat
2c730 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69 74 79  or. ^No affinity
2c740 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 73  .transformations
2c750 20 61 72 65 20 61 70 70 6c 69 65 64 20 74 6f 20   are applied to 
2c760 61 6e 79 20 76 61 6c 75 65 73 20 77 68 65 6e 20  any values when 
2c770 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73 20 61  comparing rows a
2c780 73 20 70 61 72 74 20 6f 66 20 61 0a 63 6f 6d 70  s part of a.comp
2c790 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a 0a 3c  ound SELECT. ..<
2c7a0 70 3e 5e 28 57 68 65 6e 20 74 68 72 65 65 20 6f  p>^(When three o
2c7b0 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45  r more simple SE
2c7c0 4c 45 43 54 73 20 61 72 65 20 63 6f 6e 6e 65 63  LECTs are connec
2c7d0 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d 70 6f  ted into a compo
2c7e0 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68 65 79  und SELECT,.they
2c7f0 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74   group from left
2c800 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f 74   to right. In ot
2c810 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 22 41  her words, if "A
2c820 22 2c 20 22 42 22 20 61 6e 64 20 22 43 22 20 61  ", "B" and "C" a
2c830 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20 53 45  re all.simple SE
2c840 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c  LECT statements,
2c850 20 28 41 20 6f 70 20 42 20 6f 70 20 43 29 20 69   (A op B op C) i
2c860 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20 28  s processed as (
2c870 28 41 20 6f 70 20 42 29 20 6f 70 20 43 29 2e 29  (A op B) op C).)
2c880 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ^..</p>..<tcl>hd
2c890 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 65 72 62  _fragment orderb
2c8a0 79 20 7b 6f 72 64 65 72 20 62 79 7d 20 7b 4f 52  y {order by} {OR
2c8b0 44 45 52 20 42 59 7d 3c 2f 74 63 6c 3e 0a 3c 68  DER BY}</tcl>.<h
2c8c0 33 3e 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  3>The ORDER BY c
2c8d0 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 49  lause</h3>..<p>I
2c8e0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
2c8f0 6d 65 6e 74 20 74 68 61 74 20 72 65 74 75 72 6e  ment that return
2c900 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s more than one 
2c910 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  row does not hav
2c920 65 20 61 6e 0a 4f 52 44 45 52 20 42 59 20 63 6c  e an.ORDER BY cl
2c930 61 75 73 65 2c 20 74 68 65 20 6f 72 64 65 72 20  ause, the order 
2c940 69 6e 20 77 68 69 63 68 20 74 68 65 20 72 6f 77  in which the row
2c950 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 69  s are returned i
2c960 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 4f 72 2c  s undefined..Or,
2c970 20 69 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   if a SELECT sta
2c980 74 65 6d 65 6e 74 20 64 6f 65 73 20 68 61 76 65  tement does have
2c990 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61   an ORDER BY cla
2c9a0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 6c 69  use, then the li
2c9b0 73 74 20 6f 66 0a 65 78 70 72 65 73 73 69 6f 6e  st of.expression
2c9c0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
2c9d0 65 20 4f 52 44 45 52 20 42 59 20 64 65 74 65 72  e ORDER BY deter
2c9e0 6d 69 6e 65 20 74 68 65 20 6f 72 64 65 72 20 69  mine the order i
2c9f0 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 61 72 65  n which rows.are
2ca00 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
2ca10 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a 5e 49 6e 20   user...<p>.^In 
2ca20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
2ca30 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 6f  CT] statement, o
2ca40 6e 6c 79 20 74 68 65 20 6c 61 73 74 20 6f 72 20  nly the last or 
2ca50 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70  right-most [simp
2ca60 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61 79 20 68  le SELECT].may h
2ca70 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20  ave an ORDER BY 
2ca80 63 6c 61 75 73 65 2e 20 5e 54 68 61 74 20 4f 52  clause. ^That OR
2ca90 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 77 69  DER BY clause wi
2caa0 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f 73 73 20  ll apply across 
2cab0 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 6f 66 0a  all elements of.
2cac0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20 5e 49  the compound. ^I
2cad0 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  f the right-most
2cae0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63   element of a [c
2caf0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20  ompound SELECT] 
2cb00 69 73 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c  is a [VALUES] cl
2cb10 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f 20 4f 52  ause,.then no OR
2cb20 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
2cb30 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68 61 74   allowed on that
2cb40 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a 3c 70   statement....<p
2cb50 3e 5e 52 6f 77 73 20 61 72 65 20 66 69 72 73 74  >^Rows are first
2cb60 20 73 6f 72 74 65 64 20 62 61 73 65 64 20 6f 6e   sorted based on
2cb70 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
2cb80 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 6c  evaluating the l
2cb90 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73  eft-most express
2cba0 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44 45 52  ion in the ORDER
2cbb0 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e 20 74   BY list, then t
2cbc0 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e 0a 62  ies are broken.b
2cbd0 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
2cbe0 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73   second left-mos
2cbf0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  t expression and
2cc00 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72 64 65   so on. The orde
2cc10 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f 20 72  r in which.two r
2cc20 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 61 6c  ows for which al
2cc30 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  l ORDER BY expre
2cc40 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
2cc50 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65 73 20  to equal values 
2cc60 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69 73 20  are.returned is 
2cc70 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61 63 68  undefined. ^Each
2cc80 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2cc90 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74 69  sion may be opti
2cca0 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  onally followed.
2ccb0 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65  by one of the ke
2ccc0 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d 61 6c  ywords ASC (smal
2ccd0 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65 20 72  ler values are r
2cce0 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 20 6f  eturned first) o
2ccf0 72 20 44 45 53 43 20 28 6c 61 72 67 65 72 0a 76  r DESC (larger.v
2cd00 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72 6e  alues are return
2cd10 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66 20 6e  ed first). ^If n
2cd20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
2cd30 53 43 20 61 72 65 20 73 70 65 63 69 66 69 65 64  SC are specified
2cd40 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72 74 65  , rows.are sorte
2cd50 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 28  d in ascending (
2cd60 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 66  smaller values f
2cd70 69 72 73 74 29 20 6f 72 64 65 72 20 62 79 20 64  irst) order by d
2cd80 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68  efault...<p>Each
2cd90 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2cda0 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73 73 65  sion is processe
2cdb0 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  d as follows:</p
2cdc0 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e  >..<ol>.<li><p>^
2cdd0 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  If the ORDER BY 
2cde0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
2cdf0 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67 65 72  constant integer
2ce00 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78 70 72   K then the.expr
2ce10 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64  ession is consid
2ce20 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20 66 6f  ered an alias fo
2ce30 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75 6d  r the K-th colum
2ce40 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  n of the result 
2ce50 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61 72 65  set.(columns are
2ce60 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c   numbered from l
2ce70 65 66 74 20 74 6f 20 72 69 67 68 74 20 73 74 61  eft to right sta
2ce80 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e 0a 0a  rting with 1)...
2ce90 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f  <li><p>^If the O
2cea0 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2ceb0 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  on is an identif
2cec0 69 65 72 20 74 68 61 74 20 63 6f 72 72 65 73 70  ier that corresp
2ced0 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c 69 61  onds to.the alia
2cee0 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65 20  s of one of the 
2cef0 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 2c 20  output columns, 
2cf00 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
2cf10 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ion is considere
2cf20 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  d.an alias for t
2cf30 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69  hat column...<li
2cf40 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
2cf50 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
2cf60 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
2cf70 79 20 6f 74 68 65 72 20 65 78 70 72 65 73 73 69  y other expressi
2cf80 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61 6c 75  on, it .is evalu
2cf90 61 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 74  ated and the ret
2cfa0 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73 65 64  urned value used
2cfb0 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20 6f 75   to order the ou
2cfc0 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a 74  tput rows. ^If.t
2cfd0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2cfe0 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c 65 20  ent is a simple 
2cff0 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e 20  SELECT, then an 
2d000 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63 6f 6e  ORDER BY may con
2d010 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74 72 61  tain any.arbitra
2d020 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  ry expressions. 
2d030 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65  ^However, if the
2d040 20 53 45 4c 45 43 54 20 69 73 20 61 20 63 6f 6d   SELECT is a com
2d050 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 74 68  pound SELECT, th
2d060 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78 70 72  en.ORDER BY expr
2d070 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65  essions that are
2d080 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74 6f 20   not aliases to 
2d090 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20 6d  output columns m
2d0a0 75 73 74 20 62 65 20 65 78 61 63 74 6c 79 0a 74  ust be exactly.t
2d0b0 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20 65 78  he same as an ex
2d0c0 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20 61 73  pression used as
2d0d0 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   an output colum
2d0e0 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f  n..</ol>..<p>^Fo
2d0f0 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
2d100 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c 20  f sorting rows, 
2d110 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
2d120 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  red in the same 
2d130 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d 70  way.as for [comp
2d140 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73 69 6f  arison expressio
2d150 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74 69  ns]. The collati
2d160 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64  on sequence used
2d170 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f 20   to compare.two 
2d180 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64  text values is d
2d190 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66 6f 6c  etermined as fol
2d1a0 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c  lows:..<ol>.  <l
2d1b0 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44  i><p>^If the ORD
2d1c0 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
2d1d0 20 69 73 20 61 73 73 69 67 6e 65 64 20 61 20 63   is assigned a c
2d1e0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2d1f0 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 70 6f  e using.  the po
2d200 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20 6f  stfix [COLLATE o
2d210 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74  perator], then t
2d220 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  he specified col
2d230 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
2d240 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c 69  is.  used..  <li
2d250 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
2d260 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
2d270 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
2d280 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65 78 70   alias to an exp
2d290 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74 20 68  ression.  that h
2d2a0 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e 65 64  as been assigned
2d2b0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
2d2c0 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65 20  uence using the 
2d2d0 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c 4c  postfix .  [COLL
2d2e0 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74  ATE operator], t
2d2f0 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  hen the collatio
2d300 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73 69 67  n sequence assig
2d310 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69 61 73  ned to the alias
2d320 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20  ed.  expression 
2d330 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c  is used..  <li><
2d340 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  p>^Otherwise, if
2d350 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
2d360 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f  pression is a co
2d370 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61 73  lumn or an alias
2d380 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65 73 73   of.  an express
2d390 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20 63 6f  ion that is a co
2d3a0 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20 64  lumn, then the d
2d3b0 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
2d3c0 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a 20 20   sequence for.  
2d3d0 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  the column is us
2d3e0 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f  ed. .  <li><p>^O
2d3f0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 5b 42  therwise, the [B
2d400 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e  INARY] collation
2d410 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
2d420 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20  d..</ol>..<p>In 
2d430 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
2d440 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 61  CT] statement, a
2d450 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ll ORDER BY expr
2d460 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61 6e 64  essions are hand
2d470 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73 20 66  led.as aliases f
2d480 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65  or one of the re
2d490 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  sult columns of 
2d4a0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a 5e 28  the compound..^(
2d4b0 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20 65  If an ORDER BY e
2d4c0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f 74  xpression is not
2d4d0 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c 69 61   an integer alia
2d4e0 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73  s, then SQLite s
2d4f0 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65 66 74  earches.the left
2d500 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69 6e 20  -most SELECT in 
2d510 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66 6f 72  the compound for
2d520 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e   a result column
2d530 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 65 69   that matches ei
2d540 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e 64 20  ther.the second 
2d550 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73 20 61  or third rules a
2d560 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74 63 68  bove. If a match
2d570 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 73   is found, the s
2d580 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e 64 0a  earch stops and.
2d590 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
2d5a0 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61 6e 20  s handled as an 
2d5b0 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 65  alias for the re
2d5c0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74  sult column that
2d5d0 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d 61 74   it has been.mat
2d5e0 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20 4f 74  ched against. Ot
2d5f0 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65 78  herwise, the nex
2d600 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  t SELECT to the 
2d610 72 69 67 68 74 20 69 73 20 74 72 69 65 64 2c 20  right is tried, 
2d620 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e 49 66  and so on.)^.^If
2d630 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65 78 70   no matching exp
2d640 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 66  ression can be f
2d650 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65 73 75  ound in the resu
2d660 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e  lt columns of an
2d670 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  y.constituent SE
2d680 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e 20 65  LECT, it is an e
2d690 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65 72 6d  rror. ^Each term
2d6a0 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   of the ORDER BY
2d6b0 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f 63 65   clause is.proce
2d6c0 73 73 65 64 20 73 65 70 61 72 61 74 65 6c 79 20  ssed separately 
2d6d0 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74 63 68  and may be match
2d6e0 65 64 20 61 67 61 69 6e 73 74 20 72 65 73 75 6c  ed against resul
2d6f0 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 64  t columns from d
2d700 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43 54 20  ifferent.SELECT 
2d710 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
2d720 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a  e compound.</p>.
2d730 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2d740 74 20 6c 69 6d 69 74 6f 66 66 73 65 74 20 7b 4c  t limitoffset {L
2d750 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54 7d 3c 2f  IMIT} {OFFSET}</
2d760 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4d  tcl>.<h3>The LIM
2d770 49 54 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a  IT clause</h3>..
2d780 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 63 6c  <p>^The LIMIT cl
2d790 61 75 73 65 20 69 73 20 75 73 65 64 20 74 6f 20  ause is used to 
2d7a0 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72 20 62  place an upper b
2d7b0 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62  ound on the numb
2d7c0 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75 72  er of rows.retur
2d7d0 6e 65 64 20 62 79 20 74 68 65 20 65 6e 74 69 72  ned by the entir
2d7e0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2d7f0 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 5b 63  nt...<p>^In a [c
2d800 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c  ompound SELECT],
2d810 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74 20 6f   only the.last o
2d820 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69  r right-most [si
2d830 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d 61 79  mple SELECT] may
2d840 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d 49 54   contain a LIMIT
2d850 20 63 6c 61 75 73 65 2e 20 20 0a 5e 49 6e 20 61   clause.  .^In a
2d860 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43   [compound SELEC
2d870 54 5d 2c 20 0a 74 68 65 20 4c 49 4d 49 54 20 63  T], .the LIMIT c
2d880 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f  lause applies to
2d890 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70   the entire comp
2d8a0 6f 75 6e 64 2c 20 6e 6f 74 20 6a 75 73 74 20 74  ound, not just t
2d8b0 68 65 20 66 69 6e 61 6c 20 53 45 4c 45 43 54 2e  he final SELECT.
2d8c0 0a 5e 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d  .^If the right-m
2d8d0 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45  ost [simple SELE
2d8e0 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53  CT] is a [VALUES
2d8f0 20 63 6c 61 75 73 65 5d 20 74 68 65 6e 20 6e 6f   clause] then no
2d900 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 69 73   LIMIT clause.is
2d910 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70 3e 5e 41   allowed...<p>^A
2d920 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72 65 73  ny scalar expres
2d930 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73 65 64  sion may be used
2d940 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54 20 63   in the .LIMIT c
2d950 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67 20 61  lause, so long a
2d960 73 20 69 74 20 65 76 61 6c 75 61 74 65 73 20 74  s it evaluates t
2d970 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  o an integer or 
2d980 61 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  a value that can
2d990 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63   be.losslessly c
2d9a0 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
2d9b0 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68 65 20  nteger. ^If the 
2d9c0 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
2d9d0 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c 20 0a  ates to a NULL .
2d9e0 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f 74 68  value or any oth
2d9f0 65 72 20 76 61 6c 75 65 20 74 68 61 74 20 63 61  er value that ca
2da00 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73  nnot be lossless
2da10 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly converted to 
2da20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e 0a 65  an integer, an.e
2da30 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
2da40 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20  . ^If the LIMIT 
2da50 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
2da60 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69  ates to a negati
2da70 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e 20 74  ve value,.then t
2da80 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70 65 72  here is no upper
2da90 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75   bound on the nu
2daa0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74  mber of rows ret
2dab0 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77 69 73  urned. ^Otherwis
2dac0 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20 72 65  e, the.SELECT re
2dad0 74 75 72 6e 73 20 74 68 65 20 66 69 72 73 74 20  turns the first 
2dae0 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20 72 65  N rows of its re
2daf0 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c 20 77  sult set only, w
2db00 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 76 61  here N is the va
2db10 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c 49 4d  lue.that the LIM
2db20 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  IT expression ev
2db30 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f 72 2c  aluates to. ^Or,
2db40 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 20 73   if the SELECT s
2db50 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 0a 72  tatement would.r
2db60 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20  eturn less than 
2db70 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20 61  N rows without a
2db80 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
2db90 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 72  hen the entire r
2dba0 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72 65 74  esult set is.ret
2dbb0 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65  urned. ..<p>^The
2dbc0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74 74 61   expression atta
2dbd0 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70 74 69  ched to the opti
2dbe0 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c 61 75  onal OFFSET clau
2dbf0 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f 6c 6c  se that may foll
2dc00 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73  ow a.LIMIT claus
2dc10 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76 61 6c  e must also eval
2dc20 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74 65 67  uate to an integ
2dc30 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65 20 74  er, or a value t
2dc40 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c  hat can be.lossl
2dc50 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
2dc60 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e  to an integer. ^
2dc70 49 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  If an expression
2dc80 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63   has an OFFSET c
2dc90 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68 65 20  lause,.then the 
2dca0 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65  first M rows are
2dcb0 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
2dcc0 65 20 72 65 73 75 6c 74 20 73 65 74 20 72 65 74  e result set ret
2dcd0 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
2dce0 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20 61 6e  ECT.statement an
2dcf0 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72 6f 77  d the next N row
2dd00 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 2c 20  s are returned, 
2dd10 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20 61 72  where M and N ar
2dd20 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61  e the values tha
2dd30 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64  t.the OFFSET and
2dd40 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 65   LIMIT clauses e
2dd50 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65 73 70  valuate to, resp
2dd60 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c 20 69  ectively. ^Or, i
2dd70 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77 6f 75  f the SELECT.wou
2dd80 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73 20 74  ld return less t
2dd90 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69 66 20  han M+N rows if 
2dda0 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76 65 20  it did not have 
2ddb0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
2ddc0 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74 20 4d  then the.first M
2ddd0 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65   rows are skippe
2dde0 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  d and the remain
2ddf0 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61 6e 79  ing rows (if any
2de00 29 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 20  ) are returned. 
2de10 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54 20 63  ^If the.OFFSET c
2de20 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 73 20  lause evaluates 
2de30 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61  to a negative va
2de40 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73  lue, the results
2de50 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 61 73   are the same as
2de60 20 69 66 20 69 74 0a 68 61 64 20 65 76 61 6c 75   if it.had evalu
2de70 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c  ated to zero...<
2de80 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20 61 20  p>^Instead of a 
2de90 73 65 70 61 72 61 74 65 20 4f 46 46 53 45 54 20  separate OFFSET 
2dea0 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49 4d 49  clause, the LIMI
2deb0 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70 65  T clause may spe
2dec0 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61 72 20  cify two.scalar 
2ded0 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65 70 61  expressions sepa
2dee0 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d 6d 61  rated by a comma
2def0 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c  . ^In this case,
2df00 20 74 68 65 20 66 69 72 73 74 20 65 78 70 72 65   the first expre
2df10 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20 61 73  ssion.is used as
2df20 20 74 68 65 20 4f 46 46 53 45 54 20 65 78 70 72   the OFFSET expr
2df30 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73  ession and the s
2df40 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c 49 4d  econd as the LIM
2df50 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 54  IT expression..T
2df60 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72 2d 69  his is counter-i
2df70 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77 68 65  ntuitive, as whe
2df80 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46 46 53  n using the OFFS
2df90 45 54 20 63 6c 61 75 73 65 20 74 68 65 20 73 65  ET clause the se
2dfa0 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77 6f 20  cond of.the two 
2dfb0 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74  expressions is t
2dfc0 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20 74 68  he OFFSET and th
2dfd0 65 20 66 69 72 73 74 20 74 68 65 20 4c 49 4d 49  e first the LIMI
2dfe0 54 2e 20 0a 54 68 69 73 20 72 65 76 65 72 73 61  T. .This reversa
2dff0 6c 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20  l of the offset 
2e000 61 6e 64 20 6c 69 6d 69 74 20 69 73 20 69 6e 74  and limit is int
2e010 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61  entional.- it ma
2e020 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62  ximizes compatib
2e030 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72  ility with other
2e040 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79   SQL database sy
2e050 73 74 65 6d 73 2e 0a 48 6f 77 65 76 65 72 2c 20  stems..However, 
2e060 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
2e070 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20  on, programmers 
2e080 61 72 65 20 73 74 72 6f 6e 67 6c 79 20 65 6e 63  are strongly enc
2e090 6f 75 72 61 67 65 64 20 74 6f 20 75 73 65 0a 74  ouraged to use.t
2e0a0 68 65 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 4c  he form of the L
2e0b0 49 4d 49 54 20 63 6c 61 75 73 65 20 74 68 61 74  IMIT clause that
2e0c0 20 75 73 65 73 20 74 68 65 20 22 4f 46 46 53 45   uses the "OFFSE
2e0d0 54 22 20 6b 65 79 77 6f 72 64 20 61 6e 64 20 61  T" keyword and a
2e0e0 76 6f 69 64 0a 75 73 69 6e 67 20 61 20 4c 49 4d  void.using a LIM
2e0f0 49 54 20 63 6c 61 75 73 65 20 77 69 74 68 20 61  IT clause with a
2e100 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64   comma-separated
2e110 20 6f 66 66 73 65 74 2e 0a 0a 3c 74 63 6c 3e 68   offset...<tcl>h
2e120 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c 75 65  d_fragment value
2e130 73 20 7b 56 41 4c 55 45 53 20 63 6c 61 75 73 65  s {VALUES clause
2e140 7d 20 56 41 4c 55 45 53 3c 2f 74 63 6c 3e 0a 3c  } VALUES</tcl>.<
2e150 68 33 3e 54 68 65 20 56 41 4c 55 45 53 20 63 6c  h3>The VALUES cl
2e160 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  ause</h3>..<p>^(
2e170 54 68 65 20 70 68 72 61 73 65 20 22 56 41 4c 55  The phrase "VALU
2e180 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c  ES(<i>expr-list<
2e190 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20  /i>)" means the 
2e1a0 73 61 6d 65 20 74 68 69 6e 67 0a 61 73 20 22 53  same thing.as "S
2e1b0 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69  ELECT <i>expr-li
2e1c0 73 74 3c 2f 69 3e 22 2e 29 5e 20 20 5e 28 54 68  st</i>".)^  ^(Th
2e1d0 65 20 70 68 72 61 73 65 0a 22 56 41 4c 55 45 53  e phrase."VALUES
2e1e0 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31 3c  (<i>expr-list-1<
2e1f0 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c 69 3e 65 78 70  /i>),...,(<i>exp
2e200 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 29 22 20 6d  r-list-N</i>)" m
2e210 65 61 6e 73 20 74 68 65 20 73 61 6d 65 0a 74 68  eans the same.th
2e220 69 6e 67 20 61 73 20 22 53 45 4c 45 43 54 20 3c  ing as "SELECT <
2e230 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31 3c 2f 69  i>expr-list-1</i
2e240 3e 20 55 4e 49 4f 4e 20 41 4c 4c 20 2e 2e 2e 20  > UNION ALL ... 
2e250 55 4e 49 4f 4e 20 41 4c 4c 0a 53 45 4c 45 43 54  UNION ALL.SELECT
2e260 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c   <i>expr-list-N<
2e270 2f 69 3e 22 2e 29 5e 20 20 42 6f 74 68 20 66 6f  /i>".)^  Both fo
2e280 72 6d 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  rms are the same
2e290 2c 20 65 78 63 65 70 74 20 74 68 61 74 0a 74 68  , except that.th
2e2a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45  e number of SELE
2e2b0 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  CT statements in
2e2c0 20 61 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20 6c   a compound is l
2e2d0 69 6d 69 74 65 64 20 62 79 0a 5b 53 51 4c 49 54  imited by.[SQLIT
2e2e0 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44  E_LIMIT_COMPOUND
2e2f0 5f 53 45 4c 45 43 54 5d 20 77 68 65 72 65 61 73  _SELECT] whereas
2e300 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2e310 6f 77 73 20 69 6e 20 61 0a 56 41 4c 55 45 53 20  ows in a.VALUES 
2e320 63 6c 61 75 73 65 20 68 61 73 20 6e 6f 20 61 72  clause has no ar
2e330 62 69 74 72 61 72 79 20 6c 69 6d 69 74 2e 0a 0a  bitrary limit...
2e340 3c 70 3e 54 68 65 72 65 20 61 72 65 20 73 6f 6d  <p>There are som
2e350 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 6f  e restrictions o
2e360 6e 20 74 68 65 20 75 73 65 20 6f 66 20 61 20 56  n the use of a V
2e370 41 4c 55 45 53 20 63 6c 61 75 73 65 20 74 68 61  ALUES clause tha
2e380 74 20 61 72 65 0a 6e 6f 74 20 73 68 6f 77 6e 20  t are.not shown 
2e390 6f 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64 69  on the syntax di
2e3a0 61 67 72 61 6d 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c  agrams:..<ul>.<l
2e3b0 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53 20  i><p>.^A VALUES 
2e3c0 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65  clause cannot be
2e3d0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 52   followed by [OR
2e3e0 44 45 52 20 42 59 5d 20 6f 72 20 5b 4c 49 4d 49  DER BY] or [LIMI
2e3f0 54 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20  T]...<li><p>.^A 
2e400 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 63 61  VALUES clause ca
2e410 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 67  nnot be used tog
2e420 65 74 68 65 72 20 77 69 74 68 20 61 20 5b 57 49  ether with a [WI
2e430 54 48 5d 20 63 6c 61 75 73 65 20 69 6e 20 61 0a  TH] clause in a.
2e440 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 2e  [simple SELECT].
2e450 0a 3c 2f 75 6c 3e 0a 0a 0a 3c 68 33 3e 54 68 65  .</ul>...<h3>The
2e460 20 57 49 54 48 20 43 6c 61 75 73 65 3c 2f 68 33   WITH Clause</h3
2e470 3e 0a 0a 3c 70 3e 5e 53 45 4c 45 43 54 20 73 74  >..<p>^SELECT st
2e480 61 74 65 6d 65 6e 74 73 20 6d 61 79 20 62 65 20  atements may be 
2e490 6f 70 74 69 6f 6e 61 6c 6c 79 20 70 72 65 63 65  optionally prece
2e4a0 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 0a  ded by a single.
2e4b0 5b 57 49 54 48 20 63 6c 61 75 73 65 5d 20 74 68  [WITH clause] th
2e4c0 61 74 20 64 65 66 69 6e 65 73 20 6f 6e 65 20 6f  at defines one o
2e4d0 72 20 6d 6f 72 65 20 5b 63 6f 6d 6d 6f 6e 20 74  r more [common t
2e4e0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
2e4f0 5d 0a 66 6f 72 20 75 73 65 20 77 69 74 68 69 6e  ].for use within
2e500 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
2e510 65 6d 65 6e 74 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23  ement....<tcl>.#
2e520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e560 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
2e570 63 74 69 6f 6e 20 55 50 44 41 54 45 20 75 70 64  ction UPDATE upd
2e580 61 74 65 20 7b 55 50 44 41 54 45 20 2a 55 50 44  ate {UPDATE *UPD
2e590 41 54 45 73 7d 0a 0a 52 65 63 75 72 73 69 76 65  ATEs}..Recursive
2e5a0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70  BubbleDiagram up
2e5b0 64 61 74 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  date-stmt.</tcl>
2e5c0 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44 41 54 45 20  ..<p>^An UPDATE 
2e5d0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
2e5e0 64 20 74 6f 20 6d 6f 64 69 66 79 20 61 20 73 75  d to modify a su
2e5f0 62 73 65 74 20 6f 66 20 74 68 65 20 76 61 6c 75  bset of the valu
2e600 65 73 20 73 74 6f 72 65 64 20 69 6e 20 0a 7a 65  es stored in .ze
2e610 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  ro or more rows 
2e620 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2e630 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64  table identified
2e640 20 62 79 20 74 68 65 20 0a 3c 69 3e 71 75 61 6c   by the .<i>qual
2e650 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
2e660 3c 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61  </i> specified a
2e670 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 55 50  s part of the UP
2e680 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a  DATE statement..
2e690 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41  .<p>^If the UPDA
2e6a0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65  TE statement doe
2e6b0 73 20 6e 6f 74 20 68 61 76 65 20 61 20 57 48 45  s not have a WHE
2e6c0 52 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72  RE clause, all r
2e6d0 6f 77 73 20 69 6e 20 74 68 65 0a 74 61 62 6c 65  ows in the.table
2e6e0 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 62 79   are modified by
2e6f0 20 74 68 65 20 55 50 44 41 54 45 2e 20 5e 4f 74   the UPDATE. ^Ot
2e700 68 65 72 77 69 73 65 2c 20 74 68 65 20 55 50 44  herwise, the UPD
2e710 41 54 45 20 61 66 66 65 63 74 73 20 6f 6e 6c 79  ATE affects only
2e720 20 74 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20   those.rows for 
2e730 77 68 69 63 68 20 74 68 65 20 72 65 73 75 6c 74  which the result
2e740 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74   of evaluating t
2e750 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
2e760 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 61 20  expression as a 
2e770 0a 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73  .[boolean expres
2e780 73 69 6f 6e 7c 62 6f 6f 6c 65 61 6e 20 65 78 70  sion|boolean exp
2e790 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d  ression is true]
2e7a0 2e 20 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e 20  . ^It is not an 
2e7b0 65 72 72 6f 72 20 69 66 20 74 68 65 0a 57 48 45  error if the.WHE
2e7c0 52 45 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e  RE clause does n
2e7d0 6f 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74  ot evaluate to t
2e7e0 72 75 65 20 66 6f 72 20 61 6e 79 20 72 6f 77 20  rue for any row 
2e7f0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 2d 20 74  in the table - t
2e800 68 69 73 20 6a 75 73 74 0a 6d 65 61 6e 73 20 74  his just.means t
2e810 68 61 74 20 74 68 65 20 55 50 44 41 54 45 20 73  hat the UPDATE s
2e820 74 61 74 65 6d 65 6e 74 20 61 66 66 65 63 74 73  tatement affects
2e830 20 7a 65 72 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e   zero rows...<p>
2e840 54 68 65 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e  The modification
2e850 73 20 6d 61 64 65 20 74 6f 20 65 61 63 68 20 72  s made to each r
2e860 6f 77 20 61 66 66 65 63 74 65 64 20 62 79 20 61  ow affected by a
2e870 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
2e880 6e 74 20 61 72 65 0a 64 65 74 65 72 6d 69 6e 65  nt are.determine
2e890 64 20 62 79 20 74 68 65 20 6c 69 73 74 20 6f 66  d by the list of
2e8a0 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 66 6f 6c   assignments fol
2e8b0 6c 6f 77 69 6e 67 20 74 68 65 20 53 45 54 20 6b  lowing the SET k
2e8c0 65 79 77 6f 72 64 2e 20 45 61 63 68 0a 61 73 73  eyword. Each.ass
2e8d0 69 67 6e 6d 65 6e 74 20 73 70 65 63 69 66 69 65  ignment specifie
2e8e0 73 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  s a column name 
2e8f0 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74  to the left of t
2e900 68 65 20 65 71 75 61 6c 73 20 73 69 67 6e 20 61  he equals sign a
2e910 6e 64 20 61 0a 73 63 61 6c 61 72 20 65 78 70 72  nd a.scalar expr
2e920 65 73 73 69 6f 6e 20 74 6f 20 74 68 65 20 72 69  ession to the ri
2e930 67 68 74 2e 20 5e 46 6f 72 20 65 61 63 68 20 61  ght. ^For each a
2e940 66 66 65 63 74 65 64 20 72 6f 77 2c 20 74 68 65  ffected row, the
2e950 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 0a 61   named columns.a
2e960 72 65 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  re set to the va
2e970 6c 75 65 73 20 66 6f 75 6e 64 20 62 79 20 65 76  lues found by ev
2e980 61 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72  aluating the cor
2e990 72 65 73 70 6f 6e 64 69 6e 67 20 73 63 61 6c 61  responding scala
2e9a0 72 20 0a 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  r .expressions. 
2e9b0 5e 49 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  ^If a single col
2e9c0 75 6d 6e 2d 6e 61 6d 65 20 61 70 70 65 61 72 73  umn-name appears
2e9d0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20   more than once 
2e9e0 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 61  in the list of.a
2e9f0 73 73 69 67 6e 6d 65 6e 74 20 65 78 70 72 65 73  ssignment expres
2ea00 73 69 6f 6e 73 2c 20 61 6c 6c 20 62 75 74 20 74  sions, all but t
2ea10 68 65 20 72 69 67 68 74 6d 6f 73 74 20 6f 63 63  he rightmost occ
2ea20 75 72 72 65 6e 63 65 20 69 73 20 69 67 6e 6f 72  urrence is ignor
2ea30 65 64 2e 20 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61  ed. ^Columns.tha
2ea40 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20  t do not appear 
2ea50 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61  in the list of a
2ea60 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6c  ssignments are l
2ea70 65 66 74 20 75 6e 6d 6f 64 69 66 69 65 64 2e 20  eft unmodified. 
2ea80 5e 54 68 65 20 73 63 61 6c 61 72 0a 65 78 70 72  ^The scalar.expr
2ea90 65 73 73 69 6f 6e 73 20 6d 61 79 20 72 65 66 65  essions may refe
2eaa0 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  r to columns of 
2eab0 74 68 65 20 72 6f 77 20 62 65 69 6e 67 20 75 70  the row being up
2eac0 64 61 74 65 64 2e 20 5e 49 6e 20 74 68 69 73 20  dated. ^In this 
2ead0 63 61 73 65 20 61 6c 6c 0a 73 63 61 6c 61 72 20  case all.scalar 
2eae0 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
2eaf0 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65  evaluated before
2eb00 20 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73   any assignments
2eb10 20 61 72 65 20 6d 61 64 65 2e 0a 0a 3c 70 3e 5e   are made...<p>^
2eb20 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e  The optional con
2eb30 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c  flict-clause all
2eb40 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f 20  ows the user to 
2eb50 6e 6f 6d 69 6e 61 74 65 20 61 20 73 70 65 63 69  nominate a speci
2eb60 66 69 63 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  fic.constraint c
2eb70 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
2eb80 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  on algorithm to 
2eb90 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20  use during this 
2eba0 6f 6e 65 20 55 50 44 41 54 45 20 63 6f 6d 6d 61  one UPDATE comma
2ebb0 6e 64 2e 0a 52 65 66 65 72 20 74 6f 20 74 68 65  nd..Refer to the
2ebc0 20 73 65 63 74 69 6f 6e 20 65 6e 74 69 74 6c 65   section entitle
2ebd0 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d [ON CONFLICT] 
2ebe0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
2ebf0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 68 33  nformation...<h3
2ec00 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e  >Restrictions on
2ec10 20 55 50 44 41 54 45 20 53 74 61 74 65 6d 65 6e   UPDATE Statemen
2ec20 74 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45  ts Within CREATE
2ec30 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c   TRIGGER</h3>..<
2ec40 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p>The following 
2ec50 61 64 64 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61  additional synta
2ec60 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  x restrictions a
2ec70 70 70 6c 79 20 74 6f 20 55 50 44 41 54 45 20 73  pply to UPDATE s
2ec80 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f  tatements that.o
2ec90 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20  ccur within the 
2eca0 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54  body of a [CREAT
2ecb0 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  E TRIGGER] state
2ecc0 6d 65 6e 74 2e 20 20 0a 0a 3c 75 6c 3e 0a 20 20  ment.  ..<ul>.  
2ecd0 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e 74  <li><p>^The <i>t
2ece0 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70  able-name</i> sp
2ecf0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
2ed00 6f 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  of an UPDATE sta
2ed10 74 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20  tement within.  
2ed20 20 20 20 20 61 20 74 72 69 67 67 65 72 20 62 6f      a trigger bo
2ed30 64 79 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61  dy must be unqua
2ed40 6c 69 66 69 65 64 2e 20 5e 28 49 6e 20 6f 74 68  lified. ^(In oth
2ed50 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20  er words, the.  
2ed60 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73 65 2d      <i>database-
2ed70 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  name</i><b>.</b>
2ed80 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 74   prefix on the t
2ed90 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  able name of the
2eda0 20 55 50 44 41 54 45 20 69 73 0a 20 20 20 20 20   UPDATE is.     
2edb0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69 74   not allowed wit
2edc0 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20  hin triggers.)^ 
2edd0 5e 55 6e 6c 65 73 73 20 74 68 65 20 74 61 62 6c  ^Unless the tabl
2ede0 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  e to which the t
2edf0 72 69 67 67 65 72 0a 20 20 20 20 20 20 69 73 20  rigger.      is 
2ee00 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74  attached is in t
2ee10 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
2ee20 2c 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  , the table bein
2ee30 67 20 75 70 64 61 74 65 64 20 62 79 20 74 68 65  g updated by the
2ee40 0a 20 20 20 20 20 20 74 72 69 67 67 65 72 20 70  .      trigger p
2ee50 72 6f 67 72 61 6d 20 6d 75 73 74 20 72 65 73 69  rogram must resi
2ee60 64 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64  de in the same d
2ee70 61 74 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e  atabase as it. ^
2ee80 49 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20  If the table.   
2ee90 20 20 20 74 6f 20 77 68 69 63 68 20 74 68 65 20     to which the 
2eea0 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63  trigger is attac
2eeb0 68 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45  hed is in the TE
2eec0 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  MP database, the
2eed0 6e 20 74 68 65 0a 20 20 20 20 20 20 75 6e 71 75  n the.      unqu
2eee0 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66 20  alified name of 
2eef0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2ef00 75 70 64 61 74 65 64 20 69 73 20 72 65 73 6f 6c  updated is resol
2ef10 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ved in the same 
2ef20 77 61 79 0a 20 20 20 20 20 20 61 73 20 69 74 20  way.      as it 
2ef30 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76  is for a top-lev
2ef40 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79  el statement (by
2ef50 20 73 65 61 72 63 68 69 6e 67 20 66 69 72 73 74   searching first
2ef60 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
2ef70 73 65 2c 0a 20 20 20 20 20 20 74 68 65 6e 20 74  se,.      then t
2ef80 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2ef90 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65 72  , then any other
2efa0 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68   databases in th
2efb0 65 20 6f 72 64 65 72 20 74 68 65 79 20 77 65 72  e order they wer
2efc0 65 0a 20 20 20 20 20 20 61 74 74 61 63 68 65 64  e.      attached
2efd0 29 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  )...  <li><p>^Th
2efe0 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
2eff0 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
2f000 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  uses are not all
2f010 6f 77 65 64 20 6f 6e 20 55 50 44 41 54 45 0a 20  owed on UPDATE. 
2f020 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20       statements 
2f030 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
2f040 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  </p>..  <li><p>^
2f050 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52  The LIMIT and OR
2f060 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20 66  DER BY clauses f
2f070 6f 72 20 55 50 44 41 54 45 20 61 72 65 20 75 6e  or UPDATE are un
2f080 73 75 70 70 6f 72 74 65 64 20 77 69 74 68 69 6e  supported within
2f090 0a 20 20 20 20 20 20 74 72 69 67 67 65 72 73 2c  .      triggers,
2f0a0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   regardless of t
2f0b0 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f  he compilation o
2f0c0 70 74 69 6f 6e 73 20 75 73 65 64 20 74 6f 20 62  ptions used to b
2f0d0 75 69 6c 64 20 53 51 4c 69 74 65 2e 0a 3c 2f 75  uild SQLite..</u
2f0e0 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c  l>..<h3>Optional
2f0f0 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52   LIMIT and ORDER
2f100 20 42 59 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e   BY Clauses</h3>
2f110 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65  ..<p>^(If SQLite
2f120 20 69 73 20 62 75 69 6c 74 20 77 69 74 68 20 74   is built with t
2f130 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
2f140 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
2f150 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74  LIMIT].compile-t
2f160 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20  ime option then 
2f170 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68  the syntax of th
2f180 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
2f190 6e 74 20 69 73 20 65 78 74 65 6e 64 65 64 0a 77  nt is extended.w
2f1a0 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44  ith optional ORD
2f1b0 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
2f1c0 63 6c 61 75 73 65 73 29 5e 20 61 73 20 66 6f 6c  clauses)^ as fol
2f1d0 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  lows:</p>..<tcl>
2f1e0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70  BubbleDiagram up
2f1f0 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65  date-stmt-limite
2f200 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20  d</tcl>..<p>^If 
2f210 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
2f220 65 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20  ent has a LIMIT 
2f230 63 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69  clause, the maxi
2f240 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mum number of ro
2f250 77 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20  ws that.will be 
2f260 75 70 64 61 74 65 64 20 69 73 20 66 6f 75 6e 64  updated is found
2f270 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
2f280 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20  he accompanying 
2f290 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63  expression and c
2f2a0 61 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20  asting.it to an 
2f2b0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e  integer value. ^
2f2c0 41 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  A negative value
2f2d0 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20   is interpreted 
2f2e0 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e 0a 0a  as "no limit"...
2f2f0 3c 70 3e 5e 49 66 20 74 68 65 20 4c 49 4d 49 54  <p>^If the LIMIT
2f300 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
2f310 75 61 74 65 73 20 74 6f 20 6e 6f 6e 2d 6e 65 67  uates to non-neg
2f320 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4e  ative value <i>N
2f330 3c 2f 69 3e 20 61 6e 64 20 74 68 65 0a 55 50 44  </i> and the.UPD
2f340 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ATE statement ha
2f350 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  s an ORDER BY cl
2f360 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72  ause, then all r
2f370 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20 62  ows that would b
2f380 65 20 75 70 64 61 74 65 64 20 69 6e 0a 74 68 65  e updated in.the
2f390 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20   absence of the 
2f3a0 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65  LIMIT clause are
2f3b0 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69 6e   sorted accordin
2f3c0 67 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42  g to the ORDER B
2f3d0 59 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74 20  Y and the.first 
2f3e0 3c 69 3e 4e 3c 2f 69 3e 20 75 70 64 61 74 65 64  <i>N</i> updated
2f3f0 2e 20 5e 28 49 66 20 74 68 65 20 55 50 44 41 54  . ^(If the UPDAT
2f400 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f  E statement also
2f410 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63   has an OFFSET c
2f420 6c 61 75 73 65 2c 0a 74 68 65 6e 20 69 74 20 69  lause,.then it i
2f430 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c  s similarly eval
2f440 75 61 74 65 64 20 61 6e 64 20 63 61 73 74 20 74  uated and cast t
2f450 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  o an integer val
2f460 75 65 2e 20 49 66 20 74 68 65 20 4f 46 46 53 45  ue. If the OFFSE
2f470 54 0a 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T.expression eva
2f480 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 6f 6e 2d  luates to a non-
2f490 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c  negative value <
2f4a0 69 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e 20 74 68  i>M</i>, then th
2f4b0 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e  e first <i>M</i>
2f4c0 0a 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65  .rows are skippe
2f4d0 64 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77  d and the follow
2f4e0 69 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77  ing <i>N</i> row
2f4f0 73 20 75 70 64 61 74 65 64 20 69 6e 73 74 65 61  s updated instea
2f500 64 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  d.)^..<p>^If the
2f510 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2f520 74 20 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42  t has no ORDER B
2f530 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61  Y clause, then a
2f540 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75  ll rows that.wou
2f550 6c 64 20 62 65 20 75 70 64 61 74 65 64 20 69 6e  ld be updated in
2f560 20 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20   the absence of 
2f570 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
2f580 20 61 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69   are assembled i
2f590 6e 20 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f  n an.arbitrary o
2f5a0 72 64 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c  rder before appl
2f5b0 79 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61  ying the LIMIT a
2f5c0 6e 64 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  nd OFFSET clause
2f5d0 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a  s to determine .
2f5e0 77 68 69 63 68 20 61 72 65 20 61 63 74 75 61 6c  which are actual
2f5f0 6c 79 20 75 70 64 61 74 65 64 2e 0a 0a 3c 70 3e  ly updated...<p>
2f600 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  ^(The ORDER BY c
2f610 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55 50 44 41  lause on an UPDA
2f620 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
2f630 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74  used only to det
2f640 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77  ermine which.row
2f650 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  s fall within th
2f660 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64  e LIMIT. The ord
2f670 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
2f680 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 69 73   are modified is
2f690 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69   arbitrary.and i
2f6a0 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64  s not influenced
2f6b0 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59   by the ORDER BY
2f6c0 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c   clause.)^..<tcl
2f6d0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
2f6e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f720 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20  .Section VACUUM 
2f730 76 61 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a 52  vacuum VACUUM..R
2f740 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
2f750 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73 74 6d  agram vacuum-stm
2f760 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20  t.</tcl>..<p>.  
2f770 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
2f780 6e 64 20 72 65 62 75 69 6c 64 73 20 74 68 65 20  nd rebuilds the 
2f790 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e  entire database.
2f7a0 20 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72   There are sever
2f7b0 61 6c 20 0a 20 20 72 65 61 73 6f 6e 73 20 61 6e  al .  reasons an
2f7c0 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 69 67   application mig
2f7d0 68 74 20 64 6f 20 74 68 69 73 3a 0a 0a 3c 75 6c  ht do this:..<ul
2f7e0 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 55 6e  >.  <li> <p> ^Un
2f7f0 6c 65 73 73 20 53 51 4c 69 74 65 20 69 73 20 72  less SQLite is r
2f800 75 6e 6e 69 6e 67 20 69 6e 20 22 61 75 74 6f 5f  unning in "auto_
2f810 76 61 63 75 75 6d 3d 46 55 4c 4c 22 20 6d 6f 64  vacuum=FULL" mod
2f820 65 2c 20 77 68 65 6e 20 61 20 6c 61 72 67 65 0a  e, when a large.
2f830 20 20 20 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64       amount of d
2f840 61 74 61 20 69 73 20 64 65 6c 65 74 65 64 20 66  ata is deleted f
2f850 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
2f860 20 66 69 6c 65 20 69 74 20 6c 65 61 76 65 73 20   file it leaves 
2f870 62 65 68 69 6e 64 20 65 6d 70 74 79 0a 20 20 20  behind empty.   
2f880 20 20 73 70 61 63 65 2c 20 6f 72 20 22 66 72 65    space, or "fre
2f890 65 22 20 64 61 74 61 62 61 73 65 20 70 61 67 65  e" database page
2f8a0 73 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68  s. This means th
2f8b0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
2f8c0 6d 69 67 68 74 0a 20 20 20 20 20 62 65 20 6c 61  might.     be la
2f8d0 72 67 65 72 20 74 68 61 6e 20 73 74 72 69 63 74  rger than strict
2f8e0 6c 79 20 6e 65 63 65 73 73 61 72 79 2e 20 5e 52  ly necessary. ^R
2f8f0 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 74 6f  unning VACUUM to
2f900 20 72 65 62 75 69 6c 64 20 74 68 65 20 0a 20 20   rebuild the .  
2f910 20 20 20 64 61 74 61 62 61 73 65 20 72 65 63 6c     database recl
2f920 61 69 6d 73 20 74 68 69 73 20 73 70 61 63 65 20  aims this space 
2f930 61 6e 64 20 72 65 64 75 63 65 73 20 74 68 65 20  and reduces the 
2f940 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61  size of the data
2f950 62 61 73 65 20 66 69 6c 65 2e 0a 0a 20 20 3c 6c  base file...  <l
2f960 69 3e 20 3c 70 3e 20 5e 46 72 65 71 75 65 6e 74  i> <p> ^Frequent
2f970 20 69 6e 73 65 72 74 73 2c 20 75 70 64 61 74 65   inserts, update
2f980 73 2c 20 61 6e 64 20 64 65 6c 65 74 65 73 20 63  s, and deletes c
2f990 61 6e 20 63 61 75 73 65 20 74 68 65 20 64 61 74  an cause the dat
2f9a0 61 62 61 73 65 20 66 69 6c 65 0a 20 20 20 20 20  abase file.     
2f9b0 74 6f 20 62 65 63 6f 6d 65 20 66 72 61 67 6d 65  to become fragme
2f9c0 6e 74 65 64 20 2d 20 77 68 65 72 65 20 64 61 74  nted - where dat
2f9d0 61 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 74  a for a single t
2f9e0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
2f9f0 20 73 63 61 74 74 65 72 65 64 20 0a 20 20 20 20   scattered .    
2fa00 20 61 72 6f 75 6e 64 20 74 68 65 20 64 61 74 61   around the data
2fa10 62 61 73 65 20 66 69 6c 65 2e 20 5e 52 75 6e 6e  base file. ^Runn
2fa20 69 6e 67 20 56 41 43 55 55 4d 20 65 6e 73 75 72  ing VACUUM ensur
2fa30 65 73 20 74 68 61 74 20 65 61 63 68 20 74 61 62  es that each tab
2fa40 6c 65 20 61 6e 64 0a 20 20 20 20 20 69 6e 64 65  le and.     inde
2fa50 78 20 69 73 20 6c 61 72 67 65 6c 79 20 73 74 6f  x is largely sto
2fa60 72 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79  red contiguously
2fa70 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61   within the data
2fa80 62 61 73 65 20 66 69 6c 65 2e 20 5e 49 6e 20 73  base file. ^In s
2fa90 6f 6d 65 0a 20 20 20 20 20 63 61 73 65 73 2c 20  ome.     cases, 
2faa0 56 41 43 55 55 4d 20 6d 61 79 20 61 6c 73 6f 20  VACUUM may also 
2fab0 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65  reduce the numbe
2fac0 72 20 6f 66 20 70 61 72 74 69 61 6c 6c 79 20 66  r of partially f
2fad0 69 6c 6c 65 64 20 70 61 67 65 73 20 69 6e 0a 20  illed pages in. 
2fae0 20 20 20 20 74 68 65 20 64 61 74 61 62 61 73 65      the database
2faf0 2c 20 72 65 64 75 63 69 6e 67 20 74 68 65 20 73  , reducing the s
2fb00 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
2fb10 61 73 65 20 66 69 6c 65 20 66 75 72 74 68 65 72  ase file further
2fb20 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 4e  ...  <li> <p> ^N
2fb30 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 20 64 61 74  ormally, the dat
2fb40 61 62 61 73 65 20 5b 70 61 67 65 5f 73 69 7a 65  abase [page_size
2fb50 5d 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  ] and whether or
2fb60 20 6e 6f 74 20 74 68 65 20 64 61 74 61 62 61 73   not the databas
2fb70 65 0a 20 20 20 20 20 73 75 70 70 6f 72 74 73 20  e.     supports 
2fb80 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 6d 75  [auto_vacuum] mu
2fb90 73 74 20 62 65 20 63 6f 6e 66 69 67 75 72 65 64  st be configured
2fba0 20 62 65 66 6f 72 65 20 74 68 65 20 64 61 74 61   before the data
2fbb0 62 61 73 65 20 66 69 6c 65 20 69 73 0a 20 20 20  base file is.   
2fbc0 20 20 61 63 74 75 61 6c 6c 79 20 63 72 65 61 74    actually creat
2fbd0 65 64 2e 20 5e 48 6f 77 65 76 65 72 2c 20 77 68  ed. ^However, wh
2fbe0 65 6e 20 6e 6f 74 20 69 6e 20 5b 77 72 69 74 65  en not in [write
2fbf0 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65  -ahead log] mode
2fc00 2c 20 74 68 65 20 0a 20 20 20 20 20 5b 70 61 67  , the .     [pag
2fc10 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f 72 20 5b  e_size] and/or [
2fc20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 6f  auto_vacuum] pro
2fc30 70 65 72 74 69 65 73 20 6f 66 20 61 6e 20 65 78  perties of an ex
2fc40 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
2fc50 6d 61 79 20 62 65 0a 20 20 20 20 20 63 68 61 6e  may be.     chan
2fc60 67 65 64 20 62 79 20 75 73 69 6e 67 20 74 68 65  ged by using the
2fc70 20 5b 70 61 67 65 5f 73 69 7a 65 20 70 72 61 67   [page_size prag
2fc80 6d 61 7c 70 61 67 65 5f 73 69 7a 65 5d 20 20 61  ma|page_size]  a
2fc90 6e 64 2f 6f 72 20 0a 20 20 20 20 20 5b 61 75 74  nd/or .     [aut
2fca0 6f 5f 76 61 63 75 75 6d 7c 70 72 61 67 6d 61 20  o_vacuum|pragma 
2fcb0 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61  auto_vacuum] pra
2fcc0 67 6d 61 73 20 61 6e 64 20 74 68 65 6e 20 69 6d  gmas and then im
2fcd0 6d 65 64 69 61 74 65 6c 79 20 56 41 43 55 55 4d  mediately VACUUM
2fce0 69 6e 67 0a 20 20 20 20 20 74 68 65 20 64 61 74  ing.     the dat
2fcf0 61 62 61 73 65 2e 20 5e 57 68 65 6e 20 69 6e 20  abase. ^When in 
2fd00 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67  [write-ahead log
2fd10 5d 20 6d 6f 64 65 2c 20 6f 6e 6c 79 20 74 68 65  ] mode, only the
2fd20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 20   [auto_vacuum]. 
2fd30 20 20 20 20 73 75 70 70 6f 72 74 20 70 72 6f 70      support prop
2fd40 65 72 74 79 20 63 61 6e 20 62 65 20 63 68 61 6e  erty can be chan
2fd50 67 65 64 20 75 73 69 6e 67 20 56 41 43 55 55 4d  ged using VACUUM
2fd60 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 56 41  ..</ul>..<p>^(VA
2fd70 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  CUUM only works 
2fd80 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  on the main data
2fd90 62 61 73 65 2e 20 49 74 20 69 73 20 6e 6f 74 20  base. It is not 
2fda0 70 6f 73 73 69 62 6c 65 20 74 6f 20 56 41 43 55  possible to VACU
2fdb0 55 4d 20 61 6e 0a 61 74 74 61 63 68 65 64 20 64  UM an.attached d
2fdc0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 29 5e 0a  atabase file.)^.
2fdd0 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20  .<p>^The VACUUM 
2fde0 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79  command works by
2fdf0 20 63 6f 70 79 69 6e 67 20 74 68 65 20 63 6f 6e   copying the con
2fe00 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74  tents of the dat
2fe10 61 62 61 73 65 20 69 6e 74 6f 0a 61 20 74 65 6d  abase into.a tem
2fe20 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20  porary database 
2fe30 66 69 6c 65 20 61 6e 64 20 74 68 65 6e 20 6f 76  file and then ov
2fe40 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72  erwriting the or
2fe50 69 67 69 6e 61 6c 20 77 69 74 68 20 74 68 65 20  iginal with the 
2fe60 0a 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65  .contents of the
2fe70 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e   temporary file.
2fe80 20 5e 57 68 65 6e 20 6f 76 65 72 77 72 69 74 69   ^When overwriti
2fe90 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 2c  ng the original,
2fea0 20 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72   a rollback.jour
2feb0 6e 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d 61 68  nal or [write-ah
2fec0 65 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66 69 6c  ead log] WAL fil
2fed0 65 20 69 73 20 75 73 65 64 20 6a 75 73 74 20 61  e is used just a
2fee0 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 66 6f  s it would be fo
2fef0 72 20 61 6e 79 0a 6f 74 68 65 72 20 64 61 74 61  r any.other data
2ff00 62 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  base transaction
2ff10 2e 20 5e 54 68 69 73 20 6d 65 61 6e 73 20 74 68  . ^This means th
2ff20 61 74 20 77 68 65 6e 20 56 41 43 55 55 4d 69 6e  at when VACUUMin
2ff30 67 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 61  g a database, .a
2ff40 73 20 6d 75 63 68 20 61 73 20 74 77 69 63 65 20  s much as twice 
2ff50 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
2ff60 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73  original databas
2ff70 65 20 66 69 6c 65 20 69 73 20 72 65 71 75 69 72  e file is requir
2ff80 65 64 20 69 6e 20 66 72 65 65 0a 64 69 73 6b 20  ed in free.disk 
2ff90 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20  space...<p>^The 
2ffa0 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d  VACUUM command m
2ffb0 61 79 20 63 68 61 6e 67 65 20 74 68 65 20 5b 52  ay change the [R
2ffc0 4f 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f  OWID | ROWIDs] o
2ffd0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e 79  f entries in any
2ffe0 0a 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f 20  .tables that do 
2fff0 6e 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70 6c  not have an expl
30000 69 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50 52  icit [INTEGER PR
30010 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e  IMARY KEY]..</p>
30020 0a 0a 3c 70 3e 5e 41 20 56 41 43 55 55 4d 20 77  ..<p>^A VACUUM w
30030 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72  ill fail if ther
30040 65 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 72 61  e is an open tra
30050 6e 73 61 63 74 69 6f 6e 2c 20 6f 72 20 69 66 20  nsaction, or if 
30060 74 68 65 72 65 20 61 72 65 20 6f 6e 65 20 6f 72  there are one or
30070 0a 6d 6f 72 65 20 61 63 74 69 76 65 20 53 51 4c  .more active SQL
30080 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e   statements when
30090 20 69 74 20 69 73 20 72 75 6e 2e 0a 0a 3c 70 3e   it is run...<p>
300a0 5e 28 41 73 20 6f 66 20 53 51 4c 69 74 65 20 76  ^(As of SQLite v
300b0 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e 20 61  ersion 3.1, an a
300c0 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20 75 73  lternative to us
300d0 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d 20 63  ing the VACUUM c
300e0 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65 63 6c 61 69  ommand to.reclai
300f0 6d 20 73 70 61 63 65 20 61 66 74 65 72 20 64 61  m space after da
30100 74 61 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65  ta has been dele
30110 74 65 64 20 69 73 20 61 75 74 6f 2d 76 61 63 75  ted is auto-vacu
30120 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c 65 64  um mode, enabled
30130 20 75 73 69 6e 67 0a 74 68 65 20 5b 61 75 74 6f   using.the [auto
30140 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e  _vacuum] pragma.
30150 29 5e 20 5e 57 68 65 6e 20 5b 61 75 74 6f 5f 76  )^ ^When [auto_v
30160 61 63 75 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65  acuum] is enable
30170 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  d for a database
30180 0a 66 72 65 65 20 70 61 67 65 73 20 6d 61 79 20  .free pages may 
30190 62 65 20 72 65 63 6c 61 69 6d 65 64 20 61 66 74  be reclaimed aft
301a0 65 72 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61  er deleting data
301b0 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20 66 69  , causing the fi
301c0 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2c 0a 77 69  le to shrink,.wi
301d0 74 68 6f 75 74 20 72 65 62 75 69 6c 64 69 6e 67  thout rebuilding
301e0 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
301f0 62 61 73 65 20 75 73 69 6e 67 20 56 41 43 55 55  base using VACUU
30200 4d 2e 20 20 48 6f 77 65 76 65 72 2c 20 75 73 69  M.  However, usi
30210 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  ng.[auto_vacuum]
30220 20 63 61 6e 20 6c 65 61 64 20 74 6f 20 65 78 74   can lead to ext
30230 72 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ra database file
30240 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e 2e 20   fragmentation. 
30250 20 41 6e 64 20 5b 61 75 74 6f 5f 76 61 63 75 75   And [auto_vacuu
30260 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70  m].does not comp
30270 61 63 74 20 70 61 72 74 69 61 6c 6c 79 20 66 69  act partially fi
30280 6c 6c 65 64 20 70 61 67 65 73 20 6f 66 20 74 68  lled pages of th
30290 65 20 64 61 74 61 62 61 73 65 20 61 73 20 56 41  e database as VA
302a0 43 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c 2f 70 3e  CUUM does...</p>
302b0 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
302c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
302d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
302e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
302f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30300 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
30310 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64  {INDEXED BY} ind
30320 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58 45 44  exedby {{INDEXED
30330 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58 45   BY} {NOT INDEXE
30340 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  D}}..</tcl>.<p>^
30350 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  The INDEXED BY p
30360 68 72 61 73 65 20 66 6f 72 63 65 73 20 74 68 65  hrase forces the
30370 20 5b 53 51 4c 69 74 65 20 71 75 65 72 79 20 70   [SQLite query p
30380 6c 61 6e 6e 65 72 5d 20 74 6f 20 75 73 65 20 61  lanner] to use a
30390 0a 70 61 72 74 69 63 75 6c 61 72 20 6e 61 6d 65  .particular name
303a0 64 20 69 6e 64 65 78 20 6f 6e 20 61 20 5b 44 45  d index on a [DE
303b0 4c 45 54 45 5d 2c 20 5b 53 45 4c 45 43 54 5d 2c  LETE], [SELECT],
303c0 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61   or [UPDATE] sta
303d0 74 65 6d 65 6e 74 2e 0a 54 68 65 20 49 4e 44 45  tement..The INDE
303e0 58 45 44 20 42 59 20 70 68 72 61 73 65 20 69 73  XED BY phrase is
303f0 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68   an extension th
30400 61 74 20 69 73 20 70 61 72 74 69 63 75 6c 61 72  at is particular
30410 20 74 6f 20 53 51 4c 69 74 65 20 61 6e 64 0a 69   to SQLite and.i
30420 73 20 6e 6f 74 20 70 6f 72 74 61 62 6c 65 20 74  s not portable t
30430 6f 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61  o other SQL data
30440 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 0a 54 68  base engines..Th
30450 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72  e INDEXED BY phr
30460 61 73 65 20 63 61 6e 20 62 65 20 73 65 65 6e 20  ase can be seen 
30470 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
30480 20 73 79 6e 74 61 78 0a 64 69 61 67 72 61 6d 73   syntax.diagrams
30490 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 52 65 63  :</p>..<tcl>.Rec
304a0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
304b0 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61  ram qualified-ta
304c0 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a  ble-name.</tcl>.
304d0 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45 58 45  .<p>^The "INDEXE
304e0 44 20 42 59 20 69 6e 64 65 78 2d 6e 61 6d 65 22  D BY index-name"
304f0 20 70 68 72 61 73 65 20 73 70 65 63 69 66 69 65   phrase specifie
30500 73 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64  s that the named
30510 20 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20 75   index.must be u
30520 73 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  sed in order to 
30530 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20 6f  look up values o
30540 6e 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20  n the preceding 
30550 74 61 62 6c 65 2e 0a 5e 49 66 20 69 6e 64 65 78  table..^If index
30560 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 65  -name does not e
30570 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62  xist or cannot b
30580 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 71  e used for the q
30590 75 65 72 79 2c 20 74 68 65 6e 0a 74 68 65 20 70  uery, then.the p
305a0 72 65 70 61 72 61 74 69 6f 6e 20 6f 66 20 74 68  reparation of th
305b0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
305c0 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e 4f  fails..^(The "NO
305d0 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75 73  T INDEXED" claus
305e0 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61 74  e specifies that
305f0 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c 20   no index shall 
30600 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63 63  be used when.acc
30610 65 73 73 69 6e 67 20 74 68 65 20 70 72 65 63 65  essing the prece
30620 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63 6c  ding table, incl
30630 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e  uding implied in
30640 64 69 63 65 73 20 63 72 65 61 74 65 20 62 79 0a  dices create by.
30650 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41  UNIQUE and PRIMA
30660 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  RY KEY constrain
30670 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68  ts.  However, th
30680 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  e INTEGER PRIMAR
30690 59 20 4b 45 59 0a 63 61 6e 20 73 74 69 6c 6c 20  Y KEY.can still 
306a0 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f 6b 20  be used to look 
306b0 75 70 20 65 6e 74 72 69 65 73 20 65 76 65 6e 20  up entries even 
306c0 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45 58 45  when "NOT INDEXE
306d0 44 22 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  D" is specified.
306e0 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20  )^</p>..<p>Some 
306f0 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
30700 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e  ines provide non
30710 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74 22  -standard "hint"
30720 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69 63   mechanisms whic
30730 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  h.can be used to
30740 20 67 69 76 65 20 74 68 65 20 71 75 65 72 79 20   give the query 
30750 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73 20  optimizer clues 
30760 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69 63  about what indic
30770 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73 65  es it should.use
30780 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61   for a particula
30790 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  r statement.  Th
307a0 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73  e INDEX BY claus
307b0 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 0a  e of SQLite is .
307c0 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68  <em>not</em> a h
307d0 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  inting mechanism
307e0 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20 6e   and it should n
307f0 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 73 75  ot be used as su
30800 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44  ch..^The INDEXED
30810 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65 73 20   BY clause does 
30820 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f 70 74  not give the opt
30830 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61 62 6f  imizer hints abo
30840 75 74 20 77 68 69 63 68 20 69 6e 64 65 78 0a 74  ut which index.t
30850 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65 73 20  o use; it gives 
30860 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 61 20  the optimizer a 
30870 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66 20 77  requirement of w
30880 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20 75 73  hich index to us
30890 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65 72 79  e..^If the query
308a0 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 75 6e   optimizer is un
308b0 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65 20  able to use the 
308c0 69 6e 64 65 78 20 73 70 65 63 69 66 69 65 64 20  index specified 
308d0 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42 59 20  by the.INDEX BY 
308e0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
308f0 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61 69 6c   query will fail
30900 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c   with an error.<
30910 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45  /p>..<p>The INDE
30920 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
30930 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e   <em>not</em> in
30940 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
30950 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70 65 72  n tuning.the per
30960 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20 71 75  formance of a qu
30970 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65 6e 74  ery.  The intent
30980 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45 44 20   of the INDEXED 
30990 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74 6f 20  BY clause is.to 
309a0 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69 6d 65  raise a run-time
309b0 20 65 72 72 6f 72 20 69 66 20 61 20 73 63 68 65   error if a sche
309c0 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63 68 20  ma change, such 
309d0 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63  as dropping or.c
309e0 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78  reating an index
309f0 2c 20 63 61 75 73 65 73 20 74 68 65 20 71 75 65  , causes the que
30a00 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20 74 69  ry plan for a ti
30a10 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71 75 65  me-sensitive que
30a20 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20 54  ry.to change.  T
30a30 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
30a40 61 75 73 65 20 69 73 20 64 65 73 69 67 6e 65 64  ause is designed
30a50 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63 74 0a   to help detect.
30a60 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75 65 72  undesirable quer
30a70 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73 20 64  y plan changes d
30a80 75 72 69 6e 67 20 72 65 67 72 65 73 73 69 6f 6e  uring regression
30a90 20 74 65 73 74 69 6e 67 2e 0a 44 65 76 65 6c 6f   testing..Develo
30aa0 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e 69 73  pers are admonis
30ab0 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20  hed to omit all 
30ac0 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42  use of INDEXED B
30ad0 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69 63 61  Y during.applica
30ae0 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70  tion design, imp
30af0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73  lementation, tes
30b00 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67  ting, and tuning
30b10 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20 42 59  .  If.INDEXED BY
30b20 20 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 61   is to be used a
30b30 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64  t all, it should
30b40 20 62 65 20 69 6e 73 65 72 74 65 64 20 61 74 20   be inserted at 
30b50 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f 66 20  the very.end of 
30b60 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20  the development 
30b70 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22 6c 6f  process when "lo
30b80 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20 64 65  cking down" a de
30b90 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53  sign.</p>..<h3>S
30ba0 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c  ee Also:</h3>..<
30bb0 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b  ol>.<li><p>The [
30bc0 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 68  query planner ch
30bd0 65 63 6b 6c 69 73 74 5d 20 64 65 73 63 72 69 62  ecklist] describ
30be0 65 73 20 73 74 65 70 73 20 74 68 61 74 20 61 70  es steps that ap
30bf0 70 6c 69 63 61 74 69 6f 6e 0a 64 65 76 65 6c 6f  plication.develo
30c00 70 65 72 73 20 73 68 6f 75 6c 64 20 66 6f 6c 6c  pers should foll
30c10 6f 77 69 6e 67 20 74 6f 20 68 65 6c 70 20 72 65  owing to help re
30c20 73 6f 6c 76 65 20 71 75 65 72 79 20 70 6c 61 6e  solve query plan
30c30 6e 65 72 20 70 72 6f 62 6c 65 6d 73 2e 0a 4e 6f  ner problems..No
30c40 74 69 63 65 20 74 68 65 20 74 68 61 74 20 74 68  tice the that th
30c50 65 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44  e use of INDEXED
30c60 20 42 59 20 69 73 20 61 20 6c 61 73 74 20 72 65   BY is a last re
30c70 73 6f 72 74 2c 20 74 6f 20 62 65 20 75 73 65 64  sort, to be used
30c80 20 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c 6c 20 6f   only.when all o
30c90 74 68 65 72 20 6d 65 61 73 75 72 65 73 20 66 61  ther measures fa
30ca0 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e  il.</p>..<li><p>
30cb0 5b 75 70 6c 75 73 63 6f 6e 74 72 6f 6c 7c 54 68  [upluscontrol|Th
30cc0 65 20 75 6e 61 72 79 20 22 2b 22 20 6f 70 65 72  e unary "+" oper
30cd0 61 74 6f 72 5d 0a 63 61 6e 20 62 65 20 75 73 65  ator].can be use
30ce0 64 20 74 6f 20 64 69 73 71 75 61 6c 69 66 79 20  d to disqualify 
30cf0 74 65 72 6d 73 20 69 6e 20 74 68 65 20 57 48 45  terms in the WHE
30d00 52 45 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 75  RE clause from u
30d10 73 65 20 62 79 20 69 6e 64 69 63 65 73 2e 0a 43  se by indices..C
30d20 61 72 65 66 75 6c 20 75 73 65 20 6f 66 20 75 6e  areful use of un
30d30 61 72 79 20 2b 20 63 61 6e 20 73 6f 6d 65 74 69  ary + can someti
30d40 6d 65 73 20 68 65 6c 70 20 70 72 65 76 65 6e 74  mes help prevent
30d50 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
30d60 65 72 20 66 72 6f 6d 0a 63 68 6f 6f 73 69 6e 67  er from.choosing
30d70 20 61 20 70 6f 6f 72 20 69 6e 64 65 78 20 77 69   a poor index wi
30d80 74 68 6f 75 74 20 72 65 73 74 72 69 63 74 69 6e  thout restrictin
30d90 67 20 69 74 20 74 6f 20 75 73 69 6e 67 20 6f 6e  g it to using on
30da0 65 20 73 70 65 63 69 66 69 63 20 69 6e 64 65 78  e specific index
30db0 2e 0a 43 61 72 65 66 75 6c 20 70 6c 61 63 65 6d  ..Careful placem
30dc0 65 6e 74 20 6f 66 20 75 6e 61 72 79 20 2b 20 6f  ent of unary + o
30dd0 70 65 72 61 74 6f 72 73 20 69 73 20 61 20 62 65  perators is a be
30de0 74 74 65 72 20 6d 65 74 68 6f 64 20 66 6f 72 20  tter method for 
30df0 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a 77 68 69  controlling .whi
30e00 63 68 20 69 6e 64 69 63 65 73 20 61 72 65 20 75  ch indices are u
30e10 73 65 64 20 62 79 20 61 20 71 75 65 72 79 2e 3c  sed by a query.<
30e20 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  /p>..<li><p>The 
30e30 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74  [sqlite3_stmt_st
30e40 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e  atus()] C/C++ in
30e50 74 65 72 66 61 63 65 20 74 6f 67 65 74 68 65 72  terface together
30e60 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54   with the.[SQLIT
30e70 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c  E_STMTSTATUS_FUL
30e80 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20  LSCAN_STEP] and 
30e90 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
30ea0 55 53 5f 53 4f 52 54 5d 20 76 65 72 62 73 0a 63  US_SORT] verbs.c
30eb0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  an be used to de
30ec0 74 65 63 74 20 61 74 20 72 75 6e 2d 74 69 6d 65  tect at run-time
30ed0 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61   when an SQL sta
30ee0 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61  tement is not.ma
30ef0 6b 69 6e 67 20 65 66 66 65 63 74 69 76 65 20 75  king effective u
30f00 73 65 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20  se of indices.  
30f10 4d 61 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e  Many application
30f20 73 20 6d 61 79 20 70 72 65 66 65 72 20 74 6f 0a  s may prefer to.
30f30 75 73 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33  use the [sqlite3
30f40 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20  _stmt_status()] 
30f50 69 6e 74 65 72 66 61 63 65 20 74 6f 20 64 65 74  interface to det
30f60 65 63 74 20 69 6e 64 65 78 20 6d 69 73 75 73 65  ect index misuse
30f70 0a 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65  .rather than the
30f80 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61   INDEXED BY phra
30f90 73 65 20 64 65 73 63 72 69 62 65 64 20 68 65 72  se described her
30fa0 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74  e.</p>.</ol>..<t
30fb0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
30fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31000 23 0a 23 20 41 20 6c 69 73 74 20 6f 66 20 6b 65  #.# A list of ke
31010 79 77 6f 72 64 73 2e 20 20 41 20 61 73 74 65 72  ywords.  A aster
31020 69 73 6b 20 6f 63 63 75 72 73 20 61 66 74 65 72  isk occurs after
31030 20 74 68 65 20 6b 65 79 77 6f 72 64 20 69 66 20   the keyword if 
31040 69 74 20 69 73 20 6f 6e 0a 23 20 74 68 65 20 66  it is on.# the f
31050 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a  allback list..#.
31060 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74  set keyword_list
31070 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f   [lsort {.   ABO
31080 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20 20 20  RT.   ACTION.   
31090 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20 20 20  ADD.   AFTER.   
310a0 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20 20  ALL.   ALTER.   
310b0 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20  ANALYZE.   AND. 
310c0 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20 20 41    AS.   ASC.   A
310d0 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49 4e 43  TTACH.   AUTOINC
310e0 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45  REMENT.   BEFORE
310f0 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42 45 54  .   BEGIN.   BET
31100 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43 41  WEEN.   BY.   CA
31110 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a 20 20  SCADE.   CASE.  
31120 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b 0a 20   CAST.   CHECK. 
31130 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c    COLLATE.   COL
31140 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20  UMN.   COMMIT.  
31150 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e   CONFLICT.   CON
31160 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41 54  STRAINT.   CREAT
31170 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55  E.   CROSS.   CU
31180 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20 43 55  RRENT_DATE.   CU
31190 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55  RRENT_TIME.   CU
311a0 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a  RRENT_TIMESTAMP.
311b0 20 20 20 44 41 54 41 42 41 53 45 0a 20 20 20 44     DATABASE.   D
311c0 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52 52  EFAULT.   DEFERR
311d0 45 44 0a 20 20 20 44 45 46 45 52 52 41 42 4c 45  ED.   DEFERRABLE
311e0 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44 45  .   DELETE.   DE
311f0 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20 20 20  SC.   DETACH.   
31200 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52 4f 50  DISTINCT.   DROP
31210 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43 48 0a  .   END.   EACH.
31220 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50     ELSE.   ESCAP
31230 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45  E.   EXCEPT.   E
31240 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58 49 53  XCLUSIVE.   EXIS
31250 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a 20 20  TS.   EXPLAIN.  
31260 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20 20 20   FAIL.   FOR.   
31270 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a  FOREIGN.   FROM.
31280 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a     FULL.   GLOB.
31290 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56 49     GROUP.   HAVI
312a0 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47 4e 4f  NG.   IF.   IGNO
312b0 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 0a  RE.   IMMEDIATE.
312c0 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20     IN.   INDEX. 
312d0 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49 4e 49    INDEXED.   INI
312e0 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a  TIALLY.   INNER.
312f0 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e 53     INSERT.   INS
31300 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53 45 43  TEAD.   INTERSEC
31310 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a  T.   INTO.   IS.
31320 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49     ISNULL.   JOI
31330 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45 46 54  N.   KEY.   LEFT
31340 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49  .   LIKE.   LIMI
31350 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20 4e 41  T.   MATCH.   NA
31360 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e  TURAL.   NO.   N
31370 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20  OT.   NOTNULL.  
31380 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20 20 4f   NULL.   OF.   O
31390 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20 20 4f  FFSET.   ON.   O
313a0 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f 55  R.   ORDER.   OU
313b0 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50  TER.   PLAN.   P
313c0 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41 52 59  RAGMA.   PRIMARY
313d0 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52 41 49  .   QUERY.   RAI
313e0 53 45 0a 20 20 20 52 45 43 55 52 53 49 56 45 0a  SE.   RECURSIVE.
313f0 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20     REFERENCES.  
31400 20 52 45 47 45 58 50 0a 20 20 20 52 45 49 4e 44   REGEXP.   REIND
31410 45 58 0a 20 20 20 52 45 4c 45 41 53 45 0a 20 20  EX.   RELEASE.  
31420 20 52 45 4e 41 4d 45 0a 20 20 20 52 45 50 4c 41   RENAME.   REPLA
31430 43 45 0a 20 20 20 52 45 53 54 52 49 43 54 0a 20  CE.   RESTRICT. 
31440 20 20 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42    RIGHT.   ROLLB
31450 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20 53 41  ACK.   ROW.   SA
31460 56 45 50 4f 49 4e 54 0a 20 20 20 53 45 4c 45 43  VEPOINT.   SELEC
31470 54 0a 20 20 20 53 45 54 0a 20 20 20 54 41 42 4c  T.   SET.   TABL
31480 45 0a 20 20 20 54 45 4d 50 0a 20 20 20 54 45 4d  E.   TEMP.   TEM
31490 50 4f 52 41 52 59 0a 20 20 20 54 48 45 4e 0a 20  PORARY.   THEN. 
314a0 20 20 54 4f 0a 20 20 20 54 52 41 4e 53 41 43 54    TO.   TRANSACT
314b0 49 4f 4e 0a 20 20 20 54 52 49 47 47 45 52 0a 20  ION.   TRIGGER. 
314c0 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55    UNION.   UNIQU
314d0 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20 20 55  E.   UPDATE.   U
314e0 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d 0a 20  SING.   VACUUM. 
314f0 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49 45 57    VALUES.   VIEW
31500 0a 20 20 20 56 49 52 54 55 41 4c 0a 20 20 20 57  .   VIRTUAL.   W
31510 49 54 48 0a 20 20 20 57 49 54 48 4f 55 54 0a 20  ITH.   WITHOUT. 
31520 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45 0a    WHEN.   WHERE.
31530 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49  }]..hd_puts {<DI
31540 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65 63  V class="pdf_sec
31550 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20  tion">}.Section 
31560 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72 64 73  {SQLite Keywords
31570 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51  } keywords {{*SQ
31580 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20  L keyword} {SQL 
31590 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75  keywords}}.hd_pu
315a0 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63  ts {</DIV>}.</tc
315b0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73  l>..<p>The SQL s
315c0 74 61 6e 64 61 72 64 20 73 70 65 63 69 66 69 65  tandard specifie
315d0 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72 20  s a huge number 
315e0 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69 63  of keywords whic
315f0 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73 65  h may not.be use
31600 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f  d as the names o
31610 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65  f tables, indice
31620 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61  s, columns, data
31630 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65 66 69  bases, user-defi
31640 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63  ned.functions, c
31650 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74 75  ollations, virtu
31660 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73  al table modules
31670 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6e  , or any other n
31680 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65  amed object..The
31690 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64   list of keyword
316a0 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61  s is so long tha
316b0 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61 6e  t few people can
316c0 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20 61   remember them a
316d0 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c  ll..For most SQL
316e0 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66 65   code, your safe
316f0 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65 76  st bet is to nev
31700 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c 69  er use any Engli
31710 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64  sh language.word
31720 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   as the name of 
31730 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6f  a user-defined o
31740 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  bject.</p>..<p>I
31750 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75 73  f you want to us
31760 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20 61  e a keyword as a
31770 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20   name, you need 
31780 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54 68  to quote it.  Th
31790 65 72 65 0a 61 72 65 20 66 6f 75 72 20 77 61 79  ere.are four way
317a0 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65 79  s of quoting key
317b0 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65 3a  words in SQLite:
317c0 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b  </p>..<p>.<block
317d0 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c  quote>.<table>.<
317e0 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
317f0 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64  top"><b>'keyword
31800 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  '</b></td><td wi
31810 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09  dth="20"></td>..
31820 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69  <td>^A keyword i
31830 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  n single quotes 
31840 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  is a string lite
31850 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a  ral.</td></tr>..
31860 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
31870 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72  "top"><b>"keywor
31880 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  d"</b></td><td><
31890 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
318a0 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71  word in double-q
318b0 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64 65 6e  uotes is an iden
318c0 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72  tifier.</td></tr
318d0 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
318e0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31  gn="top"><b>&#91
318f0 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62  ;keyword&#93;</b
31900 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
31910 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
31920 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71 75 61  enclosed in squa
31930 72 65 20 62 72 61 63 6b 65 74 73 20 69 73 20 0a  re brackets is .
31940 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74          an ident
31950 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20  ifier.  This is 
31960 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
31970 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20  .  This quoting 
31980 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20  mechanism.      
31990 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 53 20    is used by MS 
319a0 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c 20 53  Access and SQL S
319b0 65 72 76 65 72 20 61 6e 64 20 69 73 20 69 6e 63  erver and is inc
319c0 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  luded in SQLite 
319d0 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  for.        comp
319e0 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c  atibility.</td><
319f0 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76  /tr>..<tr>.<td v
31a00 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26  align="top"><b>&
31a10 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b  #96;keyword&#96;
31a20 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
31a30 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
31a40 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67  rd enclosed in g
31a50 72 61 76 65 20 61 63 63 65 6e 74 73 20 28 41 53  rave accents (AS
31a60 43 49 49 20 63 6f 64 65 20 39 36 29 20 69 73 20  CII code 96) is 
31a70 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e  .        an iden
31a80 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73  tifier.  This is
31a90 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51   not standard SQ
31aa0 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67  L.  This quoting
31ab0 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20   mechanism.     
31ac0 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 79     is used by My
31ad0 53 51 4c 20 61 6e 64 20 69 73 20 69 6e 63 6c 75  SQL and is inclu
31ae0 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f  ded in SQLite fo
31af0 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74  r.        compat
31b00 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74  ibility.</td></t
31b10 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  r>.</table>.</bl
31b20 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a  ockquote>.</p>..
31b30 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69 65 6e 63  <p>For resilienc
31b40 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65  e when confronte
31b50 64 20 77 69 74 68 20 68 69 73 74 6f 72 69 63 61  d with historica
31b60 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  l SQL statements
31b70 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f  , SQLite.will so
31b80 6d 65 74 69 6d 65 73 20 62 65 6e 64 20 74 68 65  metimes bend the
31b90 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 20 61   quoting rules a
31ba0 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a  bove:</p>..<ul>.
31bb0 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79  <li><p>^If a key
31bc0 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 0a 71  word in single.q
31bd0 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 27 6b  uotes (ex: <b>'k
31be0 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27 67  ey'</b> or <b>'g
31bf0 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75 73 65  lob'</b>) is use
31c00 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77  d in a context w
31c10 68 65 72 65 0a 61 6e 20 69 64 65 6e 74 69 66 69  here.an identifi
31c20 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20 62 75  er is allowed bu
31c30 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e 67  t where a string
31c40 20 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f 74 20   literal is not 
31c50 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a 74 68  allowed, then.th
31c60 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72  e token is under
31c70 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e 20 69  stood to be an i
31c80 64 65 6e 74 69 66 69 65 72 20 69 6e 73 74 65 61  dentifier instea
31c90 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20 6c 69  d of a string li
31ca0 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  teral..</p></li>
31cb0 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b  ..<li><p>^If a k
31cc0 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65  eyword in double
31cd0 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e  .quotes (ex: <b>
31ce0 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e  "key"</b> or <b>
31cf0 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73 20 75  "glob"</b>) is u
31d00 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74  sed in a context
31d10 20 77 68 65 72 65 0a 69 74 20 63 61 6e 6e 6f 74   where.it cannot
31d20 20 62 65 20 72 65 73 6f 6c 76 65 64 20 74 6f 20   be resolved to 
31d30 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 62 75  an identifier bu
31d40 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e 67  t where a string
31d50 20 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c 6c 6f   literal.is allo
31d60 77 65 64 2c 20 74 68 65 6e 20 74 68 65 20 74 6f  wed, then the to
31d70 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f  ken is understoo
31d80 64 20 74 6f 20 62 65 20 61 20 73 74 72 69 6e 67  d to be a string
31d90 20 6c 69 74 65 72 61 6c 20 69 6e 73 74 65 61 64   literal instead
31da0 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69 66 69 65  .of an identifie
31db0 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c  r.</p></li>.</ul
31dc0 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d 65 72  >..<p>Programmer
31dd0 73 20 61 72 65 20 63 61 75 74 69 6f 6e 65 64 20  s are cautioned 
31de0 6e 6f 74 20 74 6f 20 75 73 65 20 74 68 65 20 74  not to use the t
31df0 77 6f 20 65 78 63 65 70 74 69 6f 6e 73 20 64 65  wo exceptions de
31e00 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65 20 70  scribed in.the p
31e10 72 65 76 69 6f 75 73 20 62 75 6c 6c 65 74 73 2e  revious bullets.
31e20 20 20 57 65 20 65 6d 70 68 61 73 69 7a 65 20 74    We emphasize t
31e30 68 61 74 20 74 68 65 79 20 65 78 69 73 74 20 6f  hat they exist o
31e40 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c 64 0a  nly so that old.
31e50 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64 20 53  and ill-formed S
31e60 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  QL statements wi
31e70 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63 74 6c 79  ll run correctly
31e80 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
31e90 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67  ns of.SQLite mig
31ea0 68 74 20 72 61 69 73 65 20 65 72 72 6f 72 73 20  ht raise errors 
31eb0 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63 65 70  instead of accep
31ec0 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d  ting the malform
31ed0 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20 63 6f  ed.statements co
31ee0 76 65 72 65 64 20 62 79 20 74 68 65 20 65 78 63  vered by the exc
31ef0 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f  eptions above.</
31f00 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61  p>..<p>.SQLite a
31f10 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72 64 73  dds new keywords
31f20 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69   from time to ti
31f30 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b 65 73  me when it takes
31f40 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72 65 73   on new features
31f50 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e 74 20  ..So to prevent 
31f60 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d 20 62  your code from b
31f70 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79 20 66  eing broken by f
31f80 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e  uture enhancemen
31f90 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e  ts, you should.n
31fa0 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e  ormally quote an
31fb0 79 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61  y identifier tha
31fc0 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73 68 20  t is an English 
31fd0 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c 20 65  language word, e
31fe0 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f  ven if.you do no
31ff0 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a  t have to..</p>.
32000 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20 62 65  .<p>.The list be
32010 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20 70 6f  low shows all po
32020 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64 73 20  ssible keywords 
32030 75 73 65 64 20 62 79 20 61 6e 79 20 62 75 69 6c  used by any buil
32040 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65 67 61  d of.SQLite rega
32050 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d 70 69  rdless of [compi
32060 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d  le-time options]
32070 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f 6e 61  .  .Most reasona
32080 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ble configuratio
32090 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f 72 20 61  ns use most or a
320a0 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65 79 77  ll of these keyw
320b0 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65 20 6b  ords,.but some k
320c0 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65 20 6f  eywords may be o
320d0 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51 4c 20  mitted when SQL 
320e0 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75 72 65  language feature
320f0 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64 2e 0a  s are.disabled..
32100 5e 28 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  ^(Regardless of 
32110 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
32120 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
32130 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74  any identifier t
32140 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a 74 68  hat is not on.th
32150 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c  e following <tcl
32160 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e 67 74  >hd_puts [llengt
32170 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d  h $keyword_list]
32180 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c  </tcl> element.l
32190 69 73 74 20 69 73 20 6e 6f 74 20 61 20 6b 65 79  ist is not a key
321a0 77 6f 72 64 20 74 6f 20 74 68 65 20 53 51 4c 20  word to the SQL 
321b0 70 61 72 73 65 72 20 69 6e 20 53 51 4c 69 74 65  parser in SQLite
321c0 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
321d0 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  ote>.<table widt
321e0 68 3d 22 31 30 30 25 22 3e 3c 74 72 3e 0a 3c 74  h="100%"><tr>.<t
321f0 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22 20 76  d align="left" v
32200 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77 69 64 74  align="top" widt
32210 68 3d 22 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73  h="20%">.<tcl>.s
32220 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b  et n [llength $k
32230 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74  eyword_list].set
32240 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77   nCol 5.set nRow
32250 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f   [expr {($n+$nCo
32260 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74  l-1)/$nCol}].set
32270 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77 6f 72   i 0.foreach wor
32280 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20  d $keyword_list 
32290 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f  {.  if {$i==$nRo
322a0 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70 75 74 73  w} {.    hd_puts
322b0 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67   "</td><td valig
322c0 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d  n=\"top\" align=
322d0 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68 3d 5c  \"left\" width=\
322e0 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73 65 74  "20%\">".    set
322f0 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a   i 1.  } else {.
32300 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20      incr i.  }. 
32310 20 68 64 5f 70 75 74 73 20 22 24 77 6f 72 64 3c   hd_puts "$word<
32320 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a  br>\n".}.</tcl>.
32330 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c  </td></tr></tabl
32340 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
32350 5e 0a                                            ^.