Documentation Source Text

Hex Artifact Content
Login

Artifact fd41974e2f368d9a32a52c0a5af46e5e19a082a1:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 7b 57 49 54 48 20 63 6c 61 75  .    {{WITH clau
03d0: 73 65 7d 20 77 69 74 68 63 6c 61 75 73 65 7d 0a  se} withclause}.
03e0: 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d      {comment com
03f0: 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c 41  ment}.    {EXPLA
0400: 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20 20  IN explain}.    
0410: 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  {expression expr
0420: 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54 52  }.    {{BEGIN TR
0430: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
0440: 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43 4f  action}.    {{CO
0450: 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e  MMIT TRANSACTION
0460: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f  } transaction CO
0470: 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44 20  MMIT}.    {{END 
0480: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0490: 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54 7d  nsaction COMMIT}
04a0: 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20  .    {{ROLLBACK 
04b0: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
04c0: 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41 43  nsaction ROLLBAC
04d0: 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49 4e  K}.    {SAVEPOIN
04e0: 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20 20  T savepoint}.   
04f0: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
0500: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
0510: 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20 7b  SAVEPOINT}.    {
0520: 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68 74  PRAGMA pragma.ht
0530: 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f 4e  ml}.    {{ON CON
0540: 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
0550: 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43 52  nflict}.    {{CR
0560: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0570: 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52 4f  eview}.    {{DRO
0580: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
0590: 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20 54  }.    {{CREATE T
05a0: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
05b0: 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52 4f  igger}.    {{DRO
05c0: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
05d0: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41 54  rigger}.    {{AT
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
05f0: 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45 54  ttach}.    {{DET
0600: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
0610: 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45 49  tach}.      {REI
0620: 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20  NDEX reindex}.  
0630: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
0640: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20   altertable}.   
0650: 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c   {{ANALYZE} anal
0660: 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58  yze}.    {{INDEX
0670: 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
0680: 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74  }.    {{aggregat
0690: 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e functions} agg
06a0: 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20  func aggfunc}.  
06b0: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
06c0: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72  ns} corefunc cor
06d0: 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74  efunc}.    {{dat
06e0: 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
06f0: 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64  ions} datefunc d
0700: 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65  atefunc}.    {ke
0710: 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20  ywords keywords 
0720: 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
0730: 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73    }.  set lang_s
0740: 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78  ection_break [ex
0750: 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c  pr {([llength $l
0760: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
0770: 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61  ]+2)/3}].  forea
0780: 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73  ch {section} [ls
0790: 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69  ort -index 0 -di
07a0: 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73  ctionary $lang_s
07b0: 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20  ection_list] {. 
07c0: 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c   foreach {s_titl
07d0: 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73  e s_tag s_kw} $s
07e0: 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b  ection {}.  if {
07f0: 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20  $s_kw == ""} {. 
0800: 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74     set s_kw $s_t
0810: 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24  itle.  }.  if {$
0820: 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68  s_tag=="pragma.h
0830: 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  tml"} {.    set 
0840: 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65  url $s_tag.  } e
0850: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72  lse {.    set ur
0860: 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74  l lang_$s_tag.ht
0870: 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f  ml.  }.  hd_reso
0880: 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77  lve "<li>\[$s_kw
0890: 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e  |$s_title\]</li>
08a0: 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20  ".  incr i.  if 
08b0: 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69  {$i==$lang_secti
08c0: 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d  on_break || $i==
08d0: 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f  2*$lang_section_
08e0: 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f  break} {.    hd_
08f0: 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e  puts "</ul></td>
0900: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
0910: 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c  \"><ul>".  }.}.<
0920: 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e  /tcl>.</ul></td>
0930: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  </tr></table>..<
0940: 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20  p>^The routines 
0950: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0960: 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33  _v2()], [sqlite3
0970: 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71  _prepare()],.[sq
0980: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
0990: 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  )], [sqlite3_pre
09a0: 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b  pare16_v2()], .[
09b0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c  sqlite3_exec()],
09c0: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65   and [sqlite3_ge
09d0: 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70  t_table()] accep
09e0: 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  t.an SQL stateme
09f0: 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d  nt list (sql-stm
0a00: 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73  t-list) which is
0a10: 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70   a semicolon-sep
0a20: 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73  arated.list of s
0a30: 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  tatements.</p>..
0a40: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
0a50: 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74  am sql-stmt-list
0a60: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20  </tcl>..<p>Each 
0a70: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  SQL statement in
0a80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c   the statement l
0a90: 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ist is an instan
0aa0: 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77  ce of the.follow
0ab0: 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ing:</p>..<tcl>B
0ac0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
0ad0: 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63  -stmt</tcl>..<tc
0ae0: 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72  l>.proc Operator
0af0: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75   {name} {.  retu
0b00: 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  rn "<font color=
0b10: 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67  \"#2c2cf0\"><big
0b20: 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f  >$name</big></fo
0b30: 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74  nt>".}.proc Nont
0b40: 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b  erminal {name} {
0b50: 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66  .  return "<i><f
0b60: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33  ont color=\"#ff3
0b70: 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e  434\">$name</fon
0b80: 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b  t></i>".}.proc K
0b90: 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a  eyword {name} {.
0ba0: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0bb0: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0bc0: 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a  ">$name</font>".
0bd0: 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b  }.proc Example {
0be0: 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74  text} {.  hd_put
0bf0: 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  s "<blockquote><
0c00: 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c  pre>$text</pre><
0c10: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a  /blockquote>".}.
0c20: 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e  .proc Section {n
0c30: 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72  ame label keywor
0c40: 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44  ds} {.  global D
0c50: 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61  OC.  hd_close_ma
0c60: 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69  in.  hd_open_mai
0c70: 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74  n lang_$label.ht
0c80: 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22  ml.  hd_header "
0c90: 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e  SQLite Query Lan
0ca0: 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44  guage: $name" $D
0cb0: 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e  OC/pages/lang.in
0cc0: 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f  .  eval hd_keywo
0cd0: 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20  rds $keywords.  
0ce0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65  if {[lsearch $ke
0cf0: 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d  ywords $name] ==
0d00: 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20   -1 && [lsearch 
0d10: 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65  $keywords *$name
0d20: 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65  ] == -1} {.    e
0d30: 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
0d40: 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20  { $name }.  }.  
0d50: 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69  hd_puts {<h1 ali
0d60: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20  gn="center">SQL 
0d70: 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79  As Understood By
0d80: 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20   SQLite</h1>}.  
0d90: 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68  hd_puts {<p><a h
0da0: 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e  ref="lang.html">
0db0: 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20  [Top]</a></p>}. 
0dc0: 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e   hd_puts "<h2>$n
0dd0: 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23  ame</h2>".}..###
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e20: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0e30: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0e40: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0e50: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41  ALTER TABLE} {*A
0e60: 4c 54 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  LTER}}..Recursiv
0e70: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
0e80: 6c 74 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74 0a  lter-table-stmt.
0e90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69 74  </tcl>..<p>SQLit
0ea0: 65 20 73 75 70 70 6f 72 74 73 20 61 20 6c 69 6d  e supports a lim
0eb0: 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20 41  ited subset of A
0ec0: 4c 54 45 52 20 54 41 42 4c 45 2e 0a 54 68 65 20  LTER TABLE..The 
0ed0: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
0ee0: 61 6e 64 20 69 6e 20 53 51 4c 69 74 65 20 61 6c  and in SQLite al
0ef0: 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f  lows the user to
0f00: 20 72 65 6e 61 6d 65 20 61 20 74 61 62 6c 65 0a   rename a table.
0f10: 6f 72 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  or to add a new 
0f20: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
0f30: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 3c 2f 70  sting table..</p
0f40: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f50: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 63 68  AME TO syntax ch
0f60: 61 6e 67 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  anges the name o
0f70: 66 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d  f <yyterm>table-
0f80: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 74 6f  name</yyterm>.to
0f90: 20 3c 79 79 74 65 72 6d 3e 6e 65 77 2d 74 61 62   <yyterm>new-tab
0fa0: 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
0fb0: 2e 29 5e 0a 54 68 69 73 20 63 6f 6d 6d 61 6e 64  .)^.This command
0fc0: 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64   .cannot be used
0fd0: 20 74 6f 20 6d 6f 76 65 20 61 20 74 61 62 6c 65   to move a table
0fe0: 20 62 65 74 77 65 65 6e 20 61 74 74 61 63 68 65   between attache
0ff0: 64 20 64 61 74 61 62 61 73 65 73 2c 20 6f 6e 6c  d databases, onl
1000: 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a 61 20 74  y to rename .a t
1010: 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20  able within the 
1020: 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e 3c 2f  same database.</
1030: 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 74 68 65 20  p>..<p> ^If the 
1040: 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61  table being rena
1050: 6d 65 64 20 68 61 73 20 74 72 69 67 67 65 72 73  med has triggers
1060: 20 6f 72 20 69 6e 64 69 63 65 73 2c 20 74 68 65   or indices, the
1070: 6e 20 74 68 65 73 65 20 72 65 6d 61 69 6e 0a 61  n these remain.a
1080: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 74  ttached to the t
1090: 61 62 6c 65 20 61 66 74 65 72 20 69 74 20 68 61  able after it ha
10a0: 73 20 62 65 65 6e 20 72 65 6e 61 6d 65 64 2e 20  s been renamed. 
10b0: 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68   ^However, if th
10c0: 65 72 65 20 61 72 65 0a 61 6e 79 20 76 69 65 77  ere are.any view
10d0: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2c 20 6f 72   definitions, or
10e0: 20 73 74 61 74 65 6d 65 6e 74 73 20 65 78 65 63   statements exec
10f0: 75 74 65 64 20 62 79 20 74 72 69 67 67 65 72 73  uted by triggers
1100: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 0a 74   that refer to.t
1110: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1120: 65 6e 61 6d 65 64 2c 20 74 68 65 73 65 20 61 72  enamed, these ar
1130: 65 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61  e not automatica
1140: 6c 6c 79 20 6d 6f 64 69 66 69 65 64 20 74 6f 20  lly modified to 
1150: 75 73 65 20 74 68 65 20 6e 65 77 0a 74 61 62 6c  use the new.tabl
1160: 65 20 6e 61 6d 65 2e 20 49 66 20 74 68 69 73 20  e name. If this 
1170: 69 73 20 72 65 71 75 69 72 65 64 2c 20 74 68 65  is required, the
1180: 20 74 72 69 67 67 65 72 73 20 6f 72 20 76 69 65   triggers or vie
1190: 77 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 6d 75  w definitions mu
11a0: 73 74 20 62 65 0a 64 72 6f 70 70 65 64 20 61 6e  st be.dropped an
11b0: 64 20 72 65 63 72 65 61 74 65 64 20 74 6f 20 75  d recreated to u
11c0: 73 65 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  se the new table
11d0: 20 6e 61 6d 65 20 62 79 20 68 61 6e 64 2e 0a 3c   name by hand..<
11e0: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
11f0: 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  ><table border="
1200: 31 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  1" cellpadding="
1210: 31 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 0a 3c 65  10">.<tr><td>.<e
1220: 6d 3e 49 6d 70 6f 72 74 61 6e 74 20 4e 6f 74 65  m>Important Note
1230: 3a 3c 2f 65 6d 3e 0a 54 68 65 20 27 41 4c 54 45  :</em>.The 'ALTE
1240: 52 20 54 41 42 4c 45 20 2e 2e 2e 20 52 45 4e 41  R TABLE ... RENA
1250: 4d 45 20 54 4f 20 2e 2e 2e 27 20 63 6f 6d 6d 61  ME TO ...' comma
1260: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 75 70 64 61  nd does not upda
1270: 74 65 20 61 63 74 69 6f 6e 0a 73 74 61 74 65 6d  te action.statem
1280: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
1290: 67 65 72 73 20 6f 72 20 53 45 4c 45 43 54 20 73  gers or SELECT s
12a0: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
12b0: 20 76 69 65 77 73 2e 0a 49 66 20 74 68 65 20 74   views..If the t
12c0: 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d  able being renam
12d0: 65 64 20 69 73 20 72 65 66 65 72 65 6e 63 65 64  ed is referenced
12e0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74 72 69   from within tri
12f0: 67 67 65 72 73 20 6f 72 20 76 69 65 77 73 2c 0a  ggers or views,.
1300: 74 68 65 6e 20 74 68 6f 73 65 20 74 72 69 67 67  then those trigg
1310: 65 72 73 20 61 6e 64 20 76 69 65 77 73 20 6d 75  ers and views mu
1320: 73 74 20 62 65 20 64 72 6f 70 70 65 64 20 61 6e  st be dropped an
1330: 64 20 72 65 63 72 65 61 74 65 64 20 73 65 70 61  d recreated sepa
1340: 72 61 74 65 6c 79 0a 62 79 20 74 68 65 20 61 70  rately.by the ap
1350: 70 6c 69 63 61 74 69 6f 6e 2e 0a 3c 2f 74 64 3e  plication..</td>
1360: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  </tr></table>.</
1370: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
1380: 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
1390: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
13a0: 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  e .[foreign_keys
13b0: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
13c0: 64 5d 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20  d] when a table 
13d0: 69 73 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e  is renamed, then
13e0: 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65   any.[foreign-ke
13f0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
1400: 45 4e 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69  ENCES clauses] i
1410: 6e 20 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74  n any table (eit
1420: 68 65 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65  her the.table be
1430: 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73  ing renamed or s
1440: 6f 6d 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29  ome other table)
1450: 0a 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74  .that refer to t
1460: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1470: 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66  enamed are modif
1480: 69 65 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f  ied to refer .to
1490: 20 74 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62   the renamed tab
14a0: 6c 65 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61  le by its new na
14b0: 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44  me...<p> ^The AD
14c0: 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a  D COLUMN syntax.
14d0: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 61  is used to add a
14e0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   new column to a
14f0: 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
1500: 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  ..^The new colum
1510: 6e 20 69 73 20 61 6c 77 61 79 73 20 61 70 70 65  n is always appe
1520: 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  nded to the end 
1530: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  of the list of e
1540: 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  xisting columns.
1550: 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66  .The [column-def
1560: 5d 20 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74  ] rule defines t
1570: 68 65 20 63 68 61 72 61 63 74 65 72 69 73 74 69  he characteristi
1580: 63 73 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f  cs of the new co
1590: 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20  lumn..^(The new 
15a0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20  column may take 
15b0: 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73  any of the forms
15c0: 20 70 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20   permissible in 
15d0: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
15e0: 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68  .statement, with
15f0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
1600: 65 73 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c  estrictions:)^.<
1610: 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  ul>.<li>^The col
1620: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
1630: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f   a PRIMARY KEY o
1640: 72 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  r UNIQUE constra
1650: 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54  int.</li>.<li>^T
1660: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1670: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
1680: 20 76 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e   value of CURREN
1690: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
16a0: 44 41 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45  DATE, .    CURRE
16b0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72  NT_TIMESTAMP, or
16c0: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
16d0: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f  n parentheses.</
16e0: 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f  li>.<li>^If a NO
16f0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
1700: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
1710: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
1720: 6d 75 73 74 20 68 61 76 65 20 61 0a 20 20 20 20  must have a.    
1730: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74  default value ot
1740: 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c  her than NULL..<
1750: 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  li>^If [foreign 
1760: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1770: 20 61 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65   are [foreign_ke
1780: 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62  ys pragma | enab
1790: 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63  led] and.    a c
17a0: 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f  olumn with a [fo
17b0: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
17c0: 20 7c 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c   | REFERENCES cl
17d0: 61 75 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64  ause].    is add
17e0: 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  ed, the column m
17f0: 75 73 74 20 68 61 76 65 20 61 20 64 65 66 61 75  ust have a defau
1800: 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c  lt value of NULL
1810: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74  ..</ul>..<p>^Not
1820: 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e  e also that when
1830: 20 61 64 64 69 6e 67 20 61 20 5b 43 48 45 43 4b   adding a [CHECK
1840: 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68   constraint], th
1850: 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  e CHECK constrai
1860: 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64  nt.is not tested
1870: 20 61 67 61 69 6e 73 74 20 70 72 65 65 78 69 73   against preexis
1880: 74 69 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65  ting rows of the
1890: 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61   table..^This ca
18a0: 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61  n result in a ta
18b0: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
18c0: 73 20 64 61 74 61 20 74 68 61 74 0a 69 73 20 69  s data that.is i
18d0: 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74  n violation of t
18e0: 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  he CHECK constra
18f0: 69 6e 74 2e 20 20 46 75 74 75 72 65 20 76 65 72  int.  Future ver
1900: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1910: 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20  might.change to 
1920: 76 61 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63  validate CHECK c
1930: 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20 74 68  onstraints as th
1940: 65 79 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70  ey are added.</p
1950: 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 65 63 75  >..<p> The execu
1960: 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65  tion time of the
1970: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1980: 6d 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64  mand is independ
1990: 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e  ent of.the amoun
19a0: 74 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65  t of data in the
19b0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54   table.  The ALT
19c0: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
19d0: 20 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79   runs as quickly
19e0: 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68  .on a table with
19f0: 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73   10 million rows
1a00: 20 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61   as it does on a
1a10: 20 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f   table with 1 ro
1a20: 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65  w..</p>..<p>Afte
1a30: 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73  r ADD COLUMN has
1a40: 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64   been run on a d
1a50: 61 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61  atabase, that da
1a60: 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a  tabase will not.
1a70: 62 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53  be readable by S
1a80: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1a90: 31 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e  1.3 and earlier.
1aa0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
1ab0: 61 67 6d 65 6e 74 20 6f 74 68 65 72 61 6c 74 65  agment otheralte
1ac0: 72 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4d 61 6b 69  r</tcl>.<h3>Maki
1ad0: 6e 67 20 4f 74 68 65 72 20 4b 69 6e 64 73 20 4f  ng Other Kinds O
1ae0: 66 20 54 61 62 6c 65 20 53 63 68 65 6d 61 20 43  f Table Schema C
1af0: 68 61 6e 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  hanges</h3>..<p>
1b00: 20 54 68 65 20 6f 6e 6c 79 20 73 63 68 65 6d 61   The only schema
1b10: 20 61 6c 74 65 72 69 6e 67 20 63 6f 6d 6d 61 6e   altering comman
1b20: 64 73 20 64 69 72 65 63 74 6c 79 20 73 75 70 70  ds directly supp
1b30: 6f 72 74 65 64 20 62 79 20 53 51 4c 69 74 65 20  orted by SQLite 
1b40: 61 72 65 20 74 68 65 0a 22 72 65 6e 61 6d 65 20  are the."rename 
1b50: 74 61 62 6c 65 22 20 61 6e 64 20 22 61 64 64 20  table" and "add 
1b60: 63 6f 6c 75 6d 6e 22 20 63 6f 6d 6d 61 6e 64 73  column" commands
1b70: 20 73 68 6f 77 6e 20 61 62 6f 76 65 2e 20 20 48   shown above.  H
1b80: 6f 77 65 76 65 72 2c 20 61 70 70 6c 69 63 61 74  owever, applicat
1b90: 69 6f 6e 73 0a 63 61 6e 20 6d 61 6b 65 20 6f 74  ions.can make ot
1ba0: 68 65 72 20 61 72 62 69 74 72 61 72 79 20 63 68  her arbitrary ch
1bb0: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 66 6f 72  anges to the for
1bc0: 6d 61 74 20 6f 66 20 61 20 74 61 62 6c 65 20 75  mat of a table u
1bd0: 73 69 6e 67 20 61 20 73 69 6d 70 6c 65 0a 73 65  sing a simple.se
1be0: 71 75 65 6e 63 65 20 6f 66 20 6f 70 65 72 61 74  quence of operat
1bf0: 69 6f 6e 73 2e 0a 54 68 65 20 73 74 65 70 73 20  ions..The steps 
1c00: 74 6f 20 6d 61 6b 65 20 61 72 62 69 74 72 61 72  to make arbitrar
1c10: 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  y changes to the
1c20: 20 73 63 68 65 6d 61 20 64 65 73 69 67 6e 20 6f   schema design o
1c30: 66 20 73 6f 6d 65 20 74 61 62 6c 65 20 58 0a 61  f some table X.a
1c40: 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  re as follows:..
1c50: 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20  <ol>.<li><p>.If 
1c60: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
1c70: 74 72 61 69 6e 74 73 20 61 72 65 20 65 6e 61 62  traints are enab
1c80: 6c 65 64 2c 0a 64 69 73 61 62 6c 65 20 74 68 65  led,.disable the
1c90: 6d 20 75 73 69 6e 67 20 5b 50 52 41 47 4d 41 20  m using [PRAGMA 
1ca0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 7c 20 50  foreign_keys | P
1cb0: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
1cc0: 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70  ys=OFF]...<li><p
1cd0: 3e 0a 53 74 61 72 74 20 61 20 74 72 61 6e 73 61  >.Start a transa
1ce0: 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ction...<li><p>.
1cf0: 52 65 6d 65 6d 62 65 72 20 74 68 65 20 66 6f 72  Remember the for
1d00: 6d 61 74 20 6f 66 20 61 6c 6c 20 69 6e 64 65 78  mat of all index
1d10: 65 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 20  es and triggers 
1d20: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1d30: 74 61 62 6c 65 20 58 2e 0a 54 68 69 73 20 69 6e  table X..This in
1d40: 66 6f 72 6d 61 74 69 6f 6e 20 77 69 6c 6c 20 62  formation will b
1d50: 65 20 6e 65 65 64 65 64 20 69 6e 20 73 74 65 70  e needed in step
1d60: 20 38 20 62 65 6c 6f 77 2e 20 20 4f 6e 65 20 77   8 below.  One w
1d70: 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73  ay to do this is
1d80: 0a 74 6f 20 72 75 6e 20 61 20 71 75 65 72 79 20  .to run a query 
1d90: 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  like the followi
1da0: 6e 67 3a 0a 53 45 4c 45 43 54 20 74 79 70 65 2c  ng:.SELECT type,
1db0: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
1dc0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 62  _master WHERE tb
1dd0: 6c 5f 6e 61 6d 65 3d 27 58 27 2e 0a 0a 3c 6c 69  l_name='X'...<li
1de0: 3e 3c 70 3e 0a 55 73 65 20 5b 43 52 45 41 54 45  ><p>.Use [CREATE
1df0: 20 54 41 42 4c 45 5d 20 74 6f 20 63 6f 6e 73 74   TABLE] to const
1e00: 72 75 63 74 20 61 20 6e 65 77 20 74 61 62 6c 65  ruct a new table
1e10: 20 22 6e 65 77 5f 58 22 20 74 68 61 74 20 69 73   "new_X" that is
1e20: 20 69 6e 20 74 68 65 20 64 65 73 69 72 65 64 0a   in the desired.
1e30: 72 65 76 69 73 65 64 20 66 6f 72 6d 61 74 20 6f  revised format o
1e40: 66 20 74 61 62 6c 65 20 58 2e 20 20 4d 61 6b 65  f table X.  Make
1e50: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 6e   sure that the n
1e60: 61 6d 65 20 22 6e 65 77 5f 58 22 20 64 6f 65 73  ame "new_X" does
1e70: 20 6e 6f 74 20 63 6f 6c 6c 69 64 65 0a 77 69 74   not collide.wit
1e80: 68 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20 74  h any existing t
1e90: 61 62 6c 65 20 6e 61 6d 65 2c 20 6f 66 20 63 6f  able name, of co
1ea0: 75 72 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 54  urse...<li><p>.T
1eb0: 72 61 6e 73 66 65 72 20 63 6f 6e 74 65 6e 74 20  ransfer content 
1ec0: 66 72 6f 6d 20 58 20 69 6e 74 6f 20 6e 65 77 5f  from X into new_
1ed0: 58 20 75 73 69 6e 67 20 61 20 73 74 61 74 65 6d  X using a statem
1ee0: 65 6e 74 0a 6c 69 6b 65 3a 20 49 4e 53 45 52 54  ent.like: INSERT
1ef0: 20 49 4e 54 4f 20 6e 65 77 5f 58 20 53 45 4c 45   INTO new_X SELE
1f00: 43 54 20 2e 2e 2e 20 46 52 4f 4d 20 58 2e 0a 0a  CT ... FROM X...
1f10: 3c 6c 69 3e 3c 70 3e 0a 44 72 6f 70 20 74 68 65  <li><p>.Drop the
1f20: 20 6f 6c 64 20 74 61 62 6c 65 20 58 3a 20 20 5b   old table X:  [
1f30: 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 44 52 4f  DROP TABLE | DRO
1f40: 50 20 54 41 42 4c 45 20 58 5d 2e 0a 0a 3c 6c 69  P TABLE X]...<li
1f50: 3e 3c 70 3e 0a 43 68 61 6e 67 65 20 74 68 65 20  ><p>.Change the 
1f60: 6e 61 6d 65 20 6f 66 20 6e 65 77 5f 58 20 74 6f  name of new_X to
1f70: 20 58 20 75 73 69 6e 67 3a 20 41 4c 54 45 52 20   X using: ALTER 
1f80: 54 41 42 4c 45 20 6e 65 77 5f 58 20 52 45 4e 41  TABLE new_X RENA
1f90: 4d 45 20 54 4f 20 58 2e 0a 0a 3c 6c 69 3e 3c 70  ME TO X...<li><p
1fa0: 3e 0a 55 73 65 20 5b 43 52 45 41 54 45 20 49 4e  >.Use [CREATE IN
1fb0: 44 45 58 5d 20 61 6e 64 20 5b 43 52 45 41 54 45  DEX] and [CREATE
1fc0: 20 54 52 49 47 47 45 52 5d 20 74 6f 20 72 65 63   TRIGGER] to rec
1fd0: 6f 6e 73 74 72 75 63 74 20 69 6e 64 65 78 65 73  onstruct indexes
1fe0: 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73   and triggers.as
1ff0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 61  sociated with ta
2000: 62 6c 65 20 58 2e 20 20 50 65 72 68 61 70 73 20  ble X.  Perhaps 
2010: 75 73 65 20 74 68 65 20 6f 6c 64 20 66 6f 72 6d  use the old form
2020: 61 74 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  at of the trigge
2030: 72 73 20 61 6e 64 0a 69 6e 64 65 78 65 73 20 73  rs and.indexes s
2040: 61 76 65 64 20 66 72 6f 6d 20 73 74 65 70 20 33  aved from step 3
2050: 20 61 62 6f 76 65 20 61 73 20 61 20 67 75 69 64   above as a guid
2060: 65 2c 20 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65  e, making change
2070: 73 20 61 73 20 61 70 70 72 6f 70 72 69 61 74 65  s as appropriate
2080: 0a 66 6f 72 20 74 68 65 20 61 6c 74 65 72 61 74  .for the alterat
2090: 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 49 66 20  ion...<li><p>If 
20a0: 61 6e 79 20 76 69 65 77 73 20 72 65 66 65 72 20  any views refer 
20b0: 74 6f 20 74 61 62 6c 65 20 58 20 69 6e 20 61 20  to table X in a 
20c0: 77 61 79 20 74 68 61 74 20 69 73 20 61 66 66 65  way that is affe
20d0: 63 74 65 64 20 62 79 20 74 68 65 0a 73 63 68 65  cted by the.sche
20e0: 6d 61 20 63 68 61 6e 67 65 2c 20 74 68 65 6e 20  ma change, then 
20f0: 64 72 6f 70 20 74 68 6f 73 65 20 76 69 65 77 73  drop those views
2100: 20 75 73 69 6e 67 20 5b 44 52 4f 50 20 56 49 45   using [DROP VIE
2110: 57 5d 20 61 6e 64 20 72 65 63 72 65 61 74 65 20  W] and recreate 
2120: 74 68 65 6d 0a 77 69 74 68 20 77 68 61 74 65 76  them.with whatev
2130: 65 72 20 63 68 61 6e 67 65 73 20 61 72 65 20 6e  er changes are n
2140: 65 63 65 73 73 61 72 79 20 74 6f 20 61 63 63 6f  ecessary to acco
2150: 6d 6d 6f 64 61 74 65 20 74 68 65 20 73 63 68 65  mmodate the sche
2160: 6d 61 20 63 68 61 6e 67 65 0a 75 73 69 6e 67 20  ma change.using 
2170: 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2e 0a 0a  [CREATE VIEW]...
2180: 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69  <li><p>.If forei
2190: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
21a0: 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e 61 6c  ts were original
21b0: 6c 79 20 65 6e 61 62 6c 65 64 0a 74 68 65 6e 20  ly enabled.then 
21c0: 72 75 6e 20 5b 50 52 41 47 4d 41 20 66 6f 72 65  run [PRAGMA fore
21d0: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 5d 20 74  ign_key_check] t
21e0: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
21f0: 65 20 73 63 68 65 6d 61 0a 63 68 61 6e 67 65 20  e schema.change 
2200: 64 69 64 20 6e 6f 74 20 62 72 65 61 6b 20 61 6e  did not break an
2210: 79 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  y foreign key co
2220: 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 0a 3c 6c 69  nstraints....<li
2230: 3e 3c 70 3e 0a 43 6f 6d 6d 69 74 20 74 68 65 20  ><p>.Commit the 
2240: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 72  transaction star
2250: 74 65 64 20 69 6e 20 73 74 65 70 20 32 2e 0a 0a  ted in step 2...
2260: 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69  <li><p>.If forei
2270: 67 6e 20 6b 65 79 73 20 63 6f 6e 73 74 72 61 69  gn keys constrai
2280: 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e 61  nts were origina
2290: 6c 6c 79 20 65 6e 61 62 6c 65 64 2c 20 72 65 65  lly enabled, ree
22a0: 6e 61 62 6c 65 20 74 68 65 6d 20 6e 6f 77 2e 0a  nable them now..
22b0: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 70 72  </ol>..<p>The pr
22c0: 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20 69 73  ocedure above is
22d0: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 67 65 6e 65   completely gene
22e0: 72 61 6c 20 61 6e 64 20 77 69 6c 6c 20 77 6f 72  ral and will wor
22f0: 6b 20 65 76 65 6e 20 69 66 20 74 68 65 0a 73 63  k even if the.sc
2300: 68 65 6d 61 20 63 68 61 6e 67 65 20 63 61 75 73  hema change caus
2310: 65 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  es the informati
2320: 6f 6e 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  on stored in the
2330: 20 74 61 62 6c 65 20 74 6f 20 63 68 61 6e 67 65   table to change
2340: 2e 0a 53 6f 20 74 68 65 20 66 75 6c 6c 20 70 72  ..So the full pr
2350: 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20 69 73  ocedure above is
2360: 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
2370: 20 64 72 6f 70 70 69 6e 67 20 61 20 63 6f 6c 75   dropping a colu
2380: 6d 6e 2c 0a 63 68 61 6e 67 69 6e 67 20 74 68 65  mn,.changing the
2390: 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e   order of column
23a0: 73 2c 20 61 64 64 69 6e 67 20 6f 72 20 72 65 6d  s, adding or rem
23b0: 6f 76 69 6e 67 20 61 20 55 4e 49 51 55 45 20 63  oving a UNIQUE c
23c0: 6f 6e 73 74 72 61 69 6e 74 0a 6f 72 20 50 52 49  onstraint.or PRI
23d0: 4d 41 52 59 20 4b 45 59 2c 20 61 64 64 69 6e 67  MARY KEY, adding
23e0: 20 43 48 45 43 4b 20 6f 72 20 46 4f 52 45 49 47   CHECK or FOREIG
23f0: 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20 4e 55 4c  N KEY or NOT NUL
2400: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 6f  L constraints,.o
2410: 72 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 64  r changing the d
2420: 61 74 61 74 79 70 65 20 66 6f 72 20 61 20 63 6f  atatype for a co
2430: 6c 75 6d 6e 2c 20 66 6f 72 20 65 78 61 6d 70 6c  lumn, for exampl
2440: 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 61 20 73  e.  However, a s
2450: 69 6d 70 6c 65 72 0a 61 6e 64 20 66 61 73 74 65  impler.and faste
2460: 72 20 70 72 6f 63 65 64 75 72 65 20 63 61 6e 20  r procedure can 
2470: 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 75 73  optionally be us
2480: 65 64 20 66 6f 72 0a 73 6f 6d 65 20 63 68 61 6e  ed for.some chan
2490: 67 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 20 61  ges that do no a
24a0: 66 66 65 63 74 20 74 68 65 20 6f 6e 2d 64 69 73  ffect the on-dis
24b0: 6b 20 63 6f 6e 74 65 6e 74 20 69 6e 20 61 6e 79  k content in any
24c0: 20 77 61 79 2e 0a 54 68 65 20 66 6f 6c 6c 6f 77   way..The follow
24d0: 69 6e 67 20 73 69 6d 70 6c 65 72 20 70 72 6f 63  ing simpler proc
24e0: 65 64 75 72 65 20 69 73 20 61 70 70 72 6f 70 72  edure is appropr
24f0: 69 61 74 65 20 66 6f 72 20 72 65 6d 6f 76 69 6e  iate for removin
2500: 67 0a 43 48 45 43 4b 20 6f 72 20 46 4f 52 45 49  g.CHECK or FOREI
2510: 47 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20 4e 55  GN KEY or NOT NU
2520: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a  LL constraints,.
2530: 72 65 6e 61 6d 69 6e 67 20 63 6f 6c 75 6d 6e 73  renaming columns
2540: 2c 20 6f 72 20 61 64 64 69 6e 67 20 6f 72 20 72  , or adding or r
2550: 65 6d 6f 76 69 6e 67 20 6f 72 20 63 68 61 6e 67  emoving or chang
2560: 69 6e 67 20 64 65 66 61 75 6c 74 20 76 61 6c 75  ing default valu
2570: 65 73 20 6f 6e 0a 61 20 63 6f 6c 75 6d 6e 2e 0a  es on.a column..
2580: 0a 3c 6f 6c 3e 0a 3c 6c 49 3e 3c 70 3e 20 53 74  .<ol>.<lI><p> St
2590: 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
25a0: 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20  n...<li><p> Run 
25b0: 5b 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76  [PRAGMA schema_v
25c0: 65 72 73 69 6f 6e 5d 20 74 6f 20 64 65 74 65 72  ersion] to deter
25d0: 6d 69 6e 65 20 74 68 65 20 63 75 72 72 65 6e 74  mine the current
25e0: 20 73 63 68 65 6d 61 0a 76 65 72 73 69 6f 6e 20   schema.version 
25f0: 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6e 75  number.  This nu
2600: 6d 62 65 72 20 77 69 6c 6c 20 62 65 20 6e 65 65  mber will be nee
2610: 64 65 64 20 66 6f 72 20 73 74 65 70 20 36 20 62  ded for step 6 b
2620: 65 6c 6f 77 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 41  elow...<li><p> A
2630: 63 74 69 76 61 74 65 20 73 63 68 65 6d 61 20 65  ctivate schema e
2640: 64 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50  diting using .[P
2650: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
2660: 63 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77  chema | PRAGMA w
2670: 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
2680: 4e 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e  N]...<li><p> Run
2690: 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 73 74 61   an [UPDATE] sta
26a0: 74 65 6d 65 6e 74 20 74 6f 20 63 68 61 6e 67 65  tement to change
26b0: 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   the definition 
26c0: 6f 66 20 74 61 62 6c 65 20 58 0a 69 6e 20 74 68  of table X.in th
26d0: 65 20 5b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  e [sqlite_master
26e0: 20 74 61 62 6c 65 5d 3a 20 0a 55 50 44 41 54 45   table]: .UPDATE
26f0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 53   sqlite_master S
2700: 45 54 20 73 71 6c 3d 2e 2e 2e 20 57 48 45 52 45  ET sql=... WHERE
2710: 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41 4e   type='table' AN
2720: 44 20 6e 61 6d 65 3d 27 58 27 3b 0a 3c 70 3e 3c  D name='X';.<p><
2730: 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e  em>Caution:</em>
2740: 20 20 4d 61 6b 69 6e 67 20 61 20 63 68 61 6e 67    Making a chang
2750: 65 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f  e to the sqlite_
2760: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6c 69 6b  master table lik
2770: 65 20 74 68 69 73 20 77 69 6c 6c 0a 72 65 6e 64  e this will.rend
2780: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
2790: 63 6f 72 72 75 70 74 20 61 6e 64 20 75 6e 72 65  corrupt and unre
27a0: 61 64 61 62 6c 65 20 69 66 20 74 68 65 20 63 68  adable if the ch
27b0: 61 6e 67 65 20 63 6f 6e 74 61 69 6e 73 0a 61 20  ange contains.a 
27c0: 73 79 6e 74 61 78 20 65 72 72 6f 72 2e 20 20 49  syntax error.  I
27d0: 74 20 69 73 20 73 75 67 67 65 73 74 65 64 20 74  t is suggested t
27e0: 68 61 74 20 63 61 72 65 66 75 6c 20 74 65 73 74  hat careful test
27f0: 69 6e 67 20 6f 66 20 74 68 65 20 55 50 44 41 54  ing of the UPDAT
2800: 45 0a 73 74 61 74 65 6d 65 6e 74 20 62 65 20 64  E.statement be d
2810: 6f 6e 65 20 6f 6e 20 61 20 73 65 70 61 72 61 74  one on a separat
2820: 65 20 62 6c 61 6e 6b 20 64 61 74 61 62 61 73 65  e blank database
2830: 20 70 72 69 6f 72 20 74 6f 20 75 73 69 6e 67 20   prior to using 
2840: 69 74 20 6f 6e 0a 61 20 64 61 74 61 62 61 73 65  it on.a database
2850: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6d 70 6f   containing impo
2860: 72 74 61 6e 74 20 64 61 74 61 2e 0a 0a 3c 6c 69  rtant data...<li
2870: 3e 3c 70 3e 20 49 66 20 74 68 65 20 63 68 61 6e  ><p> If the chan
2880: 67 65 20 74 6f 20 74 61 62 6c 65 20 58 20 61 6c  ge to table X al
2890: 73 6f 20 61 66 66 65 63 74 73 20 6f 74 68 65 72  so affects other
28a0: 20 74 61 62 6c 65 73 20 6f 72 20 69 6e 64 65 78   tables or index
28b0: 65 73 20 6f 72 0a 74 72 69 67 67 65 72 73 20 61  es or.triggers a
28c0: 72 65 20 76 69 65 77 73 20 77 69 74 68 69 6e 20  re views within 
28d0: 73 63 68 65 6d 61 2c 20 74 68 65 6e 20 72 75 6e  schema, then run
28e0: 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
28f0: 65 6e 74 73 20 74 6f 20 6d 6f 64 69 66 79 0a 74  ents to modify.t
2900: 68 6f 73 65 20 6f 74 68 65 72 20 74 61 62 6c 65  hose other table
2910: 73 20 69 6e 64 65 78 65 73 20 61 6e 64 20 76 69  s indexes and vi
2920: 65 77 73 20 74 6f 6f 2e 20 20 46 6f 72 20 65 78  ews too.  For ex
2930: 61 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 6e 61  ample, if the na
2940: 6d 65 20 6f 66 0a 61 20 63 6f 6c 75 6d 6e 20 63  me of.a column c
2950: 68 61 6e 67 65 73 2c 20 61 6c 6c 20 46 4f 52 45  hanges, all FORE
2960: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
2970: 6e 74 73 2c 20 74 72 69 67 67 65 72 73 2c 20 69  nts, triggers, i
2980: 6e 64 65 78 65 73 2c 20 61 6e 64 0a 76 69 65 77  ndexes, and.view
2990: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
29a0: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 6d 75 73 74  that column must
29b0: 20 62 65 20 6d 6f 64 69 66 69 65 64 2e 0a 3c 70   be modified..<p
29c0: 3e 3c 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65  ><em>Caution:</e
29d0: 6d 3e 20 20 4f 6e 63 65 20 61 67 61 69 6e 2c 20  m>  Once again, 
29e0: 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 74  making changes t
29f0: 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  o the sqlite_mas
2a00: 74 65 72 20 0a 74 61 62 6c 65 20 6c 69 6b 65 20  ter .table like 
2a10: 74 68 69 73 20 77 69 6c 6c 20 72 65 6e 64 65 72  this will render
2a20: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2a30: 72 72 75 70 74 20 61 6e 64 20 75 6e 72 65 61 64  rrupt and unread
2a40: 61 62 6c 65 20 69 66 20 74 68 65 20 0a 63 68 61  able if the .cha
2a50: 6e 67 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  nge contains an 
2a60: 65 72 72 6f 72 2e 20 20 43 61 72 65 66 75 6c 6c  error.  Carefull
2a70: 79 20 74 65 73 74 20 6f 66 20 74 68 69 73 20 65  y test of this e
2a80: 6e 74 69 72 65 20 70 72 6f 63 65 64 75 72 65 0a  ntire procedure.
2a90: 6f 6e 20 61 20 73 65 70 61 72 61 74 65 20 74 65  on a separate te
2aa0: 73 74 20 64 61 74 61 62 61 73 65 20 70 72 69 6f  st database prio
2ab0: 72 20 74 6f 20 75 73 69 6e 67 20 69 74 20 6f 6e  r to using it on
2ac0: 0a 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  .a database cont
2ad0: 61 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61 6e 74  aining important
2ae0: 20 64 61 74 61 20 61 6e 64 2f 6f 72 20 6d 61 6b   data and/or mak
2af0: 65 20 62 61 63 6b 75 70 20 63 6f 70 69 65 73 20  e backup copies 
2b00: 6f 66 0a 69 6d 70 6f 72 74 61 6e 74 20 64 61 74  of.important dat
2b10: 61 62 61 73 65 73 20 70 72 69 6f 72 20 74 6f 20  abases prior to 
2b20: 72 75 6e 6e 69 6e 67 20 74 68 69 73 20 70 72 6f  running this pro
2b30: 63 65 64 75 72 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e  cedure...<li><p>
2b40: 20 49 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 73   Increment the s
2b50: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
2b60: 6d 62 65 72 20 75 73 69 6e 67 0a 5b 50 52 41 47  mber using.[PRAG
2b70: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
2b80: 6e 20 7c 20 50 52 41 47 4d 41 20 73 63 68 65 6d  n | PRAGMA schem
2b90: 61 5f 76 65 72 73 69 6f 6e 3d 58 5d 20 77 68 65  a_version=X] whe
2ba0: 72 65 20 58 20 69 73 20 6f 6e 65 0a 6d 6f 72 65  re X is one.more
2bb0: 20 74 68 61 6e 20 74 68 65 20 6f 6c 64 20 73 63   than the old sc
2bc0: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
2bd0: 62 65 72 20 66 6f 75 6e 64 20 69 6e 20 73 74 65  ber found in ste
2be0: 70 20 32 20 61 62 6f 76 65 2e 0a 0a 3c 6c 69 3e  p 2 above...<li>
2bf0: 3c 70 3e 20 44 69 73 61 62 6c 65 20 73 63 68 65  <p> Disable sche
2c00: 6d 61 20 65 64 69 74 69 6e 67 20 75 73 69 6e 67  ma editing using
2c10: 20 0a 5b 50 52 41 47 4d 41 20 77 72 69 74 61 62   .[PRAGMA writab
2c20: 6c 65 5f 73 63 68 65 6d 61 20 7c 20 50 52 41 47  le_schema | PRAG
2c30: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
2c40: 6d 61 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70  ma=OFF]...<li><p
2c50: 3e 20 28 4f 70 74 69 6f 6e 61 6c 29 20 52 75 6e  > (Optional) Run
2c60: 20 5b 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   [PRAGMA integri
2c70: 74 79 5f 63 68 65 63 6b 5d 20 74 6f 20 76 65 72  ty_check] to ver
2c80: 69 66 79 20 74 68 61 74 20 74 68 65 0a 73 63 68  ify that the.sch
2c90: 65 6d 61 20 63 68 61 6e 67 65 73 20 64 69 64 20  ema changes did 
2ca0: 6e 6f 74 20 64 61 6d 61 67 65 20 74 68 65 20 64  not damage the d
2cb0: 61 74 61 62 61 73 65 2e 0a 0a 3c 6c 69 3e 3c 70  atabase...<li><p
2cc0: 3e 20 43 6f 6d 6d 69 74 20 74 68 65 20 74 72 61  > Commit the tra
2cd0: 6e 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64  nsaction started
2ce0: 20 6f 6e 20 73 74 65 70 20 31 20 61 62 6f 76 65   on step 1 above
2cf0: 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 66 20 73  ..</ol>..<p>If s
2d00: 6f 6d 65 20 66 75 74 75 72 65 20 76 65 72 73 69  ome future versi
2d10: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 61 64 64  on of SQLite add
2d20: 73 20 6e 65 77 20 41 4c 54 45 52 20 54 41 42 4c  s new ALTER TABL
2d30: 45 20 63 61 70 61 62 69 6c 69 74 69 65 73 2c 20  E capabilities, 
2d40: 0a 74 68 6f 73 65 20 63 61 70 61 62 69 6c 69 74  .those capabilit
2d50: 69 65 73 20 77 69 6c 6c 20 76 65 72 79 20 6c 69  ies will very li
2d60: 6b 65 6c 79 20 75 73 65 20 6f 6e 65 20 6f 66 20  kely use one of 
2d70: 74 68 65 20 74 77 6f 20 70 72 6f 63 65 64 75 72  the two procedur
2d80: 65 73 0a 6f 75 74 6c 69 6e 65 64 20 61 62 6f 76  es.outlined abov
2d90: 65 2e 0a 0a 3c 74 63 6c 3e 0a 23 20 20 4f 6e 65  e...<tcl>.#  One
2da0: 20 6f 66 20 74 68 65 20 72 65 61 73 6f 6e 73 20   of the reasons 
2db0: 74 68 61 74 0a 23 20 53 51 4c 69 74 65 20 64 6f  that.# SQLite do
2dc0: 65 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  es not currently
2dd0: 20 73 75 70 70 6f 72 74 20 6d 6f 72 65 20 41 4c   support more AL
2de0: 54 45 52 20 54 41 42 4c 45 20 63 61 70 61 62 69  TER TABLE capabi
2df0: 6c 69 74 69 65 73 20 69 73 20 74 68 61 74 0a 23  lities is that.#
2e00: 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 73   the procedure s
2e10: 68 6f 77 6e 20 61 62 6f 76 65 20 69 73 20 64 69  hown above is di
2e20: 66 66 69 63 75 6c 74 20 74 6f 20 61 75 74 6f 6d  fficult to autom
2e30: 61 74 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74  ate for an arbit
2e40: 72 61 72 79 20 73 63 68 65 6d 61 2e 0a 23 20 50  rary schema..# P
2e50: 61 72 74 69 63 75 6c 61 72 6c 79 20 74 72 6f 75  articularly trou
2e60: 62 6c 65 73 6f 6d 65 20 61 72 65 61 73 20 61 72  blesome areas ar
2e70: 65 20 69 64 65 6e 74 69 66 79 69 6e 67 20 61 6c  e identifying al
2e80: 6c 20 76 69 65 77 73 20 61 73 73 6f 63 69 61 74  l views associat
2e90: 65 64 20 77 69 74 68 0a 23 20 74 61 62 6c 65 20  ed with.# table 
2ea0: 58 20 69 6e 20 73 74 65 70 20 31 20 61 6e 64 20  X in step 1 and 
2eb0: 63 72 65 61 74 69 6e 67 20 6e 65 77 20 76 69 65  creating new vie
2ec0: 77 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 20  ws and triggers 
2ed0: 74 68 61 74 20 61 72 65 20 63 6f 6d 70 61 74 69  that are compati
2ee0: 62 6c 65 0a 23 20 77 69 74 68 20 74 68 65 20 61  ble.# with the a
2ef0: 6c 74 65 72 65 64 20 73 63 68 65 6d 61 20 66 6f  ltered schema fo
2f00: 72 20 74 61 62 6c 65 20 58 20 69 6e 20 73 74 65  r table X in ste
2f10: 70 20 36 2e 20 20 49 74 20 69 73 20 61 20 74 72  p 6.  It is a tr
2f20: 69 63 6b 79 20 62 75 74 20 73 6f 6c 76 61 62 6c  icky but solvabl
2f30: 65 0a 23 20 70 72 6f 62 6c 65 6d 20 74 6f 20 63  e.# problem to c
2f40: 72 65 61 74 65 20 63 6f 64 65 20 74 68 61 74 20  reate code that 
2f50: 77 69 6c 6c 20 70 65 72 66 6f 72 6d 20 74 68 65  will perform the
2f60: 20 73 74 65 70 73 20 61 62 6f 76 65 20 0a 23 20   steps above .# 
2f70: 66 6f 72 20 22 72 65 61 73 6f 6e 61 62 6c 65 22  for "reasonable"
2f80: 20 73 63 68 65 6d 61 73 20 63 6f 6d 6d 6f 6e 6c   schemas commonl
2f90: 79 20 66 6f 75 6e 64 20 69 6e 20 70 72 61 63 74  y found in pract
2fa0: 69 63 65 2e 20 20 0a 23 20 42 75 74 20 74 68 65  ice.  .# But the
2fb0: 72 65 20 65 78 69 73 74 20 6d 61 6c 65 76 6f 6c  re exist malevol
2fc0: 65 6e 74 20 73 63 68 65 6d 61 73 20 66 6f 72 20  ent schemas for 
2fd0: 77 68 69 63 68 0a 23 20 74 68 65 73 65 20 73 74  which.# these st
2fe0: 65 70 73 20 61 72 65 20 6d 61 64 64 65 6e 69 6e  eps are maddenin
2ff0: 67 6c 79 20 64 69 66 66 69 63 75 6c 74 20 74 6f  gly difficult to
3000: 20 64 6f 20 63 6f 72 72 65 63 74 6c 79 2e 20 20   do correctly.  
3010: 52 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61  Rather than crea
3020: 74 65 0a 23 20 41 4c 54 45 52 20 54 41 42 4c 45  te.# ALTER TABLE
3030: 20 66 65 61 74 75 72 65 73 20 74 68 61 74 20 77   features that w
3040: 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 39 39  ork correctly 99
3050: 2e 39 25 20 6f 66 20 74 68 65 20 74 69 6d 65 20  .9% of the time 
3060: 62 75 74 20 70 6f 73 73 69 62 6c 79 0a 23 20 63  but possibly.# c
3070: 6f 72 72 75 70 74 20 74 68 65 20 73 63 68 65 6d  orrupt the schem
3080: 61 20 6f 6e 20 74 68 65 20 6f 74 68 65 72 20 30  a on the other 0
3090: 2e 31 25 2c 20 74 68 65 20 53 51 4c 69 74 65 20  .1%, the SQLite 
30a0: 64 65 76 65 6c 6f 70 65 72 73 20 68 61 76 65 20  developers have 
30b0: 64 65 63 69 64 65 64 0a 23 20 74 6f 20 70 75 73  decided.# to pus
30c0: 68 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 69 6e  h the problem in
30d0: 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  to the applicati
30e0: 6f 6e 20 64 6f 6d 61 69 6e 2c 20 77 68 65 72 65  on domain, where
30f0: 20 69 74 20 69 73 20 6d 75 63 68 20 65 61 73 69   it is much easi
3100: 65 72 0a 23 20 74 6f 20 73 6f 6c 76 65 2e 0a 3c  er.# to solve..<
3110: 2f 74 63 6c 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  /tcl>...<tcl>.##
3120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3160: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
3170: 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61  tion {ANALYZE} a
3180: 6e 61 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a  nalyze ANALYZE..
3190: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
31a0: 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d 73  iagram analyze-s
31b0: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
31c0: 5e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d  ^The ANALYZE com
31d0: 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73 74 61  mand gathers sta
31e0: 74 69 73 74 69 63 73 20 61 62 6f 75 74 20 74 61  tistics about ta
31f0: 62 6c 65 73 20 61 6e 64 0a 69 6e 64 69 63 65 73  bles and.indices
3200: 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 65 20   and stores the 
3210: 63 6f 6c 6c 65 63 74 65 64 20 69 6e 66 6f 72 6d  collected inform
3220: 61 74 69 6f 6e 0a 69 6e 20 5b 69 6e 74 65 72 6e  ation.in [intern
3230: 61 6c 20 74 61 62 6c 65 73 5d 20 6f 66 20 74 68  al tables] of th
3240: 65 20 64 61 74 61 62 61 73 65 20 77 68 65 72 65  e database where
3250: 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
3260: 69 7a 65 72 20 63 61 6e 0a 61 63 63 65 73 73 20  izer can.access 
3270: 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  the information 
3280: 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 68 65  and use it to he
3290: 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72 20 71  lp make better q
32a0: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 63 68  uery planning ch
32b0: 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20 61 72  oices..^If no ar
32c0: 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69 76 65  guments are give
32d0: 6e 2c 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  n, all attached 
32e0: 64 61 74 61 62 61 73 65 73 20 61 72 65 0a 61 6e  databases are.an
32f0: 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61 20 73  alyzed.  ^If a s
3300: 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 67 69  chema name is gi
3310: 76 65 6e 20 61 73 20 74 68 65 20 61 72 67 75 6d  ven as the argum
3320: 65 6e 74 2c 20 74 68 65 6e 20 61 6c 6c 20 74 61  ent, then all ta
3330: 62 6c 65 73 0a 61 6e 64 20 69 6e 64 69 63 65 73  bles.and indices
3340: 20 69 6e 20 74 68 61 74 20 6f 6e 65 20 64 61 74   in that one dat
3350: 61 62 61 73 65 20 61 72 65 20 61 6e 61 6c 79 7a  abase are analyz
3360: 65 64 2e 20 20 0a 5e 49 66 20 74 68 65 20 61 72  ed.  .^If the ar
3370: 67 75 6d 65 6e 74 20 69 73 20 61 20 74 61 62 6c  gument is a tabl
3380: 65 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c  e name, then onl
3390: 79 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64  y that table and
33a0: 20 74 68 65 0a 69 6e 64 69 63 65 73 20 61 73 73   the.indices ass
33b0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61  ociated with tha
33c0: 74 20 74 61 62 6c 65 20 61 72 65 20 61 6e 61 6c  t table are anal
33d0: 79 7a 65 64 2e 20 20 5e 49 66 20 74 68 65 20 61  yzed.  ^If the a
33e0: 72 67 75 6d 65 6e 74 0a 69 73 20 61 6e 20 69 6e  rgument.is an in
33f0: 64 65 78 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f  dex name, then o
3400: 6e 6c 79 20 74 68 61 74 20 6f 6e 65 20 69 6e 64  nly that one ind
3410: 65 78 20 69 73 20 61 6e 61 6c 79 7a 65 64 2e 3c  ex is analyzed.<
3420: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65  /p>..<p> ^The de
3430: 66 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61  fault implementa
3440: 74 69 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20  tion stores all 
3450: 73 74 61 74 69 73 74 69 63 73 20 69 6e 20 61 20  statistics in a 
3460: 73 69 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d  single.table nam
3470: 65 64 20 22 5b 73 71 6c 69 74 65 5f 73 74 61 74  ed "[sqlite_stat
3480: 31 5d 22 2e 20 20 5e 49 66 20 53 51 4c 69 74 65  1]".  ^If SQLite
3490: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
34a0: 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e  h the.[SQLITE_EN
34b0: 41 42 4c 45 5f 53 54 41 54 33 5d 20 6f 70 74 69  ABLE_STAT3] opti
34c0: 6f 6e 20 61 6e 64 20 77 69 74 68 6f 75 74 20 74  on and without t
34d0: 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
34e0: 45 5f 53 54 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c  E_STAT4].option,
34f0: 20 74 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c   then additional
3500: 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20   histogram data 
3510: 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64  is.collected and
3520: 20 73 74 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69   stored in [sqli
3530: 74 65 5f 73 74 61 74 33 5d 2e 0a 20 5e 49 66 20  te_stat3].. ^If 
3540: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
3550: 65 64 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c  ed with the.[SQL
3560: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
3570: 5d 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61  ] option, then a
3580: 64 64 69 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67  dditional histog
3590: 72 61 6d 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c  ram data is.coll
35a0: 65 63 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64  ected and stored
35b0: 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73 74 61 74   in [sqlite_stat
35c0: 34 5d 2e 0a 4f 6c 64 65 72 20 76 65 72 73 69 6f  4]..Older versio
35d0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 6f 75  ns of SQLite wou
35e0: 6c 64 20 6d 61 6b 65 20 75 73 65 20 6f 66 20 74  ld make use of t
35f0: 68 65 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 32  he [sqlite_stat2
3600: 5d 20 74 61 62 6c 65 0a 77 68 65 6e 20 63 6f 6d  ] table.when com
3610: 70 69 6c 65 64 20 77 69 74 68 20 5b 53 51 4c 49  piled with [SQLI
3620: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 5d  TE_ENABLE_STAT2]
3630: 20 62 75 74 20 61 6c 6c 20 72 65 63 65 6e 74 20   but all recent 
3640: 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69  versions of.SQLi
3650: 74 65 20 69 67 6e 6f 72 65 20 74 68 65 20 73 71  te ignore the sq
3660: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
3670: 2e 0a 46 75 74 75 72 65 20 65 6e 68 61 6e 63 65  ..Future enhance
3680: 6d 65 6e 74 73 20 6d 61 79 20 63 72 65 61 74 65  ments may create
3690: 0a 61 64 64 69 74 69 6f 6e 61 6c 20 5b 69 6e 74  .additional [int
36a0: 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d 20 77 69  ernal tables] wi
36b0: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
36c0: 20 70 61 74 74 65 72 6e 20 65 78 63 65 70 74 20   pattern except 
36d0: 77 69 74 68 0a 66 69 6e 61 6c 20 64 69 67 69 74  with.final digit
36e0: 20 6c 61 72 67 65 72 20 74 68 61 6e 20 22 34 22   larger than "4"
36f0: 2e 0a 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 74  ..All of these t
3700: 61 62 6c 65 73 20 61 72 65 20 63 6f 6c 6c 65 63  ables are collec
3710: 74 69 76 65 6c 79 20 72 65 66 65 72 72 65 64 20  tively referred 
3720: 74 6f 20 61 73 20 22 73 74 61 74 69 73 74 69 63  to as "statistic
3730: 73 20 74 61 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a  s tables"..</p>.
3740: 0a 3c 70 3e 20 5e 54 68 65 20 63 6f 6e 74 65 6e  .<p> ^The conten
3750: 74 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74  t of the statist
3760: 69 63 73 20 74 61 62 6c 65 73 20 63 61 6e 20 62  ics tables can b
3770: 65 20 71 75 65 72 69 65 64 20 75 73 69 6e 67 20  e queried using 
3780: 5b 53 45 4c 45 43 54 5d 0a 61 6e 64 20 63 61 6e  [SELECT].and can
3790: 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
37a0: 67 20 74 68 65 20 5b 44 45 4c 45 54 45 5d 2c 20  g the [DELETE], 
37b0: 5b 49 4e 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55  [INSERT], and [U
37c0: 50 44 41 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e  PDATE] commands.
37d0: 0a 5e 28 54 68 65 20 5b 44 52 4f 50 20 54 41 42  .^(The [DROP TAB
37e0: 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b  LE] command work
37f0: 73 20 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20  s on statistics 
3800: 74 61 62 6c 65 73 0a 61 73 20 6f 66 20 53 51 4c  tables.as of SQL
3810: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
3820: 39 2e 29 5e 0a 5e 54 68 65 20 5b 41 4c 54 45 52  9.)^.^The [ALTER
3830: 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20   TABLE] command 
3840: 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e  does not work on
3850: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
3860: 65 73 2e 0a 41 70 70 72 6f 70 72 69 61 74 65 20  es..Appropriate 
3870: 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20 75  care should be u
3880: 73 65 64 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  sed when changin
3890: 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
38a0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 0a   the statistics.
38b0: 74 61 62 6c 65 73 20 61 73 20 69 6e 76 61 6c 69  tables as invali
38c0: 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61  d content can ca
38d0: 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 73 65  use SQLite to se
38e0: 6c 65 63 74 20 69 6e 65 66 66 69 63 69 65 6e 74  lect inefficient
38f0: 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e 20 20 47  .query plans.  G
3900: 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e  enerally speakin
3910: 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f  g, one should no
3920: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 6e  t modify the con
3930: 74 65 6e 74 20 6f 66 0a 74 68 65 20 73 74 61 74  tent of.the stat
3940: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79  istics tables by
3950: 20 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f   any mechanism o
3960: 74 68 65 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69  ther than invoki
3970: 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63  ng the.ANALYZE c
3980: 6f 6d 6d 61 6e 64 2e 20 20 0a 53 65 65 20 22 5b  ommand.  .See "[
3990: 4d 61 6e 75 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f  Manual Control O
39a0: 66 20 51 75 65 72 79 20 50 6c 61 6e 73 20 55 73  f Query Plans Us
39b0: 69 6e 67 20 53 51 4c 49 54 45 5f 53 54 41 54 20  ing SQLITE_STAT 
39c0: 54 61 62 6c 65 73 5d 22 20 66 6f 72 0a 66 75 72  Tables]" for.fur
39d0: 74 68 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ther information
39e0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74  .</p>..<p> ^Stat
39f0: 69 73 74 69 63 73 20 67 61 74 68 65 72 65 64 20  istics gathered 
3a00: 62 79 20 41 4e 41 4c 59 5a 45 20 61 72 65 20 6e  by ANALYZE are n
3a10: 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ot automatically
3a20: 20 75 70 64 61 74 65 64 20 61 73 0a 74 68 65 20   updated as.the 
3a30: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64  content of the d
3a40: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 2e  atabase changes.
3a50: 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74    If the content
3a60: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
3a70: 0a 63 68 61 6e 67 65 73 20 73 69 67 6e 69 66 69  .changes signifi
3a80: 63 61 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74 68  cantly, or if th
3a90: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
3aa0: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 6e 20  a changes, then 
3ab0: 6f 6e 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69  one should.consi
3ac0: 64 65 72 20 72 65 72 75 6e 6e 69 6e 67 20 74 68  der rerunning th
3ad0: 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e  e ANALYZE comman
3ae0: 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70  d in order to up
3af0: 64 61 74 65 20 74 68 65 20 73 74 61 74 69 73 74  date the statist
3b00: 69 63 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68  ics.</p>..<p> Th
3b10: 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
3b20: 6c 6f 61 64 73 20 74 68 65 20 63 6f 6e 74 65 6e  loads the conten
3b30: 74 20 6f 66 20 74 68 65 20 73 74 61 74 69 73 74  t of the statist
3b40: 69 63 73 20 74 61 62 6c 65 73 0a 69 6e 74 6f 20  ics tables.into 
3b50: 6d 65 6d 6f 72 79 20 77 68 65 6e 20 74 68 65 20  memory when the 
3b60: 73 63 68 65 6d 61 20 69 73 20 72 65 61 64 2e 20  schema is read. 
3b70: 20 5e 48 65 6e 63 65 2c 20 77 68 65 6e 20 61 6e   ^Hence, when an
3b80: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 68 61   application.cha
3b90: 6e 67 65 73 20 74 68 65 20 73 74 61 74 69 73 74  nges the statist
3ba0: 69 63 73 20 74 61 62 6c 65 73 20 64 69 72 65 63  ics tables direc
3bb0: 74 6c 79 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c  tly, SQLite will
3bc0: 20 6e 6f 74 20 69 6d 6d 65 64 69 61 74 65 6c 79   not immediately
3bd0: 0a 6e 6f 74 69 63 65 20 74 68 65 20 63 68 61 6e  .notice the chan
3be0: 67 65 73 2e 20 5e 41 6e 20 61 70 70 6c 69 63 61  ges. ^An applica
3bf0: 74 69 6f 6e 0a 63 61 6e 20 66 6f 72 63 65 20 74  tion.can force t
3c00: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
3c10: 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
3c20: 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73  tatistics tables
3c30: 20 62 79 20 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41   by running.<b>A
3c40: 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61  NALYZE sqlite_ma
3c50: 73 74 65 72 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a  ster</b>. </p>..
3c60: 3c 70 3e 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  <p> ..<tcl>.####
3c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cb0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
3cc0: 6f 6e 20 7b 41 54 54 41 43 48 20 44 41 54 41 42  on {ATTACH DATAB
3cd0: 41 53 45 7d 20 61 74 74 61 63 68 20 7b 61 74 74  ASE} attach {att
3ce0: 61 63 68 65 64 20 2a 41 54 54 41 43 48 7d 0a 0a  ached *ATTACH}..
3cf0: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
3d00: 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74  iagram attach-st
3d10: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e  mt.</tcl>..<p> ^
3d20: 54 68 65 20 41 54 54 41 43 48 20 44 41 54 41 42  The ATTACH DATAB
3d30: 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61 64  ASE statement ad
3d40: 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62  ds another datab
3d50: 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68 65  ase .file to the
3d60: 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61 62 61   current [databa
3d70: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e 20  se connection]. 
3d80: 0a 44 61 74 61 62 61 73 65 20 66 69 6c 65 73 20  .Database files 
3d90: 74 68 61 74 20 77 65 72 65 20 70 72 65 76 69 6f  that were previo
3da0: 75 73 6c 79 20 61 74 74 61 63 68 65 64 20 63 61  usly attached ca
3db0: 6e 20 62 65 20 72 65 6d 6f 76 65 64 20 75 73 69  n be removed usi
3dc0: 6e 67 0a 74 68 65 20 5b 44 45 54 41 43 48 20 44  ng.the [DETACH D
3dd0: 41 54 41 42 41 53 45 5d 20 63 6f 6d 6d 61 6e 64  ATABASE] command
3de0: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 6e  ...<p>^The filen
3df0: 61 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 61  ame for the data
3e00: 62 61 73 65 20 74 6f 20 62 65 20 61 74 74 61 63  base to be attac
3e10: 68 65 64 20 69 73 20 74 68 65 20 76 61 6c 75 65  hed is the value
3e20: 20 6f 66 0a 74 68 65 20 65 78 70 72 65 73 73 69   of.the expressi
3e30: 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73 20 62  on that occurs b
3e40: 65 66 6f 72 65 20 74 68 65 20 41 53 20 6b 65 79  efore the AS key
3e50: 77 6f 72 64 2e 0a 5e 54 68 65 20 66 69 6c 65 6e  word..^The filen
3e60: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
3e70: 61 73 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  ase follows the 
3e80: 73 61 6d 65 20 73 65 6d 61 6e 74 69 63 73 20 61  same semantics a
3e90: 73 20 74 68 65 0a 66 69 6c 65 6e 61 6d 65 20 61  s the.filename a
3ea0: 72 67 75 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69  rgument to [sqli
3eb0: 74 65 33 5f 6f 70 65 6e 28 29 5d 20 61 6e 64 20  te3_open()] and 
3ec0: 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32  [sqlite3_open_v2
3ed0: 28 29 5d 3b 20 74 68 65 0a 73 70 65 63 69 61 6c  ()]; the.special
3ee0: 20 6e 61 6d 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a   name "[:memory:
3ef0: 5d 22 20 72 65 73 75 6c 74 73 20 69 6e 20 61 6e  ]" results in an
3f00: 20 5b 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61   [in-memory data
3f10: 62 61 73 65 5d 20 61 6e 64 20 61 6e 0a 65 6d 70  base] and an.emp
3f20: 74 79 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74  ty string result
3f30: 73 20 69 6e 20 61 20 6e 65 77 20 74 65 6d 70 6f  s in a new tempo
3f40: 72 61 72 79 20 64 61 74 61 62 61 73 65 2e 0a 5e  rary database..^
3f50: 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 61 72 67  The filename arg
3f60: 75 6d 65 6e 74 20 63 61 6e 20 62 65 20 61 20 5b  ument can be a [
3f70: 55 52 49 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66  URI filename] if
3f80: 20 55 52 49 20 66 69 6c 65 6e 61 6d 65 20 70 72   URI filename pr
3f90: 6f 63 65 73 73 69 6e 67 0a 69 73 20 65 6e 61 62  ocessing.is enab
3fa0: 6c 65 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  le on the databa
3fb0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
3fc0: 54 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61  The default beha
3fd0: 76 69 6f 72 20 69 73 20 66 6f 72 0a 55 52 49 20  vior is for.URI 
3fe0: 66 69 6c 65 6e 61 6d 65 73 20 74 6f 20 62 65 20  filenames to be 
3ff0: 64 69 73 61 62 6c 65 64 2c 20 68 6f 77 65 76 65  disabled, howeve
4000: 72 20 74 68 61 74 20 6d 69 67 68 74 20 63 68 61  r that might cha
4010: 6e 67 65 20 69 6e 20 61 20 66 75 74 75 72 65 20  nge in a future 
4020: 72 65 6c 65 61 73 65 0a 6f 66 20 53 51 4c 69 74  release.of SQLit
4030: 65 2c 20 73 6f 20 61 70 70 6c 69 63 61 74 69 6f  e, so applicatio
4040: 6e 20 64 65 76 65 6c 6f 70 65 72 73 20 61 72 65  n developers are
4050: 20 61 64 76 69 73 65 64 20 74 6f 20 70 6c 61 6e   advised to plan
4060: 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c   accordingly...<
4070: 70 3e 54 68 65 20 6e 61 6d 65 20 74 68 61 74 20  p>The name that 
4080: 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65  occurs after the
4090: 20 41 53 20 6b 65 79 77 6f 72 64 20 69 73 20 74   AS keyword is t
40a0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
40b0: 61 74 61 62 61 73 65 0a 75 73 65 64 20 69 6e 74  atabase.used int
40c0: 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74  ernally by SQLit
40d0: 65 2e 0a 5e 54 68 65 20 73 63 68 65 6d 61 2d 6e  e..^The schema-n
40e0: 61 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20  ames 'main' and 
40f0: 0a 27 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f  .'temp' refer to
4100: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
4110: 73 65 20 61 6e 64 20 74 68 65 20 64 61 74 61 62  se and the datab
4120: 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65  ase used for .te
4130: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
4140: 20 5e 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74   ^The main and t
4150: 65 6d 70 20 64 61 74 61 62 61 73 65 73 20 63 61  emp databases ca
4160: 6e 6e 6f 74 20 62 65 20 61 74 74 61 63 68 65 64  nnot be attached
4170: 20 6f 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70   or.detached.</p
4180: 3e 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20  >..<p> ^(Tables 
4190: 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
41a0: 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72  atabase can be r
41b0: 65 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67  eferred to using
41c0: 20 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e   the syntax .<i>
41d0: 73 63 68 65 6d 61 2d 6e 61 6d 65 2e 74 61 62 6c  schema-name.tabl
41e0: 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e  e-name</i>.)^  ^
41f0: 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  If the name of t
4200: 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71  he table is uniq
4210: 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74  ue.across all at
4220: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
4230: 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e   and the main an
4240: 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 73  d temp databases
4250: 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 73 63  , then the.<i>sc
4260: 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72  hema-name</i> pr
4270: 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65 71 75  efix is not requ
4280: 69 72 65 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f  ired.  ^If two o
4290: 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 69 6e  r more tables in
42a0: 0a 64 69 66 66 65 72 65 6e 74 20 64 61 74 61 62  .different datab
42b0: 61 73 65 73 20 68 61 76 65 20 74 68 65 20 73 61  ases have the sa
42c0: 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20  me name and the 
42d0: 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  .<i>schema-name<
42e0: 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f  /i> prefix is no
42f0: 74 20 75 73 65 64 20 6f 6e 20 61 20 74 61 62 6c  t used on a tabl
4300: 65 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65  e reference, the
4310: 6e 20 74 68 65 0a 74 61 62 6c 65 20 63 68 6f 73  n the.table chos
4320: 65 6e 20 69 73 20 74 68 65 20 6f 6e 65 20 69 6e  en is the one in
4330: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68   the database th
4340: 61 74 20 77 61 73 20 6c 65 61 73 74 20 72 65 63  at was least rec
4350: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 2e 3c  ently attached.<
4360: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61  /p>..<p>.^Transa
4370: 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67  ctions involving
4380: 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68   multiple attach
4390: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
43a0: 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e   atomic,.assumin
43b0: 67 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20  g that the main 
43c0: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
43d0: 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61 6e 64  "[:memory:]" and
43e0: 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d   the .[journal_m
43f0: 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57 41 4c  ode] is not [WAL
4400: 5d 2e 20 20 5e 28 49 66 20 74 68 65 20 6d 61 69  ].  ^(If the mai
4410: 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20 22 3a  n.database is ":
4420: 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66 20 74  memory:" or if t
4430: 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  he journal_mode 
4440: 69 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a 74 72  is WAL, then .tr
4450: 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74 69  ansactions conti
4460: 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69 63  nue to be atomic
4470: 20 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e 64   within each ind
4480: 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73 65  ividual.database
4490: 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74 68   file. But if th
44a0: 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20  e host computer 
44b0: 63 72 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d  crashes in the m
44c0: 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f 4d 4d  iddle.of a [COMM
44d0: 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20 6f 72  IT] where two or
44e0: 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65 20 66   more database f
44f0: 69 6c 65 73 20 61 72 65 20 75 70 64 61 74 65 64  iles are updated
4500: 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73 65 20  ,.some of those 
4510: 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65 74 20  files might get 
4520: 74 68 65 20 63 68 61 6e 67 65 73 20 77 68 65 72  the changes wher
4530: 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74 20 6e  e others.might n
4540: 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20  ot.)^.</p>..<p> 
4550: 5e 54 68 65 72 65 20 69 73 20 61 20 6c 69 6d 69  ^There is a limi
4560: 74 2c 20 73 65 74 20 75 73 69 6e 67 20 5b 73 71  t, set using [sq
4570: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 61  lite3_limit()] a
4580: 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  nd .[SQLITE_LIMI
4590: 54 5f 41 54 54 41 43 48 45 44 5d 2c 20 74 6f 20  T_ATTACHED], to 
45a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61  the number of da
45b0: 74 61 62 61 73 65 73 20 74 68 61 74 20 63 61 6e  tabases that can
45c0: 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65 6f 75 73   be.simultaneous
45d0: 6c 79 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  ly attached to a
45e0: 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
45f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e   connection.</p>
4600: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
4610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4650: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
4660: 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49  {BEGIN TRANSACTI
4670: 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ON} transaction 
4680: 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20 52  {*BEGIN COMMIT R
4690: 4f 4c 4c 42 41 43 4b 7d 0a 0a 52 65 63 75 72 73  OLLBACK}..Recurs
46a0: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
46b0: 20 62 65 67 69 6e 2d 73 74 6d 74 0a 52 65 63 75   begin-stmt.Recu
46c0: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
46d0: 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 52  am commit-stmt.R
46e0: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
46f0: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
4700: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  tmt.</tcl>..<p>.
4710: 5e 4e 6f 20 63 68 61 6e 67 65 73 20 63 61 6e 20  ^No changes can 
4720: 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 64  be made to the d
4730: 61 74 61 62 61 73 65 20 65 78 63 65 70 74 20 77  atabase except w
4740: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
4750: 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f 6d 6d 61 6e  ion..^Any comman
4760: 64 20 74 68 61 74 20 63 68 61 6e 67 65 73 20 74  d that changes t
4770: 68 65 20 64 61 74 61 62 61 73 65 20 28 62 61 73  he database (bas
4780: 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53 51 4c 20  ically, any SQL 
4790: 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72 20 74 68  command.other th
47a0: 61 6e 20 5b 53 45 4c 45 43 54 5d 29 20 77 69 6c  an [SELECT]) wil
47b0: 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
47c0: 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
47d0: 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f  ion if.one is no
47e0: 74 20 61 6c 72 65 61 64 79 20 69 6e 20 65 66 66  t already in eff
47f0: 65 63 74 2e 20 20 5e 41 75 74 6f 6d 61 74 69 63  ect.  ^Automatic
4800: 61 6c 6c 79 20 73 74 61 72 74 65 64 20 74 72 61  ally started tra
4810: 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f  nsactions.are co
4820: 6d 6d 69 74 74 65 64 20 77 68 65 6e 20 74 68 65  mmitted when the
4830: 20 6c 61 73 74 20 71 75 65 72 79 20 66 69 6e 69   last query fini
4840: 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  shes..</p>..<p>.
4850: 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61  ^Transactions ca
4860: 6e 20 62 65 20 73 74 61 72 74 65 64 20 6d 61 6e  n be started man
4870: 75 61 6c 6c 79 20 75 73 69 6e 67 20 74 68 65 20  ually using the 
4880: 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20  BEGIN.command.  
4890: 5e 28 53 75 63 68 20 74 72 61 6e 73 61 63 74 69  ^(Such transacti
48a0: 6f 6e 73 20 75 73 75 61 6c 6c 79 20 70 65 72 73  ons usually pers
48b0: 69 73 74 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ist until the ne
48c0: 78 74 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c  xt.COMMIT or ROL
48d0: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20  LBACK command.  
48e0: 42 75 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  But a transactio
48f0: 6e 20 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c  n will also .ROL
4900: 4c 42 41 43 4b 20 69 66 20 74 68 65 20 64 61 74  LBACK if the dat
4910: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20  abase is closed 
4920: 6f 72 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  or if an error o
4930: 63 63 75 72 73 0a 61 6e 64 20 74 68 65 20 52 4f  ccurs.and the RO
4940: 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20  LLBACK conflict 
4950: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
4960: 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65  ithm is specifie
4970: 64 2e 29 5e 0a 53 65 65 20 74 68 65 20 64 6f 63  d.)^.See the doc
4980: 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68  umentation on th
4990: 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a  e [ON CONFLICT].
49a0: 63 6c 61 75 73 65 20 66 6f 72 20 61 64 64 69 74  clause for addit
49b0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
49c0: 6e 20 61 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c  n about the ROLL
49d0: 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65  BACK.conflict re
49e0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
49f0: 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 45  hm..</p>..<p>.^E
4a00: 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 20 69  ND TRANSACTION i
4a10: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 43  s an alias for C
4a20: 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  OMMIT..</p>..<p>
4a30: 20 5e 28 54 72 61 6e 73 61 63 74 69 6f 6e 73 20   ^(Transactions 
4a40: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 42 45  created using BE
4a50: 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 20 64 6f 20  GIN...COMMIT do 
4a60: 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a 5e 46 6f 72  not nest.)^.^For
4a70: 20 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63 74   nested transact
4a80: 69 6f 6e 73 2c 20 75 73 65 20 74 68 65 20 5b 53  ions, use the [S
4a90: 41 56 45 50 4f 49 4e 54 5d 20 61 6e 64 20 5b 52  AVEPOINT] and [R
4aa0: 45 4c 45 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 73  ELEASE] commands
4ab0: 2e 0a 54 68 65 20 22 54 4f 20 53 41 56 45 50 4f  ..The "TO SAVEPO
4ac0: 49 4e 54 20 3c 79 79 74 65 72 6d 3e 6e 61 6d 65  INT <yyterm>name
4ad0: 3c 2f 79 79 74 65 72 6d 3e 22 20 63 6c 61 75 73  </yyterm>" claus
4ae0: 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  e of the ROLLBAC
4af0: 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a  K command shown.
4b00: 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64 69  in the syntax di
4b10: 61 67 72 61 6d 20 61 62 6f 76 65 20 69 73 20 6f  agram above is o
4b20: 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c 65 20 74  nly applicable t
4b30: 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72  o [SAVEPOINT].tr
4b40: 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e  ansactions.  ^An
4b50: 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f   attempt to invo
4b60: 6b 65 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d  ke the BEGIN com
4b70: 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61 20 74 72  mand within.a tr
4b80: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66  ansaction will f
4b90: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
4ba0: 72 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  r, regardless of
4bb0: 20 77 68 65 74 68 65 72 0a 74 68 65 20 74 72 61   whether.the tra
4bc0: 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 73 74 61  nsaction was sta
4bd0: 72 74 65 64 20 62 79 20 5b 53 41 56 45 50 4f 49  rted by [SAVEPOI
4be0: 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f 72 20 42  NT] or a prior B
4bf0: 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49  EGIN..^The COMMI
4c00: 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68  T command and th
4c10: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
4c20: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 54  nd without the T
4c30: 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68  O clause.work th
4c40: 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50  e same on [SAVEP
4c50: 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63 74 69 6f  OINT] transactio
4c60: 6e 73 20 61 73 20 74 68 65 79 20 64 6f 20 77 69  ns as they do wi
4c70: 74 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a  th transactions.
4c80: 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e  started by BEGIN
4c90: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
4ca0: 72 61 67 6d 65 6e 74 20 69 6d 6d 65 64 69 61 74  ragment immediat
4cb0: 65 20 7b 42 45 47 49 4e 20 49 4d 4d 45 44 49 41  e {BEGIN IMMEDIA
4cc0: 54 45 7d 20 7b 42 45 47 49 4e 20 45 58 43 4c 55  TE} {BEGIN EXCLU
4cd0: 53 49 56 45 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 0a  SIVE}</tcl>.<p>.
4ce0: 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61  ^Transactions ca
4cf0: 6e 20 62 65 20 64 65 66 65 72 72 65 64 2c 20 69  n be deferred, i
4d00: 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20 65 78 63  mmediate, or exc
4d10: 6c 75 73 69 76 65 2e 20 20 0a 5e 54 68 65 20 64  lusive.  .^The d
4d20: 65 66 61 75 6c 74 20 74 72 61 6e 73 61 63 74 69  efault transacti
4d30: 6f 6e 20 62 65 68 61 76 69 6f 72 20 69 73 20 64  on behavior is d
4d40: 65 66 65 72 72 65 64 2e 0a 5e 44 65 66 65 72 72  eferred..^Deferr
4d50: 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f  ed means that no
4d60: 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71 75 69   locks are acqui
4d70: 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74 61 62  red.on the datab
4d80: 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20 64 61  ase until the da
4d90: 74 61 62 61 73 65 20 69 73 20 66 69 72 73 74 20  tabase is first 
4da0: 61 63 63 65 73 73 65 64 2e 20 20 5e 54 68 75 73  accessed.  ^Thus
4db0: 20 77 69 74 68 20 61 0a 64 65 66 65 72 72 65 64   with a.deferred
4dc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
4dd0: 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65 6e  e BEGIN statemen
4de0: 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20 6e 6f  t itself does no
4df0: 74 68 69 6e 67 20 74 6f 20 74 68 65 0a 66 69 6c  thing to the.fil
4e00: 65 73 79 73 74 65 6d 2e 20 20 5e 4c 6f 63 6b 73  esystem.  ^Locks
4e10: 0a 61 72 65 20 6e 6f 74 20 61 63 71 75 69 72 65  .are not acquire
4e20: 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73  d until the firs
4e30: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
4e40: 6f 70 65 72 61 74 69 6f 6e 2e 20 20 5e 54 68 65  operation.  ^The
4e50: 20 66 69 72 73 74 20 72 65 61 64 0a 6f 70 65 72   first read.oper
4e60: 61 74 69 6f 6e 20 61 67 61 69 6e 73 74 20 61 20  ation against a 
4e70: 64 61 74 61 62 61 73 65 20 63 72 65 61 74 65 73  database creates
4e80: 20 61 20 5b 53 48 41 52 45 44 5d 20 6c 6f 63 6b   a [SHARED] lock
4e90: 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 0a 77   and the first.w
4ea0: 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 63  rite operation c
4eb0: 72 65 61 74 65 73 20 61 20 5b 52 45 53 45 52 56  reates a [RESERV
4ec0: 45 44 5d 20 6c 6f 63 6b 2e 20 20 20 5e 42 65 63  ED] lock.   ^Bec
4ed0: 61 75 73 65 20 74 68 65 20 61 63 71 75 69 73 69  ause the acquisi
4ee0: 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73 20 69 73  tion of.locks is
4ef0: 20 64 65 66 65 72 72 65 64 20 75 6e 74 69 6c 20   deferred until 
4f00: 74 68 65 79 20 61 72 65 20 6e 65 65 64 65 64 2c  they are needed,
4f10: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
4f20: 74 68 61 74 20 61 6e 6f 74 68 65 72 0a 74 68 72  that another.thr
4f30: 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 63  ead or process c
4f40: 6f 75 6c 64 20 63 72 65 61 74 65 20 61 20 73 65  ould create a se
4f50: 70 61 72 61 74 65 20 74 72 61 6e 73 61 63 74 69  parate transacti
4f60: 6f 6e 20 61 6e 64 20 77 72 69 74 65 20 74 6f 0a  on and write to.
4f70: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 66 74  the database aft
4f80: 65 72 20 74 68 65 20 42 45 47 49 4e 20 6f 6e 20  er the BEGIN on 
4f90: 74 68 65 20 63 75 72 72 65 6e 74 20 74 68 72 65  the current thre
4fa0: 61 64 20 68 61 73 20 65 78 65 63 75 74 65 64 2e  ad has executed.
4fb0: 0a 5e 49 66 20 74 68 65 20 74 72 61 6e 73 61 63  .^If the transac
4fc0: 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64 69 61 74  tion is immediat
4fd0: 65 2c 20 74 68 65 6e 20 5b 52 45 53 45 52 56 45  e, then [RESERVE
4fe0: 44 5d 20 6c 6f 63 6b 73 0a 61 72 65 20 61 63 71  D] locks.are acq
4ff0: 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74  uired on all dat
5000: 61 62 61 73 65 73 20 61 73 20 73 6f 6f 6e 20 61  abases as soon a
5010: 73 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d  s the BEGIN comm
5020: 61 6e 64 20 69 73 0a 65 78 65 63 75 74 65 64 2c  and is.executed,
5030: 20 77 69 74 68 6f 75 74 20 77 61 69 74 69 6e 67   without waiting
5040: 20 66 6f 72 20 74 68 65 0a 64 61 74 61 62 61 73   for the.databas
5050: 65 20 74 6f 20 62 65 20 75 73 65 64 2e 20 20 5e  e to be used.  ^
5060: 41 66 74 65 72 20 61 20 42 45 47 49 4e 20 49 4d  After a BEGIN IM
5070: 4d 45 44 49 41 54 45 2c 20 0a 6e 6f 20 6f 74 68  MEDIATE, .no oth
5080: 65 72 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  er [database con
5090: 6e 65 63 74 69 6f 6e 5d 20 77 69 6c 6c 20 62 65  nection] will be
50a0: 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74   able to write t
50b0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6f  o the database o
50c0: 72 0a 64 6f 20 61 20 42 45 47 49 4e 20 49 4d 4d  r.do a BEGIN IMM
50d0: 45 44 49 41 54 45 20 6f 72 20 42 45 47 49 4e 20  EDIATE or BEGIN 
50e0: 45 58 43 4c 55 53 49 56 45 2e 20 20 5e 4f 74 68  EXCLUSIVE.  ^Oth
50f0: 65 72 20 70 72 6f 63 65 73 73 65 73 20 63 61 6e  er processes can
5100: 20 63 6f 6e 74 69 6e 75 65 0a 74 6f 20 72 65 61   continue.to rea
5110: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
5120: 61 73 65 2c 20 68 6f 77 65 76 65 72 2e 20 20 5e  ase, however.  ^
5130: 41 6e 20 65 78 63 6c 75 73 69 76 65 20 74 72 61  An exclusive tra
5140: 6e 73 61 63 74 69 6f 6e 20 63 61 75 73 65 73 0a  nsaction causes.
5150: 5b 45 58 43 4c 55 53 49 56 45 5d 20 6c 6f 63 6b  [EXCLUSIVE] lock
5160: 73 20 74 6f 20 62 65 20 61 63 71 75 69 72 65 64  s to be acquired
5170: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
5180: 73 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45 47  s.  ^After a BEG
5190: 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c 20 6e 6f  IN.EXCLUSIVE, no
51a0: 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65   other [database
51b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 65 78 63   connection] exc
51c0: 65 70 74 20 66 6f 72 20 5b 72 65 61 64 5f 75 6e  ept for [read_un
51d0: 63 6f 6d 6d 69 74 74 65 64 5d 0a 63 6f 6e 6e 65  committed].conne
51e0: 63 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 61  ctions will be a
51f0: 62 6c 65 20 74 6f 20 72 65 61 64 20 74 68 65 20  ble to read the 
5200: 64 61 74 61 62 61 73 65 20 61 6e 64 20 6e 6f 20  database and no 
5210: 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  other connection
5220: 20 77 69 74 68 6f 75 74 0a 65 78 63 65 70 74 69   without.excepti
5230: 6f 6e 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20  on will be able 
5240: 74 6f 20 77 72 69 74 65 20 74 68 65 20 64 61 74  to write the dat
5250: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
5260: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 63  transaction is.c
5270: 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c  omplete..</p>..<
5280: 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c 69 63 69 74  p>.^(An implicit
5290: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 28 61 20   transaction (a 
52a0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
52b0: 20 69 73 20 73 74 61 72 74 65 64 20 61 75 74 6f   is started auto
52c0: 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e 6f 74 20 61  matically,.not a
52d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
52e0: 72 74 65 64 20 62 79 20 42 45 47 49 4e 29 20 69  rted by BEGIN) i
52f0: 73 20 63 6f 6d 6d 69 74 74 65 64 20 61 75 74 6f  s committed auto
5300: 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 0a 74  matically when.t
5310: 68 65 20 6c 61 73 74 20 61 63 74 69 76 65 20 73  he last active s
5320: 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65  tatement finishe
5330: 73 2e 20 20 41 20 73 74 61 74 65 6d 65 6e 74 20  s.  A statement 
5340: 66 69 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74  finishes when it
5350: 73 0a 70 72 65 70 61 72 65 64 20 73 74 61 74 65  s.prepared state
5360: 6d 65 6e 74 20 69 73 20 5b 73 71 6c 69 74 65 33  ment is [sqlite3
5370: 5f 72 65 73 65 74 28 29 20 7c 20 72 65 73 65 74  _reset() | reset
5380: 5d 20 6f 72 0a 5b 73 71 6c 69 74 65 33 5f 66 69  ] or.[sqlite3_fi
5390: 6e 61 6c 69 7a 65 28 29 20 7c 20 66 69 6e 61 6c  nalize() | final
53a0: 69 7a 65 64 5d 2e 20 20 41 6e 20 6f 70 65 6e 20  ized].  An open 
53b0: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 20 75  [sqlite3_blob] u
53c0: 73 65 64 20 66 6f 72 0a 69 6e 63 72 65 6d 65 6e  sed for.incremen
53d0: 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 20 63 6f 75  tal BLOB I/O cou
53e0: 6e 74 73 20 61 73 20 61 6e 20 75 6e 66 69 6e 69  nts as an unfini
53f0: 73 68 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20  shed statement. 
5400: 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 62 6c   The [sqlite3_bl
5410: 6f 62 5d 0a 66 69 6e 69 73 68 65 73 20 77 68 65  ob].finishes whe
5420: 6e 20 69 74 20 69 73 20 5b 73 71 6c 69 74 65 33  n it is [sqlite3
5430: 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 29 20 7c 20  _blob_close() | 
5440: 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c 2f 70 3e 0a  closed].)^.</p>.
5450: 0a 3c 70 3e 0a 5e 54 68 65 20 65 78 70 6c 69 63  .<p>.^The explic
5460: 69 74 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  it COMMIT comman
5470: 64 20 72 75 6e 73 20 69 6d 6d 65 64 69 61 74 65  d runs immediate
5480: 6c 79 2c 20 65 76 65 6e 20 69 66 20 74 68 65 72  ly, even if ther
5490: 65 20 61 72 65 0a 70 65 6e 64 69 6e 67 20 5b 53  e are.pending [S
54a0: 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
54b0: 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  s.  ^However, if
54c0: 20 74 68 65 72 65 20 61 72 65 20 70 65 6e 64 69   there are pendi
54d0: 6e 67 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69  ng.write operati
54e0: 6f 6e 73 2c 20 74 68 65 20 43 4f 4d 4d 49 54 20  ons, the COMMIT 
54f0: 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c 20 66 61 69  command.will fai
5500: 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20  l with an error 
5510: 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f 42 55 53  code [SQLITE_BUS
5520: 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 41  Y]..</p>..<p>.^A
5530: 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 65 78 65  n attempt to exe
5540: 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d 69 67 68  cute COMMIT migh
5550: 74 20 61 6c 73 6f 20 72 65 73 75 6c 74 20 69 6e  t also result in
5560: 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59   an [SQLITE_BUSY
5570: 5d 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 69 66  ] return code.if
5580: 20 61 6e 20 61 6e 6f 74 68 65 72 20 74 68 72 65   an another thre
5590: 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 68 61  ad or process ha
55a0: 73 20 61 20 5b 73 68 61 72 65 64 20 6c 6f 63 6b  s a [shared lock
55b0: 5d 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  ] on the databas
55c0: 65 0a 74 68 61 74 20 70 72 65 76 65 6e 74 65 64  e.that prevented
55d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 72   the database fr
55e0: 6f 6d 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  om being updated
55f0: 2e 20 20 5e 57 68 65 6e 20 43 4f 4d 4d 49 54 20  .  ^When COMMIT 
5600: 66 61 69 6c 73 20 69 6e 20 74 68 69 73 0a 77 61  fails in this.wa
5610: 79 2c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  y, the transacti
5620: 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76  on remains activ
5630: 65 20 61 6e 64 20 74 68 65 20 43 4f 4d 4d 49 54  e and the COMMIT
5640: 20 63 61 6e 20 62 65 20 72 65 74 72 69 65 64 20   can be retried 
5650: 6c 61 74 65 72 0a 61 66 74 65 72 20 74 68 65 20  later.after the 
5660: 72 65 61 64 65 72 20 68 61 73 20 68 61 64 20 61  reader has had a
5670: 20 63 68 61 6e 63 65 20 74 6f 20 63 6c 65 61 72   chance to clear
5680: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 6e 20 76  ..</p>..<p>.In v
5690: 65 72 79 20 6f 6c 64 20 76 65 72 73 69 6f 6e 73  ery old versions
56a0: 20 6f 66 20 53 51 4c 69 74 65 20 28 62 65 66 6f   of SQLite (befo
56b0: 72 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 31  re version 3.7.1
56c0: 31 20 63 69 72 63 61 20 32 30 31 32 2d 30 33 2d  1 circa 2012-03-
56d0: 32 30 29 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b  20).the ROLLBACK
56e0: 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
56f0: 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 0a 5b  an error code .[
5700: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 69 66 20  SQLITE_BUSY] if 
5710: 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 70 65  there are any pe
5720: 6e 64 69 6e 67 20 71 75 65 72 69 65 73 2e 20 20  nding queries.  
5730: 5e 49 6e 20 6d 6f 72 65 20 72 65 63 65 6e 74 0a  ^In more recent.
5740: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
5750: 74 65 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  te, the ROLLBACK
5760: 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 61 6e   will proceed an
5770: 64 20 70 65 6e 64 69 6e 67 20 73 74 61 74 65 6d  d pending statem
5780: 65 6e 74 73 0a 77 69 6c 6c 20 6f 66 74 65 6e 20  ents.will often 
5790: 62 65 20 61 62 6f 72 74 65 64 2c 20 63 61 75 73  be aborted, caus
57a0: 69 6e 67 20 74 68 65 6d 20 74 6f 20 72 65 74 75  ing them to retu
57b0: 72 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 41 42  rn an [SQLITE_AB
57c0: 4f 52 54 5d 20 6f 72 0a 5b 53 51 4c 49 54 45 5f  ORT] or.[SQLITE_
57d0: 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 5d 20  ABORT_ROLLBACK] 
57e0: 65 72 72 6f 72 2e 0a 5e 49 6e 20 53 51 4c 69 74  error..^In SQLit
57f0: 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 38 20  e version 3.8.8 
5800: 61 6e 64 20 6c 61 74 65 72 2c 20 61 20 70 65 6e  and later, a pen
5810: 64 69 6e 67 20 72 65 61 64 20 77 69 6c 6c 20 63  ding read will c
5820: 6f 6e 74 69 6e 75 65 20 66 75 6e 63 74 69 6f 6e  ontinue function
5830: 69 6e 67 0a 61 66 74 65 72 20 74 68 65 20 52 4f  ing.after the RO
5840: 4c 4c 42 41 43 4b 20 61 73 20 6c 6f 6e 67 20 61  LLBACK as long a
5850: 73 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 64  s the ROLLBACK d
5860: 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74  oes not modify t
5870: 68 65 20 64 61 74 61 62 61 73 65 0a 73 63 68 65  he database.sche
5880: 6d 61 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66  ma..</p>..<p>.If
5890: 20 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   [PRAGMA journal
58a0: 5f 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74 6f  _mode] is set to
58b0: 20 4f 46 46 20 28 74 68 75 73 20 64 69 73 61 62   OFF (thus disab
58c0: 6c 69 6e 67 20 74 68 65 20 72 6f 6c 6c 62 61 63  ling the rollbac
58d0: 6b 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20  k journal.file) 
58e0: 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
58f0: 72 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  r of the ROLLBAC
5900: 4b 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64  K command is und
5910: 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68  efined..</p>..<h
5920: 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20 45 72  3>Response To Er
5930: 72 6f 72 73 20 57 69 74 68 69 6e 20 41 20 54 72  rors Within A Tr
5940: 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a  ansaction</h3>..
5950: 3c 70 3e 20 5e 28 49 66 20 63 65 72 74 61 69 6e  <p> ^(If certain
5960: 20 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73   kinds of errors
5970: 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61 20   occur within a 
5980: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
5990: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79  .transaction may
59a0: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 72   or may not be r
59b0: 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d  olled back autom
59c0: 61 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65  atically.  The.e
59d0: 72 72 6f 72 73 20 74 68 61 74 20 63 61 6e 20 63  rrors that can c
59e0: 61 75 73 65 20 61 6e 20 61 75 74 6f 6d 61 74 69  ause an automati
59f0: 63 20 72 6f 6c 6c 62 61 63 6b 20 69 6e 63 6c 75  c rollback inclu
5a00: 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  de:</p>..<ul>.<l
5a10: 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d  i> [SQLITE_FULL]
5a20: 3a 20 64 61 74 61 62 61 73 65 20 6f 72 20 64 69  : database or di
5a30: 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51  sk full.<li> [SQ
5a40: 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20 64 69 73  LITE_IOERR]: dis
5a50: 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e  k I/O error.<li>
5a60: 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 3a 20   [SQLITE_BUSY]: 
5a70: 64 61 74 61 62 61 73 65 20 69 6e 20 75 73 65 20  database in use 
5a80: 62 79 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  by another proce
5a90: 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ss.<li> [SQLITE_
5aa0: 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d  NOMEM]: out or m
5ab0: 65 6d 6f 72 79 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  emory.</ul>)^..<
5ac0: 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20 6f 66 20 74  p>.^For all of t
5ad0: 68 65 73 65 20 65 72 72 6f 72 73 2c 20 53 51 4c  hese errors, SQL
5ae0: 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
5af0: 75 6e 64 6f 20 6a 75 73 74 20 74 68 65 20 6f 6e  undo just the on
5b00: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 74 20 77  e statement.it w
5b10: 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e  as working on an
5b20: 64 20 6c 65 61 76 65 20 63 68 61 6e 67 65 73 20  d leave changes 
5b30: 66 72 6f 6d 20 70 72 69 6f 72 20 73 74 61 74 65  from prior state
5b40: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  ments within the
5b50: 0a 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f  .same transactio
5b60: 6e 20 69 6e 74 61 63 74 20 61 6e 64 20 63 6f 6e  n intact and con
5b70: 74 69 6e 75 65 20 77 69 74 68 20 74 68 65 20 74  tinue with the t
5b80: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 48 6f  ransaction.  ^Ho
5b90: 77 65 76 65 72 2c 20 0a 64 65 70 65 6e 64 69 6e  wever, .dependin
5ba0: 67 20 6f 6e 20 74 68 65 20 73 74 61 74 65 6d 65  g on the stateme
5bb0: 6e 74 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74  nt being evaluat
5bc0: 65 64 20 61 6e 64 20 74 68 65 20 70 6f 69 6e 74  ed and the point
5bd0: 20 61 74 20 77 68 69 63 68 20 74 68 65 0a 65 72   at which the.er
5be0: 72 6f 72 20 6f 63 63 75 72 73 2c 20 69 74 20 6d  ror occurs, it m
5bf0: 69 67 68 74 20 62 65 20 6e 65 63 65 73 73 61 72  ight be necessar
5c00: 79 20 66 6f 72 20 53 51 4c 69 74 65 20 74 6f 20  y for SQLite to 
5c10: 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a 63 61 6e  rollback and.can
5c20: 63 65 6c 20 74 68 65 20 65 6e 74 69 72 65 20 74  cel the entire t
5c30: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 41 6e  ransaction.  ^An
5c40: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e   application can
5c50: 20 74 65 6c 6c 20 77 68 69 63 68 0a 63 6f 75 72   tell which.cour
5c60: 73 65 20 6f 66 20 61 63 74 69 6f 6e 20 53 51 4c  se of action SQL
5c70: 69 74 65 20 74 6f 6f 6b 20 62 79 20 75 73 69 6e  ite took by usin
5c80: 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 67  g the.[sqlite3_g
5c90: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 29 5d  et_autocommit()]
5ca0: 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74 65   C-language inte
5cb0: 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  rface.</p>..<p>I
5cc0: 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64  t is recommended
5cd0: 20 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f   that applicatio
5ce0: 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  ns respond to th
5cf0: 65 20 65 72 72 6f 72 73 0a 6c 69 73 74 65 64 20  e errors.listed 
5d00: 61 62 6f 76 65 20 62 79 20 65 78 70 6c 69 63 69  above by explici
5d10: 74 6c 79 20 69 73 73 75 69 6e 67 20 61 20 52 4f  tly issuing a RO
5d20: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20  LLBACK command. 
5d30: 20 5e 49 66 20 74 68 65 20 0a 74 72 61 6e 73 61   ^If the .transa
5d40: 63 74 69 6f 6e 20 68 61 73 20 61 6c 72 65 61 64  ction has alread
5d50: 79 20 62 65 65 6e 20 72 6f 6c 6c 65 64 20 62 61  y been rolled ba
5d60: 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ck automatically
5d70: 0a 62 79 20 74 68 65 20 65 72 72 6f 72 20 72 65  .by the error re
5d80: 73 70 6f 6e 73 65 2c 20 74 68 65 6e 20 74 68 65  sponse, then the
5d90: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
5da0: 64 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d will fail with
5db0: 20 61 6e 0a 65 72 72 6f 72 2c 20 62 75 74 20 6e   an.error, but n
5dc0: 6f 20 68 61 72 6d 20 69 73 20 63 61 75 73 65 64  o harm is caused
5dd0: 20 62 79 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c   by this.</p>..<
5de0: 70 3e 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e  p>Future version
5df0: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61 79 20  s of SQLite may 
5e00: 65 78 74 65 6e 64 20 74 68 65 20 6c 69 73 74 20  extend the list 
5e10: 6f 66 20 65 72 72 6f 72 73 20 77 68 69 63 68 0a  of errors which.
5e20: 6d 69 67 68 74 20 63 61 75 73 65 20 61 75 74 6f  might cause auto
5e30: 6d 61 74 69 63 20 74 72 61 6e 73 61 63 74 69 6f  matic transactio
5e40: 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 46 75 74  n rollback.  Fut
5e50: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ure versions of.
5e60: 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61  SQLite might cha
5e70: 6e 67 65 20 74 68 65 20 65 72 72 6f 72 20 72 65  nge the error re
5e80: 73 70 6f 6e 73 65 2e 20 20 49 6e 20 70 61 72 74  sponse.  In part
5e90: 69 63 75 6c 61 72 2c 20 77 65 20 6d 61 79 0a 63  icular, we may.c
5ea0: 68 6f 6f 73 65 20 74 6f 20 73 69 6d 70 6c 69 66  hoose to simplif
5eb0: 79 20 74 68 65 20 69 6e 74 65 72 66 61 63 65 20  y the interface 
5ec0: 69 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f  in future versio
5ed0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62 79 0a  ns of SQLite by.
5ee0: 63 61 75 73 69 6e 67 20 74 68 65 20 65 72 72 6f  causing the erro
5ef0: 72 73 20 61 62 6f 76 65 20 74 6f 20 66 6f 72 63  rs above to forc
5f00: 65 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  e an uncondition
5f10: 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e  al rollback.</p>
5f20: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
5f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f70: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
5f80: 7b 53 41 56 45 50 4f 49 4e 54 7d 20 73 61 76 65  {SAVEPOINT} save
5f90: 70 6f 69 6e 74 20 7b 53 41 56 45 50 4f 49 4e 54  point {SAVEPOINT
5fa0: 20 52 45 4c 45 41 53 45 7d 0a 0a 52 65 63 75 72   RELEASE}..Recur
5fb0: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
5fc0: 6d 20 73 61 76 65 70 6f 69 6e 74 2d 73 74 6d 74  m savepoint-stmt
5fd0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
5fe0: 44 69 61 67 72 61 6d 20 72 65 6c 65 61 73 65 2d  Diagram release-
5ff0: 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75  stmt.RecursiveBu
6000: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c  bbleDiagram roll
6010: 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  back-stmt.</tcl>
6020: 0a 0a 3c 70 3e 20 5e 53 41 56 45 50 4f 49 4e 54  ..<p> ^SAVEPOINT
6030: 73 20 61 72 65 20 61 20 6d 65 74 68 6f 64 20 6f  s are a method o
6040: 66 20 63 72 65 61 74 69 6e 67 20 74 72 61 6e 73  f creating trans
6050: 61 63 74 69 6f 6e 73 2c 20 73 69 6d 69 6c 61 72  actions, similar
6060: 20 74 6f 0a 5b 42 45 47 49 4e 5d 20 61 6e 64 20   to.[BEGIN] and 
6070: 5b 43 4f 4d 4d 49 54 5d 2c 20 65 78 63 65 70 74  [COMMIT], except
6080: 20 74 68 61 74 20 74 68 65 20 53 41 56 45 50 4f   that the SAVEPO
6090: 49 4e 54 20 61 6e 64 20 52 45 4c 45 41 53 45 20  INT and RELEASE 
60a0: 63 6f 6d 6d 61 6e 64 73 0a 61 72 65 20 6e 61 6d  commands.are nam
60b0: 65 64 20 61 6e 64 20 6d 61 79 20 62 65 20 6e 65  ed and may be ne
60c0: 73 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  sted.</p>..<p> ^
60d0: 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f  The SAVEPOINT co
60e0: 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 61 20 6e  mmand starts a n
60f0: 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  ew transaction w
6100: 69 74 68 20 61 20 6e 61 6d 65 2e 0a 5e 54 68 65  ith a name..^The
6110: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 61 6d   transaction nam
6120: 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 75  es need not be u
6130: 6e 69 71 75 65 2e 0a 5e 28 41 20 53 41 56 45 50  nique..^(A SAVEP
6140: 4f 49 4e 54 20 63 61 6e 20 62 65 20 73 74 61 72  OINT can be star
6150: 74 65 64 20 65 69 74 68 65 72 20 77 69 74 68 69  ted either withi
6160: 6e 20 6f 72 20 6f 75 74 73 69 64 65 20 6f 66 0a  n or outside of.
6170: 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d  a [BEGIN]...[COM
6180: 4d 49 54 5d 2e 29 5e 20 20 5e 28 57 68 65 6e 20  MIT].)^  ^(When 
6190: 61 20 53 41 56 45 50 4f 49 4e 54 20 69 73 20 74  a SAVEPOINT is t
61a0: 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 20 73 61  he outer-most sa
61b0: 76 65 70 6f 69 6e 74 0a 61 6e 64 20 69 74 20 69  vepoint.and it i
61c0: 73 20 6e 6f 74 20 77 69 74 68 69 6e 20 61 20 5b  s not within a [
61d0: 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54  BEGIN]...[COMMIT
61e0: 5d 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  ] then the behav
61f0: 69 6f 72 20 69 73 20 74 68 65 0a 73 61 6d 65 20  ior is the.same 
6200: 61 73 20 42 45 47 49 4e 20 44 45 46 45 52 52 45  as BEGIN DEFERRE
6210: 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 2e 29 5e  D TRANSACTION.)^
6220: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f  </p>..<p>^The RO
6230: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
6240: 64 20 72 65 76 65 72 74 73 20 74 68 65 20 73 74  d reverts the st
6250: 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ate of the datab
6260: 61 73 65 20 62 61 63 6b 20 74 6f 20 77 68 61 74  ase back to what
6270: 0a 69 74 20 77 61 73 20 6a 75 73 74 20 61 66 74  .it was just aft
6280: 65 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  er the correspon
6290: 64 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 2e 20  ding SAVEPOINT. 
62a0: 20 5e 4e 6f 74 65 20 74 68 61 74 20 75 6e 6c 69   ^Note that unli
62b0: 6b 65 20 74 68 61 74 0a 70 6c 61 69 6e 20 5b 52  ke that.plain [R
62c0: 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64  OLLBACK] command
62d0: 20 28 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f   (without the TO
62e0: 20 6b 65 79 77 6f 72 64 29 20 74 68 65 20 52 4f   keyword) the RO
62f0: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
6300: 64 0a 64 6f 65 73 20 6e 6f 74 20 63 61 6e 63 65  d.does not cance
6310: 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  l the transactio
6320: 6e 2e 20 20 5e 49 6e 73 74 65 61 64 20 6f 66 20  n.  ^Instead of 
6330: 63 61 6e 63 65 6c 6c 69 6e 67 20 74 68 65 20 74  cancelling the t
6340: 72 61 6e 73 61 63 74 69 6f 6e 2c 0a 74 68 65 20  ransaction,.the 
6350: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d  ROLLBACK TO comm
6360: 61 6e 64 20 72 65 73 74 61 72 74 73 20 74 68 65  and restarts the
6370: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 67 61   transaction aga
6380: 69 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  in at the beginn
6390: 69 6e 67 2e 0a 5e 41 6c 6c 20 69 6e 74 65 72 76  ing..^All interv
63a0: 65 6e 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 73  ening SAVEPOINTs
63b0: 20 61 72 65 20 63 61 6e 63 65 6c 65 64 2c 20 68   are canceled, h
63c0: 6f 77 65 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  owever.</p>..<p>
63d0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
63e0: 6d 61 6e 64 20 69 73 20 6c 69 6b 65 20 61 20 5b  mand is like a [
63f0: 43 4f 4d 4d 49 54 5d 20 66 6f 72 20 61 20 53 41  COMMIT] for a SA
6400: 56 45 50 4f 49 4e 54 2e 0a 5e 54 68 65 20 52 45  VEPOINT..^The RE
6410: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61  LEASE command ca
6420: 75 73 65 73 20 61 6c 6c 20 73 61 76 65 70 6f 69  uses all savepoi
6430: 6e 74 73 20 62 61 63 6b 20 74 6f 20 61 6e 64 20  nts back to and 
6440: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 0a 6d  including the .m
6450: 6f 73 74 20 72 65 63 65 6e 74 20 73 61 76 65 70  ost recent savep
6460: 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61 74 63  oint with a matc
6470: 68 69 6e 67 20 6e 61 6d 65 20 74 6f 20 62 65 20  hing name to be 
6480: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
6490: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74   .transaction st
64a0: 61 63 6b 2e 20 20 5e 54 68 65 20 52 45 4c 45 41  ack.  ^The RELEA
64b0: 53 45 20 6f 66 20 61 6e 20 69 6e 6e 65 72 20 74  SE of an inner t
64c0: 72 61 6e 73 61 63 74 69 6f 6e 0a 64 6f 65 73 20  ransaction.does 
64d0: 6e 6f 74 20 63 61 75 73 65 20 61 6e 79 20 63 68  not cause any ch
64e0: 61 6e 67 65 73 20 74 6f 20 62 65 20 77 72 69 74  anges to be writ
64f0: 74 65 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62  ten to the datab
6500: 61 73 65 20 66 69 6c 65 3b 20 69 74 20 6d 65 72  ase file; it mer
6510: 65 6c 79 0a 72 65 6d 6f 76 65 73 20 73 61 76 65  ely.removes save
6520: 70 6f 69 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  points from the 
6530: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
6540: 6b 20 73 75 63 68 20 74 68 61 74 20 69 74 20 69  k such that it i
6550: 73 0a 6e 6f 20 6c 6f 6e 67 65 72 20 70 6f 73 73  s.no longer poss
6560: 69 62 6c 65 20 74 6f 20 52 4f 4c 4c 42 41 43 4b  ible to ROLLBACK
6570: 20 54 4f 20 74 68 6f 73 65 20 73 61 76 65 70 6f   TO those savepo
6580: 69 6e 74 73 2e 0a 5e 49 66 20 61 20 52 45 4c 45  ints..^If a RELE
6590: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65  ASE command rele
65a0: 61 73 65 73 20 74 68 65 20 6f 75 74 65 72 6d 6f  ases the outermo
65b0: 73 74 20 73 61 76 65 70 6f 69 6e 74 2c 20 73 6f  st savepoint, so
65c0: 0a 74 68 61 74 20 74 68 65 20 74 72 61 6e 73 61  .that the transa
65d0: 63 74 69 6f 6e 20 73 74 61 63 6b 20 62 65 63 6f  ction stack beco
65e0: 6d 65 73 20 65 6d 70 74 79 2c 20 74 68 65 6e 20  mes empty, then 
65f0: 52 45 4c 45 41 53 45 20 69 73 20 74 68 65 20 73  RELEASE is the s
6600: 61 6d 65 0a 61 73 20 5b 43 4f 4d 4d 49 54 5d 2e  ame.as [COMMIT].
6610: 0a 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63  .^The [COMMIT] c
6620: 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20 75 73  ommand may be us
6630: 65 64 20 74 6f 20 72 65 6c 65 61 73 65 20 61 6c  ed to release al
6640: 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 61 6e 64  l savepoints and
6650: 0a 63 6f 6d 6d 69 74 20 74 68 65 20 74 72 61 6e  .commit the tran
6660: 73 61 63 74 69 6f 6e 20 65 76 65 6e 20 69 66 20  saction even if 
6670: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6680: 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73  was originally s
6690: 74 61 72 74 65 64 0a 62 79 20 61 20 53 41 56 45  tarted.by a SAVE
66a0: 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 69 6e  POINT command in
66b0: 73 74 65 61 64 20 6f 66 20 61 20 5b 42 45 47 49  stead of a [BEGI
66c0: 4e 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  N] command.</p>.
66d0: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 73 61 76 65  .<p>^If the save
66e0: 70 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20  point-name in a 
66f0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
6700: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61  does not match a
6710: 6e 79 0a 73 61 76 65 70 6f 69 6e 74 20 63 75 72  ny.savepoint cur
6720: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 74 72  rently in the tr
6730: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c  ansaction stack,
6740: 20 74 68 65 6e 20 6e 6f 20 73 61 76 65 70 6f 69   then no savepoi
6750: 6e 74 73 20 61 72 65 0a 72 65 6c 65 61 73 65 64  nts are.released
6760: 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  , the database i
6770: 73 20 75 6e 63 68 61 6e 67 65 64 2c 20 61 6e 64  s unchanged, and
6780: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
6790: 6d 61 6e 64 20 72 65 74 75 72 6e 73 0a 61 6e 20  mand returns.an 
67a0: 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  error.</p>..<p>^
67b0: 4e 6f 74 65 20 74 68 61 74 20 61 6e 20 69 6e 6e  Note that an inn
67c0: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  er transaction m
67d0: 69 67 68 74 20 63 6f 6d 6d 69 74 20 28 75 73 69  ight commit (usi
67e0: 6e 67 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ng the RELEASE c
67f0: 6f 6d 6d 61 6e 64 29 0a 62 75 74 20 74 68 65 6e  ommand).but then
6800: 20 6c 61 74 65 72 20 68 61 76 65 20 69 74 73 20   later have its 
6810: 77 6f 72 6b 20 75 6e 64 6f 6e 65 20 62 79 20 61  work undone by a
6820: 20 52 4f 4c 4c 42 41 43 4b 20 69 6e 20 61 6e 20   ROLLBACK in an 
6830: 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f  outer transactio
6840: 6e 2e 0a 5e 41 20 70 6f 77 65 72 20 66 61 69 6c  n..^A power fail
6850: 75 72 65 20 6f 72 20 70 72 6f 67 72 61 6d 20 63  ure or program c
6860: 72 61 73 68 20 6f 72 20 4f 53 20 63 72 61 73 68  rash or OS crash
6870: 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20   will cause the 
6880: 6f 75 74 65 72 2d 6d 6f 73 74 0a 74 72 61 6e 73  outer-most.trans
6890: 61 63 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61  action to rollba
68a0: 63 6b 2c 20 75 6e 64 6f 69 6e 67 20 61 6c 6c 20  ck, undoing all 
68b0: 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76  changes that hav
68c0: 65 20 6f 63 63 75 72 72 65 64 20 77 69 74 68 69  e occurred withi
68d0: 6e 0a 74 68 61 74 20 6f 75 74 65 72 20 74 72 61  n.that outer tra
68e0: 6e 73 61 63 74 69 6f 6e 2c 20 65 76 65 6e 20 63  nsaction, even c
68f0: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
6900: 20 73 75 70 70 6f 73 65 64 6c 79 20 62 65 65 6e   supposedly been
6910: 20 22 63 6f 6d 6d 69 74 74 65 64 22 0a 62 79 20   "committed".by 
6920: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
6930: 61 6e 64 2e 20 20 5e 43 6f 6e 74 65 6e 74 20 69  and.  ^Content i
6940: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 63  s not actually c
6950: 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20  ommitted on the 
6960: 64 69 73 6b 20 0a 75 6e 74 69 6c 20 74 68 65 20  disk .until the 
6970: 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73 61  outermost transa
6980: 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f  ction commits.</
6990: 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  p>..<p>There are
69a0: 20 73 65 76 65 72 61 6c 20 77 61 79 73 20 6f 66   several ways of
69b0: 20 74 68 69 6e 6b 69 6e 67 20 61 62 6f 75 74 20   thinking about 
69c0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
69d0: 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  and:</p>..<ul>.<
69e0: 6c 69 3e 3c 70 3e 0a 53 6f 6d 65 20 70 65 6f 70  li><p>.Some peop
69f0: 6c 65 20 76 69 65 77 20 52 45 4c 45 41 53 45 20  le view RELEASE 
6a00: 61 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  as the equivalen
6a10: 74 20 6f 66 20 43 4f 4d 4d 49 54 20 66 6f 72 20  t of COMMIT for 
6a20: 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 54 68 69  a SAVEPOINT..Thi
6a30: 73 20 69 73 20 61 6e 20 61 63 63 65 70 74 61 62  s is an acceptab
6a40: 6c 65 20 70 6f 69 6e 74 20 6f 66 20 76 69 65 77  le point of view
6a50: 20 61 73 20 6c 6f 6e 67 20 61 73 20 6f 6e 65 20   as long as one 
6a60: 72 65 6d 65 6d 62 65 72 73 20 74 68 61 74 20 74  remembers that t
6a70: 68 65 0a 63 68 61 6e 67 65 73 20 63 6f 6d 6d 69  he.changes commi
6a80: 74 74 65 64 20 62 79 20 61 6e 20 69 6e 6e 65 72  tted by an inner
6a90: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67   transaction mig
6aa0: 68 74 20 6c 61 74 65 72 20 62 65 20 75 6e 64 6f  ht later be undo
6ab0: 6e 65 20 62 79 20 61 0a 72 6f 6c 6c 62 61 63 6b  ne by a.rollback
6ac0: 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61   in an outer tra
6ad0: 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c  nsaction.</p></l
6ae0: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41 6e 6f 74  i>..<li><p>.Anot
6af0: 68 65 72 20 76 69 65 77 20 6f 66 20 52 45 4c 45  her view of RELE
6b00: 41 53 45 20 69 73 20 74 68 61 74 20 69 74 20 6d  ASE is that it m
6b10: 65 72 67 65 73 20 61 20 6e 61 6d 65 64 20 74 72  erges a named tr
6b20: 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 6f 20 69  ansaction into i
6b30: 74 73 0a 70 61 72 65 6e 74 20 74 72 61 6e 73 61  ts.parent transa
6b40: 63 74 69 6f 6e 2c 20 73 6f 20 74 68 61 74 20 74  ction, so that t
6b50: 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63  he named transac
6b60: 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72  tion and its par
6b70: 65 6e 74 20 62 65 63 6f 6d 65 0a 74 68 65 20 73  ent become.the s
6b80: 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ame transaction.
6b90: 20 20 41 66 74 65 72 20 52 45 4c 45 41 53 45 2c    After RELEASE,
6ba0: 20 74 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73   the named trans
6bb0: 61 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70  action and its p
6bc0: 61 72 65 6e 74 0a 77 69 6c 6c 20 63 6f 6d 6d 69  arent.will commi
6bd0: 74 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 6f  t or rollback to
6be0: 67 65 74 68 65 72 2c 20 77 68 61 74 65 76 65 72  gether, whatever
6bf0: 20 74 68 65 69 72 20 66 61 74 65 20 6d 61 79 20   their fate may 
6c00: 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  be..</p></li>..<
6c10: 6c 69 3e 3c 70 3e 0a 4f 6e 65 20 63 61 6e 20 61  li><p>.One can a
6c20: 6c 73 6f 20 74 68 69 6e 6b 20 6f 66 20 73 61 76  lso think of sav
6c30: 65 70 6f 69 6e 74 73 20 61 73 0a 22 6d 61 72 6b  epoints as."mark
6c40: 73 22 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61  s" in the transa
6c50: 63 74 69 6f 6e 20 74 69 6d 65 6c 69 6e 65 2e 20  ction timeline. 
6c60: 20 49 6e 20 74 68 69 73 20 76 69 65 77 2c 20 74   In this view, t
6c70: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d  he SAVEPOINT com
6c80: 6d 61 6e 64 0a 63 72 65 61 74 65 73 20 61 20 6e  mand.creates a n
6c90: 65 77 20 6d 61 72 6b 2c 20 74 68 65 20 52 4f 4c  ew mark, the ROL
6ca0: 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64  LBACK TO command
6cb0: 20 72 65 77 69 6e 64 73 20 74 68 65 20 74 69 6d   rewinds the tim
6cc0: 65 6c 69 6e 65 20 62 61 63 6b 0a 74 6f 20 61 20  eline back.to a 
6cd0: 70 6f 69 6e 74 20 6a 75 73 74 20 61 66 74 65 72  point just after
6ce0: 20 74 68 65 20 6e 61 6d 65 64 20 6d 61 72 6b 2c   the named mark,
6cf0: 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45   and the RELEASE
6d00: 20 63 6f 6d 6d 61 6e 64 0a 65 72 61 73 65 73 20   command.erases 
6d10: 6d 61 72 6b 73 20 66 72 6f 6d 20 74 68 65 20 74  marks from the t
6d20: 69 6d 65 6c 69 6e 65 20 77 69 74 68 6f 75 74 20  imeline without 
6d30: 61 63 74 75 61 6c 6c 79 20 6d 61 6b 69 6e 67 20  actually making 
6d40: 61 6e 79 0a 63 68 61 6e 67 65 73 20 74 6f 20 74  any.changes to t
6d50: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 3c 2f 70  he database..</p
6d60: 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a  ></li>.</ul>....
6d70: 3c 68 33 3e 54 72 61 6e 73 61 63 74 69 6f 6e 20  <h3>Transaction 
6d80: 4e 65 73 74 69 6e 67 20 52 75 6c 65 73 3c 2f 68  Nesting Rules</h
6d90: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 61 73 74  3>..<p>^The last
6da0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
6db0: 72 74 65 64 20 77 69 6c 6c 20 62 65 20 74 68 65  rted will be the
6dc0: 20 66 69 72 73 74 0a 74 72 61 6e 73 61 63 74 69   first.transacti
6dd0: 6f 6e 20 63 6f 6d 6d 69 74 74 65 64 20 6f 72 20  on committed or 
6de0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 3c 2f 70 3e  rolled back.</p>
6df0: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 42 45 47 49 4e  ..<p>^The [BEGIN
6e00: 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 77  ] command only w
6e10: 6f 72 6b 73 20 69 66 20 74 68 65 20 74 72 61 6e  orks if the tran
6e20: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 69 73  saction stack is
6e30: 20 65 6d 70 74 79 2c 20 6f 72 0a 69 6e 20 6f 74   empty, or.in ot
6e40: 68 65 72 20 77 6f 72 64 73 20 69 66 20 74 68 65  her words if the
6e50: 72 65 20 61 72 65 20 6e 6f 20 70 65 6e 64 69 6e  re are no pendin
6e60: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  g transactions. 
6e70: 20 5e 49 66 20 74 68 65 20 74 72 61 6e 73 61 63   ^If the transac
6e80: 74 69 6f 6e 0a 73 74 61 63 6b 20 69 73 20 6e 6f  tion.stack is no
6e90: 74 20 65 6d 70 74 79 20 77 68 65 6e 20 74 68 65  t empty when the
6ea0: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
6eb0: 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 65   is invoked, the
6ec0: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 66 61  n the command.fa
6ed0: 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ils with an erro
6ee0: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
6ef0: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
6f00: 20 63 6f 6d 6d 69 74 73 20 61 6c 6c 20 6f 75 74   commits all out
6f10: 73 74 61 6e 64 69 6e 67 20 74 72 61 6e 73 61 63  standing transac
6f20: 74 69 6f 6e 73 20 61 6e 64 20 6c 65 61 76 65 73  tions and leaves
6f30: 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  .the transaction
6f40: 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70   stack empty.</p
6f50: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41  >..<p>^The RELEA
6f60: 53 45 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74  SE command start
6f70: 73 20 77 69 74 68 20 74 68 65 20 6d 6f 73 74 20  s with the most 
6f80: 72 65 63 65 6e 74 20 61 64 64 69 74 69 6f 6e 20  recent addition 
6f90: 74 6f 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69  to the.transacti
6fa0: 6f 6e 20 73 74 61 63 6b 20 61 6e 64 20 72 65 6c  on stack and rel
6fb0: 65 61 73 65 73 20 73 61 76 65 70 6f 69 6e 74 73  eases savepoints
6fc0: 20 62 61 63 6b 77 61 72 64 73 20 0a 69 6e 20 74   backwards .in t
6fd0: 69 6d 65 20 75 6e 74 69 6c 20 69 74 20 72 65 6c  ime until it rel
6fe0: 65 61 73 65 73 20 61 20 73 61 76 65 70 6f 69 6e  eases a savepoin
6ff0: 74 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  t with a matchin
7000: 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  g savepoint-name
7010: 2e 0a 5e 50 72 69 6f 72 20 73 61 76 65 70 6f 69  ..^Prior savepoi
7020: 6e 74 73 2c 20 65 76 65 6e 20 73 61 76 65 70 6f  nts, even savepo
7030: 69 6e 74 73 20 77 69 74 68 20 6d 61 74 63 68 69  ints with matchi
7040: 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  ng savepoint-nam
7050: 65 73 2c 20 61 72 65 0a 75 6e 63 68 61 6e 67 65  es, are.unchange
7060: 64 2e 0a 5e 49 66 20 74 68 65 20 52 45 4c 45 41  d..^If the RELEA
7070: 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65  SE command cause
7080: 73 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f  s the.transactio
7090: 6e 20 73 74 61 63 6b 20 74 6f 20 62 65 63 6f 6d  n stack to becom
70a0: 65 20 65 6d 70 74 79 20 28 69 66 20 74 68 65 20  e empty (if the 
70b0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
70c0: 72 65 6c 65 61 73 65 73 20 74 68 65 0a 6f 75 74  releases the.out
70d0: 65 72 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69  ermost transacti
70e0: 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61 63  on from the stac
70f0: 6b 29 20 74 68 65 6e 20 74 68 65 20 74 72 61 6e  k) then the tran
7100: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e  saction commits.
7110: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 52  </p>..<p>^The [R
7120: 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64  OLLBACK] command
7130: 20 77 69 74 68 6f 75 74 20 61 20 54 4f 20 63 6c   without a TO cl
7140: 61 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 73  ause rolls backs
7150: 20 61 6c 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e   all transaction
7160: 73 0a 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65  s.and leaves the
7170: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
7180: 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c  ck empty.</p>..<
7190: 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20  p>^The ROLLBACK 
71a0: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61 20 54  command with a T
71b0: 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62  O clause rolls b
71c0: 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ack transactions
71d0: 20 67 6f 69 6e 67 0a 62 61 63 6b 77 61 72 64 73   going.backwards
71e0: 20 69 6e 20 74 69 6d 65 20 62 61 63 6b 20 74 6f   in time back to
71f0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
7200: 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20   SAVEPOINT with 
7210: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
7220: 0a 5e 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20  .^The SAVEPOINT 
7230: 77 69 74 68 20 74 68 65 20 6d 61 74 63 68 69 6e  with the matchin
7240: 67 20 6e 61 6d 65 20 72 65 6d 61 69 6e 73 20 6f  g name remains o
7250: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
7260: 6e 20 73 74 61 63 6b 2c 0a 62 75 74 20 61 6c 6c  n stack,.but all
7270: 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65   database change
7280: 73 20 74 68 61 74 20 6f 63 63 75 72 72 65 64 20  s that occurred 
7290: 61 66 74 65 72 20 74 68 61 74 20 53 41 56 45 50  after that SAVEP
72a0: 4f 49 4e 54 20 77 61 73 20 63 72 65 61 74 65 64  OINT was created
72b0: 0a 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  .are rolled back
72c0: 2e 20 20 5e 49 66 20 74 68 65 20 73 61 76 65 70  .  ^If the savep
72d0: 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52  oint-name in a R
72e0: 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61  OLLBACK TO comma
72f0: 6e 64 20 64 6f 65 73 20 6e 6f 74 0a 6d 61 74 63  nd does not.matc
7300: 68 20 61 6e 79 20 53 41 56 45 50 4f 49 4e 54 20  h any SAVEPOINT 
7310: 6f 6e 20 74 68 65 20 73 74 61 63 6b 2c 20 74 68  on the stack, th
7320: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
7330: 63 6f 6d 6d 61 6e 64 20 66 61 69 6c 73 20 77 69  command fails wi
7340: 74 68 20 61 6e 0a 65 72 72 6f 72 20 61 6e 64 20  th an.error and 
7350: 6c 65 61 76 65 73 20 74 68 65 20 73 74 61 74 65  leaves the state
7360: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
7370: 20 75 6e 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a   unchanged.</p>.
7380: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
7390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73d0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 63  ######.Section c
73e0: 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b  omment comment {
73f0: 63 6f 6d 6d 65 6e 74 20 2a 63 6f 6d 6d 65 6e 74  comment *comment
7400: 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  s}..RecursiveBub
7410: 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65  bleDiagram comme
7420: 6e 74 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e  nt-syntax.</tcl>
7430: 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61  ..<p>^Comments a
7440: 72 65 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61  re not SQL comma
7450: 6e 64 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63  nds, but can occ
7460: 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 74 65  ur within the te
7470: 78 74 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65  xt of.SQL querie
7480: 73 20 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c  s passed to [sql
7490: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
74a0: 29 5d 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69  )] and related i
74b0: 6e 74 65 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d  nterfaces..^Comm
74c0: 65 6e 74 73 20 61 72 65 20 74 72 65 61 74 65 64  ents are treated
74d0: 20 61 73 20 77 68 69 74 65 73 70 61 63 65 20 62   as whitespace b
74e0: 79 20 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43  y the parser..^C
74f0: 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69  omments can begi
7500: 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65  n anywhere white
7510: 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f  space .can be fo
7520: 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69  und, including i
7530: 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e  nside expression
7540: 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74  s that span mult
7550: 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e  iple lines..</p>
7560: 0a 0a 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e  ..<p>^SQL commen
7570: 74 73 20 62 65 67 69 6e 20 77 69 74 68 20 74 77  ts begin with tw
7580: 6f 20 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d  o consecutive "-
7590: 22 20 63 68 61 72 61 63 74 65 72 73 20 28 41 53  " characters (AS
75a0: 43 49 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78  CII 0x2d).and ex
75b0: 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69  tend up to and i
75c0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78  ncluding the nex
75d0: 74 20 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63  t newline charac
75e0: 74 65 72 20 28 41 53 43 49 49 20 30 78 30 61 29  ter (ASCII 0x0a)
75f0: 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e  .or until the en
7600: 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63  d of input, whic
7610: 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73  hever comes firs
7620: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74  t.</p>..<p>^C-st
7630: 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  yle comments beg
7640: 69 6e 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64  in.with "/*" and
7650: 20 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e   extend up to an
7660: 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  d including the 
7670: 6e 65 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63  next "*/" charac
7680: 74 65 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69  ter pair.or unti
7690: 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  l the end of inp
76a0: 75 74 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f  ut, whichever co
76b0: 6d 65 73 20 66 69 72 73 74 2e 20 20 5e 43 2d 73  mes first.  ^C-s
76c0: 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61  tyle comments.ca
76d0: 6e 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20  n span multiple 
76e0: 6c 69 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e  lines. </p>..<p>
76f0: 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70  ^Comments can ap
7700: 70 65 61 72 20 61 6e 79 77 68 65 72 65 20 77 68  pear anywhere wh
7710: 69 74 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63  itespace can occ
7720: 75 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e  ur,.including in
7730: 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73  side expressions
7740: 20 61 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64   and in the midd
7750: 6c 65 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20  le of other SQL 
7760: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d  statements..^Com
7770: 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73  ments do not nes
7780: 74 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a  t..</p>...<tcl>.
7790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
77e0: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49  ection {CREATE I
77f0: 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65  NDEX} createinde
7800: 78 20 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58  x {{CREATE INDEX
7810: 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
7820: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
7830: 65 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74  e-index-stmt.</t
7840: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
7850: 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  ATE INDEX comman
7860: 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  d consists of th
7870: 65 20 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41  e keywords "CREA
7880: 54 45 20 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77  TE INDEX" follow
7890: 65 64 0a 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  ed.by the name o
78a0: 66 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 2c  f the new index,
78b0: 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e   the keyword "ON
78c0: 22 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ", the name of a
78d0: 20 70 72 65 76 69 6f 75 73 6c 79 0a 63 72 65 61   previously.crea
78e0: 74 65 64 20 74 61 62 6c 65 20 74 68 61 74 20 69  ted table that i
78f0: 73 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 2c  s to be indexed,
7900: 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73   and a parenthes
7910: 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 74 61 62  ized list of tab
7920: 6c 65 20 63 6f 6c 75 6d 6e 0a 6e 61 6d 65 73 20  le column.names 
7930: 61 6e 64 2f 6f 72 20 65 78 70 72 65 73 73 69 6f  and/or expressio
7940: 6e 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ns that are used
7950: 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78 20 6b   for the index k
7960: 65 79 2e 0a 49 66 20 74 68 65 20 6f 70 74 69 6f  ey..If the optio
7970: 6e 61 6c 20 57 48 45 52 45 20 63 6c 61 75 73 65  nal WHERE clause
7980: 20 69 73 20 69 6e 63 6c 75 64 65 64 2c 20 74 68   is included, th
7990: 65 6e 20 74 68 65 20 69 6e 64 65 78 20 69 73 20  en the index is 
79a0: 61 20 22 5b 70 61 72 74 69 61 6c 20 69 6e 64 65  a "[partial inde
79b0: 78 5d 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  x]"..</p>..<tcl>
79c0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 64 65 73  hd_fragment {des
79d0: 63 69 64 78 7d 20 7b 64 65 73 63 65 6e 64 69 6e  cidx} {descendin
79e0: 67 20 69 6e 64 69 63 65 73 7d 20 7b 64 65 73 63  g indices} {desc
79f0: 65 6e 64 69 6e 67 20 69 6e 64 65 78 7d 20 7b 64  ending index} {d
7a00: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 65  escending indexe
7a10: 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63  s}</tcl>.<p>^Eac
7a20: 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6f 72  h column name or
7a30: 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20   expression can 
7a40: 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f  be followed by o
7a50: 6e 65 0a 6f 66 20 74 68 65 20 22 41 53 43 22 20  ne.of the "ASC" 
7a60: 6f 72 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72  or "DESC" keywor
7a70: 64 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73  ds to indicate s
7a80: 6f 72 74 20 6f 72 64 65 72 2e 0a 5e 54 68 65 20  ort order..^The 
7a90: 73 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20 6f  sort order may o
7aa0: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67 6e  r may not be ign
7ab0: 6f 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f  ored depending.o
7ac0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
7ad0: 69 6c 65 20 66 6f 72 6d 61 74 2c 20 61 6e 64 20  ile format, and 
7ae0: 69 6e 20 70 61 72 74 69 63 75 6c 61 72 20 74 68  in particular th
7af0: 65 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  e [schema format
7b00: 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68 65 20 22   number]..^The "
7b10: 6c 65 67 61 63 79 22 20 73 63 68 65 6d 61 20 66  legacy" schema f
7b20: 6f 72 6d 61 74 20 28 31 29 20 69 67 6e 6f 72 65  ormat (1) ignore
7b30: 73 20 69 6e 64 65 78 0a 73 6f 72 74 20 6f 72 64  s index.sort ord
7b40: 65 72 2e 20 20 5e 54 68 65 20 64 65 73 63 65 6e  er.  ^The descen
7b50: 64 69 6e 67 20 69 6e 64 65 78 20 73 63 68 65 6d  ding index schem
7b60: 61 20 66 6f 72 6d 61 74 20 28 34 29 20 74 61 6b  a format (4) tak
7b70: 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20 6f 72  es index sort or
7b80: 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74  der.into account
7b90: 2e 20 20 4f 6e 6c 79 20 76 65 72 73 69 6f 6e 73  .  Only versions
7ba0: 20 6f 66 20 53 51 4c 69 74 65 20 33 2e 33 2e 30   of SQLite 3.3.0
7bb0: 20 61 6e 64 20 6c 61 74 65 72 20 61 72 65 20 61   and later are a
7bc0: 62 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61 6e  ble to understan
7bd0: 64 0a 74 68 65 20 64 65 73 63 65 6e 64 69 6e 67  d.the descending
7be0: 20 69 6e 64 65 78 20 66 6f 72 6d 61 74 2e 20 46   index format. F
7bf0: 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
7c00: 2c 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  , version of SQL
7c10: 69 74 65 20 62 65 74 77 65 65 6e 20 33 2e 33 2e  ite between 3.3.
7c20: 30 0a 61 6e 64 20 33 2e 37 2e 39 20 75 73 65 20  0.and 3.7.9 use 
7c30: 74 68 65 20 6c 65 67 61 63 79 20 73 63 68 65 6d  the legacy schem
7c40: 61 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61  a format by defa
7c50: 75 6c 74 2e 20 20 54 68 65 20 6e 65 77 65 72 20  ult.  The newer 
7c60: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73  schema format is
7c70: 0a 75 73 65 64 20 62 79 20 64 65 66 61 75 6c 74  .used by default
7c80: 20 69 6e 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e   in version 3.7.
7c90: 31 30 20 61 6e 64 20 6c 61 74 65 72 2e 0a 5e 54  10 and later..^T
7ca0: 68 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f  he [legacy_file_
7cb0: 66 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63  format pragma] c
7cc0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 68  an be used to ch
7cd0: 61 6e 67 65 20 73 65 74 20 74 68 65 20 73 70 65  ange set the spe
7ce0: 63 69 66 69 63 0a 62 65 68 61 76 69 6f 72 20 66  cific.behavior f
7cf0: 6f 72 20 61 6e 79 20 76 65 72 73 69 6f 6e 20 6f  or any version o
7d00: 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c  f SQLite.</p>..<
7d10: 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63  p>^The COLLATE c
7d20: 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  lause optionally
7d30: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20   following each 
7d40: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 6f 72 20 65  column name.or e
7d50: 78 70 72 65 73 73 69 6f 6e 20 64 65 66 69 6e 65  xpression define
7d60: 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65  s a.collating se
7d70: 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20  quence used for 
7d80: 74 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e 20  text entries in 
7d90: 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68  that column..^Th
7da0: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
7db0: 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20  ing.sequence is 
7dc0: 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
7dd0: 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66  quence defined f
7de0: 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69  or that column i
7df0: 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41  n the.[CREATE TA
7e00: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
7e10: 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61   ^Or if no colla
7e20: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
7e30: 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69 6e   otherwise defin
7e40: 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e  ed,.the built-in
7e50: 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e   BINARY collatin
7e60: 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  g sequence is us
7e70: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ed.</p>..<tcl>hd
7e80: 5f 66 72 61 67 6d 65 6e 74 20 69 6e 64 65 78 65  _fragment indexe
7e90: 78 70 72 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 78  xpr</tcl>.<p>^Ex
7ea0: 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e 20  pressions in an 
7eb0: 69 6e 64 65 78 20 6d 61 79 20 6e 6f 74 20 72 65  index may not re
7ec0: 66 65 72 65 6e 63 65 20 6f 74 68 65 72 20 74 61  ference other ta
7ed0: 62 6c 65 73 0a 61 6e 64 20 6d 61 79 20 6e 6f 74  bles.and may not
7ee0: 20 75 73 65 20 73 75 62 71 75 65 72 69 65 73 20   use subqueries 
7ef0: 6e 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 77 68  nor functions wh
7f00: 6f 73 65 20 72 65 73 75 6c 74 20 6d 69 67 68 74  ose result might
7f10: 0a 63 68 61 6e 67 65 20 28 65 78 3a 20 5b 72 61  .change (ex: [ra
7f20: 6e 64 6f 6d 28 29 5d 20 6f 72 20 5b 73 71 6c 69  ndom()] or [sqli
7f30: 74 65 5f 76 65 72 73 69 6f 6e 28 29 5d 29 2e 0a  te_version()])..
7f40: 5e 45 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20  ^Expressions in 
7f50: 61 6e 20 69 6e 64 65 78 20 6d 61 79 20 6f 6e 6c  an index may onl
7f60: 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d  y refer to colum
7f70: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 0a  ns in the table.
7f80: 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 69 6e  that is being in
7f90: 64 65 78 65 64 2e 0a 49 6e 64 65 78 65 73 20 6f  dexed..Indexes o
7fa0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 77 69 6c  n expression wil
7fb0: 6c 20 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68 20  l not work with 
7fc0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
7fd0: 74 65 20 70 72 69 6f 72 0a 74 6f 20 5b 76 65 72  te prior.to [ver
7fe0: 73 69 6f 6e 20 33 2e 39 2e 30 5d 2e 0a 53 65 65  sion 3.9.0]..See
7ff0: 20 74 68 65 20 5b 49 6e 64 65 78 65 73 20 4f 6e   the [Indexes On
8000: 20 45 78 70 72 65 73 73 69 6f 6e 73 5d 20 64 6f   Expressions] do
8010: 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69 74  cument for addit
8020: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
8030: 6e 0a 61 62 6f 75 74 20 75 73 69 6e 67 20 67 65  n.about using ge
8040: 6e 65 72 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  neral expression
8050: 73 20 69 6e 20 43 52 45 41 54 45 20 49 4e 44 45  s in CREATE INDE
8060: 58 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c  X statements...<
8070: 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61  p>There are no a
8080: 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73 20  rbitrary limits 
8090: 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  on the number of
80a0: 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63 61   indices that ca
80b0: 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74 6f  n be.attached to
80c0: 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 2e   a single table.
80d0: 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f    ^(The number o
80e0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20  f columns in an 
80f0: 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74 65  index is .limite
8100: 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73  d to the value s
8110: 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33 5f 6c  et by.[sqlite3_l
8120: 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f 4c 49  imit]([SQLITE_LI
8130: 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29  MIT_COLUMN],...)
8140: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  .)^</p>..<tcl>hd
8150: 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65  _fragment unique
8160: 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e 64 65  idx {unique inde
8170: 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49 66 20  x}</tcl>.<p>^If 
8180: 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f  the UNIQUE keywo
8190: 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77 65  rd appears betwe
81a0: 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e  en CREATE and IN
81b0: 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61  DEX then duplica
81c0: 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73  te.index entries
81d0: 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64   are not allowed
81e0: 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74 20  .  ^Any attempt 
81f0: 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c  to insert a dupl
8200: 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c  icate entry.will
8210: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72   result in an er
8220: 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20 70  ror.  ^For the p
8230: 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71 75  urposes of uniqu
8240: 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20 4e  e indices, all N
8250: 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20 63  ULL values.are c
8260: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69 66  onsidered to dif
8270: 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20  ferent from all 
8280: 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65  other NULL value
8290: 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20 75  s and are thus u
82a0: 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20 6f  nique..This is o
82b0: 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70 6f  ne of the two po
82c0: 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65 74  ssible interpret
82d0: 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 51  ations of the SQ
82e0: 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28 74  L-92 standard.(t
82f0: 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20 74  he language in t
8300: 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20 61  he standard is a
8310: 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69 73  mbiguous) and is
8320: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   the interpretat
8330: 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ion.followed by 
8340: 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53 51  PostgreSQL, MySQ
8350: 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e 64  L, Firebird, and
8360: 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d   Oracle.  Inform
8370: 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74  ix and.Microsoft
8380: 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c   SQL Server foll
8390: 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e 74  ow the other int
83a0: 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
83b0: 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e  he standard.</p>
83c0: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
83d0: 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49  ional IF NOT EXI
83e0: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72  STS clause is pr
83f0: 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65  esent and anothe
8400: 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68 65  r index.with the
8410: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61   same name alrea
8420: 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20  dy exists, then 
8430: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63  this command bec
8440: 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70  omes a no-op.</p
8450: 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20 61  >..<p>^Indexes a
8460: 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68 20  re removed with 
8470: 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d  the [DROP INDEX]
8480: 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a   command.</p>...
8490: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
84a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84e0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
84f0: 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72 65  EATE TABLE} {cre
8500: 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45 41  atetable} {{CREA
8510: 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75  TE TABLE}}..Recu
8520: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
8530: 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d  am create-table-
8540: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
8550: 54 68 65 20 22 43 52 45 41 54 45 20 54 41 42 4c  The "CREATE TABL
8560: 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  E" command is us
8570: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  ed to create a n
8580: 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20 53  ew table in an S
8590: 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65 2e  QLite .database.
85a0: 20 41 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   A CREATE TABLE 
85b0: 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69 65  command specifie
85c0: 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  s the following 
85d0: 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74 68  attributes of th
85e0: 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c 75  e.new table:..<u
85f0: 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65 20  l>.  <li><p>The 
8600: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20  name of the new 
8610: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
8620: 3e 20 54 68 65 20 64 61 74 61 62 61 73 65 20 69  > The database i
8630: 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65 77 20  n which the new 
8640: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
8650: 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65 20  . Tables may be 
8660: 0a 20 20 20 20 20 20 63 72 65 61 74 65 64 20 69  .      created i
8670: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
8680: 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61  ase, the temp da
8690: 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61 6e  tabase, or in an
86a0: 79 20 61 74 74 61 63 68 65 64 0a 20 20 20 20 20  y attached.     
86b0: 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c 6c   database...  <l
86c0: 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20 6f  i><p> The name o
86d0: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  f each column in
86e0: 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   the table...  <
86f0: 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c 61  li><p> The decla
8700: 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68  red type of each
8710: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74   column in the t
8720: 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  able...  <li><p>
8730: 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   A default value
8740: 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 66   or expression f
8750: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
8760: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20  n the table...  
8770: 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c  <li><p> A defaul
8780: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
8790: 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74 68  ence to use with
87a0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20   each column... 
87b0: 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61   <li><p> Optiona
87c0: 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20 4b  lly, a PRIMARY K
87d0: 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
87e0: 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63 6f  . Both single co
87f0: 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20 20  lumn and.       
8800: 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74 69  composite (multi
8810: 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69 6d  ple column) prim
8820: 61 72 79 20 6b 65 79 73 20 61 72 65 20 73 75 70  ary keys are sup
8830: 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c  ported...  <li><
8840: 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c 20  p> A set of SQL 
8850: 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20  constraints for 
8860: 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c 69  each table. SQLi
8870: 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49 51  te supports UNIQ
8880: 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20 4e  UE, NOT.       N
8890: 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20 46  ULL, CHECK and F
88a0: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
88b0: 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e 3c  raints...  <li><
88c0: 70 3e 20 57 68 65 74 68 65 72 20 74 68 65 20 74  p> Whether the t
88d0: 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f  able is a [WITHO
88e0: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e  UT ROWID] table.
88f0: 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79  .</ul>..<p>Every
8900: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
8910: 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70 65  atement must spe
8920: 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72 20  cify a name for 
8930: 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a 20  the new table.. 
8940: 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20 74   ^(Table names t
8950: 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22  hat begin with "
8960: 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65 73  sqlite_" are res
8970: 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e  erved for intern
8980: 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73 20  al use. It.  is 
8990: 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65  an error to atte
89a0: 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20  mpt to create a 
89b0: 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61 6d  table with a nam
89c0: 65 20 74 68 61 74 20 73 74 61 72 74 73 20 77 69  e that starts wi
89d0: 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e 29  th.  "sqlite_".)
89e0: 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 3c 79 79  ^..<p> ^If a <yy
89f0: 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
8a00: 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 73 70 65  </yyterm> is spe
8a10: 63 69 66 69 65 64 2c 20 69 74 20 6d 75 73 74 20  cified, it must 
8a20: 62 65 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22  be either "main"
8a30: 2c 20 0a 20 20 22 74 65 6d 70 22 2c 20 6f 72 20  , .  "temp", or 
8a40: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 5b  the name of an [
8a50: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7c  ATTACH DATABASE|
8a60: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
8a70: 65 5d 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  e]. ^In this cas
8a80: 65 0a 20 20 74 68 65 20 6e 65 77 20 74 61 62 6c  e.  the new tabl
8a90: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
8aa0: 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61  the named databa
8ab0: 73 65 2e 20 5e 49 66 20 74 68 65 20 22 54 45 4d  se. ^If the "TEM
8ac0: 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59  P" or "TEMPORARY
8ad0: 22 0a 20 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  ".  keyword occu
8ae0: 72 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 22  rs between the "
8af0: 43 52 45 41 54 45 22 20 61 6e 64 20 22 54 41 42  CREATE" and "TAB
8b00: 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e 65 77  LE" then the new
8b10: 20 74 61 62 6c 65 20 69 73 0a 20 20 63 72 65 61   table is.  crea
8b20: 74 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 20  ted in the temp 
8b30: 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20 69 73  database. ^It is
8b40: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65   an error to spe
8b50: 63 69 66 79 20 62 6f 74 68 20 61 20 0a 20 20 3c  cify both a .  <
8b60: 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61  yyterm>schema-na
8b70: 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20  me</yyterm> and 
8b80: 74 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50  the TEMP or TEMP
8b90: 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 2c 20 75  ORARY keyword, u
8ba0: 6e 6c 65 73 73 20 74 68 65 0a 20 20 3c 79 79 74  nless the.  <yyt
8bb0: 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
8bc0: 2f 79 79 74 65 72 6d 3e 20 69 73 20 22 74 65 6d  /yyterm> is "tem
8bd0: 70 22 2e 20 0a 20 20 5e 49 66 20 6e 6f 20 73 63  p". .  ^If no sc
8be0: 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65  hema name is spe
8bf0: 63 69 66 69 65 64 20 61 6e 64 20 74 68 65 0a 20  cified and the. 
8c00: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73   TEMP keyword is
8c10: 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 74 68 65   not present the
8c20: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  n the table is c
8c30: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61  reated in the ma
8c40: 69 6e 0a 20 20 64 61 74 61 62 61 73 65 2e 0a 0a  in.  database...
8c50: 3c 70 3e 0a 20 20 5e 49 74 20 69 73 20 75 73 75  <p>.  ^It is usu
8c60: 61 6c 6c 79 20 61 6e 20 65 72 72 6f 72 20 74 6f  ally an error to
8c70: 20 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61   attempt to crea
8c80: 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
8c90: 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61  n a database tha
8ca0: 74 0a 20 20 61 6c 72 65 61 64 79 20 63 6f 6e 74  t.  already cont
8cb0: 61 69 6e 73 20 61 20 74 61 62 6c 65 2c 20 69 6e  ains a table, in
8cc0: 64 65 78 20 6f 72 20 76 69 65 77 20 6f 66 20 74  dex or view of t
8cd0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 20 5e 48  he same name. ^H
8ce0: 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 0a 20  owever, if the. 
8cf0: 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22   "IF NOT EXISTS"
8d00: 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
8d10: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
8d20: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
8d30: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 0a 20   statement and. 
8d40: 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77   a table or view
8d50: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
8d60: 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  e already exists
8d70: 2c 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  , the CREATE TAB
8d80: 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20 20 73 69 6d  LE command.  sim
8d90: 70 6c 79 20 68 61 73 20 6e 6f 20 65 66 66 65 63  ply has no effec
8da0: 74 20 28 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  t (and no error 
8db0: 6d 65 73 73 61 67 65 20 69 73 20 72 65 74 75 72  message is retur
8dc0: 6e 65 64 29 2e 20 5e 41 6e 20 65 72 72 6f 72 20  ned). ^An error 
8dd0: 69 73 20 73 74 69 6c 6c 0a 20 20 72 65 74 75 72  is still.  retur
8de0: 6e 65 64 20 69 66 20 74 68 65 20 74 61 62 6c 65  ned if the table
8df0: 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74   cannot be creat
8e00: 65 64 20 62 65 63 61 75 73 65 20 6f 66 20 61 6e  ed because of an
8e10: 20 65 78 69 73 74 69 6e 67 20 69 6e 64 65 78 2c   existing index,
8e20: 20 65 76 65 6e 20 0a 20 20 69 66 20 74 68 65 20   even .  if the 
8e30: 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22 20  "IF NOT EXISTS" 
8e40: 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
8e50: 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20 69 73 20  ied...<p>^It is 
8e60: 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  not an error to 
8e70: 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 74  create a table t
8e80: 68 61 74 20 68 61 73 20 74 68 65 20 73 61 6d 65  hat has the same
8e90: 20 6e 61 6d 65 20 61 73 20 61 6e 20 0a 20 20 65   name as an .  e
8ea0: 78 69 73 74 69 6e 67 20 5b 43 52 45 41 54 45 20  xisting [CREATE 
8eb0: 54 52 49 47 47 45 52 7c 74 72 69 67 67 65 72 5d  TRIGGER|trigger]
8ec0: 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 61 72  ...<p>^Tables ar
8ed0: 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20  e removed using 
8ee0: 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  the [DROP TABLE]
8ef0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70   statement.  </p
8f00: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
8f10: 65 6e 74 20 63 72 65 61 74 65 74 61 62 61 73 20  ent createtabas 
8f20: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53  {CREATE TABLE AS
8f30: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 52 45 41  }</tcl>.<h3>CREA
8f40: 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20  TE TABLE ... AS 
8f50: 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e 74  SELECT Statement
8f60: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22  s</h3>..<p>^(A "
8f70: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
8f80: 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61 74   AS SELECT" stat
8f90: 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61 6e  ement creates an
8fa0: 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64 61  d populates a da
8fb0: 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61 73  tabase.table bas
8fc0: 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
8fd0: 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  s of a SELECT st
8fe0: 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65  atement.)^ ^(The
8ff0: 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20 73   table has the s
9000: 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f  ame.number of co
9010: 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f 77  lumns as the row
9020: 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s returned by th
9030: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
9040: 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 0a  nt. The name of.
9050: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74  each column is t
9060: 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e  he same as the n
9070: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ame of the corre
9080: 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20  sponding column 
9090: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73 65  in the result.se
90a0: 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  t of the SELECT 
90b0: 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54  statement.)^ ^(T
90c0: 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  he declared type
90d0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
90e0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79  is determined.by
90f0: 20 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f 6e   the [expression
9100: 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68   affinity] of th
9110: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
9120: 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
9130: 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66 20  e result set.of 
9140: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
9150: 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73  ment, as follows
9160: 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  :.</p>..<center>
9170: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e  <table border=1>
9180: 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72 65  .  <tr><th>Expre
9190: 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20 20  ssion Affinity  
91a0: 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c   <th>Column Decl
91b0: 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72 3e  ared Type.  <tr>
91c0: 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20 20 20  <td>TEXT        
91d0: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 54            <td>"T
91e0: 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e  EXT".  <tr><td>N
91f0: 55 4d 45 52 49 43 20 20 20 20 20 20 20 20 20 20  UMERIC          
9200: 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a 20       <td>"NUM". 
9210: 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45 52   <tr><td>INTEGER
9220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
9230: 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e 3c  td>"INT".  <tr><
9240: 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20 20  td>REAL         
9250: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52 45           <td>"RE
9260: 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 4f  AL".  <tr><td>NO
9270: 4e 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  NE              
9280: 20 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70 74      <td>"" (empt
9290: 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62 6c  y string).</tabl
92a0: 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c  e></center>)^..<
92b0: 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65 61  p>^(A table crea
92c0: 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
92d0: 20 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e 6f   TABLE AS has no
92e0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
92f0: 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20   no.constraints 
9300: 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68 65  of any kind. The
9310: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9320: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  f each column is
9330: 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61 75   NULL. The defau
9340: 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt.collation seq
9350: 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63  uence for each c
9360: 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77  olumn of the new
9370: 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59   table is BINARY
9380: 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20  .)^..<p>^Tables 
9390: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  created using CR
93a0: 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 61 72  EATE TABLE AS ar
93b0: 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70 75  e initially popu
93c0: 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 0a 72  lated with the.r
93d0: 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65 74 75  ows of data retu
93e0: 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
93f0: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 52  CT statement. ^R
9400: 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e 65 64  ows are assigned
9410: 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61 73   contiguously.as
9420: 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d 20  cending [rowid] 
9430: 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e 67  values, starting
9440: 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65 20   with 1, in the 
9450: 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72 5d  [order by|order]
9460: 20 74 68 61 74 20 74 68 65 79 0a 61 72 65 20 72   that they.are r
9470: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
9480: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
9490: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
94a0: 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66 7d  nt {tablecoldef}
94b0: 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   {column definit
94c0: 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66  ion} {column def
94d0: 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a  initions}</tcl>.
94e0: 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69 6e  <h3>Column Defin
94f0: 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  itions</h3>..<p>
9500: 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20 43  Unless it is a C
9510: 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20  REATE TABLE ... 
9520: 41 53 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  AS SELECT statem
9530: 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54 41  ent, a CREATE TA
9540: 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e 65  BLE includes.one
9550: 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e   or more [column
9560: 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66 69  -def|column defi
9570: 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e  nitions], option
9580: 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ally followed by
9590: 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62 6c   a list of.[tabl
95a0: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61 62  e-constraint|tab
95b0: 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e  le constraints].
95c0: 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65    Each column de
95d0: 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73 74  finition consist
95e0: 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f 66  s of the.name of
95f0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74   the column, opt
9600: 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64  ionally followed
9610: 20 62 79 20 74 68 65 20 64 65 63 6c 61 72 65 64   by the declared
9620: 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c   type of the col
9630: 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f 72  umn,.then one or
9640: 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 5b   more optional [
9650: 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e  column-constrain
9660: 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61  t|column constra
9670: 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64 20  ints]. Included 
9680: 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69 6f  in.the definitio
9690: 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e  n of "column con
96a0: 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74 68  straints" for th
96b0: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68  e purposes of th
96c0: 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74 65  e previous.state
96d0: 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f 4c  ment are the COL
96e0: 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c 54  LATE and DEFAULT
96f0: 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20 74   clauses, even t
9700: 68 6f 75 67 68 20 74 68 65 73 65 20 61 72 65 20  hough these are 
9710: 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73 74  not really.const
9720: 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73 65  raints in the se
9730: 6e 73 65 20 74 68 61 74 20 74 68 65 79 20 64 6f  nse that they do
9740: 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74 68   not restrict th
9750: 65 20 64 61 74 61 20 74 68 61 74 20 74 68 65 20  e data that the 
9760: 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61 69  table may.contai
9770: 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f 6e  n. The other con
9780: 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20 4e  straints - NOT N
9790: 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49 51  ULL, CHECK, UNIQ
97a0: 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20  UE, PRIMARY KEY 
97b0: 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59 20  and.FOREIGN KEY 
97c0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69 6d  constraints - im
97d0: 70 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f 6e  pose restriction
97e0: 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73 20  s on the tables 
97f0: 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61 72  data, and are ar
9800: 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64 65  e.described unde
9810: 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c 53  r [constraints|S
9820: 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69  QL Data Constrai
9830: 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e  nts] below...<p>
9840: 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c  ^Unlike most SQL
9850: 20 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69   databases, SQLi
9860: 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74  te does not rest
9870: 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f 66  rict the type of
9880: 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20 62   data that.may b
9890: 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  e inserted into 
98a0: 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f  a column based o
98b0: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65  n the columns de
98c0: 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e 73  clared type. Ins
98d0: 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73 65  tead,.SQLite use
98e0: 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e  s [dynamic typin
98f0: 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72 65  g]. ^The declare
9900: 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75  d type of a colu
9910: 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64 65  mn is used to.de
9920: 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66 66  termine the [aff
9930: 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f  inity] of the co
9940: 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 74 63 6c  lumn only...<tcl
9950: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 66 6c  >hd_fragment dfl
9960: 74 76 61 6c 20 7b 64 65 66 61 75 6c 74 20 63 6f  tval {default co
9970: 6c 75 6d 6e 20 76 61 6c 75 65 7d 20 7b 64 65 66  lumn value} {def
9980: 61 75 6c 74 20 76 61 6c 75 65 7d 3c 2f 74 63 6c  ault value}</tcl
9990: 3e 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54  >.<p>The DEFAULT
99a0: 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
99b0: 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  s a default valu
99c0: 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65  e to use for the
99d0: 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61   column if no.va
99e0: 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c  lue is explicitl
99f0: 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  y provided by th
9a00: 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e  e user when doin
9a10: 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e  g an [INSERT]. ^
9a20: 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65  If there.is no e
9a30: 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20  xplicit DEFAULT 
9a40: 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
9a50: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
9a60: 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nition, then the
9a70: 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20   .default value 
9a80: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  of the column is
9a90: 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c   NULL. ^(An expl
9aa0: 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61  icit DEFAULT cla
9ab0: 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a  use may specify.
9ac0: 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  that the default
9ad0: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
9ae0: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  a string constan
9af0: 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61  t, a blob consta
9b00: 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d  nt, a.signed-num
9b10: 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73  ber, or any cons
9b20: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
9b30: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65  enclosed in pare
9b40: 6e 74 68 65 73 65 73 2e 20 41 0a 64 65 66 61 75  ntheses. A.defau
9b50: 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73  lt value may als
9b60: 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  o be one of the 
9b70: 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64  special case-ind
9b80: 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f 72 64  ependent keyword
9b90: 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  s.CURRENT_TIME, 
9ba0: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20  CURRENT_DATE or 
9bb0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
9bc0: 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75  P.)^ ^For the pu
9bd0: 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a 44 45  rposes of the.DE
9be0: 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61 6e  FAULT clause, an
9bf0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63   expression is c
9c00: 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73 74 61  onsidered consta
9c10: 6e 74 20 69 66 20 69 74 20 64 6f 65 73 0a 63 6f  nt if it does.co
9c20: 6e 74 61 69 6e 73 20 6e 6f 20 73 75 62 2d 71 75  ntains no sub-qu
9c30: 65 72 69 65 73 2c 20 63 6f 6c 75 6d 6e 20 6f 72  eries, column or
9c40: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
9c50: 73 2c 20 5b 62 6f 75 6e 64 20 70 61 72 61 6d 65  s, [bound parame
9c60: 74 65 72 73 5d 2c 0a 6f 72 20 73 74 72 69 6e 67  ters],.or string
9c70: 20 6c 69 74 65 72 61 6c 73 20 65 6e 63 6c 6f 73   literals enclos
9c80: 65 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f  ed in double-quo
9c90: 74 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20 73  tes instead of s
9ca0: 69 6e 67 6c 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c  ingle-quotes...<
9cb0: 70 3e 5e 28 45 61 63 68 20 74 69 6d 65 20 61 20  p>^(Each time a 
9cc0: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
9cd0: 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  into the table b
9ce0: 79 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  y an INSERT stat
9cf0: 65 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f 65 73  ement that .does
9d00: 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70   not provide exp
9d10: 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72  licit values for
9d20: 20 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d   all table colum
9d30: 6e 73 20 74 68 65 20 76 61 6c 75 65 73 20 73 74  ns the values st
9d40: 6f 72 65 64 20 69 6e 0a 74 68 65 20 6e 65 77 20  ored in.the new 
9d50: 72 6f 77 20 61 72 65 20 64 65 74 65 72 6d 69 6e  row are determin
9d60: 65 64 20 62 79 20 74 68 65 69 72 20 64 65 66 61  ed by their defa
9d70: 75 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20 61 73  ult values)^, as
9d80: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a   follows:..<ul>.
9d90: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9da0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9db0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  f the column is 
9dc0: 61 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c  a constant NULL,
9dd0: 20 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72 0a 20   text, blob or. 
9de0: 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72     signed-number
9df0: 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61   value, then tha
9e00: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
9e10: 64 69 72 65 63 74 6c 79 20 69 6e 20 74 68 65 20  directly in the 
9e20: 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e  new row...  <li>
9e30: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
9e40: 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f  lt value of a co
9e50: 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
9e60: 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68  ssion in parenth
9e70: 65 73 65 73 2c 20 74 68 65 6e 0a 20 20 20 20 74  eses, then.    t
9e80: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
9e90: 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
9ea0: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73  for each row ins
9eb0: 65 72 74 65 64 20 61 6e 64 20 74 68 65 20 72 65  erted and the re
9ec0: 73 75 6c 74 73 0a 20 20 20 20 75 73 65 64 20 69  sults.    used i
9ed0: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a  n the new row...
9ee0: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9ef0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9f00: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 43 55  f a column is CU
9f10: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
9f20: 45 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20 20 20  ENT_DATE or.    
9f30: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
9f40: 50 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  P, then the valu
9f50: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65  e used in the ne
9f60: 77 20 72 6f 77 20 69 73 20 61 20 74 65 78 74 0a  w row is a text.
9f70: 20 20 20 20 72 65 70 72 65 73 65 6e 74 61 74 69      representati
9f80: 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  on of the curren
9f90: 74 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f  t UTC date and/o
9fa0: 72 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43 55 52  r time. ^For CUR
9fb0: 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 0a 20  RENT_TIME, the. 
9fc0: 20 20 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65     format of the
9fd0: 20 76 61 6c 75 65 20 69 73 20 22 48 48 3a 4d 4d   value is "HH:MM
9fe0: 3a 53 53 22 2e 20 5e 46 6f 72 20 43 55 52 52 45  :SS". ^For CURRE
9ff0: 4e 54 5f 44 41 54 45 2c 20 22 59 59 59 59 2d 4d  NT_DATE, "YYYY-M
a000: 4d 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20 20 20  M-DD". ^The.    
a010: 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45  format for CURRE
a020: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20  NT_TIMESTAMP is 
a030: 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  "YYYY-MM-DD HH:M
a040: 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  M:SS"..</ul>..<p
a050: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
a060: 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
a070: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b 63 6f  he name of a [co
a080: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
a090: 5d 20 74 6f 20 75 73 65 20 61 73 0a 74 68 65 20  ] to use as.the 
a0a0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
a0b0: 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74  n sequence for t
a0c0: 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e  he column. ^If n
a0d0: 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  o COLLATE clause
a0e0: 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
a0f0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
a100: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
a110: 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e   [BINARY]...<p>^
a120: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
a130: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
a140: 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74   is limited by t
a150: 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43  he [SQLITE_MAX_C
a160: 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74  OLUMN].compile-t
a170: 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 20 5e  ime parameter. ^
a180: 41 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  A single row of 
a190: 61 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73  a table cannot s
a1a0: 74 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b  tore more than.[
a1b0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
a1c0: 48 5d 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  H] bytes of data
a1d0: 2e 20 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65  . ^Both of these
a1e0: 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c   limits can be l
a1f0: 6f 77 65 72 65 64 20 61 74 0a 72 75 6e 74 69 6d  owered at.runtim
a200: 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  e using the [sql
a210: 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f  ite3_limit()] C/
a220: 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  C++ interface.</
a230: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
a240: 6d 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69 6e 74  ment {constraint
a250: 73 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d  s} {constraints}
a260: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44  </tcl>.<h3>SQL D
a270: 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74 73 3c  ata Constraints<
a280: 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /h3>..<tcl>hd_fr
a290: 61 67 6d 65 6e 74 20 70 72 69 6d 6b 65 79 63 6f  agment primkeyco
a2a0: 6e 73 74 20 7b 50 52 49 4d 41 52 59 20 4b 45 59  nst {PRIMARY KEY
a2b0: 7d 20 7b 50 52 49 4d 41 52 59 20 4b 45 59 20 63  } {PRIMARY KEY c
a2c0: 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e  onstraint}</tcl>
a2d0: 0a 3c 70 3e 5e 45 61 63 68 20 74 61 62 6c 65 20  .<p>^Each table 
a2e0: 69 6e 20 53 51 4c 69 74 65 20 6d 61 79 20 68 61  in SQLite may ha
a2f0: 76 65 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 3c  ve at most one <
a300: 62 3e 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 62  b>PRIMARY KEY</b
a310: 3e 2e 20 5e 49 66 20 74 68 65 0a 20 20 6b 65 79  >. ^If the.  key
a320: 77 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45  words PRIMARY KE
a330: 59 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  Y are added to a
a340: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
a350: 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69  on, then the pri
a360: 6d 61 72 79 20 6b 65 79 0a 20 20 66 6f 72 20 74  mary key.  for t
a370: 68 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74  he table consist
a380: 73 20 6f 66 20 74 68 61 74 20 73 69 6e 67 6c 65  s of that single
a390: 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66   column. ^Or, if
a3a0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
a3b0: 6c 61 75 73 65 20 0a 20 20 69 73 20 73 70 65 63  lause .  is spec
a3c0: 69 66 69 65 64 20 61 73 20 61 20 5b 74 61 62 6c  ified as a [tabl
a3d0: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74  e-constraint], t
a3e0: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
a3f0: 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
a400: 0a 20 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  .  consists of t
a410: 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  he list of colum
a420: 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ns specified as 
a430: 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d  part of the PRIM
a440: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a  ARY KEY clause..
a450: 20 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b    ^The PRIMARY K
a460: 45 59 20 63 6c 61 75 73 65 20 6d 75 73 74 20 63  EY clause must c
a470: 6f 6e 74 61 69 6e 20 6f 6e 6c 79 20 63 6f 6c 75  ontain only colu
a480: 6d 6e 20 6e 61 6d 65 73 20 26 6d 64 61 73 68 3b  mn names &mdash;
a490: 20 74 68 65 20 75 73 65 20 6f 66 20 0a 20 20 65   the use of .  e
a4a0: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e  xpressions in an
a4b0: 20 5b 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e   [indexed-column
a4c0: 5d 20 6f 66 20 61 20 50 52 49 4d 41 52 59 20 4b  ] of a PRIMARY K
a4d0: 45 59 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72  EY is not suppor
a4e0: 74 65 64 2e 0a 20 20 5e 41 6e 20 65 72 72 6f 72  ted..  ^An error
a4f0: 20 69 73 20 72 61 69 73 65 64 20 69 66 20 6d 6f   is raised if mo
a500: 72 65 20 74 68 61 6e 20 6f 6e 65 20 50 52 49 4d  re than one PRIM
a510: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61  ARY KEY clause a
a520: 70 70 65 61 72 73 20 69 6e 20 61 0a 20 20 43 52  ppears in a.  CR
a530: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
a540: 6d 65 6e 74 2e 20 20 5e 54 68 65 20 50 52 49 4d  ment.  ^The PRIM
a550: 41 52 59 20 4b 45 59 20 69 73 20 6f 70 74 69 6f  ARY KEY is optio
a560: 6e 61 6c 20 66 6f 72 20 6f 72 64 69 6e 61 72 79  nal for ordinary
a570: 20 74 61 62 6c 65 73 0a 20 20 62 75 74 20 69 73   tables.  but is
a580: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 5b 57   required for [W
a590: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
a5a0: 62 6c 65 73 2e 0a 0a 3c 70 3e 49 66 20 61 20 74  bles...<p>If a t
a5b0: 61 62 6c 65 20 68 61 73 20 61 20 73 69 6e 67 6c  able has a singl
a5c0: 65 20 63 6f 6c 75 6d 6e 20 70 72 69 6d 61 72 79  e column primary
a5d0: 20 6b 65 79 20 61 6e 64 20 74 68 65 20 64 65 63   key and the dec
a5e0: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68  lared type of th
a5f0: 61 74 0a 20 20 63 6f 6c 75 6d 6e 20 69 73 20 22  at.  column is "
a600: 49 4e 54 45 47 45 52 22 20 61 6e 64 20 74 68 65  INTEGER" and the
a610: 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 61 20   table is not a 
a620: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
a630: 74 61 62 6c 65 2c 0a 20 20 74 68 65 6e 20 74 68  table,.  then th
a640: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77  e column is know
a650: 6e 20 61 73 20 61 6e 20 5b 49 4e 54 45 47 45 52  n as an [INTEGER
a660: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20   PRIMARY KEY].. 
a670: 20 53 65 65 20 5b 72 6f 77 69 64 7c 62 65 6c 6f   See [rowid|belo
a680: 77 5d 20 66 6f 72 20 61 20 64 65 73 63 72 69 70  w] for a descrip
a690: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 70 65 63  tion of the spec
a6a0: 69 61 6c 20 70 72 6f 70 65 72 74 69 65 73 20 61  ial properties a
a6b0: 6e 64 20 62 65 68 61 76 69 6f 72 73 0a 20 20 61  nd behaviors.  a
a6c0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a6d0: 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n [INTEGER PRIMA
a6e0: 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e 45 61  RY KEY]...<p>^Ea
a6f0: 63 68 20 72 6f 77 20 69 6e 20 61 20 74 61 62 6c  ch row in a tabl
a700: 65 20 77 69 74 68 20 61 20 70 72 69 6d 61 72 79  e with a primary
a710: 20 6b 65 79 20 6d 75 73 74 20 68 61 76 65 20 61   key must have a
a720: 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
a730: 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73 20  ion.  of values 
a740: 69 6e 20 69 74 73 20 70 72 69 6d 61 72 79 20 6b  in its primary k
a750: 65 79 20 63 6f 6c 75 6d 6e 73 2e 20 5e 46 6f 72  ey columns. ^For
a760: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
a770: 20 64 65 74 65 72 6d 69 6e 69 6e 67 0a 20 20 74   determining.  t
a780: 68 65 20 75 6e 69 71 75 65 6e 65 73 73 20 6f 66  he uniqueness of
a790: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c   primary key val
a7a0: 75 65 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ues, NULL values
a7b0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
a7c0: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 0a 20 20  distinct from.  
a7d0: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
a7e0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65  , including othe
a7f0: 72 20 4e 55 4c 4c 73 2e 20 5e 49 66 20 61 6e 20  r NULLs. ^If an 
a800: 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44  [INSERT] or [UPD
a810: 41 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ATE].  statement
a820: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64   attempts to mod
a830: 69 66 79 20 74 68 65 20 74 61 62 6c 65 20 63 6f  ify the table co
a840: 6e 74 65 6e 74 20 73 6f 20 74 68 61 74 20 74 77  ntent so that tw
a850: 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 0a 20  o or more rows. 
a860: 20 68 61 76 65 20 69 64 65 6e 74 69 63 61 6c 20   have identical 
a870: 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75  primary key valu
a880: 65 73 2c 20 74 68 61 74 20 69 73 20 61 20 63 6f  es, that is a co
a890: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
a8a0: 6f 6e 2e 0a 0a 3c 70 3e 20 41 63 63 6f 72 64 69  on...<p> Accordi
a8b0: 6e 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74  ng to the SQL st
a8c0: 61 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20  andard, PRIMARY 
a8d0: 4b 45 59 20 73 68 6f 75 6c 64 20 61 6c 77 61 79  KEY should alway
a8e0: 73 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c  s imply NOT NULL
a8f0: 2e 0a 20 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c  ..  Unfortunatel
a900: 79 2c 20 64 75 65 20 74 6f 20 61 20 62 75 67 20  y, due to a bug 
a910: 69 6e 20 73 6f 6d 65 20 65 61 72 6c 79 20 76 65  in some early ve
a920: 72 73 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20  rsions, this is 
a930: 6e 6f 74 20 74 68 65 0a 20 20 63 61 73 65 20 69  not the.  case i
a940: 6e 20 53 51 4c 69 74 65 2e 20 5e 55 6e 6c 65 73  n SQLite. ^Unles
a950: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  s the column is 
a960: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
a970: 41 52 59 20 4b 45 59 5d 20 6f 72 0a 20 20 74 68  ARY KEY] or.  th
a980: 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49  e table is a [WI
a990: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
a9a0: 6c 65 20 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  le or the column
a9b0: 20 69 73 20 64 65 63 6c 61 72 65 64 20 4e 4f 54   is declared NOT
a9c0: 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c 69 74 65 20   NULL,.  SQLite 
a9d0: 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75  allows NULL valu
a9e0: 65 73 20 69 6e 20 61 20 50 52 49 4d 41 52 59 20  es in a PRIMARY 
a9f0: 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c  KEY column.  SQL
aa00: 69 74 65 20 63 6f 75 6c 64 20 62 65 20 66 69 78  ite could be fix
aa10: 65 64 20 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20  ed to.  conform 
aa20: 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 2c  to the standard,
aa30: 20 62 75 74 20 64 6f 69 6e 67 20 73 6f 20 6d 69   but doing so mi
aa40: 67 68 74 20 62 72 65 61 6b 20 6c 65 67 61 63 79  ght break legacy
aa50: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20   applications.. 
aa60: 20 48 65 6e 63 65 2c 20 69 74 20 68 61 73 20 62   Hence, it has b
aa70: 65 65 6e 20 64 65 63 69 64 65 64 20 74 6f 20 6d  een decided to m
aa80: 65 72 65 6c 79 20 64 6f 63 75 6d 65 6e 74 20 74  erely document t
aa90: 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c  he fact that SQL
aaa0: 69 74 65 0a 20 20 61 6c 6c 6f 77 69 6e 67 20 4e  ite.  allowing N
aab0: 55 4c 4c 73 20 69 6e 20 6d 6f 73 74 20 50 52 49  ULLs in most PRI
aac0: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
aad0: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
aae0: 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e 73 74 20  ent uniqueconst 
aaf0: 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69 71 75 65  {UNIQUE} {unique
ab00: 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 55 4e   constraint} {UN
ab10: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 7d  IQUE constraint}
ab20: 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e  </tcl>.<p>^A <b>
ab30: 55 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74  UNIQUE</b> const
ab40: 72 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72  raint is similar
ab50: 20 74 6f 20 61 20 50 52 49 4d 41 52 59 20 4b 45   to a PRIMARY KE
ab60: 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78  Y constraint, ex
ab70: 63 65 70 74 0a 20 20 74 68 61 74 20 61 20 73 69  cept.  that a si
ab80: 6e 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68  ngle table may h
ab90: 61 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f  ave any number o
aba0: 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  f UNIQUE constra
abb0: 69 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a  ints. ^For each.
abc0: 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61    UNIQUE constra
abd0: 69 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c 65  int on the table
abe0: 2c 20 65 61 63 68 20 72 6f 77 20 6d 75 73 74 20  , each row must 
abf0: 63 6f 6e 74 61 69 6e 20 61 20 75 6e 69 71 75 65  contain a unique
ac00: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f   combination.  o
ac10: 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  f values in the 
ac20: 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69  columns identifi
ac30: 65 64 20 62 79 20 74 68 65 20 55 4e 49 51 55 45  ed by the UNIQUE
ac40: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 20 20   constraint. .  
ac50: 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
ac60: 73 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73  s of UNIQUE cons
ac70: 74 72 61 69 6e 74 73 2c 20 4e 55 4c 4c 20 76 61  traints, NULL va
ac80: 6c 75 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69  lues.  are consi
ac90: 64 65 72 65 64 20 64 69 73 74 69 6e 63 74 20 66  dered distinct f
aca0: 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61  rom all other va
acb0: 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20  lues, including 
acc0: 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 0a 20 20 5e  other NULLs..  ^
acd0: 41 73 20 77 69 74 68 20 50 52 49 4d 41 52 59 20  As with PRIMARY 
ace0: 4b 45 59 73 2c 20 61 20 55 4e 49 51 55 45 20 5b  KEYs, a UNIQUE [
acf0: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
ad00: 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20 63 6f  ] clause must co
ad10: 6e 74 61 69 6e 0a 20 20 6f 6e 6c 79 20 63 6f 6c  ntain.  only col
ad20: 75 6d 6e 20 6e 61 6d 65 73 20 26 6d 64 61 73 68  umn names &mdash
ad30: 3b 20 74 68 65 20 75 73 65 20 6f 66 20 0a 20 20  ; the use of .  
ad40: 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
ad50: 6e 20 5b 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d  n [indexed-colum
ad60: 6e 5d 20 6f 66 20 61 20 55 4e 49 51 55 45 20 5b  n] of a UNIQUE [
ad70: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
ad80: 5d 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  ].  is not suppo
ad90: 72 74 65 64 2e 0a 20 20 0a 0a 3c 70 3e 5e 49 6e  rted..  ..<p>^In
ada0: 20 6d 6f 73 74 20 63 61 73 65 73 2c 20 55 4e 49   most cases, UNI
adb0: 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20  QUE and PRIMARY 
adc0: 4b 45 59 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74  KEY.  constraint
add0: 73 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65  s are implemente
ade0: 64 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 20  d by creating a 
adf0: 75 6e 69 71 75 65 20 69 6e 64 65 78 20 69 6e 20  unique index in 
ae00: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
ae10: 28 54 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20  (The exceptions 
ae20: 61 72 65 20 5b 49 4e 54 45 47 45 52 20 50 52 49  are [INTEGER PRI
ae30: 4d 41 52 59 20 4b 45 59 5d 20 61 6e 64 20 50 52  MARY KEY] and PR
ae40: 49 4d 41 52 59 20 4b 45 59 73 20 6f 6e 20 0a 20  IMARY KEYs on . 
ae50: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
ae60: 20 74 61 62 6c 65 73 2e 29 0a 20 20 48 65 6e 63   tables.).  Henc
ae70: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e, the following
ae80: 20 73 63 68 65 6d 61 73 20 61 72 65 20 6c 6f 67   schemas are log
ae90: 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e  ically equivalen
aea0: 74 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69  t:..  <ol>.  <li
aeb0: 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45  ><p>CREATE TABLE
aec0: 20 74 31 28 61 2c 20 62 20 55 4e 49 51 55 45 29   t1(a, b UNIQUE)
aed0: 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54  ;.  <li><p>CREAT
aee0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20  E TABLE t1(a, b 
aef0: 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20  PRIMARY KEY);.  
af00: 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41  <li><p>CREATE TA
af10: 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 3c 62 72  BLE t1(a, b);<br
af20: 3e 0a 20 20 20 20 20 20 20 20 20 43 52 45 41 54  >.         CREAT
af30: 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74  E UNIQUE INDEX t
af40: 31 62 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 3c  1b ON t1(b);.  <
af50: 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /ol>..<tcl>hd_fr
af60: 61 67 6d 65 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d  agment {ckconst}
af70: 20 7b 43 48 45 43 4b 7d 20 7b 43 48 45 43 4b 20   {CHECK} {CHECK 
af80: 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 43 48 45  constraint} {CHE
af90: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c  CK constraints}<
afa0: 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e  /tcl>.<p>^(A <b>
afb0: 43 48 45 43 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72  CHECK</b> constr
afc0: 61 69 6e 74 20 6d 61 79 20 62 65 20 61 74 74 61  aint may be atta
afd0: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
afe0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 0a 20   definition or. 
aff0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20   specified as a 
b000: 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  table constraint
b010: 2e 20 49 6e 20 70 72 61 63 74 69 63 65 20 69 74  . In practice it
b020: 20 6d 61 6b 65 73 20 6e 6f 20 64 69 66 66 65 72   makes no differ
b030: 65 6e 63 65 2e 29 5e 20 5e 28 45 61 63 68 0a 20  ence.)^ ^(Each. 
b040: 20 74 69 6d 65 20 61 20 6e 65 77 20 72 6f 77 20   time a new row 
b050: 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
b060: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 61 6e   the table or an
b070: 20 65 78 69 73 74 69 6e 67 20 72 6f 77 20 69 73   existing row is
b080: 20 75 70 64 61 74 65 64 2c 0a 20 20 74 68 65 20   updated,.  the 
b090: 65 78 70 72 65 73 73 69 6f 6e 20 61 73 73 6f 63  expression assoc
b0a0: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
b0b0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
b0c0: 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e   is evaluated an
b0d0: 64 0a 20 20 63 61 73 74 20 74 6f 20 61 20 4e 55  d.  cast to a NU
b0e0: 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74  MERIC value in t
b0f0: 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61  he same way as a
b100: 20 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f   [CAST expressio
b110: 6e 5d 2e 20 49 66 20 74 68 65 20 0a 20 20 72 65  n]. If the .  re
b120: 73 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e  sult is zero (in
b130: 74 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72  teger value 0 or
b140: 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30 29   real value 0.0)
b150: 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  , then a constra
b160: 69 6e 74 0a 20 20 76 69 6f 6c 61 74 69 6f 6e 20  int.  violation 
b170: 68 61 73 20 6f 63 63 75 72 72 65 64 2e 29 5e 20  has occurred.)^ 
b180: 5e 49 66 20 74 68 65 20 43 48 45 43 4b 20 65 78  ^If the CHECK ex
b190: 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
b1a0: 65 73 20 74 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20  es to NULL, or. 
b1b0: 20 61 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a   any other non-z
b1c0: 65 72 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73  ero value, it is
b1d0: 20 6e 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e   not a constrain
b1e0: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e  t violation..  ^
b1f0: 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  The expression o
b200: 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  f a CHECK constr
b210: 61 69 6e 74 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  aint may not con
b220: 74 61 69 6e 20 61 20 73 75 62 71 75 65 72 79 2e  tain a subquery.
b230: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
b240: 6e 74 20 7b 6e 6f 74 6e 75 6c 6c 63 6f 6e 73 74  nt {notnullconst
b250: 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 7d 20 7b 4e 4f  } {NOT NULL} {NO
b260: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
b270: 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c  t}</tcl>.<p>^A <
b280: 62 3e 4e 4f 54 20 4e 55 4c 4c 3c 2f 62 3e 20 63  b>NOT NULL</b> c
b290: 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 6f 6e  onstraint may on
b2a0: 6c 79 20 62 65 20 61 74 74 61 63 68 65 64 20 74  ly be attached t
b2b0: 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  o a column defin
b2c0: 69 74 69 6f 6e 2c 0a 20 20 6e 6f 74 20 73 70 65  ition,.  not spe
b2d0: 63 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c  cified as a tabl
b2e0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 20 4e  e constraint.  N
b2f0: 6f 74 20 73 75 72 70 72 69 73 69 6e 67 6c 79 2c  ot surprisingly,
b300: 20 5e 28 61 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20   ^(a NOT NULL.  
b310: 63 6f 6e 73 74 72 61 69 6e 74 20 64 69 63 74 61  constraint dicta
b320: 74 65 73 20 74 68 61 74 20 74 68 65 20 61 73 73  tes that the ass
b330: 6f 63 69 61 74 65 64 20 63 6f 6c 75 6d 6e 20 6d  ociated column m
b340: 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ay not contain a
b350: 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 0a 20 20 41   NULL value..  A
b360: 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 65 74  ttempting to set
b370: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
b380: 65 20 74 6f 20 4e 55 4c 4c 20 77 68 65 6e 20 69  e to NULL when i
b390: 6e 73 65 72 74 69 6e 67 20 61 20 6e 65 77 20 72  nserting a new r
b3a0: 6f 77 20 6f 72 0a 20 20 75 70 64 61 74 69 6e 67  ow or.  updating
b3b0: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6f 6e 65   an existing one
b3c0: 20 63 61 75 73 65 73 20 61 20 63 6f 6e 73 74 72   causes a constr
b3d0: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 29  aint violation.)
b3e0: 5e 0a 0a 3c 70 3e 45 78 61 63 74 6c 79 20 68 6f  ^..<p>Exactly ho
b3f0: 77 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  w a constraint v
b400: 69 6f 6c 61 74 69 6f 6e 20 69 73 20 64 65 61 6c  iolation is deal
b410: 74 20 77 69 74 68 20 69 73 20 64 65 74 65 72 6d  t with is determ
b420: 69 6e 65 64 20 62 79 20 74 68 65 0a 20 20 5b 63  ined by the.  [c
b430: 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7c 63  onflict clause|c
b440: 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
b450: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
b460: 67 6f 72 69 74 68 6d 5d 2e 20 45 61 63 68 20 0a  gorithm]. Each .
b470: 20 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55    PRIMARY KEY, U
b480: 4e 49 51 55 45 2c 20 4e 4f 54 20 4e 55 4c 4c 20  NIQUE, NOT NULL 
b490: 61 6e 64 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  and CHECK constr
b4a0: 61 69 6e 74 20 68 61 73 20 61 20 64 65 66 61 75  aint has a defau
b4b0: 6c 74 20 63 6f 6e 66 6c 69 63 74 0a 20 20 72 65  lt conflict.  re
b4c0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
b4d0: 68 6d 2e 20 5e 50 52 49 4d 41 52 59 20 4b 45 59  hm. ^PRIMARY KEY
b4e0: 2c 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  , UNIQUE and NOT
b4f0: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
b500: 73 20 6d 61 79 20 62 65 0a 20 20 65 78 70 6c 69  s may be.  expli
b510: 63 69 74 6c 79 20 61 73 73 69 67 6e 65 64 20 61  citly assigned a
b520: 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
b530: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
b540: 6f 72 69 74 68 6d 20 62 79 20 69 6e 63 6c 75 64  orithm by includ
b550: 69 6e 67 0a 20 20 61 20 5b 63 6f 6e 66 6c 69 63  ing.  a [conflic
b560: 74 2d 63 6c 61 75 73 65 5d 20 69 6e 20 74 68 65  t-clause] in the
b570: 69 72 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20  ir definitions. 
b580: 5e 4f 72 2c 20 69 66 20 61 20 63 6f 6e 73 74 72  ^Or, if a constr
b590: 61 69 6e 74 20 64 65 66 69 6e 69 74 69 6f 6e 0a  aint definition.
b5a0: 20 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75    does not inclu
b5b0: 64 65 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63  de a [conflict-c
b5c0: 6c 61 75 73 65 5d 20 6f 72 20 69 74 20 69 73 20  lause] or it is 
b5d0: 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
b5e0: 6e 74 2c 20 74 68 65 20 64 65 66 61 75 6c 74 0a  nt, the default.
b5f0: 20 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c    conflict resol
b600: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
b610: 69 73 20 41 42 4f 52 54 2e 20 5e 44 69 66 66 65  is ABORT. ^Diffe
b620: 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  rent constraints
b630: 20 77 69 74 68 69 6e 20 74 68 65 0a 20 20 73 61   within the.  sa
b640: 6d 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76  me table may hav
b650: 65 20 64 69 66 66 65 72 65 6e 74 20 64 65 66 61  e different defa
b660: 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
b670: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
b680: 6d 73 2e 20 53 65 65 0a 20 20 74 68 65 20 73 65  ms. See.  the se
b690: 63 74 69 6f 6e 20 74 69 74 6c 65 64 20 5b 4f 4e  ction titled [ON
b6a0: 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61   CONFLICT] for a
b6b0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
b6c0: 61 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ation...<tcl>hd_
b6d0: 66 72 61 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b  fragment rowid {
b6e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
b6f0: 4b 45 59 7d 20 52 4f 57 49 44 20 72 6f 77 69 64  KEY} ROWID rowid
b700: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44  </tcl>.<h3>ROWID
b710: 73 20 61 6e 64 20 74 68 65 20 49 4e 54 45 47 45  s and the INTEGE
b720: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68  R PRIMARY KEY</h
b730: 33 3e 0a 0a 3c 70 3e 5e 45 78 63 65 70 74 20 66  3>..<p>^Except f
b740: 6f 72 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49  or [WITHOUT ROWI
b750: 44 5d 20 74 61 62 6c 65 73 2c 20 61 6c 6c 20 72  D] tables, all r
b760: 6f 77 73 20 77 69 74 68 69 6e 20 53 51 4c 69 74  ows within SQLit
b770: 65 20 74 61 62 6c 65 73 0a 68 61 76 65 20 61 20  e tables.have a 
b780: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
b790: 74 65 67 65 72 20 6b 65 79 20 74 68 61 74 20 75  teger key that u
b7a0: 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69  niquely identifi
b7b0: 65 73 20 74 68 65 20 72 6f 77 20 77 69 74 68 69  es the row withi
b7c0: 6e 20 69 74 73 20 74 61 62 6c 65 2e 0a 54 68 69  n its table..Thi
b7d0: 73 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 75  s integer is usu
b7e0: 61 6c 6c 79 0a 63 61 6c 6c 65 64 20 74 68 65 20  ally.called the 
b7f0: 22 72 6f 77 69 64 22 2e 20 5e 54 68 65 20 72 6f  "rowid". ^The ro
b800: 77 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62 65  wid value can be
b810: 20 61 63 63 65 73 73 65 64 20 75 73 69 6e 67 20   accessed using 
b820: 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  one of the speci
b830: 61 6c 0a 63 61 73 65 2d 69 6e 64 65 70 65 6e 64  al.case-independ
b840: 65 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77 69 64  ent names "rowid
b850: 22 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f 72  ", "oid", or "_r
b860: 6f 77 69 64 5f 22 20 69 6e 20 70 6c 61 63 65 20  owid_" in place 
b870: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
b880: 2e 0a 5e 49 66 20 61 20 74 61 62 6c 65 20 63 6f  ..^If a table co
b890: 6e 74 61 69 6e 73 20 61 20 75 73 65 72 20 64 65  ntains a user de
b8a0: 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  fined column nam
b8b0: 65 64 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64  ed "rowid", "oid
b8c0: 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 2c 0a  " or "_rowid_",.
b8d0: 74 68 65 6e 20 74 68 61 74 20 6e 61 6d 65 20 61  then that name a
b8e0: 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 68 65  lways refers the
b8f0: 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c   explicitly decl
b900: 61 72 65 64 20 63 6f 6c 75 6d 6e 20 61 6e 64 20  ared column and 
b910: 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 0a 74  cannot be used.t
b920: 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20 69  o retrieve the i
b930: 6e 74 65 67 65 72 20 72 6f 77 69 64 20 76 61 6c  nteger rowid val
b940: 75 65 2e 0a 0a 3c 70 3e 54 68 65 20 72 6f 77 69  ue...<p>The rowi
b950: 64 20 28 61 6e 64 20 22 6f 69 64 22 20 61 6e 64  d (and "oid" and
b960: 20 22 5f 72 6f 77 69 64 5f 22 29 20 69 73 20 6f   "_rowid_") is o
b970: 6d 69 74 74 65 64 20 69 6e 20 5b 57 49 54 48 4f  mitted in [WITHO
b980: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
b990: 2e 0a 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  ..WITHOUT ROWID 
b9a0: 74 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  tables are only 
b9b0: 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 53 51 4c  available in SQL
b9c0: 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 38  ite [version 3.8
b9d0: 2e 32 5d 20 61 6e 64 20 6c 61 74 65 72 2e 0a 41  .2] and later..A
b9e0: 20 74 61 62 6c 65 20 74 68 61 74 20 6c 61 63 6b   table that lack
b9f0: 73 20 74 68 65 20 57 49 54 48 4f 55 54 20 52 4f  s the WITHOUT RO
ba00: 57 49 44 20 63 6c 61 75 73 65 20 69 73 20 63 61  WID clause is ca
ba10: 6c 6c 65 64 20 61 20 22 72 6f 77 69 64 20 74 61  lled a "rowid ta
ba20: 62 6c 65 22 2e 0a 0a 3c 70 3e 54 68 65 20 64 61  ble"...<p>The da
ba30: 74 61 20 66 6f 72 20 72 6f 77 69 64 20 74 61 62  ta for rowid tab
ba40: 6c 65 73 20 69 73 20 73 74 6f 72 65 64 20 61 73  les is stored as
ba50: 20 61 20 42 2d 54 72 65 65 20 73 74 72 75 63 74   a B-Tree struct
ba60: 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 6f  ure containing.o
ba70: 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
ba80: 68 20 74 61 62 6c 65 20 72 6f 77 2c 20 75 73 69  h table row, usi
ba90: 6e 67 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c  ng the rowid val
baa0: 75 65 20 61 73 20 74 68 65 20 6b 65 79 2e 20 54  ue as the key. T
bab0: 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 0a 72  his means that.r
bac0: 65 74 72 69 65 76 69 6e 67 20 6f 72 20 73 6f 72  etrieving or sor
bad0: 74 69 6e 67 20 72 65 63 6f 72 64 73 20 62 79 20  ting records by 
bae0: 72 6f 77 69 64 20 69 73 20 66 61 73 74 2e 20 53  rowid is fast. S
baf0: 65 61 72 63 68 69 6e 67 20 66 6f 72 20 61 20 72  earching for a r
bb00: 65 63 6f 72 64 20 77 69 74 68 20 61 0a 73 70 65  ecord with a.spe
bb10: 63 69 66 69 63 20 72 6f 77 69 64 2c 20 6f 72 20  cific rowid, or 
bb20: 66 6f 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20  for all records 
bb30: 77 69 74 68 20 72 6f 77 69 64 73 20 77 69 74 68  with rowids with
bb40: 69 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 72  in a specified r
bb50: 61 6e 67 65 20 69 73 0a 61 72 6f 75 6e 64 20 74  ange is.around t
bb60: 77 69 63 65 20 61 73 20 66 61 73 74 20 61 73 20  wice as fast as 
bb70: 61 20 73 69 6d 69 6c 61 72 20 73 65 61 72 63 68  a similar search
bb80: 20 6d 61 64 65 20 62 79 20 73 70 65 63 69 66 79   made by specify
bb90: 69 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 50 52  ing any other PR
bba0: 49 4d 41 52 59 0a 4b 45 59 20 6f 72 20 69 6e 64  IMARY.KEY or ind
bbb0: 65 78 65 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e  exed value...<p>
bbc0: 20 5e 57 69 74 68 20 6f 6e 65 20 65 78 63 65 70   ^With one excep
bbd0: 74 69 6f 6e 20 6e 6f 74 65 64 20 62 65 6c 6f 77  tion noted below
bbe0: 2c 20 69 66 20 61 20 72 6f 77 69 64 20 74 61 62  , if a rowid tab
bbf0: 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
bc00: 20 6b 65 79 20 74 68 61 74 20 63 6f 6e 73 69 73   key that consis
bc10: 74 73 0a 6f 66 20 61 20 73 69 6e 67 6c 65 20 63  ts.of a single c
bc20: 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20 64 65  olumn and the de
bc30: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
bc40: 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49  hat column is "I
bc50: 4e 54 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d  NTEGER" in any m
bc60: 69 78 74 75 72 65 20 6f 66 0a 75 70 70 65 72 20  ixture of.upper 
bc70: 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 2c 20  and lower case, 
bc80: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
bc90: 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
bca0: 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20   for the rowid. 
bcb0: 53 75 63 68 20 61 0a 63 6f 6c 75 6d 6e 20 69 73  Such a.column is
bcc0: 20 75 73 75 61 6c 6c 79 20 72 65 66 65 72 72 65   usually referre
bcd0: 64 20 74 6f 20 61 73 20 61 6e 20 22 69 6e 74 65  d to as an "inte
bce0: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 22  ger primary key"
bcf0: 2e 20 41 20 50 52 49 4d 41 52 59 20 4b 45 59 20  . A PRIMARY KEY 
bd00: 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f  column.only beco
bd10: 6d 65 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70  mes an integer p
bd20: 72 69 6d 61 72 79 20 6b 65 79 20 69 66 20 74 68  rimary key if th
bd30: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
bd40: 6e 61 6d 65 20 69 73 20 65 78 61 63 74 6c 79 0a  name is exactly.
bd50: 22 49 4e 54 45 47 45 52 22 2e 20 20 5e 4f 74 68  "INTEGER".  ^Oth
bd60: 65 72 20 69 6e 74 65 67 65 72 20 74 79 70 65 20  er integer type 
bd70: 6e 61 6d 65 73 20 6c 69 6b 65 20 22 49 4e 54 22  names like "INT"
bd80: 20 6f 72 20 22 42 49 47 49 4e 54 22 20 6f 72 20   or "BIGINT" or 
bd90: 22 53 48 4f 52 54 20 49 4e 54 45 47 45 52 22 0a  "SHORT INTEGER".
bda0: 6f 72 20 22 55 4e 53 49 47 4e 45 44 20 49 4e 54  or "UNSIGNED INT
bdb0: 45 47 45 52 22 20 63 61 75 73 65 73 20 74 68 65  EGER" causes the
bdc0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
bdd0: 75 6d 6e 20 74 6f 20 62 65 68 61 76 65 20 61 73  umn to behave as
bde0: 20 61 6e 20 6f 72 64 69 6e 61 72 79 0a 74 61 62   an ordinary.tab
bdf0: 6c 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69  le column with i
be00: 6e 74 65 67 65 72 20 5b 61 66 66 69 6e 69 74 79  nteger [affinity
be10: 5d 20 61 6e 64 20 61 20 75 6e 69 71 75 65 20 69  ] and a unique i
be20: 6e 64 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20  ndex, not as an 
be30: 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f  alias for.the ro
be40: 77 69 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 65 78  wid...<p> The ex
be50: 63 65 70 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65  ception mentione
be60: 64 20 61 62 6f 76 65 20 69 73 20 74 68 61 74 20  d above is that 
be70: 5e 69 66 20 74 68 65 20 64 65 63 6c 61 72 61 74  ^if the declarat
be80: 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ion of a column 
be90: 77 69 74 68 0a 64 65 63 6c 61 72 65 64 20 74 79  with.declared ty
bea0: 70 65 20 22 49 4e 54 45 47 45 52 22 20 69 6e 63  pe "INTEGER" inc
beb0: 6c 75 64 65 73 20 61 6e 20 22 50 52 49 4d 41 52  ludes an "PRIMAR
bec0: 59 20 4b 45 59 20 44 45 53 43 22 20 63 6c 61 75  Y KEY DESC" clau
bed0: 73 65 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a  se, it does not.
bee0: 62 65 63 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20  become an alias 
bef0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 6e  for the rowid an
bf00: 64 20 69 73 20 6e 6f 74 20 63 6c 61 73 73 69 66  d is not classif
bf10: 69 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ied as an intege
bf20: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 54  r primary key..T
bf30: 68 69 73 20 71 75 69 72 6b 20 69 73 20 6e 6f 74  his quirk is not
bf40: 20 62 79 20 64 65 73 69 67 6e 2e 20 49 74 20 69   by design. It i
bf50: 73 20 64 75 65 20 74 6f 20 61 20 62 75 67 20 69  s due to a bug i
bf60: 6e 20 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73  n early versions
bf70: 20 6f 66 20 53 51 4c 69 74 65 2e 0a 42 75 74 20   of SQLite..But 
bf80: 66 69 78 69 6e 67 20 74 68 65 20 62 75 67 20 63  fixing the bug c
bf90: 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 20 62  ould result in b
bfa0: 61 63 6b 77 61 72 64 73 20 69 6e 63 6f 6d 70 61  ackwards incompa
bfb0: 74 69 62 69 6c 69 74 69 65 73 2e 0a 48 65 6e 63  tibilities..Henc
bfc0: 65 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  e, the original 
bfd0: 62 65 68 61 76 69 6f 72 20 68 61 73 20 62 65 65  behavior has bee
bfe0: 6e 20 72 65 74 61 69 6e 65 64 20 28 61 6e 64 20  n retained (and 
bff0: 64 6f 63 75 6d 65 6e 74 65 64 29 20 62 65 63 61  documented) beca
c000: 75 73 65 20 6f 64 64 0a 62 65 68 61 76 69 6f 72  use odd.behavior
c010: 20 69 6e 20 61 20 63 6f 72 6e 65 72 20 63 61 73   in a corner cas
c020: 65 20 69 73 20 66 61 72 20 62 65 74 74 65 72 20  e is far better 
c030: 74 68 61 6e 20 61 20 63 6f 6d 70 61 74 69 62 69  than a compatibi
c040: 6c 69 74 79 20 62 72 65 61 6b 2e 20 20 54 68 69  lity break.  Thi
c050: 73 20 6d 65 61 6e 73 0a 74 68 61 74 20 5e 28 74  s means.that ^(t
c060: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
c070: 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61 72 61  ee table declara
c080: 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73 65 20  tions all cause 
c090: 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22 20 74  the column "x" t
c0a0: 6f 20 62 65 20 61 6e 0a 61 6c 69 61 73 20 66 6f  o be an.alias fo
c0b0: 72 20 74 68 65 20 72 6f 77 69 64 20 28 61 6e 20  r the rowid (an 
c0c0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
c0d0: 6b 65 79 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  key):..<ul>.<li>
c0e0: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
c0f0: 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49   t(x INTEGER PRI
c100: 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20 79 2c  MARY KEY ASC, y,
c110: 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74   z);</tt>.<li><t
c120: 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  t>CREATE TABLE t
c130: 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a  (x INTEGER, y, z
c140: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20  , PRIMARY KEY(x 
c150: 41 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e  ASC));</tt>.<li>
c160: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
c170: 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c   t(x INTEGER, y,
c180: 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   z, PRIMARY KEY(
c190: 78 20 44 45 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c  x DESC));</tt>.<
c1a0: 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 42 75 74 20 5e  /ul>)^..<p>But ^
c1b0: 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64  (the following d
c1c0: 65 63 6c 61 72 61 74 69 6f 6e 20 64 6f 65 73 20  eclaration does 
c1d0: 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 22 78  not result in "x
c1e0: 22 20 62 65 69 6e 67 20 61 6e 20 61 6c 69 61 73  " being an alias
c1f0: 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64 3a 0a   for.the rowid:.
c200: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  <ul>.<li><tt>CRE
c210: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
c220: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c230: 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f  Y DESC, y, z);</
c240: 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  tt>.</ul>)^..<p>
c250: 5e 52 6f 77 69 64 20 76 61 6c 75 65 73 20 6d 61  ^Rowid values ma
c260: 79 20 62 65 20 6d 6f 64 69 66 69 65 64 20 75 73  y be modified us
c270: 69 6e 67 20 61 6e 20 55 50 44 41 54 45 20 73 74  ing an UPDATE st
c280: 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 73  atement in the s
c290: 61 6d 65 0a 77 61 79 20 61 73 20 61 6e 79 20 6f  ame.way as any o
c2a0: 74 68 65 72 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  ther column valu
c2b0: 65 20 63 61 6e 2c 20 65 69 74 68 65 72 20 75 73  e can, either us
c2c0: 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 62  ing one of the b
c2d0: 75 69 6c 74 2d 69 6e 20 61 6c 69 61 73 65 73 0a  uilt-in aliases.
c2e0: 28 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20  ("rowid", "oid" 
c2f0: 6f 72 20 22 5f 72 6f 77 69 64 5f 22 29 20 6f 72  or "_rowid_") or
c300: 20 62 79 20 75 73 69 6e 67 20 61 6e 20 61 6c 69   by using an ali
c310: 61 73 20 63 72 65 61 74 65 64 20 62 79 20 61 6e  as created by an
c320: 20 69 6e 74 65 67 65 72 0a 70 72 69 6d 61 72 79   integer.primary
c330: 20 6b 65 79 2e 20 5e 53 69 6d 69 6c 61 72 6c 79   key. ^Similarly
c340: 2c 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  , an INSERT stat
c350: 65 6d 65 6e 74 20 6d 61 79 20 70 72 6f 76 69 64  ement may provid
c360: 65 20 61 20 76 61 6c 75 65 20 74 6f 20 75 73 65  e a value to use
c370: 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20 66 6f   as the.rowid fo
c380: 72 20 65 61 63 68 20 72 6f 77 20 69 6e 73 65 72  r each row inser
c390: 74 65 64 2e 20 5e 28 55 6e 6c 69 6b 65 20 6e 6f  ted. ^(Unlike no
c3a0: 72 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75  rmal SQLite colu
c3b0: 6d 6e 73 2c 20 61 6e 20 69 6e 74 65 67 65 72 20  mns, an integer 
c3c0: 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 72 20 72  primary.key or r
c3d0: 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74  owid column must
c3e0: 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67 65 72   contain integer
c3f0: 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67 65 72   values. Integer
c400: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20   primary key or 
c410: 72 6f 77 69 64 0a 63 6f 6c 75 6d 6e 73 20 61 72  rowid.columns ar
c420: 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f  e not able to ho
c430: 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ld floating poin
c440: 74 20 76 61 6c 75 65 73 2c 20 73 74 72 69 6e 67  t values, string
c450: 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c  s, BLOBs, or NUL
c460: 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  Ls.)^..<p>^If an
c470: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
c480: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 73 65  t attempts to se
c490: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  t an integer pri
c4a0: 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69  mary key or rowi
c4b0: 64 20 63 6f 6c 75 6d 6e 0a 74 6f 20 61 20 4e 55  d column.to a NU
c4c0: 4c 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65  LL or blob value
c4d0: 2c 20 6f 72 20 74 6f 20 61 20 73 74 72 69 6e 67  , or to a string
c4e0: 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74   or real value t
c4f0: 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f  hat cannot be lo
c500: 73 73 6c 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74  sslessly.convert
c510: 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
c520: 2c 20 61 20 22 64 61 74 61 74 79 70 65 20 6d 69  , a "datatype mi
c530: 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20 6f 63  smatch" error oc
c540: 63 75 72 73 20 61 6e 64 20 74 68 65 20 73 74 61  curs and the sta
c550: 74 65 6d 65 6e 74 0a 69 73 20 61 62 6f 72 74 65  tement.is aborte
c560: 64 2e 20 5e 49 66 20 61 6e 20 49 4e 53 45 52 54  d. ^If an INSERT
c570: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
c580: 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61 20  pts to insert a 
c590: 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20 61  blob value, or a
c5a0: 20 73 74 72 69 6e 67 0a 6f 72 20 72 65 61 6c 20   string.or real 
c5b0: 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f  value that canno
c5c0: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
c5d0: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
c5e0: 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61 6e 0a  integer into an.
c5f0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
c600: 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c  key or rowid col
c610: 75 6d 6e 2c 20 61 20 22 64 61 74 61 74 79 70 65  umn, a "datatype
c620: 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72   mismatch" error
c630: 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 0a   occurs and the.
c640: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 62 6f  statement is abo
c650: 72 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  rted...<p>^If an
c660: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
c670: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e  t attempts to in
c680: 73 65 72 74 20 61 20 4e 55 4c 4c 20 76 61 6c 75  sert a NULL valu
c690: 65 20 69 6e 74 6f 20 61 20 72 6f 77 69 64 20 6f  e into a rowid o
c6a0: 72 0a 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  r.integer primar
c6b0: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 2c 20 74 68  y key column, th
c6c0: 65 20 73 79 73 74 65 6d 20 63 68 6f 6f 73 65 73  e system chooses
c6d0: 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
c6e0: 65 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a  e to use as the.
c6f0: 72 6f 77 69 64 20 61 75 74 6f 6d 61 74 69 63 61  rowid automatica
c700: 6c 6c 79 2e 20 41 20 64 65 74 61 69 6c 65 64 20  lly. A detailed 
c710: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 68  description of h
c720: 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20  ow this is done 
c730: 69 73 20 70 72 6f 76 69 64 65 64 0a 3c 61 20 68  is provided.<a h
c740: 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d  ref="autoinc.htm
c750: 6c 22 3e 73 65 70 61 72 61 74 65 6c 79 3c 2f 61  l">separately</a
c760: 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  >.</p>..<p>^(The
c770: 20 5b 70 61 72 65 6e 74 20 6b 65 79 5d 20 6f 66   [parent key] of
c780: 20 61 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20   a [foreign key 
c790: 63 6f 6e 73 74 72 61 69 6e 74 5d 20 69 73 20 6e  constraint] is n
c7a0: 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 75 73  ot allowed to.us
c7b0: 65 20 74 68 65 20 72 6f 77 69 64 2e 20 20 54 68  e the rowid.  Th
c7c0: 65 20 70 61 72 65 6e 74 20 6b 65 79 20 6d 75 73  e parent key mus
c7d0: 74 20 75 73 65 64 20 6e 61 6d 65 64 20 63 6f 6c  t used named col
c7e0: 75 6d 6e 73 20 6f 6e 6c 79 2e 29 5e 3c 2f 70 3e  umns only.)^</p>
c7f0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
c800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c840: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
c850: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 7d 20  CREATE TRIGGER} 
c860: 63 72 65 61 74 65 74 72 69 67 67 65 72 20 7b 7b  createtrigger {{
c870: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 7d 7d  CREATE TRIGGER}}
c880: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
c890: 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d  eDiagram create-
c8a0: 74 72 69 67 67 65 72 2d 73 74 6d 74 0a 3c 2f 74  trigger-stmt.</t
c8b0: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
c8c0: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
c8d0: 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
c8e0: 20 61 64 64 20 74 72 69 67 67 65 72 73 20 74 6f   add triggers to
c8f0: 20 74 68 65 20 0a 64 61 74 61 62 61 73 65 20 73   the .database s
c900: 63 68 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73  chema. ^Triggers
c910: 20 61 72 65 20 64 61 74 61 62 61 73 65 20 6f 70   are database op
c920: 65 72 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61  erations .that a
c930: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
c940: 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20   performed when 
c950: 61 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  a specified data
c960: 62 61 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72  base event.occur
c970: 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  s.  </p>..<p>^A 
c980: 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73  trigger may be s
c990: 70 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65  pecified to fire
c9a0: 20 77 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c   whenever a [DEL
c9b0: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a  ETE], [INSERT],.
c9c0: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61  or [UPDATE] of a
c9d0: 0a 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61  .particular data
c9e0: 62 61 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72  base table occur
c9f0: 73 2c 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61  s, or whenever a
ca00: 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72  n [UPDATE] occur
ca10: 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d  s on.on one or m
ca20: 6f 72 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  ore specified co
ca30: 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65  lumns of a table
ca40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68  .</p>..<p>^At th
ca50: 69 73 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73  is time SQLite s
ca60: 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52  upports only FOR
ca70: 20 45 41 43 48 20 52 4f 57 20 74 72 69 67 67 65   EACH ROW trigge
ca80: 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48  rs, not FOR EACH
ca90: 0a 53 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67  .STATEMENT trigg
caa0: 65 72 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c  ers. ^Hence expl
cab0: 69 63 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e  icitly specifyin
cac0: 67 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69  g FOR EACH ROW i
cad0: 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52  s optional..^FOR
cae0: 20 45 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65   EACH ROW implie
caf0: 73 20 74 68 61 74 20 74 68 65 20 53 51 4c 20 73  s that the SQL s
cb00: 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
cb10: 69 65 64 20 69 6e 20 74 68 65 20 74 72 69 67 67  ied in the trigg
cb20: 65 72 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74  er.may be execut
cb30: 65 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ed (depending on
cb40: 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
cb50: 29 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  ) for each datab
cb60: 61 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e  ase row being.in
cb70: 73 65 72 74 65 64 2c 20 75 70 64 61 74 65 64 20  serted, updated 
cb80: 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  or deleted by th
cb90: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
cba0: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
cbb0: 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70  to fire.</p>..<p
cbc0: 3e 5e 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e  >^(Both the WHEN
cbd0: 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20   clause and the 
cbe0: 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20  trigger actions 
cbf0: 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65  may access eleme
cc00: 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20  nts of .the row 
cc10: 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20  being inserted, 
cc20: 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74  deleted or updat
cc30: 65 64 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e  ed using referen
cc40: 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ces of the form 
cc50: 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d  ."NEW.<i>column-
cc60: 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f  name</i>" and "O
cc70: 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  LD.<i>column-nam
cc80: 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69  e</i>", where.<i
cc90: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e  >column-name</i>
cca0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
ccb0: 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68  a column from th
ccc0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
ccd0: 20 74 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f   trigger.is asso
cce0: 63 69 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e  ciated with.)^ ^
ccf0: 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66  (OLD and NEW ref
cd00: 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79  erences may only
cd10: 20 62 65 20 75 73 65 64 20 69 6e 20 74 72 69 67   be used in trig
cd20: 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66  gers on.events f
cd30: 6f 72 20 77 68 69 63 68 20 74 68 65 79 20 61 72  or which they ar
cd40: 65 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66  e relevant, as f
cd50: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61  ollows:</p>..<ta
cd60: 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
cd70: 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72  lpadding=10>.<tr
cd80: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
cd90: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
cda0: 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e   width=120><i>IN
cdb0: 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74  SERT</i></td>.<t
cdc0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e  d valign="top">N
cdd0: 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  EW references ar
cde0: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
cdf0: 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  r>.<tr>.<td vali
ce00: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
ce10: 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30  right" width=120
ce20: 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f  ><i>UPDATE</i></
ce30: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
ce40: 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44  top">NEW and OLD
ce50: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20   references are 
ce60: 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  valid</td>.</tr>
ce70: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
ce80: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
ce90: 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c  ght" width=120><
cea0: 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64  i>DELETE</i></td
ceb0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
cec0: 70 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65  p">OLD reference
ced0: 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e  s are valid</td>
cee0: 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
cef0: 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61  </p>)^..<p>^If a
cf00: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
cf10: 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51  supplied, the SQ
cf20: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
cf30: 63 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20  cified.are only 
cf40: 65 78 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77  executed for row
cf50: 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
cf60: 57 48 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74  WHEN.clause is t
cf70: 72 75 65 2e 20 5e 49 66 20 6e 6f 20 57 48 45 4e  rue. ^If no WHEN
cf80: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
cf90: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
cfa0: 74 65 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63  tements.are exec
cfb0: 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77  uted for all row
cfc0: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s.</p>..<p>^The 
cfd0: 42 45 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20  BEFORE or AFTER 
cfe0: 6b 65 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e  keyword determin
cff0: 65 73 20 77 68 65 6e 20 74 68 65 20 74 72 69 67  es when the trig
d000: 67 65 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c  ger actions.will
d010: 20 62 65 20 65 78 65 63 75 74 65 64 20 72 65 6c   be executed rel
d020: 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73  ative to the ins
d030: 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61  ertion, modifica
d040: 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20  tion or removal 
d050: 6f 66 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65  of the.associate
d060: 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  d row.</p>..<p>^
d070: 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  An [ON CONFLICT]
d080: 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20 73   clause may be s
d090: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
d0a0: 20 6f 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20   of an [UPDATE] 
d0b0: 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69  or [INSERT].acti
d0c0: 6f 6e 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  on within the bo
d0d0: 64 79 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  dy of the trigge
d0e0: 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61  r..^However if a
d0f0: 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  n [ON CONFLICT] 
d100: 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
d110: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a  ied as part of .
d120: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61  the statement ca
d130: 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  using the trigge
d140: 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20  r to fire, then 
d150: 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e  conflict handlin
d160: 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20  g.policy of the 
d170: 6f 75 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20  outer statement 
d180: 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e  is used instead.
d190: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65  </p>..<p>^Trigge
d1a0: 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  rs are automatic
d1b0: 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47  ally [DROP TRIGG
d1c0: 45 52 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68  ER | dropped].wh
d1d0: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  en the table tha
d1e0: 74 20 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f  t they are .asso
d1f0: 63 69 61 74 65 64 20 77 69 74 68 20 28 74 68 65  ciated with (the
d200: 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
d210: 69 3e 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44  i> table) is .[D
d220: 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70  ROP TABLE | drop
d230: 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20  ped].  ^However 
d240: 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 61  if the trigger a
d250: 63 74 69 6f 6e 73 20 72 65 66 65 72 65 6e 63 65  ctions reference
d260: 0a 6f 74 68 65 72 20 74 61 62 6c 65 73 2c 20 74  .other tables, t
d270: 68 65 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f  he trigger is no
d280: 74 20 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64  t dropped or mod
d290: 69 66 69 65 64 20 69 66 20 74 68 6f 73 65 20 6f  ified if those o
d2a0: 74 68 65 72 0a 74 61 62 6c 65 73 20 61 72 65 20  ther.tables are 
d2b0: 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72  [DROP TABLE | dr
d2c0: 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52  opped] or [ALTER
d2d0: 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65   TABLE | modifie
d2e0: 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69  d].</p>..<p>^Tri
d2f0: 67 67 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65  ggers are remove
d300: 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f  d using the [DRO
d310: 50 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  P TRIGGER] state
d320: 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53  ment.</p>..<h3>S
d330: 79 6e 74 61 78 20 52 65 73 74 72 69 63 74 69 6f  yntax Restrictio
d340: 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c 20 44 45  ns On UPDATE, DE
d350: 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53 45 52 54  LETE, and INSERT
d360: 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
d370: 69 6e 0a 20 20 20 20 54 72 69 67 67 65 72 73 3c  in.    Triggers<
d380: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55  /h3>..<p>^The [U
d390: 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d  PDATE], [DELETE]
d3a0: 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73  , and [INSERT].s
d3b0: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
d3c0: 20 74 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   triggers do not
d3d0: 20 73 75 70 70 6f 72 74 0a 74 68 65 20 66 75 6c   support.the ful
d3e0: 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 5b 55 50  l syntax for [UP
d3f0: 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c  DATE], [DELETE],
d400: 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73 74   and [INSERT] st
d410: 61 74 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 66  atements.  The f
d420: 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69 63  ollowing.restric
d430: 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e  tions apply:</p>
d440: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20  ..<ul>.<li><p>. 
d450: 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74   ^(The name of t
d460: 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d  he table to be m
d470: 6f 64 69 66 69 65 64 20 69 6e 20 61 6e 20 5b 55  odified in an [U
d480: 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d  PDATE], [DELETE]
d490: 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20  , or [INSERT].  
d4a0: 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62  statement must b
d4b0: 65 20 61 6e 20 75 6e 71 75 61 6c 69 66 69 65 64  e an unqualified
d4c0: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e   table name.  In
d4d0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e   other words, on
d4e0: 65 20 6d 75 73 74 0a 20 20 75 73 65 20 6a 75 73  e must.  use jus
d4f0: 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c  t "<i>tablename<
d500: 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74  /i>" not "<i>dat
d510: 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  abase</i><b>.</b
d520: 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69  ><i>tablename</i
d530: 3e 22 0a 20 20 77 68 65 6e 20 73 70 65 63 69 66  >".  when specif
d540: 79 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 29  ying the table.)
d550: 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 74 6f  ^  ^The table to
d560: 20 62 65 20 6d 6f 64 69 66 69 65 64 20 6d 75 73   be modified mus
d570: 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 0a 20  t exist in the. 
d580: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
d590: 73 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  s the table or v
d5a0: 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
d5b0: 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
d5c0: 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  ched..  </p></li
d5d0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
d5e0: 65 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c  e "INSERT INTO <
d5f0: 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41  i>table</i> DEFA
d600: 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d  ULT VALUES" form
d610: 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d   of the [INSERT]
d620: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20   statement.  is 
d630: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20  not supported.. 
d640: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
d650: 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e 44 45 58  <p>.  ^The INDEX
d660: 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
d670: 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
d680: 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  e not supported 
d690: 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 6e 64  for [UPDATE] and
d6a0: 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  .  [DELETE] stat
d6b0: 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f  ements..  </p></
d6c0: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  li>..<li><p>.  ^
d6d0: 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e  (The ORDER BY an
d6e0: 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20  d LIMIT clauses 
d6f0: 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20  on [UPDATE] and 
d700: 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65  [DELETE] stateme
d710: 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20 20 73 75  nts are not.  su
d720: 70 70 6f 72 74 65 64 2e 20 20 4f 52 44 45 52 20  pported.  ORDER 
d730: 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 61 72 65  BY and LIMIT are
d740: 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75   not normally su
d750: 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44  pported for [UPD
d760: 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54  ATE] or.  [DELET
d770: 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78  E] in any contex
d780: 74 20 62 75 74 20 63 61 6e 20 62 65 20 65 6e 61  t but can be ena
d790: 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76  bled for top-lev
d7a0: 65 6c 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20  el statements.  
d7b0: 75 73 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54  using the [SQLIT
d7c0: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
d7d0: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f  DELETE_LIMIT] co
d7e0: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
d7f0: 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a 20 20 74  n.  However,.  t
d800: 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  hat compile-time
d810: 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70   option only app
d820: 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65  lies to top-leve
d830: 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b  l [UPDATE] and [
d840: 44 45 4c 45 54 45 5d 0a 20 20 73 74 61 74 65 6d  DELETE].  statem
d850: 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54  ents, not [UPDAT
d860: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
d870: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
d880: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 0a 20 20  n triggers.)^.  
d890: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
d8a0: 70 3e 0a 20 20 5e 5b 63 6f 6d 6d 6f 6e 2d 74 61  p>.  ^[common-ta
d8b0: 62 6c 65 2d 65 78 70 72 65 73 73 69 6f 6e 7c 43  ble-expression|C
d8c0: 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
d8d0: 65 73 73 69 6f 6e 5d 20 61 72 65 20 6e 6f 74 20  ession] are not 
d8e0: 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 20 20  supported for.  
d8f0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 73 69 64  statements insid
d900: 65 20 6f 66 20 74 72 69 67 67 65 72 73 2e 0a 20  e of triggers.. 
d910: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e   </p></li>.</ul>
d920: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
d930: 6e 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72  nt instead_of_tr
d940: 69 67 67 65 72 20 7b 49 4e 53 54 45 41 44 20 4f  igger {INSTEAD O
d950: 46 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46 20 74  F} {INSTEAD OF t
d960: 72 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  rigger}</tcl>.<h
d970: 33 3e 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  3>INSTEAD OF tri
d980: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ggers</h3>..<p>^
d990: 54 72 69 67 67 65 72 73 20 6d 61 79 20 62 65 20  Triggers may be 
d9a0: 63 72 65 61 74 65 64 20 6f 6e 20 5b 76 69 65 77  created on [view
d9b0: 73 5d 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 6f  s], as well as o
d9c0: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c 20  rdinary tables, 
d9d0: 62 79 0a 73 70 65 63 69 66 79 69 6e 67 20 49 4e  by.specifying IN
d9e0: 53 54 45 41 44 20 4f 46 20 69 6e 20 74 68 65 20  STEAD OF in the 
d9f0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
da00: 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f  tatement. .^If o
da10: 6e 65 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e  ne or more ON IN
da20: 53 45 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a  SERT, ON DELETE.
da30: 6f 72 20 4f 4e 20 55 50 44 41 54 45 20 74 72 69  or ON UPDATE tri
da40: 67 67 65 72 73 20 61 72 65 20 64 65 66 69 6e 65  ggers are define
da50: 64 20 6f 6e 20 61 20 76 69 65 77 2c 20 74 68 65  d on a view, the
da60: 6e 20 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65  n it is not an.e
da70: 72 72 6f 72 20 74 6f 20 65 78 65 63 75 74 65 20  rror to execute 
da80: 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
da90: 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  E or UPDATE stat
daa0: 65 6d 65 6e 74 20 6f 6e 20 74 68 65 20 76 69 65  ement on the vie
dab0: 77 2c 20 0a 72 65 73 70 65 63 74 69 76 65 6c 79  w, .respectively
dac0: 2e 20 20 5e 49 6e 73 74 65 61 64 2c 0a 65 78 65  .  ^Instead,.exe
dad0: 63 75 74 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  cuting an INSERT
dae0: 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  , DELETE or UPDA
daf0: 54 45 20 6f 6e 20 74 68 65 20 76 69 65 77 20 63  TE on the view c
db00: 61 75 73 65 73 20 74 68 65 20 61 73 73 6f 63 69  auses the associ
db10: 61 74 65 64 0a 74 72 69 67 67 65 72 73 20 74 6f  ated.triggers to
db20: 20 66 69 72 65 2e 20 5e 54 68 65 20 72 65 61 6c   fire. ^The real
db30: 20 74 61 62 6c 65 73 20 75 6e 64 65 72 6c 79 69   tables underlyi
db40: 6e 67 20 74 68 65 20 76 69 65 77 20 61 72 65 20  ng the view are 
db50: 6e 6f 74 20 6d 6f 64 69 66 69 65 64 0a 28 65 78  not modified.(ex
db60: 63 65 70 74 20 70 6f 73 73 69 62 6c 79 20 65 78  cept possibly ex
db70: 70 6c 69 63 69 74 6c 79 2c 20 62 79 20 61 20 74  plicitly, by a t
db80: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 29 2e  rigger program).
db90: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  </p>..<p>^Note t
dba0: 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33  hat the [sqlite3
dbb0: 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 20  _changes()] and 
dbc0: 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63  [sqlite3_total_c
dbd0: 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66  hanges()] interf
dbe0: 61 63 65 73 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e  aces.do not coun
dbf0: 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  t INSTEAD OF tri
dc00: 67 67 65 72 20 66 69 72 69 6e 67 73 2c 20 62 75  gger firings, bu
dc10: 74 20 74 68 65 0a 5b 63 6f 75 6e 74 5f 63 68 61  t the.[count_cha
dc20: 6e 67 65 73 20 70 72 61 67 6d 61 5d 20 64 6f 65  nges pragma] doe
dc30: 73 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20  s count INSTEAD 
dc40: 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e  OF trigger firin
dc50: 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 6f 6d 65  g.</p>..<h3>Some
dc60: 20 45 78 61 6d 70 6c 65 20 54 72 69 67 67 65 72   Example Trigger
dc70: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73  s</h3>..<p>^(Ass
dc80: 75 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f  uming that custo
dc90: 6d 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20  mer records are 
dca0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63  stored in the "c
dcb0: 75 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c  ustomers" table,
dcc0: 20 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20   and.that order 
dcd0: 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72  records are stor
dce0: 65 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72  ed in the "order
dcf0: 73 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f  s" table, the fo
dd00: 6c 6c 6f 77 69 6e 67 0a 55 50 44 41 54 45 20 74  llowing.UPDATE t
dd10: 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73 20 74  rigger.ensures t
dd20: 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69 61 74  hat all associat
dd30: 65 64 20 6f 72 64 65 72 73 20 61 72 65 20 72 65  ed orders are re
dd40: 64 69 72 65 63 74 65 64 20 77 68 65 6e 20 61 20  directed when a 
dd50: 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67 65 73  customer changes
dd60: 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64 64 72  .his or her addr
dd70: 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ess:</p>..<tcl>E
dd80: 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45 20  xample {.CREATE 
dd90: 54 52 49 47 47 45 52 20 75 70 64 61 74 65 5f 63  TRIGGER update_c
dda0: 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20  ustomer_address 
ddb0: 55 50 44 41 54 45 20 4f 46 20 61 64 64 72 65 73  UPDATE OF addres
ddc0: 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a  s ON customers .
ddd0: 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50 44 41    BEGIN.    UPDA
dde0: 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64  TE orders SET ad
ddf0: 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64 64 72  dress = new.addr
de00: 65 73 73 20 57 48 45 52 45 20 63 75 73 74 6f 6d  ess WHERE custom
de10: 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61  er_name = old.na
de20: 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63  me;.  END;.}</tc
de30: 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 69 73  l>..<p>With this
de40: 20 74 72 69 67 67 65 72 20 69 6e 73 74 61 6c 6c   trigger install
de50: 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20 74 68  ed, executing th
de60: 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e  e statement:</p>
de70: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
de80: 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72  .UPDATE customer
de90: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
dea0: 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45  '1 Main St.' WHE
deb0: 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  RE name = 'Jack 
dec0: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a  Jones';.}</tcl>.
ded0: 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20 66  .<p>causes the f
dee0: 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20 61  ollowing to be a
def0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 65  utomatically exe
df00: 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  cuted:</p>..<tcl
df10: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
df20: 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64 64  E orders SET add
df30: 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53  ress = '1 Main S
df40: 74 2e 27 20 57 48 45 52 45 20 63 75 73 74 6f 6d  t.' WHERE custom
df50: 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  er_name = 'Jack 
df60: 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29  Jones';.}</tcl>)
df70: 5e 0a 0a 3c 70 3e 46 6f 72 20 61 6e 20 65 78 61  ^..<p>For an exa
df80: 6d 70 6c 65 20 6f 66 20 61 6e 20 49 4e 53 54 45  mple of an INSTE
df90: 41 44 20 4f 46 20 74 72 69 67 67 65 72 2c 20 63  AD OF trigger, c
dfa0: 6f 6e 73 69 64 65 72 20 74 68 65 20 66 6f 6c 6c  onsider the foll
dfb0: 6f 77 69 6e 67 20 73 63 68 65 6d 61 3a 0a 0a 3c  owing schema:..<
dfc0: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52  tcl>Example {.CR
dfd0: 45 41 54 45 20 54 41 42 4c 45 20 63 75 73 74 6f  EATE TABLE custo
dfe0: 6d 65 72 28 0a 20 20 63 75 73 74 5f 69 64 20 49  mer(.  cust_id I
dff0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
e000: 45 59 2c 0a 20 20 63 75 73 74 5f 6e 61 6d 65 20  EY,.  cust_name 
e010: 54 45 58 54 2c 0a 20 20 63 75 73 74 5f 61 64 64  TEXT,.  cust_add
e020: 72 20 54 45 58 54 0a 29 3b 0a 43 52 45 41 54 45  r TEXT.);.CREATE
e030: 20 56 49 45 57 20 63 75 73 74 6f 6d 65 72 5f 61   VIEW customer_a
e040: 64 64 72 65 73 73 20 41 53 0a 20 20 20 53 45 4c  ddress AS.   SEL
e050: 45 43 54 20 63 75 73 74 5f 69 64 2c 20 63 75 73  ECT cust_id, cus
e060: 74 5f 61 64 64 72 20 46 52 4f 4d 20 63 75 73 74  t_addr FROM cust
e070: 6f 6d 65 72 3b 0a 43 52 45 41 54 45 20 54 52 49  omer;.CREATE TRI
e080: 47 47 45 52 20 63 75 73 74 5f 61 64 64 72 5f 63  GGER cust_addr_c
e090: 68 6e 67 0a 49 4e 53 54 45 41 44 20 4f 46 20 55  hng.INSTEAD OF U
e0a0: 50 44 41 54 45 20 4f 46 20 63 75 73 74 5f 61 64  PDATE OF cust_ad
e0b0: 64 72 20 4f 4e 20 63 75 73 74 6f 6d 65 72 5f 61  dr ON customer_a
e0c0: 64 64 72 65 73 73 0a 42 45 47 49 4e 0a 20 20 55  ddress.BEGIN.  U
e0d0: 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72 20 53  PDATE customer S
e0e0: 45 54 20 63 75 73 74 5f 61 64 64 72 3d 4e 45 57  ET cust_addr=NEW
e0f0: 2e 63 75 73 74 5f 61 64 64 72 0a 20 20 20 57 48  .cust_addr.   WH
e100: 45 52 45 20 63 75 73 74 5f 69 64 3d 4e 45 57 2e  ERE cust_id=NEW.
e110: 63 75 73 74 5f 69 64 3b 0a 45 4e 44 3b 0a 7d 3c  cust_id;.END;.}<
e120: 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74  /tcl>..<p>With t
e130: 68 65 20 73 63 68 65 6d 61 20 61 62 6f 76 65 2c  he schema above,
e140: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20   a statement of 
e150: 74 68 65 20 66 6f 72 6d 3a 3c 2f 70 3e 0a 0a 3c  the form:</p>..<
e160: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50  tcl>Example {.UP
e170: 44 41 54 45 20 63 75 73 74 6f 6d 65 72 5f 61 64  DATE customer_ad
e180: 64 72 65 73 73 20 53 45 54 20 63 75 73 74 5f 61  dress SET cust_a
e190: 64 64 72 3d 24 6e 65 77 5f 61 64 64 72 65 73 73  ddr=$new_address
e1a0: 20 57 48 45 52 45 20 63 75 73 74 5f 69 64 3d 24   WHERE cust_id=$
e1b0: 63 75 73 74 5f 69 64 3b 0a 7d 3c 2f 74 63 6c 3e  cust_id;.}</tcl>
e1c0: 0a 0a 3c 70 3e 43 61 75 73 65 73 20 74 68 65 20  ..<p>Causes the 
e1d0: 63 75 73 74 6f 6d 65 72 2e 63 75 73 74 5f 61 64  customer.cust_ad
e1e0: 64 72 20 66 69 65 6c 64 20 74 6f 20 62 65 20 75  dr field to be u
e1f0: 70 64 61 74 65 64 20 66 6f 72 20 61 20 73 70 65  pdated for a spe
e200: 63 69 66 69 63 0a 63 75 73 74 6f 6d 65 72 20 65  cific.customer e
e210: 6e 74 72 79 20 74 68 61 74 20 68 61 73 20 63 75  ntry that has cu
e220: 73 74 6f 6d 65 72 2e 63 75 73 74 5f 69 64 20 65  stomer.cust_id e
e230: 71 75 61 6c 20 74 6f 20 74 68 65 20 24 63 75 73  qual to the $cus
e240: 74 5f 69 64 20 70 61 72 61 6d 65 74 65 72 2e 0a  t_id parameter..
e250: 4e 6f 74 65 20 68 6f 77 20 74 68 65 20 76 61 6c  Note how the val
e260: 75 65 73 20 61 73 73 69 67 6e 65 64 20 74 6f 20  ues assigned to 
e270: 74 68 65 20 76 69 65 77 20 61 72 65 20 6d 61 64  the view are mad
e280: 65 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 66  e available as f
e290: 69 65 6c 64 0a 69 6e 20 74 68 65 20 73 70 65 63  ield.in the spec
e2a0: 69 61 6c 20 22 4e 45 57 22 20 74 61 62 6c 65 20  ial "NEW" table 
e2b0: 77 69 74 68 69 6e 20 74 68 65 20 74 72 69 67 67  within the trigg
e2c0: 65 72 20 62 6f 64 79 2e 3c 2f 70 3e 0a 0a 3c 74  er body.</p>..<t
e2d0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75  cl>hd_fragment u
e2e0: 6e 64 65 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64  ndef_before {und
e2f0: 65 66 69 6e 65 64 20 42 45 46 4f 52 45 20 74 72  efined BEFORE tr
e300: 69 67 67 65 72 20 62 65 68 61 76 69 6f 72 7d 3c  igger behavior}<
e310: 2f 74 63 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f  /tcl>.<h3>Cautio
e320: 6e 73 20 4f 6e 20 54 68 65 20 55 73 65 20 4f 66  ns On The Use Of
e330: 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 73   BEFORE triggers
e340: 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42  </h3>..<p>If a B
e350: 45 46 4f 52 45 20 55 50 44 41 54 45 20 6f 72 20  EFORE UPDATE or 
e360: 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20 74 72  BEFORE DELETE tr
e370: 69 67 67 65 72 20 6d 6f 64 69 66 69 65 73 20 6f  igger modifies o
e380: 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77 0a  r deletes a row.
e390: 74 68 61 74 20 77 61 73 20 74 6f 20 68 61 76 65  that was to have
e3a0: 20 62 65 65 6e 20 75 70 64 61 74 65 64 20 6f 72   been updated or
e3b0: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 6e 20 74   deleted, then t
e3c0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
e3d0: 20 73 75 62 73 65 71 75 65 6e 74 0a 75 70 64 61   subsequent.upda
e3e0: 74 65 20 6f 72 20 64 65 6c 65 74 65 20 6f 70 65  te or delete ope
e3f0: 72 61 74 69 6f 6e 20 69 73 20 75 6e 64 65 66 69  ration is undefi
e400: 6e 65 64 2e 20 20 46 75 72 74 68 65 72 6d 6f 72  ned.  Furthermor
e410: 65 2c 20 69 66 20 61 20 42 45 46 4f 52 45 20 74  e, if a BEFORE t
e420: 72 69 67 67 65 72 0a 6d 6f 64 69 66 69 65 73 20  rigger.modifies 
e430: 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77  or deletes a row
e440: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 75 6e 64  , then it is und
e450: 65 66 69 6e 65 64 20 77 68 65 74 68 65 72 20 6f  efined whether o
e460: 72 20 6e 6f 74 20 41 46 54 45 52 20 74 72 69 67  r not AFTER trig
e470: 67 65 72 73 0a 74 68 61 74 20 77 6f 75 6c 64 20  gers.that would 
e480: 68 61 76 65 20 6f 74 68 65 72 77 69 73 65 20 72  have otherwise r
e490: 75 6e 20 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73  un on those rows
e4a0: 20 77 69 6c 6c 20 69 6e 20 66 61 63 74 20 72 75   will in fact ru
e4b0: 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  n..</p>..<p>The 
e4c0: 76 61 6c 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77  value of NEW.row
e4d0: 69 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20  id is undefined 
e4e0: 69 6e 20 61 20 42 45 46 4f 52 45 20 49 4e 53 45  in a BEFORE INSE
e4f0: 52 54 20 74 72 69 67 67 65 72 20 69 6e 20 77 68  RT trigger in wh
e500: 69 63 68 0a 74 68 65 20 72 6f 77 69 64 20 69 73  ich.the rowid is
e510: 20 6e 6f 74 20 65 78 70 6c 69 63 69 74 6c 79 20   not explicitly 
e520: 73 65 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  set to an intege
e530: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75  r.</p>..<p>Becau
e540: 73 65 20 6f 66 20 74 68 65 20 62 65 68 61 76 69  se of the behavi
e550: 6f 72 73 20 64 65 73 63 72 69 62 65 64 20 61 62  ors described ab
e560: 6f 76 65 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73  ove, programmers
e570: 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65 64 20   are encouraged 
e580: 74 6f 0a 70 72 65 66 65 72 20 41 46 54 45 52 20  to.prefer AFTER 
e590: 74 72 69 67 67 65 72 73 20 6f 76 65 72 20 42 45  triggers over BE
e5a0: 46 4f 52 45 20 74 72 69 67 67 65 72 73 2e 3c 2f  FORE triggers.</
e5b0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
e5c0: 6d 65 6e 74 20 72 61 69 73 65 20 7b 52 41 49 53  ment raise {RAIS
e5d0: 45 20 66 75 6e 63 74 69 6f 6e 7d 3c 2f 74 63 6c  E function}</tcl
e5e0: 3e 0a 3c 68 33 3e 54 68 65 20 52 41 49 53 45 28  >.<h3>The RAISE(
e5f0: 29 20 66 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a  ) function</h3>.
e600: 0a 3c 70 3e 5e 28 41 20 73 70 65 63 69 61 6c 20  .<p>^(A special 
e610: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41 49  SQL function RAI
e620: 53 45 28 29 20 6d 61 79 20 62 65 20 75 73 65 64  SE() may be used
e630: 20 77 69 74 68 69 6e 20 61 20 74 72 69 67 67 65   within a trigge
e640: 72 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74  r-program,)^.wit
e650: 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  h the following 
e660: 73 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63  syntax</p> ..<tc
e670: 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
e680: 72 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f  raise-function</
e690: 74 63 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  tcl>..<p>^(When 
e6a0: 6f 6e 65 20 6f 66 20 52 41 49 53 45 28 52 4f 4c  one of RAISE(ROL
e6b0: 4c 42 41 43 4b 2c 2e 2e 2e 29 2c 20 52 41 49 53  LBACK,...), RAIS
e6c0: 45 28 41 42 4f 52 54 2c 2e 2e 2e 29 20 6f 72 20  E(ABORT,...) or 
e6d0: 52 41 49 53 45 28 46 41 49 4c 2c 2e 2e 2e 29 0a  RAISE(FAIL,...).
e6e0: 69 73 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67  is called during
e6f0: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
e700: 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20  .execution, the 
e710: 73 70 65 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f  specified [ON CO
e720: 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65 73 73 69  NFLICT] processi
e730: 6e 67 20 69 73 20 70 65 72 66 6f 72 6d 65 64 0a  ng is performed.
e740: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
e750: 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 29 5e 0a  y terminates.)^.
e760: 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  An error code of
e770: 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41   [SQLITE_CONSTRA
e780: 49 4e 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64  INT] is returned
e790: 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74   to the applicat
e7a0: 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20  ion,.along with 
e7b0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 72  the specified er
e7c0: 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e  ror message.</p>
e7d0: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41 49 53 45  ..<p>^When RAISE
e7e0: 28 49 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c  (IGNORE) is call
e7f0: 65 64 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ed, the remainde
e800: 72 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  r of the current
e810: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
e820: 2c 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ,.the statement 
e830: 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
e840: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
e850: 74 6f 20 65 78 65 63 75 74 65 20 61 6e 64 20 61  to execute and a
e860: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72  ny subsequent.tr
e870: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
e880: 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62  hat would have b
e890: 65 65 6e 20 65 78 65 63 75 74 65 64 20 61 72 65  een executed are
e8a0: 20 61 62 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20   abandoned. ^No 
e8b0: 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73  database.changes
e8c0: 20 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b   are rolled back
e8d0: 2e 20 20 5e 49 66 20 74 68 65 20 73 74 61 74 65  .  ^If the state
e8e0: 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65 64  ment that caused
e8f0: 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
e900: 67 72 61 6d 0a 74 6f 20 65 78 65 63 75 74 65 20  gram.to execute 
e910: 69 73 20 69 74 73 65 6c 66 20 70 61 72 74 20 6f  is itself part o
e920: 66 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67  f a trigger prog
e930: 72 61 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 74  ram, then that t
e940: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 72  rigger program.r
e950: 65 73 75 6d 65 73 20 65 78 65 63 75 74 69 6f 6e  esumes execution
e960: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
e970: 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74  g of the next st
e980: 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ep..</p>..<tcl>h
e990: 64 5f 66 72 61 67 6d 65 6e 74 20 74 65 6d 70 74  d_fragment tempt
e9a0: 72 69 67 20 7b 54 45 4d 50 20 74 72 69 67 67 65  rig {TEMP trigge
e9b0: 72 73 20 6f 6e 20 6e 6f 6e 2d 54 45 4d 50 20 74  rs on non-TEMP t
e9c0: 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ables}</tcl>.<h3
e9d0: 3e 54 45 4d 50 20 54 72 69 67 67 65 72 73 20 6f  >TEMP Triggers o
e9e0: 6e 20 4e 6f 6e 2d 54 45 4d 50 20 54 61 62 6c 65  n Non-TEMP Table
e9f0: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74  s</h3>..<p>^(A t
ea00: 72 69 67 67 65 72 20 6e 6f 72 6d 61 6c 6c 79 20  rigger normally 
ea10: 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 73 61  exists in the sa
ea20: 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20 74  me database as t
ea30: 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 0a 61  he table named.a
ea40: 66 74 65 72 20 74 68 65 20 22 4f 4e 22 20 6b 65  fter the "ON" ke
ea50: 79 77 6f 72 64 20 69 6e 20 74 68 65 20 43 52 45  yword in the CRE
ea60: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
ea70: 65 6d 65 6e 74 2e 20 20 45 78 63 65 70 74 2c 20  ement.  Except, 
ea80: 69 74 20 69 73 0a 70 6f 73 73 69 62 6c 65 20 74  it is.possible t
ea90: 6f 20 63 72 65 61 74 65 20 61 20 54 45 4d 50 20  o create a TEMP 
eaa0: 54 52 49 47 47 45 52 20 6f 6e 20 61 20 74 61 62  TRIGGER on a tab
eab0: 6c 65 20 69 6e 20 61 6e 6f 74 68 65 72 20 64 61  le in another da
eac0: 74 61 62 61 73 65 2e 29 5e 20 20 0a 53 75 63 68  tabase.)^  .Such
ead0: 20 61 20 74 72 69 67 67 65 72 20 77 69 6c 6c 20   a trigger will 
eae0: 6f 6e 6c 79 20 66 69 72 65 20 77 68 65 6e 20 63  only fire when c
eaf0: 68 61 6e 67 65 73 0a 61 72 65 20 6d 61 64 65 20  hanges.are made 
eb00: 74 6f 20 74 68 65 20 74 61 72 67 65 74 20 74 61  to the target ta
eb10: 62 6c 65 20 62 79 20 74 68 65 20 61 70 70 6c 69  ble by the appli
eb20: 63 61 74 69 6f 6e 20 74 68 61 74 20 64 65 66 69  cation that defi
eb30: 6e 65 64 20 74 68 65 20 74 72 69 67 67 65 72 2e  ned the trigger.
eb40: 0a 4f 74 68 65 72 20 61 70 70 6c 69 63 61 74 69  .Other applicati
eb50: 6f 6e 73 20 74 68 61 74 20 6d 6f 64 69 66 79 20  ons that modify 
eb60: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69 6c  the database wil
eb70: 6c 20 6e 6f 74 20 62 65 20 61 62 6c 65 20 74 6f  l not be able to
eb80: 20 73 65 65 20 74 68 65 0a 54 45 4d 50 20 74 72   see the.TEMP tr
eb90: 69 67 67 65 72 20 61 6e 64 20 68 65 6e 63 65 20  igger and hence 
eba0: 63 61 6e 6e 6f 74 20 72 75 6e 20 74 68 65 20 74  cannot run the t
ebb0: 72 69 67 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  rigger.</p>..<p>
ebc0: 57 68 65 6e 20 64 65 66 69 6e 69 6e 67 20 61 20  When defining a 
ebd0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 6f 6e 20  TEMP trigger on 
ebe0: 61 20 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65  a non-TEMP table
ebf0: 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e  , it is importan
ec00: 74 20 74 6f 0a 73 70 65 63 69 66 79 20 74 68 65  t to.specify the
ec10: 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
ec20: 67 20 74 68 65 20 6e 6f 6e 2d 54 45 4d 50 20 74  g the non-TEMP t
ec30: 61 62 6c 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  able.  For examp
ec40: 6c 65 2c 0a 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  le,.in the follo
ec50: 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 2c 20  wing statement, 
ec60: 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  it is important 
ec70: 74 6f 20 73 61 79 20 22 6d 61 69 6e 2e 74 61 62  to say "main.tab
ec80: 31 22 20 69 6e 73 74 65 61 64 0a 6f 66 20 6a 75  1" instead.of ju
ec90: 73 74 20 22 74 61 62 31 22 3a 3c 2f 70 3e 0a 0a  st "tab1":</p>..
eca0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
ecb0: 3e 0a 43 52 45 41 54 45 20 54 45 4d 50 20 54 52  >.CREATE TEMP TR
ecc0: 49 47 47 45 52 20 65 78 31 20 41 46 54 45 52 20  IGGER ex1 AFTER 
ecd0: 49 4e 53 45 52 54 20 4f 4e 20 3c 62 3e 6d 61 69  INSERT ON <b>mai
ece0: 6e 2e 3c 2f 62 3e 74 61 62 31 20 42 45 47 49 4e  n.</b>tab1 BEGIN
ecf0: 20 2e 2e 2e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f   ....</pre></blo
ed00: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 46 61 69  ckquote>..<p>Fai
ed10: 6c 75 72 65 20 74 6f 20 73 70 65 63 69 66 79 20  lure to specify 
ed20: 74 68 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20  the schema name 
ed30: 6f 6e 20 74 68 65 20 74 61 72 67 65 74 20 74 61  on the target ta
ed40: 62 6c 65 20 63 6f 75 6c 64 20 72 65 73 75 6c 74  ble could result
ed50: 0a 69 6e 20 74 68 65 20 54 45 4d 50 20 74 72 69  .in the TEMP tri
ed60: 67 67 65 72 20 62 65 69 6e 67 20 72 65 61 74 74  gger being reatt
ed70: 61 63 68 65 64 20 74 6f 20 61 20 74 61 62 6c 65  ached to a table
ed80: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
ed90: 61 6d 65 20 69 6e 0a 61 6e 6f 74 68 65 72 20 64  ame in.another d
eda0: 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
edb0: 20 61 6e 79 20 73 63 68 65 6d 61 20 63 68 61 6e   any schema chan
edc0: 67 65 20 6f 63 63 75 72 73 2e 3c 2f 70 3e 0a 0a  ge occurs.</p>..
edd0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
ede0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee20: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
ee30: 52 45 41 54 45 20 56 49 45 57 7d 20 7b 63 72 65  REATE VIEW} {cre
ee40: 61 74 65 76 69 65 77 7d 20 7b 7b 43 52 45 41 54  ateview} {{CREAT
ee50: 45 20 56 49 45 57 7d 20 76 69 65 77 20 56 49 45  E VIEW} view VIE
ee60: 57 20 2a 76 69 65 77 73 7d 0a 0a 52 65 63 75 72  W *views}..Recur
ee70: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
ee80: 6d 20 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74  m create-view-st
ee90: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
eea0: 68 65 20 43 52 45 41 54 45 20 56 49 45 57 20 63  he CREATE VIEW c
eeb0: 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e 73 20 61  ommand assigns a
eec0: 20 6e 61 6d 65 20 74 6f 20 61 20 70 72 65 2d 70   name to a pre-p
eed0: 61 63 6b 61 67 65 64 20 0a 5b 53 45 4c 45 43 54  ackaged .[SELECT
eee0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f  ] statement. .^O
eef0: 6e 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20  nce the view is 
ef00: 63 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20  created, it can 
ef10: 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46  be used in the F
ef20: 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e  ROM clause.of an
ef30: 6f 74 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69  other [SELECT] i
ef40: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
ef50: 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le name..</p>..<
ef60: 70 3e 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22  p>^If the "TEMP"
ef70: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
ef80: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69  keyword occurs i
ef90: 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54  n between "CREAT
efa0: 45 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68  E".and "VIEW" th
efb0: 65 6e 20 74 68 65 20 76 69 65 77 20 74 68 61 74  en the view that
efc0: 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f   is created is o
efd0: 6e 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74  nly visible to t
efe0: 68 65 0a 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  he.[database con
eff0: 6e 65 63 74 69 6f 6e 5d 20 74 68 61 74 20 63 72  nection] that cr
f000: 65 61 74 65 64 20 69 74 20 61 6e 64 20 69 73 20  eated it and is 
f010: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
f020: 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64  leted when.the d
f030: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
f040: 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70  on is closed.</p
f050: 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 3c 79 79  >..<p> ^If a <yy
f060: 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
f070: 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 73 70 65  </yyterm> is spe
f080: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
f090: 20 76 69 65 77 20 0a 69 73 20 63 72 65 61 74 65   view .is create
f0a0: 64 20 69 6e 20 74 68 65 20 73 70 65 63 69 66 69  d in the specifi
f0b0: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 5e 49 74  ed database..^It
f0c0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
f0d0: 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 3c  specify both a <
f0e0: 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61  yyterm>schema-na
f0f0: 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 61 6e 64 20  me</yyterm>.and 
f100: 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  the TEMP keyword
f110: 20 6f 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c 65   on a VIEW, unle
f120: 73 73 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 73  ss the <yyterm>s
f130: 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65  chema-name</yyte
f140: 72 6d 3e 20 0a 69 73 20 22 74 65 6d 70 22 2e 0a  rm> .is "temp"..
f150: 5e 49 66 20 6e 6f 20 73 63 68 65 6d 61 20 6e 61  ^If no schema na
f160: 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  me is specified,
f170: 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65   and the TEMP ke
f180: 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65  yword is not pre
f190: 73 65 6e 74 2c 0a 74 68 65 20 56 49 45 57 20 69  sent,.the VIEW i
f1a0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
f1b0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 3c   main database.<
f1c0: 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e  /p>..<p>^You can
f1d0: 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49  not [DELETE], [I
f1e0: 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41  NSERT], or [UPDA
f1f0: 54 45 5d 20 61 20 76 69 65 77 2e 20 20 5e 56 69  TE] a view.  ^Vi
f200: 65 77 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c  ews are read-onl
f210: 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20 5e  y .in SQLite.  ^
f220: 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79  However, in many
f230: 20 63 61 73 65 73 20 79 6f 75 20 63 61 6e 20 75   cases you can u
f240: 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f  se an.[INSTEAD O
f250: 46 20 74 72 69 67 67 65 72 5d 20 6f 6e 20 74 68  F trigger] on th
f260: 65 20 76 69 65 77 20 74 6f 20 61 63 63 6f 6d 70  e view to accomp
f270: 6c 69 73 68 20 0a 74 68 65 20 73 61 6d 65 20 74  lish .the same t
f280: 68 69 6e 67 2e 20 20 5e 56 69 65 77 73 20 61 72  hing.  ^Views ar
f290: 65 20 72 65 6d 6f 76 65 64 20 0a 77 69 74 68 20  e removed .with 
f2a0: 74 68 65 20 5b 44 52 4f 50 20 56 49 45 57 5d 20  the [DROP VIEW] 
f2b0: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  command.</p>..<p
f2c0: 3e 5e 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 63  >^If a <yyterm>c
f2d0: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65  olumn-name</yyte
f2e0: 72 6d 3e 20 6c 69 73 74 20 66 6f 6c 6c 6f 77 73  rm> list follows
f2f0: 20 0a 74 68 65 20 3c 79 79 74 65 72 6d 3e 76 69   .the <yyterm>vi
f300: 65 77 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ew-name</yyterm>
f310: 2c 20 74 68 65 6e 20 74 68 61 74 20 6c 69 73 74  , then that list
f320: 20 64 65 74 65 72 6d 69 6e 65 73 0a 74 68 65 20   determines.the 
f330: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 63 6f 6c  names of the col
f340: 75 6d 6e 73 20 66 6f 72 20 74 68 65 20 76 69 65  umns for the vie
f350: 77 2e 20 20 5e 49 66 20 74 68 65 20 3c 79 79 74  w.  ^If the <yyt
f360: 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  erm>column-name<
f370: 2f 79 79 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73  /yyterm>.list is
f380: 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 6e 20 74   omitted, then t
f390: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
f3a0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 76  columns in the v
f3b0: 69 65 77 20 61 72 65 20 64 65 72 69 76 65 64 0a  iew are derived.
f3c0: 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 73 20 6f  from the names o
f3d0: 66 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  f the result-set
f3e0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
f3f0: 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 2e 0a 4e  [select-stmt]..N
f400: 6f 74 65 20 74 68 61 74 20 74 68 65 20 3c 79 79  ote that the <yy
f410: 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  term>column-name
f420: 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20 73  </yyterm> list s
f430: 79 6e 74 61 78 20 69 73 20 6f 6e 6c 79 0a 73 75  yntax is only.su
f440: 70 70 6f 72 74 65 64 20 69 6e 20 53 51 4c 69 74  pported in SQLit
f450: 65 20 76 65 72 73 69 6f 6e 73 20 33 2e 39 2e 30  e versions 3.9.0
f460: 20 61 6e 64 20 6c 61 74 65 72 2e 0a 0a 3c 74 63   and later...<tc
f470: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
f480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4c0: 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
f4d0: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d  E VIRTUAL TABLE}
f4e0: 20 7b 63 72 65 61 74 65 76 74 61 62 7d 20 7b 7b   {createvtab} {{
f4f0: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
f500: 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76  ABLE}}..Recursiv
f510: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
f520: 72 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61  reate-virtual-ta
f530: 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ble-stmt.</tcl>.
f540: 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74  .<p>A [virtual t
f550: 61 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65  able] is an inte
f560: 72 66 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65  rface to an exte
f570: 72 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20  rnal storage or 
f580: 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69  computation.engi
f590: 6e 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20  ne that appears 
f5a0: 74 6f 20 62 65 20 61 20 74 61 62 6c 65 20 62 75  to be a table bu
f5b0: 74 20 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61  t does not actua
f5c0: 6c 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d  lly store inform
f5d0: 61 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74  ation.in the dat
f5e0: 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  abase file.</p>.
f5f0: 0a 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20  .<p>In general, 
f600: 79 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68  you can do anyth
f610: 69 6e 67 20 77 69 74 68 20 61 20 5b 76 69 72 74  ing with a [virt
f620: 75 61 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20  ual table] that 
f630: 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68  can be done.with
f640: 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
f650: 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  le, except that 
f660: 5e 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61  ^you cannot crea
f670: 74 65 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72  te indices or tr
f680: 69 67 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74  iggers on a.virt
f690: 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d  ual table.  ^Som
f6a0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
f6b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
f6c0: 6d 69 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64  might impose add
f6d0: 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74  itional.restrict
f6e0: 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70  ions.  For examp
f6f0: 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c  le, many virtual
f700: 20 74 61 62 6c 65 73 20 61 72 65 20 72 65 61 64   tables are read
f710: 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  -only.</p>..<p>T
f720: 68 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c  he <yyterm>modul
f730: 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  e-name</yyterm> 
f740: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
f750: 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 6d  n object that im
f760: 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69 72  plements.the vir
f770: 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54 68  tual table.  ^Th
f780: 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c 65  e <yyterm>module
f790: 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6d  -name</yyterm> m
f7a0: 75 73 74 20 62 65 20 72 65 67 69 73 74 65 72 65  ust be registere
f7b0: 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69 74  d with.the SQLit
f7c0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
f7d0: 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c  ction using.[sql
f7e0: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
f7f0: 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65  le()] or [sqlite
f800: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
f810: 76 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69  v2()].prior to i
f820: 73 73 75 69 6e 67 20 74 68 65 20 43 52 45 41 54  ssuing the CREAT
f830: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
f840: 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
f850: 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a 65 72  module takes zer
f860: 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d  o or more comma-
f870: 73 65 70 61 72 61 74 65 64 20 61 72 67 75 6d 65  separated argume
f880: 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65  nts..^The argume
f890: 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74 20  nts can be just 
f8a0: 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20 61  about any text a
f8b0: 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61 73  s long as it has
f8c0: 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74   balanced.parent
f8d0: 68 65 73 65 73 2e 20 20 54 68 65 20 61 72 67 75  heses.  The argu
f8e0: 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20 73  ment syntax is s
f8f0: 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e 65  ufficiently gene
f900: 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72 67  ral that the.arg
f910: 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d 61  uments can be ma
f920: 64 65 20 74 6f 20 61 70 70 65 61 72 20 61 73 20  de to appear as 
f930: 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69  [column definiti
f940: 6f 6e 73 5d 20 69 6e 20 61 20 74 72 61 64 69 74  ons] in a tradit
f950: 69 6f 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54 41  ional.[CREATE TA
f960: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
f970: 20 0a 5e 53 51 4c 69 74 65 20 70 61 73 73 65 73   .^SQLite passes
f980: 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 72 67 75   the module argu
f990: 6d 65 6e 74 73 20 64 69 72 65 63 74 6c 79 0a 74  ments directly.t
f9a0: 6f 20 74 68 65 20 5b 78 43 72 65 61 74 65 5d 20  o the [xCreate] 
f9b0: 61 6e 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d  and [xConnect] m
f9c0: 65 74 68 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f  ethods of the mo
f9d0: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
f9e0: 69 6f 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79 20  ion.without any 
f9f0: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20  interpretation. 
fa00: 20 49 74 20 69 73 20 74 68 65 20 72 65 73 70 6f   It is the respo
fa10: 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65  nsibility.of the
fa20: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
fa30: 74 61 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20  tation to parse 
fa40: 61 6e 64 20 69 6e 74 65 72 70 72 65 74 20 69 74  and interpret it
fa50: 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e  s own arguments.
fa60: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74  </p>..<p>^A virt
fa70: 75 61 6c 20 74 61 62 6c 65 20 69 73 20 64 65 73  ual table is des
fa80: 74 72 6f 79 65 64 20 75 73 69 6e 67 20 74 68 65  troyed using the
fa90: 20 6f 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20   ordinary.[DROP 
faa0: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
fab0: 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f 0a 44  .  There is no.D
fac0: 52 4f 50 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ROP VIRTUAL TABL
fad0: 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  E statement.</p>
fae0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
faf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb30: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 44  ######.Section D
fb40: 45 4c 45 54 45 20 64 65 6c 65 74 65 20 7b 44 45  ELETE delete {DE
fb50: 4c 45 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a  LETE *DELETEs}..
fb60: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
fb70: 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74  iagram delete-st
fb80: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  mt.</tcl>..<p>Th
fb90: 65 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64  e DELETE command
fba0: 20 72 65 6d 6f 76 65 73 20 72 65 63 6f 72 64 73   removes records
fbb0: 20 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20   from the table 
fbc0: 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68  identified by th
fbd0: 65 0a 20 20 20 5b 71 75 61 6c 69 66 69 65 64 2d  e.   [qualified-
fbe0: 74 61 62 6c 65 2d 6e 61 6d 65 5d 2e 0a 0a 3c 70  table-name]...<p
fbf0: 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45 20 63  >^If the WHERE c
fc00: 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70 72 65  lause is not pre
fc10: 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64  sent, all record
fc20: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 61  s in the table a
fc30: 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e  re deleted..   ^
fc40: 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
fc50: 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74  e is supplied, t
fc60: 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72  hen only those r
fc70: 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
fc80: 65 0a 20 20 20 57 48 45 52 45 20 63 6c 61 75 73  e.   WHERE claus
fc90: 65 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  e [boolean expre
fca0: 73 73 69 6f 6e 5d 20 69 73 20 74 72 75 65 20 61  ssion] is true a
fcb0: 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e  re deleted..   ^
fcc0: 52 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  Rows for which t
fcd0: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
fce0: 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 20 61   false or NULL a
fcf0: 72 65 20 72 65 74 61 69 6e 65 64 2e 0a 0a 3c 68  re retained...<h
fd00: 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f  3>Restrictions o
fd10: 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65  n DELETE Stateme
fd20: 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41 54  nts Within CREAT
fd30: 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a  E TRIGGER</h3>..
fd40: 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  <p>The following
fd50: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70   restrictions ap
fd60: 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73 74  ply to DELETE st
fd70: 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63  atements that oc
fd80: 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a 20  cur within the. 
fd90: 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45    body of a [CRE
fda0: 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
fdb0: 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20 20  tement:..<ul>.  
fdc0: 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 79 79 74  <li><p>^The <yyt
fdd0: 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  erm>table-name</
fde0: 79 79 74 65 72 6d 3e 20 73 70 65 63 69 66 69 65  yyterm> specifie
fdf0: 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 0a  d as part of a .
fe00: 20 20 20 20 44 45 4c 45 54 45 20 73 74 61 74 65      DELETE state
fe10: 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20  ment within.    
fe20: 61 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d  a trigger body m
fe30: 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69  ust be unqualifi
fe40: 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65 72 20  ed.  ^(In other 
fe50: 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20 3c  words, the.    <
fe60: 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69  i>schema-name</i
fe70: 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78  ><b>.</b> prefix
fe80: 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61   on the table na
fe90: 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  me is not allowe
fea0: 64 20 0a 20 20 20 20 77 69 74 68 69 6e 20 74 72  d .    within tr
feb0: 69 67 67 65 72 73 2e 29 5e 20 5e 49 66 20 74 68  iggers.)^ ^If th
fec0: 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68  e table to which
fed0: 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
fee0: 61 74 74 61 63 68 65 64 20 69 73 0a 20 20 20 20  attached is.    
fef0: 6e 6f 74 20 69 6e 20 74 68 65 20 74 65 6d 70 20  not in the temp 
ff00: 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 44  database, then D
ff10: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
ff20: 20 77 69 74 68 69 6e 20 74 68 65 20 74 72 69 67   within the trig
ff30: 67 65 72 0a 20 20 20 20 62 6f 64 79 20 6d 75 73  ger.    body mus
ff40: 74 20 6f 70 65 72 61 74 65 20 6f 6e 20 74 61 62  t operate on tab
ff50: 6c 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  les within the s
ff60: 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20  ame database as 
ff70: 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c  it. ^If the tabl
ff80: 65 0a 20 20 20 20 74 6f 20 77 68 69 63 68 20 74  e.    to which t
ff90: 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
ffa0: 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65  tached is in the
ffb0: 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20   TEMP database, 
ffc0: 74 68 65 6e 20 74 68 65 0a 20 20 20 20 75 6e 71  then the.    unq
ffd0: 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66  ualified name of
ffe0: 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
fff0: 20 64 65 6c 65 74 65 64 20 69 73 20 72 65 73 6f   deleted is reso
10000 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  lved in the same
10010 20 77 61 79 20 61 73 0a 20 20 20 20 69 74 20 69   way as.    it i
10020 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65  s for a top-leve
10030 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20  l statement (by 
10040 73 65 61 72 63 68 69 6e 67 20 66 69 72 73 74 20  searching first 
10050 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
10060 65 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20  e, then.    the 
10070 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
10080 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61  hen any other da
10090 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f  tabases in the o
100a0 72 64 65 72 20 74 68 65 79 20 77 65 72 65 0a 20  rder they were. 
100b0 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 20 20     attached)..  
100c0 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65    .  <li><p>^The
100d0 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
100e0 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
100f0 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  ses are not allo
10100 77 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a 20 20  wed on DELETE.  
10110 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
10120 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70  hin triggers.</p
10130 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  >..  <li><p>^The
10140 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52   LIMIT and ORDER
10150 20 42 59 20 63 6c 61 75 73 65 73 20 28 64 65 73   BY clauses (des
10160 63 72 69 62 65 64 20 62 65 6c 6f 77 29 20 61 72  cribed below) ar
10170 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20 66 6f  e unsupported fo
10180 72 0a 20 20 20 20 44 45 4c 45 54 45 20 73 74 61  r.    DELETE sta
10190 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
101a0 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c 2f 75  riggers.</p>.</u
101b0 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c  l>..<h3>Optional
101c0 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52   LIMIT and ORDER
101d0 20 42 59 20 63 6c 61 75 73 65 73 3c 2f 68 33 3e   BY clauses</h3>
101e0 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65  ..<p>^(If SQLite
101f0 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
10200 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  h the [SQLITE_EN
10210 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
10220 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c  TE_LIMIT].compil
10230 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74  e-time option, t
10240 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f  hen the syntax o
10250 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
10260 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e 64  tement is.extend
10270 65 64 20 62 79 20 74 68 65 20 61 64 64 69 74 69  ed by the additi
10280 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f  on of optional O
10290 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
102a0 54 20 63 6c 61 75 73 65 73 3a 29 5e 3c 2f 70 3e  T clauses:)^</p>
102b0 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
102c0 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74  gram delete-stmt
102d0 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a  -limited</tcl>..
102e0 3c 70 3e 5e 49 66 20 61 20 44 45 4c 45 54 45 20  <p>^If a DELETE 
102f0 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20  statement has a 
10300 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
10310 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
10320 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69   of rows that.wi
10330 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 69 73  ll be deleted is
10340 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
10350 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61  ting the accompa
10360 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nying expression
10370 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20   and casting.it 
10380 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
10390 6c 75 65 2e 20 5e 49 66 20 74 68 65 20 72 65 73  lue. ^If the res
103a0 75 6c 74 20 6f 66 20 74 68 65 20 65 76 61 6c 75  ult of the evalu
103b0 61 74 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  ating the LIMIT 
103c0 63 6c 61 75 73 65 0a 63 61 6e 6e 6f 74 20 62 65  clause.cannot be
103d0 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76   losslessly conv
103e0 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
103f0 67 65 72 20 76 61 6c 75 65 2c 20 69 74 20 69 73  ger value, it is
10400 20 61 6e 20 65 72 72 6f 72 2e 20 5e 41 20 0a 6e   an error. ^A .n
10410 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20 76 61  egative LIMIT va
10420 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74  lue is interpret
10430 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22  ed as "no limit"
10440 2e 20 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54  . ^(If the DELET
10450 45 20 73 74 61 74 65 6d 65 6e 74 20 0a 61 6c 73  E statement .als
10460 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20  o has an OFFSET 
10470 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20  clause, then it 
10480 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61  is similarly eva
10490 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74 20  luated and cast 
104a0 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 76 61  to an.integer va
104b0 6c 75 65 2e 20 41 67 61 69 6e 2c 20 69 74 20 69  lue. Again, it i
104c0 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
104d0 65 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  e value cannot b
104e0 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e  e losslessly.con
104f0 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
10500 65 67 65 72 2e 29 5e 20 5e 49 66 20 74 68 65 72  eger.)^ ^If ther
10510 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 20 63  e is no OFFSET c
10520 6c 61 75 73 65 2c 20 6f 72 20 74 68 65 20 63 61  lause, or the ca
10530 6c 63 75 6c 61 74 65 64 0a 69 6e 74 65 67 65 72  lculated.integer
10540 20 76 61 6c 75 65 20 69 73 20 6e 65 67 61 74 69   value is negati
10550 76 65 2c 20 74 68 65 20 65 66 66 65 63 74 69 76  ve, the effectiv
10560 65 20 4f 46 46 53 45 54 20 76 61 6c 75 65 20 69  e OFFSET value i
10570 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28 49 66  s zero...<p>^(If
10580 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
10590 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44  ement has an ORD
105a0 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
105b0 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
105c0 20 77 6f 75 6c 64 20 0a 62 65 20 64 65 6c 65 74   would .be delet
105d0 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63  ed in the absenc
105e0 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
105f0 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64  lause are sorted
10600 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
10610 65 20 0a 4f 52 44 45 52 20 42 59 2e 20 54 68 65  e .ORDER BY. The
10620 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 20   first <i>M</i> 
10630 72 6f 77 73 2c 20 77 68 65 72 65 20 3c 69 3e 4d  rows, where <i>M
10640 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75  </i> is the valu
10650 65 20 66 6f 75 6e 64 20 62 79 0a 65 76 61 6c 75  e found by.evalu
10660 61 74 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54  ating the OFFSET
10670 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
10680 6f 6e 2c 20 61 72 65 20 73 6b 69 70 70 65 64 2c  on, are skipped,
10690 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69   and the followi
106a0 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20 77 68  ng .<i>N</i>, wh
106b0 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69 73 20  ere <i>N</i> is 
106c0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
106d0 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
106e0 6e 2c 20 61 72 65 20 64 65 6c 65 74 65 64 2e 29  n, are deleted.)
106f0 5e 0a 5e 49 66 20 74 68 65 72 65 20 61 72 65 20  ^.^If there are 
10700 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e 3c 2f  less than <i>N</
10710 69 3e 20 72 6f 77 73 20 72 65 6d 61 69 6e 69 6e  i> rows remainin
10720 67 20 61 66 74 65 72 20 74 61 6b 69 6e 67 20 74  g after taking t
10730 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
10740 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2c 20 6f  .into account, o
10750 72 20 69 66 20 74 68 65 20 4c 49 4d 49 54 20 63  r if the LIMIT c
10760 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 64 20  lause evaluated 
10770 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61  to a negative va
10780 6c 75 65 2c 20 74 68 65 6e 20 61 6c 6c 0a 72 65  lue, then all.re
10790 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 61 72 65  maining rows are
107a0 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 49   deleted...<p>^I
107b0 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
107c0 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52  tement has no OR
107d0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
107e0 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
107f0 74 0a 77 6f 75 6c 64 20 62 65 20 64 65 6c 65 74  t.would be delet
10800 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63  ed in the absenc
10810 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
10820 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d 62  lause are assemb
10830 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72  led in an.arbitr
10840 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65  ary order before
10850 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49   applying the LI
10860 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63  MIT and OFFSET c
10870 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d  lauses to determ
10880 69 6e 65 20 0a 74 68 65 20 73 75 62 73 65 74 20  ine .the subset 
10890 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c  that are actuall
108a0 79 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e  y deleted...<p>^
108b0 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c  (The ORDER BY cl
108c0 61 75 73 65 20 6f 6e 20 61 20 44 45 4c 45 54 45  ause on a DELETE
108d0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
108e0 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72  ed only to deter
108f0 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73 20  mine which.rows 
10900 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20  fall within the 
10910 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65 72  LIMIT. The order
10920 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61   in which rows a
10930 72 65 20 64 65 6c 65 74 65 64 20 69 73 20 61 72  re deleted is ar
10940 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e  bitrary.and is n
10950 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79  ot influenced by
10960 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
10970 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  ause.)^..<tcl>hd
10980 5f 66 72 61 67 6d 65 6e 74 20 74 72 75 6e 63 61  _fragment trunca
10990 74 65 6f 70 74 20 7b 74 72 75 6e 63 61 74 65 20  teopt {truncate 
109a0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74  optimization}</t
109b0 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54 72 75 6e  cl>.<h3>The Trun
109c0 63 61 74 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  cate Optimizatio
109d0 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  n</h3>..<p>^When
109e0 20 74 68 65 20 57 48 45 52 45 20 69 73 20 6f 6d   the WHERE is om
109f0 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44 45 4c  itted from a DEL
10a00 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  ETE statement an
10a10 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65 69 6e  d the table.bein
10a20 67 20 64 65 6c 65 74 65 64 20 68 61 73 20 6e 6f  g deleted has no
10a30 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c 69 74   triggers,.SQLit
10a40 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69 6d 69  e uses an optimi
10a50 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73 65 20  zation to erase 
10a60 74 68 65 20 65 6e 74 69 72 65 20 74 61 62 6c 65  the entire table
10a70 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f 75 74   content.without
10a80 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73 69 74   having to visit
10a90 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
10aa0 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64 75 61   table individua
10ab0 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72 75 6e 63  lly..This "trunc
10ac0 61 74 65 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ate" optimizatio
10ad0 6e 20 6d 61 6b 65 73 20 74 68 65 20 64 65 6c 65  n makes the dele
10ae0 74 65 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74  te run much fast
10af0 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53 51 4c  er..Prior to SQL
10b00 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36  ite [version 3.6
10b10 2e 35 5d 2c 20 74 68 65 20 74 72 75 6e 63 61 74  .5], the truncat
10b20 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 61  e optimization.a
10b30 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61 74 20 74  lso meant that t
10b40 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e  he [sqlite3_chan
10b50 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71 6c 69  ges()] and.[sqli
10b60 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
10b70 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a  s()] interfaces.
10b80 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74 5f 63  and the [count_c
10b90 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 0a 77  hanges pragma].w
10ba0 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  ill not actually
10bb0 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
10bc0 65 72 20 6f 66 20 64 65 6c 65 74 65 64 20 72 6f  er of deleted ro
10bd0 77 73 2e 20 20 0a 54 68 61 74 20 70 72 6f 62 6c  ws.  .That probl
10be0 65 6d 20 68 61 73 20 62 65 65 6e 20 66 69 78 65  em has been fixe
10bf0 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e  d as of [version
10c00 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70 3e 5e 54 68   3.6.5]...<p>^Th
10c10 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d  e truncate optim
10c20 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 70  ization can be p
10c30 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62  ermanently disab
10c40 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75 65 72  led for all quer
10c50 69 65 73 0a 62 79 20 72 65 63 6f 6d 70 69 6c 69  ies.by recompili
10c60 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68 20 74  ng.SQLite with t
10c70 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  he [SQLITE_OMIT_
10c80 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d 49 5a  TRUNCATE_OPTIMIZ
10c90 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74  ATION] compile-t
10ca0 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70 3e 0a  ime switch.</p>.
10cb0 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63 61 74 65  .<p>The truncate
10cc0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61   optimization ca
10cd0 6e 20 61 6c 73 6f 20 62 65 20 64 69 73 61 62 6c  n also be disabl
10ce0 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  ed at runtime us
10cf0 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33  ing.the [sqlite3
10d00 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28  _set_authorizer(
10d10 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 20 20 5e  )] interface.  ^
10d20 49 66 20 61 6e 20 61 75 74 68 6f 72 69 7a 65 72  If an authorizer
10d30 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74 75 72 6e   callback.return
10d40 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  s [SQLITE_IGNORE
10d50 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49 54 45  ] for an [SQLITE
10d60 5f 44 45 4c 45 54 45 5d 20 61 63 74 69 6f 6e 20  _DELETE] action 
10d70 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68 65 20 44  code, then.the D
10d80 45 4c 45 54 45 20 6f 70 65 72 61 74 69 6f 6e 20  ELETE operation 
10d90 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 62 75 74  will proceed but
10da0 20 74 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70   the truncate op
10db0 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69 6c 6c 0a  timization will.
10dc0 62 65 20 62 79 70 61 73 73 65 64 20 61 6e 64 20  be bypassed and 
10dd0 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 64 65 6c  rows will be del
10de0 65 74 65 64 20 6f 6e 65 20 62 79 20 6f 6e 65 2e  eted one by one.
10df0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
10e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e40 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
10e50 69 6f 6e 20 7b 44 45 54 41 43 48 20 44 41 54 41  ion {DETACH DATA
10e60 42 41 53 45 7d 20 64 65 74 61 63 68 20 2a 44 45  BASE} detach *DE
10e70 54 41 43 48 0a 0a 52 65 63 75 72 73 69 76 65 42  TACH..RecursiveB
10e80 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 74  ubbleDiagram det
10e90 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ach-stmt.</tcl>.
10ea0 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d  .<p>^This statem
10eb0 65 6e 74 20 64 65 74 61 63 68 65 73 20 61 6e 20  ent detaches an 
10ec0 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 62  additional datab
10ed0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  ase connection p
10ee0 72 65 76 69 6f 75 73 6c 79 20 0a 61 74 74 61 63  reviously .attac
10ef0 68 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 41  hed using the [A
10f00 54 54 41 43 48 5d 20 73 74 61 74 65 6d 65 6e 74  TTACH] statement
10f10 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f 74 20 69 6e  .  .^When not in
10f20 20 5b 73 68 61 72 65 64 20 63 61 63 68 65 20 6d   [shared cache m
10f30 6f 64 65 5d 2c 20 0a 69 74 20 69 73 20 70 6f 73  ode], .it is pos
10f40 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 74 68  sible to have th
10f50 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
10f60 66 69 6c 65 20 61 74 74 61 63 68 65 64 20 6d 75  file attached mu
10f70 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75 73 69  ltiple times usi
10f80 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20 6e 61  ng .different na
10f90 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63 68 69  mes, and detachi
10fa0 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f  ng one connectio
10fb0 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69 6c 6c  n to a file will
10fc0 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74 68 65   leave the .othe
10fd0 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a 5e  rs intact.</p>.^
10fe0 49 6e 20 5b 73 68 61 72 65 64 20 63 61 63 68 65  In [shared cache
10ff0 20 6d 6f 64 65 5d 2c 20 61 74 74 65 6d 70 74 69   mode], attempti
11000 6e 67 20 74 6f 20 61 74 74 61 63 68 20 74 68 65  ng to attach the
11010 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 66   same database f
11020 69 6c 65 20 6d 6f 72 65 0a 74 68 61 6e 20 6f 6e  ile more.than on
11030 63 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 6e  ce results in an
11040 20 65 72 72 6f 72 2e 0a 0a 3c 70 3e 5e 54 68 69   error...<p>^Thi
11050 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  s statement will
11060 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74 65 20   fail if SQLite 
11070 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  is in the middle
11080 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   of a transactio
11090 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  n.</p>...<tcl>.#
110a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110e0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
110f0 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e 44 45  ction {DROP INDE
11100 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b 7b 44  X} dropindex {{D
11110 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 52 65 63  ROP INDEX}}..Rec
11120 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
11130 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d 73  ram drop-index-s
11140 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
11150 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73  The DROP INDEX s
11160 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
11170 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64 0a   an index added.
11180 77 69 74 68 20 74 68 65 20 5b 43 52 45 41 54 45  with the [CREATE
11190 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e   INDEX] statemen
111a0 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20 69 73  t.  The index is
111b0 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f   completely remo
111c0 76 65 64 20 66 72 6f 6d 0a 74 68 65 20 64 69 73  ved from.the dis
111d0 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77 61 79  k.  The only way
111e0 20 74 6f 20 72 65 63 6f 76 65 72 20 74 68 65 20   to recover the 
111f0 69 6e 64 65 78 20 69 73 20 74 6f 20 72 65 65 6e  index is to reen
11200 74 65 72 20 74 68 65 0a 61 70 70 72 6f 70 72 69  ter the.appropri
11210 61 74 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  ate [CREATE INDE
11220 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  X] command.</p>.
11230 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
11240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11280 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
11290 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74  ROP TABLE} dropt
112a0 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42 4c  able {{DROP TABL
112b0 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  E}}..RecursiveBu
112c0 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
112d0 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63  -table-stmt.</tc
112e0 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
112f0 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
11300 20 72 65 6d 6f 76 65 73 20 61 20 74 61 62 6c 65   removes a table
11310 20 61 64 64 65 64 20 77 69 74 68 20 74 68 65 0a   added with the.
11320 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
11330 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e  tatement.  The n
11340 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69 73  ame specified is
11350 20 74 68 65 0a 74 61 62 6c 65 20 6e 61 6d 65 2e   the.table name.
11360 20 20 5e 54 68 65 20 64 72 6f 70 70 65 64 20 74    ^The dropped t
11370 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c 65 74 65  able is complete
11380 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  ly removed from 
11390 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 73 63  the database .sc
113a0 68 65 6d 61 20 61 6e 64 20 74 68 65 20 64 69 73  hema and the dis
113b0 6b 20 66 69 6c 65 2e 20 20 54 68 65 20 74 61 62  k file.  The tab
113c0 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65 20 72 65  le can not be re
113d0 63 6f 76 65 72 65 64 2e 20 20 0a 5e 41 6c 6c 20  covered.  .^All 
113e0 69 6e 64 69 63 65 73 20 61 6e 64 20 74 72 69 67  indices and trig
113f0 67 65 72 73 0a 61 73 73 6f 63 69 61 74 65 64 20  gers.associated 
11400 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 61  with the table a
11410 72 65 20 61 6c 73 6f 20 64 65 6c 65 74 65 64 2e  re also deleted.
11420 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70  </p>..<p>^The op
11430 74 69 6f 6e 61 6c 20 49 46 20 45 58 49 53 54 53  tional IF EXISTS
11440 20 63 6c 61 75 73 65 20 73 75 70 70 72 65 73 73   clause suppress
11450 65 73 20 74 68 65 20 65 72 72 6f 72 20 74 68 61  es the error tha
11460 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79  t would normally
11470 0a 72 65 73 75 6c 74 20 69 66 20 74 68 65 20 74  .result if the t
11480 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78  able does not ex
11490 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ist.</p>..<p>^If
114a0 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f   [foreign key co
114b0 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20 65  nstraints] are e
114c0 6e 61 62 6c 65 64 2c 20 61 20 44 52 4f 50 20 54  nabled, a DROP T
114d0 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 70 65 72  ABLE command per
114e0 66 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c 69 63 69  forms an.implici
114f0 74 20 5b 44 45 4c 45 54 45 20 7c 20 44 45 4c 45  t [DELETE | DELE
11500 54 45 20 46 52 4f 4d 5d 20 63 6f 6d 6d 61 6e 64  TE FROM] command
11510 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
11520 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
11530 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
11540 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
11550 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
11560 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
11570 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
11580 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
11590 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
115a0 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 0a 69 73  t DELETE FROM.is
115b0 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20 74 68   executed, so th
115c0 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20  is cannot cause 
115d0 61 6e 79 20 74 72 69 67 67 65 72 73 20 74 6f 20  any triggers to 
115e0 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72 61 73  fire. By contras
115f0 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20  t, ^an.implicit 
11600 44 45 4c 45 54 45 20 46 52 4f 4d 20 64 6f 65 73  DELETE FROM does
11610 20 63 61 75 73 65 20 61 6e 79 20 63 6f 6e 66 69   cause any confi
11620 67 75 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b  gured.[foreign k
11630 65 79 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74  ey actions] to t
11640 61 6b 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20  ake place. .^If 
11650 74 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c  the implicit DEL
11660 45 54 45 20 46 52 4f 4d 20 65 78 65 63 75 74 65  ETE FROM execute
11670 64 0a 61 73 20 70 61 72 74 20 6f 66 20 61 20 44  d.as part of a D
11680 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e  ROP TABLE comman
11690 64 20 76 69 6f 6c 61 74 65 73 20 61 6e 79 20 69  d violates any i
116a0 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
116b0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
116c0 2c 0a 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  ,.an error is re
116d0 74 75 72 6e 65 64 20 61 6e 64 20 74 68 65 20 74  turned and the t
116e0 61 62 6c 65 20 69 73 20 6e 6f 74 20 64 72 6f 70  able is not drop
116f0 70 65 64 2e 20 5e 49 66 20 0a 74 68 65 20 69 6d  ped. ^If .the im
11700 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52  plicit DELETE FR
11710 4f 4d 20 63 61 75 73 65 73 20 61 6e 79 20 0a 64  OM causes any .d
11720 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20  eferred foreign 
11730 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
11740 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c 20  to be violated, 
11750 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69 6f  and the violatio
11760 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20 77  ns still.exist w
11770 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74  hen the transact
11780 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65 64  ion is committed
11790 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  , an error is re
117a0 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74 69  turned at the ti
117b0 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a 3c  me.of commit...<
117c0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
117d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11810 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
11820 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
11830 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54 52  rigger {{DROP TR
11840 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69  IGGER}}..Recursi
11850 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
11860 64 72 6f 70 2d 74 72 69 67 67 65 72 2d 73 74 6d  drop-trigger-stm
11870 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
11880 65 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 73  e DROP TRIGGER s
11890 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
118a0 20 61 20 74 72 69 67 67 65 72 20 63 72 65 61 74   a trigger creat
118b0 65 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45 41  ed by the .[CREA
118c0 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
118d0 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20 72 65 6d  ement. ^Once rem
118e0 6f 76 65 64 2c 20 74 68 65 20 74 72 69 67 67 65  oved, the trigge
118f0 72 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20  r definition is 
11900 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72 65 73 65 6e  no.longer presen
11910 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  t in the sqlite_
11920 6d 61 73 74 65 72 20 28 6f 72 20 73 71 6c 69 74  master (or sqlit
11930 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 74  e_temp_master) t
11940 61 62 6c 65 20 61 6e 64 20 69 73 0a 6e 6f 74 20  able and is.not 
11950 66 69 72 65 64 20 62 79 20 61 6e 79 20 73 75 62  fired by any sub
11960 73 65 71 75 65 6e 74 20 49 4e 53 45 52 54 2c 20  sequent INSERT, 
11970 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
11980 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 70   statements...<p
11990 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 72 69 67  >^Note that trig
119a0 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74  gers are automat
119b0 69 63 61 6c 6c 79 20 64 72 6f 70 70 65 64 20 77  ically dropped w
119c0 68 65 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74  hen the associat
119d0 65 64 20 74 61 62 6c 65 20 69 73 0a 64 72 6f 70  ed table is.drop
119e0 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  ped...<tcl>.####
119f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a30 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
11a40 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20 64  on {DROP VIEW} d
11a50 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20 56  ropview {{DROP V
11a60 49 45 57 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  IEW}}..Recursive
11a70 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
11a80 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f 74  op-view-stmt.</t
11a90 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f  cl>..<p>^The DRO
11aa0 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74  P VIEW statement
11ab0 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77 20   removes a view 
11ac0 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20 5b  created by the [
11ad0 43 52 45 41 54 45 20 56 49 45 57 5d 20 0a 20 20  CREATE VIEW] .  
11ae0 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54 68 65 20  statement. ^The 
11af0 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e 20  view definition 
11b00 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
11b10 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
11b20 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e 6f 20 61  ema, but .  no a
11b30 63 74 75 61 6c 20 64 61 74 61 20 69 6e 20 74 68  ctual data in th
11b40 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 62 61 73  e underlying bas
11b50 65 20 74 61 62 6c 65 73 20 69 73 20 6d 6f 64 69  e tables is modi
11b60 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  fied...<p>^(The 
11b70 76 69 65 77 20 74 6f 20 64 72 6f 70 20 69 73 20  view to drop is 
11b80 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68  identified by th
11b90 65 20 76 69 65 77 2d 6e 61 6d 65 20 61 6e 64 20  e view-name and 
11ba0 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 73 63 68 65  optional .  sche
11bb0 6d 61 2d 6e 61 6d 65 20 73 70 65 63 69 66 69 65  ma-name specifie
11bc0 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
11bd0 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65   DROP VIEW state
11be0 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20 20 72 65  ment. This .  re
11bf0 66 65 72 65 6e 63 65 20 69 73 20 72 65 73 6f 6c  ference is resol
11c00 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 73 74  ved using the st
11c10 61 6e 64 61 72 64 20 70 72 6f 63 65 64 75 72 65  andard procedure
11c20 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20 72 65 73   for [object res
11c30 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a 3c 70 3e  olution].)^..<p>
11c40 0a 20 20 5e 49 66 20 74 68 65 20 73 70 65 63 69  .  ^If the speci
11c50 66 69 65 64 20 76 69 65 77 20 63 61 6e 6e 6f 74  fied view cannot
11c60 20 62 65 20 66 6f 75 6e 64 20 61 6e 64 20 74 68   be found and th
11c70 65 20 49 46 20 45 58 49 53 54 53 20 63 6c 61 75  e IF EXISTS clau
11c80 73 65 20 69 73 20 6e 6f 74 20 0a 20 20 70 72 65  se is not .  pre
11c90 73 65 6e 74 2c 20 69 74 20 69 73 20 61 6e 20 65  sent, it is an e
11ca0 72 72 6f 72 2e 20 5e 49 66 20 74 68 65 20 73 70  rror. ^If the sp
11cb0 65 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e  ecified view can
11cc0 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64  not be found and
11cd0 20 61 6e 20 49 46 0a 20 20 45 58 49 53 54 53 20   an IF.  EXISTS 
11ce0 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
11cf0 74 20 69 6e 20 74 68 65 20 44 52 4f 50 20 56 49  t in the DROP VI
11d00 45 57 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  EW statement, th
11d10 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  en the statement
11d20 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 0a  .  is a no-op...
11d30 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
11d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d80 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
11d90 61 74 61 62 61 73 65 20 4f 62 6a 65 63 74 20 4e  atabase Object N
11da0 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f 6e 7d 20  ame Resolution} 
11db0 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62 6a 65 63  {naming} {{objec
11dc0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 3c  t resolution}}.<
11dd0 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20 49 6e 20  /tcl>..<p>.  In 
11de0 53 51 4c 69 74 65 2c 20 61 20 64 61 74 61 62 61  SQLite, a databa
11df0 73 65 20 6f 62 6a 65 63 74 20 28 61 20 74 61 62  se object (a tab
11e00 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72 69 67 67  le, index, trigg
11e10 65 72 20 6f 72 20 76 69 65 77 29 20 69 73 20 69  er or view) is i
11e20 64 65 6e 74 69 66 69 65 64 0a 20 20 62 79 20 74  dentified.  by t
11e30 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f  he name of the o
11e40 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20 6e 61  bject and the na
11e50 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  me of the databa
11e60 73 65 20 74 68 61 74 20 69 74 20 72 65 73 69 64  se that it resid
11e70 65 73 20 69 6e 2e 20 0a 20 20 44 61 74 61 62 61  es in. .  Databa
11e80 73 65 20 6f 62 6a 65 63 74 73 20 6d 61 79 20 72  se objects may r
11e90 65 73 69 64 65 20 69 6e 20 74 68 65 20 6d 61 69  eside in the mai
11ea0 6e 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 20  n database, the 
11eb0 74 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20 6f  temp database, o
11ec0 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54 54 41 43  r in.  an [ATTAC
11ed0 48 7c 61 74 74 61 63 68 65 64 20 64 61 74 61 62  H|attached datab
11ee0 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20 54 68 65  ase]...<p>.  The
11ef0 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 5b   syntax of the [
11f00 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20 5b 44 52  DROP TABLE], [DR
11f10 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44 52 4f 50  OP INDEX], [DROP
11f20 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50 20 54 52   VIEW], [DROP TR
11f30 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45 49 4e 44  IGGER],.  [REIND
11f40 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54 41 42 4c  EX], [ALTER TABL
11f50 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f 74 68 65  E] and many othe
11f60 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c 6c 20 70  r commands all p
11f70 65 72 6d 69 74 20 74 68 65 20 75 73 65 72 20 74  ermit the user t
11f80 6f 0a 20 20 73 70 65 63 69 66 79 20 61 20 64 61  o.  specify a da
11f90 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20 65 69  tabase object ei
11fa0 74 68 65 72 20 62 79 20 69 74 73 20 6e 61 6d 65  ther by its name
11fb0 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79 20 61 20   alone, or by a 
11fc0 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 0a 20  combination of. 
11fd0 20 69 74 73 20 6e 61 6d 65 20 61 6e 64 20 74 68   its name and th
11fe0 65 20 6e 61 6d 65 20 6f 66 20 69 74 73 20 64 61  e name of its da
11ff0 74 61 62 61 73 65 2e 20 5e 28 49 66 20 6e 6f 20  tabase. ^(If no 
12000 64 61 74 61 62 61 73 65 20 69 73 20 73 70 65 63  database is spec
12010 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20 20  ified as part.  
12020 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20 72 65  of the object re
12030 66 65 72 65 6e 63 65 2c 20 74 68 65 6e 20 53 51  ference, then SQ
12040 4c 69 74 65 20 73 65 61 72 63 68 65 73 20 74 68  Lite searches th
12050 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20 61 6e 64  e main, temp and
12060 20 61 6c 6c 20 61 74 74 61 63 68 65 64 0a 20 20   all attached.  
12070 64 61 74 61 62 61 73 65 73 20 66 6f 72 20 61 6e  databases for an
12080 20 6f 62 6a 65 63 74 20 77 69 74 68 20 61 20 6d   object with a m
12090 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e 20 54 68  atching name. Th
120a0 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 20  e temp database 
120b0 69 73 20 73 65 61 72 63 68 65 64 0a 20 20 66 69  is searched.  fi
120c0 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64 20 62 79  rst, followed by
120d0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
120e0 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20 61 6c 6c  se, followed all
120f0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
12100 73 65 73 20 69 6e 20 74 68 65 0a 20 20 6f 72 64  ses in the.  ord
12110 65 72 20 74 68 61 74 20 74 68 65 79 20 77 65 72  er that they wer
12120 65 20 61 74 74 61 63 68 65 64 2e 20 54 68 65 20  e attached. The 
12130 72 65 66 65 72 65 6e 63 65 20 72 65 73 6f 6c 76  reference resolv
12140 65 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  es to the first 
12150 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64 2e 29 5e  match.  found.)^
12160 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c   For example:..<
12170 70 72 65 3e 5e 28 0a 20 20 20 20 20 20 2f 2a 20  pre>^(.      /* 
12180 41 64 64 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  Add a table name
12190 64 20 27 74 31 27 20 74 6f 20 74 68 65 20 74 65  d 't1' to the te
121a0 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20 61 6e 20  mp, main and an 
121b0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
121c0 65 20 2a 2f 0a 20 20 20 20 20 20 41 54 54 41 43  e */.      ATTAC
121d0 48 20 27 66 69 6c 65 2e 64 62 27 20 41 53 20 61  H 'file.db' AS a
121e0 75 78 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  ux;.      CREATE
121f0 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29 3b   TABLE t1(x, y);
12200 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45  .      CREATE TE
12210 4d 50 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79  MP TABLE t1(x, y
12220 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  );.      CREATE 
12230 54 41 42 4c 45 20 61 75 78 2e 74 31 28 78 2c 20  TABLE aux.t1(x, 
12240 79 29 3b 0a 0a 20 20 20 20 20 20 44 52 4f 50 20  y);..      DROP 
12250 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20  TABLE t1;       
12260 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20    /* Drop table 
12270 69 6e 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  in temp database
12280 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50 20 54   */.      DROP T
12290 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20 20  ABLE t1;        
122a0 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20 69   /* Drop table i
122b0 6e 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  n main database 
122c0 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41  */.      DROP TA
122d0 42 4c 45 20 74 31 3b 20 20 20 20 20 20 20 20 20  BLE t1;         
122e0 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65 20 69 6e  /* Drop table in
122f0 20 61 75 78 20 64 61 74 61 62 61 73 65 20 2a 2f   aux database */
12300 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70 3e 0a 20  .)^</pre>..<p>. 
12310 20 5e 49 66 20 61 20 73 63 68 65 6d 61 20 6e 61   ^If a schema na
12320 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  me is specified 
12330 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 6f 62  as part of an ob
12340 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20  ject reference, 
12350 69 74 20 6d 75 73 74 20 62 65 0a 20 20 65 69 74  it must be.  eit
12360 68 65 72 20 22 6d 61 69 6e 22 2c 20 6f 72 20 22  her "main", or "
12370 74 65 6d 70 22 20 6f 72 20 74 68 65 20 73 63 68  temp" or the sch
12380 65 6d 61 2d 6e 61 6d 65 20 6f 66 20 61 6e 20 61  ema-name of an a
12390 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
123a0 2e 0a 20 20 5e 4c 69 6b 65 20 6f 74 68 65 72 20  ..  ^Like other 
123b0 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72 73 2c  SQL identifiers,
123c0 20 73 63 68 65 6d 61 20 6e 61 6d 65 73 20 61 72   schema names ar
123d0 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  e case-insensiti
123e0 76 65 2e 0a 20 20 5e 49 66 20 61 20 73 63 68 65  ve..  ^If a sche
123f0 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69  ma name is speci
12400 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  fied, then only 
12410 74 68 61 74 20 6f 6e 65 20 73 63 68 65 6d 61 20  that one schema 
12420 69 73 20 73 65 61 72 63 68 65 64 20 66 6f 72 0a  is searched for.
12430 20 20 74 68 65 20 6e 61 6d 65 64 20 6f 62 6a 65    the named obje
12440 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f 73 74 20  ct...<p>.  Most 
12450 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65  object reference
12460 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73 6f 6c  s may only resol
12470 76 65 20 74 6f 20 61 20 73 70 65 63 69 66 69 63  ve to a specific
12480 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 20   type of object 
12490 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c 65 20 61  (for.  example a
124a0 20 72 65 66 65 72 65 6e 63 65 20 74 68 61 74 20   reference that 
124b0 69 73 20 70 61 72 74 20 6f 66 20 61 20 44 52 4f  is part of a DRO
124c0 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  P TABLE statemen
124d0 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65 73 6f 6c  t may only resol
124e0 76 65 0a 20 20 74 6f 20 61 20 74 61 62 6c 65 20  ve.  to a table 
124f0 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61 6e 20 69  object, not an i
12500 6e 64 65 78 2c 20 74 72 69 67 67 65 72 20 6f 72  ndex, trigger or
12510 20 76 69 65 77 29 2e 20 48 6f 77 65 76 65 72 20   view). However 
12520 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65 78 74 73  in some contexts
12530 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45 49 4e 44   .  (e.g. [REIND
12540 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63 74 20 72  EX]) an object r
12550 65 66 65 72 65 6e 63 65 20 6d 61 79 20 62 65 20  eference may be 
12560 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f 72 65 20  resolve to more 
12570 74 68 61 6e 20 6f 6e 65 20 74 79 70 65 0a 20 20  than one type.  
12580 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57 68 65 6e  of object. ^When
12590 20 73 65 61 72 63 68 69 6e 67 20 64 61 74 61 62   searching datab
125a0 61 73 65 20 73 63 68 65 6d 61 73 20 66 6f 72 20  ase schemas for 
125b0 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2c 20  a named object, 
125c0 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20 74 79 70  objects of.  typ
125d0 65 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  es that cannot b
125e0 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 63 6f  e used in the co
125f0 6e 74 65 78 74 20 6f 66 20 74 68 65 20 72 65 66  ntext of the ref
12600 65 72 65 6e 63 65 20 61 72 65 20 61 6c 77 61 79  erence are alway
12610 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c  s .  ignored...<
12620 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
12630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12670 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50 4c  ###.Section EXPL
12680 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50 4c  AIN explain EXPL
12690 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  AIN..BubbleDiagr
126a0 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74 63  am sql-stmt.</tc
126b0 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51 4c 20 73  l>..<p>^An SQL s
126c0 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65 20  tatement can be 
126d0 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20  preceded by the 
126e0 6b 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49 4e  keyword "EXPLAIN
126f0 22 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72 61  " or.by the phra
12700 73 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52  se "EXPLAIN QUER
12710 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69 74 68 65  Y PLAN".  ^Eithe
12720 72 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 63  r modification c
12730 61 75 73 65 73 20 74 68 65 0a 53 51 4c 20 73 74  auses the.SQL st
12740 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 68 61 76  atement to behav
12750 65 20 61 73 20 61 20 71 75 65 72 79 20 61 6e 64  e as a query and
12760 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f 72   to return infor
12770 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f 77  mation about.how
12780 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
12790 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 70  nt would have op
127a0 65 72 61 74 65 64 20 69 66 20 74 68 65 20 45 58  erated if the EX
127b0 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f 72  PLAIN keyword or
127c0 0a 70 68 72 61 73 65 20 68 61 64 20 62 65 65 6e  .phrase had been
127d0 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   omitted.</p>..<
127e0 70 3e 54 68 65 20 6f 75 74 70 75 74 20 66 72 6f  p>The output fro
127f0 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64 20 45 58  m EXPLAIN and EX
12800 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
12810 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
12820 0a 69 6e 74 65 72 61 63 74 69 76 65 20 61 6e 61  .interactive ana
12830 6c 79 73 69 73 20 61 6e 64 20 74 72 6f 75 62 6c  lysis and troubl
12840 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c 79 2e 20  eshooting only. 
12850 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20   The details of 
12860 74 68 65 20 0a 6f 75 74 70 75 74 20 66 6f 72 6d  the .output form
12870 61 74 20 61 72 65 20 73 75 62 6a 65 63 74 20 74  at are subject t
12880 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e  o change from on
12890 65 20 72 65 6c 65 61 73 65 20 6f 66 20 53 51 4c  e release of SQL
128a0 69 74 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ite to the next.
128b0 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68  .Applications sh
128c0 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20 45 58 50  ould not use EXP
128d0 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41 49 4e 20  LAIN or EXPLAIN 
128e0 51 55 45 52 59 20 50 4c 41 4e 20 73 69 6e 63 65  QUERY PLAN since
128f0 0a 74 68 65 69 72 20 65 78 61 63 74 20 62 65 68  .their exact beh
12900 61 76 69 6f 72 20 69 73 20 76 61 72 69 61 62 6c  avior is variabl
12910 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61 72 74 69  e and only parti
12920 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74 65 64 2e  ally documented.
12930 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  </p>..<p>^When t
12940 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
12950 72 64 20 61 70 70 65 61 72 73 20 62 79 20 69 74  rd appears by it
12960 73 65 6c 66 20 69 74 20 63 61 75 73 65 73 20 74  self it causes t
12970 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 74 6f 20  he statement.to 
12980 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72  behave as a quer
12990 79 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  y that returns t
129a0 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 0a  he sequence of .
129b0 5b 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65  [virtual machine
129c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 5d 20 69   instructions] i
129d0 74 20 77 6f 75 6c 64 20 68 61 76 65 20 75 73 65  t would have use
129e0 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65  d to execute the
129f0 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a 74 68 65   command had.the
12a00 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
12a10 20 6e 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e   not been presen
12a20 74 2e 20 5e 57 68 65 6e 20 74 68 65 20 45 58 50  t. ^When the EXP
12a30 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
12a40 70 68 72 61 73 65 0a 61 70 70 65 61 72 73 2c 20  phrase.appears, 
12a50 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 72 65  the statement re
12a60 74 75 72 6e 73 20 68 69 67 68 2d 6c 65 76 65 6c  turns high-level
12a70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 72 65 67   information reg
12a80 61 72 64 69 6e 67 20 74 68 65 20 71 75 65 72 79  arding the query
12a90 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f 75 6c 64  .plan that would
12aa0 20 68 61 76 65 20 62 65 65 6e 20 75 73 65 64 2e   have been used.
12ab0 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e 20 51 55  ..The EXPLAIN QU
12ac0 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64  ERY PLAN command
12ad0 20 69 73 20 64 65 73 63 72 69 62 65 64 20 69 6e   is described in
12ae0 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75 65 72 79   .[explain query
12af0 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65 74 61 69   plan|more detai
12b00 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63 6c 3e 0a  l here]...<tcl>.
12b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
12b60 65 63 74 69 6f 6e 20 65 78 70 72 65 73 73 69 6f  ection expressio
12b70 6e 20 65 78 70 72 20 7b 2a 65 78 70 72 65 73 73  n expr {*express
12b80 69 6f 6e 20 7b 65 78 70 72 65 73 73 69 6f 6e 20  ion {expression 
12b90 73 79 6e 74 61 78 7d 7d 0a 0a 52 65 63 75 72 73  syntax}}..Recurs
12ba0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
12bb0 20 65 78 70 72 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70   expr.</tcl>..<p
12bc0 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69 73  >This section is
12bd0 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
12be0 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f 73  the others.  Mos
12bf0 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e 73  t other sections
12c00 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65 6e   of.this documen
12c10 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61 20  t talks about a 
12c20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20 63  particular SQL c
12c30 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73 65  ommand.  This se
12c40 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20 74  ction does.not t
12c50 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61 6e  alk about a stan
12c60 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20 62  dalone command b
12c70 75 74 20 61 62 6f 75 74 20 22 65 78 70 72 65 73  ut about "expres
12c80 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72 65  sions" which are
12c90 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73 20   .subcomponents 
12ca0 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63 6f  of most other co
12cb0 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74 63  mmands.</p>..<tc
12cc0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 69  l>hd_fragment bi
12cd0 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61 72 79 20  naryops {binary 
12ce0 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63 6c 3e  operators}</tcl>
12cf0 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73 3c 2f  .<h3>Operators</
12d00 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74 65 20  h3>.<p>^(SQLite 
12d10 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65 20  understands the 
12d20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72 79  following binary
12d30 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e 20 6f   operators, in o
12d40 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68 65 73  rder from.highes
12d50 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72 65 63  t to lowest prec
12d60 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c  edence:</p>..<bl
12d70 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c  ockquote><pre>.<
12d80 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32  font color="#2c2
12d90 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20 20  cf0"><big>||.*  
12da0 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d 0a    /    %.+    -.
12db0 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b 26  &lt;&lt;   &gt;&
12dc0 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20 20 7c  gt;   &amp;    |
12dd0 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20 20  .&lt;    &lt;=  
12de0 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a 3d   &gt;    &gt;=.=
12df0 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20 26 6c      ==   !=   &l
12e00 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e 49  t;&gt;   </big>I
12e10 53 20 20 20 49 53 20 4e 4f 54 20 20 20 49 4e 20  S   IS NOT   IN 
12e20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42 20 20 20    LIKE   GLOB   
12e30 4d 41 54 43 48 20 20 20 52 45 47 45 58 50 0a 41  MATCH   REGEXP.A
12e40 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a  ND   .OR</font>.
12e50 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
12e60 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53 75 70 70  te>)^..<p>^(Supp
12e70 6f 72 74 65 64 20 75 6e 61 72 79 20 70 72 65 66  orted unary pref
12e80 69 78 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65  ix operators are
12e90 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c   these:</p>..<bl
12ea0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c  ockquote><pre>.<
12eb0 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32  font color="#2c2
12ec0 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20 20 2b  cf0"><big>-    +
12ed0 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c 2f 62 69      ~    NOT</bi
12ee0 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e  g></font>.</pre>
12ef0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
12f00 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
12f10 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b 43 4f 4c  t collateop {COL
12f20 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 7d 3c 2f  LATE operator}</
12f30 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c  tcl>.<p>^The COL
12f40 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 69 73  LATE operator is
12f50 20 61 20 75 6e 61 72 79 20 70 6f 73 74 66 69 78   a unary postfix
12f60 0a 6f 70 65 72 61 74 6f 72 20 74 68 61 74 20 61  .operator that a
12f70 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c 6c 61 74  ssigns a [collat
12f80 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f  ing sequence] to
12f90 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
12fa0 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65  ^The COLLATE ope
12fb0 72 61 74 6f 72 20 68 61 73 20 61 20 68 69 67 68  rator has a high
12fc0 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 28 62  er precedence (b
12fd0 69 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74 6c  inds more tightl
12fe0 79 29 20 74 68 61 6e 20 61 6e 79 0a 62 69 6e 61  y) than any.bina
12ff0 72 79 20 6f 70 65 72 61 74 6f 72 20 61 6e 64 20  ry operator and 
13000 61 6e 79 20 75 6e 61 72 79 20 70 72 65 66 69 78  any unary prefix
13010 20 6f 70 65 72 61 74 6f 72 20 65 78 63 65 70 74   operator except
13020 20 22 7e 22 2e 0a 28 43 4f 4c 4c 41 54 45 20 61   "~"..(COLLATE a
13030 6e 64 20 22 7e 22 20 61 72 65 20 61 73 73 6f 63  nd "~" are assoc
13040 69 61 74 69 76 65 20 73 6f 20 74 68 65 69 72 20  iative so their 
13050 62 69 6e 64 69 6e 67 20 6f 72 64 65 72 20 64 6f  binding order do
13060 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 2e 29 0a  es not matter.).
13070 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ^The collating s
13080 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
13090 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  he COLLATE opera
130a0 74 6f 72 20 6f 76 65 72 72 69 64 65 73 20 74 68  tor overrides th
130b0 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e.collating sequ
130c0 65 6e 63 65 20 64 65 74 65 72 6d 69 6e 65 64 20  ence determined 
130d0 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 63  by the COLLATE c
130e0 6c 61 75 73 65 20 69 6e 20 61 20 74 61 62 6c 65  lause in a table
130f0 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  .[column definit
13100 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65 20 5b 63  ion]..See the [c
13110 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
13120 65 7c 20 64 65 74 61 69 6c 65 64 20 64 69 73 63  e| detailed disc
13130 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61 74  ussion on collat
13140 69 6e 67 20 73 65 71 75 65 6e 63 65 73 5d 0a 69  ing sequences].i
13150 6e 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 20  n the [datatype 
13160 7c 20 44 61 74 61 74 79 70 65 20 49 6e 20 53 51  | Datatype In SQ
13170 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65 6e 74 20  Lite3] document 
13180 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
13190 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70 3e  nformation..</p>
131a0 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22  ..<tcl>hd_puts "
131b0 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72 79 20 6f  .<p>^The unary o
131c0 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f  perator [Operato
131d0 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  r +] is a no-op.
131e0 20 20 5e 49 74 20 63 61 6e 20 62 65 20 61 70 70    ^It can be app
131f0 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c  lied.to strings,
13200 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f 62 73 20   numbers, blobs 
13210 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69 74 20 61  or NULL and it a
13220 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 61 20  lways returns a 
13230 72 65 73 75 6c 74 0a 77 69 74 68 20 74 68 65 20  result.with the 
13240 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20 74 68  same value as th
13250 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c  e operand.</p>"<
13260 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74  /tcl>..<p>Note t
13270 68 61 74 20 74 68 65 72 65 20 61 72 65 20 74 77  hat there are tw
13280 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 66 20  o variations of 
13290 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64 20 6e  the equals and n
132a0 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72 61 74  ot equals.operat
132b0 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73 20 63 61  ors.  ^Equals ca
132c0 6e 20 62 65 20 65 69 74 68 65 72 0a 0a 3c 74 63  n be either..<tc
132d0 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f 70 65  l>.hd_puts "[Ope
132e0 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65  rator =] or [Ope
132f0 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20  rator ==]..^The 
13300 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65 72 61  non-equals opera
13310 74 6f 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  tor can be eithe
13320 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20  r.[Operator !=] 
13330 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b 26 6c  or [Operator {&l
13340 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b  t;&gt;}]..^The [
13350 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65  Operator ||] ope
13360 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61  rator is \"conca
13370 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f  tenate\" - it jo
13380 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74 68 65  ins together.the
13390 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f 66 20   two strings of 
133a0 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a 5e 54  its operands..^T
133b0 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65  he operator [Ope
133c0 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74 73  rator %] outputs
133d0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74   the value of it
133e0 73 20 6c 65 66 74 20 0a 6f 70 65 72 61 6e 64 20  s left .operand 
133f0 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69 67 68 74  modulo its right
13400 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c   operand.</p>..<
13410 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  p>^The result of
13420 20 61 6e 79 20 62 69 6e 61 72 79 20 6f 70 65 72   any binary oper
13430 61 74 6f 72 20 69 73 20 65 69 74 68 65 72 20 61  ator is either a
13440 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
13450 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65 70 74 20  r .NULL, except 
13460 66 6f 72 20 74 68 65 20 5b 4f 70 65 72 61 74 6f  for the [Operato
13470 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65 6e 61 74  r ||] concatenat
13480 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20 77 68 69  ion operator whi
13490 63 68 20 61 6c 77 61 79 73 20 0a 65 76 61 6c 75  ch always .evalu
134a0 61 74 65 73 20 74 6f 20 65 69 74 68 65 72 20 4e  ates to either N
134b0 55 4c 4c 20 6f 72 20 61 20 74 65 78 74 20 76 61  ULL or a text va
134c0 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66 72  lue.</p>"..hd_fr
134d0 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e 6f 74 7d  agment {isisnot}
134e0 20 7b 49 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b   {IS operator} {
134f0 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 7d  IS NOT operator}
13500 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70 3e 5e 54  ..hd_puts "<p>^T
13510 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d  he [Operator IS]
13520 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b   and [Operator {
13530 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72 61 74 6f  IS NOT}] operato
13540 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f 70  rs work.like [Op
13550 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64 20 5b 4f  erator =] and [O
13560 70 65 72 61 74 6f 72 20 21 3d 5d 20 65 78 63 65  perator !=] exce
13570 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f 72 20 62  pt when one or b
13580 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70 65 72 61  oth of the.opera
13590 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e 20 5e 49  nds are NULL. ^I
135a0 6e 20 74 68 69 73 20 63 61 73 65 2c 20 69 66 20  n this case, if 
135b0 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
135c0 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  e NULL, then the
135d0 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61  .IS operator eva
135e0 6c 75 61 74 65 73 20 74 6f 20 31 20 28 74 72 75  luates to 1 (tru
135f0 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e 4f  e) and the IS NO
13600 54 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  T operator evalu
13610 61 74 65 73 0a 74 6f 20 30 20 28 66 61 6c 73 65  ates.to 0 (false
13620 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70 65 72 61  ). ^If one opera
13630 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e 64 20 74  nd is NULL and t
13640 68 65 20 6f 74 68 65 72 20 69 73 20 6e 6f 74 2c  he other is not,
13650 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65   then the.IS ope
13660 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20  rator evaluates 
13670 74 6f 20 30 20 28 66 61 6c 73 65 29 20 61 6e 64  to 0 (false) and
13680 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70 65 72   the IS NOT oper
13690 61 74 6f 72 20 69 73 20 31 20 28 74 72 75 65 29  ator is 1 (true)
136a0 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  ..^It is not pos
136b0 73 69 62 6c 65 20 66 6f 72 20 61 6e 20 49 53 20  sible for an IS 
136c0 6f 72 20 49 53 20 4e 4f 54 20 65 78 70 72 65 73  or IS NOT expres
136d0 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75 61 74 65  sion to evaluate
136e0 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72 61   to NULL..^Opera
136f0 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f 72 20 49  tors [Operator I
13700 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72  S] and [Operator
13710 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61 76 65 20   {IS NOT}] have 
13720 74 68 65 20 73 61 6d 65 20 0a 70 72 65 63 65 64  the same .preced
13730 65 6e 63 65 20 61 73 20 5b 4f 70 65 72 61 74 6f  ence as [Operato
13740 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64 5f  r =]."..<tcl>hd_
13750 66 72 61 67 6d 65 6e 74 20 6c 69 74 76 61 6c 75  fragment litvalu
13760 65 20 7b 6c 69 74 65 72 61 6c 20 76 61 6c 75 65  e {literal value
13770 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74 65  }</tcl>.<h3>Lite
13780 72 61 6c 20 56 61 6c 75 65 73 20 28 43 6f 6e 73  ral Values (Cons
13790 74 61 6e 74 73 29 3c 2f 68 33 3e 0a 3c 70 3e 0a  tants)</h3>.<p>.
137a0 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  A literal value 
137b0 72 65 70 72 65 73 65 6e 74 73 20 61 20 63 6f 6e  represents a con
137c0 73 74 61 6e 74 2e 0a 5e 4c 69 74 65 72 61 6c 20  stant..^Literal 
137d0 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 69 6e  values may be in
137e0 74 65 67 65 72 73 2c 20 66 6c 6f 61 74 69 6e 67  tegers, floating
137f0 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2c 20   point numbers, 
13800 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42 73 2c 20  strings,.BLOBs, 
13810 6f 72 20 4e 55 4c 4c 73 2e 0a 3c 70 3e 0a 54 68  or NULLs..<p>.Th
13820 65 20 73 79 6e 74 61 78 20 66 6f 72 20 69 6e 74  e syntax for int
13830 65 67 65 72 20 61 6e 64 20 66 6c 6f 61 74 69 6e  eger and floatin
13840 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 73  g point literals
13850 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 0a 22   (collectively."
13860 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c 73  numeric literals
13870 22 29 20 69 73 20 73 68 6f 77 6e 20 62 79 20 74  ") is shown by t
13880 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61  he following dia
13890 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  gram:</p>..<tcl>
138a0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6e 75  BubbleDiagram nu
138b0 6d 65 72 69 63 2d 6c 69 74 65 72 61 6c 3c 2f 74  meric-literal</t
138c0 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49 66 20 61 20  cl>..<p>.^(If a 
138d0 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c 20  numeric literal 
138e0 68 61 73 20 61 20 64 65 63 69 6d 61 6c 20 70 6f  has a decimal po
138f0 69 6e 74 20 6f 72 20 61 6e 20 65 78 70 6f 6e 65  int or an expone
13900 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65 20  ntiation.clause 
13910 6f 72 20 69 66 20 69 74 73 20 6d 61 67 6e 69 74  or if its magnit
13920 75 64 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e  ude is less than
13930 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
13940 37 35 38 30 38 20 6f 72 0a 67 72 65 61 74 65 72  75808 or.greater
13950 20 74 68 61 6e 20 39 32 32 33 33 37 32 30 33 36   than 9223372036
13960 38 35 34 37 37 35 38 30 37 2c 20 74 68 65 6e 20  854775807, then 
13970 69 74 20 69 73 20 61 20 66 6c 6f 61 74 69 6e 67  it is a floating
13980 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 2e 0a   point literal..
13990 4f 74 68 65 72 77 69 73 65 20 69 73 20 69 74 20  Otherwise is it 
139a0 69 73 20 61 6e 20 20 69 6e 74 65 67 65 72 20 6c  is an  integer l
139b0 69 74 65 72 61 6c 2e 29 5e 0a 5e 54 68 65 20 22  iteral.)^.^The "
139c0 45 22 20 63 68 61 72 61 63 74 65 72 20 74 68 61  E" character tha
139d0 74 20 62 65 67 69 6e 73 20 74 68 65 20 65 78 70  t begins the exp
139e0 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75  onentiation.clau
139f0 73 65 20 6f 66 20 61 20 66 6c 6f 61 74 69 6e 67  se of a floating
13a00 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20 63   point literal c
13a10 61 6e 20 62 65 20 65 69 74 68 65 72 20 75 70 70  an be either upp
13a20 65 72 20 6f 72 20 6c 6f 77 65 72 20 63 61 73 65  er or lower case
13a30 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63 68 61 72  ..^(The "." char
13a40 61 63 74 65 72 20 69 73 20 61 6c 77 61 79 73 20  acter is always 
13a50 75 73 65 64 20 0a 61 73 20 74 68 65 20 64 65 63  used .as the dec
13a60 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20  imal point even 
13a70 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20 73 65  if the locale se
13a80 74 74 69 6e 67 20 73 70 65 63 69 66 69 65 73 20  tting specifies 
13a90 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c  "," for.this rol
13aa0 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66 20 22  e - the use of "
13ab0 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63 69 6d  ," for the decim
13ac0 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72  al point would r
13ad0 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74  esult in.syntact
13ae0 69 63 20 61 6d 62 69 67 75 69 74 79 2e 29 5e 0a  ic ambiguity.)^.
13af0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
13b00 74 20 68 65 78 69 6e 74 20 7b 68 65 78 61 64 65  t hexint {hexade
13b10 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69  cimal integer li
13b20 74 65 72 61 6c 73 7d 20 7b 68 65 78 61 64 65 63  terals} {hexadec
13b30 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 7d 3c 2f  imal integers}</
13b40 74 63 6c 3e 0a 3c 70 3e 5e 48 65 78 61 64 65 63  tcl>.<p>^Hexadec
13b50 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69 74  imal integer lit
13b60 65 72 61 6c 73 20 66 6f 6c 6c 6f 77 20 74 68 65  erals follow the
13b70 20 43 2d 6c 61 6e 67 75 61 67 65 20 6e 6f 74 61   C-language nota
13b80 74 69 6f 6e 20 6f 66 0a 22 30 78 22 20 6f 72 20  tion of."0x" or 
13b90 22 30 58 22 20 66 6f 6c 6c 6f 77 65 64 20 62 79  "0X" followed by
13ba0 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 69 67   hexadecimal dig
13bb0 69 74 73 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c  its..^For exampl
13bc0 65 2c 20 30 78 31 32 33 34 20 6d 65 61 6e 73 20  e, 0x1234 means 
13bd0 74 68 65 20 73 61 6d 65 20 61 73 20 34 36 36 30  the same as 4660
13be0 0a 61 6e 64 20 30 78 38 30 30 30 30 30 30 30 30  .and 0x800000000
13bf0 30 30 30 30 30 30 30 20 6d 65 61 6e 73 20 74 68  0000000 means th
13c00 65 20 73 61 6d 65 20 61 73 20 2d 39 32 32 33 33  e same as -92233
13c10 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e 0a  72036854775808..
13c20 20 5e 28 48 65 78 61 64 65 63 69 6d 61 6c 20 69   ^(Hexadecimal i
13c30 6e 74 65 67 65 72 20 6c 69 74 65 72 61 6c 73 20  nteger literals 
13c40 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
13c50 61 73 20 36 34 2d 62 69 74 0a 74 77 6f 27 73 2d  as 64-bit.two's-
13c60 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
13c70 65 72 73 20 61 6e 64 20 61 72 65 20 74 68 75 73  ers and are thus
13c80 20 6c 69 6d 69 74 65 64 0a 74 6f 20 73 69 78 74   limited.to sixt
13c90 65 65 6e 20 73 69 67 6e 69 66 69 63 61 6e 74 20  een significant 
13ca0 64 69 67 69 74 73 20 6f 66 20 70 72 65 63 69 73  digits of precis
13cb0 69 6f 6e 2e 29 5e 0a 53 75 70 70 6f 72 74 20 66  ion.)^.Support f
13cc0 6f 72 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69  or hexadecimal i
13cd0 6e 74 65 67 65 72 73 20 77 61 73 20 61 64 64 65  ntegers was adde
13ce0 64 20 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73  d to SQLite vers
13cf0 69 6f 6e 20 33 2e 38 2e 36 2e 0a 5e 46 6f 72 20  ion 3.8.6..^For 
13d00 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74  backwards compat
13d10 69 62 69 6c 69 74 79 2c 20 74 68 65 20 22 30 78  ibility, the "0x
13d20 22 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e  " hexadecimal in
13d30 74 65 67 65 72 0a 6e 6f 74 61 74 69 6f 6e 20 69  teger.notation i
13d40 73 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74 6f 6f  s only understoo
13d50 64 20 62 79 20 74 68 65 20 53 51 4c 20 6c 61 6e  d by the SQL lan
13d60 67 75 61 67 65 20 70 61 72 73 65 72 2c 20 6e 6f  guage parser, no
13d70 74 20 62 79 20 74 68 65 0a 74 79 70 65 20 63 6f  t by the.type co
13d80 6e 76 65 72 73 69 6f 6e 73 20 72 6f 75 74 69 6e  nversions routin
13d90 65 73 2e 0a 5e 28 53 74 72 69 6e 67 20 76 61 72  es..^(String var
13da0 69 61 62 6c 65 73 20 74 68 61 74 0a 63 6f 6e 74  iables that.cont
13db0 61 69 6e 20 74 65 78 74 20 66 6f 72 6d 61 74 74  ain text formatt
13dc0 65 64 20 6c 69 6b 65 20 68 65 78 61 64 65 63 69  ed like hexadeci
13dd0 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 61 72 65  mal integers are
13de0 20 6e 6f 74 0a 69 6e 74 65 72 70 72 65 74 65 64   not.interpreted
13df0 20 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20   as hexadecimal 
13e00 69 6e 74 65 67 65 72 73 20 77 68 65 6e 20 63 6f  integers when co
13e10 65 72 63 69 6e 67 20 74 68 65 20 73 74 72 69 6e  ercing the strin
13e20 67 20 76 61 6c 75 65 0a 69 6e 74 6f 20 61 6e 20  g value.into an 
13e30 69 6e 74 65 67 65 72 20 64 75 65 20 74 6f 20 61  integer due to a
13e40 20 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f   [CAST expressio
13e50 6e 5d 20 6f 72 20 66 6f 72 20 61 20 5b 63 6f 6c  n] or for a [col
13e60 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 0a 74 72  umn affinity].tr
13e70 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 6f 72 20  ansformation or 
13e80 70 72 69 6f 72 20 74 6f 20 70 65 72 66 6f 72 6d  prior to perform
13e90 69 6e 67 20 61 20 6e 75 6d 65 72 69 63 20 6f 70  ing a numeric op
13ea0 65 72 61 74 69 6f 6e 20 6f 72 20 66 6f 72 0a 61  eration or for.a
13eb0 6e 79 20 6f 74 68 65 72 20 72 75 6e 2d 74 69 6d  ny other run-tim
13ec0 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 29 5e  e conversions.)^
13ed0 20 20 5e 28 57 68 65 6e 20 63 6f 65 72 63 69 6e    ^(When coercin
13ee0 67 20 61 0a 73 74 72 69 6e 67 20 76 61 6c 75 65  g a.string value
13ef0 20 69 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f   in the format o
13f00 66 20 61 20 68 65 78 61 64 65 63 69 6d 61 6c 20  f a hexadecimal 
13f10 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61 6e 20  integer into an 
13f20 69 6e 74 65 67 65 72 0a 76 61 6c 75 65 2c 20 74  integer.value, t
13f30 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 70 72  he conversion pr
13f40 6f 63 65 73 73 20 73 74 6f 70 73 20 77 68 65 6e  ocess stops when
13f50 20 74 68 65 20 27 78 27 20 63 68 61 72 61 63 74   the 'x' charact
13f60 65 72 20 69 73 20 73 65 65 6e 0a 73 6f 20 74 68  er is seen.so th
13f70 65 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 74 65  e resulting inte
13f80 67 65 72 20 76 61 6c 75 65 20 69 73 20 61 6c 77  ger value is alw
13f90 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 5e 28 53 51  ays zero.)^.^(SQ
13fa0 4c 69 74 65 20 6f 6e 6c 79 20 75 6e 64 65 72 73  Lite only unders
13fb0 74 61 6e 64 73 20 74 68 65 20 68 65 78 61 64 65  tands the hexade
13fc0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6e 6f  cimal integer no
13fd0 74 61 74 69 6f 6e 20 77 68 65 6e 20 69 74 0a 61  tation when it.a
13fe0 70 70 65 61 72 73 20 69 6e 20 74 68 65 20 53 51  ppears in the SQ
13ff0 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78 74  L statement text
14000 2c 20 6e 6f 74 20 77 68 65 6e 20 69 74 20 61 70  , not when it ap
14010 70 65 61 72 73 20 61 73 0a 70 61 72 74 20 6f 66  pears as.part of
14020 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
14030 74 68 65 20 64 61 74 61 62 61 73 65 2e 29 5e 0a  the database.)^.
14040 0a 3c 70 3e 20 5e 41 20 73 74 72 69 6e 67 20 63  .<p> ^A string c
14050 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72 6d 65  onstant is forme
14060 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67 20 74  d by enclosing t
14070 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73 69 6e  he.string in sin
14080 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29 2e 20  gle quotes ('). 
14090 20 5e 41 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   ^A single quote
140a0 20 77 69 74 68 69 6e 20 74 68 65 20 73 74 72 69   within the stri
140b0 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f 64 65  ng can.be encode
140c0 64 20 62 79 20 70 75 74 74 69 6e 67 20 74 77 6f  d by putting two
140d0 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69   single quotes i
140e0 6e 20 61 20 72 6f 77 20 2d 20 61 73 20 69 6e 20  n a row - as in 
140f0 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c 65 20  Pascal..C-style 
14100 65 73 63 61 70 65 73 20 75 73 69 6e 67 20 74 68  escapes using th
14110 65 20 62 61 63 6b 73 6c 61 73 68 20 63 68 61 72  e backslash char
14120 61 63 74 65 72 20 61 72 65 20 6e 6f 74 20 73 75  acter are not su
14130 70 70 6f 72 74 65 64 20 62 65 63 61 75 73 65 0a  pported because.
14140 74 68 65 79 20 61 72 65 20 6e 6f 74 20 73 74 61  they are not sta
14150 6e 64 61 72 64 20 53 51 4c 2e 0a 0a 3c 70 3e 20  ndard SQL...<p> 
14160 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73 20 61  ^BLOB literals a
14170 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61  re string litera
14180 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65  ls containing he
14190 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61 20 61  xadecimal data a
141a0 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79 20 61  nd.preceded by a
141b0 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72 20 22   single "x" or "
141c0 58 22 20 63 68 61 72 61 63 74 65 72 2e 20 20 5e  X" character.  ^
141d0 28 45 78 61 6d 70 6c 65 3a 20 58 27 35 33 35 31  (Example: X'5351
141e0 34 43 36 39 37 34 36 35 27 29 5e 0a 0a 3c 70 3e  4C697465')^..<p>
141f0 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75  .^A literal valu
14200 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68  e can also be th
14210 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a  e token "NULL"..
14220 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
14230 61 67 6d 65 6e 74 20 76 61 72 70 61 72 61 6d 20  agment varparam 
14240 70 61 72 61 6d 65 74 65 72 20 70 61 72 61 6d 65  parameter parame
14250 74 65 72 73 20 7b 62 6f 75 6e 64 20 70 61 72 61  ters {bound para
14260 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70 61  meter} {bound pa
14270 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a  rameters}</tcl>.
14280 3c 68 33 3e 50 61 72 61 6d 65 74 65 72 73 3c 2f  <h3>Parameters</
14290 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69 61  h3>.<p>.A "varia
142a0 62 6c 65 22 20 6f 72 20 22 70 61 72 61 6d 65 74  ble" or "paramet
142b0 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69 66  er" token.specif
142c0 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64 65  ies a placeholde
142d0 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
142e0 69 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75 65  ion for a .value
142f0 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64 20   that is filled 
14300 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  in at runtime us
14310 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33  ing the.[sqlite3
14320 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73  _bind_blob() | s
14330 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 66  qlite3_bind()] f
14340 61 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20 69  amily of C/C++ i
14350 6e 74 65 72 66 61 63 65 73 2e 0a 50 61 72 61 6d  nterfaces..Param
14360 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20 73  eters can take s
14370 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f  everal forms:.</
14380 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
14390 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74  .<table>.<tr>.<t
143a0 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
143b0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
143c0 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c  ?</b><i>NNN</i><
143d0 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
143e0 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41  0"></td>.<td>^(A
143f0 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66   question mark f
14400 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d  ollowed by a num
14410 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68  ber <i>NNN</i> h
14420 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20  olds a spot for 
14430 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d  the.NNN-th param
14440 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20  eter.  NNN must 
14450 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  be between 1 and
14460 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
14470 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e  IABLE_NUMBER].)^
14480 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
14490 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
144a0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
144b0 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  ><b>?</b></td><t
144c0 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
144d0 64 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74 69  d>.<td>^A questi
144e0 6f 6e 20 6d 61 72 6b 20 74 68 61 74 20 69 73 20  on mark that is 
144f0 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  not followed by 
14500 61 20 6e 75 6d 62 65 72 20 63 72 65 61 74 65 73  a number creates
14510 20 61 20 70 61 72 61 6d 65 74 65 72 0a 77 69 74   a parameter.wit
14520 68 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20 67  h a number one g
14530 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
14540 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65  largest paramete
14550 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79  r number already
14560 20 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20 74   assigned..^If t
14570 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61  his means the pa
14580 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69  rameter number i
14590 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 5b  s greater than.[
145a0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
145b0 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20  BLE_NUMBER], it 
145c0 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 54 68 69  is an error..Thi
145d0 73 20 70 61 72 61 6d 65 74 65 72 20 66 6f 72 6d  s parameter form
145e0 61 74 20 69 73 20 70 72 6f 76 69 64 65 64 20 66  at is provided f
145f0 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
14600 20 77 69 74 68 20 6f 74 68 65 72 20 64 61 74 61   with other data
14610 62 61 73 65 0a 65 6e 67 69 6e 65 73 2e 20 20 42  base.engines.  B
14620 75 74 20 62 65 63 61 75 73 65 20 69 74 20 69 73  ut because it is
14630 20 65 61 73 79 20 74 6f 20 6d 69 73 63 6f 75 6e   easy to miscoun
14640 74 20 74 68 65 20 71 75 65 73 74 69 6f 6e 20 6d  t the question m
14650 61 72 6b 73 2c 20 74 68 65 0a 75 73 65 20 6f 66  arks, the.use of
14660 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
14670 66 6f 72 6d 61 74 20 69 73 20 64 69 73 63 6f 75  format is discou
14680 72 61 67 65 64 2e 20 20 50 72 6f 67 72 61 6d 6d  raged.  Programm
14690 65 72 73 20 61 72 65 20 65 6e 63 6f 75 72 61 67  ers are encourag
146a0 65 64 0a 74 6f 20 75 73 65 20 6f 6e 65 20 6f 66  ed.to use one of
146b0 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 66 6f   the symbolic fo
146c0 72 6d 61 74 73 20 62 65 6c 6f 77 20 6f 72 20 74  rmats below or t
146d0 68 65 20 3f 4e 4e 4e 20 66 6f 72 6d 61 74 20 61  he ?NNN format a
146e0 62 6f 76 65 20 69 6e 73 74 65 61 64 2e 0a 3c 2f  bove instead..</
146f0 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
14700 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
14710 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
14720 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >:</b><i>AAAA</i
14730 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
14740 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
14750 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64  A colon followed
14760 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
14770 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73  r name holds a s
14780 70 6f 74 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69  pot for a .[sqli
14790 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
147a0 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61  er_name|named pa
147b0 72 61 6d 65 74 65 72 5d 20 77 69 74 68 20 74 68  rameter] with th
147c0 65 20 6e 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a  e name :AAAA.  .
147d0 5e 28 4e 61 6d 65 64 20 70 61 72 61 6d 65 74 65  ^(Named paramete
147e0 72 73 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62  rs are also numb
147f0 65 72 65 64 2e 20 54 68 65 20 6e 75 6d 62 65 72  ered. The number
14800 20 61 73 73 69 67 6e 65 64 20 69 73 20 6f 6e 65   assigned is one
14810 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 74 68   greater than.th
14820 65 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65  e largest parame
14830 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61  ter number alrea
14840 64 79 20 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e  dy assigned.)^ ^
14850 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68  If this means th
14860 65 20 70 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c  e parameter.woul
14870 64 20 62 65 20 61 73 73 69 67 6e 65 64 20 61 20  d be assigned a 
14880 6e 75 6d 62 65 72 20 67 72 65 61 74 65 72 20 74  number greater t
14890 68 61 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  han [SQLITE_MAX_
148a0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
148b0 2c 20 69 74 20 69 73 0a 61 6e 20 65 72 72 6f 72  , it is.an error
148c0 2e 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  . To avoid confu
148d0 73 69 6f 6e 2c 20 69 74 20 69 73 20 62 65 73 74  sion, it is best
148e0 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67   to avoid mixing
148f0 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65   named and numbe
14900 72 65 64 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c  red.parameters.<
14910 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
14920 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
14930 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
14940 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>@</b><i>AAAA</
14950 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
14960 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
14970 5e 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f  ^An "at" sign wo
14980 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
14990 20 61 20 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74   a colon, except
149a0 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20 6f   that the name o
149b0 66 0a 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f.the parameter 
149c0 63 72 65 61 74 65 64 20 69 73 20 40 41 41 41 41  created is @AAAA
149d0 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
149e0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
149f0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
14a00 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41  ><b>$</b><i>AAAA
14a10 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </i></td><td wid
14a20 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
14a30 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e  d>^A dollar-sign
14a40 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
14a50 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20  identifier name 
14a60 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f  also holds a spo
14a70 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61  t for a named.pa
14a80 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68 65  rameter with the
14a90 20 6e 61 6d 65 20 24 41 41 41 41 2e 20 20 5e 28   name $AAAA.  ^(
14aa0 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e  The identifier n
14ab0 61 6d 65 20 69 6e 20 74 68 69 73 20 63 61 73 65  ame in this case
14ac0 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65   can include.one
14ad0 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72 72 65   or more occurre
14ae0 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64  nces of "::" and
14af0 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73   a suffix enclos
14b00 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f  ed in "(...)" co
14b10 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78  ntaining.any tex
14b20 74 20 61 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69  t at all.)^  Thi
14b30 73 20 73 79 6e 74 61 78 20 69 73 20 74 68 65 20  s syntax is the 
14b40 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62  form of a variab
14b50 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b  le name in the.[
14b60 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2d 6c  http://www.tcl-l
14b70 61 6e 67 2e 6f 72 67 2f 20 7c 20 54 63 6c 20 70  ang.org/ | Tcl p
14b80 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75  rogramming langu
14b90 61 67 65 5d 2e 20 20 54 68 65 20 70 72 65 73 65  age].  The prese
14ba0 6e 63 65 0a 6f 66 20 74 68 69 73 20 73 79 6e 74  nce.of this synt
14bb0 61 78 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  ax results from 
14bc0 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51  the fact that SQ
14bd0 4c 69 74 65 20 69 73 20 72 65 61 6c 6c 79 20 61  Lite is really a
14be0 20 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69 6f 6e   .[Tcl extension
14bf0 5d 20 74 68 61 74 20 68 61 73 20 65 73 63 61 70  ] that has escap
14c00 65 64 20 69 6e 74 6f 20 74 68 65 20 77 69 6c 64  ed into the wild
14c10 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74  .</td>.</tr>.</t
14c20 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  able>.</blockquo
14c30 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d 65 74  te>..<p>^Paramet
14c40 65 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ers that are not
14c50 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65 73   assigned values
14c60 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
14c70 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71  bind_blob() | sq
14c80 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61 72  lite3_bind()] ar
14c90 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55 4c  e treated.as NUL
14ca0 4c 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33  L.  The [sqlite3
14cb0 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
14cc0 69 6e 64 65 78 28 29 5d 20 69 6e 74 65 72 66 61  index()] interfa
14cd0 63 65 20 63 61 6e 20 62 65 20 75 73 65 64 0a 74  ce can be used.t
14ce0 6f 20 74 72 61 6e 73 6c 61 74 65 20 61 20 73 79  o translate a sy
14cf0 6d 62 6f 6c 69 63 20 70 61 72 61 6d 65 74 65 72  mbolic parameter
14d00 20 6e 61 6d 65 20 69 6e 74 6f 20 69 74 73 20 65   name into its e
14d10 71 75 69 76 61 6c 65 6e 74 20 6e 75 6d 65 72 69  quivalent numeri
14d20 63 20 69 6e 64 65 78 2e 3c 2f 70 3e 0a 0a 3c 70  c index.</p>..<p
14d30 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  >^The maximum pa
14d40 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69  rameter number i
14d50 73 20 73 65 74 20 61 74 20 63 6f 6d 70 69 6c 65  s set at compile
14d60 2d 74 69 6d 65 20 62 79 0a 74 68 65 20 5b 53 51  -time by.the [SQ
14d70 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
14d80 45 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72 6f 2e  E_NUMBER] macro.
14d90 20 20 5e 28 41 6e 20 69 6e 64 69 76 69 64 75 61    ^(An individua
14da0 6c 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  l [database conn
14db0 65 63 74 69 6f 6e 5d 0a 44 20 63 61 6e 20 72 65  ection].D can re
14dc0 64 75 63 65 20 69 74 73 20 6d 61 78 69 6d 75 6d  duce its maximum
14dd0 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
14de0 72 20 62 65 6c 6f 77 20 74 68 65 20 63 6f 6d 70  r below the comp
14df0 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d 75 6d  ile-time maximum
14e00 0a 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69  .using the [sqli
14e10 74 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20 5b 53  te3_limit](D, [S
14e20 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49  QLITE_LIMIT_VARI
14e30 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e 2e 2e  ABLE_NUMBER],...
14e40 29 20 69 6e 74 65 72 66 61 63 65 2e 29 5e 0a 3c  ) interface.)^.<
14e50 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
14e60 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b 45 20  gment like LIKE 
14e70 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33  ESCAPE</tcl>.<h3
14e80 3e 54 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c  >The LIKE and GL
14e90 4f 42 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33  OB operators</h3
14ea0 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f  >.<p>^The LIKE o
14eb0 70 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70  perator does a p
14ec0 61 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20  attern matching 
14ed0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54 68 65  comparison. ^The
14ee0 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68 65 20   operand.to the 
14ef0 72 69 67 68 74 20 6f 66 20 74 68 65 20 4c 49 4b  right of the LIK
14f00 45 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74 61  E operator conta
14f10 69 6e 73 20 74 68 65 20 70 61 74 74 65 72 6e 20  ins the pattern 
14f20 61 6e 64 20 74 68 65 20 6c 65 66 74 20 68 61 6e  and the left han
14f30 64 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69  d.operand contai
14f40 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 74 6f  ns the string to
14f50 20 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74   match against t
14f60 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63  he pattern...<tc
14f70 6c 3e 68 64 5f 70 75 74 73 20 22 5e 41 20 70 65  l>hd_puts "^A pe
14f80 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22  rcent symbol (\"
14f90 25 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45  %\") in the LIKE
14fa0 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73   pattern matches
14fb0 20 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f 66   any.sequence of
14fc0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68   zero or more ch
14fd0 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20  aracters in the 
14fe0 73 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75 6e 64  string.  ^An und
14ff0 65 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22 29 20  erscore.(\"_\") 
15000 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
15010 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 20  ern matches any 
15020 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
15030 20 69 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e 20   in the.string. 
15040 20 5e 28 41 6e 79 20 6f 74 68 65 72 20 63 68 61   ^(Any other cha
15050 72 61 63 74 65 72 20 6d 61 74 63 68 65 73 20 69  racter matches i
15060 74 73 65 6c 66 20 6f 72 20 69 74 73 20 6c 6f 77  tself or its low
15070 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65 71  er/upper case.eq
15080 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20 63  uivalent (i.e. c
15090 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20  ase-insensitive 
150a0 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20 20 28 41  matching).)^  (A
150b0 20 62 75 67 3a 20 5e 53 51 4c 69 74 65 20 6f 6e   bug: ^SQLite on
150c0 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75  ly.understands u
150d0 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20  pper/lower case 
150e0 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
150f0 74 65 72 73 20 62 79 20 64 65 66 61 75 6c 74 2e  ters by default.
15100 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65 72    ^The.LIKE oper
15110 61 74 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e  ator is case sen
15120 73 69 74 69 76 65 20 62 79 20 64 65 66 61 75 6c  sitive by defaul
15130 74 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 63 68  t for unicode ch
15140 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 72  aracters that ar
15150 65 0a 62 65 79 6f 6e 64 20 74 68 65 20 41 53 43  e.beyond the ASC
15160 49 49 20 72 61 6e 67 65 2e 20 20 46 6f 72 20 65  II range.  For e
15170 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78 70  xample,.^the exp
15180 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e  ression <b>'a'&n
15190 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41  bsp;LIKE&nbsp;'A
151a0 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62 75  '</b>.is TRUE bu
151b0 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e  t <b>'&aelig;'&n
151c0 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26  bsp;LIKE&nbsp;'&
151d0 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46  AElig;'</b> is F
151e0 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f 74 63 6c 3e  ALSE.)<p>"</tcl>
151f0 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
15200 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
15210 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
15220 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
15230 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ion.following th
15240 65 20 45 53 43 41 50 45 20 6b 65 79 77 6f 72 64  e ESCAPE keyword
15250 20 6d 75 73 74 20 65 76 61 6c 75 61 74 65 20 74   must evaluate t
15260 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69  o a string consi
15270 73 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67 6c  sting of.a singl
15280 65 20 63 68 61 72 61 63 74 65 72 2e 20 5e 54 68  e character. ^Th
15290 69 73 20 63 68 61 72 61 63 74 65 72 20 6d 61 79  is character may
152a0 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20   be used in the 
152b0 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74 6f 20  LIKE pattern.to 
152c0 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61 6c 20  include literal 
152d0 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64 65 72  percent or under
152e0 73 63 6f 72 65 20 63 68 61 72 61 63 74 65 72 73  score characters
152f0 2e 20 5e 54 68 65 20 65 73 63 61 70 65 0a 63 68  . ^The escape.ch
15300 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65 64  aracter followed
15310 20 62 79 20 61 20 70 65 72 63 65 6e 74 20 73 79   by a percent sy
15320 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64 65 72 73  mbol (%), unders
15330 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20 61 20 73  core (_), or a s
15340 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63 65 20 6f  econd.instance o
15350 66 20 74 68 65 20 65 73 63 61 70 65 20 63 68 61  f the escape cha
15360 72 61 63 74 65 72 20 69 74 73 65 6c 66 20 6d 61  racter itself ma
15370 74 63 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20  tches a.literal 
15380 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20  percent symbol, 
15390 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f 72 20 61  underscore, or a
153a0 20 73 69 6e 67 6c 65 20 65 73 63 61 70 65 20 63   single escape c
153b0 68 61 72 61 63 74 65 72 2c 0a 72 65 73 70 65 63  haracter,.respec
153c0 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65  tively...<p>^The
153d0 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70 65 72   infix LIKE oper
153e0 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e  ator is implemen
153f0 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
15400 68 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  he.application-d
15410 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74  efined SQL funct
15420 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c  ions [like(<i>Y<
15430 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f  /i>,<i>X</i>)] o
15440 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e  r.[like(<i>Y</i>
15450 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f  ,<i>X</i>,<i>Z</
15460 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  i>)]</a>.</p>..<
15470 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72  p>^The LIKE oper
15480 61 74 6f 72 20 63 61 6e 20 62 65 20 6d 61 64 65  ator can be made
15490 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
154a0 75 73 69 6e 67 20 74 68 65 0a 5b 63 61 73 65 5f  using the.[case_
154b0 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65 20 70  sensitive_like p
154c0 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63  ragma].</p>..<tc
154d0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 67 6c  l>hd_fragment gl
154e0 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70  ob GLOB</tcl>.<p
154f0 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72 61  >^The GLOB opera
15500 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74  tor is similar t
15510 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73 20  o LIKE but uses 
15520 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67 6c  the Unix.file gl
15530 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66 6f  obbing syntax fo
15540 72 20 69 74 73 20 77 69 6c 64 63 61 72 64 73 2e  r its wildcards.
15550 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20 69 73    ^Also, GLOB is
15560 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76 65 2c   case.sensitive,
15570 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20 5e   unlike LIKE.  ^
15580 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20 4c 49  Both GLOB and LI
15590 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63 65 64  KE may be preced
155a0 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20 6b 65  ed by.the NOT ke
155b0 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20  yword to invert 
155c0 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65  the sense of the
155d0 20 74 65 73 74 2e 20 20 5e 54 68 65 20 69 6e 66   test.  ^The inf
155e0 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74 6f  ix GLOB .operato
155f0 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  r is implemented
15600 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20   by calling the 
15610 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c  function.[glob(<
15620 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
15630 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20 6d 6f  )] and can be mo
15640 64 69 66 69 65 64 20 62 79 20 6f 76 65 72 72 69  dified by overri
15650 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63 74 69  ding.that functi
15660 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  on.</p>..<tcl>hd
15670 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65 78 70  _fragment regexp
15680 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70   REGEXP</tcl>.<p
15690 3e 5e 54 68 65 20 52 45 47 45 58 50 20 6f 70 65  >^The REGEXP ope
156a0 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63 69  rator is a speci
156b0 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68  al syntax for th
156c0 65 20 72 65 67 65 78 70 28 29 0a 75 73 65 72 20  e regexp().user 
156d0 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72  function.  ^No r
156e0 65 67 65 78 70 28 29 20 75 73 65 72 20 66 75 6e  egexp() user fun
156f0 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ction is defined
15700 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64 20   by default.and 
15710 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52 45  so use of the RE
15720 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77 69  GEXP operator wi
15730 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75  ll normally resu
15740 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d  lt in an.error m
15750 65 73 73 61 67 65 2e 20 20 5e 49 66 20 61 6e 20  essage.  ^If an 
15760 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66  [application-def
15770 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f  ined SQL functio
15780 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67 65 78 70  n] named "regexp
15790 22 0a 69 73 20 61 64 64 65 64 20 61 74 20 72 75  ".is added at ru
157a0 6e 2d 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65  n-time, then the
157b0 20 22 3c 69 3e 58 3c 2f 69 3e 20 52 45 47 45 58   "<i>X</i> REGEX
157c0 50 20 3c 69 3e 59 3c 2f 69 3e 22 20 6f 70 65 72  P <i>Y</i>" oper
157d0 61 74 6f 72 20 77 69 6c 6c 0a 62 65 20 69 6d 70  ator will.be imp
157e0 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 61  lemented as a ca
157f0 6c 6c 20 74 6f 20 22 72 65 67 65 78 70 28 3c 69  ll to "regexp(<i
15800 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29  >Y</i>,<i>X</i>)
15810 22 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ".</p>..<tcl>hd_
15820 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d  fragment match M
15830 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  ATCH</tcl>.<p>^T
15840 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f  he MATCH operato
15850 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73  r is a special s
15860 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d 61  yntax for the ma
15870 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69 6f  tch().applicatio
15880 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
15890 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c  on.  ^The defaul
158a0 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69  t match() functi
158b0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
158c0 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63 65  n.raises an exce
158d0 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74  ption and is not
158e0 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66   really useful f
158f0 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42 75  or anything..^Bu
15900 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e  t extensions can
15910 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d 61   override the ma
15920 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  tch() function w
15930 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c  ith more.helpful
15940 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63   logic.</p>..<tc
15950 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 65  l>hd_fragment be
15960 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f 74  tween BETWEEN</t
15970 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54 57  cl>.<h3>The BETW
15980 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33  EEN operator</h3
15990 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57 45  >.<p>^(The BETWE
159a0 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 6c  EN operator is l
159b0 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c  ogically equival
159c0 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f 66  ent to a pair of
159d0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c   comparisons.."<
159e0 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45  i>x</i> <b>BETWE
159f0 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20  EN</b> <i>y</i> 
15a00 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c  <b>AND</b> <i>z<
15a10 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61 6c  /i>" is .equival
15a20 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69  ent to ."<i>x</i
15a30 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e  ><b>&gt;=</b><i>
15a40 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e  y</i> <b>AND</b>
15a50 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b   <i>x</i><b>&lt;
15a60 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65  =</b><i>z</i>" e
15a70 78 63 65 70 74 0a 74 68 61 74 20 77 69 74 68 20  xcept.that with 
15a80 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69 3e  BETWEEN, the <i>
15a90 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e  x</i> expression
15aa0 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61 74   is only evaluat
15ab0 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65 20  ed once.)^.^The 
15ac0 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74 68  precedence of th
15ad0 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
15ae0 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  or is the same a
15af0 73 20 74 68 65 20 70 72 65 63 65 64 65 6e 63 65  s the precedence
15b00 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c 62  .as operators <b
15b10 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 21  >==</b> and <b>!
15b20 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b  =</b> and <b>LIK
15b30 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70 73  E</b> and groups
15b40 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 0a   left to right..
15b50 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
15b60 74 20 63 61 73 65 20 7b 43 41 53 45 20 65 78 70  t case {CASE exp
15b70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c  ression}</tcl>.<
15b80 68 33 3e 54 68 65 20 43 41 53 45 20 65 78 70 72  h3>The CASE expr
15b90 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41  ession</h3>.<p>A
15ba0 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
15bb0 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20 73   serves a role s
15bc0 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48 45  imilar to IF-THE
15bd0 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72 0a  N-ELSE in other.
15be0 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67  programming lang
15bf0 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68 65  uages.  ..<p>The
15c00 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65 73   optional expres
15c10 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73  sion that occurs
15c20 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20   in between the 
15c30 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e 64  CASE keyword and
15c40 20 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e 20   the.first WHEN 
15c50 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c 65  keyword is calle
15c60 64 20 74 68 65 20 22 62 61 73 65 22 20 65 78 70  d the "base" exp
15c70 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65 20  ression. ^There 
15c80 61 72 65 20 74 77 6f 20 62 61 73 69 63 20 66 6f  are two basic fo
15c90 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45 20  rms.of the CASE 
15ca0 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f 73  expression: thos
15cb0 65 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78  e with a base ex
15cc0 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 6f  pression and tho
15cd0 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e  se without...<p>
15ce0 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 6f  ^In a CASE witho
15cf0 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65 73  ut a base expres
15d00 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e 20  sion, each WHEN 
15d10 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
15d20 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65 20  aluated.and the 
15d30 72 65 73 75 6c 74 20 74 72 65 61 74 65 64 20 61  result treated a
15d40 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61  s a boolean, sta
15d50 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20 6c  rting with the l
15d60 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e 74  eftmost and cont
15d70 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72 69  inuing.to the ri
15d80 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74  ght. ^The result
15d90 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
15da0 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 65  ression is the e
15db0 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65  valuation of the
15dc0 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   THEN.expression
15dd0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
15de0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57  s to the first W
15df0 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74  HEN expression t
15e00 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f  hat evaluates to
15e10 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e  .true. ^Or, if n
15e20 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
15e30 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
15e40 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74 68  uate to true, th
15e50 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61 6c  e result of.eval
15e60 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20  uating the ELSE 
15e70 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61  expression, if a
15e80 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73  ny. ^If there is
15e90 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73   no ELSE express
15ea0 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20  ion and.none of 
15eb0 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73  the WHEN express
15ec0 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20 74  ions are true, t
15ed0 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c 20  hen the overall 
15ee0 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
15ef0 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73 75  .<p>^A NULL resu
15f00 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  lt is considered
15f10 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76 61   untrue when eva
15f20 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65 72  luating WHEN ter
15f30 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41  ms...<p>^In a CA
15f40 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20 65  SE with a base e
15f50 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 62  xpression, the b
15f60 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ase expression i
15f70 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73 74  s evaluated just
15f80 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72 65  .once and the re
15f90 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65 64  sult is compared
15fa0 20 61 67 61 69 6e 73 74 20 74 68 65 20 65 76 61   against the eva
15fb0 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68 20  luation of each 
15fc0 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f 6e  WHEN .expression
15fd0 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
15fe0 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74  ght. ^The result
15ff0 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
16000 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 0a  ression is the .
16010 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68  evaluation of th
16020 65 20 54 48 45 4e 20 65 78 70 72 65 73 73 69 6f  e THEN expressio
16030 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  n that correspon
16040 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ds to the first 
16050 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20  WHEN.expression 
16060 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63 6f  for which the co
16070 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
16080 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f  . ^Or, if none o
16090 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72 65  f the WHEN.expre
160a0 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
160b0 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61 6c  to a value equal
160c0 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70   to the base exp
160d0 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65 73  ression, the res
160e0 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult.of evaluatin
160f0 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65  g the ELSE expre
16100 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e  ssion, if any. ^
16110 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45  If there is no E
16120 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61  LSE expression a
16130 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57  nd.none of the W
16140 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  HEN expressions 
16150 70 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c 74  produce a result
16160 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61   equal to the ba
16170 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a 74  se expression,.t
16180 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c  he overall resul
16190 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e  t is NULL...<p>^
161a0 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 61  When comparing a
161b0 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
161c0 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e 20   against a WHEN 
161d0 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
161e0 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  same.collating s
161f0 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69 74  equence, affinit
16200 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64  y, and NULL-hand
16210 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c 79  ling rules apply
16220 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65 20   as if the.base 
16230 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 57  expression and W
16240 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  HEN expression a
16250 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  re respectively 
16260 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72 69  the left- and.ri
16270 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
16280 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62 3e  s of an <big><b>
16290 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65 72  =</b></big> oper
162a0 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74 68  ator.</p> ^If th
162b0 65 20 62 61 73 65 20 0a 65 78 70 72 65 73 73 69  e base .expressi
162c0 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  on is NULL then 
162d0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
162e0 65 20 43 41 53 45 20 69 73 20 61 6c 77 61 79 73  e CASE is always
162f0 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66 20   the result .of 
16300 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45  evaluating the E
16310 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  LSE expression i
16320 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72 20  f it exists, or 
16330 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73 20  NULL if it does 
16340 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66  not...<p>^Both f
16350 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53 45  orms of the CASE
16360 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 20   expression use 
16370 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d 63  lazy, or short-c
16380 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61 74  ircuit, .evaluat
16390 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f  ion...<p>^(The o
163a0 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62  nly difference b
163b0 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c 6f  etween the follo
163c0 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65 78  wing two CASE ex
163d0 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 61  pressions is tha
163e0 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20  t .the <i>x</i> 
163f0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
16400 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79 20  aluated exactly 
16410 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72 73  once in the firs
16420 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a 6d  t example but .m
16430 69 67 68 74 20 62 65 20 65 76 61 6c 75 61 74 65  ight be evaluate
16440 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
16450 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a 0a   in the second:.
16460 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43  .<ul><pre>.<li>C
16470 41 53 45 20 78 20 57 48 45 4e 20 77 31 20 54 48  ASE x WHEN w1 TH
16480 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54 48  EN r1 WHEN w2 TH
16490 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e  EN r2 ELSE r3 EN
164a0 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e 20  D.<li>CASE WHEN 
164b0 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48 45  x=w1 THEN r1 WHE
164c0 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20 45  N x=w2 THEN r2 E
164d0 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72 65  LSE r3 END.</pre
164e0 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e  ></ul>)^...<tcl>
164f0 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f  hd_fragment in_o
16500 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d 20  p {IN operator} 
16510 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72  {NOT IN operator
16520 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
16530 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70  IN and NOT IN op
16540 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e  erators</h3>.<p>
16550 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20  ^The IN and NOT 
16560 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61 6b  IN operators tak
16570 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c 61  e a single scala
16580 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  r operand on the
16590 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63 74  .left and a vect
165a0 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68  or operand on th
165b0 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20 62  e right.formed b
165c0 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c 69  y an explicit li
165d0 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f  st of zero or mo
165e0 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62 79  re scalars or by
165f0 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71 75   a .single subqu
16600 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72  ery..^When the r
16610 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20  ight operand of 
16620 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
16630 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75  operator is a su
16640 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71  bquery, the.subq
16650 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 61  uery must have a
16660 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20 63   single result c
16670 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68 65  olumn..^When the
16680 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 69   right operand i
16690 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c 20  s an empty set, 
166a0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  the result of IN
166b0 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74 68   is false and th
166c0 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20  e.result of NOT 
166d0 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67 61  IN is true, rega
166e0 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c 65  rdless of the le
166f0 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20 65  ft operand and e
16700 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74 20  ven if the.left 
16710 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
16720 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .^(The result of
16730 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
16740 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65 74   operator is det
16750 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 66  ermined by the f
16760 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78 3a  ollowing.matrix:
16770 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c  ..<center>.<tabl
16780 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  e border=1>.<tr>
16790 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e  .<th>Left operan
167a0 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74  d <br>is NULL.<t
167b0 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20  h>Right operand 
167c0 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55 4c  <br>contains NUL
167d0 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72  L.<th>Right oper
167e0 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65 6d  and <br>is an em
167f0 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66 74  pty set.<th>Left
16800 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20 3c   operand found <
16810 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74 20  br>within right 
16820 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73 75  operand.<th>Resu
16830 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70 65  lt of <br>IN ope
16840 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c 74  rator.<th>Result
16850 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f   of <br>NOT IN o
16860 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64  perator.<tr>.<td
16870 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16880 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16890 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
168a0 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
168b0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
168c0 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
168d0 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
168e0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
168f0 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61  >true.<tr>.<td a
16900 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f  lign="center">do
16910 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74  es not matter.<t
16920 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16930 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
16940 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61  enter">yes.<td a
16950 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
16960 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16970 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c  er">false.<td al
16980 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75  ign="center">tru
16990 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  e.<tr>.<td align
169a0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
169b0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
169c0 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
169d0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
169e0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
169f0 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
16a00 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16a10 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  true.<td align="
16a20 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
16a30 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
16a40 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
16a50 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
16a60 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16a70 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16a80 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
16a90 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
16aa0 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ULL.<td align="c
16ab0 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e  enter">NULL.<tr>
16ac0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16ad0 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67  er">yes.<td alig
16ae0 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
16af0 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
16b00 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
16b10 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16b20 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
16b30 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
16b40 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20  enter">NULL.<td 
16b50 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
16b60 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  ULL.</table>.</c
16b70 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f  enter>)^..<p>^No
16b80 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 61  te that SQLite a
16b90 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e 74  llows the parent
16ba0 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
16bb0 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f 6e  scalar values on
16bc0 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20  .the right-hand 
16bd0 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72  side of an IN or
16be0 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
16bf0 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79 20   to be an empty 
16c00 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f 74  list but.most ot
16c10 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
16c20 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
16c30 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32 20  s and the SQL92 
16c40 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65  standard require
16c50 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f 6e  .the list to con
16c60 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e  tain at least on
16c70 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  e element.</p>..
16c80 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
16c90 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f   in_op {EXISTS o
16ca0 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58  perator} {NOT EX
16cb0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f  ISTS operator}</
16cc0 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49  tcl>.<h3>The EXI
16cd0 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33  STS operator</h3
16ce0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53 54  >..<p>^The EXIST
16cf0 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61 79  S operator alway
16d00 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6f  s evaluates to o
16d10 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ne of the intege
16d20 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64 20  r values 0 .and 
16d30 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67  1. ^If executing
16d40 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
16d50 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64 20  ement specified 
16d60 61 73 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  as the right-han
16d70 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74 68  d .operand of th
16d80 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
16d90 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f  r would return o
16da0 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c  ne or more rows,
16db0 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54 53   then the.EXISTS
16dc0 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
16dd0 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65 78  tes to 1. ^If ex
16de0 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45  ecuting the SELE
16df0 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a  CT would return.
16e00 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20  no rows at all, 
16e10 74 68 65 6e 20 74 68 65 20 45 58 49 53 54 53 20  then the EXISTS 
16e20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
16e30 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54  es to 0. ..<p>^T
16e40 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
16e50 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f 77  umns in each row
16e60 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
16e70 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
16e80 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20 74  t.(if any) and t
16e90 68 65 20 73 70 65 63 69 66 69 63 20 76 61 6c 75  he specific valu
16ea0 65 73 20 72 65 74 75 72 6e 65 64 20 68 61 76 65  es returned have
16eb0 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68   no effect on th
16ec0 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68 65  e results.of the
16ed0 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
16ee0 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61 72  . ^In particular
16ef0 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e  , rows containin
16f00 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  g NULL values ar
16f10 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e  e.not handled an
16f20 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66 72  y differently fr
16f30 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20  om rows without 
16f40 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 68  NULL values...<h
16f50 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65 72  3>Scalar Subquer
16f60 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20  ies</h3>..<p>^A 
16f70 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
16f80 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70  nt enclosed in p
16f90 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 61  arentheses may a
16fa0 70 70 65 61 72 20 61 73 20 61 20 73 63 61 6c 61  ppear as a scala
16fb0 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20 5b  r.quantity. ^A [
16fc0 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73 20  SELECT] used as 
16fd0 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74  a scalar quantit
16fe0 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61 20  y must return a 
16ff0 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68 20  result set.with 
17000 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
17010 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
17020 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
17030 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
17040 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 69  he.only column i
17050 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 20  n the first row 
17060 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
17070 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
17080 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54  . ^If the SELECT
17090 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74 68   .yields more th
170a0 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f  an one result ro
170b0 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74 65  w, all rows afte
170c0 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65 20  r the first are 
170d0 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68 65  ignored. ^If.the
170e0 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20 6e   SELECT yields n
170f0 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65  o rows, then the
17100 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65 78   value of the ex
17110 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c  pression is NULL
17120 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f 66  ..^(The LIMIT of
17130 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65   a scalar subque
17140 72 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e 0a  ry is always 1..
17150 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54 20  Any other LIMIT 
17160 76 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20 74  value given in t
17170 68 65 20 53 51 4c 20 74 65 78 74 20 69 73 20 69  he SQL text is i
17180 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41  gnored.)^..<p>^A
17190 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45 4c  ll types of [SEL
171a0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20  ECT] statement, 
171b0 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65 67  including aggreg
171c0 61 74 65 20 61 6e 64 20 5b 63 6f 6d 70 6f 75 6e  ate and [compoun
171d0 64 20 53 45 4c 45 43 54 5d 0a 71 75 65 72 69 65  d SELECT].querie
171e0 73 20 28 71 75 65 72 69 65 73 20 77 69 74 68 20  s (queries with 
171f0 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e  keywords like UN
17200 49 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61  ION or EXCEPT) a
17210 72 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63  re allowed as sc
17220 61 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73 2e  alar.subqueries.
17230 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75  ..<h3>Table Colu
17240 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c  mn Names</h3>..<
17250 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  p>^A column name
17260 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74   can be any of t
17270 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64  he names defined
17280 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20   in the [CREATE 
17290 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74  TABLE].statement
172a0 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   or one of the f
172b0 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c  ollowing special
172c0 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c   identifiers: "<
172d0 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c  b>ROWID</b>",."<
172e0 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22  b>OID</b>", or "
172f0 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e  <b>_ROWID_</b>".
17300 0a 5e 54 68 65 20 74 68 72 65 65 20 73 70 65 63  .^The three spec
17310 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20  ial identifiers 
17320 64 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69  describe the.uni
17330 71 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  que integer key 
17340 28 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73  (the [rowid]) as
17350 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76  sociated with ev
17360 65 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72  ery .row of ever
17370 79 20 74 61 62 6c 65 20 61 6e 64 20 73 6f 20 61  y table and so a
17380 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  re not available
17390 20 6f 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f 57   on [WITHOUT ROW
173a0 49 44 5d 20 74 61 62 6c 65 73 2e 0a 5e 54 68 65  ID] tables..^The
173b0 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66   special identif
173c0 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72 20  iers only refer 
173d0 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69  to the row key i
173e0 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41  f the [CREATE TA
173f0 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 64  BLE].statement d
17400 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 61  oes not define a
17410 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69 74   real column wit
17420 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e  h the same name.
17430 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61 6e 20  .^The rowid can 
17440 62 65 20 75 73 65 64 20 61 6e 79 77 68 65 72 65  be used anywhere
17450 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75 6d   a regular.colum
17460 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e 3c 2f  n can be used.</
17470 70 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43  p>..<p>^A [SELEC
17480 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  T] statement use
17490 64 20 61 73 20 65 69 74 68 65 72 20 61 20 73 63  d as either a sc
174a0 61 6c 61 72 20 73 75 62 71 75 65 72 79 20 6f 72  alar subquery or
174b0 20 61 73 20 74 68 65 20 0a 72 69 67 68 74 2d 68   as the .right-h
174c0 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  and operand of a
174d0 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f 72 20  n IN, NOT IN or 
174e0 45 58 49 53 54 53 20 65 78 70 72 65 73 73 69 6f  EXISTS expressio
174f0 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 0a 72  n may contain .r
17500 65 66 65 72 65 6e 63 65 73 20 74 6f 20 63 6f 6c  eferences to col
17510 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f 75 74 65  umns in the oute
17520 72 20 71 75 65 72 79 2e 20 53 75 63 68 20 61 20  r query. Such a 
17530 73 75 62 71 75 65 72 79 20 69 73 20 6b 6e 6f 77  subquery is know
17540 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c 61 74 65  n as.a correlate
17550 64 20 73 75 62 71 75 65 72 79 2e 20 5e 41 20 63  d subquery. ^A c
17560 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
17570 72 79 20 69 73 20 72 65 65 76 61 6c 75 61 74 65  ry is reevaluate
17580 64 20 65 61 63 68 20 74 69 6d 65 0a 69 74 73 20  d each time.its 
17590 72 65 73 75 6c 74 20 69 73 20 72 65 71 75 69 72  result is requir
175a0 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72 72 65 6c  ed. ^An uncorrel
175b0 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69 73  ated subquery is
175c0 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c 79 20   evaluated only 
175d0 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20 72 65 73  once.and the res
175e0 75 6c 74 20 72 65 75 73 65 64 20 61 73 20 6e 65  ult reused as ne
175f0 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68  cessary...<tcl>h
17600 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 74 65  d_fragment caste
17610 78 70 72 20 7b 43 41 53 54 20 65 78 70 72 65 73  xpr {CAST expres
17620 73 69 6f 6e 7d 20 7b 43 41 53 54 7d 20 7b 63 61  sion} {CAST} {ca
17630 73 74 7d 20 7b 43 41 53 54 20 6f 70 65 72 61 74  st} {CAST operat
17640 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41  or}</tcl>.<h3>CA
17650 53 54 20 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f  ST expressions</
17660 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65  h3>..<p>A CAST e
17670 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
17680 20 66 6f 72 6d 20 22 43 41 53 54 28 3c 69 3e 65   form "CAST(<i>e
17690 78 70 72 3c 2f 69 3e 20 41 53 20 3c 69 3e 74 79  xpr</i> AS <i>ty
176a0 70 65 2d 6e 61 6d 65 3c 2f 69 3e 29 22 0a 69 73  pe-name</i>)".is
176b0 20 75 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74   used to convert
176c0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 3c 69   the value of <i
176d0 3e 65 78 70 72 3c 2f 69 3e 20 74 6f 20 0a 61 20  >expr</i> to .a 
176e0 64 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72 61  different [stora
176f0 67 65 20 63 6c 61 73 73 5d 20 73 70 65 63 69 66  ge class] specif
17700 69 65 64 20 62 79 20 3c 79 79 74 65 72 6d 3e 74  ied by <yyterm>t
17710 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ype-name</yyterm
17720 3e 2e 0a 5e 41 20 43 41 53 54 20 63 6f 6e 76 65  >..^A CAST conve
17730 72 73 69 6f 6e 20 69 73 20 73 69 6d 69 6c 61 72  rsion is similar
17740 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69   to the conversi
17750 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 0a 70 6c  on that takes.pl
17760 61 63 65 20 77 68 65 6e 20 61 20 5b 63 6f 6c 75  ace when a [colu
17770 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 69 73 20  mn affinity] is 
17780 61 70 70 6c 69 65 64 20 74 6f 20 61 20 76 61 6c  applied to a val
17790 75 65 20 65 78 63 65 70 74 20 74 68 61 74 20 77  ue except that w
177a0 69 74 68 0a 74 68 65 20 43 41 53 54 20 6f 70 65  ith.the CAST ope
177b0 72 61 74 6f 72 20 74 68 65 20 63 6f 6e 76 65 72  rator the conver
177c0 73 69 6f 6e 20 61 6c 77 61 79 73 20 74 61 6b 65  sion always take
177d0 73 20 70 6c 61 63 65 20 65 76 65 6e 20 69 66 20  s place even if 
177e0 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 0a 6c  the conversion.l
177f0 6f 73 73 79 20 61 6e 64 20 69 72 72 65 76 65 72  ossy and irrever
17800 73 69 62 6c 65 2c 20 77 68 65 72 65 61 73 20 63  sible, whereas c
17810 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 6f  olumn affinity o
17820 6e 6c 79 20 63 68 61 6e 67 65 73 20 74 68 65 20  nly changes the 
17830 64 61 74 61 20 74 79 70 65 0a 6f 66 20 61 20 76  data type.of a v
17840 61 6c 75 65 20 69 66 20 74 68 65 20 63 68 61 6e  alue if the chan
17850 67 65 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61  ge is lossless a
17860 6e 64 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 0a  nd reversible...
17870 3c 70 3e 5e 49 66 20 74 68 65 20 76 61 6c 75 65  <p>^If the value
17880 20 6f 66 20 3c 69 3e 65 78 70 72 3c 2f 69 3e 20   of <i>expr</i> 
17890 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  is NULL, then th
178a0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
178b0 43 41 53 54 0a 65 78 70 72 65 73 73 69 6f 6e 20  CAST.expression 
178c0 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e 20 5e 4f  is also NULL. ^O
178d0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 73 74  therwise, the st
178e0 6f 72 61 67 65 20 63 6c 61 73 73 20 6f 66 20 74  orage class of t
178f0 68 65 20 72 65 73 75 6c 74 0a 69 73 20 64 65 74  he result.is det
17900 65 72 6d 69 6e 65 64 20 62 79 20 61 70 70 6c 79  ermined by apply
17910 69 6e 67 20 74 68 65 20 5b 72 75 6c 65 73 20 66  ing the [rules f
17920 6f 72 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 63  or determining c
17930 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20  olumn affinity] 
17940 74 6f 0a 74 68 65 20 3c 79 79 74 65 72 6d 3e 74  to.the <yyterm>t
17950 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ype-name</yyterm
17960 3e 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  >...<table borde
17970 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e  r=1>.<tr>.  <th>
17980 20 41 66 66 69 6e 69 74 79 20 6f 66 20 3c 79 79   Affinity of <yy
17990 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f  term>type-name</
179a0 79 79 74 65 72 6d 3e 0a 20 20 3c 74 68 3e 20 43  yyterm>.  <th> C
179b0 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f 63 65 73  onversion Proces
179c0 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  sing.<tr>.  <td>
179d0 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e 20 5e 43   NONE .  <td> ^C
179e0 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65 20 74  asting a value t
179f0 6f 20 61 20 3c 79 79 74 65 72 6d 3e 74 79 70 65  o a <yyterm>type
17a00 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 77  -name</yyterm> w
17a10 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74 79 20  ith no affinity 
17a20 0a 20 20 63 61 75 73 65 73 20 74 68 65 20 76 61  .  causes the va
17a30 6c 75 65 20 74 6f 0a 20 20 62 65 20 63 6f 6e 76  lue to.  be conv
17a40 65 72 74 65 64 20 69 6e 74 6f 20 61 20 42 4c 4f  erted into a BLO
17a50 42 2e 20 20 5e 43 61 73 74 69 6e 67 20 74 6f 20  B.  ^Casting to 
17a60 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74 73 20  a BLOB consists 
17a70 6f 66 20 66 69 72 73 74 20 63 61 73 74 69 6e 67  of first casting
17a80 0a 20 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20  .  the value to 
17a90 54 45 58 54 20 69 6e 20 74 68 65 20 5b 65 6e 63  TEXT in the [enc
17aa0 6f 64 69 6e 67 5d 20 6f 66 20 74 68 65 20 64 61  oding] of the da
17ab0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
17ac0 6e 2c 20 74 68 65 6e 0a 20 20 69 6e 74 65 72 70  n, then.  interp
17ad0 72 65 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c  reting the resul
17ae0 74 69 6e 67 20 62 79 74 65 20 73 65 71 75 65 6e  ting byte sequen
17af0 63 65 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73  ce as a BLOB ins
17b00 74 65 61 64 20 6f 66 20 61 73 20 54 45 58 54 2e  tead of as TEXT.
17b10 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 54 45  ..<tr>.  <td> TE
17b20 58 54 0a 20 20 3c 74 64 3e 20 5e 54 6f 20 63 61  XT.  <td> ^To ca
17b30 73 74 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20  st a BLOB value 
17b40 74 6f 20 54 45 58 54 2c 20 74 68 65 20 73 65 71  to TEXT, the seq
17b50 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 20 74  uence of bytes t
17b60 68 61 74 20 6d 61 6b 65 20 75 70 20 74 68 65 0a  hat make up the.
17b70 20 20 42 4c 4f 42 20 69 73 20 69 6e 74 65 72 70    BLOB is interp
17b80 72 65 74 65 64 20 61 73 20 74 65 78 74 20 65 6e  reted as text en
17b90 63 6f 64 65 64 20 75 73 69 6e 67 20 74 68 65 20  coded using the 
17ba0 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e  database encodin
17bb0 67 2e 0a 20 20 3c 70 3e 0a 20 20 20 5e 43 61 73  g..  <p>.   ^Cas
17bc0 74 69 6e 67 20 61 6e 20 49 4e 54 45 47 45 52 20  ting an INTEGER 
17bd0 6f 72 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e  or REAL value in
17be0 74 6f 20 54 45 58 54 20 72 65 6e 64 65 72 73 20  to TEXT renders 
17bf0 74 68 65 20 76 61 6c 75 65 20 61 73 20 69 66 20  the value as if 
17c00 76 69 61 20 0a 20 20 20 20 5b 73 71 6c 69 74 65  via .    [sqlite
17c10 33 5f 73 6e 70 72 69 6e 74 66 28 29 5d 20 65 78  3_snprintf()] ex
17c20 63 65 70 74 20 74 68 61 74 20 74 68 65 20 72 65  cept that the re
17c30 73 75 6c 74 69 6e 67 20 54 45 58 54 20 75 73 65  sulting TEXT use
17c40 73 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d  s the [encoding]
17c50 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74 61   of.    the data
17c60 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
17c70 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 52 45  ..<tr>.  <td> RE
17c80 41 4c 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20  AL.  <td> ^When 
17c90 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76  casting a BLOB v
17ca0 61 6c 75 65 20 74 6f 20 61 20 52 45 41 4c 2c 20  alue to a REAL, 
17cb0 74 68 65 20 76 61 6c 75 65 20 69 73 20 66 69 72  the value is fir
17cc0 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a  st converted to.
17cd0 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a 20 20          TEXT..  
17ce0 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61       <p>^When ca
17cf0 73 74 69 6e 67 20 61 20 54 45 58 54 20 76 61 6c  sting a TEXT val
17d00 75 65 20 74 6f 20 52 45 41 4c 2c 20 74 68 65 20  ue to REAL, the 
17d10 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65  longest possible
17d20 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20   prefix of.     
17d30 20 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61     the value tha
17d40 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72  t can be interpr
17d50 65 74 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e  eted as a real n
17d60 75 6d 62 65 72 20 69 73 20 65 78 74 72 61 63 74  umber is extract
17d70 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20  ed from.        
17d80 74 68 65 20 54 45 58 54 20 76 61 6c 75 65 20 61  the TEXT value a
17d90 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  nd the remainder
17da0 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c   ignored. ^Any l
17db0 65 61 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e  eading spaces in
17dc0 20 74 68 65 0a 20 20 20 20 20 20 20 20 54 45 58   the.        TEX
17dd0 54 20 76 61 6c 75 65 20 61 72 65 20 69 67 6e 6f  T value are igno
17de0 72 65 64 20 77 68 65 6e 20 63 6f 6e 76 65 72 67  red when converg
17df0 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f  ing from TEXT to
17e00 20 52 45 41 4c 2e 20 5e 28 49 66 20 74 68 65 72   REAL. ^(If ther
17e10 65 20 69 73 0a 20 20 20 20 20 20 20 20 6e 6f 20  e is.        no 
17e20 70 72 65 66 69 78 20 74 68 61 74 20 63 61 6e 20  prefix that can 
17e30 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
17e40 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c  s a real number,
17e50 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
17e60 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6e 76 65  he.        conve
17e70 72 73 69 6f 6e 20 69 73 20 30 2e 30 2e 29 5e 0a  rsion is 0.0.)^.
17e80 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 49 4e 54  .<tr>.  <td> INT
17e90 45 47 45 52 0a 20 20 3c 74 64 3e 20 5e 57 68 65  EGER.  <td> ^Whe
17ea0 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42  n casting a BLOB
17eb0 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45   value to INTEGE
17ec0 52 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  R, the value is 
17ed0 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20  first converted 
17ee0 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e  to.        TEXT.
17ef0 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e  .       <p>^When
17f00 20 63 61 73 74 69 6e 67 20 61 20 54 45 58 54 20   casting a TEXT 
17f10 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52  value to INTEGER
17f20 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f  , the longest po
17f30 73 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66  ssible prefix of
17f40 0a 20 20 20 20 20 20 20 20 74 68 65 20 76 61 6c  .        the val
17f50 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 69  ue that can be i
17f60 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e  nterpreted as an
17f70 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20   integer number 
17f80 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f  is extracted fro
17f90 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45  m.        the TE
17fa0 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  XT value and the
17fb0 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72   remainder ignor
17fc0 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67  ed. ^Any leading
17fd0 20 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20   spaces in the. 
17fe0 20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75         TEXT valu
17ff0 65 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e  e when convertin
18000 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 49  g from TEXT to I
18010 4e 54 45 47 45 52 20 61 72 65 20 69 67 6e 6f 72  NTEGER are ignor
18020 65 64 2e 20 5e 49 66 20 74 68 65 72 65 0a 20 20  ed. ^If there.  
18030 20 20 20 20 20 20 69 73 20 6e 6f 20 70 72 65 66        is no pref
18040 69 78 20 74 68 61 74 20 63 61 6e 20 62 65 20 69  ix that can be i
18050 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e  nterpreted as an
18060 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 2c   integer number,
18070 20 74 68 65 20 72 65 73 75 6c 74 0a 20 20 20 20   the result.    
18080 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 76 65      of the conve
18090 72 73 69 6f 6e 20 69 73 20 30 2e 20 20 5e 28 54  rsion is 0.  ^(T
180a0 68 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72  he CAST operator
180b0 20 75 6e 64 65 72 73 74 61 6e 64 73 20 64 65 63   understands dec
180c0 69 6d 61 6c 0a 20 20 20 20 20 20 20 20 69 6e 74  imal.        int
180d0 65 67 65 72 73 20 6f 6e 6c 79 20 26 6d 64 61 73  egers only &mdas
180e0 68 3b 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f 66  h; conversion of
180f0 20 5b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e   [hexadecimal in
18100 74 65 67 65 72 73 5d 20 73 74 6f 70 73 20 0a 20  tegers] stops . 
18110 20 20 20 20 20 20 20 61 74 20 74 68 65 20 22 78         at the "x
18120 22 20 69 6e 20 74 68 65 20 22 30 78 22 20 70 72  " in the "0x" pr
18130 65 66 69 78 20 6f 66 20 74 68 65 20 68 65 78 61  efix of the hexa
18140 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20  decimal integer 
18150 73 74 72 69 6e 67 20 0a 20 20 20 20 20 20 20 20  string .        
18160 61 6e 64 20 74 68 75 73 20 72 65 73 75 6c 74 20  and thus result 
18170 6f 66 20 74 68 65 20 43 41 53 54 20 69 73 20 61  of the CAST is a
18180 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 0a 20  lways zero.)^.. 
18190 20 20 20 20 20 3c 70 3e 5e 41 20 63 61 73 74 20       <p>^A cast 
181a0 6f 66 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20  of a REAL value 
181b0 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47 45 52 20  into an INTEGER 
181c0 72 65 73 75 6c 74 73 20 69 6e 20 74 68 65 20 69  results in the i
181d0 6e 74 65 67 65 72 0a 20 20 20 20 20 20 62 65 74  nteger.      bet
181e0 77 65 65 6e 20 74 68 65 20 52 45 41 4c 20 76 61  ween the REAL va
181f0 6c 75 65 20 61 6e 64 20 7a 65 72 6f 20 74 68 61  lue and zero tha
18200 74 20 69 73 20 63 6c 6f 73 65 73 74 20 74 6f 20  t is closest to 
18210 74 68 65 20 52 45 41 4c 20 76 61 6c 75 65 2e 0a  the REAL value..
18220 20 20 20 20 20 20 5e 49 66 20 61 20 52 45 41 4c        ^If a REAL
18230 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
18240 20 74 68 65 20 67 72 65 61 74 65 73 74 20 70 6f   the greatest po
18250 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20  ssible signed.  
18260 20 20 20 20 69 6e 74 65 67 65 72 20 28 2b 39 32      integer (+92
18270 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
18280 37 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  7) then the resu
18290 6c 74 20 69 73 20 74 68 65 20 67 72 65 61 74 65  lt is the greate
182a0 73 74 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20  st possible.    
182b0 20 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72    signed integer
182c0 20 61 6e 64 20 69 66 20 74 68 65 20 52 45 41 4c   and if the REAL
182d0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
182e0 65 20 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65  e least possible
182f0 20 73 69 67 6e 65 64 0a 20 20 20 20 20 20 69 6e   signed.      in
18300 74 65 67 65 72 20 28 2d 39 32 32 33 33 37 32 30  teger (-92233720
18310 33 36 38 35 34 37 37 35 38 30 38 29 20 74 68 65  36854775808) the
18320 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
18330 74 68 65 20 6c 65 61 73 74 20 70 6f 73 73 69 62  the least possib
18340 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20  le.      signed 
18350 69 6e 74 65 67 65 72 2e 0a 0a 20 20 20 20 20 20  integer...      
18360 3c 70 3e 50 72 69 6f 72 20 74 6f 20 53 51 4c 69  <p>Prior to SQLi
18370 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32  te version 3.8.2
18380 2c 20 63 61 73 74 69 6e 67 20 61 20 52 45 41 4c  , casting a REAL
18390 20 76 61 6c 75 65 20 67 72 65 61 74 65 72 20 74   value greater t
183a0 68 61 6e 0a 20 20 20 20 20 20 2b 39 32 32 33 33  han.      +92233
183b0 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2e 30  72036854775807.0
183c0 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
183d0 20 72 65 73 75 6c 74 65 64 20 69 6e 20 74 68 65   resulted in the
183e0 20 6d 6f 73 74 20 6e 65 67 61 74 69 76 65 0a 20   most negative. 
183f0 20 20 20 20 20 69 6e 74 65 67 65 72 2c 20 2d 39       integer, -9
18400 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
18410 30 38 2e 20 20 54 68 69 73 20 62 65 68 61 76 69  08.  This behavi
18420 6f 72 20 77 61 73 20 6d 65 61 6e 74 20 74 6f 20  or was meant to 
18430 65 6d 75 6c 61 74 65 20 74 68 65 0a 20 20 20 20  emulate the.    
18440 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20 78 38    behavior of x8
18450 36 2f 78 36 34 20 68 61 72 64 77 61 72 65 20 77  6/x64 hardware w
18460 68 65 6e 20 64 6f 69 6e 67 20 74 68 65 20 65 71  hen doing the eq
18470 75 69 76 61 6c 65 6e 74 20 63 61 73 74 2e 0a 0a  uivalent cast...
18480 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 4e 55 4d 45  <tr>.  <td> NUME
18490 52 49 43 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74  RIC.  <td> ^Cast
184a0 69 6e 67 20 61 20 54 45 58 54 20 6f 72 20 42 4c  ing a TEXT or BL
184b0 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 4e 55  OB value into NU
184c0 4d 45 52 49 43 20 66 69 72 73 74 20 64 6f 65 73  MERIC first does
184d0 20 61 20 66 6f 72 63 65 64 0a 20 20 20 63 6f 6e   a forced.   con
184e0 76 65 72 73 69 6f 6e 20 69 6e 74 6f 20 52 45 41  version into REA
184f0 4c 20 62 75 74 20 74 68 65 6e 20 66 75 72 74 68  L but then furth
18500 65 72 20 63 6f 6e 76 65 72 74 73 20 74 68 65 20  er converts the 
18510 72 65 73 75 6c 74 20 69 6e 74 6f 20 49 4e 54 45  result into INTE
18520 47 45 52 20 69 66 0a 20 20 20 61 6e 64 20 6f 6e  GER if.   and on
18530 6c 79 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72  ly if the conver
18540 73 69 6f 6e 20 66 72 6f 6d 20 52 45 41 4c 20 74  sion from REAL t
18550 6f 20 49 4e 54 45 47 45 52 20 69 73 20 6c 6f 73  o INTEGER is los
18560 73 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72 73  sless and revers
18570 69 62 6c 65 2e 0a 20 20 20 54 68 69 73 20 69 73  ible..   This is
18580 20 74 68 65 20 6f 6e 6c 79 20 63 6f 6e 74 65 78   the only contex
18590 74 20 69 6e 20 53 51 4c 69 74 65 20 77 68 65 72  t in SQLite wher
185a0 65 20 74 68 65 20 4e 55 4d 45 52 49 43 20 61 6e  e the NUMERIC an
185b0 64 20 49 4e 54 45 47 45 52 20 5b 61 66 66 69 6e  d INTEGER [affin
185c0 69 74 69 65 73 5d 0a 20 20 20 62 65 68 61 76 65  ities].   behave
185d0 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 0a 20 20   differently..  
185e0 20 3c 70 3e 20 5e 43 61 73 74 69 6e 67 20 61 20   <p> ^Casting a 
185f0 52 45 41 4c 20 6f 72 20 49 4e 54 45 47 45 52 20  REAL or INTEGER 
18600 76 61 6c 75 65 20 74 6f 20 4e 55 4d 45 52 49 43  value to NUMERIC
18610 20 69 73 20 61 20 6e 6f 2d 6f 70 2c 20 65 76 65   is a no-op, eve
18620 6e 20 69 66 20 61 20 72 65 61 6c 0a 20 20 20 76  n if a real.   v
18630 61 6c 75 65 20 63 6f 75 6c 64 20 62 65 20 6c 6f  alue could be lo
18640 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
18650 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
18660 2e 0a 0a 3c 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c  ...</tr>..</tabl
18670 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  e>..<p>^Note tha
18680 74 20 74 68 65 20 72 65 73 75 6c 74 20 66 72 6f  t the result fro
18690 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20 6e 6f  m casting any no
186a0 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74  n-BLOB value int
186b0 6f 20 61 20 0a 42 4c 4f 42 20 61 6e 64 20 74 68  o a .BLOB and th
186c0 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 63 61  e result from ca
186d0 73 74 69 6e 67 20 61 6e 79 20 42 4c 4f 42 20 76  sting any BLOB v
186e0 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d  alue into a non-
186f0 42 4c 4f 42 20 76 61 6c 75 65 0a 6d 61 79 20 62  BLOB value.may b
18700 65 20 64 69 66 66 65 72 65 6e 74 20 64 65 70 65  e different depe
18710 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
18720 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 65   the database [e
18730 6e 63 6f 64 69 6e 67 5d 20 69 73 20 55 54 46 2d  ncoding] is UTF-
18740 38 2c 0a 55 54 46 2d 31 36 62 65 2c 20 6f 72 20  8,.UTF-16be, or 
18750 55 54 46 2d 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c  UTF-16le....<tcl
18760 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 6f 6f  >hd_fragment boo
18770 6c 65 61 6e 65 78 70 72 20 7b 62 6f 6f 6c 65 61  leanexpr {boolea
18780 6e 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74  n expression}</t
18790 63 6c 3e 0a 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20  cl>.<h3>Boolean 
187a0 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  Expressions</h3>
187b0 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 6c 61 6e  ..<p>The SQL lan
187c0 67 75 61 67 65 20 66 65 61 74 75 72 65 73 20 73  guage features s
187d0 65 76 65 72 61 6c 20 63 6f 6e 74 65 78 74 73 20  everal contexts 
187e0 77 68 65 72 65 20 61 6e 20 65 78 70 72 65 73 73  where an express
187f0 69 6f 6e 20 69 73 20 0a 65 76 61 6c 75 61 74 65  ion is .evaluate
18800 64 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  d and the result
18810 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20   converted to a 
18820 62 6f 6f 6c 65 61 6e 20 28 74 72 75 65 20 6f 72  boolean (true or
18830 20 66 61 6c 73 65 29 20 76 61 6c 75 65 2e 20 54   false) value. T
18840 68 65 73 65 0a 63 6f 6e 74 65 78 74 73 20 61 72  hese.contexts ar
18850 65 3a 0a 0a 20 20 3c 75 6c 3e 0a 20 20 20 20 3c  e:..  <ul>.    <
18860 6c 69 3e 20 74 68 65 20 57 48 45 52 45 20 63 6c  li> the WHERE cl
18870 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
18880 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
18890 54 45 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20  TE statement,.  
188a0 20 20 3c 6c 69 3e 20 74 68 65 20 4f 4e 20 6f 72    <li> the ON or
188b0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
188c0 20 61 20 6a 6f 69 6e 20 69 6e 20 61 20 53 45 4c   a join in a SEL
188d0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20  ECT statement,. 
188e0 20 20 20 3c 6c 69 3e 20 74 68 65 20 48 41 56 49     <li> the HAVI
188f0 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  NG clause of a S
18900 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
18910 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48  .    <li> the WH
18920 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20  EN clause of an 
18930 53 51 4c 20 74 72 69 67 67 65 72 2c 20 61 6e 64  SQL trigger, and
18940 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48  .    <li> the WH
18950 45 4e 20 63 6c 61 75 73 65 20 6f 72 20 63 6c 61  EN clause or cla
18960 75 73 65 73 20 6f 66 20 73 6f 6d 65 20 43 41 53  uses of some CAS
18970 45 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 20  E expressions.. 
18980 20 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20   </ul>..<p>^(To 
18990 63 6f 6e 76 65 72 74 20 74 68 65 20 72 65 73 75  convert the resu
189a0 6c 74 73 20 6f 66 20 61 6e 20 53 51 4c 20 65 78  lts of an SQL ex
189b0 70 72 65 73 73 69 6f 6e 20 74 6f 20 61 20 62 6f  pression to a bo
189c0 6f 6c 65 61 6e 20 76 61 6c 75 65 2c 20 53 51 4c  olean value, SQL
189d0 69 74 65 0a 66 69 72 73 74 20 63 61 73 74 73 20  ite.first casts 
189e0 74 68 65 20 72 65 73 75 6c 74 20 74 6f 20 61 20  the result to a 
189f0 4e 55 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e  NUMERIC value in
18a00 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
18a10 20 61 20 0a 5b 43 41 53 54 20 65 78 70 72 65 73   a .[CAST expres
18a20 73 69 6f 6e 5d 2e 20 41 20 6e 75 6d 65 72 69 63  sion]. A numeric
18a30 20 7a 65 72 6f 20 76 61 6c 75 65 20 28 69 6e 74   zero value (int
18a40 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20  eger value 0 or 
18a50 72 65 61 6c 20 0a 76 61 6c 75 65 20 30 2e 30 29  real .value 0.0)
18a60 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
18a70 6f 20 62 65 20 66 61 6c 73 65 2e 20 20 41 20 4e  o be false.  A N
18a80 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 73 74 69  ULL value is sti
18a90 6c 6c 20 4e 55 4c 4c 2e 0a 41 6c 6c 20 6f 74 68  ll NULL..All oth
18aa0 65 72 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  er values are co
18ab0 6e 73 69 64 65 72 65 64 20 74 72 75 65 2e 29 5e  nsidered true.)^
18ac0 0a 0a 3c 70 3e 5e 28 46 6f 72 20 65 78 61 6d 70  ..<p>^(For examp
18ad0 6c 65 2c 20 74 68 65 20 76 61 6c 75 65 73 20 4e  le, the values N
18ae0 55 4c 4c 2c 20 30 2e 30 2c 20 30 2c 20 27 65 6e  ULL, 0.0, 0, 'en
18af0 67 6c 69 73 68 27 20 61 6e 64 20 27 30 27 20 61  glish' and '0' a
18b00 72 65 20 61 6c 6c 20 63 6f 6e 73 69 64 65 72 65  re all considere
18b10 64 0a 74 6f 20 62 65 20 66 61 6c 73 65 2e 29 5e  d.to be false.)^
18b20 20 5e 28 56 61 6c 75 65 73 20 31 2c 20 31 2e 30   ^(Values 1, 1.0
18b30 2c 20 30 2e 31 2c 20 2d 30 2e 31 20 61 6e 64 20  , 0.1, -0.1 and 
18b40 27 31 65 6e 67 6c 69 73 68 27 20 61 72 65 20 63  '1english' are c
18b50 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 0a 62 65  onsidered to .be
18b60 20 74 72 75 65 2e 29 5e 0a 0a 3c 68 33 3e 46 75   true.)^..<h3>Fu
18b70 6e 63 74 69 6f 6e 73 3c 2f 68 33 3e 0a 3c 70 3e  nctions</h3>.<p>
18b80 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
18b90 6d 61 6e 79 20 5b 63 6f 72 65 66 75 6e 63 7c 73  many [corefunc|s
18ba0 69 6d 70 6c 65 5d 20 61 6e 64 20 5b 61 67 67 66  imple] and [aggf
18bb0 75 6e 63 7c 61 67 67 72 65 67 61 74 65 5d 0a 53  unc|aggregate].S
18bc0 51 4c 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 46  QL functions.  F
18bd0 6f 72 20 70 72 65 73 65 6e 74 61 74 69 6f 6e 20  or presentation 
18be0 70 75 72 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65  purposes, simple
18bf0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 66   functions are f
18c00 75 72 74 68 65 72 0a 73 75 62 64 69 76 69 64 65  urther.subdivide
18c10 64 20 69 6e 74 6f 20 5b 63 6f 72 65 66 75 6e 63  d into [corefunc
18c20 20 7c 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e   | core function
18c30 73 5d 20 61 6e 64 20 5b 64 61 74 65 66 75 6e 63  s] and [datefunc
18c40 7c 64 61 74 65 2d 74 69 6d 65 20 66 75 6e 63 74  |date-time funct
18c50 69 6f 6e 73 5d 2e 0a 41 70 70 6c 69 63 61 74 69  ions]..Applicati
18c60 6f 6e 73 20 63 61 6e 20 61 64 64 20 6e 65 77 20  ons can add new 
18c70 66 75 6e 63 74 69 6f 6e 73 2c 20 77 72 69 74 74  functions, writt
18c80 65 6e 20 69 6e 20 43 2f 43 2b 2b 2c 20 75 73 69  en in C/C++, usi
18c90 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
18ca0 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
18cb0 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 0a 3c 2f  )] interface..</
18cc0 70 3e 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 70 6f  p>..<p>^It is po
18cd0 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 61  ssible to have a
18ce0 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
18cf0 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 73 61  tion with the sa
18d00 6d 65 20 6e 61 6d 65 20 61 73 20 61 0a 73 69 6d  me name as a.sim
18d10 70 6c 65 20 66 75 6e 63 74 69 6f 6e 2c 20 61 73  ple function, as
18d20 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 6e 75 6d   long as the num
18d30 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
18d40 20 66 6f 72 20 74 68 65 20 74 77 6f 20 66 6f 72   for the two for
18d50 6d 73 20 6f 66 20 74 68 65 0a 66 75 6e 63 74 69  ms of the.functi
18d60 6f 6e 20 61 72 65 20 64 69 66 66 65 72 65 6e 74  on are different
18d70 2e 20 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  .  ^For example,
18d80 20 74 68 65 20 5b 61 67 67 5f 6d 61 78 7c 6d 61   the [agg_max|ma
18d90 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69  x()] function wi
18da0 74 68 20 61 0a 73 69 6e 67 6c 65 20 61 72 67 75  th a.single argu
18db0 6d 65 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65  ment is an aggre
18dc0 67 61 74 65 20 61 6e 64 20 74 68 65 20 5b 6d 61  gate and the [ma
18dd0 78 28 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69  x()] function wi
18de0 74 68 20 74 77 6f 20 6f 72 20 6d 6f 72 65 0a 61  th two or more.a
18df0 72 67 75 6d 65 6e 74 73 20 69 73 20 61 20 73 69  rguments is a si
18e00 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a  mple function...
18e10 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
18e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e60 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f  ####.Section {Co
18e70 72 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f  re Functions} co
18e80 72 65 66 75 6e 63 20 7b 2a 63 6f 72 65 66 75 6e  refunc {*corefun
18e90 63 7d 0a 70 72 6f 63 20 66 75 6e 63 64 65 66 20  c}.proc funcdef 
18ea0 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73  {syntax keywords
18eb0 20 64 65 73 63 7d 20 7b 0a 20 20 68 64 5f 70 75   desc} {.  hd_pu
18ec0 74 73 20 7b 3c 74 72 3e 7d 0a 20 20 72 65 67 73  ts {<tr>}.  regs
18ed0 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73  ub -all {\s+} [s
18ee0 74 72 69 6e 67 20 74 72 69 6d 20 24 73 79 6e 74  tring trim $synt
18ef0 61 78 5d 20 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e  ax] {<br />} syn
18f00 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
18f10 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d  l {\(([^*)]+)\)}
18f20 20 24 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31   $syntax {(<i>\1
18f30 3c 2f 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20  </i>)} syntax.  
18f40 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20  regsub -all {,} 
18f50 24 73 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69  $syntax {</i>,<i
18f60 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73  >} syntax.  regs
18f70 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e  ub -all {<i>\.\.
18f80 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20  \.</i>} $syntax 
18f90 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20 68  {...} syntax.  h
18fa0 64 5f 70 75 74 73 20 22 3c 74 64 20 76 61 6c 69  d_puts "<td vali
18fb0 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e  gn=\"top\" align
18fc0 3d 5c 22 72 69 67 68 74 5c 22 20 77 69 64 74 68  =\"right\" width
18fd0 3d 5c 22 31 32 30 5c 22 3e 22 0a 20 20 69 66 20  =\"120\">".  if 
18fe0 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f  {[llength $keywo
18ff0 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72  rds]==0} {.    r
19000 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20  egexp {[a-z_]+} 
19010 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20  $syntax name.   
19020 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61   hd_fragment $na
19030 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d  me *$name "${nam
19040 65 7d 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  e}() SQL functio
19050 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  n".  } else {.  
19060 20 20 73 65 74 20 66 72 61 67 6e 61 6d 65 20 5b    set fragname [
19070 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f 72 64 73  lindex $keywords
19080 20 30 5d 0a 20 20 20 20 72 65 67 73 75 62 20 2d   0].    regsub -
19090 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72  all {[^a-z]} $fr
190a0 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61  agname {} fragna
190b0 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65  me.    hd_fragme
190c0 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a 20 20 20  nt $fragname.   
190d0 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64   eval hd_keyword
190e0 73 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c  s [string map {\
190f0 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73  n { }} $keywords
19100 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20  ].  }.  hd_puts 
19110 22 24 73 79 6e 74 61 78 3c 2f 74 64 3e 22 0a 20  "$syntax</td>". 
19120 20 68 64 5f 70 75 74 73 20 7b 3c 74 64 20 76 61   hd_puts {<td va
19130 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20 68  lign="top">}.  h
19140 64 5f 72 65 73 6f 6c 76 65 20 24 64 65 73 63 0a  d_resolve $desc.
19150 20 20 68 64 5f 70 75 74 73 20 7b 3c 2f 74 64 3e    hd_puts {</td>
19160 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a  </tr>}.}.</tcl>.
19170 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 66 75 6e  .<p>The core fun
19180 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c  ctions shown bel
19190 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ow are available
191a0 20 62 79 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64   by default. .[d
191b0 61 74 65 66 75 6e 63 20 7c 20 44 61 74 65 20 26  atefunc | Date &
191c0 61 6d 70 3b 20 54 69 6d 65 20 66 75 6e 63 74 69  amp; Time functi
191d0 6f 6e 73 5d 2c 0a 5b 61 67 67 66 75 6e 63 20 7c  ons],.[aggfunc |
191e0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
191f0 69 6f 6e 73 5d 2c 20 61 6e 64 0a 5b 6a 73 6f 6e  ions], and.[json
19200 31 20 7c 20 4a 53 4f 4e 20 66 75 6e 63 74 69 6f  1 | JSON functio
19210 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e 74  ns] are document
19220 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20  ed separately.  
19230 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d  An.application m
19240 61 79 20 64 65 66 69 6e 65 20 61 64 64 69 74 69  ay define additi
19250 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77  onal.functions w
19260 72 69 74 74 65 6e 20 69 6e 20 43 20 61 6e 64 20  ritten in C and 
19270 61 64 64 65 64 20 74 6f 20 74 68 65 20 64 61 74  added to the dat
19280 61 62 61 73 65 20 65 6e 67 69 6e 65 20 75 73 69  abase engine usi
19290 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng.the [sqlite3_
192a0 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
192b0 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61  )] API.</p>..<ta
192c0 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
192d0 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63  lpadding=10>.<tc
192e0 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28  l>.funcdef {abs(
192f0 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
19300 61 62 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  abs(X) function 
19310 72 65 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f  returns the abso
19320 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68  lute value of th
19330 65 20 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75  e numeric.  argu
19340 6d 65 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29  ment X.  ^Abs(X)
19350 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66   returns NULL if
19360 20 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e   X is NULL. .  ^
19370 28 41 62 73 28 58 29 20 72 65 74 75 72 6e 73 20  (Abs(X) returns 
19380 30 2e 30 20 69 66 20 58 20 69 73 20 61 20 73 74  0.0 if X is a st
19390 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74  ring or blob.  t
193a0 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  hat cannot be co
193b0 6e 76 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d  nverted to a num
193c0 65 72 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e  eric value.)^  ^
193d0 49 66 20 58 20 69 73 20 74 68 65 20 0a 20 20 69  If X is the .  i
193e0 6e 74 65 67 65 72 20 2d 39 32 32 33 33 37 32 30  nteger -92233720
193f0 33 36 38 35 34 37 37 35 38 30 38 20 74 68 65 6e  36854775808 then
19400 20 61 62 73 28 58 29 20 74 68 72 6f 77 73 20 61   abs(X) throws a
19410 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
19420 6f 77 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65  ow.  error since
19430 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75   there is no equ
19440 69 76 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65  ivalent positive
19450 20 36 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70   64-bit two comp
19460 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a  lement value..}.
19470 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65  .funcdef {change
19480 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  s()} {} {.  ^The
19490 20 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74   changes() funct
194a0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
194b0 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61  number of databa
194c0 73 65 20 72 6f 77 73 20 74 68 61 74 20 77 65 72  se rows that wer
194d0 65 20 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69  e changed.  or i
194e0 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74  nserted or delet
194f0 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
19500 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65  ecently complete
19510 64 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  d INSERT, DELETE
19520 2c 0a 20 20 6f 72 20 55 50 44 41 54 45 20 73 74  ,.  or UPDATE st
19530 61 74 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69  atement, exclusi
19540 76 65 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  ve of statements
19550 20 69 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20   in lower-level 
19560 74 72 69 67 67 65 72 73 2e 0a 20 20 5e 54 68 65  triggers..  ^The
19570 20 63 68 61 6e 67 65 73 28 29 20 53 51 4c 20 66   changes() SQL f
19580 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
19590 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
195a0 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  [sqlite3_changes
195b0 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63  ()].  C/C++ func
195c0 74 69 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20 66  tion and hence f
195d0 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20  ollows the same 
195e0 72 75 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74 69  rules for counti
195f0 6e 67 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66  ng changes..}..f
19600 75 6e 63 64 65 66 20 7b 63 68 61 72 28 58 31 2c  uncdef {char(X1,
19610 58 32 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b  X2,...,XN)} {} {
19620 0a 20 20 5e 28 54 68 65 20 63 68 61 72 28 58 31  .  ^(The char(X1
19630 2c 58 32 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63  ,X2,...,XN) func
19640 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
19650 74 72 69 6e 67 20 63 6f 6d 70 6f 73 65 64 20 6f  tring composed o
19660 66 20 63 68 61 72 61 63 74 65 72 73 20 68 61 76  f characters hav
19670 69 6e 67 20 74 68 65 0a 20 20 20 75 6e 69 63 6f  ing the.   unico
19680 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 76 61  de code point va
19690 6c 75 65 73 20 6f 66 20 69 6e 74 65 67 65 72 73  lues of integers
196a0 20 58 31 20 74 68 72 6f 75 67 68 20 58 4e 2c 20   X1 through XN, 
196b0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 29 5e 0a  respectively.)^.
196c0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c  }..funcdef {coal
196d0 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  esce(X,Y,...)} {
196e0 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65  } {.  ^The coale
196f0 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  sce() function r
19700 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
19710 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   its first non-N
19720 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72  ULL argument, or
19730 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61  .  NULL if all a
19740 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c  rguments are NUL
19750 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65 28 29 20  L.  ^Coalesce() 
19760 6d 75 73 74 20 68 61 76 65 20 61 74 20 6c 65 61  must have at lea
19770 73 74 20 0a 20 20 32 20 61 72 67 75 6d 65 6e 74  st .  2 argument
19780 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67  s..}..funcdef {g
19790 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  lob(X,Y)} {} {. 
197a0 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c 59 29 20   ^The glob(X,Y) 
197b0 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69  function is equi
197c0 76 61 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20 20  valent to the.  
197d0 65 78 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59  expression "<b>Y
197e0 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20   GLOB X</b>"..  
197f0 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20  Note that the X 
19800 61 6e 64 20 59 20 61 72 67 75 6d 65 6e 74 73 20  and Y arguments 
19810 61 72 65 20 72 65 76 65 72 73 65 64 20 69 6e 20  are reversed in 
19820 74 68 65 20 67 6c 6f 62 28 29 20 66 75 6e 63 74  the glob() funct
19830 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76 65 20 74  ion.  relative t
19840 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f  o the infix [GLO
19850 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e  B] operator..  ^
19860 49 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  If the [sqlite3_
19870 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
19880 29 5d 20 69 6e 74 65 72 66 61 63 65 20 69 73 20  )] interface is 
19890 75 73 65 64 20 74 6f 0a 20 20 6f 76 65 72 72 69  used to.  overri
198a0 64 65 20 74 68 65 20 67 6c 6f 62 28 58 2c 59 29  de the glob(X,Y)
198b0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61   function with a
198c0 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d  n alternative im
198d0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65  plementation the
198e0 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f  n.  the [GLOB] o
198f0 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76  perator will inv
19900 6f 6b 65 20 74 68 65 20 61 6c 74 65 72 6e 61 74  oke the alternat
19910 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ive implementati
19920 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  on..}..funcdef {
19930 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20  ifnull(X,Y)} {} 
19940 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28  {.  ^The ifnull(
19950 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
19960 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73  ns a copy of its
19970 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20   first non-NULL 
19980 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e  argument, or.  N
19990 55 4c 4c 20 69 66 20 62 6f 74 68 20 61 72 67 75  ULL if both argu
199a0 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20  ments are NULL. 
199b0 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20   ^Ifnull() must 
199c0 68 61 76 65 20 65 78 61 63 74 6c 79 20 32 20 61  have exactly 2 a
199d0 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65  rguments..  ^The
199e0 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69   ifnull() functi
199f0 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  on is equivalent
19a00 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d   to [coalesce()]
19a10 20 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65   with two argume
19a20 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  nts..}..funcdef 
19a30 7b 69 6e 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20  {instr(X,Y)} {} 
19a40 7b 0a 20 20 5e 54 68 65 20 69 6e 73 74 72 28 58  {.  ^The instr(X
19a50 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 66 69 6e  ,Y) function fin
19a60 64 73 20 74 68 65 20 66 69 72 73 74 20 6f 63 63  ds the first occ
19a70 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e  urrence of strin
19a80 67 20 59 20 77 69 74 68 69 6e 20 0a 20 20 73 74  g Y within .  st
19a90 72 69 6e 67 20 58 20 61 6e 64 20 72 65 74 75 72  ring X and retur
19aa0 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
19ab0 20 70 72 69 6f 72 20 63 68 61 72 61 63 74 65 72   prior character
19ac0 73 20 70 6c 75 73 20 31 2c 20 6f 72 20 30 20 69  s plus 1, or 0 i
19ad0 66 0a 20 20 59 20 69 73 20 6e 6f 77 68 65 72 65  f.  Y is nowhere
19ae0 20 66 6f 75 6e 64 20 77 69 74 68 69 6e 20 58 2e   found within X.
19af0 0a 20 20 5e 4f 72 2c 20 69 66 20 58 20 61 6e 64  .  ^Or, if X and
19b00 20 59 20 61 72 65 20 62 6f 74 68 20 42 4c 4f 42   Y are both BLOB
19b10 73 2c 20 74 68 65 6e 20 69 6e 73 74 72 28 58 2c  s, then instr(X,
19b20 59 29 20 72 65 74 75 72 6e 73 20 6f 6e 65 0a 20  Y) returns one. 
19b30 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6e   more than the n
19b40 75 6d 62 65 72 20 62 79 74 65 73 20 70 72 69 6f  umber bytes prio
19b50 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 6f  r to the first o
19b60 63 63 75 72 72 65 6e 63 65 20 6f 66 20 59 2c 20  ccurrence of Y, 
19b70 6f 72 20 30 20 69 66 0a 20 20 59 20 64 6f 65 73  or 0 if.  Y does
19b80 20 6e 6f 74 20 6f 63 63 75 72 20 61 6e 79 77 68   not occur anywh
19b90 65 72 65 20 77 69 74 68 69 6e 20 58 2e 0a 20 20  ere within X..  
19ba0 5e 49 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e  ^If both argumen
19bb0 74 73 20 58 20 61 6e 64 20 59 20 74 6f 20 69 6e  ts X and Y to in
19bc0 73 74 72 28 58 2c 59 29 20 61 72 65 20 6e 6f 6e  str(X,Y) are non
19bd0 2d 4e 55 4c 4c 20 61 6e 64 20 61 72 65 20 6e 6f  -NULL and are no
19be0 74 20 42 4c 4f 42 73 0a 20 20 74 68 65 6e 20 62  t BLOBs.  then b
19bf0 6f 74 68 20 61 72 65 20 69 6e 74 65 72 70 72 65  oth are interpre
19c00 74 65 64 20 61 73 20 73 74 72 69 6e 67 73 2e 0a  ted as strings..
19c10 20 20 5e 49 66 20 65 69 74 68 65 72 20 58 20 6f    ^If either X o
19c20 72 20 59 20 61 72 65 20 4e 55 4c 4c 20 69 6e 20  r Y are NULL in 
19c30 69 6e 73 74 72 28 58 2c 59 29 20 74 68 65 6e 20  instr(X,Y) then 
19c40 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
19c50 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  LL..}..funcdef {
19c60 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  hex(X)} {} {.  ^
19c70 54 68 65 20 68 65 78 28 29 20 66 75 6e 63 74 69  The hex() functi
19c80 6f 6e 20 69 6e 74 65 72 70 72 65 74 73 20 69 74  on interprets it
19c90 73 20 61 72 67 75 6d 65 6e 74 20 61 73 20 61 20  s argument as a 
19ca0 42 4c 4f 42 20 61 6e 64 20 72 65 74 75 72 6e 73  BLOB and returns
19cb0 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68 69 63  .  a string whic
19cc0 68 20 69 73 20 74 68 65 20 75 70 70 65 72 2d 63  h is the upper-c
19cd0 61 73 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20  ase hexadecimal 
19ce0 72 65 6e 64 65 72 69 6e 67 20 6f 66 20 74 68 65  rendering of the
19cf0 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74 68   content of.  th
19d00 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63  at blob..}..func
19d10 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74  def {last_insert
19d20 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20  _rowid()} {} {. 
19d30 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72   ^The last_inser
19d40 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
19d50 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 5b  on returns the [
19d60 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74 68 65 20  ROWID].  of the 
19d70 6c 61 73 74 20 72 6f 77 20 69 6e 73 65 72 74 20  last row insert 
19d80 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
19d90 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69  e connection whi
19da0 63 68 20 69 6e 76 6f 6b 65 64 20 74 68 65 0a 20  ch invoked the. 
19db0 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68   function..  ^Th
19dc0 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  e last_insert_ro
19dd0 77 69 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69  wid() SQL functi
19de0 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
19df0 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71  around the.  [sq
19e00 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
19e10 74 5f 72 6f 77 69 64 28 29 5d 20 43 2f 43 2b 2b  t_rowid()] C/C++
19e20 20 69 6e 74 65 72 66 61 63 65 20 66 75 6e 63 74   interface funct
19e30 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ion..}..funcdef 
19e40 7b 6c 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b  {length(X)} {} {
19e50 0a 20 20 5e 46 6f 72 20 61 20 73 74 72 69 6e 67  .  ^For a string
19e60 20 76 61 6c 75 65 20 58 2c 20 74 68 65 20 6c 65   value X, the le
19e70 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e  ngth(X) function
19e80 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
19e90 62 65 72 20 6f 66 20 0a 20 20 63 68 61 72 61 63  ber of .  charac
19ea0 74 65 72 73 20 28 6e 6f 74 20 62 79 74 65 73 29  ters (not bytes)
19eb0 20 69 6e 20 58 20 70 72 69 6f 72 20 74 6f 20 74   in X prior to t
19ec0 68 65 20 66 69 72 73 74 20 4e 55 4c 20 63 68 61  he first NUL cha
19ed0 72 61 63 74 65 72 2e 0a 20 20 53 69 6e 63 65 20  racter..  Since 
19ee0 53 51 4c 69 74 65 20 73 74 72 69 6e 67 73 20 64  SQLite strings d
19ef0 6f 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 63  o not normally c
19f00 6f 6e 74 61 69 6e 20 4e 55 4c 20 63 68 61 72 61  ontain NUL chara
19f10 63 74 65 72 73 2c 20 74 68 65 20 6c 65 6e 67 74  cters, the lengt
19f20 68 28 58 29 0a 20 20 66 75 6e 63 74 69 6f 6e 20  h(X).  function 
19f30 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 72 65 74  will usually ret
19f40 75 72 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  urn the total nu
19f50 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
19f60 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  rs in the string
19f70 20 58 2e 0a 20 20 5e 46 6f 72 20 61 20 62 6c 6f   X..  ^For a blo
19f80 62 20 76 61 6c 75 65 20 58 2c 20 6c 65 6e 67 74  b value X, lengt
19f90 68 28 58 29 20 72 65 74 75 72 6e 73 20 74 68 65  h(X) returns the
19fa0 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
19fb0 20 69 6e 20 74 68 65 20 62 6c 6f 62 2e 0a 20 20   in the blob..  
19fc0 5e 49 66 20 58 20 69 73 20 4e 55 4c 4c 20 74 68  ^If X is NULL th
19fd0 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 69 73 20  en length(X) is 
19fe0 4e 55 4c 4c 2e 0a 20 20 5e 49 66 20 58 20 69 73  NULL..  ^If X is
19ff0 20 6e 75 6d 65 72 69 63 20 74 68 65 6e 20 6c 65   numeric then le
1a000 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e 73 20  ngth(X) returns 
1a010 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 61 20  the length of a 
1a020 73 74 72 69 6e 67 0a 20 20 72 65 70 72 65 73 65  string.  represe
1a030 6e 74 61 74 69 6f 6e 20 6f 66 20 58 2e 0a 7d 0a  ntation of X..}.
1a040 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 28 58  .funcdef {like(X
1a050 2c 59 29 20 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d  ,Y) like(X,Y,Z)}
1a060 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b   {} {.  ^The lik
1a070 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  e() function is 
1a080 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
1a090 74 20 74 68 65 0a 20 20 22 3c 62 3e 59 20 4c 49  t the.  "<b>Y LI
1a0a0 4b 45 20 58 20 26 23 39 31 3b 45 53 43 41 50 45  KE X &#91;ESCAPE
1a0b0 20 5a 26 23 39 33 3b 3c 2f 62 3e 22 20 65 78 70   Z&#93;</b>" exp
1a0c0 72 65 73 73 69 6f 6e 2e 20 0a 20 20 5e 49 66 20  ression. .  ^If 
1a0d0 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43  the optional ESC
1a0e0 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70 72  APE clause is pr
1a0f0 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a  esent, then the.
1a100 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f    like() functio
1a110 6e 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 69 74  n is invoked wit
1a120 68 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74  h three argument
1a130 73 2e 20 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  s.  ^Otherwise, 
1a140 69 74 20 69 73 0a 20 20 69 6e 76 6f 6b 65 64 20  it is.  invoked 
1a150 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e  with two argumen
1a160 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74 68  ts only. Note th
1a170 61 74 20 74 68 65 20 58 20 61 6e 64 20 59 20 70  at the X and Y p
1a180 61 72 61 6d 65 74 65 72 73 20 61 72 65 0a 20 20  arameters are.  
1a190 72 65 76 65 72 73 65 64 20 69 6e 20 74 68 65 20  reversed in the 
1a1a0 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
1a1b0 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20  relative to the 
1a1c0 69 6e 66 69 78 20 5b 4c 49 4b 45 5d 20 6f 70 65  infix [LIKE] ope
1a1d0 72 61 74 6f 72 2e 0a 20 20 5e 54 68 65 20 5b 73  rator..  ^The [s
1a1e0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
1a1f0 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  nction()] interf
1a200 61 63 65 20 63 61 6e 20 62 65 20 75 73 65 64 20  ace can be used 
1a210 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68 65 0a  to override the.
1a220 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f    like() functio
1a230 6e 20 61 6e 64 20 74 68 65 72 65 62 79 20 63 68  n and thereby ch
1a240 61 6e 67 65 20 74 68 65 20 6f 70 65 72 61 74 69  ange the operati
1a250 6f 6e 20 6f 66 20 74 68 65 0a 20 20 5b 4c 49 4b  on of the.  [LIK
1a260 45 5d 20 6f 70 65 72 61 74 6f 72 2e 20 20 57 68  E] operator.  Wh
1a270 65 6e 20 6f 76 65 72 72 69 64 69 6e 67 20 74 68  en overriding th
1a280 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f  e like() functio
1a290 6e 2c 20 69 74 20 6d 61 79 20 62 65 20 69 6d 70  n, it may be imp
1a2a0 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f 76 65 72  ortant.  to over
1a2b0 72 69 64 65 20 62 6f 74 68 20 74 68 65 20 74 77  ride both the tw
1a2c0 6f 20 61 6e 64 20 74 68 72 65 65 20 61 72 67 75  o and three argu
1a2d0 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66  ment versions of
1a2e0 20 74 68 65 20 6c 69 6b 65 28 29 20 0a 20 20 66   the like() .  f
1a2f0 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69  unction. Otherwi
1a300 73 65 2c 20 64 69 66 66 65 72 65 6e 74 20 63 6f  se, different co
1a310 64 65 20 6d 61 79 20 62 65 20 63 61 6c 6c 65 64  de may be called
1a320 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
1a330 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  e.  [LIKE] opera
1a340 74 6f 72 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  tor depending on
1a350 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
1a360 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75 73 65  an ESCAPE clause
1a370 20 77 61 73 20 0a 20 20 73 70 65 63 69 66 69 65   was .  specifie
1a380 64 2e 0a 7d 0a 0a 0a 66 75 6e 63 64 65 66 20 7b  d..}...funcdef {
1a390 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 7d  likelihood(X,Y)}
1a3a0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b   {} {.  ^The lik
1a3b0 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66 75 6e  elihood(X,Y) fun
1a3c0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 72  ction returns ar
1a3d0 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67  gument X unchang
1a3e0 65 64 2e 0a 20 20 5e 28 54 68 65 20 76 61 6c 75  ed..  ^(The valu
1a3f0 65 20 59 20 69 6e 20 6c 69 6b 65 6c 69 68 6f 6f  e Y in likelihoo
1a400 64 28 58 2c 59 29 20 6d 75 73 74 20 62 65 20 61  d(X,Y) must be a
1a410 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
1a420 63 6f 6e 73 74 61 6e 74 0a 20 20 62 65 74 77 65  constant.  betwe
1a430 65 6e 20 30 2e 30 20 61 6e 64 20 31 2e 30 2c 20  en 0.0 and 1.0, 
1a440 69 6e 63 6c 75 73 69 76 65 2e 29 5e 0a 20 20 5e  inclusive.)^.  ^
1a450 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58  The likelihood(X
1a460 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  ) function is a 
1a470 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63  no-op that the c
1a480 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20  ode generator.  
1a490 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73  optimizes away s
1a4a0 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d  o that it consum
1a4b0 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73  es no CPU cycles
1a4c0 20 64 75 72 69 6e 67 20 72 75 6e 2d 74 69 6d 65   during run-time
1a4d0 0a 20 20 28 74 68 61 74 20 69 73 2c 20 64 75 72  .  (that is, dur
1a4e0 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71  ing calls to [sq
1a4f0 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a  lite3_step()])..
1a500 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f    ^The purpose o
1a510 66 20 74 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64  f the likelihood
1a520 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 69  (X,Y) function i
1a530 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 68  s to provide a h
1a540 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71 75 65  int.  to the que
1a550 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61 74 20  ry planner that 
1a560 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 69  the argument X i
1a570 73 20 61 20 62 6f 6f 6c 65 61 6e 20 74 68 61 74  s a boolean that
1a580 20 69 73 0a 20 20 74 72 75 65 20 77 69 74 68 20   is.  true with 
1a590 61 20 70 72 6f 62 61 62 69 6c 69 74 79 20 6f 66  a probability of
1a5a0 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 59   approximately Y
1a5b0 2e 0a 20 20 5e 28 54 68 65 20 5b 75 6e 6c 69 6b  ..  ^(The [unlik
1a5c0 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e  ely(X)] function
1a5d0 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66   is short-hand f
1a5e0 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c  or likelihood(X,
1a5f0 30 2e 30 36 32 35 29 2e 29 5e 0a 20 20 5e 28 54  0.0625).)^.  ^(T
1a600 68 65 20 5b 6c 69 6b 65 6c 79 28 58 29 5d 20 66  he [likely(X)] f
1a610 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f 72 74  unction is short
1a620 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65 6c 69  -hand for likeli
1a630 68 6f 6f 64 28 58 2c 30 2e 39 33 37 35 29 2e 29  hood(X,0.9375).)
1a640 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69  ^.}..funcdef {li
1a650 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  kely(X)} {} {.  
1a660 5e 54 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66  ^The likely(X) f
1a670 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1a680 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 75  the argument X u
1a690 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 54 68 65  nchanged..  ^The
1a6a0 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74   likely(X) funct
1a6b0 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74  ion is a no-op t
1a6c0 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e  hat the code gen
1a6d0 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a  erator.  optimiz
1a6e0 65 73 20 61 77 61 79 20 73 6f 20 74 68 61 74 20  es away so that 
1a6f0 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43  it consumes no C
1a700 50 55 20 63 79 63 6c 65 73 20 61 74 0a 20 20 72  PU cycles at.  r
1a710 75 6e 2d 74 69 6d 65 20 28 74 68 61 74 20 69 73  un-time (that is
1a720 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c 73 20 74  , during calls t
1a730 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28  o [sqlite3_step(
1a740 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75 72 70  )])..  ^The purp
1a750 6f 73 65 20 6f 66 20 74 68 65 20 6c 69 6b 65 6c  ose of the likel
1a760 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
1a770 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69   to provide a hi
1a780 6e 74 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72  nt.  to the quer
1a790 79 20 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74  y planner that t
1a7a0 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73  he argument X is
1a7b0 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
1a7c0 0a 20 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  .  that is usual
1a7d0 6c 79 20 74 72 75 65 2e 20 5e 28 54 68 65 20 6c  ly true. ^(The l
1a7e0 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1a7f0 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a  n is equivalent.
1a800 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64    to [likelihood
1a810 5d 28 58 2c 30 2e 39 33 37 35 29 2e 29 5e 20 53  ](X,0.9375).)^ S
1a820 65 65 20 61 6c 73 6f 3a 20 5b 75 6e 6c 69 6b 65  ee also: [unlike
1a830 6c 79 28 58 29 5d 2e 0a 7d 0a 0a 66 75 6e 63 64  ly(X)]..}..funcd
1a840 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ef {load_extensi
1a850 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e  on(X) load_exten
1a860 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  sion(X,Y)} {} {.
1a870 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
1a880 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74  nsion(X,Y) funct
1a890 69 6f 6e 20 6c 6f 61 64 73 20 5b 53 51 4c 69 74  ion loads [SQLit
1a8a0 65 20 65 78 74 65 6e 73 69 6f 6e 73 5d 20 6f 75  e extensions] ou
1a8b0 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64 0a  t of the shared.
1a8c0 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e    library file n
1a8d0 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74 68 65  amed X using the
1a8e0 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e 20   entry point Y. 
1a8f0 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
1a900 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
1a910 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61 20 4e  .  is always a N
1a920 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73 20 6f  ULL.  ^If Y is o
1a930 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65 20  mitted then the 
1a940 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f  default entry po
1a950 69 6e 74 20 6e 61 6d 65 20 69 73 20 75 73 65 64  int name is used
1a960 2e 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78  ..  ^The load_ex
1a970 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69  tension() functi
1a980 6f 6e 20 72 61 69 73 65 73 20 61 6e 20 65 78 63  on raises an exc
1a990 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78  eption if the ex
1a9a0 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f  tension fails to
1a9b0 0a 20 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69  .  load or initi
1a9c0 61 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e  alize correctly.
1a9d0 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64  ..  <p>^The load
1a9e0 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e  _extension() fun
1a9f0 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20  ction will fail 
1aa00 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  if the extension
1aa10 20 61 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20   attempts to .  
1aa20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65  modify or delete
1aa30 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
1aa40 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
1aa50 71 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20  quence.  ^The.  
1aa60 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64  extension can ad
1aa70 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20  d new functions 
1aa80 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
1aa90 75 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e  uences, but cann
1aaa0 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64  ot.  modify or d
1aab0 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 66  elete existing f
1aac0 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
1aad0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
1aae0 62 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20  because.  those 
1aaf0 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72  functions and/or
1ab00 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
1ab10 6e 63 65 73 20 6d 69 67 68 74 20 62 65 20 75 73  nces might be us
1ab20 65 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69  ed elsewhere.  i
1ab30 6e 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  n the currently 
1ab40 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74  running SQL stat
1ab50 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20  ement.  To load 
1ab60 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61  an extension tha
1ab70 74 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64  t.  changes or d
1ab80 65 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73  eletes functions
1ab90 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
1aba0 71 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65  quences, use the
1abb0 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64  .  [sqlite3_load
1abc0 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d  _extension()] C-
1abd0 6c 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70  language API.</p
1abe0 3e 0a 0a 20 20 3c 70 3e 46 6f 72 20 73 65 63 75  >..  <p>For secu
1abf0 72 69 74 79 20 72 65 61 73 6f 6e 73 2c 20 65 78  rity reasons, ex
1ac00 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 65 64 20 69  tension loaded i
1ac10 73 20 74 75 72 6e 65 64 20 6f 66 66 20 62 79 20  s turned off by 
1ac20 64 65 66 61 75 6c 74 20 61 6e 64 20 6d 75 73 74  default and must
1ac30 0a 20 20 62 65 20 65 6e 61 62 6c 65 64 20 62 79  .  be enabled by
1ac40 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f   a prior call to
1ac50 20 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65   [sqlite3_enable
1ac60 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
1ac70 29 5d 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64  )].</p>.}..funcd
1ac80 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d  ef {lower(X)} {}
1ac90 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72 28   {.  ^The lower(
1aca0 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1acb0 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 73 74  rns a copy of st
1acc0 72 69 6e 67 20 58 20 77 69 74 68 20 61 6c 6c 20  ring X with all 
1acd0 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
1ace0 0a 20 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  .  converted to 
1acf0 6c 6f 77 65 72 20 63 61 73 65 2e 20 20 5e 54 68  lower case.  ^Th
1ad00 65 20 64 65 66 61 75 6c 74 20 62 75 69 6c 74 2d  e default built-
1ad10 69 6e 20 6c 6f 77 65 72 28 29 20 66 75 6e 63 74  in lower() funct
1ad20 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20  ion works.  for 
1ad30 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
1ad40 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61   only.  To do ca
1ad50 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f  se conversions o
1ad60 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68  n non-ASCII.  ch
1ad70 61 72 61 63 74 65 72 73 2c 20 6c 6f 61 64 20 74  aracters, load t
1ad80 68 65 20 49 43 55 20 65 78 74 65 6e 73 69 6f 6e  he ICU extension
1ad90 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74  ..}..funcdef {lt
1ada0 72 69 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c 59  rim(X) ltrim(X,Y
1adb0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
1adc0 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69  trim(X,Y) functi
1add0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1ade0 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65  ing formed by re
1adf0 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61  moving any and a
1ae00 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73 20  ll.  characters 
1ae10 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 59  that appear in Y
1ae20 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73   from the left s
1ae30 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20  ide of X..  ^If 
1ae40 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69  the Y argument i
1ae50 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69 6d  s omitted, ltrim
1ae60 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63  (X) removes spac
1ae70 65 73 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74  es from the left
1ae80 20 73 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a   side.  of X..}.
1ae90 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c  .funcdef {max(X,
1aea0 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72  Y,...)} {*maxCor
1aeb0 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78 28  eFunc *max {max(
1aec0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d  ) SQL function}}
1aed0 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d   {.  ^The multi-
1aee0 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66  argument max() f
1aef0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1af00 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74  the argument wit
1af10 68 20 74 68 65 20 0a 20 20 6d 61 78 69 6d 75 6d  h the .  maximum
1af20 20 76 61 6c 75 65 2c 20 6f 72 20 72 65 74 75 72   value, or retur
1af30 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61 72  n NULL if any ar
1af40 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 20  gument is NULL. 
1af50 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
1af60 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e  gument max() fun
1af70 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69  ction searches i
1af80 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  ts arguments fro
1af90 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a  m left to right.
1afa0 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e    for an argumen
1afb0 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61  t that defines a
1afc0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1afd0 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61  ion and uses tha
1afe0 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75  t collating.  fu
1aff0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
1b000 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e  tring comparison
1b010 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20  s.  ^If none of 
1b020 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  the arguments to
1b030 20 6d 61 78 28 29 0a 20 20 64 65 66 69 6e 65 20   max().  define 
1b040 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
1b050 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42  tion, then the B
1b060 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
1b070 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
1b080 2e 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61 74 20  ..  ^(Note that 
1b090 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73 20  <b>max()</b> is 
1b0a0 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
1b0b0 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20  n when.  it has 
1b0c0 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65  2 or more argume
1b0d0 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73  nts but operates
1b0e0 20 61 73 20 61 6e 0a 20 20 5b 6d 61 78 41 67 67   as an.  [maxAgg
1b0f0 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  Func | aggregate
1b100 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69   function] if gi
1b110 76 65 6e 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  ven only a singl
1b120 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d 0a  e argument.)^.}.
1b130 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 2c  .funcdef {min(X,
1b140 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e 43 6f 72  Y,...)} {*minCor
1b150 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d 69 6e 28  eFunc *min {min(
1b160 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d  ) SQL function}}
1b170 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d   {.  ^The multi-
1b180 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66  argument min() f
1b190 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1b1a0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74  the argument wit
1b1b0 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d 75 6d 20  h the.  minimum 
1b1c0 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 6d 75  value..  ^The mu
1b1d0 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e  lti-argument min
1b1e0 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72  () function sear
1b1f0 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e  ches its argumen
1b200 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ts from left to 
1b210 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20 61  right.  for an a
1b220 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66  rgument that def
1b230 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67  ines a collating
1b240 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73   function and us
1b250 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e  es that collatin
1b260 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  g.  function for
1b270 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70   all string comp
1b280 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f  arisons.  ^If no
1b290 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  ne of the argume
1b2a0 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a 20 20 64  nts to min().  d
1b2b0 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e  efine a collatin
1b2c0 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e  g function, then
1b2d0 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c   the BINARY coll
1b2e0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69  ating function i
1b2f0 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e 6f 74 65  s used..  ^(Note
1b300 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c 2f   that <b>min()</
1b310 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66  b> is a simple f
1b320 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69  unction when.  i
1b330 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20  t has 2 or more 
1b340 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70  arguments but op
1b350 65 72 61 74 65 73 20 61 73 20 61 6e 20 0a 20 20  erates as an .  
1b360 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67  [minAggFunc | ag
1b370 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1b380 5d 20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c  ] if given.  onl
1b390 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
1b3a0 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ent.)^.}..funcde
1b3b0 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20  f {nullif(X,Y)} 
1b3c0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c 6c  {} {.  ^The null
1b3d0 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  if(X,Y) function
1b3e0 20 72 65 74 75 72 6e 73 20 69 74 73 20 66 69 72   returns its fir
1b3f0 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74  st argument if t
1b400 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  he arguments are
1b410 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61 6e 64  .  different and
1b420 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61 72 67   NULL if the arg
1b430 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 73  uments are the s
1b440 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c 69  ame.  ^The nulli
1b450 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 0a  f(X,Y) function.
1b460 20 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61    searches its a
1b470 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65  rguments from le
1b480 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f 72 20  ft to right for 
1b490 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  an argument that
1b4a0 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63 6f 6c   defines a.  col
1b4b0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
1b4c0 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f  and uses that co
1b4d0 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1b4e0 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 0a   for all string.
1b4f0 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20    comparisons.  
1b500 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72 67 75  ^If neither argu
1b510 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28 29  ment to nullif()
1b520 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61   defines a colla
1b530 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20 20  ting function.  
1b540 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20  then the BINARY 
1b550 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63  is used..}..func
1b560 64 65 66 20 7b 70 72 69 6e 74 66 28 46 4f 52 4d  def {printf(FORM
1b570 41 54 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20  AT,...)} {} {.  
1b580 5e 28 54 68 65 20 70 72 69 6e 74 66 28 46 4f 52  ^(The printf(FOR
1b590 4d 41 54 2c 2e 2e 2e 29 20 53 51 4c 20 66 75 6e  MAT,...) SQL fun
1b5a0 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65  ction works like
1b5b0 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6d 70   the [sqlite3_mp
1b5c0 72 69 6e 74 66 28 29 5d 20 43 2d 6c 61 6e 67 75  rintf()] C-langu
1b5d0 61 67 65 0a 20 20 66 75 6e 63 74 69 6f 6e 20 61  age.  function a
1b5e0 6e 64 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  nd the printf() 
1b5f0 66 75 6e 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68  function from th
1b600 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
1b610 72 61 72 79 2e 29 5e 0a 20 20 54 68 65 20 66 69  rary.)^.  The fi
1b620 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 73 20  rst argument is 
1b630 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  a format string 
1b640 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 68  that specifies h
1b650 6f 77 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ow to construct 
1b660 74 68 65 20 6f 75 74 70 75 74 0a 20 20 73 74 72  the output.  str
1b670 69 6e 67 20 75 73 69 6e 67 20 76 61 6c 75 65 73  ing using values
1b680 20 74 61 6b 65 6e 20 66 72 6f 6d 20 73 75 62 73   taken from subs
1b690 65 71 75 65 6e 74 20 61 72 67 75 6d 65 6e 74 73  equent arguments
1b6a0 2e 20 20 5e 49 66 20 74 68 65 20 46 4f 52 4d 41  .  ^If the FORMA
1b6b0 54 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 20 20  T argument is.  
1b6c0 6d 69 73 73 69 6e 67 20 6f 72 20 4e 55 4c 4c 20  missing or NULL 
1b6d0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
1b6e0 69 73 20 4e 55 4c 4c 2e 20 20 5e 54 68 65 20 25  is NULL.  ^The %
1b6f0 6e 20 66 6f 72 6d 61 74 20 69 73 20 73 69 6c 65  n format is sile
1b700 6e 74 6c 79 20 69 67 6e 6f 72 65 64 20 61 6e 64  ntly ignored and
1b710 0a 20 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 73  .  does not cons
1b720 75 6d 65 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e  ume an argument.
1b730 20 20 5e 54 68 65 20 25 70 20 66 6f 72 6d 61 74    ^The %p format
1b740 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   is an alias for
1b750 20 25 58 2e 20 20 5e 54 68 65 20 25 7a 20 66 6f   %X.  ^The %z fo
1b760 72 6d 61 74 0a 20 20 69 73 20 69 6e 74 65 72 63  rmat.  is interc
1b770 68 61 6e 67 65 61 62 6c 65 20 77 69 74 68 20 25  hangeable with %
1b780 73 2e 20 20 5e 28 49 66 20 74 68 65 72 65 20 61  s.  ^(If there a
1b790 72 65 20 74 6f 6f 20 66 65 77 20 61 72 67 75 6d  re too few argum
1b7a0 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 67 75  ents in the argu
1b7b0 6d 65 6e 74 20 6c 69 73 74 2c 0a 20 20 6d 69 73  ment list,.  mis
1b7c0 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 61  sing arguments a
1b7d0 72 65 20 61 73 73 75 6d 65 64 20 74 6f 20 68 61  re assumed to ha
1b7e0 76 65 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2c  ve a NULL value,
1b7f0 20 77 68 69 63 68 20 69 73 20 74 72 61 6e 73 6c   which is transl
1b800 61 74 65 64 20 69 6e 74 6f 0a 20 20 30 20 6f 72  ated into.  0 or
1b810 20 30 2e 30 20 66 6f 72 20 6e 75 6d 65 72 69 63   0.0 for numeric
1b820 20 66 6f 72 6d 61 74 73 20 6f 72 20 61 6e 20 65   formats or an e
1b830 6d 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20  mpty string for 
1b840 25 73 2e 29 5e 0a 7d 0a 20 20 0a 0a 66 75 6e 63  %s.)^.}.  ..func
1b850 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b  def {quote(X)} {
1b860 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74 65  } {.  ^The quote
1b870 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1b880 75 72 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  urns the text of
1b890 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
1b8a0 77 68 69 63 68 0a 20 20 69 73 20 74 68 65 20 76  which.  is the v
1b8b0 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72 67 75  alue of its argu
1b8c0 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f  ment suitable fo
1b8d0 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f  r inclusion into
1b8e0 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
1b8f0 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 61 72  t..  ^Strings ar
1b900 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20  e surrounded by 
1b910 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69  single-quotes wi
1b920 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e  th escapes on in
1b930 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20 20  terior quotes.  
1b940 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c 4f  as needed.  ^BLO
1b950 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61  Bs are encoded a
1b960 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c 69  s hexadecimal li
1b970 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72 69 6e  terals..  ^Strin
1b980 67 73 20 77 69 74 68 20 65 6d 62 65 64 64 65 64  gs with embedded
1b990 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 20   NUL characters 
1b9a0 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72 65 73  cannot be repres
1b9b0 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e 67 0a  ented as string.
1b9c0 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20 53 51    literals in SQ
1b9d0 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20  L and hence the 
1b9e0 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e 67 20  returned string 
1b9f0 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75 6e 63  literal is trunc
1ba00 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74 6f 20  ated prior.  to 
1ba10 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e 0a 7d  the first NUL..}
1ba20 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f  ..funcdef {rando
1ba30 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  m()} {} {.  ^The
1ba40 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69   random() functi
1ba50 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70 73 65  on returns a pse
1ba60 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67  udo-random integ
1ba70 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39 32  er.  between -92
1ba80 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
1ba90 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30 33  8 and +922337203
1baa0 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66  6854775807..}..f
1bab0 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c  uncdef {randombl
1bac0 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ob(N)} {} {.  ^T
1bad0 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29  he randomblob(N)
1bae0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1baf0 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62 20   an N-byte blob 
1bb00 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65 75 64  containing pseud
1bb10 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65 73  o-random.  bytes
1bb20 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73 73 20  . ^If N is less 
1bb30 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20 31 2d  than 1 then a 1-
1bb40 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f 62  byte random blob
1bb50 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 20   is returned... 
1bb60 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69   <p>Hint:  appli
1bb70 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65  cations can gene
1bb80 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e  rate globally un
1bb90 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 73  ique identifiers
1bba0 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20 66 75  .  using this fu
1bbb0 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20  nction together 
1bbc0 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64  with [hex()] and
1bbd0 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20  /or.  [lower()] 
1bbe0 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a  like this:</p>..
1bbf0 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20    <blockquote>. 
1bc00 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28   hex(randomblob(
1bc10 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20  16))<br></br>.  
1bc20 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d  lower(hex(random
1bc30 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62  blob(16))).  </b
1bc40 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75  lockquote>.}..fu
1bc50 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58  ncdef {replace(X
1bc60 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ,Y,Z)} {} {.  ^T
1bc70 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a  he replace(X,Y,Z
1bc80 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1bc90 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
1bca0 65 64 20 62 79 20 73 75 62 73 74 69 74 75 74 69  ed by substituti
1bcb0 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20 66 6f  ng.  string Z fo
1bcc0 72 20 65 76 65 72 79 20 6f 63 63 75 72 72 65 6e  r every occurren
1bcd0 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20 69  ce of string Y i
1bce0 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e 54 68  n string X.  ^Th
1bcf0 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f 6c  e [BINARY].  col
1bd00 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
1bd10 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d 70  is used for comp
1bd20 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59 20  arisons.  ^If Y 
1bd30 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20 73 74  is an empty.  st
1bd40 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75 72 6e  ring then return
1bd50 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20 20 5e   X unchanged.  ^
1bd60 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69 74  If Z is not init
1bd70 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e 67  ially.  a string
1bd80 2c 20 69 74 20 69 73 20 63 61 73 74 20 74 6f 20  , it is cast to 
1bd90 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70  a UTF-8 string p
1bda0 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73 73 69  rior to processi
1bdb0 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ng..}..funcdef {
1bdc0 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64 28 58  round(X) round(X
1bdd0 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1bde0 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e 63   round(X,Y) func
1bdf0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 66  tion returns a f
1be00 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20 20  loating-point.  
1be10 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65 64 20  value X rounded 
1be20 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f 20 74  to Y digits to t
1be30 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20  he right of the 
1be40 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a 20  decimal point.. 
1be50 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
1be60 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
1be70 69 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  it is assumed to
1be80 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64 65   be 0..}..funcde
1be90 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74 72 69  f {rtrim(X) rtri
1bea0 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  m(X,Y)} {} {.  ^
1beb0 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29 20 66  The rtrim(X,Y) f
1bec0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1bed0 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20  a string formed 
1bee0 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20  by removing any 
1bef0 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63  and all.  charac
1bf00 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72  ters that appear
1bf10 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 72   in Y from the r
1bf20 69 67 68 74 20 73 69 64 65 20 6f 66 20 58 2e 0a  ight side of X..
1bf30 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
1bf40 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
1bf50 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65   rtrim(X) remove
1bf60 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74 68  s spaces from th
1bf70 65 20 72 69 67 68 74 0a 20 20 73 69 64 65 20 6f  e right.  side o
1bf80 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
1bf90 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b 7d 20  {soundex(X)} {} 
1bfa0 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64 65 78  {.  ^The soundex
1bfb0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1bfc0 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68  urns a string th
1bfd0 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e 64 65  at is the sounde
1bfe0 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20 6f 66  x encoding .  of
1bff0 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20   the string X.. 
1c000 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22 3f 30   ^The string "?0
1c010 30 30 22 20 69 73 20 72 65 74 75 72 6e 65 64 20  00" is returned 
1c020 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
1c030 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74 61  is NULL or conta
1c040 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49 20 61  ins.  no ASCII a
1c050 6c 70 68 61 62 65 74 69 63 20 63 68 61 72 61 63  lphabetic charac
1c060 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73 20 66  ters..  ^(This f
1c070 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74  unction is omitt
1c080 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 62  ed from SQLite b
1c090 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49 74 20  y default..  It 
1c0a0 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  is only availabl
1c0b0 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49 54 45  e if the [SQLITE
1c0c0 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70 69 6c  _SOUNDEX] compil
1c0d0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20  e-time option.  
1c0e0 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51 4c  is used when SQL
1c0f0 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29 5e 0a  ite is built.)^.
1c100 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
1c110 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
1c120 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20  _get(N)} {} {.  
1c130 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70  ^The sqlite_comp
1c140 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29 20  ileoption_get() 
1c150 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
1c160 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
1c170 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
1c180 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
1c190 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74  t()] C/C++ funct
1c1a0 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72 6f 75  ion..  ^This rou
1c1b0 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65  tine returns the
1c1c0 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74 69   N-th compile-ti
1c1d0 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74  me option used t
1c1e0 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 0a 20  o build SQLite. 
1c1f0 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20 69 73   or NULL if N is
1c200 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 20 20   out of range.  
1c210 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b 63 6f  See also the [co
1c220 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72  mpile_options pr
1c230 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65  agma]..}..funcde
1c240 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  f {sqlite_compil
1c250 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 7d  eoption_used(X)}
1c260 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c   {} {.  ^The sql
1c270 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
1c280 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66 75 6e  n_used() SQL fun
1c290 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
1c2a0 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20  er around the.  
1c2b0 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  [sqlite3_compile
1c2c0 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d 20 43  option_used()] C
1c2d0 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  /C++ function.. 
1c2e0 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67 75 6d   ^When the argum
1c2f0 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74 65 5f  ent X to sqlite_
1c300 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
1c310 65 64 28 58 29 20 69 73 20 61 20 73 74 72 69 6e  ed(X) is a strin
1c320 67 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65  g which.  is the
1c330 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d 70 69   name of a compi
1c340 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20  le-time option, 
1c350 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  this routine ret
1c360 75 72 6e 73 20 74 72 75 65 20 28 31 29 20 6f 72  urns true (1) or
1c370 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64 65 70  .  false (0) dep
1c380 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
1c390 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 6f 70  r or not that op
1c3a0 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20 64 75  tion was used du
1c3b0 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69 6c 64  ring the.  build
1c3c0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
1c3d0 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29  lite_source_id()
1c3e0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
1c3f0 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29  lite_source_id()
1c400 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1c410 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
1c420 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 0a 20  identifies the. 
1c430 20 73 70 65 63 69 66 69 63 20 76 65 72 73 69 6f   specific versio
1c440 6e 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20  n of the source 
1c450 63 6f 64 65 20 74 68 61 74 20 77 61 73 20 75 73  code that was us
1c460 65 64 20 74 6f 20 62 75 69 6c 64 20 74 68 65 20  ed to build the 
1c470 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61 72 79  SQLite.  library
1c480 2e 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 72  .  ^The string r
1c490 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
1c4a0 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 69 73  e_source_id() is
1c4b0 0a 20 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  .  the date and 
1c4c0 74 69 6d 65 20 74 68 61 74 20 74 68 65 20 73 6f  time that the so
1c4d0 75 72 63 65 20 63 6f 64 65 20 77 61 73 20 63 68  urce code was ch
1c4e0 65 63 6b 65 64 20 69 6e 20 66 6f 6c 6c 6f 77 65  ecked in followe
1c4f0 64 20 62 79 0a 20 20 74 68 65 20 53 48 41 31 20  d by.  the SHA1 
1c500 68 61 73 68 20 66 6f 72 20 74 68 61 74 20 63 68  hash for that ch
1c510 65 63 6b 2d 69 6e 2e 20 20 5e 54 68 69 73 20 66  eck-in.  ^This f
1c520 75 6e 63 74 69 6f 6e 20 69 73 0a 20 20 61 6e 20  unction is.  an 
1c530 53 51 4c 20 77 72 61 70 70 65 72 20 61 72 6f 75  SQL wrapper arou
1c540 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nd the [sqlite3_
1c550 73 6f 75 72 63 65 69 64 28 29 5d 20 43 20 69 6e  sourceid()] C in
1c560 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63  terface..}..func
1c570 64 65 66 20 7b 73 71 6c 69 74 65 5f 76 65 72 73  def {sqlite_vers
1c580 69 6f 6e 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ion()} {} {.  ^T
1c590 68 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f  he sqlite_versio
1c5a0 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  n() function ret
1c5b0 75 72 6e 73 20 74 68 65 20 76 65 72 73 69 6f 6e  urns the version
1c5c0 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
1c5d0 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61 72 79  SQLite.  library
1c5e0 20 74 68 61 74 20 69 73 20 72 75 6e 6e 69 6e 67   that is running
1c5f0 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f  .  ^This functio
1c600 6e 20 69 73 20 61 6e 20 53 51 4c 0a 20 20 77 72  n is an SQL.  wr
1c610 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
1c620 20 5b 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72   [sqlite3_libver
1c630 73 69 6f 6e 28 29 5d 20 43 2d 69 6e 74 65 72 66  sion()] C-interf
1c640 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ace..}..funcdef 
1c650 7b 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 73  {substr(X,Y,Z) s
1c660 75 62 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b  ubstr(X,Y)} {} {
1c670 0a 20 20 5e 54 68 65 20 73 75 62 73 74 72 28 58  .  ^The substr(X
1c680 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72  ,Y,Z) function r
1c690 65 74 75 72 6e 73 20 61 20 73 75 62 73 74 72 69  eturns a substri
1c6a0 6e 67 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69  ng of input stri
1c6b0 6e 67 20 58 20 74 68 61 74 20 62 65 67 69 6e 73  ng X that begins
1c6c0 0a 20 20 77 69 74 68 20 74 68 65 20 59 2d 74 68  .  with the Y-th
1c6d0 20 63 68 61 72 61 63 74 65 72 20 61 6e 64 20 77   character and w
1c6e0 68 69 63 68 20 69 73 20 5a 20 63 68 61 72 61 63  hich is Z charac
1c6f0 74 65 72 73 20 6c 6f 6e 67 2e 0a 20 20 5e 49 66  ters long..  ^If
1c700 20 5a 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68   Z is omitted th
1c710 65 6e 20 73 75 62 73 74 72 28 58 2c 59 29 20 72  en substr(X,Y) r
1c720 65 74 75 72 6e 73 20 61 6c 6c 20 63 68 61 72 61  eturns all chara
1c730 63 74 65 72 73 20 74 68 72 6f 75 67 68 20 74 68  cters through th
1c740 65 20 65 6e 64 0a 20 20 6f 66 20 74 68 65 20 73  e end.  of the s
1c750 74 72 69 6e 67 20 58 20 62 65 67 69 6e 6e 69 6e  tring X beginnin
1c760 67 20 77 69 74 68 20 74 68 65 20 59 2d 74 68 2e  g with the Y-th.
1c770 0a 20 20 5e 54 68 65 20 6c 65 66 74 2d 6d 6f 73  .  ^The left-mos
1c780 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 58  t character of X
1c790 20 69 73 20 6e 75 6d 62 65 72 20 31 2e 20 20 5e   is number 1.  ^
1c7a0 49 66 20 59 20 69 73 20 6e 65 67 61 74 69 76 65  If Y is negative
1c7b0 0a 20 20 74 68 65 6e 20 74 68 65 20 66 69 72 73  .  then the firs
1c7c0 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  t character of t
1c7d0 68 65 20 73 75 62 73 74 72 69 6e 67 20 69 73 20  he substring is 
1c7e0 66 6f 75 6e 64 20 62 79 20 63 6f 75 6e 74 69 6e  found by countin
1c7f0 67 20 66 72 6f 6d 20 74 68 65 0a 20 20 72 69 67  g from the.  rig
1c800 68 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 74  ht rather than t
1c810 68 65 20 6c 65 66 74 2e 20 20 5e 49 66 20 5a 20  he left.  ^If Z 
1c820 69 73 20 6e 65 67 61 74 69 76 65 20 74 68 65 6e  is negative then
1c830 0a 20 20 74 68 65 20 61 62 73 28 5a 29 20 63 68  .  the abs(Z) ch
1c840 61 72 61 63 74 65 72 73 20 70 72 65 63 65 64 69  aracters precedi
1c850 6e 67 20 74 68 65 20 59 2d 74 68 20 63 68 61 72  ng the Y-th char
1c860 61 63 74 65 72 20 61 72 65 20 72 65 74 75 72 6e  acter are return
1c870 65 64 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 61  ed..  ^If X is a
1c880 20 73 74 72 69 6e 67 20 74 68 65 6e 20 63 68 61   string then cha
1c890 72 61 63 74 65 72 73 20 69 6e 64 69 63 65 73 20  racters indices 
1c8a0 72 65 66 65 72 20 74 6f 20 61 63 74 75 61 6c 20  refer to actual 
1c8b0 55 54 46 2d 38 20 0a 20 20 63 68 61 72 61 63 74  UTF-8 .  charact
1c8c0 65 72 73 2e 20 20 5e 49 66 20 58 20 69 73 20 61  ers.  ^If X is a
1c8d0 20 42 4c 4f 42 20 74 68 65 6e 20 74 68 65 20 69   BLOB then the i
1c8e0 6e 64 69 63 65 73 20 72 65 66 65 72 20 74 6f 20  ndices refer to 
1c8f0 62 79 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65  bytes..}..funcde
1c900 66 20 7b 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  f {total_changes
1c910 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  ()} {} {.  ^The 
1c920 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
1c930 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1c940 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
1c950 6f 77 20 63 68 61 6e 67 65 73 0a 20 20 63 61 75  ow changes.  cau
1c960 73 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 55  sed by INSERT, U
1c970 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
1c980 20 20 73 74 61 74 65 6d 65 6e 74 73 20 73 69 6e    statements sin
1c990 63 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  ce the current d
1c9a0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
1c9b0 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64 2e 0a 20  on was opened.. 
1c9c0 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20   ^This function 
1c9d0 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f  is a wrapper aro
1c9e0 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33  und the [sqlite3
1c9f0 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
1ca00 5d 0a 20 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ].  C/C++ interf
1ca10 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ace..}..funcdef 
1ca20 7b 74 72 69 6d 28 58 29 20 74 72 69 6d 28 58 2c  {trim(X) trim(X,
1ca30 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1ca40 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69  trim(X,Y) functi
1ca50 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1ca60 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65  ing formed by re
1ca70 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61  moving any and a
1ca80 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73 20  ll.  characters 
1ca90 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 59  that appear in Y
1caa0 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20   from both ends 
1cab0 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20  of X..  ^If the 
1cac0 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  Y argument is om
1cad0 69 74 74 65 64 2c 20 74 72 69 6d 28 58 29 20 72  itted, trim(X) r
1cae0 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72  emoves spaces fr
1caf0 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20  om both ends of 
1cb00 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74  X..}..funcdef {t
1cb10 79 70 65 6f 66 28 58 29 7d 20 7b 7d 20 7b 0a 20  ypeof(X)} {} {. 
1cb20 20 5e 54 68 65 20 74 79 70 65 6f 66 28 58 29 20   ^The typeof(X) 
1cb30 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1cb40 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
1cb50 6e 64 69 63 61 74 65 73 20 74 68 65 20 5b 64 61  ndicates the [da
1cb60 74 61 74 79 70 65 5d 20 6f 66 0a 20 20 74 68 65  tatype] of.  the
1cb70 20 65 78 70 72 65 73 73 69 6f 6e 20 58 3a 20 22   expression X: "
1cb80 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67 65 72 22  null", "integer"
1cb90 2c 20 22 72 65 61 6c 22 2c 20 22 74 65 78 74 22  , "real", "text"
1cba0 2c 20 6f 72 20 22 62 6c 6f 62 22 2e 0a 7d 0a 0a  , or "blob"..}..
1cbb0 66 75 6e 63 64 65 66 20 7b 75 6e 6c 69 6b 65 6c  funcdef {unlikel
1cbc0 79 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  y(X)} {} {.  ^Th
1cbd0 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75  e unlikely(X) fu
1cbe0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1cbf0 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 75 6e  he argument X un
1cc00 63 68 61 6e 67 65 64 2e 0a 20 20 5e 54 68 65 20  changed..  ^The 
1cc10 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63  unlikely(X) func
1cc20 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20  tion is a no-op 
1cc30 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
1cc40 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69  nerator.  optimi
1cc50 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68 61 74  zes away so that
1cc60 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20   it consumes no 
1cc70 43 50 55 20 63 79 63 6c 65 73 20 61 74 0a 20 20  CPU cycles at.  
1cc80 72 75 6e 2d 74 69 6d 65 20 28 74 68 61 74 20 69  run-time (that i
1cc90 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c 73 20  s, during calls 
1cca0 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70  to [sqlite3_step
1ccb0 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75 72  ()])..  ^The pur
1ccc0 70 6f 73 65 20 6f 66 20 74 68 65 20 75 6e 6c 69  pose of the unli
1ccd0 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
1cce0 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61   is to provide a
1ccf0 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71   hint.  to the q
1cd00 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61  uery planner tha
1cd10 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58  t the argument X
1cd20 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   is a boolean va
1cd30 6c 75 65 0a 20 20 74 68 61 74 20 69 73 20 75 73  lue.  that is us
1cd40 75 61 6c 6c 79 20 6e 6f 74 20 74 72 75 65 2e 20  ually not true. 
1cd50 5e 28 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58  ^(The unlikely(X
1cd60 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71  ) function is eq
1cd70 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c  uivalent.  to [l
1cd80 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 20 30 2e  ikelihood](X, 0.
1cd90 30 36 32 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  0625).)^.}..func
1cda0 64 65 66 20 7b 75 6e 69 63 6f 64 65 28 58 29 7d  def {unicode(X)}
1cdb0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 69   {} {.  ^The uni
1cdc0 63 6f 64 65 28 58 29 20 66 75 6e 63 74 69 6f 6e  code(X) function
1cdd0 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
1cde0 65 72 69 63 20 75 6e 69 63 6f 64 65 20 63 6f 64  eric unicode cod
1cdf0 65 20 70 6f 69 6e 74 20 63 6f 72 72 65 73 70 6f  e point correspo
1ce00 6e 64 69 6e 67 20 74 6f 0a 20 20 74 68 65 20 66  nding to.  the f
1ce10 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
1ce20 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 20  f the string X. 
1ce30 20 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   If the argument
1ce40 20 74 6f 20 75 6e 69 63 6f 64 65 28 58 29 20 69   to unicode(X) i
1ce50 73 20 6e 6f 74 20 61 20 73 74 72 69 6e 67 0a 20  s not a string. 
1ce60 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
1ce70 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 7d   is undefined..}
1ce80 0a 0a 66 75 6e 63 64 65 66 20 7b 75 70 70 65 72  ..funcdef {upper
1ce90 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
1cea0 20 75 70 70 65 72 28 58 29 20 66 75 6e 63 74 69   upper(X) functi
1ceb0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
1cec0 79 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e  y of input strin
1ced0 67 20 58 20 69 6e 20 77 68 69 63 68 20 61 6c 6c  g X in which all
1cee0 20 0a 20 20 6c 6f 77 65 72 2d 63 61 73 65 20 41   .  lower-case A
1cef0 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20  SCII characters 
1cf00 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  are converted to
1cf10 20 74 68 65 69 72 20 75 70 70 65 72 2d 63 61 73   their upper-cas
1cf20 65 20 65 71 75 69 76 61 6c 65 6e 74 2e 0a 7d 0a  e equivalent..}.
1cf30 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72 6f 62 6c  .funcdef {zerobl
1cf40 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ob(N)} {} {.  ^T
1cf50 68 65 20 7a 65 72 6f 62 6c 6f 62 28 4e 29 20 66  he zeroblob(N) f
1cf60 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1cf70 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74 69 6e  a BLOB consistin
1cf80 67 20 6f 66 20 4e 20 62 79 74 65 73 20 6f 66 20  g of N bytes of 
1cf90 30 78 30 30 2e 0a 20 20 53 51 4c 69 74 65 20 6d  0x00..  SQLite m
1cfa0 61 6e 61 67 65 73 20 74 68 65 73 65 20 7a 65 72  anages these zer
1cfb0 6f 62 6c 6f 62 73 20 76 65 72 79 20 65 66 66 69  oblobs very effi
1cfc0 63 69 65 6e 74 6c 79 2e 20 20 5a 65 72 6f 62 6c  ciently.  Zerobl
1cfd0 6f 62 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  obs can be used 
1cfe0 74 6f 0a 20 20 72 65 73 65 72 76 65 20 73 70 61  to.  reserve spa
1cff0 63 65 20 66 6f 72 20 61 20 42 4c 4f 42 20 74 68  ce for a BLOB th
1d000 61 74 20 69 73 20 6c 61 74 65 72 20 77 72 69 74  at is later writ
1d010 74 65 6e 20 75 73 69 6e 67 20 0a 20 20 5b 73 71  ten using .  [sq
1d020 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f 70 65 6e 28  lite3_blob_open(
1d030 29 20 7c 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ) | incremental 
1d040 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20 20 5e 54 68  BLOB I/O]..  ^Th
1d050 69 73 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  is SQL function 
1d060 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 75  is implemented u
1d070 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65  sing the [sqlite
1d080 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f  3_result_zeroblo
1d090 62 28 29 5d 0a 20 20 72 6f 75 74 69 6e 65 20 66  b()].  routine f
1d0a0 72 6f 6d 20 74 68 65 20 43 2f 43 2b 2b 20 69 6e  rom the C/C++ in
1d0b0 74 65 72 66 61 63 65 2e 0a 7d 0a 3c 2f 74 63 6c  terface..}.</tcl
1d0c0 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c  >.</table>..<tcl
1d0d0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
1d0e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d0f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d110 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d120 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74 65 20 41  .Section {Date A
1d130 6e 64 20 54 69 6d 65 20 46 75 6e 63 74 69 6f 6e  nd Time Function
1d140 73 7d 20 64 61 74 65 66 75 6e 63 20 7b 2a 64 61  s} datefunc {*da
1d150 74 65 66 75 6e 63 20 7b 64 61 74 65 20 61 6e 64  tefunc {date and
1d160 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 7d   time functions}
1d170 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64  }.hd_keywords {d
1d180 61 74 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ate() SQL functi
1d190 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c 20  on} {time() SQL 
1d1a0 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79  function}.hd_key
1d1b0 77 6f 72 64 73 20 7b 64 61 74 65 74 69 6d 65 28  words {datetime(
1d1c0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20  ) SQL function} 
1d1d0 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20 53 51 4c  {julianday() SQL
1d1e0 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65   function}.hd_ke
1d1f0 79 77 6f 72 64 73 20 7b 73 74 72 66 74 69 6d 65  ywords {strftime
1d200 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1d210 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c  .</tcl>..<p>.SQL
1d220 69 74 65 20 73 75 70 70 6f 72 74 73 20 66 69 76  ite supports fiv
1d230 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1d240 66 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c  functions as fol
1d250 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  lows:.</p>..<p>.
1d260 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64  <ol>.<li> ^(<b>d
1d270 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  ate(</b><i>times
1d280 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
1d290 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
1d2a0 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
1d2b0 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d  i>.<li> ^(<b>tim
1d2c0 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72  e(</b><i>timestr
1d2d0 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
1d2e0 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
1d2f0 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
1d300 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74  .<li> ^(<b>datet
1d310 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  ime(</b><i>times
1d320 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
1d330 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
1d340 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
1d350 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c  i>.<li> ^(<b>jul
1d360 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69  ianday(</b><i>ti
1d370 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
1d380 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
1d390 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20  .</i><b>)</b>)^ 
1d3a0 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  </li>.<li> ^(<b>
1d3b0 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e  strftime(</b><i>
1d3c0 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74 72 69  format, timestri
1d3d0 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1d3e0 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1d3f0 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1d400 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20  </ol>..<p>.^All 
1d410 66 69 76 65 20 64 61 74 65 20 61 6e 64 20 74 69  five date and ti
1d420 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b  me functions tak
1d430 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e 67 20  e a time string 
1d440 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20  as an argument. 
1d450 0a 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e  .^The time strin
1d460 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  g is followed by
1d470 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f   zero or more mo
1d480 64 69 66 69 65 72 73 2e 20 0a 5e 54 68 65 20 73  difiers. .^The s
1d490 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69  trftime() functi
1d4a0 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61 20  on also takes a 
1d4b0 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61 73  format string as
1d4c0 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d   its first argum
1d4d0 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54  ent..</p>..<p>.T
1d4e0 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
1d4f0 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61   functions use a
1d500 20 73 75 62 73 65 74 20 6f 66 0a 5b 68 74 74 70   subset of.[http
1d510 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
1d520 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30  org/wiki/ISO_860
1d530 31 20 7c 20 49 53 30 2d 38 36 30 31 5d 20 64 61  1 | IS0-8601] da
1d540 74 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d  te and time.form
1d550 61 74 73 2e 0a 5e 54 68 65 20 64 61 74 65 28 29  ats..^The date()
1d560 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1d570 73 20 74 68 65 20 64 61 74 65 20 69 6e 20 74 68  s the date in th
1d580 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d  is format: YYYY-
1d590 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d  MM-DD. .^The tim
1d5a0 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  e() function ret
1d5b0 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61 73  urns the time as
1d5c0 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65   HH:MM:SS. .^The
1d5d0 20 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63   datetime() func
1d5e0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59  tion returns "YY
1d5f0 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53  YY-MM-DD HH:MM:S
1d600 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61  S". .^(The julia
1d610 6e 64 61 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  nday() function 
1d620 72 65 74 75 72 6e 73 20 74 68 65 20 0a 5b 68 74  returns the .[ht
1d630 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1d640 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61  a.org/wiki/Julia
1d650 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64  n_day | Julian d
1d660 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72  ay] - the.number
1d670 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 6e   of days since n
1d680 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63 68  oon in Greenwich
1d690 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c   on November 24,
1d6a0 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74   4714 B.C. .([ht
1d6b0 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1d6c0 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65  a.org/wiki/Prole
1d6d0 70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63  ptic_Gregorian_c
1d6e0 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70  alendar | Prolep
1d6f0 74 69 63 20 47 72 65 67 6f 72 69 61 6e 20 63 61  tic Gregorian ca
1d700 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65  lendar]).)^.^The
1d710 20 73 74 72 66 74 69 6d 65 28 29 20 72 6f 75 74   strftime() rout
1d720 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ine returns the 
1d730 64 61 74 65 20 66 6f 72 6d 61 74 74 65 64 20 61  date formatted a
1d740 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68 65  ccording to .the
1d750 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73   format string s
1d760 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
1d770 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
1d780 5e 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69  ^The format stri
1d790 6e 67 20 73 75 70 70 6f 72 74 73 20 74 68 65 20  ng supports the 
1d7a0 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73  most common subs
1d7b0 74 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20  titutions found 
1d7c0 69 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f  in the .[http://
1d7d0 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e  opengroup.org/on
1d7e0 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38 37  linepubs/0079087
1d7f0 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65 2e  99/xsh/strftime.
1d800 68 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65 28  html | strftime(
1d810 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d  ) function].from
1d820 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
1d830 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74 77 6f  library plus two
1d840 20 6e 65 77 20 73 75 62 73 74 69 74 75 74 69 6f   new substitutio
1d850 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e  ns, %f and %J..^
1d860 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69  (The following i
1d870 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73  s a complete lis
1d880 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72 66 74  t of valid strft
1d890 69 6d 65 28 29 20 73 75 62 73 74 69 74 75 74 69  ime() substituti
1d8a0 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ons:.</p>..<bloc
1d8b0 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62  kquote>.<table b
1d8c0 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61  order="0" cellpa
1d8d0 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70  dding="0" cellsp
1d8e0 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c  acing="0">.<tr><
1d8f0 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 31 30  td><td width="10
1d900 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  "><td></tr>..<tr
1d910 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64  ><td> %d <td><td
1d920 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20  > day of month: 
1d930 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c  00.<tr><td> %f <
1d940 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e  td><td> fraction
1d950 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53  al seconds: SS.S
1d960 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c  SS.<tr><td> %H <
1d970 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30  td><td> hour: 00
1d980 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a  -24 .<tr><td> %j
1d990 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66   <td><td> day of
1d9a0 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c   year: 001-366.<
1d9b0 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c  tr><td> %J <td><
1d9c0 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e  td> Julian day n
1d9d0 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25  umber.<tr><td> %
1d9e0 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68  m <td><td> month
1d9f0 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e  : 01-12.<tr><td>
1da00 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e   %M <td><td> min
1da10 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c  ute: 00-59.<tr><
1da20 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20  td> %s <td><td> 
1da30 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39  seconds since 19
1da40 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64  70-01-01.<tr><td
1da50 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65  > %S <td><td> se
1da60 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72  conds: 00-59.<tr
1da70 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64  ><td> %w <td><td
1da80 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20 30 2d  > day of week 0-
1da90 36 20 77 69 74 68 20 53 75 6e 64 61 79 3d 3d 30  6 with Sunday==0
1daa0 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64  .<tr><td> %W <td
1dab0 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20 79 65  ><td> week of ye
1dac0 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74  ar: 00-53.<tr><t
1dad0 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79  d> %Y <td><td> y
1dae0 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c  ear: 0000-9999.<
1daf0 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c  tr><td> %% <td><
1db00 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  td> %.</table>.<
1db10 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1db20 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61  <p>.^(Notice tha
1db30 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74 65  t all other date
1db40 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
1db50 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72 65  ons can be expre
1db60 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66  ssed.in terms of
1db70 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70   strftime():.</p
1db80 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1db90 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30  <table border="0
1dba0 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30  " cellpadding="0
1dbb0 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30  " cellspacing="0
1dbc0 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75  ">.<tr><td><b>Fu
1dbd0 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69  nction</b><td wi
1dbe0 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e  dth="30"><td><b>
1dbf0 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66 74  Equivalent strft
1dc00 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74  ime()</b>.<tr><t
1dc10 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20 20  d>   date(...)  
1dc20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74      <td><td>  st
1dc30 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64  rftime('%Y-%m-%d
1dc40 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e  ', ...).<tr><td>
1dc50 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20     time(...)    
1dc60 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66    <td><td>  strf
1dc70 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c  time('%H:%M:%S',
1dc80 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20   ...).<tr><td>  
1dc90 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20   datetime(...)  
1dca0 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
1dcb0 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a  me('%Y-%m-%d %H:
1dcc0 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72  %M:%S', ...).<tr
1dcd0 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61  ><td>   julianda
1dce0 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20  y(...) <td><td> 
1dcf0 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c 20   strftime('%J', 
1dd00 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  ...).</table>.</
1dd10 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
1dd20 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73  p>.The only reas
1dd30 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69 6e  ons for providin
1dd40 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65  g functions othe
1dd50 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65 28  r than strftime(
1dd60 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69  ) is.for conveni
1dd70 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66 66  ence and for eff
1dd80 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c  iciency..</p>..<
1dd90 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73 3c  h3>Time Strings<
1dda0 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d  /h3>..<p>^(A tim
1ddb0 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20  e string can be 
1ddc0 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  in any of the fo
1ddd0 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a  llowing formats:
1dde0 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  </p>..<ol>.<li> 
1ddf0 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
1de00 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
1de10 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  M-DD HH:MM</i>.<
1de20 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1de30 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c  D HH:MM:SS</i>.<
1de40 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1de50 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f  D HH:MM:SS.SSS</
1de60 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  i>.<li> <i>YYYY-
1de70 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62  MM-DD</i><b>T</b
1de80 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c  ><i>HH:MM</i>.<l
1de90 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1dea0 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48  </i><b>T</b><i>H
1deb0 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  H:MM:SS</i>.<li>
1dec0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
1ded0 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a  i><b>T</b><i>HH:
1dee0 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c  MM:SS.SSS</i>.<l
1def0 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a  i> <i>HH:MM</i>.
1df00 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53  <li> <i>HH:MM:SS
1df10 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a  </i>.<li> <i>HH:
1df20 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c  MM:SS.SSS</i>.<l
1df30 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c  i> <b>now</b>.<l
1df40 69 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44  i> <i>DDDDDDDDDD
1df50 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70  </i>.</ol>)^..<p
1df60 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35 20  >.^In formats 5 
1df70 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65 20 22  through 7, the "
1df80 54 22 20 69 73 20 61 20 6c 69 74 65 72 61 6c 20  T" is a literal 
1df90 63 68 61 72 61 63 74 65 72 20 73 65 70 61 72 61  character separa
1dfa0 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65 20 61  ting .the date a
1dfb0 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61 73 20  nd the time, as 
1dfc0 72 65 71 75 69 72 65 64 20 62 79 20 0a 5b 68 74  required by .[ht
1dfd0 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67  tp://www.w3c.org
1dfe0 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d  /TR/NOTE-datetim
1dff0 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a  e | ISO-8601]. .
1e000 5e 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f 75  ^Formats 8 throu
1e010 67 68 20 31 30 20 74 68 61 74 20 73 70 65 63 69  gh 10 that speci
1e020 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61  fy only a time a
1e030 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66 20  ssume a date of 
1e040 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72  .2000-01-01. For
1e050 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74 72 69  mat 11, the stri
1e060 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e  ng 'now', is con
1e070 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  verted into the 
1e080 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e  .current date an
1e090 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69 6e  d time as obtain
1e0a0 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75 72  ed from the xCur
1e0b0 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a  rentTime method.
1e0c0 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  of the [sqlite3_
1e0d0 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75  vfs] object in u
1e0e0 73 65 2e 0a 5e 54 68 65 20 27 6e 6f 77 27 20 61  se..^The 'now' a
1e0f0 72 67 75 6d 65 6e 74 20 74 6f 20 64 61 74 65 20  rgument to date 
1e100 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1e110 6e 73 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  ns always return
1e120 73 20 65 78 61 63 74 6c 79 20 74 68 65 0a 73 61  s exactly the.sa
1e130 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 6d 75 6c  me value for mul
1e140 74 69 70 6c 65 20 69 6e 76 6f 63 61 74 69 6f 6e  tiple invocation
1e150 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
1e160 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28  e [sqlite3_step(
1e170 29 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74 74 70 3a  )] call..^[http:
1e180 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1e190 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61  rg/wiki/Coordina
1e1a0 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69  ted_Universal_Ti
1e1b0 6d 65 20 7c 20 55 6e 69 76 65 72 73 61 6c 20 43  me | Universal C
1e1c0 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20  oordinated Time 
1e1d0 28 55 54 43 29 5d 20 69 73 20 75 73 65 64 2e 20  (UTC)] is used. 
1e1e0 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69 73 20 74  .^Format 12 is t
1e1f0 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  he .[http://en.w
1e200 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
1e210 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a  i/Julian_day | J
1e220 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
1e230 5d 0a 65 78 70 72 65 73 73 65 64 20 61 73 20 61  ].expressed as a
1e240 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
1e250 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  value..</p>..<p>
1e260 0a 46 6f 72 6d 61 74 73 20 32 20 74 68 72 6f 75  .Formats 2 throu
1e270 67 68 20 31 30 20 6d 61 79 20 62 65 20 6f 70 74  gh 10 may be opt
1e280 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64  ionally followed
1e290 20 62 79 20 61 20 74 69 6d 65 7a 6f 6e 65 20 69   by a timezone i
1e2a0 6e 64 69 63 61 74 6f 72 20 6f 66 20 74 68 65 20  ndicator of the 
1e2b0 66 6f 72 6d 0a 22 3c 69 3e 26 23 39 31 3b 2b 2d  form."<i>&#91;+-
1e2c0 26 23 39 33 3b 48 48 3a 4d 4d 3c 2f 69 3e 22 20  &#93;HH:MM</i>" 
1e2d0 6f 72 20 6a 75 73 74 20 22 3c 69 3e 5a 3c 2f 69  or just "<i>Z</i
1e2e0 3e 22 2e 20 20 54 68 65 20 64 61 74 65 20 61 6e  >".  The date an
1e2f0 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
1e300 20 75 73 65 20 55 54 43 20 6f 72 20 22 7a 75 6c   use UTC or "zul
1e310 75 22 0a 74 69 6d 65 20 69 6e 74 65 72 6e 61 6c  u".time internal
1e320 6c 79 2c 20 61 6e 64 20 73 6f 20 74 68 65 20 22  ly, and so the "
1e330 5a 22 20 73 75 66 66 69 78 20 69 73 20 61 20 6e  Z" suffix is a n
1e340 6f 2d 6f 70 2e 20 20 41 6e 79 20 6e 6f 6e 2d 7a  o-op.  Any non-z
1e350 65 72 6f 20 22 48 48 3a 4d 4d 22 20 73 75 66 66  ero "HH:MM" suff
1e360 69 78 20 69 73 0a 73 75 62 74 72 61 63 74 65 64  ix is.subtracted
1e370 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 69 63 61   from the indica
1e380 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ted date and tim
1e390 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f  e in order to co
1e3a0 6d 70 75 74 65 20 7a 75 6c 75 20 74 69 6d 65 2e  mpute zulu time.
1e3b0 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c  .For example, al
1e3c0 6c 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  l of the followi
1e3d0 6e 67 20 74 69 6d 65 20 73 74 72 69 6e 67 73 20  ng time strings 
1e3e0 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a  are equivalent:.
1e3f0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1e400 65 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30 38  e>.2013-10-07 08
1e410 3a 32 33 3a 31 39 2e 31 32 30 3c 62 72 3e 0a 32  :23:19.120<br>.2
1e420 30 31 33 2d 31 30 2d 30 37 54 30 38 3a 32 33 3a  013-10-07T08:23:
1e430 31 39 2e 31 32 30 5a 3c 62 72 3e 0a 32 30 31 33  19.120Z<br>.2013
1e440 2d 31 30 2d 30 37 20 30 34 3a 32 33 3a 31 39 2e  -10-07 04:23:19.
1e450 31 32 30 2d 30 34 3a 30 30 3c 62 72 3e 0a 32 34  120-04:00<br>.24
1e460 35 36 35 37 32 2e 38 34 39 35 32 36 38 35 0a 3c  56572.84952685.<
1e470 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
1e480 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61 74 73 20 34  >.^(In formats 4
1e490 2c 20 37 2c 20 61 6e 64 20 31 30 2c 20 74 68 65  , 7, and 10, the
1e4a0 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f   fractional seco
1e4b0 6e 64 73 20 76 61 6c 75 65 20 53 53 2e 53 53 53  nds value SS.SSS
1e4c0 20 63 61 6e 20 68 61 76 65 0a 6f 6e 65 20 6f 72   can have.one or
1e4d0 20 6d 6f 72 65 20 64 69 67 69 74 73 20 66 6f 6c   more digits fol
1e4e0 6c 6f 77 69 6e 67 20 74 68 65 20 64 65 63 69 6d  lowing the decim
1e4f0 61 6c 20 70 6f 69 6e 74 2e 20 20 45 78 61 63 74  al point.  Exact
1e500 6c 79 20 74 68 72 65 65 20 64 69 67 69 74 73 20  ly three digits 
1e510 61 72 65 0a 73 68 6f 77 6e 20 69 6e 20 74 68 65  are.shown in the
1e520 20 65 78 61 6d 70 6c 65 73 20 62 65 63 61 75 73   examples becaus
1e530 65 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74  e only the first
1e540 20 74 68 72 65 65 20 64 69 67 69 74 73 20 61 72   three digits ar
1e550 65 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 74 6f  e significant.to
1e560 20 74 68 65 20 72 65 73 75 6c 74 2c 20 62 75 74   the result, but
1e570 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
1e580 67 20 63 61 6e 20 68 61 76 65 20 66 65 77 65 72  g can have fewer
1e590 20 6f 72 20 6d 6f 72 65 20 74 68 61 6e 20 74 68   or more than th
1e5a0 72 65 65 20 64 69 67 69 74 73 0a 61 6e 64 20 74  ree digits.and t
1e5b0 68 65 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e  he date/time fun
1e5c0 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 74 69 6c  ctions will stil
1e5d0 6c 20 6f 70 65 72 61 74 65 20 63 6f 72 72 65 63  l operate correc
1e5e0 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61 72 6c 79  tly.)^.Similarly
1e5f0 2c 20 66 6f 72 6d 61 74 20 31 32 20 69 73 20 73  , format 12 is s
1e600 68 6f 77 6e 20 77 69 74 68 20 31 30 20 73 69 67  hown with 10 sig
1e610 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 2c  nificant digits,
1e620 20 62 75 74 20 74 68 65 20 64 61 74 65 2f 74 69   but the date/ti
1e630 6d 65 0a 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c  me.functions wil
1e640 6c 20 72 65 61 6c 6c 79 20 61 63 63 65 70 74 20  l really accept 
1e650 61 73 20 6d 61 6e 79 20 6f 72 20 61 73 20 66 65  as many or as fe
1e660 77 20 64 69 67 69 74 73 20 61 73 20 61 72 65 20  w digits as are 
1e670 6e 65 63 65 73 73 61 72 79 20 74 6f 0a 72 65 70  necessary to.rep
1e680 72 65 73 65 6e 74 20 74 68 65 20 4a 75 6c 69 61  resent the Julia
1e690 6e 20 64 61 79 20 6e 75 6d 62 65 72 2e 0a 3c 2f  n day number..</
1e6a0 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65 72  p>..<h3>Modifier
1e6b0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s</h3>..<p>^The 
1e6c0 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20  time string can 
1e6d0 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a  be followed by z
1e6e0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69  ero or more modi
1e6f0 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74 65  fiers that .alte
1e700 72 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69  r date and/or ti
1e710 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64 69 66 69  me. ^Each modifi
1e720 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66 6f 72  er.is a transfor
1e730 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 61  mation that is a
1e740 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 74 69  pplied to the ti
1e750 6d 65 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  me value to its 
1e760 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65 72 73  left..^Modifiers
1e770 20 61 72 65 20 61 70 70 6c 69 65 64 20 66 72 6f   are applied fro
1e780 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 3b  m left to right;
1e790 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f 72 74   order is import
1e7a0 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61 69 6c  ant..^(The avail
1e7b0 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73 20 61  able modifiers a
1e7c0 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f  re as follows.</
1e7d0 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e  p>..<ol>.<li> NN
1e7e0 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  N days.<li> NNN 
1e7f0 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d  hours.<li> NNN m
1e800 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e  inutes.<li> NNN.
1e810 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69  NNNN seconds.<li
1e820 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69  > NNN months.<li
1e830 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e  > NNN years.<li>
1e840 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a   start of month.
1e850 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 79 65  <li> start of ye
1e860 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66  ar.<li> start of
1e870 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61   day.<li> weekda
1e880 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f  y N.<li> unixepo
1e890 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d  ch.<li> localtim
1e8a0 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c  e.<li> utc .</ol
1e8b0 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 72  >)^..<p>^The fir
1e8c0 73 74 20 73 69 78 20 6d 6f 64 69 66 69 65 72 73  st six modifiers
1e8d0 20 28 31 20 74 68 72 6f 75 67 68 20 36 29 20 0a   (1 through 6) .
1e8e0 73 69 6d 70 6c 79 20 61 64 64 20 74 68 65 20 73  simply add the s
1e8f0 70 65 63 69 66 69 65 64 20 61 6d 6f 75 6e 74 20  pecified amount 
1e900 6f 66 20 74 69 6d 65 20 74 6f 20 74 68 65 20 64  of time to the d
1e910 61 74 65 20 61 6e 64 20 74 69 6d 65 20 0a 73 70  ate and time .sp
1e920 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 70  ecified by the p
1e930 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73 74 72  receding timestr
1e940 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69 65 72  ing and modifier
1e950 73 2e 0a 5e 54 68 65 20 27 73 27 20 63 68 61 72  s..^The 's' char
1e960 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1e970 20 6f 66 20 74 68 65 20 6d 6f 64 69 66 69 65 72   of the modifier
1e980 20 6e 61 6d 65 73 20 69 73 20 6f 70 74 69 6f 6e   names is option
1e990 61 6c 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20 22  al..^Note that "
1e9a0 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74  &plusmn;NNN mont
1e9b0 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65 6e  hs" works by ren
1e9c0 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67 69  dering the origi
1e9d0 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74 68  nal date into.th
1e9e0 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72  e YYYY-MM-DD for
1e9f0 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65 20  mat, adding the 
1ea00 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74  &plusmn;NNN to t
1ea10 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75  he MM month valu
1ea20 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a  e, then.normaliz
1ea30 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e 20  ing the result. 
1ea40 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78 61 6d   ^Thus, for exam
1ea50 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32 30  ple, the data 20
1ea60 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69 65  01-03-31 modifie
1ea70 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27 20  d.by '+1 month' 
1ea80 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64 73  initially yields
1ea90 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75 74   2001-04-31, but
1eaa0 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73 20   April only has 
1eab0 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20 64  30 days.so the d
1eac0 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a 65  ate is normalize
1ead0 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31 2e  d to 2001-05-01.
1eae0 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65 66 66    ^A similar eff
1eaf0 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e 0a  ect occurs when.
1eb00 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
1eb10 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32 39  e is February 29
1eb20 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20 61   of a leapyear a
1eb30 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72 20  nd the modifier 
1eb40 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65 61  is.&plusmn;N yea
1eb50 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e 6f  rs where N is no
1eb60 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  t a multiple of 
1eb70 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  four.</p>..<p>^T
1eb80 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d 6f  he "start of" mo
1eb90 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f 75  difiers (7 throu
1eba0 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65 20  gh 9) shift the 
1ebb0 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20 0a  date backwards .
1ebc0 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
1ebd0 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
1ebe0 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20 64  month, year or d
1ebf0 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ay.</p>..<p>^The
1ec00 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69 66   "weekday" modif
1ec10 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68 65  ier advances the
1ec20 20 64 61 74 65 20 66 6f 72 77 61 72 64 20 74 6f   date forward to
1ec30 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20 0a   the next date .
1ec40 77 68 65 72 65 20 74 68 65 20 77 65 65 6b 64 61  where the weekda
1ec50 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20 53  y number is N. S
1ec60 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64  unday is 0, Mond
1ec70 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f 20  ay is 1, and so 
1ec80 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  forth.</p>..<p>^
1ec90 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  The "unixepoch" 
1eca0 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e  modifier (11) on
1ecb0 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69  ly works if it i
1ecc0 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
1ecd0 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67  ws .a timestring
1ece0 20 69 6e 20 74 68 65 20 44 44 44 44 44 44 44 44   in the DDDDDDDD
1ecf0 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69  DD format. .^Thi
1ed00 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73 65  s modifier cause
1ed10 73 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44  s the DDDDDDDDDD
1ed20 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65 74   to be interpret
1ed30 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c  ed not .as a Jul
1ed40 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 61  ian day number a
1ed50 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f  s it normally wo
1ed60 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a 5b  uld be, but as.[
1ed70 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1ed80 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69  dia.org/wiki/Uni
1ed90 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54 69  x_time | Unix Ti
1eda0 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65  me] - the .numbe
1edb0 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
1edc0 63 65 20 31 39 37 30 2e 20 20 49 66 20 74 68 65  ce 1970.  If the
1edd0 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1ede0 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66  ifier does not.f
1edf0 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72 69  ollow a timestri
1ee00 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 44  ng of the form D
1ee10 44 44 44 44 44 44 44 44 44 20 77 68 69 63 68 20  DDDDDDDDD which 
1ee20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6e 75  expresses the nu
1ee30 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20  mber.of seconds 
1ee40 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69 66  since 1970 or if
1ee50 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72 73   other modifiers
1ee60 0a 73 65 70 61 72 61 74 65 20 74 68 65 20 22 75  .separate the "u
1ee70 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1ee80 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44 44  er from prior DD
1ee90 44 44 44 44 44 44 44 44 20 74 68 65 6e 20 74 68  DDDDDDDD then th
1eea0 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e.behavior is un
1eeb0 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74 6f 20  defined..Due to 
1eec0 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69 74 61  precision limita
1eed0 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20 62 79  tions imposed by
1eee0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
1eef0 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34 2d 62  ions use.of 64-b
1ef00 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74 68 65  it integers, the
1ef10 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1ef20 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73  ifier only works
1ef30 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77 65   for.dates betwe
1ef40 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30  en 0000-01-01 00
1ef50 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32 2d  :00:00 and 5352-
1ef60 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20 28  11-01 10:52:47 (
1ef70 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36  unix times.of -6
1ef80 32 31 36 37 32 31 39 32 30 30 20 74 68 72 6f 75  2167219200 throu
1ef90 67 68 20 31 30 36 37 35 31 39 39 31 36 37 29 2e  gh 10675199167).
1efa0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
1efb0 61 67 6d 65 6e 74 20 6c 6f 63 61 6c 74 69 6d 65  agment localtime
1efc0 20 7b 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69   {localtime modi
1efd0 66 69 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  fier}</tcl>.<p>^
1efe0 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22 20  The "localtime" 
1eff0 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20 61 73  modifier (12) as
1f000 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65 20 73  sumes the time s
1f010 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c 65 66  tring to its lef
1f020 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72 73 61  t is in.Universa
1f030 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69  l Coordinated Ti
1f040 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61 64 6a  me (UTC) and adj
1f050 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a 73 74  usts the time.st
1f060 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69 74 20  ring so that it 
1f070 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c 74 69  displays localti
1f080 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c 74 69  me.  If "localti
1f090 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20 74 69  me".follows a ti
1f0a0 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 55  me that is not U
1f0b0 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68  TC, then the beh
1f0c0 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
1f0d0 65 64 2e 0a 5e 28 54 68 65 20 22 75 74 63 22 20  ed..^(The "utc" 
1f0e0 69 73 20 74 68 65 20 6f 70 70 6f 73 69 74 65 20  is the opposite 
1f0f0 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 2e 20  of "localtime". 
1f100 20 22 75 74 63 22 20 61 73 73 75 6d 65 73 20 74   "utc" assumes t
1f110 68 61 74 20 74 68 65 20 73 74 72 69 6e 67 0a 74  hat the string.t
1f120 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e  o its left is in
1f130 20 74 68 65 20 6c 6f 63 61 6c 20 74 69 6d 65 7a   the local timez
1f140 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73 74 73 20  one and adjusts 
1f150 74 68 61 74 20 73 74 72 69 6e 67 20 74 6f 20 62  that string to b
1f160 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49 66 20 74  e in UTC.)^.If t
1f170 68 65 20 70 72 69 6f 72 20 73 74 72 69 6e 67 20  he prior string 
1f180 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c 74  is not in localt
1f190 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ime, then the re
1f1a0 73 75 6c 74 20 6f 66 20 22 75 74 63 22 20 69 73  sult of "utc" is
1f1b0 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a  .undefined.</p>.
1f1c0 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68  .<h3>Examples</h
1f1d0 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  3>..^(<p>Compute
1f1e0 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61 74   the current dat
1f1f0 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  e.<p>..<blockquo
1f200 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27  te>SELECT date('
1f210 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f  now');</blockquo
1f220 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
1f230 75 74 65 20 74 68 65 20 6c 61 73 74 20 64 61 79  ute the last day
1f240 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
1f250 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  month.</p>..<blo
1f260 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64  ckquote>SELECT d
1f270 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74  ate('now','start
1f280 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d   of month','+1 m
1f290 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79 27 29 3b  onth','-1 day');
1f2a0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1f2b0 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1f2c0 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
1f2d0 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69   given a unix ti
1f2e0 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31 34  mestamp 10929414
1f2f0 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  66.</p>..<blockq
1f300 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45 43 54  uote>.    SELECT
1f310 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39 34   datetime(109294
1f320 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68  1466, 'unixepoch
1f330 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
1f340 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
1f350 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74  e the date and t
1f360 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78  ime given a unix
1f370 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39   timestamp 10929
1f380 34 31 34 36 36 2c 20 61 6e 64 20 0a 63 6f 6d 70  41466, and .comp
1f390 65 6e 73 61 74 65 20 66 6f 72 20 79 6f 75 72 20  ensate for your 
1f3a0 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c  local timezone.<
1f3b0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1f3c0 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 74  >.  SELECT datet
1f3d0 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c 20  ime(1092941466, 
1f3e0 27 75 6e 69 78 65 70 6f 63 68 27 2c 20 27 6c 6f  'unixepoch', 'lo
1f3f0 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f  caltime');.</blo
1f400 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1f410 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72  >Compute the cur
1f420 72 65 6e 74 20 75 6e 69 78 20 74 69 6d 65 73 74  rent unix timest
1f430 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  amp.</p>..<block
1f440 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
1f450 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e  strftime('%s','n
1f460 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  ow');.</blockquo
1f470 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
1f480 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ute the number o
1f490 66 20 64 61 79 73 20 73 69 6e 63 65 20 74 68 65  f days since the
1f4a0 20 73 69 67 6e 69 6e 67 20 6f 66 20 74 68 65 20   signing of the 
1f4b0 55 53 20 44 65 63 6c 61 72 61 74 69 6f 6e 0a 6f  US Declaration.o
1f4c0 66 20 49 6e 64 65 70 65 6e 64 65 6e 63 65 2e 3c  f Independence.<
1f4d0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1f4e0 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75 6c 69 61  >.  SELECT julia
1f4f0 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 6a 75  nday('now') - ju
1f500 6c 69 61 6e 64 61 79 28 27 31 37 37 36 2d 30 37  lianday('1776-07
1f510 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  -04');.</blockqu
1f520 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1f530 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  pute the number 
1f540 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65  of seconds since
1f550 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 6d 6f   a particular mo
1f560 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c 2f 70  ment in 2004:</p
1f570 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1f580 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d    SELECT strftim
1f590 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 2d 20  e('%s','now') - 
1f5a0 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 32  strftime('%s','2
1f5b0 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33 34 3a  004-01-01 02:34:
1f5c0 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  56');.</blockquo
1f5d0 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d  te>)^..^(<p>.Com
1f5e0 70 75 74 65 20 74 68 65 20 64 61 74 65 20 6f 66  pute the date of
1f5f0 20 74 68 65 20 66 69 72 73 74 20 54 75 65 73 64   the first Tuesd
1f600 61 79 20 69 6e 20 4f 63 74 6f 62 65 72 0a 66 6f  ay in October.fo
1f610 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 79 65  r the current ye
1f620 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ar..</p>..<block
1f630 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
1f640 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61 72  date('now','star
1f650 74 20 6f 66 20 79 65 61 72 27 2c 27 2b 39 20 6d  t of year','+9 m
1f660 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64 61 79 20  onths','weekday 
1f670 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  2');.</blockquot
1f680 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
1f690 74 65 20 74 68 65 20 74 69 6d 65 20 73 69 6e 63  te the time sinc
1f6a0 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f 63 68  e the unix epoch
1f6b0 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28 6c 69   in seconds .(li
1f6c0 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25 73 27  ke strftime('%s'
1f6d0 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74 20 69  ,'now') except i
1f6e0 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69 6f 6e  ncludes fraction
1f6f0 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c  al part):</p>..<
1f700 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1f710 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61 79 28  LECT (julianday(
1f720 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35 38 37  'now') - 2440587
1f730 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f 62  .5)*86400.0;.</b
1f740 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 68  lockquote>)^..<h
1f750 33 3e 43 61 76 65 61 74 73 20 41 6e 64 20 42 75  3>Caveats And Bu
1f760 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  gs</h3>..<p>The 
1f770 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 6c  computation of l
1f780 6f 63 61 6c 20 74 69 6d 65 20 64 65 70 65 6e 64  ocal time depend
1f790 73 20 68 65 61 76 69 6c 79 20 6f 6e 20 74 68 65  s heavily on the
1f7a0 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69 74 69   whim .of politi
1f7b0 63 69 61 6e 73 20 61 6e 64 20 69 73 20 74 68 75  cians and is thu
1f7c0 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20 67  s difficult to g
1f7d0 65 74 20 63 6f 72 72 65 63 74 20 66 6f 72 20 0a  et correct for .
1f7e0 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 5e 49 6e  all locales. ^In
1f7f0 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61   this implementa
1f800 74 69 6f 6e 2c 20 74 68 65 20 73 74 61 6e 64 61  tion, the standa
1f810 72 64 20 43 20 6c 69 62 72 61 72 79 20 0a 66 75  rd C library .fu
1f820 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65  nction localtime
1f830 5f 72 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  _r() is used to 
1f840 61 73 73 69 73 74 20 69 6e 20 74 68 65 20 63 61  assist in the ca
1f850 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f  lculation of .lo
1f860 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28 54 68 65  cal time.  ^(The
1f870 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20   .localtime_r() 
1f880 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61  C function norma
1f890 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  lly only works f
1f8a0 6f 72 20 79 65 61 72 73 0a 62 65 74 77 65 65 6e  or years.between
1f8b0 20 31 39 37 30 20 61 6e 64 20 32 30 33 37 2e 20   1970 and 2037. 
1f8c0 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73 69 64  For dates outsid
1f8d0 65 20 74 68 69 73 20 72 61 6e 67 65 2c 20 53 51  e this range, SQ
1f8e0 4c 69 74 65 20 0a 61 74 74 65 6d 70 74 73 20 74  Lite .attempts t
1f8f0 6f 20 6d 61 70 20 74 68 65 20 79 65 61 72 20 69  o map the year i
1f900 6e 74 6f 20 61 6e 20 65 71 75 69 76 61 6c 65 6e  nto an equivalen
1f910 74 20 79 65 61 72 20 77 69 74 68 69 6e 20 0a 74  t year within .t
1f920 68 69 73 20 72 61 6e 67 65 2c 20 64 6f 20 74 68  his range, do th
1f930 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 74  e calculation, t
1f940 68 65 6e 20 6d 61 70 20 74 68 65 20 79 65 61 72  hen map the year
1f950 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c   back.)^</p>...<
1f960 70 3e 5e 28 54 68 65 73 65 20 66 75 6e 63 74 69  p>^(These functi
1f970 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
1f980 72 20 64 61 74 65 73 20 62 65 74 77 65 65 6e 20  r dates between 
1f990 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30  0000-01-01 00:00
1f9a0 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d 31 32 2d  :00.and 9999-12-
1f9b0 33 31 20 32 33 3a 35 39 3a 35 39 20 28 6a 75 6c  31 23:59:59 (jul
1f9c0 69 64 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 73  idan day numbers
1f9d0 20 31 37 32 31 30 35 39 2e 35 20 74 68 72 6f 75   1721059.5 throu
1f9e0 67 68 20 35 33 37 33 34 38 34 2e 35 29 2e 29 5e  gh 5373484.5).)^
1f9f0 0a 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73 69  .For dates outsi
1fa00 64 65 20 74 68 61 74 20 72 61 6e 67 65 2c 20 74  de that range, t
1fa10 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
1fa20 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73 20 61 72  ese.functions ar
1fa30 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e  e undefined.</p>
1fa40 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61 20 57  ..<p>Non-Vista W
1fa50 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73  indows platforms
1fa60 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e   only support on
1fa70 65 20 73 65 74 20 6f 66 20 44 53 54 20 72 75 6c  e set of DST rul
1fa80 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e 6c 79 20  es. .Vista only 
1fa90 73 75 70 70 6f 72 74 73 20 74 77 6f 2e 20 54 68  supports two. Th
1faa0 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74 68 65 73  erefore, on thes
1fab0 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20 0a 68 69  e platforms, .hi
1fac0 73 74 6f 72 69 63 61 6c 20 44 53 54 20 63 61 6c  storical DST cal
1fad0 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c 6c 20 62  culations will b
1fae0 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 0a 46 6f  e incorrect. .Fo
1faf0 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 20 74 68  r example, in th
1fb00 65 20 55 53 2c 20 69 6e 20 32 30 30 37 20 74 68  e US, in 2007 th
1fb10 65 20 44 53 54 20 72 75 6c 65 73 20 63 68 61 6e  e DST rules chan
1fb20 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61 20  ged. .Non-Vista 
1fb30 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d  Windows platform
1fb40 73 20 61 70 70 6c 79 20 74 68 65 20 6e 65 77 20  s apply the new 
1fb50 32 30 30 37 20 44 53 54 20 72 75 6c 65 73 20 0a  2007 DST rules .
1fb60 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f 75 73 20  to all previous 
1fb70 79 65 61 72 73 20 61 73 20 77 65 6c 6c 2e 20 56  years as well. V
1fb80 69 73 74 61 20 64 6f 65 73 20 73 6f 6d 65 77 68  ista does somewh
1fb90 61 74 20 62 65 74 74 65 72 0a 67 65 74 74 69 6e  at better.gettin
1fba0 67 20 72 65 73 75 6c 74 73 20 63 6f 72 72 65 63  g results correc
1fbb0 74 20 62 61 63 6b 20 74 6f 20 31 39 38 36 2c 20  t back to 1986, 
1fbc0 77 68 65 6e 20 74 68 65 20 72 75 6c 65 73 20 77  when the rules w
1fbd0 65 72 65 20 61 6c 73 6f 20 63 68 61 6e 67 65 64  ere also changed
1fbe0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e  .</p>..<p>All in
1fbf0 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74 61 74 69  ternal computati
1fc00 6f 6e 73 20 61 73 73 75 6d 65 20 74 68 65 20 0a  ons assume the .
1fc10 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1fc20 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 47 72  edia.org/wiki/Gr
1fc30 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72  egorian_calendar
1fc40 20 7c 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c   | Gregorian cal
1fc50 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d 2e 20 20  endar].system.  
1fc60 49 74 20 69 73 20 61 6c 73 6f 20 61 73 73 75 6d  It is also assum
1fc70 65 64 20 74 68 61 74 20 65 76 65 72 79 0a 64 61  ed that every.da
1fc80 79 20 69 73 20 65 78 61 63 74 6c 79 20 38 36 34  y is exactly 864
1fc90 30 30 20 73 65 63 6f 6e 64 73 20 69 6e 20 64 75  00 seconds in du
1fca0 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63  ration.</p>..<tc
1fcb0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
1fcc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fcd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fcf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fd00 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67 67 72 65  #.Section {Aggre
1fd10 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20  gate Functions} 
1fd20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67 66 75 6e  aggfunc {*aggfun
1fd30 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 54  c}.</tcl>..<p>.T
1fd40 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
1fd50 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c  ctions shown bel
1fd60 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ow are available
1fd70 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41 64   by default.  Ad
1fd80 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61  ditional.aggrega
1fd90 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 72 69  te functions wri
1fda0 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20 62 65  tten in C may be
1fdb0 20 61 64 64 65 64 20 75 73 69 6e 67 20 74 68 65   added using the
1fdc0 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74   .[sqlite3_creat
1fdd0 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61  e_function()]</a
1fde0 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a  >.API.</p>..<p>.
1fdf0 5e 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61 74  ^In any aggregat
1fe00 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20  e function that 
1fe10 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20 61  takes a single a
1fe20 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61 72  rgument, that ar
1fe30 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70 72  gument.can be pr
1fe40 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b 65  eceded by the ke
1fe50 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54 2e 20  yword DISTINCT. 
1fe60 20 5e 49 6e 20 73 75 63 68 20 63 61 73 65 73 2c   ^In such cases,
1fe70 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d 65   duplicate.eleme
1fe80 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72 65 64  nts are filtered
1fe90 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70 61   before being pa
1fea0 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61 67  ssed into the ag
1feb0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1fec0 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ..^For example, 
1fed0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f  the function "co
1fee0 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29 22  unt(distinct X)"
1fef0 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68 65   will return the
1ff00 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74 69   number.of disti
1ff10 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  nct values of co
1ff20 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20 6f  lumn X instead o
1ff30 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  f the total numb
1ff40 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76  er of non-null.v
1ff50 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20  alues in column 
1ff60 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  X..</p>..<table 
1ff70 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
1ff80 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66  ding=10>.<tcl>.f
1ff90 75 6e 63 64 65 66 20 7b 61 76 67 28 58 29 7d 20  uncdef {avg(X)} 
1ffa0 7b 2a 61 76 67 20 7b 61 76 67 28 29 20 61 67 67  {*avg {avg() agg
1ffb0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
1ffc0 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76 67 28 29  } {.  ^The avg()
1ffd0 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75   function.  retu
1ffe0 72 6e 73 20 74 68 65 20 61 76 65 72 61 67 65 20  rns the average 
1fff0 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e  value of all non
20000 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77  -NULL <i>X</i> w
20010 69 74 68 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e  ithin a.  group.
20020 20 20 5e 53 74 72 69 6e 67 20 61 6e 64 20 42 4c    ^String and BL
20030 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74 20 64  OB values that d
20040 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20  o not look like 
20050 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20 69 6e  numbers are.  in
20060 74 65 72 70 72 65 74 65 64 20 61 73 20 30 2e 0a  terpreted as 0..
20070 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
20080 20 61 76 67 28 29 20 69 73 20 61 6c 77 61 79 73   avg() is always
20090 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
200a0 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e 67 20  t value as long 
200b0 61 73 0a 20 20 61 74 20 74 68 65 72 65 20 69 73  as.  at there is
200c0 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6e 6f   at least one no
200d0 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65 76 65  n-NULL input eve
200e0 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74  n if all.  input
200f0 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 20  s are integers. 
20100 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
20110 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20 69 66  avg() is NULL if
20120 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20 20 74   and only if.  t
20130 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
20140 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20 0a 7d  NULL inputs.  .}
20150 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74  ..funcdef {count
20160 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a  (X) count(*)} {*
20170 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29 20 61  count {count() a
20180 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
20190 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 75  n}} {.  ^The cou
201a0 6e 74 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  nt(X) function r
201b0 65 74 75 72 6e 73 0a 20 20 61 20 63 6f 75 6e 74  eturns.  a count
201c0 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
201d0 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74 20 3c  f times.  that <
201e0 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e  i>X</i> is not N
201f0 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e 20  ULL in a group. 
20200 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29 20 66   ^The count(*) f
20210 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74 68 20  unction.  (with 
20220 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29 20 72 65  no arguments) re
20230 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20  turns the total 
20240 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
20250 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a  n the group..}..
20260 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70 5f 63  funcdef {group_c
20270 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70 5f 63  oncat(X) group_c
20280 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a 20 20  oncat(X,Y)} {.  
20290 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20 7b 67  *group_concat {g
202a0 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 61 67  roup_concat() ag
202b0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
202c0 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67 72 6f  }.} {.  ^The gro
202d0 75 70 5f 63 6f 6e 63 61 74 28 29 20 66 75 6e 63  up_concat() func
202e0 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 61  tion returns.  a
202f0 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73   string which is
20300 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74 69   the concatenati
20310 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d  on of.  all non-
20320 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66 20 3c  NULL values of <
20330 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20 70 61  i>X</i>.  ^If pa
20340 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f 69 3e  rameter <i>Y</i>
20350 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 65 6e   is present then
20360 0a 20 20 69 74 20 69 73 20 75 73 65 64 20 61 73  .  it is used as
20370 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20   the separator. 
20380 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61 6e 63   between instanc
20390 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20  es of <i>X</i>. 
203a0 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22 29 20   ^A comma (",") 
203b0 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73  is used as the s
203c0 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20 3c 69  eparator.  if <i
203d0 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65  >Y</i> is omitte
203e0 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20 6f 66  d.  The order of
203f0 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   the concatenate
20400 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a 20 20  d elements is.  
20410 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a 66 75  arbitrary..}..fu
20420 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d 20 7b  ncdef {max(X)} {
20430 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a 61 67 67  *maxAggFunc *agg
20440 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61 67 67 72  _max {max() aggr
20450 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
20460 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28 29 20   {.  ^The max() 
20470 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
20480 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65  on.  returns the
20490 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f   maximum value o
204a0 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20  f all values in 
204b0 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68  the group..  ^Th
204c0 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  e maximum value 
204d0 69 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61  is the value tha
204e0 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72  t would be retur
204f0 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e 0a 20  ned last in an. 
20500 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74 68 65   ORDER BY on the
20510 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e   same column.  ^
20520 41 67 67 72 65 67 61 74 65 20 6d 61 78 28 29 20  Aggregate max() 
20530 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a 20 20  returns NULL .  
20540 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74  if and only if t
20550 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
20560 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74  NULL values in t
20570 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
20580 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a  cdef {min(X)} {*
20590 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67 67 5f  minAggFunc *agg_
205a0 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67 72 65  min {min() aggre
205b0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20  gate function}} 
205c0 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29 20 61  {.  ^The min() a
205d0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
205e0 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20  n.  returns the 
205f0 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c  minimum non-NULL
20600 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61   value of all va
20610 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
20620 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69 6d 75  p..  ^The minimu
20630 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 66  m value is the f
20640 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61  irst non-NULL va
20650 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 61  lue that would a
20660 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20 4f 52  ppear.  in an OR
20670 44 45 52 20 42 59 20 6f 66 20 74 68 65 20 63 6f  DER BY of the co
20680 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65 67 61  lumn..  ^Aggrega
20690 74 65 20 6d 69 6e 28 29 20 72 65 74 75 72 6e 73  te min() returns
206a0 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c   NULL if and onl
206b0 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  y if there are n
206c0 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c  o non-NULL.  val
206d0 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
206e0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75  ..}..funcdef {su
206f0 6d 28 58 29 20 74 6f 74 61 6c 28 58 29 7d 20 7b  m(X) total(X)} {
20700 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73 75 6d  .  *sumFunc *sum
20710 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d 28 29   *total.  {sum()
20720 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
20730 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28 29 20  ion}.  {total() 
20740 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
20750 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 73  on}.} {.  ^The s
20760 75 6d 28 29 20 61 6e 64 20 74 6f 74 61 6c 28 29  um() and total()
20770 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
20780 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e 20 73 75  ions.  return su
20790 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  m of all non-NUL
207a0 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
207b0 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20 74 68 65  group..  ^If the
207c0 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55  re are no non-NU
207d0 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20 74 68  LL input rows th
207e0 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73  en sum() returns
207f0 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61  .  NULL but tota
20800 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e 30 2e  l() returns 0.0.
20810 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e  .  NULL is not n
20820 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66 75  ormally a helpfu
20830 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74 68 65  l result for the
20840 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a   sum of no rows.
20850 20 20 62 75 74 20 74 68 65 20 53 51 4c 20 73 74    but the SQL st
20860 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 73 20  andard requires 
20870 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65  it and most othe
20880 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61 73 65  r.  SQL database
20890 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65   engines impleme
208a0 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20 77 61  nt sum() that wa
208b0 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f 65 73  y so SQLite does
208c0 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73 61 6d   it in the.  sam
208d0 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72 20 74  e way in order t
208e0 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e  o be compatible.
208f0 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64     The non-stand
20900 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e 63  ard total() func
20910 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69 64  tion.  is provid
20920 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69 65  ed as a convenie
20930 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20 61  nt way to work a
20940 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69 67  round this desig
20950 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74  n problem.  in t
20960 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e  he SQL language.
20970 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20  </p>..  <p>^The 
20980 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28  result of total(
20990 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c  ) is always a fl
209a0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
209b0 75 65 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c  ue..  ^The resul
209c0 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20 61 6e  t of sum() is an
209d0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
209e0 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  f all non-NULL i
209f0 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65  nputs are intege
20a00 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20 69 6e  rs..  ^If any in
20a10 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69 73 20  put to sum() is 
20a20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67  neither an integ
20a30 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74  er or a NULL.  t
20a40 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e  hen sum() return
20a50 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
20a60 6e 74 20 76 61 6c 75 65 0a 20 20 77 68 69 63 68  nt value.  which
20a70 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61 70 70   might be an app
20a80 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68  roximation to th
20a90 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a  e true sum.</p>.
20aa0 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77 69 6c  .  <p>^Sum() wil
20ab0 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e 74 65  l throw an "inte
20ac0 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20 65 78  ger overflow" ex
20ad0 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69  ception if all i
20ae0 6e 70 75 74 73 0a 20 20 61 72 65 20 69 6e 74 65  nputs.  are inte
20af0 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 61  gers or NULL.  a
20b00 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76  nd an integer ov
20b10 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20 61 74  erflow occurs at
20b20 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69 6e   any point durin
20b30 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f  g the computatio
20b40 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20 6e 65  n..  ^Total() ne
20b50 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20 69 6e  ver throws an in
20b60 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 2e 0a  teger overflow..
20b70 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65  }.</tcl>.</table
20b80 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
20b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20bb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20bd0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
20be0 49 4e 53 45 52 54 20 69 6e 73 65 72 74 20 7b 49  INSERT insert {I
20bf0 4e 53 45 52 54 20 2a 49 4e 53 45 52 54 73 7d 0a  NSERT *INSERTs}.
20c00 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
20c10 44 69 61 67 72 61 6d 20 69 6e 73 65 72 74 2d 73  Diagram insert-s
20c20 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  tmt.</tcl>..<p>T
20c30 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
20c40 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74 68 72  ent comes in thr
20c50 65 65 20 62 61 73 69 63 20 66 6f 72 6d 73 2e 20  ee basic forms. 
20c60 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 54   .<ul>.<li><p>^T
20c70 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 28 77  he first form (w
20c80 69 74 68 20 74 68 65 20 22 56 41 4c 55 45 53 22  ith the "VALUES"
20c90 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61 74 65   keyword) create
20ca0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 6e 65  s one or more.ne
20cb0 77 20 72 6f 77 73 20 69 6e 0a 61 6e 20 65 78 69  w rows in.an exi
20cc0 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 5e 49 66  sting table. ^If
20cd0 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c   the <yyterm>col
20ce0 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  umn-name</yyterm
20cf0 3e 20 6c 69 73 74 20 61 66 74 65 72 0a 3c 79 79  > list after.<yy
20d00 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  term>table-name<
20d10 2f 79 79 74 65 72 6d 3e 20 69 73 20 6f 6d 69 74  /yyterm> is omit
20d20 74 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  ted then the num
20d30 62 65 72 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e  ber.of values in
20d40 73 65 72 74 65 64 20 69 6e 74 6f 20 65 61 63 68  serted into each
20d50 20 72 6f 77 0a 6d 75 73 74 20 62 65 20 74 68 65   row.must be the
20d60 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d   same as the num
20d70 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
20d80 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e  n the table. ^In
20d90 20 74 68 69 73 20 63 61 73 65 0a 74 68 65 20 72   this case.the r
20da0 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74  esult of evaluat
20db0 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  ing the left-mos
20dc0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f  t expression fro
20dd0 6d 20 65 61 63 68 20 74 65 72 6d 20 6f 66 0a 74  m each term of.t
20de0 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74 20 69  he VALUES list i
20df0 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
20e00 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  the left-most co
20e10 6c 75 6d 6e 20 6f 66 20 65 61 63 68 20 6e 65 77  lumn of each new
20e20 20 72 6f 77 2c 0a 61 6e 64 20 73 6f 20 66 6f 72   row,.and so for
20e30 74 68 20 66 6f 72 20 65 61 63 68 20 73 75 62 73  th for each subs
20e40 65 71 75 65 6e 74 20 65 78 70 72 65 73 73 69 6f  equent expressio
20e50 6e 2e 20 5e 49 66 20 61 20 3c 79 79 74 65 72 6d  n. ^If a <yyterm
20e60 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79  >column-name</yy
20e70 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73 20 73 70  term>.list is sp
20e80 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68  ecified, then th
20e90 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75  e number of valu
20ea0 65 73 20 69 6e 20 65 61 63 68 20 74 65 72 6d 20  es in each term 
20eb0 6f 66 20 74 68 65 0a 56 41 4c 55 45 20 6c 69 73  of the.VALUE lis
20ec0 74 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65  t must match the
20ed0 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69   number of.speci
20ee0 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45  fied columns. ^E
20ef0 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d 65 64  ach of the named
20f00 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
20f10 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c  new row is popul
20f20 61 74 65 64 0a 77 69 74 68 20 74 68 65 20 72 65  ated.with the re
20f30 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74  sults of evaluat
20f40 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
20f50 6e 64 69 6e 67 20 56 41 4c 55 45 53 20 65 78 70  nding VALUES exp
20f60 72 65 73 73 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a  ression. ^Table.
20f70 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 64 6f 20  columns that do 
20f80 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  not appear in th
20f90 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72  e column list ar
20fa0 65 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68  e populated with
20fb0 20 74 68 65 20 0a 5b 64 65 66 61 75 6c 74 20 63   the .[default c
20fc0 6f 6c 75 6d 6e 20 76 61 6c 75 65 5d 20 28 73 70  olumn value] (sp
20fd0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
20fe0 6f 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  of the [CREATE T
20ff0 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 29  ABLE] statement)
21000 2c 20 6f 72 0a 77 69 74 68 20 4e 55 4c 4c 20 69  , or.with NULL i
21010 66 20 6e 6f 20 5b 64 65 66 61 75 6c 74 20 76 61  f no [default va
21020 6c 75 65 5d 20 69 73 20 73 70 65 63 69 66 69 65  lue] is specifie
21030 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73  d...<li><p>The s
21040 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68  econd form of th
21050 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  e INSERT stateme
21060 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 5b 53  nt contains a [S
21070 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
21080 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41  .instead of a VA
21090 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20  LUES clause. ^A 
210a0 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73  new entry is ins
210b0 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74  erted into the t
210c0 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f  able for each.ro
210d0 77 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e  w of data return
210e0 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20  ed by executing 
210f0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
21100 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75  ment. ^If a colu
21110 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69  mn-list is.speci
21120 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72  fied, the number
21130 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
21140 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
21150 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20   SELECT must be 
21160 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20  the same.as the 
21170 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20  number of items 
21180 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69  in the column-li
21190 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20  st. ^Otherwise, 
211a0 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73  if no column-lis
211b0 74 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20  t is.specified, 
211c0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
211d0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73  lumns in the res
211e0 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43  ult of the SELEC
211f0 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  T must be the sa
21200 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72  me.as the number
21210 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
21220 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53  he table. ^Any S
21230 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
21240 20 69 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d 70   including.[comp
21250 6f 75 6e 64 20 53 45 4c 45 43 54 73 5d 20 61 6e  ound SELECTs] an
21260 64 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d SELECT stateme
21270 6e 74 73 20 77 69 74 68 20 5b 4f 52 44 45 52 20  nts with [ORDER 
21280 42 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d 49  BY] and/or [LIMI
21290 54 5d 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79  T] clauses, .may
212a0 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49   be used in an I
212b0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
212c0 6f 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c  of this form...<
212d0 6c 69 3e 3c 70 3e 54 68 65 20 74 68 69 72 64 20  li><p>The third 
212e0 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52  form of an INSER
212f0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77  T statement is w
21300 69 74 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55  ith DEFAULT VALU
21310 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54  ES..^(The INSERT
21320 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c   ... DEFAULT VAL
21330 55 45 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  UES statement in
21340 73 65 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e  serts a single n
21350 65 77 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a  ew row into the.
21360 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e  named table.)^ ^
21370 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  Each column of t
21380 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f  he new row is po
21390 70 75 6c 61 74 65 64 20 77 69 74 68 20 69 74 73  pulated with its
213a0 20 0a 5b 64 65 66 61 75 6c 74 20 76 61 6c 75 65   .[default value
213b0 5d 2c 20 6f 72 20 77 69 74 68 20 61 20 4e 55 4c  ], or with a NUL
213c0 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c 74 20  L if no default 
213d0 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69  value is specifi
213e0 65 64 20 0a 61 73 20 70 61 72 74 20 6f 66 20 74  ed .as part of t
213f0 68 65 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  he column defini
21400 74 69 6f 6e 20 69 6e 20 74 68 65 20 5b 43 52 45  tion in the [CRE
21410 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
21420 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c 70  ment...</ul>..<p
21430 3e 5e 54 68 65 20 22 52 45 50 4c 41 43 45 22 20  >^The "REPLACE" 
21440 61 6e 64 20 22 49 4e 53 45 52 54 20 4f 52 20 3c  and "INSERT OR <
21450 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22 20 66 6f  i>action</i>" fo
21460 72 6d 73 20 73 70 65 63 69 66 79 20 61 6e 20 61  rms specify an a
21470 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74  lternative.const
21480 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
21490 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
214a0 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e  thm to use durin
214b0 67 20 74 68 69 73 20 6f 6e 65 20 49 4e 53 45 52  g this one INSER
214c0 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74  T command..See t
214d0 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65  he section title
214e0 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d [ON CONFLICT] 
214f0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
21500 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20  nformation..For 
21510 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69  compatibility wi
21520 74 68 20 4d 79 53 51 4c 2c 20 5e 74 68 65 20 70  th MySQL, ^the p
21530 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68 65  arser allows the
21540 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e 67   use of the.sing
21550 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68 72  le keyword <a hr
21560 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65  ef="lang_replace
21570 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f  .html">REPLACE</
21580 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61 73 20  a> as an .alias 
21590 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52  for "INSERT OR R
215a0 45 50 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54  EPLACE"...<p>^(T
215b0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69 3e  he optional "<i>
215c0 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c  schema-name</i><
215d0 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78 20  b>.</b>" prefix 
215e0 6f 6e 20 74 68 65 20 0a 3c 79 79 74 65 72 6d 3e  on the .<yyterm>
215f0 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  table-name</yyte
21600 72 6d 3e 0a 69 73 20 73 75 70 70 6f 72 74 65 64  rm>.is supported
21610 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 49   for top-level I
21620 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73  NSERT statements
21630 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20 74   only.)^  ^The t
21640 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20 62  able name must b
21650 65 0a 75 6e 71 75 61 6c 69 66 69 65 64 20 66 6f  e.unqualified fo
21660 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  r INSERT stateme
21670 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72 20 77  nts that occur w
21680 69 74 68 69 6e 20 5b 43 52 45 41 54 45 20 54 52  ithin [CREATE TR
21690 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74  IGGER] statement
216a0 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s..^Similarly, t
216b0 68 65 20 22 44 45 46 41 55 4c 54 20 56 41 4c 55  he "DEFAULT VALU
216c0 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20  ES" form of the 
216d0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
216e0 20 69 73 20 73 75 70 70 6f 72 74 65 64 20 66 6f   is supported fo
216f0 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45  r.top-level INSE
21700 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e  RT statements on
21710 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20 49  ly and not for I
21720 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73  NSERT statements
21730 20 77 69 74 68 69 6e 0a 74 72 69 67 67 65 72 73   within.triggers
21740 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ..<p>..<tcl>.###
21750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21790 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
217a0 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54  ion {ON CONFLICT
217b0 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63   clause} conflic
217c0 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61  t {{conflict cla
217d0 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43  use} {ON CONFLIC
217e0 54 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  T}}..RecursiveBu
217f0 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66  bbleDiagram conf
21800 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63  lict-clause.</tc
21810 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f  l>..<p>The ON CO
21820 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
21830 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65 20   not a separate 
21840 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74  SQL command.  It
21850 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61   is a.non-standa
21860 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  rd clause that c
21870 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e  an appear in man
21880 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d  y other SQL comm
21890 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65  ands..It is give
218a0 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f  n its own sectio
218b0 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65  n in this docume
218c0 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69 73  nt because it is
218d0 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61   not.part of sta
218e0 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68  ndard SQL and th
218f0 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f  erefore might no
21900 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f  t be familiar.</
21910 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74  p>..<p>^The synt
21920 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f  ax for the ON CO
21930 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
21940 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20   as shown above 
21950 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20 54  for.the CREATE T
21960 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e  ABLE command.  ^
21970 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20 61  For the INSERT a
21980 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e  nd.UPDATE comman
21990 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 73  ds, the keywords
219a0 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61   "ON CONFLICT" a
219b0 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20 22  re replaced by "
219c0 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65 20  OR" so that.the 
219d0 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f 72  syntax reads mor
219e0 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f  e naturally.  Fo
219f0 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65  r example, inste
21a00 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e  ad of."INSERT ON
21a10 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45   CONFLICT IGNORE
21a20 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45 52  " we have "INSER
21a30 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68  T OR IGNORE"..Th
21a40 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67  e keywords chang
21a50 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e  e but the meanin
21a60 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20  g of the clause 
21a70 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68  is the same.eith
21a80 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  er way.</p>..<p>
21a90 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
21aa0 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20 74  clause applies t
21ab0 6f 20 5b 55 4e 49 51 55 45 5d 2c 20 5b 4e 4f 54  o [UNIQUE], [NOT
21ac0 20 4e 55 4c 4c 5d 2c 0a 5b 43 48 45 43 4b 5d 2c   NULL],.[CHECK],
21ad0 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45   and [PRIMARY KE
21ae0 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a  Y] constraints..
21af0 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
21b00 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e  algorithm does n
21b10 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52  ot.apply to [FOR
21b20 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
21b30 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20 61 72 65  ints]..There are
21b40 20 66 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72   five conflict r
21b50 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
21b60 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c  thm choices:.ROL
21b70 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41  LBACK, ABORT, FA
21b80 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20  IL, IGNORE, and 
21b90 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65  REPLACE..^The de
21ba0 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72  fault conflict r
21bb0 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
21bc0 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54  thm is ABORT.  T
21bd0 68 69 73 0a 69 73 20 77 68 61 74 20 74 68 65 79  his.is what they
21be0 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e   mean:</p>..<dl>
21bf0 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b  .<dt><b>ROLLBACK
21c00 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
21c10 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69  > ^When an appli
21c20 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  cable constraint
21c30 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
21c40 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a  s, the ROLLBACK.
21c50 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
21c60 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
21c70 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
21c80 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e 20 53 51  ement with.an SQ
21c90 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
21ca0 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20  error and rolls 
21cb0 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  back the current
21cc0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49   transaction..^I
21cd0 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  f no transaction
21ce0 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65   is.active (othe
21cf0 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69  r than the impli
21d00 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  ed transaction t
21d10 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20 6f  hat is created o
21d20 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29  n every.command)
21d30 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41   then the ROLLBA
21d40 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  CK resolution al
21d50 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68  gorithm works th
21d60 65 20 73 61 6d 65 20 61 73 20 74 68 65 0a 41 42  e same as the.AB
21d70 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f  ORT algorithm.</
21d80 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
21d90 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  ABORT</b></dt>.<
21da0 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20  dd><p> ^When an 
21db0 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74  applicable const
21dc0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
21dd0 6f 63 63 75 72 73 2c 20 74 68 65 20 41 42 4f 52  occurs, the ABOR
21de0 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  T.resolution alg
21df0 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68  orithm aborts th
21e00 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
21e10 61 74 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20  atement.with an 
21e20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
21e30 54 20 65 72 72 6f 72 20 61 6e 64 20 62 61 63 6b  T error and back
21e40 73 20 6f 75 74 20 61 6e 79 20 63 68 61 6e 67 65  s out any change
21e50 73 0a 6d 61 64 65 20 62 79 20 74 68 65 20 63 75  s.made by the cu
21e60 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
21e70 65 6e 74 3b 20 62 75 74 20 63 68 61 6e 67 65 73  ent; but changes
21e80 20 63 61 75 73 65 64 0a 62 79 20 70 72 69 6f 72   caused.by prior
21e90 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
21ea0 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
21eb0 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 72 65 20  transaction are 
21ec0 70 72 65 73 65 72 76 65 64 20 61 6e 64 20 74 68  preserved and th
21ed0 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65  e.transaction re
21ee0 6d 61 69 6e 73 20 61 63 74 69 76 65 2e 0a 54 68  mains active..Th
21ef0 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  is is the defaul
21f00 74 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20 74  t behavior and t
21f10 68 65 20 62 65 68 61 76 69 6f 72 20 73 70 65 63  he behavior spec
21f20 69 66 69 65 64 20 62 79 20 74 68 65 20 53 51 4c  ified by the SQL
21f30 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f  .standard.</p></
21f40 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c  dd>..<dt><b>FAIL
21f50 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
21f60 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69  > ^When an appli
21f70 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  cable constraint
21f80 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
21f90 73 2c 20 74 68 65 20 46 41 49 4c 0a 72 65 73 6f  s, the FAIL.reso
21fa0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
21fb0 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72 72   aborts the curr
21fc0 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
21fd0 74 20 77 69 74 68 20 61 6e 0a 53 51 4c 49 54 45  t with an.SQLITE
21fe0 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f  _CONSTRAINT erro
21ff0 72 2e 20 20 5e 42 75 74 20 74 68 65 20 46 41 49  r.  ^But the FAI
22000 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f 65  L resolution doe
22010 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20 70  s not.back out p
22020 72 69 6f 72 20 63 68 61 6e 67 65 73 20 6f 66 20  rior changes of 
22030 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
22040 74 20 74 68 61 74 20 66 61 69 6c 65 64 20 6e 6f  t that failed no
22050 72 20 64 6f 65 73 0a 69 74 20 65 6e 64 20 74 68  r does.it end th
22060 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  e transaction..^
22070 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20  For example, if 
22080 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d  an UPDATE.statem
22090 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ent encountered 
220a0 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
220b0 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30  lation on the 10
220c0 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20  0th row that.it 
220d0 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61  attempts to upda
220e0 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72  te, then the fir
220f0 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65  st 99 row change
22100 73 20 61 72 65 20 70 72 65 73 65 72 76 65 64 0a  s are preserved.
22110 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  but changes to r
22120 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f  ows 100 and beyo
22130 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c  nd never occur.<
22140 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
22150 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e  >IGNORE</b></dt>
22160 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61  .<dd><p> ^When a
22170 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e  n applicable con
22180 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
22190 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 49  n occurs, .the I
221a0 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f 6e  GNORE resolution
221b0 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70 73   algorithm skips
221c0 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61   the one row tha
221d0 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63  t contains.the c
221e0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
221f0 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  ion and continue
22200 73 20 70 72 6f 63 65 73 73 69 6e 67 20 73 75 62  s processing sub
22210 73 65 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66 20  sequent rows.of 
22220 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
22230 74 20 61 73 20 69 66 20 6e 6f 74 68 69 6e 67 20  t as if nothing 
22240 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68 65  went wrong..Othe
22250 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61 6e  r rows before an
22260 64 20 61 66 74 65 72 20 74 68 65 20 72 6f 77 20  d after the row 
22270 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74  that.contained t
22280 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
22290 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69 6e 73 65  olation are inse
222a0 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 0a  rted or updated.
222b0 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72  normally. ^No er
222c0 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
222d0 77 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45 20  when the IGNORE 
222e0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
222f0 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69 73  ion.algorithm is
22300 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a   used.</p></dd>.
22310 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c  .<dt><b>REPLACE<
22320 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
22330 20 5e 57 68 65 6e 20 61 20 5b 55 4e 49 51 55 45   ^When a [UNIQUE
22340 5d 20 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b 45  ] or [PRIMARY KE
22350 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  Y] constraint vi
22360 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
22370 0a 74 68 65 20 52 45 50 4c 41 43 45 20 61 6c 67  .the REPLACE alg
22380 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65 73 20 70  orithm.deletes p
22390 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73  re-existing rows
223a0 20 74 68 61 74 20 61 72 65 20 63 61 75 73 69 6e   that are causin
223b0 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  g the constraint
223c0 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72   violation.prior
223d0 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f 72   to inserting or
223e0 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 63 75   updating the cu
223f0 72 72 65 6e 74 20 72 6f 77 20 61 6e 64 20 74 68  rrent row and th
22400 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e  e command contin
22410 75 65 73 20 0a 65 78 65 63 75 74 69 6e 67 20 6e  ues .executing n
22420 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 5b  ormally..^If a [
22430 4e 4f 54 20 4e 55 4c 4c 5d 20 63 6f 6e 73 74 72  NOT NULL] constr
22440 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
22450 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41  ccurs, the REPLA
22460 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f  CE conflict.reso
22470 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63 65 73 20  lution replaces 
22480 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77  the NULL value w
22490 69 74 68 0a 74 68 65 20 64 65 66 61 75 6c 74 20  ith.the default 
224a0 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63  value for that c
224b0 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65  olumn, or if the
224c0 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64   column has no d
224d0 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68  efault.value, th
224e0 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67  en the ABORT alg
224f0 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 0a  orithm is used..
22500 5e 49 66 20 61 20 5b 43 48 45 43 4b 5d 20 63 6f  ^If a [CHECK] co
22510 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
22520 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52  on occurs, the R
22530 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20  EPLACE conflict 
22540 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72  resolution.algor
22550 69 74 68 6d 20 61 6c 77 61 79 73 20 77 6f 72 6b  ithm always work
22560 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70  s like ABORT.</p
22570 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20  >..<p>^When the 
22580 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
22590 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61   resolution stra
225a0 74 65 67 79 20 64 65 6c 65 74 65 73 20 72 6f 77  tegy deletes row
225b0 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61  s in order to.sa
225c0 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72 61 69  tisfy a constrai
225d0 6e 74 2c 20 5b 43 52 45 41 54 45 20 54 52 49 47  nt, [CREATE TRIG
225e0 47 45 52 20 7c 20 64 65 6c 65 74 65 20 74 72 69  GER | delete tri
225f0 67 67 65 72 73 5d 20 66 69 72 65 20 69 66 20 61  ggers] fire if a
22600 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75  nd only if.[recu
22610 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 20 70  rsive_triggers p
22620 72 61 67 6d 61 20 7c 20 72 65 63 75 72 73 69 76  ragma | recursiv
22630 65 20 74 72 69 67 67 65 72 73 5d 20 61 72 65 20  e triggers] are 
22640 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  enabled.</p>..<p
22650 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 75  >^The [sqlite3_u
22660 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64  pdate_hook | upd
22670 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74  ate hook] is not
22680 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77   invoked for row
22690 73 20 74 68 61 74 0a 61 72 65 20 64 65 6c 65 74  s that.are delet
226a0 65 64 20 62 79 20 74 68 65 20 52 45 50 4c 41 43  ed by the REPLAC
226b0 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  E conflict resol
226c0 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 2e 20  ution strategy. 
226d0 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41   ^Nor does.REPLA
226e0 43 45 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65  CE increment the
226f0 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   [sqlite3_change
22700 73 20 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  s | change count
22710 65 72 5d 2e 0a 54 68 65 20 65 78 63 65 70 74 69  er]..The excepti
22720 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73 20 64  onal behaviors d
22730 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20 70  efined in this p
22740 61 72 61 67 72 61 70 68 20 6d 69 67 68 74 20 63  aragraph might c
22750 68 61 6e 67 65 20 0a 69 6e 20 61 20 66 75 74 75  hange .in a futu
22760 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a  re release.</p>.
22770 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61  </dl>..<p>^The a
22780 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
22790 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c 61  ed in the OR cla
227a0 75 73 65 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  use of an INSERT
227b0 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72 72   or UPDATE.overr
227c0 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69 74  ides any algorit
227d0 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  hm specified in 
227e0 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a  a CREATE TABLE..
227f0 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d  ^If no algorithm
22800 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
22810 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52  ywhere, the ABOR
22820 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  T algorithm is u
22830 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  sed.</p>..<tcl>.
22840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
22890 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72  ection REINDEX r
228a0 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a 0a  eindex REINDEX..
228b0 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
228c0 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d 73  iagram reindex-s
228d0 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
228e0 54 68 65 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d  The REINDEX comm
228f0 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 64  and is used to d
22900 65 6c 65 74 65 20 61 6e 64 20 72 65 63 72 65 61  elete and recrea
22910 74 65 20 69 6e 64 69 63 65 73 20 66 72 6f 6d 20  te indices from 
22920 73 63 72 61 74 63 68 2e 0a 54 68 69 73 20 69 73  scratch..This is
22930 20 75 73 65 66 75 6c 20 77 68 65 6e 20 74 68 65   useful when the
22940 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
22950 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
22960 6e 63 65 20 68 61 73 20 63 68 61 6e 67 65 64 2e  nce has changed.
22970 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  .</p>..<p>^If th
22980 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72  e REINDEX keywor
22990 64 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65  d is not followe
229a0 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  d by a collation
229b0 2d 73 65 71 75 65 6e 63 65 20 6f 72 20 64 61 74  -sequence or dat
229c0 61 62 61 73 65 20 0a 6f 62 6a 65 63 74 20 69 64  abase .object id
229d0 65 6e 74 69 66 69 65 72 2c 20 74 68 65 6e 20 61  entifier, then a
229e0 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c  ll indices in al
229f0 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
22a00 61 73 65 73 20 61 72 65 20 72 65 62 75 69 6c 74  ases are rebuilt
22a10 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45  ...<p>^If the RE
22a20 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73  INDEX keyword is
22a30 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
22a40 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63  ollation-sequenc
22a50 65 20 6e 61 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c  e name, then.all
22a60 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20   indices in all 
22a70 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
22a80 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20  es that use the 
22a90 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20  named collation 
22aa0 73 65 71 75 65 6e 63 65 73 0a 61 72 65 20 72 65  sequences.are re
22ab0 63 72 65 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f  created. ..<p>^O
22ac0 72 2c 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  r, if the argume
22ad0 6e 74 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  nt attached to t
22ae0 68 65 20 52 45 49 4e 44 45 58 20 69 64 65 6e 74  he REINDEX ident
22af0 69 66 69 65 73 20 61 20 73 70 65 63 69 66 69 63  ifies a specific
22b00 20 0a 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   .database table
22b10 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63  , then all indic
22b20 65 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  es attached to t
22b30 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
22b40 65 20 61 72 65 20 72 65 62 75 69 6c 74 2e 20 0a  e are rebuilt. .
22b50 5e 49 66 20 69 74 20 69 64 65 6e 74 69 66 69 65  ^If it identifie
22b60 73 20 61 20 73 70 65 63 69 66 69 63 20 64 61 74  s a specific dat
22b70 61 62 61 73 65 20 69 6e 64 65 78 2c 20 74 68 65  abase index, the
22b80 6e 20 6a 75 73 74 20 74 68 61 74 20 69 6e 64 65  n just that inde
22b90 78 20 69 73 20 72 65 63 72 65 61 74 65 64 2e 0a  x is recreated..
22ba0 0a 3c 70 3e 5e 46 6f 72 20 61 20 63 6f 6d 6d 61  .<p>^For a comma
22bb0 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  nd of the form "
22bc0 52 45 49 4e 44 45 58 20 3c 69 3e 6e 61 6d 65 3c  REINDEX <i>name<
22bd0 2f 69 3e 22 2c 20 61 20 6d 61 74 63 68 0a 61 67  /i>", a match.ag
22be0 61 69 6e 73 74 20 3c 79 79 74 65 72 6d 3e 63 6f  ainst <yyterm>co
22bf0 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3c 2f 79 79  llation-name</yy
22c00 74 65 72 6d 3e 20 74 61 6b 65 73 20 70 72 65 63  term> takes prec
22c10 65 64 65 6e 63 65 20 6f 76 65 72 20 61 20 6d 61  edence over a ma
22c20 74 63 68 0a 61 67 61 69 6e 73 74 20 3c 79 79 74  tch.against <yyt
22c30 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f  erm>index-name</
22c40 79 79 74 65 72 6d 3e 20 6f 72 20 3c 79 79 74 65  yyterm> or <yyte
22c50 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79  rm>table-name</y
22c60 79 74 65 72 6d 3e 2e 0a 54 68 69 73 20 61 6d 62  yterm>..This amb
22c70 69 67 75 69 74 79 20 69 6e 20 74 68 65 20 73 79  iguity in the sy
22c80 6e 74 61 78 20 6d 61 79 20 62 65 20 61 76 6f 69  ntax may be avoi
22c90 64 65 64 20 62 79 20 61 6c 77 61 79 73 20 73 70  ded by always sp
22ca0 65 63 69 66 79 69 6e 67 20 61 0a 3c 79 79 74 65  ecifying a.<yyte
22cb0 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f  rm>schema-name</
22cc0 79 79 74 65 72 6d 3e 20 77 68 65 6e 20 72 65 69  yyterm> when rei
22cd0 6e 64 65 78 69 6e 67 20 61 20 73 70 65 63 69 66  ndexing a specif
22ce0 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ic table or inde
22cf0 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  x...<tcl>.######
22d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22d40 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
22d50 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63  n REPLACE replac
22d60 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c  e REPLACE..</tcl
22d70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41  >..<p>^The REPLA
22d80 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e  CE command is an
22d90 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 22   alias for the "
22da0 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49  [ON CONFLICT | I
22db0 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45  NSERT OR REPLACE
22dc0 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74 68  ]".variant of th
22dd0 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61  e [INSERT] comma
22de0 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61 73  nd.  .This alias
22df0 20 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72   is provided for
22e00 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 6f   compatibility o
22e10 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
22e20 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65 20  e engines.  See 
22e30 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f  the .[INSERT] co
22e40 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74  mmand documentat
22e50 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ion for addition
22e60 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  al information.<
22e70 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23  /p>  ..<tcl>.###
22e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22e90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22ec0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
22ed0 74 69 6f 6e 20 7b 57 49 54 48 20 63 6c 61 75 73  tion {WITH claus
22ee0 65 7d 20 77 69 74 68 20 7b 7b 63 6f 6d 6d 6f 6e  e} with {{common
22ef0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
22f00 6e 73 7d 20 57 49 54 48 7d 0a 0a 52 65 63 75 72  ns} WITH}..Recur
22f10 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
22f20 6d 20 77 69 74 68 2d 63 6c 61 75 73 65 0a 3c 2f  m with-clause.</
22f30 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f 6e 20  tcl>..<p>Common 
22f40 54 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e  Table Expression
22f50 73 20 6f 72 20 43 54 45 73 20 61 63 74 20 6c 69  s or CTEs act li
22f60 6b 65 20 74 65 6d 70 6f 72 61 72 79 20 5b 76 69  ke temporary [vi
22f70 65 77 73 5d 20 74 68 61 74 20 65 78 69 73 74 0a  ews] that exist.
22f80 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20 64 75 72  only for the dur
22f90 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c  ation of a singl
22fa0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  e SQL statement.
22fb0 20 20 54 68 65 72 65 20 61 72 65 20 74 77 6f 20    There are two 
22fc0 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d 6d 6f 6e 20  kinds of.common 
22fd0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
22fe0 73 3a 20 22 6f 72 64 69 6e 61 72 79 22 20 61 6e  s: "ordinary" an
22ff0 64 20 22 72 65 63 75 72 73 69 76 65 22 2e 20 4f  d "recursive". O
23000 72 64 69 6e 61 72 79 20 0a 63 6f 6d 6d 6f 6e 20  rdinary .common 
23010 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
23020 73 20 61 72 65 20 68 65 6c 70 66 75 6c 20 66 6f  s are helpful fo
23030 72 20 6d 61 6b 69 6e 67 0a 71 75 65 72 69 65 73  r making.queries
23040 20 65 61 73 69 65 72 20 74 6f 20 75 6e 64 65 72   easier to under
23050 73 74 61 6e 64 20 62 79 20 66 61 63 74 6f 72 69  stand by factori
23060 6e 67 0a 73 75 62 71 75 65 72 69 65 73 20 6f 75  ng.subqueries ou
23070 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 53 51  t of the main SQ
23080 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 52 65 63  L statement..Rec
23090 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61  ursive common ta
230a0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 0a  ble expressions.
230b0 70 72 6f 76 69 64 65 20 74 68 65 20 61 62 69 6c  provide the abil
230c0 69 74 79 20 74 6f 20 64 6f 20 68 69 65 72 61 72  ity to do hierar
230d0 63 68 69 63 61 6c 20 6f 72 0a 72 65 63 75 72 73  chical or.recurs
230e0 69 76 65 20 71 75 65 72 69 65 73 20 6f 66 20 74  ive queries of t
230f0 72 65 65 73 20 61 6e 64 20 67 72 61 70 68 73 2c  rees and graphs,
23100 20 61 20 63 61 70 61 62 69 6c 69 74 79 0a 74 68   a capability.th
23110 61 74 20 69 73 20 6e 6f 74 20 6f 74 68 65 72 77  at is not otherw
23120 69 73 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e  ise available in
23130 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   the SQL languag
23140 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63 6f 6d 6d 6f  e...<p>All commo
23150 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
23160 6f 6e 73 20 28 6f 72 64 69 6e 61 72 79 20 61 6e  ons (ordinary an
23170 64 20 72 65 63 75 72 73 69 76 65 29 20 61 72 65  d recursive) are
23180 20 0a 63 72 65 61 74 65 64 20 62 79 20 70 72 65   .created by pre
23190 70 65 6e 64 69 6e 67 20 61 20 57 49 54 48 20 63  pending a WITH c
231a0 6c 61 75 73 65 20 69 6e 20 66 72 6f 6e 74 20 6f  lause in front o
231b0 66 20 61 20 5b 53 45 4c 45 43 54 5d 2c 20 5b 49  f a [SELECT], [I
231c0 4e 53 45 52 54 5d 2c 20 5b 44 45 4c 45 54 45 5d  NSERT], [DELETE]
231d0 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74  ,.or [UPDATE] st
231e0 61 74 65 6d 65 6e 74 2e 20 20 41 20 73 69 6e 67  atement.  A sing
231f0 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 63  le WITH clause c
23200 61 6e 20 73 70 65 63 69 66 79 20 6f 6e 65 20 6f  an specify one o
23210 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e 20 74 61  r more.common ta
23220 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  ble expressions,
23230 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 20 61   some of which a
23240 72 65 20 6f 72 64 69 6e 61 72 79 20 61 6e 64 20  re ordinary and 
23250 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 0a 61 72  some of which.ar
23260 65 20 72 65 63 75 72 73 69 76 65 2e 0a 0a 3c 74  e recursive...<t
23270 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f  cl>hd_fragment o
23280 72 64 69 6e 61 72 79 63 74 65 20 7b 6f 72 64 69  rdinarycte {ordi
23290 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  nary common tabl
232a0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 3c 2f  e expressions}</
232b0 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64 69 6e 61 72  tcl>.<h3>Ordinar
232c0 79 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45  y Common Table E
232d0 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a  xpressions</h3>.
232e0 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e 61 72 79 20  .<p>An ordinary 
232f0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
23300 72 65 73 73 69 6f 6e 20 77 6f 72 6b 73 20 61 73  ression works as
23310 20 69 66 20 69 74 20 77 65 72 65 20 61 20 5b 76   if it were a [v
23320 69 65 77 5d 20 74 68 61 74 0a 65 78 69 73 74 73  iew] that.exists
23330 20 66 6f 72 20 74 68 65 20 64 75 72 61 74 69 6f   for the duratio
23340 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 73 74  n of a single st
23350 61 74 65 6d 65 6e 74 2e 20 20 4f 72 64 69 6e 61  atement.  Ordina
23360 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 0a  ry common table.
23370 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
23380 75 73 65 66 75 6c 20 66 6f 72 20 66 61 63 74 6f  useful for facto
23390 72 69 6e 67 20 6f 75 74 20 73 75 62 71 75 65 72  ring out subquer
233a0 69 65 73 20 61 6e 64 20 6d 61 6b 69 6e 67 20 74  ies and making t
233b0 68 65 20 6f 76 65 72 61 6c 6c 0a 53 51 4c 20 73  he overall.SQL s
233c0 74 61 74 65 6d 65 6e 74 20 65 61 73 69 65 72 20  tatement easier 
233d0 74 6f 20 72 65 61 64 20 61 6e 64 20 75 6e 64 65  to read and unde
233e0 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e 41 20 57 49  rstand...<p>A WI
233f0 54 48 20 63 6c 61 75 73 65 20 63 61 6e 20 63 6f  TH clause can co
23400 6e 74 61 69 6e 20 6f 72 64 69 6e 61 72 79 20 63  ntain ordinary c
23410 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
23420 65 73 73 69 6f 6e 73 20 65 76 65 6e 20 69 66 0a  essions even if.
23430 69 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20  it includes the 
23440 52 45 43 55 52 53 49 56 45 20 6b 65 79 77 6f 72  RECURSIVE keywor
23450 64 2e 20 20 54 68 65 20 75 73 65 20 6f 66 20 52  d.  The use of R
23460 45 43 55 52 53 49 56 45 20 64 6f 65 73 20 6e 6f  ECURSIVE does no
23470 74 20 66 6f 72 63 65 0a 63 6f 6d 6d 6f 6e 20 74  t force.common t
23480 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
23490 20 74 6f 20 62 65 20 72 65 63 75 72 73 69 76 65   to be recursive
234a0 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67  ...<tcl>.hd_frag
234b0 6d 65 6e 74 20 72 65 63 75 72 73 69 76 65 63 74  ment recursivect
234c0 65 20 7b 72 65 63 75 72 73 69 76 65 20 63 6f 6d  e {recursive com
234d0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
234e0 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65 63 75 72 73  sions} \.{recurs
234f0 69 76 65 20 71 75 65 72 79 7d 0a 3c 2f 74 63 6c  ive query}.</tcl
23500 3e 0a 3c 68 33 3e 52 65 63 75 72 73 69 76 65 20  >.<h3>Recursive 
23510 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70  Common Table Exp
23520 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c  ressions</h3>..<
23530 70 3e 41 20 72 65 63 75 72 73 69 76 65 20 63 6f  p>A recursive co
23540 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
23550 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ssion can be use
23560 64 20 74 6f 20 77 72 69 74 65 20 61 20 71 75 65  d to write a que
23570 72 79 20 74 68 61 74 0a 77 61 6c 6b 73 20 61 20  ry that.walks a 
23580 74 72 65 65 20 6f 72 20 67 72 61 70 68 2e 20 20  tree or graph.  
23590 41 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d  A recursive comm
235a0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
235b0 69 6f 6e 20 68 61 73 20 74 68 65 20 73 61 6d 65  ion has the same
235c0 0a 62 61 73 69 63 20 73 79 6e 74 61 78 20 61 73  .basic syntax as
235d0 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d   an ordinary com
235e0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
235f0 73 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20 74  sion, but with t
23600 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 61 64 64  he following.add
23610 69 74 69 6f 6e 61 6c 20 66 65 61 74 75 72 65 73  itional features
23620 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54 68 65  :..<ol>.<li> The
23630 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22   "[select-stmt]"
23640 0a 20 20 20 20 20 6d 75 73 74 20 62 65 20 61 20  .     must be a 
23650 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74  [compound select
23660 5d 20 77 68 65 72 65 20 74 68 65 20 72 69 67 68  ] where the righ
23670 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70 6f 75 6e 64  t-most [compound
23680 2d 6f 70 65 72 61 74 6f 72 5d 20 69 73 0a 20 20  -operator] is.  
23690 20 20 20 65 69 74 68 65 72 20 55 4e 49 4f 4e 20     either UNION 
236a0 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c 6c  or UNION ALL..<l
236b0 69 3e 20 54 68 65 20 74 61 62 6c 65 20 6e 61 6d  i> The table nam
236c0 65 64 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68  ed on the left-h
236d0 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65 20  and side of the 
236e0 41 53 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20  AS keyword must 
236f0 61 70 70 65 61 72 0a 20 20 20 20 20 65 78 61 63  appear.     exac
23700 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20  tly once in the 
23710 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 74  FROM clause of t
23720 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 53 45  he right-most SE
23730 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 20  LECT statement. 
23740 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f      of the compo
23750 75 6e 64 20 73 65 6c 65 63 74 2c 20 61 6e 64 20  und select, and 
23760 6e 6f 77 68 65 72 65 20 65 6c 73 65 2e 0a 3c 2f  nowhere else..</
23770 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70 75 74 20 69  ol>..<p>To put i
23780 74 20 61 6e 6f 74 68 65 72 20 77 61 79 2c 20 61  t another way, a
23790 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f   recursive commo
237a0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
237b0 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b 20 6c 69 6b  on must.look lik
237c0 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a  e the following:
237d0 0a 0a 3c 74 63 6c 3e 52 65 63 75 72 73 69 76 65  ..<tcl>Recursive
237e0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65  BubbleDiagram re
237f0 63 75 72 73 69 76 65 2d 63 74 65 3c 2f 74 63 6c  cursive-cte</tcl
23800 3e 0a 0a 3c 70 3e 43 61 6c 6c 20 74 68 65 20 74  >..<p>Call the t
23810 61 62 6c 65 20 6e 61 6d 65 64 20 62 79 20 74 68  able named by th
23820 65 20 5b 63 74 65 2d 74 61 62 6c 65 2d 6e 61 6d  e [cte-table-nam
23830 65 5d 20 69 6e 20 61 20 72 65 63 75 72 73 69 76  e] in a recursiv
23840 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e.common table e
23850 78 70 72 65 73 73 69 6f 6e 20 74 68 65 20 22 72  xpression the "r
23860 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 22 2e  ecursive table".
23870 0a 49 6e 20 74 68 65 20 5b 72 65 63 75 72 73 69  .In the [recursi
23880 76 65 2d 63 74 65 5d 20 62 75 62 62 6c 65 20 64  ve-cte] bubble d
23890 69 61 67 72 61 6d 20 61 62 6f 76 65 2c 20 74 68  iagram above, th
238a0 65 20 72 65 63 75 72 73 69 76 65 0a 74 61 62 6c  e recursive.tabl
238b0 65 20 6d 75 73 74 20 61 70 70 65 61 72 20 65 78  e must appear ex
238c0 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68  actly once in th
238d0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
238e0 20 74 68 65 20 0a 3c 79 79 74 65 72 6d 3e 72 65   the .<yyterm>re
238f0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f  cursive-select</
23900 79 79 74 65 72 6d 3e 0a 61 6e 64 20 6d 75 73 74  yyterm>.and must
23910 20 6e 6f 74 20 61 70 70 65 61 72 20 61 6e 79 77   not appear anyw
23920 68 65 72 65 20 65 6c 73 65 20 69 6e 20 65 69 74  here else in eit
23930 68 65 72 20 74 68 65 0a 3c 79 79 74 65 72 6d 3e  her the.<yyterm>
23940 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f  initial-select</
23950 79 79 74 65 72 6d 3e 20 6f 72 20 74 68 65 0a 3c  yyterm> or the.<
23960 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65  yyterm>recursive
23970 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e  -select</yyterm>
23980 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 75 62 71  , including subq
23990 75 65 72 69 65 73 2e 0a 54 68 65 20 3c 79 79 74  ueries..The <yyt
239a0 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65  erm>initial-sele
239b0 63 74 3c 2f 79 79 74 65 72 6d 3e 20 6d 61 79 20  ct</yyterm> may 
239c0 62 65 0a 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73  be.a [compound s
239d0 65 6c 65 63 74 5d 2c 20 62 75 74 20 69 74 20 6d  elect], but it m
239e0 61 79 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61  ay not include a
239f0 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d 49  n ORDER BY, LIMI
23a00 54 2c 20 6f 72 20 4f 46 46 53 45 54 2e 0a 54 68  T, or OFFSET..Th
23a10 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
23a20 63 74 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d  ct must be a sim
23a30 70 6c 65 20 73 65 6c 65 63 74 2c 20 6e 6f 74 20  ple select, not 
23a40 61 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 54 68 65  a compound.  The
23a50 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  .recursive-selec
23a60 74 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  t is allowed to 
23a70 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45 52  include an ORDER
23a80 20 42 59 2c 20 4c 49 4d 49 54 2c 20 61 6e 64 2f   BY, LIMIT, and/
23a90 6f 72 20 4f 46 46 53 45 54 2e 0a 0a 3c 70 3e 54  or OFFSET...<p>T
23aa0 68 65 20 62 61 73 69 63 20 61 6c 67 6f 72 69 74  he basic algorit
23ab0 68 6d 20 66 6f 72 20 63 6f 6d 70 75 74 69 6e 67  hm for computing
23ac0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
23ad0 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61  the recursive ta
23ae0 62 6c 65 0a 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ble.is as follow
23af0 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 52 75  s:..<ol>.<li> Ru
23b00 6e 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e  n the <yyterm>in
23b10 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79  itial-select</yy
23b20 74 65 72 6d 3e 20 61 6e 64 20 61 64 64 20 74 68  term> and add th
23b30 65 20 72 65 73 75 6c 74 73 20 74 6f 20 61 20 71  e results to a q
23b40 75 65 75 65 2e 0a 3c 6c 69 3e 20 57 68 69 6c 65  ueue..<li> While
23b50 20 74 68 65 20 71 75 65 75 65 20 69 73 20 6e 6f   the queue is no
23b60 74 20 65 6d 70 74 79 3a 0a 3c 6f 6c 20 74 79 70  t empty:.<ol typ
23b70 65 3d 22 61 22 3e 0a 3c 6c 69 3e 20 45 78 74 72  e="a">.<li> Extr
23b80 61 63 74 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  act a single row
23b90 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 2e   from the queue.
23ba0 0a 3c 6c 69 3e 20 49 6e 73 65 72 74 20 74 68 61  .<li> Insert tha
23bb0 74 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e 74  t single row int
23bc0 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
23bd0 74 61 62 6c 65 0a 3c 6c 69 3e 20 50 72 65 74 65  table.<li> Prete
23be0 6e 64 20 74 68 61 74 20 74 68 65 20 73 69 6e 67  nd that the sing
23bf0 6c 65 20 72 6f 77 20 6a 75 73 74 20 65 78 74 72  le row just extr
23c00 61 63 74 65 64 20 69 73 20 74 68 65 20 6f 6e 6c  acted is the onl
23c10 79 0a 20 20 20 20 20 72 6f 77 20 69 6e 20 74 68  y.     row in th
23c20 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
23c30 65 20 61 6e 64 20 72 75 6e 20 74 68 65 20 72 65  e and run the re
23c40 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 0a  cursive-select,.
23c50 20 20 20 20 20 61 64 64 69 6e 67 20 61 6c 6c 20       adding all 
23c60 72 65 73 75 6c 74 73 20 74 6f 20 74 68 65 20 71  results to the q
23c70 75 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 6f 6c  ueue..</ol>.</ol
23c80 3e 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63 20  >..<p>The basic 
23c90 70 72 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20  procedure above 
23ca0 6d 61 79 20 6d 6f 64 69 66 69 65 64 20 62 79 20  may modified by 
23cb0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64  the following ad
23cc0 64 69 74 69 6f 6e 61 6c 20 72 75 6c 65 73 3a 0a  ditional rules:.
23cd0 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  .<ul>.<li><p>.  
23ce0 49 66 20 61 20 55 4e 49 4f 4e 20 6f 70 65 72 61  If a UNION opera
23cf0 74 6f 72 20 63 6f 6e 6e 65 63 74 73 20 74 68 65  tor connects the
23d00 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c   <yyterm>initial
23d10 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e  -select</yyterm>
23d20 20 77 69 74 68 20 74 68 65 0a 20 20 3c 79 79 74   with the.  <yyt
23d30 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65  erm>recursive-se
23d40 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 2c 20 74  lect</yyterm>, t
23d50 68 65 6e 20 6f 6e 6c 79 20 61 64 64 20 72 6f 77  hen only add row
23d60 73 20 74 6f 20 74 68 65 20 71 75 65 75 65 20 69  s to the queue i
23d70 66 20 0a 20 20 6e 6f 20 69 64 65 6e 74 69 63 61  f .  no identica
23d80 6c 20 72 6f 77 20 68 61 73 0a 20 20 62 65 65 6e  l row has.  been
23d90 20 70 72 65 76 69 6f 75 73 6c 79 20 61 64 64 65   previously adde
23da0 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20  d to the queue. 
23db0 20 52 65 70 65 61 74 65 64 20 72 6f 77 73 20 61   Repeated rows a
23dc0 72 65 20 64 69 73 63 61 72 64 65 64 20 62 65 66  re discarded bef
23dd0 6f 72 65 20 62 65 69 6e 67 0a 20 20 61 64 64 65  ore being.  adde
23de0 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 20 65  d to the queue e
23df0 76 65 6e 20 69 66 20 74 68 65 20 72 65 70 65 61  ven if the repea
23e00 74 65 64 20 72 6f 77 73 20 68 61 76 65 20 61 6c  ted rows have al
23e10 72 65 61 64 79 20 62 65 65 6e 20 65 78 74 72 61  ready been extra
23e20 63 74 65 64 0a 20 20 66 72 6f 6d 20 74 68 65 20  cted.  from the 
23e30 71 75 65 75 65 20 62 79 20 74 68 65 20 72 65 63  queue by the rec
23e40 75 72 73 69 6f 6e 20 73 74 65 70 2e 20 20 49 66  ursion step.  If
23e50 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73   the operator is
23e60 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74 68   UNION ALL,.  th
23e70 65 6e 20 61 6c 6c 20 72 6f 77 73 20 67 65 6e 65  en all rows gene
23e80 72 61 74 65 64 20 62 79 20 62 6f 74 68 20 74 68  rated by both th
23e90 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61  e <yyterm>initia
23ea0 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  l-select</yyterm
23eb0 3e 20 61 6e 64 20 74 68 65 0a 20 20 3c 79 79 74  > and the.  <yyt
23ec0 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65  erm>recursive-se
23ed0 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61 72  lect</yyterm> ar
23ee0 65 20 61 6c 77 61 79 73 20 61 64 64 65 64 20 74  e always added t
23ef0 6f 20 74 68 65 20 71 75 65 75 65 20 65 76 65 6e  o the queue even
23f00 20 69 66 0a 20 20 74 68 65 79 20 61 72 65 20 72   if.  they are r
23f10 65 70 65 61 74 73 2e 0a 20 20 57 68 65 6e 20 64  epeats..  When d
23f20 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 20  etermining if a 
23f30 72 6f 77 20 69 73 20 72 65 70 65 61 74 65 64 2c  row is repeated,
23f40 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 63 6f 6d   NULL values com
23f50 70 61 72 65 0a 20 20 65 71 75 61 6c 20 74 6f 20  pare.  equal to 
23f60 6f 6e 65 20 61 6e 6f 74 68 65 72 20 61 6e 64 20  one another and 
23f70 6e 6f 74 20 65 71 75 61 6c 20 74 6f 20 61 6e 79  not equal to any
23f80 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 0a 3c 6c   other value..<l
23f90 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4c 49 4d 49  i><p>.  The LIMI
23fa0 54 20 63 6c 61 75 73 65 2c 20 69 66 20 70 72 65  T clause, if pre
23fb0 73 65 6e 74 2c 20 64 65 74 65 72 6d 69 6e 65 73  sent, determines
23fc0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
23fd0 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74  ber of rows that
23fe0 0a 20 20 77 69 6c 6c 20 65 76 65 72 20 62 65 20  .  will ever be 
23ff0 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65 63  added to the rec
24000 75 72 73 69 76 65 20 74 61 62 6c 65 20 69 6e 20  ursive table in 
24010 73 74 65 70 20 32 62 2e 0a 20 20 4f 6e 63 65 20  step 2b..  Once 
24020 74 68 65 20 6c 69 6d 69 74 20 69 73 20 72 65 61  the limit is rea
24030 63 68 65 64 2c 20 74 68 65 20 72 65 63 75 72 73  ched, the recurs
24040 69 6f 6e 20 73 74 6f 70 73 2e 0a 20 20 41 20 6c  ion stops..  A l
24050 69 6d 69 74 20 6f 66 20 7a 65 72 6f 20 6d 65 61  imit of zero mea
24060 6e 73 20 74 68 61 74 20 6e 6f 20 72 6f 77 73 20  ns that no rows 
24070 61 72 65 20 65 76 65 72 20 61 64 64 65 64 20 74  are ever added t
24080 6f 20 74 68 65 0a 20 20 72 65 63 75 72 73 69 76  o the.  recursiv
24090 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 61 20 6e  e table, and a n
240a0 65 67 61 74 69 76 65 20 6c 69 6d 69 74 20 6d 65  egative limit me
240b0 61 6e 73 20 61 6e 20 75 6e 6c 69 6d 69 74 65 64  ans an unlimited
240c0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a   number of rows.
240d0 20 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 74    may be added t
240e0 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
240f0 74 61 62 6c 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20  table..<li><p>. 
24100 20 54 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75   The OFFSET clau
24110 73 65 2c 20 69 66 20 69 74 20 69 73 20 70 72 65  se, if it is pre
24120 73 65 6e 74 20 61 6e 64 20 68 61 73 20 61 20 70  sent and has a p
24130 6f 73 69 74 69 76 65 20 76 61 6c 75 65 20 4e 2c  ositive value N,
24140 20 70 72 65 76 65 6e 74 73 20 74 68 65 0a 20 20   prevents the.  
24150 66 69 72 73 74 20 4e 20 72 6f 77 73 20 66 72 6f  first N rows fro
24160 6d 20 62 65 69 6e 67 20 61 64 64 65 64 20 74 6f  m being added to
24170 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
24180 61 62 6c 65 2e 0a 20 20 54 68 65 20 66 69 72 73  able..  The firs
24190 74 20 4e 20 72 6f 77 73 20 61 72 65 20 73 74 69  t N rows are sti
241a0 6c 6c 20 70 72 6f 63 65 73 73 65 64 0a 20 20 62  ll processed.  b
241b0 79 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 72 65  y the <yyterm>re
241c0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f  cursive-select</
241d0 79 79 74 65 72 6d 3e 20 26 6d 64 61 73 68 3b 20  yyterm> &mdash; 
241e0 74 68 65 79 0a 20 20 6a 75 73 74 20 61 72 65 20  they.  just are 
241f0 6e 6f 74 20 61 64 64 65 64 20 74 6f 20 74 68 65  not added to the
24200 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
24210 2e 20 20 52 6f 77 73 20 61 72 65 20 6e 6f 74 20  .  Rows are not 
24220 63 6f 75 6e 74 65 64 20 74 6f 77 61 72 64 0a 20  counted toward. 
24230 20 66 75 6c 66 69 6c 6c 69 6e 67 20 74 68 65 20   fulfilling the 
24240 4c 49 4d 49 54 20 75 6e 74 69 6c 20 61 6c 6c 20  LIMIT until all 
24250 4f 46 46 53 45 54 20 72 6f 77 73 20 68 61 76 65  OFFSET rows have
24260 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e 0a 3c   been skipped..<
24270 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 6e 20 4f  li><p>.  If an O
24280 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
24290 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20 64 65  s present, it de
242a0 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6f 72 64  termines the ord
242b0 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
242c0 0a 20 20 61 72 65 20 65 78 74 72 61 63 74 65 64  .  are extracted
242d0 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20   from the queue 
242e0 69 6e 20 73 74 65 70 20 32 61 2e 20 20 49 66 20  in step 2a.  If 
242f0 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 52 44 45  there is no ORDE
24300 52 20 42 59 20 63 6c 61 75 73 65 2c 0a 20 20 74  R BY clause,.  t
24310 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 69 6e  hen the order in
24320 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
24330 65 78 74 72 61 63 74 65 64 20 69 73 20 75 6e 64  extracted is und
24340 65 66 69 6e 65 64 2e 20 20 28 49 6e 20 74 68 65  efined.  (In the
24350 20 63 75 72 72 65 6e 74 0a 20 20 69 6d 70 6c 65   current.  imple
24360 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 71  mentation, the q
24370 75 65 75 65 20 62 65 63 6f 6d 65 73 20 61 20 46  ueue becomes a F
24380 49 46 4f 20 69 66 20 74 68 65 20 4f 52 44 45 52  IFO if the ORDER
24390 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f 6d   BY clause is om
243a0 69 74 74 65 64 2c 0a 20 20 62 75 74 20 61 70 70  itted,.  but app
243b0 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64  lications should
243c0 20 6e 6f 74 20 64 65 70 65 6e 64 20 6f 6e 20 74   not depend on t
243d0 68 61 74 20 66 61 63 74 20 73 69 6e 63 65 20 69  hat fact since i
243e0 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65 2e 29  t might change.)
243f0 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ul>..<tcl>hd_
24400 66 72 61 67 6d 65 6e 74 20 72 63 65 78 31 3c 2f  fragment rcex1</
24410 74 63 6c 3e 0a 3c 68 34 3e 52 65 63 75 72 73 69  tcl>.<h4>Recursi
24420 76 65 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65  ve Query Example
24430 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66  s</h4>..<p>The f
24440 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20 72  ollowing query r
24450 65 74 75 72 6e 73 20 61 6c 6c 20 69 6e 74 65 67  eturns all integ
24460 65 72 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e  ers between 1 an
24470 64 20 31 30 30 30 30 30 30 3a 0a 0a 3c 62 6c 6f  d 1000000:..<blo
24480 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
24490 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 63  TH RECURSIVE.  c
244a0 6e 74 28 78 29 20 41 53 20 28 56 41 4c 55 45 53  nt(x) AS (VALUES
244b0 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  (1) UNION ALL SE
244c0 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e  LECT x+1 FROM cn
244d0 74 20 57 48 45 52 45 20 78 3c 31 30 30 30 30 30  t WHERE x<100000
244e0 30 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  0).SELECT x FROM
244f0 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c   cnt;.</pre></bl
24500 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f  ockquote>..<p>Co
24510 6e 73 69 64 65 72 20 68 6f 77 20 74 68 69 73 20  nsider how this 
24520 71 75 65 72 79 20 77 6f 72 6b 73 2e 20 20 54 68  query works.  Th
24530 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  e initial-select
24540 0a 72 75 6e 73 20 66 69 72 73 74 20 61 6e 64 20  .runs first and 
24550 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65  returns a single
24560 20 72 6f 77 0a 77 69 74 68 20 61 20 73 69 6e 67   row.with a sing
24570 6c 65 20 63 6f 6c 75 6d 6e 20 22 31 22 2e 20 20  le column "1".  
24580 54 68 69 73 20 6f 6e 65 20 72 6f 77 20 69 73 20  This one row is 
24590 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75 65  added to the que
245a0 75 65 2e 20 20 49 6e 0a 73 74 65 70 20 32 61 2c  ue.  In.step 2a,
245b0 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73   that one row is
245c0 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
245d0 74 68 65 20 71 75 65 75 65 20 61 6e 64 20 61 64  the queue and ad
245e0 64 65 64 20 74 6f 20 22 63 6e 74 22 2e 0a 54 68  ded to "cnt"..Th
245f0 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  en the recursive
24600 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e 20 69  -select is run i
24610 6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77 69 74  n accordance wit
24620 68 20 73 74 65 70 20 32 63 20 67 65 6e 65 72 61  h step 2c genera
24630 74 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20 6e 65  ting.a single ne
24640 77 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65  w row with value
24650 20 22 32 22 20 74 6f 20 61 64 64 20 74 6f 20 74   "2" to add to t
24660 68 65 20 71 75 65 75 65 2e 20 20 54 68 65 20 71  he queue.  The q
24670 75 65 75 65 20 73 74 69 6c 6c 0a 68 61 73 20 6f  ueue still.has o
24680 6e 65 20 72 6f 77 2c 20 73 6f 20 73 74 65 70 20  ne row, so step 
24690 32 20 72 65 70 65 61 74 73 2e 20 20 54 68 65 20  2 repeats.  The 
246a0 22 32 22 20 72 6f 77 20 69 73 20 65 78 74 72 61  "2" row is extra
246b0 63 74 65 64 20 61 6e 64 20 61 64 64 65 64 20 74  cted and added t
246c0 6f 20 74 68 65 0a 72 65 63 75 72 73 69 76 65 20  o the.recursive 
246d0 74 61 62 6c 65 20 62 79 20 73 74 65 70 73 20 32  table by steps 2
246e0 61 20 61 6e 64 20 32 62 2e 20 20 54 68 65 6e 20  a and 2b.  Then 
246f0 74 68 65 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69  the row containi
24700 6e 67 20 32 20 69 73 20 75 73 65 64 20 0a 61 73  ng 2 is used .as
24710 20 69 66 20 69 74 20 77 65 72 65 20 74 68 65 20   if it were the 
24720 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65 6e 74  complete content
24730 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76   of the recursiv
24740 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
24750 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  .recursive-selec
24760 74 20 69 73 20 72 75 6e 20 61 67 61 69 6e 2c 20  t is run again, 
24770 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 72  resulting in a r
24780 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20 22 33  ow with value "3
24790 22 20 62 65 69 6e 67 20 61 64 64 65 64 0a 74 6f  " being added.to
247a0 20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 69   the queue.  Thi
247b0 73 20 72 65 70 65 61 74 73 20 39 39 39 39 39 39  s repeats 999999
247c0 20 74 69 6d 65 73 20 75 6e 74 69 6c 20 66 69 6e   times until fin
247d0 61 6c 6c 79 20 61 74 20 73 74 65 70 20 32 61 20  ally at step 2a 
247e0 74 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65 20 6f  the.only value o
247f0 6e 20 74 68 65 20 71 75 65 75 65 20 69 73 20 61  n the queue is a
24800 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20   row containing 
24810 31 30 30 30 30 30 30 2e 20 20 54 68 61 74 20 72  1000000.  That r
24820 6f 77 20 69 73 0a 65 78 74 72 61 63 74 65 64 20  ow is.extracted 
24830 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65  and added to the
24840 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
24850 2e 20 20 42 75 74 20 74 68 69 73 20 74 69 6d 65  .  But this time
24860 2c 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  , the.WHERE clau
24870 73 65 20 63 61 75 73 65 73 20 74 68 65 20 72 65  se causes the re
24880 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74  cursive-select t
24890 6f 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f 77 73  o return no rows
248a0 2c 20 73 6f 20 74 68 65 0a 71 75 65 75 65 20 72  , so the.queue r
248b0 65 6d 61 69 6e 73 20 65 6d 70 74 79 20 61 6e 64  emains empty and
248c0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73   the recursion s
248d0 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70 74  tops...<p><b>Opt
248e0 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65 3a 3c  imization note:<
248f0 2f 62 3e 0a 49 6e 20 74 68 65 20 64 69 73 63 75  /b>.In the discu
24900 73 73 69 6f 6e 20 61 62 6f 76 65 2c 20 73 74 61  ssion above, sta
24910 74 65 6d 65 6e 74 73 20 6c 69 6b 65 20 22 69 6e  tements like "in
24920 73 65 72 74 20 74 68 65 20 72 6f 77 20 69 6e 74  sert the row int
24930 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o.the recursive 
24940 74 61 62 6c 65 22 20 73 68 6f 75 6c 64 20 62 65  table" should be
24950 20 75 6e 64 65 72 73 74 6f 6f 64 20 63 6f 6e 63   understood conc
24960 65 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20 6c 69  eptually, not li
24970 74 65 72 61 6c 6c 79 2e 0a 49 74 20 73 6f 75 6e  terally..It soun
24980 64 73 20 61 73 20 69 66 20 53 51 4c 69 74 65 20  ds as if SQLite 
24990 69 73 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20  is accumulating 
249a0 61 20 68 75 67 65 20 74 61 62 6c 65 0a 63 6f 6e  a huge table.con
249b0 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c 6c  taining one mill
249c0 69 6f 6e 20 72 6f 77 73 2c 20 74 68 65 6e 20 67  ion rows, then g
249d0 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64 20 73 63  oing back and sc
249e0 61 6e 6e 69 6e 67 20 74 68 61 74 20 74 61 62 6c  anning that tabl
249f0 65 0a 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f  e.from top to bo
24a00 74 74 6f 6d 20 74 6f 20 67 65 6e 65 72 61 74 65  ttom to generate
24a10 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 57 68   the result.  Wh
24a20 61 74 20 72 65 61 6c 6c 79 20 68 61 70 70 65 6e  at really happen
24a30 73 0a 69 73 20 74 68 61 74 20 74 68 65 20 71 75  s.is that the qu
24a40 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 73 65  ery optimizer se
24a50 65 73 20 74 68 61 74 20 76 61 6c 75 65 73 20 69  es that values i
24a60 6e 20 74 68 65 0a 22 63 6e 74 22 20 72 65 63 75  n the."cnt" recu
24a70 72 73 69 76 65 20 74 61 62 6c 65 20 61 72 65 20  rsive table are 
24a80 6f 6e 6c 79 20 75 73 65 64 20 6f 6e 63 65 2e 20  only used once. 
24a90 20 53 6f 20 61 73 20 65 61 63 68 20 72 6f 77 20   So as each row 
24aa0 69 73 20 61 64 64 65 64 20 74 6f 0a 74 68 65 20  is added to.the 
24ab0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2c  recursive table,
24ac0 20 74 68 61 74 20 72 6f 77 20 69 73 20 69 6d 6d   that row is imm
24ad0 65 64 69 61 74 65 6c 79 20 72 65 74 75 72 6e 65  ediately returne
24ae0 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
24af0 20 74 68 65 20 6d 61 69 6e 0a 53 45 4c 45 43 54   the main.SELECT
24b00 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74   statement and t
24b10 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e 20 20  hen discarded.  
24b20 53 51 4c 69 74 65 20 64 6f 65 73 20 3c 65 6d 3e  SQLite does <em>
24b30 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d 75 6c  not</em> accumul
24b40 61 74 65 0a 61 20 74 65 6d 70 6f 72 61 72 79 20  ate.a temporary 
24b50 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  table containing
24b60 20 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2e   a million rows.
24b70 20 20 56 65 72 79 20 6c 69 74 74 6c 65 20 6d 65    Very little me
24b80 6d 6f 72 79 20 69 73 0a 6e 65 65 64 65 64 20 74  mory is.needed t
24b90 6f 20 72 75 6e 20 74 68 65 20 61 62 6f 76 65 20  o run the above 
24ba0 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76 65  example.  Howeve
24bb0 72 2c 20 69 66 20 74 68 65 20 65 78 61 6d 70 6c  r, if the exampl
24bc0 65 20 68 61 64 20 75 73 65 64 0a 55 4e 49 4f 4e  e had used.UNION
24bd0 20 69 6e 73 74 65 61 64 20 6f 66 20 55 4e 49 4f   instead of UNIO
24be0 4e 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51 4c 69  N ALL, then SQLi
24bf0 74 65 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61  te would have ha
24c00 64 20 74 6f 20 6b 65 65 70 20 61 72 6f 75 6e 64  d to keep around
24c10 0a 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c 79 20  .all previously 
24c20 67 65 6e 65 72 61 74 65 64 20 63 6f 6e 74 65 6e  generated conten
24c30 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 68  t in order to ch
24c40 65 63 6b 20 66 6f 72 20 64 75 70 6c 69 63 61 74  eck for duplicat
24c50 65 73 2e 0a 46 6f 72 20 74 68 69 73 20 72 65 61  es..For this rea
24c60 73 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73  son, programmers
24c70 20 73 68 6f 75 6c 64 20 73 74 72 69 76 65 20 74   should strive t
24c80 6f 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c 4c 20  o use UNION ALL 
24c90 69 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49 4f 4e  instead.of UNION
24ca0 20 77 68 65 6e 20 66 65 61 73 69 62 6c 65 2e 0a   when feasible..
24cb0 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20 76 61  .<p>Here is a va
24cc0 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 70  riation on the p
24cd0 72 65 76 69 6f 75 73 20 65 78 61 6d 70 6c 65 3a  revious example:
24ce0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
24cf0 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
24d00 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28  VE.  cnt(x) AS (
24d10 0a 20 20 20 20 20 53 45 4c 45 43 54 20 31 0a 20  .     SELECT 1. 
24d20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
24d30 20 20 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52     SELECT x+1 FR
24d40 4f 4d 20 63 6e 74 0a 20 20 20 20 20 20 4c 49 4d  OM cnt.      LIM
24d50 49 54 20 31 30 30 30 30 30 30 0a 20 20 29 0a 53  IT 1000000.  ).S
24d60 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 6e 74  ELECT x FROM cnt
24d70 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
24d80 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  uote>..<p>There 
24d90 61 72 65 20 74 77 6f 20 64 69 66 66 65 72 65 6e  are two differen
24da0 63 65 73 20 69 6e 20 74 68 69 73 20 76 61 72 69  ces in this vari
24db0 61 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e 69 74  ation.  The init
24dc0 69 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a 22 53  ial-select is."S
24dd0 45 4c 45 43 54 20 31 22 20 69 6e 73 74 65 61 64  ELECT 1" instead
24de0 20 6f 66 20 22 56 41 4c 55 45 53 28 31 29 22 2e   of "VALUES(1)".
24df0 20 20 42 75 74 20 74 68 6f 73 65 20 61 72 65 20    But those are 
24e00 6a 75 73 74 20 64 69 66 66 65 72 65 6e 74 0a 73  just different.s
24e10 79 6e 74 61 78 65 73 20 66 6f 72 20 73 61 79 69  yntaxes for sayi
24e20 6e 67 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  ng exactly the s
24e30 61 6d 65 20 74 68 69 6e 67 2e 20 20 54 68 65 20  ame thing.  The 
24e40 6f 74 68 65 72 20 63 68 61 6e 67 65 20 69 73 20  other change is 
24e50 74 68 61 74 20 74 68 65 0a 72 65 63 75 72 73 69  that the.recursi
24e60 6f 6e 20 69 73 20 73 74 6f 70 70 65 64 20 62 79  on is stopped by
24e70 20 61 20 4c 49 4d 49 54 20 72 61 74 68 65 72 20   a LIMIT rather 
24e80 74 68 61 6e 20 61 20 57 48 45 52 45 20 63 6c 61  than a WHERE cla
24e90 75 73 65 2e 20 20 54 68 65 20 75 73 65 20 6f 66  use.  The use of
24ea0 0a 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74 68 61  .LIMIT means tha
24eb0 74 20 77 68 65 6e 20 74 68 65 20 6f 6e 65 2d 6d  t when the one-m
24ec0 69 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69 73 20  illionth row is 
24ed0 61 64 64 65 64 20 74 6f 20 74 68 65 20 22 63 6e  added to the "cn
24ee0 74 22 20 74 61 62 6c 65 0a 28 61 6e 64 20 72 65  t" table.(and re
24ef0 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 6d 61  turned by the ma
24f00 69 6e 20 53 45 4c 45 43 54 2c 20 74 68 61 6e 6b  in SELECT, thank
24f10 73 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 6f  s to the query o
24f20 70 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e 20 74  ptimizer).then t
24f30 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f  he recursion sto
24f40 70 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72  ps immediately r
24f50 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f 77  egardless of how
24f60 20 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67 68 74   many rows might
24f70 20 62 65 0a 6c 65 66 74 20 69 6e 20 74 68 65 20   be.left in the 
24f80 71 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72 65 20  queue.  On more 
24f90 63 6f 6d 70 6c 65 78 20 71 75 65 72 69 65 73 2c  complex queries,
24fa0 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65   it can sometime
24fb0 73 20 62 65 0a 64 69 66 66 69 63 75 6c 74 20 74  s be.difficult t
24fc0 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
24fd0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 77  e WHERE clause w
24fe0 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20 63  ill eventually c
24ff0 61 75 73 65 20 74 68 65 0a 71 75 65 75 65 20 74  ause the.queue t
25000 6f 20 64 72 61 69 6e 20 61 6e 64 20 74 68 65 20  o drain and the 
25010 72 65 63 75 72 73 69 6f 6e 20 74 6f 20 74 65 72  recursion to ter
25020 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 74 68 65  minate.  But the
25030 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69   LIMIT clause wi
25040 6c 6c 0a 61 6c 77 61 79 73 20 73 74 6f 70 20 74  ll.always stop t
25050 68 65 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 53  he recursion.  S
25060 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 70 72 61  o it is good pra
25070 63 74 69 63 65 20 74 6f 20 61 6c 77 61 79 73 20  ctice to always 
25080 69 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49 54 20  include a.LIMIT 
25090 63 6c 61 75 73 65 20 61 73 20 61 20 73 61 66 65  clause as a safe
250a0 74 79 20 69 66 20 61 6e 20 75 70 70 65 72 20 62  ty if an upper b
250b0 6f 75 6e 64 20 6f 6e 20 74 68 65 20 73 69 7a 65  ound on the size
250c0 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 6f   of the recursio
250d0 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 3c 74  n .is known...<t
250e0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
250f0 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 48  cex2</tcl>.<h4>H
25100 69 65 72 61 72 63 68 69 63 61 6c 20 51 75 65 72  ierarchical Quer
25110 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a  y Examples</h4>.
25120 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 61 20 74  .<p>Consider a t
25130 61 62 6c 65 20 74 68 61 74 20 64 65 73 63 72 69  able that descri
25140 62 65 73 20 74 68 65 20 6d 65 6d 62 65 72 73 20  bes the members 
25150 6f 66 20 61 6e 20 6f 72 67 61 6e 69 7a 61 74 69  of an organizati
25160 6f 6e 20 61 73 0a 77 65 6c 6c 20 61 73 20 74 68  on as.well as th
25170 65 20 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d 6d 61  e chain-of-comma
25180 6e 64 20 77 69 74 68 69 6e 20 74 68 61 74 20 6f  nd within that o
25190 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a 3c 62  rganization:..<b
251a0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
251b0 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 67  CREATE TABLE org
251c0 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52  (.  name TEXT PR
251d0 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73  IMARY KEY,.  bos
251e0 73 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45  s TEXT REFERENCE
251f0 53 20 6f 72 67 2c 0a 20 20 68 65 69 67 68 74 20  S org,.  height 
25200 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74 68 65 72 20  INT,.  -- other 
25210 63 6f 6e 74 65 6e 74 20 6f 6d 69 74 74 65 64 0a  content omitted.
25220 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
25230 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65 72 79  quote>..<p>Every
25240 20 6d 65 6d 62 65 72 20 69 6e 20 74 68 65 20 6f   member in the o
25250 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20  rganization has 
25260 61 20 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f 73 74  a name, and most
25270 20 6d 65 6d 62 65 72 73 20 68 61 76 65 0a 61 20   members have.a 
25280 73 69 6e 67 6c 65 20 62 6f 73 73 2e 20 20 28 54  single boss.  (T
25290 68 65 20 68 65 61 64 20 6f 66 20 74 68 65 20 77  he head of the w
252a0 68 6f 6c 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f  hole organizatio
252b0 6e 20 68 61 73 20 61 20 4e 55 4c 4c 0a 22 62 6f  n has a NULL."bo
252c0 73 73 22 20 66 69 65 6c 64 2e 29 20 54 68 65 20  ss" field.) The 
252d0 72 6f 77 73 20 6f 66 20 74 68 65 20 22 6f 72 67  rows of the "org
252e0 22 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 74  " table form a t
252f0 72 65 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73  ree...<p>Here is
25300 20 61 20 71 75 65 72 79 20 74 68 61 74 20 63 6f   a query that co
25310 6d 70 75 74 65 73 20 74 68 65 20 61 76 65 72 61  mputes the avera
25320 67 65 20 68 65 69 67 68 74 20 6f 76 65 72 20 65  ge height over e
25330 76 65 72 79 6f 6e 65 0a 69 6e 20 41 6c 69 63 65  veryone.in Alice
25340 27 73 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 2c  's organization,
25350 20 69 6e 63 6c 75 64 69 6e 67 20 41 6c 69 63 65   including Alice
25360 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
25370 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
25380 49 56 45 0a 20 20 77 6f 72 6b 73 5f 66 6f 72 5f  IVE.  works_for_
25390 61 6c 69 63 65 28 6e 29 20 41 53 20 28 0a 20 20  alice(n) AS (.  
253a0 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27    VALUES('Alice'
253b0 29 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20  ).    UNION.    
253c0 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
253d0 20 6f 72 67 2c 20 77 6f 72 6b 73 5f 66 6f 72 5f   org, works_for_
253e0 61 6c 69 63 65 0a 20 20 20 20 20 57 48 45 52 45  alice.     WHERE
253f0 20 6f 72 67 2e 62 6f 73 73 3d 77 6f 72 6b 73 5f   org.boss=works_
25400 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a 20 20 29 0a  for_alice.n.  ).
25410 53 45 4c 45 43 54 20 61 76 67 28 68 65 69 67 68  SELECT avg(heigh
25420 74 29 20 46 52 4f 4d 20 6f 72 67 0a 20 57 48 45  t) FROM org. WHE
25430 52 45 20 6f 72 67 2e 6e 61 6d 65 20 49 4e 20 77  RE org.name IN w
25440 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 3b 0a  orks_for_alice;.
25450 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
25460 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65 78 74  te>..<p>The next
25470 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20 74 77   example uses tw
25480 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  o .common table 
25490 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
254a0 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
254b0 75 73 65 2e 20 20 0a 54 68 65 20 66 6f 6c 6c 6f  use.  .The follo
254c0 77 69 6e 67 20 74 61 62 6c 65 20 72 65 63 6f 72  wing table recor
254d0 64 73 20 61 20 66 61 6d 69 6c 79 20 74 72 65 65  ds a family tree
254e0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
254f0 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
25500 45 20 66 61 6d 69 6c 79 28 0a 20 20 6e 61 6d 65  E family(.  name
25510 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45   TEXT PRIMARY KE
25520 59 2c 0a 20 20 6d 6f 6d 20 54 45 58 54 20 52 45  Y,.  mom TEXT RE
25530 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c  FERENCES family,
25540 0a 20 20 64 61 64 20 54 45 58 54 20 52 45 46 45  .  dad TEXT REFE
25550 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20  RENCES family,. 
25560 20 62 6f 72 6e 20 44 41 54 45 54 49 4d 45 2c 0a   born DATETIME,.
25570 20 20 64 69 65 64 20 44 41 54 45 54 49 4d 45 2c    died DATETIME,
25580 20 2d 2d 20 4e 55 4c 4c 20 69 66 20 73 74 69 6c   -- NULL if stil
25590 6c 20 61 6c 69 76 65 0a 20 20 2d 2d 20 6f 74 68  l alive.  -- oth
255a0 65 72 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a 3c 2f  er content.);.</
255b0 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
255c0 3e 0a 0a 3c 70 3e 54 68 65 20 22 66 61 6d 69 6c  >..<p>The "famil
255d0 79 22 20 74 61 62 6c 65 20 69 73 20 73 69 6d 69  y" table is simi
255e0 6c 61 72 20 74 6f 20 74 68 65 20 65 61 72 6c 69  lar to the earli
255f0 65 72 20 22 6f 72 67 22 20 74 61 62 6c 65 20 65  er "org" table e
25600 78 63 65 70 74 20 74 68 61 74 20 0a 6e 6f 77 20  xcept that .now 
25610 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 70 61  there are two pa
25620 72 65 6e 74 73 20 74 6f 20 65 61 63 68 20 6d 65  rents to each me
25630 6d 62 65 72 2e 0a 57 65 20 77 61 6e 74 20 74 6f  mber..We want to
25640 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69 76 69 6e 67   know all living
25650 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20 41 6c   ancestors of Al
25660 69 63 65 2c 20 66 72 6f 6d 20 6f 6c 64 65 73 74  ice, from oldest
25670 20 74 6f 20 79 6f 75 6e 67 65 73 74 2e 0a 41 6e   to youngest..An
25680 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e   ordinary common
25690 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
256a0 6e 2c 20 22 70 61 72 65 6e 74 5f 6f 66 22 2c 20  n, "parent_of", 
256b0 69 73 20 64 65 66 69 6e 65 64 20 66 69 72 73 74  is defined first
256c0 2e 20 20 54 68 61 74 0a 6f 72 64 69 6e 61 72 79  .  That.ordinary
256d0 20 43 54 45 20 69 73 20 61 20 76 69 65 77 20 74   CTE is a view t
256e0 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  hat can be used 
256f0 74 6f 20 66 69 6e 64 20 61 6c 6c 20 70 61 72 65  to find all pare
25700 6e 74 73 20 6f 66 20 61 6e 79 0a 69 6e 64 69 76  nts of any.indiv
25710 69 64 75 61 6c 2e 20 20 54 68 61 74 20 6f 72 64  idual.  That ord
25720 69 6e 61 72 79 20 43 54 45 20 69 73 20 74 68 65  inary CTE is the
25730 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20 22 61  n used in the "a
25740 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
25750 22 0a 72 65 63 75 72 73 69 76 65 20 43 54 45 2e  ".recursive CTE.
25760 20 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20    The recursive 
25770 43 54 45 20 69 73 20 74 68 65 6e 20 75 73 65 64  CTE is then used
25780 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20 71 75   in the final qu
25790 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ery:..<blockquot
257a0 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
257b0 55 52 53 49 56 45 0a 20 20 70 61 72 65 6e 74 5f  URSIVE.  parent_
257c0 6f 66 28 6e 61 6d 65 2c 20 70 61 72 65 6e 74 29  of(name, parent)
257d0 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43 54 20   AS.    (SELECT 
257e0 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20 66  name, mom FROM f
257f0 61 6d 69 6c 79 20 55 4e 49 4f 4e 20 53 45 4c 45  amily UNION SELE
25800 43 54 20 6e 61 6d 65 2c 20 64 61 64 20 46 52 4f  CT name, dad FRO
25810 4d 20 66 61 6d 69 6c 79 29 2c 0a 20 20 61 6e 63  M family),.  anc
25820 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 28 6e  estor_of_alice(n
25830 61 6d 65 29 20 41 53 0a 20 20 20 20 28 53 45 4c  ame) AS.    (SEL
25840 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f 4d 20  ECT parent FROM 
25850 70 61 72 65 6e 74 5f 6f 66 20 57 48 45 52 45 20  parent_of WHERE 
25860 6e 61 6d 65 3d 27 41 6c 69 63 65 27 0a 20 20 20  name='Alice'.   
25870 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20    UNION ALL.    
25880 20 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46   SELECT parent F
25890 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 4a 4f  ROM parent_of JO
258a0 49 4e 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61  IN ancestor_of_a
258b0 6c 69 63 65 20 55 53 49 4e 47 28 6e 61 6d 65 29  lice USING(name)
258c0 29 0a 53 45 4c 45 43 54 20 66 61 6d 69 6c 79 2e  ).SELECT family.
258d0 6e 61 6d 65 20 46 52 4f 4d 20 61 6e 63 65 73 74  name FROM ancest
258e0 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c 20 66 61 6d  or_of_alice, fam
258f0 69 6c 79 0a 20 57 48 45 52 45 20 61 6e 63 65 73  ily. WHERE ances
25900 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61 6d  tor_of_alice.nam
25910 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20 20  e=family.name.  
25920 20 41 4e 44 20 64 69 65 64 20 49 53 20 4e 55 4c   AND died IS NUL
25930 4c 0a 20 4f 52 44 45 52 20 42 59 20 62 6f 72 6e  L. ORDER BY born
25940 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
25950 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  uote>..<tcl>hd_f
25960 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74  ragment rcex2</t
25970 63 6c 3e 0a 3c 68 34 3e 51 75 65 72 69 65 73 20  cl>.<h4>Queries 
25980 41 67 61 69 6e 73 74 20 41 20 47 72 61 70 68 3c  Against A Graph<
25990 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76 65 72 73 69  /h4>..<p>A versi
259a0 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65  on control syste
259b0 6d 20 28 56 43 53 29 20 77 69 6c 6c 20 74 79 70  m (VCS) will typ
259c0 69 63 61 6c 6c 79 20 73 74 6f 72 65 20 74 68 65  ically store the
259d0 20 65 76 6f 6c 76 69 6e 67 0a 76 65 72 73 69 6f   evolving.versio
259e0 6e 73 20 6f 66 20 61 20 70 72 6f 6a 65 63 74 20  ns of a project 
259f0 61 73 20 61 20 64 69 72 65 63 74 65 64 20 61 63  as a directed ac
25a00 79 63 6c 69 63 20 67 72 61 70 68 20 28 44 41 47  yclic graph (DAG
25a10 29 2e 20 20 43 61 6c 6c 20 65 61 63 68 0a 76 65  ).  Call each.ve
25a20 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f  rsion of the pro
25a30 6a 65 63 74 20 61 20 22 63 68 65 63 6b 69 6e 22  ject a "checkin"
25a40 2e 20 20 41 20 73 69 6e 67 6c 65 0a 63 68 65 63  .  A single.chec
25a50 6b 69 6e 20 63 61 6e 20 68 61 76 65 20 7a 65 72  kin can have zer
25a60 6f 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e 74  o or more parent
25a70 73 2e 20 20 4d 6f 73 74 20 63 68 65 63 6b 69 6e  s.  Most checkin
25a80 73 20 28 65 78 63 65 70 74 20 74 68 65 0a 66 69  s (except the.fi
25a90 72 73 74 29 20 68 61 76 65 20 61 20 73 69 6e 67  rst) have a sing
25aa0 6c 65 20 70 61 72 65 6e 74 2c 20 62 75 74 20 69  le parent, but i
25ab0 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n the case of a 
25ac0 6d 65 72 67 65 2c 20 61 20 63 68 65 63 6b 69 6e  merge, a checkin
25ad0 0a 6d 69 67 68 74 20 68 61 76 65 20 74 77 6f 20  .might have two 
25ae0 6f 72 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65  or three or more
25af0 20 70 61 72 65 6e 74 73 2e 20 20 41 20 73 63 68   parents.  A sch
25b00 65 6d 61 20 74 6f 20 6b 65 65 70 20 74 72 61 63  ema to keep trac
25b10 6b 20 6f 66 0a 63 68 65 63 6b 69 6e 73 20 61 6e  k of.checkins an
25b20 64 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77  d the order in w
25b30 68 69 63 68 20 74 68 65 79 20 6f 63 63 75 72 20  hich they occur 
25b40 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65 74  might look somet
25b50 68 69 6e 67 20 6c 69 6b 65 0a 74 68 69 73 3a 0a  hing like.this:.
25b60 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
25b70 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
25b80 63 68 65 63 6b 69 6e 28 0a 20 20 69 64 20 49 4e  checkin(.  id IN
25b90 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
25ba0 59 2c 0a 20 20 6d 74 69 6d 65 20 49 4e 54 45 47  Y,.  mtime INTEG
25bb0 45 52 20 2d 2d 20 74 69 6d 65 73 74 61 6d 70 20  ER -- timestamp 
25bc0 77 68 65 6e 20 74 68 69 73 20 63 68 65 63 6b 69  when this checki
25bd0 6e 20 6f 63 63 75 72 72 65 64 0a 29 3b 0a 43 52  n occurred.);.CR
25be0 45 41 54 45 20 54 41 42 4c 45 20 64 65 72 69 76  EATE TABLE deriv
25bf0 65 64 66 72 6f 6d 28 0a 20 20 78 66 72 6f 6d 20  edfrom(.  xfrom 
25c00 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c  INTEGER NOT NULL
25c10 20 52 45 46 45 52 45 4e 43 45 53 20 63 68 65 63   REFERENCES chec
25c20 6b 69 6e 2c 20 2d 2d 20 70 61 72 65 6e 74 20 63  kin, -- parent c
25c30 68 65 63 6b 69 6e 0a 20 20 78 74 6f 20 49 4e 54  heckin.  xto INT
25c40 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45  EGER NOT NULL RE
25c50 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69 6e  FERENCES checkin
25c60 2c 20 20 20 2d 2d 20 64 65 72 69 76 65 64 20 63  ,   -- derived c
25c70 68 65 63 6b 69 6e 0a 20 20 50 52 49 4d 41 52 59  heckin.  PRIMARY
25c80 20 4b 45 59 28 78 66 72 6f 6d 2c 78 74 6f 29 0a   KEY(xfrom,xto).
25c90 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20  );.CREATE INDEX 
25ca0 64 65 72 69 76 65 64 66 72 6f 6d 5f 62 61 63 6b  derivedfrom_back
25cb0 20 4f 4e 20 64 65 72 69 76 65 64 66 72 6f 6d 28   ON derivedfrom(
25cc0 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70 72  xto,xfrom);.</pr
25cd0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
25ce0 0a 3c 70 3e 54 68 69 73 20 67 72 61 70 68 20 69  .<p>This graph i
25cf0 73 20 61 63 79 63 6c 69 63 2e 20 20 41 6e 64 20  s acyclic.  And 
25d00 77 65 20 61 73 73 75 6d 65 20 74 68 61 74 20 74  we assume that t
25d10 68 65 20 6d 74 69 6d 65 20 6f 66 20 65 76 65 72  he mtime of ever
25d20 79 0a 63 68 69 6c 64 20 63 68 65 63 6b 69 6e 20  y.child checkin 
25d30 69 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20  is no less than 
25d40 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 61 6c 6c  the mtime of all
25d50 20 69 74 73 20 70 61 72 65 6e 74 73 2e 20 20 42   its parents.  B
25d60 75 74 0a 75 6e 6c 69 6b 65 20 74 68 65 20 65 61  ut.unlike the ea
25d70 72 6c 69 65 72 20 65 78 61 6d 70 6c 65 73 2c 20  rlier examples, 
25d80 74 68 69 73 20 67 72 61 70 68 20 6d 69 67 68 74  this graph might
25d90 20 68 61 76 65 20 6d 75 6c 74 69 70 6c 65 20 70   have multiple p
25da0 61 74 68 73 20 6f 66 0a 64 69 66 66 65 72 69 6e  aths of.differin
25db0 67 20 6c 65 6e 67 74 68 73 20 62 65 74 77 65 65  g lengths betwee
25dc0 6e 20 61 6e 79 20 74 77 6f 20 63 68 65 63 6b 69  n any two checki
25dd0 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e 74 20  ns...<p>We want 
25de0 74 6f 20 6b 6e 6f 77 20 74 68 65 20 74 77 65 6e  to know the twen
25df0 74 79 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61  ty most recent a
25e00 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 69 6d 65  ncestors in time
25e10 20 28 6f 75 74 20 6f 66 0a 74 68 65 20 74 68 6f   (out of.the tho
25e20 75 73 61 6e 64 73 20 61 6e 64 20 74 68 6f 75 73  usands and thous
25e30 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f 72  ands of ancestor
25e40 73 20 69 6e 20 74 68 65 20 77 68 6f 6c 65 20 44  s in the whole D
25e50 41 47 29 20 66 6f 72 0a 63 68 65 63 6b 69 6e 20  AG) for.checkin 
25e60 22 40 42 41 53 45 4c 49 4e 45 22 2e 20 20 28 41  "@BASELINE".  (A
25e70 20 71 75 65 72 79 20 73 69 6d 69 6c 61 72 20 74   query similar t
25e80 6f 20 74 68 69 73 20 69 73 20 75 73 65 64 0a 62  o this is used.b
25e90 79 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 68  y the <a href="h
25ea0 74 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73 69 6c  ttp://www.fossil
25eb0 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73 73 69  -scm.org/">Fossi
25ec0 6c 3c 2f 61 3e 20 56 43 53 20 74 6f 0a 73 68 6f  l</a> VCS to.sho
25ed0 77 20 74 68 65 20 4e 20 6d 6f 73 74 20 72 65 63  w the N most rec
25ee0 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 6f 66  ent ancestors of
25ef0 20 61 20 63 68 65 63 6b 2e 20 20 46 6f 72 20 65   a check.  For e
25f00 78 61 6d 70 6c 65 3a 0a 3c 61 20 68 72 65 66 3d  xample:.<a href=
25f10 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69  "http://www.sqli
25f20 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c  te.org/src/timel
25f30 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30  ine?p=trunk&n=30
25f40 22 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c  ">http://www.sql
25f50 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65  ite.org/src/time
25f60 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33  line?p=trunk&n=3
25f70 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63 6b 71  0</a>.)..<blockq
25f80 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
25f90 52 45 43 55 52 53 49 56 45 0a 20 20 61 6e 63 65  RECURSIVE.  ance
25fa0 73 74 6f 72 28 69 64 2c 6d 74 69 6d 65 29 20 41  stor(id,mtime) A
25fb0 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 69  S (.    SELECT i
25fc0 64 2c 20 6d 74 69 6d 65 20 46 52 4f 4d 20 63 68  d, mtime FROM ch
25fd0 65 63 6b 69 6e 20 57 48 45 52 45 20 69 64 3d 40  eckin WHERE id=@
25fe0 42 41 53 45 4c 49 4e 45 0a 20 20 20 20 55 4e 49  BASELINE.    UNI
25ff0 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 65  ON.    SELECT de
26000 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 2c  rivedfrom.xfrom,
26010 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 0a 20   checkin.mtime. 
26020 20 20 20 20 20 46 52 4f 4d 20 61 6e 63 65 73 74       FROM ancest
26030 6f 72 2c 20 64 65 72 69 76 65 64 66 72 6f 6d 2c  or, derivedfrom,
26040 20 63 68 65 63 6b 69 6e 0a 20 20 20 20 20 57 48   checkin.     WH
26050 45 52 45 20 61 6e 63 65 73 74 6f 72 2e 69 64 3d  ERE ancestor.id=
26060 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 74 6f 0a  derivedfrom.xto.
26070 20 20 20 20 20 20 20 41 4e 44 20 63 68 65 63 6b         AND check
26080 69 6e 2e 69 64 3d 64 65 72 69 76 65 64 66 72 6f  in.id=derivedfro
26090 6d 2e 78 66 72 6f 6d 0a 20 20 20 20 20 4f 52 44  m.xfrom.     ORD
260a0 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74  ER BY checkin.mt
260b0 69 6d 65 20 44 45 53 43 0a 20 20 20 20 20 4c 49  ime DESC.     LI
260c0 4d 49 54 20 32 30 0a 20 20 29 0a 53 45 4c 45 43  MIT 20.  ).SELEC
260d0 54 20 2a 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e  T * FROM checkin
260e0 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 20 55   JOIN ancestor U
260f0 53 49 4e 47 28 69 64 29 3b 0a 3c 2f 70 72 65 3e  SING(id);.</pre>
26100 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
26110 70 3e 0a 54 68 65 20 22 4f 52 44 45 52 20 42 59  p>.The "ORDER BY
26120 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44   checkin.mtime D
26130 45 53 43 22 20 74 65 72 6d 20 69 6e 20 74 68 65  ESC" term in the
26140 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
26150 74 20 6d 61 6b 65 73 0a 74 68 65 20 71 75 65 72  t makes.the quer
26160 79 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74 65  y run much faste
26170 72 20 62 79 20 70 72 65 76 65 6e 74 69 6e 67 20  r by preventing 
26180 69 74 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77 69 6e  it from followin
26190 67 0a 62 72 61 6e 63 68 65 73 20 74 68 61 74 20  g.branches that 
261a0 6d 65 72 67 65 20 63 68 65 63 6b 69 6e 73 0a 66  merge checkins.f
261b0 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20 20 54  rom long ago.  T
261c0 68 65 20 4f 52 44 45 52 20 42 59 20 66 6f 72 63  he ORDER BY forc
261d0 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76 65  es the recursive
261e0 2d 73 65 6c 65 63 74 20 74 6f 20 66 6f 63 75 73  -select to focus
261f0 0a 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63  .on the most rec
26200 65 6e 74 20 63 68 65 63 6b 69 6e 73 2c 20 74 68  ent checkins, th
26210 65 20 6f 6e 65 73 20 77 65 20 77 61 6e 74 2e 20  e ones we want. 
26220 20 57 69 74 68 6f 75 74 20 74 68 65 20 4f 52 44   Without the ORD
26230 45 52 20 42 59 0a 6f 6e 20 74 68 65 20 72 65 63  ER BY.on the rec
26240 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 6f  ursive-select, o
26250 6e 65 20 77 6f 75 6c 64 20 62 65 20 66 6f 72 63  ne would be forc
26260 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 20 74 68  ed to compute th
26270 65 20 63 6f 6d 70 6c 65 74 65 20 73 65 74 20 6f  e complete set o
26280 66 0a 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 61  f.thousands of a
26290 6e 63 65 73 74 6f 72 73 2c 20 73 6f 72 74 20 74  ncestors, sort t
262a0 68 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69 6d 65  hem all by mtime
262b0 2c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  , then take the 
262c0 74 6f 70 20 74 77 65 6e 74 79 2e 0a 54 68 65 20  top twenty..The 
262d0 4f 52 44 45 52 20 42 59 20 65 73 73 65 6e 74 69  ORDER BY essenti
262e0 61 6c 6c 79 20 73 65 74 73 20 75 70 20 61 20 70  ally sets up a p
262f0 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 74 68  riority queue th
26300 61 74 0a 66 6f 72 63 65 73 20 74 68 65 20 72 65  at.forces the re
26310 63 75 72 73 69 76 65 20 71 75 65 72 79 20 74 6f  cursive query to
26320 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d 6f 73   look at the mos
26330 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f  t recent ancesto
26340 72 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f 77 69  rs first,.allowi
26350 6e 67 20 74 68 65 20 75 73 65 20 6f 66 20 61 20  ng the use of a 
26360 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74 6f 20  LIMIT clause to 
26370 72 65 73 74 72 69 63 74 20 74 68 65 20 73 63 6f  restrict the sco
26380 70 65 20 6f 66 20 74 68 65 0a 71 75 65 72 79 20  pe of the.query 
26390 74 6f 20 6a 75 73 74 20 74 68 65 20 63 68 65 63  to just the chec
263a0 6b 69 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74  kins of interest
263b0 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
263c0 65 6e 74 20 77 69 74 68 6f 72 64 65 72 62 79 3c  ent withorderby<
263d0 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74 72 6f  /tcl>.<h4>Contro
263e0 6c 6c 69 6e 67 20 44 65 70 74 68 2d 46 69 72 73  lling Depth-Firs
263f0 74 20 56 65 72 73 75 73 20 42 72 65 61 64 74 68  t Versus Breadth
26400 2d 46 69 72 73 74 20 53 65 61 72 63 68 20 4f 66  -First Search Of
26410 20 61 20 54 72 65 65 0a 55 73 69 6e 67 20 4f 52   a Tree.Using OR
26420 44 45 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c 70 3e  DER BY</h4>..<p>
26430 41 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  An ORDER BY clau
26440 73 65 20 6f 6e 20 74 68 65 20 72 65 63 75 72 73  se on the recurs
26450 69 76 65 2d 73 65 6c 65 63 74 20 63 61 6e 20 62  ive-select can b
26460 65 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  e used to contro
26470 6c 0a 77 68 65 74 68 65 72 20 74 68 65 20 73 65  l.whether the se
26480 61 72 63 68 20 6f 66 20 61 20 74 72 65 65 20 69  arch of a tree i
26490 73 20 64 65 70 74 68 2d 66 69 72 73 74 20 6f 72  s depth-first or
264a0 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 2e 20   breadth-first. 
264b0 20 54 6f 0a 69 6c 6c 75 73 74 72 61 74 65 2c 20   To.illustrate, 
264c0 77 65 20 77 69 6c 6c 20 75 73 65 20 61 20 76 61  we will use a va
264d0 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 22  riation on the "
264e0 6f 72 67 22 20 74 61 62 6c 65 20 66 72 6f 6d 20  org" table from 
264f0 61 6e 20 65 78 61 6d 70 6c 65 0a 61 62 6f 76 65  an example.above
26500 2c 20 77 69 74 68 6f 75 74 20 74 68 65 20 22 68  , without the "h
26510 65 69 67 68 74 22 20 63 6f 6c 75 6d 6e 2c 20 61  eight" column, a
26520 6e 64 20 77 69 74 68 20 73 6f 6d 65 20 72 65 61  nd with some rea
26530 6c 20 64 61 74 61 20 69 6e 73 65 72 74 65 64 3a  l data inserted:
26540 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
26550 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
26560 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58   org(.  name TEX
26570 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20  T PRIMARY KEY,. 
26580 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45 52   boss TEXT REFER
26590 45 4e 43 45 53 20 6f 72 67 0a 29 20 57 49 54 48  ENCES org.) WITH
265a0 4f 55 54 20 52 4f 57 49 44 3b 0a 49 4e 53 45 52  OUT ROWID;.INSER
265b0 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
265c0 53 28 27 41 6c 69 63 65 27 2c 4e 55 4c 4c 29 3b  S('Alice',NULL);
265d0 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
265e0 20 56 41 4c 55 45 53 28 27 42 6f 62 27 2c 27 41   VALUES('Bob','A
265f0 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54 20 49  lice');.INSERT I
26600 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27  NTO org VALUES('
26610 43 69 6e 64 79 27 2c 27 41 6c 69 63 65 27 29 3b  Cindy','Alice');
26620 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
26630 20 56 41 4c 55 45 53 28 27 44 61 76 65 27 2c 27   VALUES('Dave','
26640 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  Bob');.INSERT IN
26650 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 45  TO org VALUES('E
26660 6d 6d 61 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53  mma','Bob');.INS
26670 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
26680 55 45 53 28 27 46 72 65 64 27 2c 27 43 69 6e 64  UES('Fred','Cind
26690 79 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  y');.INSERT INTO
266a0 20 6f 72 67 20 56 41 4c 55 45 53 28 27 47 61 69   org VALUES('Gai
266b0 6c 27 2c 27 43 69 6e 64 79 27 29 3b 0a 3c 2f 70  l','Cindy');.</p
266c0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
266d0 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20 71  ..<p>Here is a q
266e0 75 65 72 79 20 74 6f 20 73 68 6f 77 20 74 68 65  uery to show the
266f0 20 74 72 65 65 20 73 74 72 75 63 74 75 72 65 20   tree structure 
26700 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72  in a breadth-fir
26710 73 74 20 70 61 74 74 65 72 6e 3a 0a 0a 3c 62 6c  st pattern:..<bl
26720 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
26730 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
26740 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65  under_alice(name
26750 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20 20 20  ,level) AS (.   
26760 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c   VALUES('Alice',
26770 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  0).    UNION ALL
26780 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72 67 2e  .    SELECT org.
26790 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63  name, under_alic
267a0 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20 20 20  e.level+1.      
267b0 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e  FROM org JOIN un
267c0 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67  der_alice ON org
267d0 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63  .boss=under_alic
267e0 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52 44 45  e.name.     ORDE
267f0 52 20 42 59 20 32 0a 20 20 29 0a 53 45 4c 45 43  R BY 2.  ).SELEC
26800 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e  T substr('......
26810 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29  ....',1,level*3)
26820 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e   || name FROM un
26830 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65  der_alice;.</pre
26840 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
26850 3c 70 3e 54 68 65 20 22 4f 52 44 45 52 20 42 59  <p>The "ORDER BY
26860 20 32 22 20 28 77 68 69 63 68 20 6d 65 61 6e 73   2" (which means
26870 20 74 68 65 20 73 61 6d 65 20 61 73 20 22 4f 52   the same as "OR
26880 44 45 52 20 42 59 20 75 6e 64 65 72 5f 61 6c 69  DER BY under_ali
26890 63 65 2e 6c 65 76 65 6c 2b 31 22 29 0a 63 61 75  ce.level+1").cau
268a0 73 65 73 20 68 69 67 68 65 72 20 6c 65 76 65 6c  ses higher level
268b0 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a  s in the organiz
268c0 61 74 69 6f 6e 20 63 68 61 72 74 20 28 77 69 74  ation chart (wit
268d0 68 20 73 6d 61 6c 6c 65 72 20 22 6c 65 76 65 6c  h smaller "level
268e0 22 20 76 61 6c 75 65 73 29 0a 74 6f 20 62 65 20  " values).to be 
268f0 70 72 6f 63 65 73 73 65 64 20 66 69 72 73 74 2c  processed first,
26900 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20   resulting in a 
26910 62 72 65 61 64 74 68 2d 66 69 72 73 74 20 73 65  breadth-first se
26920 61 72 63 68 2e 20 20 54 68 65 20 6f 75 74 70 75  arch.  The outpu
26930 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  t is:..<blockquo
26940 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e  te><pre>.Alice..
26950 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79 0a 2e  ..Bob....Cindy..
26960 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e  .....Dave.......
26970 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a  Emma.......Fred.
26980 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65  ......Gail.</pre
26990 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
269a0 3c 70 3e 42 75 74 20 69 66 20 77 65 20 63 68 61  <p>But if we cha
269b0 6e 67 65 20 74 68 65 20 4f 52 44 45 52 20 42 59  nge the ORDER BY
269c0 20 63 6c 61 75 73 65 20 74 6f 20 61 64 64 20 74   clause to add t
269d0 68 65 20 22 44 45 53 43 22 20 6d 6f 64 69 66 69  he "DESC" modifi
269e0 65 72 2c 20 74 68 61 74 20 77 69 6c 6c 0a 63 61  er, that will.ca
269f0 75 73 65 20 6c 6f 77 65 72 20 6c 65 76 65 6c 73  use lower levels
26a00 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61   in the organiza
26a10 74 69 6f 6e 20 28 77 69 74 68 20 6c 61 72 67 65  tion (with large
26a20 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75 65 73  r "level" values
26a30 29 20 74 6f 20 62 65 0a 70 72 6f 63 65 73 73 65  ) to be.processe
26a40 64 20 66 69 72 73 74 20 62 79 20 74 68 65 20 72  d first by the r
26a50 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
26a60 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20   resulting in a 
26a70 64 65 70 74 68 2d 66 69 72 73 74 20 73 65 61 72  depth-first sear
26a80 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ch:..<blockquote
26a90 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
26aa0 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c  RSIVE.  under_al
26ab0 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20  ice(name,level) 
26ac0 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28  AS (.    VALUES(
26ad0 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20 20 55  'Alice',0).    U
26ae0 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c  NION ALL.    SEL
26af0 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e  ECT org.name, un
26b00 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b  der_alice.level+
26b10 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f 72 67  1.      FROM org
26b20 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63   JOIN under_alic
26b30 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e  e ON org.boss=un
26b40 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20  der_alice.name. 
26b50 20 20 20 20 4f 52 44 45 52 20 42 59 20 32 20 3c      ORDER BY 2 <
26b60 62 3e 44 45 53 43 3c 2f 62 3e 0a 20 20 29 0a 53  b>DESC</b>.  ).S
26b70 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e  ELECT substr('..
26b80 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65  ........',1,leve
26b90 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f  l*3) || name FRO
26ba0 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c  M under_alice;.<
26bb0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
26bc0 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75  e>..<p>The outpu
26bd0 74 20 6f 66 20 74 68 69 73 20 72 65 76 69 73 65  t of this revise
26be0 64 20 71 75 65 72 79 20 69 73 3a 0a 0a 3c 62 6c  d query is:..<bl
26bf0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41  ockquote><pre>.A
26c00 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 2e  lice....Bob.....
26c10 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d  ..Dave.......Emm
26c20 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e  a....Cindy......
26c30 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c  .Fred.......Gail
26c40 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
26c50 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68  ote>..<p>When th
26c60 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
26c70 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  e is omitted fro
26c80 6d 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  m the recursive-
26c90 73 65 6c 65 63 74 2c 20 74 68 65 0a 71 75 65 75  select, the.queu
26ca0 65 20 62 65 68 61 76 65 73 20 61 73 20 61 20 46  e behaves as a F
26cb0 49 46 4f 2c 20 77 68 69 63 68 20 72 65 73 75 6c  IFO, which resul
26cc0 74 73 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d  ts in a breadth-
26cd0 66 69 72 73 74 20 73 65 61 72 63 68 2e 0a 0a 0a  first search....
26ce0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
26cf0 20 6d 61 6e 64 65 6c 62 72 6f 74 20 7b 63 6f 6d   mandelbrot {com
26d00 70 75 74 65 20 74 68 65 20 4d 61 6e 64 65 6c 62  pute the Mandelb
26d10 72 6f 74 20 73 65 74 7d 3c 2f 74 63 6c 3e 0a 3c  rot set}</tcl>.<
26d20 68 34 3e 4f 75 74 6c 61 6e 64 69 73 68 20 52 65  h4>Outlandish Re
26d30 63 75 72 73 69 76 65 20 51 75 65 72 79 20 45 78  cursive Query Ex
26d40 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e  amples</h4>..<p>
26d50 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75  The following qu
26d60 65 72 79 20 63 6f 6d 70 75 74 65 73 20 61 6e 20  ery computes an 
26d70 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 6f 66  approximation of
26d80 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20   the Mandelbrot 
26d90 53 65 74 0a 61 6e 64 20 6f 75 74 70 75 74 73 20  Set.and outputs 
26da0 74 68 65 20 72 65 73 75 6c 74 20 61 73 20 41 53  the result as AS
26db0 43 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f 63 6b  CII-art:..<block
26dc0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
26dd0 20 52 45 43 55 52 53 49 56 45 0a 20 20 78 61 78   RECURSIVE.  xax
26de0 69 73 28 78 29 20 41 53 20 28 56 41 4c 55 45 53  is(x) AS (VALUES
26df0 28 2d 32 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c  (-2.0) UNION ALL
26e00 20 53 45 4c 45 43 54 20 78 2b 30 2e 30 35 20 46   SELECT x+0.05 F
26e10 52 4f 4d 20 78 61 78 69 73 20 57 48 45 52 45 20  ROM xaxis WHERE 
26e20 78 26 6c 74 3b 31 2e 32 29 2c 0a 20 20 79 61 78  x&lt;1.2),.  yax
26e30 69 73 28 79 29 20 41 53 20 28 56 41 4c 55 45 53  is(y) AS (VALUES
26e40 28 2d 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c  (-1.0) UNION ALL
26e50 20 53 45 4c 45 43 54 20 79 2b 30 2e 31 20 46 52   SELECT y+0.1 FR
26e60 4f 4d 20 79 61 78 69 73 20 57 48 45 52 45 20 79  OM yaxis WHERE y
26e70 26 6c 74 3b 31 2e 30 29 2c 0a 20 20 6d 28 69 74  &lt;1.0),.  m(it
26e80 65 72 2c 20 63 78 2c 20 63 79 2c 20 78 2c 20 79  er, cx, cy, x, y
26e90 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43  ) AS (.    SELEC
26ea0 54 20 30 2c 20 78 2c 20 79 2c 20 30 2e 30 2c 20  T 0, x, y, 0.0, 
26eb0 30 2e 30 20 46 52 4f 4d 20 78 61 78 69 73 2c 20  0.0 FROM xaxis, 
26ec0 79 61 78 69 73 0a 20 20 20 20 55 4e 49 4f 4e 20  yaxis.    UNION 
26ed0 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 69  ALL.    SELECT i
26ee0 74 65 72 2b 31 2c 20 63 78 2c 20 63 79 2c 20 78  ter+1, cx, cy, x
26ef0 2a 78 2d 79 2a 79 20 2b 20 63 78 2c 20 32 2e 30  *x-y*y + cx, 2.0
26f00 2a 78 2a 79 20 2b 20 63 79 20 46 52 4f 4d 20 6d  *x*y + cy FROM m
26f10 20 0a 20 20 20 20 20 57 48 45 52 45 20 28 78 2a   .     WHERE (x*
26f20 78 20 2b 20 79 2a 79 29 20 26 6c 74 3b 20 34 2e  x + y*y) &lt; 4.
26f30 30 20 41 4e 44 20 69 74 65 72 26 6c 74 3b 32 38  0 AND iter&lt;28
26f40 0a 20 20 29 2c 0a 20 20 6d 32 28 69 74 65 72 2c  .  ),.  m2(iter,
26f50 20 63 78 2c 20 63 79 29 20 41 53 20 28 0a 20 20   cx, cy) AS (.  
26f60 20 20 53 45 4c 45 43 54 20 6d 61 78 28 69 74 65    SELECT max(ite
26f70 72 29 2c 20 63 78 2c 20 63 79 20 46 52 4f 4d 20  r), cx, cy FROM 
26f80 6d 20 47 52 4f 55 50 20 42 59 20 63 78 2c 20 63  m GROUP BY cx, c
26f90 79 0a 20 20 29 2c 0a 20 20 61 28 74 29 20 41 53  y.  ),.  a(t) AS
26fa0 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 67 72   (.    SELECT gr
26fb0 6f 75 70 5f 63 6f 6e 63 61 74 28 20 73 75 62 73  oup_concat( subs
26fc0 74 72 28 27 20 2e 2b 2a 23 27 2c 20 31 2b 6d 69  tr(' .+*#', 1+mi
26fd0 6e 28 69 74 65 72 2f 37 2c 34 29 2c 20 31 29 2c  n(iter/7,4), 1),
26fe0 20 27 27 29 20 0a 20 20 20 20 46 52 4f 4d 20 6d   '') .    FROM m
26ff0 32 20 47 52 4f 55 50 20 42 59 20 63 79 0a 20 20  2 GROUP BY cy.  
27000 29 0a 53 45 4c 45 43 54 20 67 72 6f 75 70 5f 63  ).SELECT group_c
27010 6f 6e 63 61 74 28 72 74 72 69 6d 28 74 29 2c 78  oncat(rtrim(t),x
27020 27 30 61 27 29 20 46 52 4f 4d 20 61 3b 0a 3c 2f  '0a') FROM a;.</
27030 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
27040 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69 73 20 71 75  >..<p>In this qu
27050 65 72 79 2c 20 74 68 65 20 22 78 61 78 69 73 22  ery, the "xaxis"
27060 20 61 6e 64 20 22 79 61 78 69 73 22 20 43 54 45   and "yaxis" CTE
27070 73 20 64 65 66 69 6e 65 20 74 68 65 20 67 72 69  s define the gri
27080 64 20 6f 66 20 70 6f 69 6e 74 73 20 66 6f 72 0a  d of points for.
27090 77 68 69 63 68 20 74 68 65 20 4d 61 6e 64 65 6c  which the Mandel
270a0 62 72 6f 74 20 53 65 74 20 77 69 6c 6c 20 62 65  brot Set will be
270b0 20 61 70 70 72 6f 78 69 6d 61 74 65 64 2e 20 20   approximated.  
270c0 45 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 0a  Each row in the.
270d0 22 6d 28 69 74 65 72 2c 63 78 2c 63 79 2c 78 2c  "m(iter,cx,cy,x,
270e0 79 29 22 20 43 54 45 20 6d 65 61 6e 73 20 74 68  y)" CTE means th
270f0 61 74 20 61 66 74 65 72 20 22 69 74 65 72 22 20  at after "iter" 
27100 69 74 65 72 61 74 69 6f 6e 73 2c 20 74 68 65 20  iterations, the 
27110 4d 61 6e 64 65 6c 62 72 6f 74 0a 69 74 65 72 61  Mandelbrot.itera
27120 74 69 6f 6e 20 73 74 61 72 74 69 6e 67 20 61 74  tion starting at
27130 20 63 78 2c 63 79 20 68 61 73 20 72 65 61 63 68   cx,cy has reach
27140 65 64 20 70 6f 69 6e 74 20 78 2c 79 2e 20 20 54  ed point x,y.  T
27150 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  he number of ite
27160 72 61 74 69 6f 6e 73 0a 69 6e 20 74 68 69 73 20  rations.in this 
27170 65 78 61 6d 70 6c 65 20 69 73 20 6c 69 6d 69 74  example is limit
27180 65 64 20 74 6f 20 32 38 20 28 77 68 69 63 68 20  ed to 28 (which 
27190 73 65 76 65 72 65 6c 79 20 6c 69 6d 69 74 73 20  severely limits 
271a0 74 68 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 6f  the resolution o
271b0 66 0a 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f  f.the computatio
271c0 6e 2c 20 62 75 74 20 69 73 20 73 75 66 66 69 63  n, but is suffic
271d0 69 65 6e 74 20 66 6f 72 20 6c 6f 77 2d 72 65 73  ient for low-res
271e0 6f 6c 75 74 69 6f 6e 20 41 53 43 49 49 2d 61 72  olution ASCII-ar
271f0 74 20 6f 75 74 70 75 74 29 2e 0a 54 68 65 20 22  t output)..The "
27200 6d 32 28 69 74 65 72 2c 63 78 2c 63 79 29 22 20  m2(iter,cx,cy)" 
27210 43 54 45 20 68 6f 6c 64 73 20 74 68 65 20 6d 61  CTE holds the ma
27220 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
27230 69 74 65 72 61 74 69 6f 6e 73 20 72 65 61 63 68  iterations reach
27240 65 64 20 77 68 65 6e 0a 73 74 61 72 74 69 6e 67  ed when.starting
27250 20 61 74 20 70 6f 69 6e 74 20 63 78 2c 63 79 2e   at point cx,cy.
27260 0a 46 69 6e 61 6c 6c 79 2c 20 65 61 63 68 20 72  .Finally, each r
27270 6f 77 20 69 6e 20 74 68 65 20 22 61 28 74 29 22  ow in the "a(t)"
27280 20 43 54 45 20 68 6f 6c 64 73 20 61 20 73 74 72   CTE holds a str
27290 69 6e 67 20 0a 77 68 69 63 68 20 69 73 20 61 20  ing .which is a 
272a0 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f 66 20 74  single line of t
272b0 68 65 20 6f 75 74 70 75 74 20 41 53 43 49 49 2d  he output ASCII-
272c0 61 72 74 2e 0a 54 68 65 20 53 45 4c 45 43 54 20  art..The SELECT 
272d0 73 74 61 74 65 6d 65 6e 74 20 61 74 20 74 68 65  statement at the
272e0 20 65 6e 64 20 6a 75 73 74 20 71 75 65 72 69 65   end just querie
272f0 73 20 74 68 65 20 22 61 22 20 43 54 45 20 74 6f  s the "a" CTE to
27300 0a 72 65 74 72 69 65 76 65 20 61 6c 6c 20 6c 69  .retrieve all li
27310 6e 65 73 20 6f 66 20 41 53 43 49 49 2d 61 72 74  nes of ASCII-art
27320 2c 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 0a 0a 3c  , one by one...<
27330 70 3e 52 75 6e 6e 69 6e 67 20 74 68 65 20 71 75  p>Running the qu
27340 65 72 79 20 61 62 6f 76 65 20 69 6e 20 61 6e 20  ery above in an 
27350 53 51 4c 69 74 65 20 5b 63 6f 6d 6d 61 6e 64 2d  SQLite [command-
27360 6c 69 6e 65 20 73 68 65 6c 6c 5d 20 72 65 73 75  line shell] resu
27370 6c 74 73 0a 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  lts.in the follo
27380 77 69 6e 67 20 6f 75 74 70 75 74 3a 0a 0a 3c 62  wing output:..<b
27390 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273c0 20 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20      ....#.      
273d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23               ..#
273f0 2a 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  *...            
27400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27410 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a 20       ..+####+.. 
27420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27430 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e             .....
27440 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20 2b 0a  ..+####....   +.
27450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27460 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23 23 2b             ..##+
27470 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 2b 2b  *##########+.+++
27480 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
27490 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23              .+.#
274a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274b0 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
274c0 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b    .............+
274d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274e0 23 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20  ###+.+.         
274f0 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e 2e       ..++..#....
27500 2e 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .*##############
27510 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20  #######+..      
27520 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23         ...+#####
27530 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23 23 23  ##++############
27540 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20  ###########..   
27550 20 20 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23         ....+*###
27560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27570 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20  #############.. 
27580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
275a0 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 2e 2e  #############...
275b0 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b  .          ....+
275c0 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  *###############
275d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
275e0 23 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..             
275f0 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23 23  ...+#######++###
27600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27610 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20  ####..          
27620 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e 2e 2e      ..++..#.....
27630 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  *###############
27640 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  ######+..       
27650 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e         .........
27660 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23 23  ....+###########
27670 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20  ########+.+.    
27680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27690 20 20 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23        .+.#######
276a0 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
276b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276c0 20 20 20 20 20 20 20 20 20 2e 2e 23 23 2b 2a 23           ..##+*#
276d0 23 23 23 23 23 23 23 23 23 2b 2e 2b 2b 2b 2b 0a  #########+.++++.
276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276f0 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
27700 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20 2b  ...+####....   +
27710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27730 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a 20 20 20 20    ..+####+..    
27740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
27760 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20 20 20  .#*...          
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27780 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a            ....#.
27790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277b0 20 20 20 20 2b 2e 0a 3c 2f 70 72 65 3e 3c 2f 62      +..</pre></b
277c0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c  lockquote>..<tcl
277d0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 75 64  >hd_fragment sud
277e0 6f 6b 75 20 7b 73 6f 6c 76 65 20 53 75 64 6f 6b  oku {solve Sudok
277f0 75 20 70 75 7a 7a 6c 65 73 7d 20 3c 2f 74 63 6c  u puzzles} </tcl
27800 3e 0a 3c 70 3e 54 68 69 73 20 6e 65 78 74 20 71  >.<p>This next q
27810 75 65 72 79 20 73 6f 6c 76 65 73 20 61 20 53 75  uery solves a Su
27820 64 6f 6b 75 20 70 75 7a 7a 6c 65 2e 20 20 54 68  doku puzzle.  Th
27830 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 70  e state of the p
27840 75 7a 7a 6c 65 20 69 73 0a 64 65 66 69 6e 65 64  uzzle is.defined
27850 20 62 79 20 61 6e 20 38 31 2d 63 68 61 72 61 63   by an 81-charac
27860 74 65 72 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  ter string forme
27870 64 20 62 79 20 72 65 61 64 69 6e 67 20 65 6e 74  d by reading ent
27880 72 69 65 73 20 66 72 6f 6d 20 74 68 65 0a 70 75  ries from the.pu
27890 7a 7a 6c 65 20 62 6f 78 20 72 6f 77 20 62 79 20  zzle box row by 
278a0 72 6f 77 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  row from left to
278b0 20 72 69 67 68 74 20 61 6e 64 20 74 68 65 6e 20   right and then 
278c0 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f 74 74  from top to bott
278d0 6f 6d 2e 0a 42 6c 61 6e 6b 20 73 71 75 61 72 65  om..Blank square
278e0 73 20 69 6e 20 74 68 65 20 70 75 7a 7a 6c 65 20  s in the puzzle 
278f0 61 72 65 20 64 65 6e 6f 74 65 64 20 62 79 20 61  are denoted by a
27900 20 22 2e 22 20 63 68 61 72 61 63 74 65 72 2e 20   "." character. 
27910 20 0a 54 68 75 73 20 74 68 65 20 69 6e 70 75 74   .Thus the input
27920 20 73 74 72 69 6e 67 3a 0a 0a 3c 62 6c 6f 63 6b   string:..<block
27930 71 75 6f 74 65 3e 0a 35 33 2e 2e 37 2e 2e 2e 2e  quote>.53..7....
27940 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e  6..195....98....
27950 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e  6.8...6...34..8.
27960 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e  3..17...2...6.6.
27970 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e  ...28....419..5.
27980 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f 62 6c 6f 63 6b  ...8..79.</block
27990 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 72 72 65  quote>..<p>Corre
279a0 73 70 6f 6e 64 73 20 74 6f 20 61 20 70 75 7a 7a  sponds to a puzz
279b0 6c 65 20 6c 69 6b 65 20 74 68 69 73 3a 0a 0a 3c  le like this:..<
279c0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
279d0 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65  le border="1" ce
279e0 6c 6c 70 61 64 64 69 6e 67 3d 22 35 22 3e 0a 3c  llpadding="5">.<
279f0 74 72 3e 3c 74 64 3e 35 3c 74 64 3e 33 3c 74 64  tr><td>5<td>3<td
27a00 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e  > <td> <td>7<td>
27a10 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 0a   <td> <td> <td>.
27a20 3c 74 72 3e 3c 74 64 3e 36 3c 74 64 3e 20 3c 74  <tr><td>6<td> <t
27a30 64 3e 20 3c 74 64 3e 31 3c 74 64 3e 39 3c 74 64  d> <td>1<td>9<td
27a40 3e 35 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >5<td> <td> <td>
27a50 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 39 3c  .<tr><td> <td>9<
27a60 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>8<td> <td> <t
27a70 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64  d> <td> <td>6<td
27a80 3e 0a 3c 74 72 3e 3c 74 64 3e 38 3c 74 64 3e 20  >.<tr><td>8<td> 
27a90 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 3c  <td> <td> <td>6<
27aa0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
27ab0 64 3e 33 0a 3c 74 72 3e 3c 74 64 3e 34 3c 74 64  d>3.<tr><td>4<td
27ac0 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e  > <td> <td>8<td>
27ad0 20 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e 20   <td>3<td> <td> 
27ae0 3c 74 64 3e 31 0a 3c 74 72 3e 3c 74 64 3e 37 3c  <td>1.<tr><td>7<
27af0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
27b00 64 3e 32 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>2<td> <td> <td
27b10 3e 20 3c 74 64 3e 36 0a 3c 74 72 3e 3c 74 64 3e  > <td>6.<tr><td>
27b20 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20   <td>6<td> <td> 
27b30 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 32 3c  <td> <td> <td>2<
27b40 74 64 3e 38 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64  td>8<td>.<tr><td
27b50 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
27b60 34 3c 74 64 3e 31 3c 74 64 3e 39 3c 74 64 3e 20  4<td>1<td>9<td> 
27b70 3c 74 64 3e 20 3c 74 64 3e 35 0a 3c 74 72 3e 3c  <td> <td>5.<tr><
27b80 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
27b90 64 3e 20 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64  d> <td>8<td> <td
27ba0 3e 20 3c 74 64 3e 37 3c 74 64 3e 39 0a 3c 2f 74  > <td>7<td>9.</t
27bb0 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  able>.</blockquo
27bc0 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 69 73 20  te>..<p>This is 
27bd0 74 68 65 20 71 75 65 72 79 20 74 68 61 74 20 73  the query that s
27be0 6f 6c 76 65 73 20 74 68 65 20 70 75 7a 7a 6c 65  olves the puzzle
27bf0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
27c00 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
27c10 49 56 45 0a 20 20 69 6e 70 75 74 28 73 75 64 29  IVE.  input(sud)
27c20 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53   AS (.    VALUES
27c30 28 27 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39  ('53..7....6..19
27c40 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e  5....98....6.8..
27c50 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37  .6...34..8.3..17
27c60 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38  ...2...6.6....28
27c70 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e  ....419..5....8.
27c80 2e 37 39 27 29 0a 20 20 29 2c 0a 20 20 64 69 67  .79').  ),.  dig
27c90 69 74 73 28 7a 2c 20 6c 70 29 20 41 53 20 28 0a  its(z, lp) AS (.
27ca0 20 20 20 20 56 41 4c 55 45 53 28 27 31 27 2c 20      VALUES('1', 
27cb0 31 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  1).    UNION ALL
27cc0 20 53 45 4c 45 43 54 0a 20 20 20 20 43 41 53 54   SELECT.    CAST
27cd0 28 6c 70 2b 31 20 41 53 20 54 45 58 54 29 2c 20  (lp+1 AS TEXT), 
27ce0 6c 70 2b 31 20 46 52 4f 4d 20 64 69 67 69 74 73  lp+1 FROM digits
27cf0 20 57 48 45 52 45 20 6c 70 26 6c 74 3b 39 0a 20   WHERE lp&lt;9. 
27d00 20 29 2c 0a 20 20 78 28 73 2c 20 69 6e 64 29 20   ),.  x(s, ind) 
27d10 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20  AS (.    SELECT 
27d20 73 75 64 2c 20 69 6e 73 74 72 28 73 75 64 2c 20  sud, instr(sud, 
27d30 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70 75 74 0a  '.') FROM input.
27d40 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
27d50 20 20 53 45 4c 45 43 54 0a 20 20 20 20 20 20 73    SELECT.      s
27d60 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d  ubstr(s, 1, ind-
27d70 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74  1) || z || subst
27d80 72 28 73 2c 20 69 6e 64 2b 31 29 2c 0a 20 20 20  r(s, ind+1),.   
27d90 20 20 20 69 6e 73 74 72 28 20 73 75 62 73 74 72     instr( substr
27da0 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c  (s, 1, ind-1) ||
27db0 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20   z || substr(s, 
27dc0 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29 0a 20 20  ind+1), '.' ).  
27dd0 20 20 20 46 52 4f 4d 20 78 2c 20 64 69 67 69 74     FROM x, digit
27de0 73 20 41 53 20 7a 0a 20 20 20 20 57 48 45 52 45  s AS z.    WHERE
27df0 20 69 6e 64 3e 30 0a 20 20 20 20 20 20 41 4e 44   ind>0.      AND
27e00 20 4e 4f 54 20 45 58 49 53 54 53 20 28 0a 20 20   NOT EXISTS (.  
27e10 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54            SELECT
27e20 20 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   1.             
27e30 20 46 52 4f 4d 20 64 69 67 69 74 73 20 41 53 20   FROM digits AS 
27e40 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  lp.             
27e50 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73 75 62 73  WHERE z.z = subs
27e60 74 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 2f 39  tr(s, ((ind-1)/9
27e70 29 2a 39 20 2b 20 6c 70 2c 20 31 29 0a 20 20 20  )*9 + lp, 1).   
27e80 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 20               OR 
27e90 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20  z.z = substr(s, 
27ea0 28 28 69 6e 64 2d 31 29 25 39 29 20 2b 20 28 6c  ((ind-1)%9) + (l
27eb0 70 2d 31 29 2a 39 20 2b 20 31 2c 20 31 29 0a 20  p-1)*9 + 1, 1). 
27ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f                 O
27ed0 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73  R z.z = substr(s
27ee0 2c 20 28 28 28 69 6e 64 2d 31 29 2f 33 29 20 25  , (((ind-1)/3) %
27ef0 20 33 29 20 2a 20 33 0a 20 20 20 20 20 20 20 20   3) * 3.        
27f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f10 2b 20 28 28 69 6e 64 2d 31 29 2f 32 37 29 20 2a  + ((ind-1)/27) *
27f20 20 32 37 20 2b 20 6c 70 0a 20 20 20 20 20 20 20   27 + lp.       
27f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f40 20 2b 20 28 28 6c 70 2d 31 29 20 2f 20 33 29 20   + ((lp-1) / 3) 
27f50 2a 20 36 2c 20 31 29 0a 20 20 20 20 20 20 20 20  * 6, 1).        
27f60 20 29 0a 20 20 29 0a 53 45 4c 45 43 54 20 73 20   ).  ).SELECT s 
27f70 46 52 4f 4d 20 78 20 57 48 45 52 45 20 69 6e 64  FROM x WHERE ind
27f80 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  =0;.</pre></bloc
27f90 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
27fa0 22 69 6e 70 75 74 22 20 43 54 45 20 64 65 66 69  "input" CTE defi
27fb0 6e 65 73 20 74 68 65 20 69 6e 70 75 74 20 70 75  nes the input pu
27fc0 7a 7a 6c 65 2e 0a 54 68 65 20 22 64 69 67 69 74  zzle..The "digit
27fd0 73 22 20 43 54 45 20 64 65 66 69 6e 65 73 20 61  s" CTE defines a
27fe0 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64   table that hold
27ff0 73 20 61 6c 6c 20 64 69 67 69 74 73 20 62 65 74  s all digits bet
28000 77 65 65 6e 20 31 20 61 6e 64 20 39 2e 0a 54 68  ween 1 and 9..Th
28010 65 20 77 6f 72 6b 20 6f 66 20 73 6f 6c 76 69 6e  e work of solvin
28020 67 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73 20  g the puzzle is 
28030 75 6e 64 65 72 74 61 6b 65 6e 20 62 79 20 74 68  undertaken by th
28040 65 20 22 78 22 20 43 54 45 2e 0a 41 6e 20 65 6e  e "x" CTE..An en
28050 74 72 79 20 69 6e 20 78 28 73 2c 69 6e 64 29 20  try in x(s,ind) 
28060 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 38  means that the 8
28070 31 2d 63 68 61 72 61 63 74 65 72 20 73 74 72 69  1-character stri
28080 6e 67 20 22 73 22 20 69 73 20 61 20 76 61 6c 69  ng "s" is a vali
28090 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20  d.sudoku puzzle 
280a0 28 69 74 20 68 61 73 20 6e 6f 20 63 6f 6e 66 6c  (it has no confl
280b0 69 63 74 73 29 20 61 6e 64 20 74 68 61 74 20 74  icts) and that t
280c0 68 65 20 66 69 72 73 74 20 75 6e 6b 6e 6f 77 6e  he first unknown
280d0 20 63 68 61 72 61 63 74 65 72 0a 69 73 20 61 74   character.is at
280e0 20 70 6f 73 69 74 69 6f 6e 20 22 69 6e 64 22 2c   position "ind",
280f0 20 6f 72 20 69 6e 64 3d 3d 30 20 69 66 20 61 6c   or ind==0 if al
28100 6c 20 63 68 61 72 61 63 74 65 72 20 70 6f 73 69  l character posi
28110 74 69 6f 6e 73 20 61 72 65 20 66 69 6c 6c 65 64  tions are filled
28120 20 69 6e 2e 0a 54 68 65 20 67 6f 61 6c 2c 20 74   in..The goal, t
28130 68 65 6e 2c 20 69 73 20 74 6f 20 63 6f 6d 70 75  hen, is to compu
28140 74 65 20 65 6e 74 72 69 65 73 20 66 6f 72 20 22  te entries for "
28150 78 22 20 77 69 74 68 20 61 6e 20 22 69 6e 64 22  x" with an "ind"
28160 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68 65 20 73   of 0...<p>The s
28170 6f 6c 76 65 72 20 77 6f 72 6b 73 20 62 79 20 61  olver works by a
28180 64 64 69 6e 67 20 6e 65 77 20 65 6e 74 72 69 65  dding new entrie
28190 73 20 74 6f 20 74 68 65 20 22 78 22 20 72 65 63  s to the "x" rec
281a0 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 47 69  ursive table..Gi
281b0 76 65 6e 20 70 72 69 6f 72 20 65 6e 74 72 69 65  ven prior entrie
281c0 73 2c 20 74 68 65 20 72 65 63 75 72 73 69 76 65  s, the recursive
281d0 2d 73 65 6c 65 63 74 20 74 72 69 65 73 20 74 6f  -select tries to
281e0 20 66 69 6c 6c 20 69 6e 20 61 20 73 69 6e 67 6c   fill in a singl
281f0 65 20 6e 65 77 0a 70 6f 73 69 74 69 6f 6e 20 77  e new.position w
28200 69 74 68 20 61 6c 6c 20 76 61 6c 75 65 73 20 62  ith all values b
28210 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20 74  etween 1 and 9 t
28220 68 61 74 20 61 63 74 75 61 6c 6c 79 20 77 6f 72  hat actually wor
28230 6b 20 69 6e 20 74 68 61 74 0a 70 6f 73 69 74 69  k in that.positi
28240 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 70 6c 69 63  on.  The complic
28250 61 74 65 64 20 22 4e 4f 54 20 45 58 49 53 54 53  ated "NOT EXISTS
28260 22 20 73 75 62 71 75 65 72 79 20 69 73 20 74 68  " subquery is th
28270 65 20 6d 61 67 69 63 20 74 68 61 74 0a 66 69 67  e magic that.fig
28280 75 72 65 73 20 6f 75 74 20 77 68 65 74 68 65 72  ures out whether
28290 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 63 61 6e   or not each can
282a0 64 69 64 61 74 65 20 22 73 22 20 73 74 72 69 6e  didate "s" strin
282b0 67 20 69 73 20 61 20 76 61 6c 69 64 0a 73 75 64  g is a valid.sud
282c0 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f 72 20 6e 6f  oku puzzle or no
282d0 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 69 6e 61 6c  t...<p>The final
282e0 20 61 6e 73 77 65 72 20 69 73 20 66 6f 75 6e 64   answer is found
282f0 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20   by looking for 
28300 61 20 73 74 72 69 6e 67 20 77 69 74 68 20 69 6e  a string with in
28310 64 3d 3d 30 2e 0a 49 66 20 74 68 65 20 6f 72 69  d==0..If the ori
28320 67 69 6e 61 6c 20 73 75 64 6f 6b 75 20 70 72 6f  ginal sudoku pro
28330 62 6c 65 6d 20 64 69 64 20 6e 6f 74 20 68 61 76  blem did not hav
28340 65 20 61 20 75 6e 69 71 75 65 20 73 6f 6c 75 74  e a unique solut
28350 69 6f 6e 2c 20 74 68 65 6e 0a 74 68 65 20 71 75  ion, then.the qu
28360 65 72 79 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  ery will return 
28370 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 73 6f 6c  all possible sol
28380 75 74 69 6f 6e 73 2e 20 20 49 66 20 74 68 65 20  utions.  If the 
28390 6f 72 69 67 69 6e 61 6c 20 70 72 6f 62 6c 65 6d  original problem
283a0 0a 77 61 73 20 75 6e 73 6f 6c 76 61 62 6c 65 2c  .was unsolvable,
283b0 20 74 68 65 6e 20 6e 6f 20 72 6f 77 73 20 77 69   then no rows wi
283c0 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ll be returned. 
283d0 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74   In this case, t
283e0 68 65 20 75 6e 69 71 75 65 0a 61 6e 73 77 65 72  he unique.answer
283f0 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74   is:..<blockquot
28400 65 3e 0a 35 33 34 36 37 38 39 31 32 36 37 32 31  e>.5346789126721
28410 39 35 33 34 38 31 39 38 33 34 32 35 36 37 38 35  9534819834256785
28420 39 37 36 31 34 32 33 34 32 36 38 35 33 37 39 31  9761423426853791
28430 37 31 33 39 32 34 38 35 36 39 36 31 35 33 37 32  7139248569615372
28440 38 34 32 38 37 34 31 39 36 33 35 33 34 35 32 38  8428741963534528
28450 36 31 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  6179.</blockquot
28460 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 75 74  e>..<p>The solut
28470 69 6f 6e 20 77 61 73 20 63 6f 6d 70 75 74 65 64  ion was computed
28480 20 69 6e 20 6c 65 73 73 20 74 68 61 6e 20 33 30   in less than 30
28490 30 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 6f  0 milliseconds o
284a0 6e 20 61 20 6d 6f 64 65 72 6e 0a 77 6f 72 6b 73  n a modern.works
284b0 74 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c 69 6d  tation...<h3>Lim
284c0 69 74 61 74 69 6f 6e 73 20 41 6e 64 20 43 61 76  itations And Cav
284d0 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75 6c 3e 0a  eats</h3>..<ul>.
284e0 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54 48  <li><p>.The WITH
284f0 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62   clause cannot b
28500 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61 20  e used within a 
28510 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
28520 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49  ..<li><p>.The WI
28530 54 48 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61  TH clause must a
28540 70 70 65 61 72 20 61 74 20 74 68 65 20 62 65 67  ppear at the beg
28550 69 6e 6e 69 6e 67 20 6f 66 20 61 20 74 6f 70 2d  inning of a top-
28560 6c 65 76 65 6c 20 5b 53 45 4c 45 43 54 5d 20 73  level [SELECT] s
28570 74 61 74 65 6d 65 6e 74 0a 6f 72 20 61 74 20 74  tatement.or at t
28580 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
28590 61 20 73 75 62 71 75 65 72 79 2e 20 20 54 68 65  a subquery.  The
285a0 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e   WITH clause can
285b0 6e 6f 74 20 62 65 20 70 72 65 70 65 6e 64 65 64  not be prepended
285c0 20 74 6f 0a 74 68 65 20 73 65 63 6f 6e 64 20 6f   to.the second o
285d0 72 20 73 75 62 73 65 71 75 65 6e 74 20 53 45 4c  r subsequent SEL
285e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66  ECT statement of
285f0 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c   a [compound sel
28600 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68  ect]..<li><p>.Th
28610 65 20 53 51 4c 3a 31 39 39 39 20 73 70 65 63 20  e SQL:1999 spec 
28620 72 65 71 75 69 72 65 73 20 74 68 61 74 20 74 68  requires that th
28630 65 20 52 45 43 55 52 53 49 56 45 20 6b 65 79 77  e RECURSIVE keyw
28640 6f 72 64 20 66 6f 6c 6c 6f 77 20 57 49 54 48 20  ord follow WITH 
28650 69 6e 20 61 6e 79 0a 57 49 54 48 20 63 6c 61 75  in any.WITH clau
28660 73 65 20 74 68 61 74 20 69 6e 63 6c 75 64 65 73  se that includes
28670 20 61 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d   a recursive com
28680 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
28690 73 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 20  sion.  However, 
286a0 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69 74  for.compatibilit
286b0 79 20 77 69 74 68 20 53 71 6c 53 65 72 76 65 72  y with SqlServer
286c0 20 61 6e 64 20 4f 72 61 63 6c 65 2c 20 53 51 4c   and Oracle, SQL
286d0 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 65 6e 66  ite does not enf
286e0 6f 72 63 65 20 74 68 69 73 20 72 75 6c 65 2e 0a  orce this rule..
286f0 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </ul>..<tcl>.###
28700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28740 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
28750 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c 65  tion SELECT sele
28760 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72 79  ct {SELECT query
28770 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
28780 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74  leDiagram select
28790 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c  -stmt.</tcl>...<
287a0 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74 61  p>The SELECT sta
287b0 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  tement is used t
287c0 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74 61  o query the data
287d0 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75 6c  base.  The.resul
287e0 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69 73  t of a SELECT is
287f0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f   zero or more ro
28800 77 73 20 6f 66 20 64 61 74 61 20 77 68 65 72 65  ws of data where
28810 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61 20   each row.has a 
28820 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  fixed number of 
28830 63 6f 6c 75 6d 6e 73 2e 20 20 41 20 53 45 4c 45  columns.  A SELE
28840 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65  CT statement doe
28850 73 20 6e 6f 74 20 6d 61 6b 65 0a 61 6e 79 20 63  s not make.any c
28860 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
28870 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 54 68 65 20  tabase...<p>The 
28880 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20  "[select-stmt]" 
28890 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61  syntax diagram a
288a0 62 6f 76 65 20 61 74 74 65 6d 70 74 73 20 74 6f  bove attempts to
288b0 20 73 68 6f 77 20 61 73 20 6d 75 63 68 20 6f 66   show as much of
288c0 20 74 68 65 0a 53 45 4c 45 43 54 20 73 74 61 74   the.SELECT stat
288d0 65 6d 65 6e 74 20 73 79 6e 74 61 78 20 61 73 20  ement syntax as 
288e0 70 6f 73 73 69 62 6c 65 20 69 6e 20 61 20 73 69  possible in a si
288f0 6e 67 6c 65 20 64 69 61 67 72 61 6d 2c 20 62 65  ngle diagram, be
28900 63 61 75 73 65 20 73 6f 6d 65 20 72 65 61 64 65  cause some reade
28910 72 73 0a 66 69 6e 64 20 74 68 61 74 20 68 65 6c  rs.find that hel
28920 70 66 75 6c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  pful.  The follo
28930 77 69 6e 67 20 22 5b 66 61 63 74 6f 72 65 64 2d  wing "[factored-
28940 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 69 73  select-stmt]" is
28950 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a   an alternative.
28960 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
28970 74 68 61 74 20 65 78 70 72 65 73 73 65 73 20 74  that expresses t
28980 68 65 20 73 61 6d 65 20 73 79 6e 74 61 78 20 62  he same syntax b
28990 75 74 20 74 72 69 65 73 20 74 6f 20 62 72 65 61  ut tries to brea
289a0 6b 20 74 68 65 20 73 79 6e 74 61 78 20 0a 64 6f  k the syntax .do
289b0 77 6e 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72 20  wn into smaller 
289c0 63 68 75 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e 0a 52  chunks...<tcl>.R
289d0 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
289e0 61 67 72 61 6d 20 2d 2d 69 6e 69 74 69 61 6c 6c  agram --initiall
289f0 79 2d 68 69 64 64 65 6e 20 66 61 63 74 6f 72 65  y-hidden factore
28a00 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20 73 65  d-select-stmt se
28a10 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e  lect-core.</tcl>
28a20 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74  ..<p>Note that t
28a30 68 65 72 65 20 61 72 65 20 70 61 74 68 73 20 74  here are paths t
28a40 68 72 6f 75 67 68 20 74 68 65 20 73 79 6e 74 61  hrough the synta
28a50 78 20 64 69 61 67 72 61 6d 73 20 74 68 61 74 0a  x diagrams that.
28a60 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  are not allowed 
28a70 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20 53 6f  in practice.  So
28a80 6d 65 20 65 78 61 6d 70 6c 65 73 3a 0a 3c 75 6c  me examples:.<ul
28a90 3e 0a 3c 6c 69 3e 41 20 5b 56 41 4c 55 45 53 5d  >.<li>A [VALUES]
28aa0 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 74   clause can be t
28ab0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
28ac0 20 69 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20   in a [compound 
28ad0 53 45 4c 45 43 54 5d 0a 20 20 20 20 74 68 61 74  SELECT].    that
28ae0 20 75 73 65 73 20 61 20 5b 57 49 54 48 5d 20 63   uses a [WITH] c
28af0 6c 61 75 73 65 2c 20 62 75 74 20 61 20 5b 73 69  lause, but a [si
28b00 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 74 68 61  mple SELECT] tha
28b10 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 20 20  t consists of.  
28b20 20 20 6a 75 73 74 20 61 20 5b 56 41 4c 55 45 53    just a [VALUES
28b30 5d 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20  ] clause cannot 
28b40 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20 61  be preceded by a
28b50 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2e 0a   [WITH] clause..
28b60 3c 6c 69 3e 54 68 65 20 5b 57 49 54 48 5d 20 63  <li>The [WITH] c
28b70 6c 61 75 73 65 20 6d 75 73 74 20 6f 63 63 75 72  lause must occur
28b80 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 53 45   on the first SE
28b90 4c 45 43 54 20 6f 66 20 61 20 5b 63 6f 6d 70 6f  LECT of a [compo
28ba0 75 6e 64 20 53 45 4c 45 43 54 5d 2e 0a 20 20 20  und SELECT]..   
28bb0 20 49 74 20 63 61 6e 6e 6f 74 20 66 6f 6c 6c 6f   It cannot follo
28bc0 77 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70  w a [compound-op
28bd0 65 72 61 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e 0a 54  erator]..</ul>.T
28be0 68 65 73 65 20 61 6e 64 20 6f 74 68 65 72 20 73  hese and other s
28bf0 69 6d 69 6c 61 72 20 73 79 6e 74 61 78 20 72 65  imilar syntax re
28c00 73 74 72 69 63 74 69 6f 6e 73 20 61 72 65 20 64  strictions are d
28c10 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65 20  escribed in the 
28c20 74 65 78 74 2e 0a 0a 3c 70 3e 54 68 65 20 53 45  text...<p>The SE
28c30 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
28c40 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 70 6c  s the most compl
28c50 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e 64 20 69  icated command i
28c60 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61  n the SQL langua
28c70 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74 68 65 20  ge..To make the 
28c80 64 65 73 63 72 69 70 74 69 6f 6e 20 65 61 73 69  description easi
28c90 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73 6f  er to follow, so
28ca0 6d 65 20 6f 66 20 74 68 65 20 70 61 73 73 61 67  me of the passag
28cb0 65 73 20 62 65 6c 6f 77 20 64 65 73 63 72 69 62  es below describ
28cc0 65 0a 74 68 65 20 77 61 79 20 74 68 65 20 64 61  e.the way the da
28cd0 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 61  ta returned by a
28ce0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
28cf0 74 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  t is determined 
28d00 61 73 20 61 20 73 65 72 69 65 73 20 6f 66 0a 73  as a series of.s
28d10 74 65 70 73 2e 20 49 74 20 69 73 20 69 6d 70 6f  teps. It is impo
28d20 72 74 61 6e 74 20 74 6f 20 6b 65 65 70 20 69 6e  rtant to keep in
28d30 20 6d 69 6e 64 20 74 68 61 74 20 74 68 69 73 20   mind that this 
28d40 69 73 20 70 75 72 65 6c 79 20 69 6c 6c 75 73 74  is purely illust
28d50 72 61 74 69 76 65 20 2d 0a 69 6e 20 70 72 61 63  rative -.in prac
28d60 74 69 63 65 20 6e 65 69 74 68 65 72 20 53 51 4c  tice neither SQL
28d70 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f 74 68 65  ite nor any othe
28d80 72 20 53 51 4c 20 65 6e 67 69 6e 65 20 69 73 20  r SQL engine is 
28d90 72 65 71 75 69 72 65 64 20 74 6f 20 66 6f 6c 6c  required to foll
28da0 6f 77 20 0a 74 68 69 73 20 6f 72 20 61 6e 79 20  ow .this or any 
28db0 6f 74 68 65 72 20 73 70 65 63 69 66 69 63 20 70  other specific p
28dc0 72 6f 63 65 73 73 2e 0a 0a 3c 74 63 6c 3e 68 64  rocess...<tcl>hd
28dd0 5f 66 72 61 67 6d 65 6e 74 20 73 69 6d 70 6c 65  _fragment simple
28de0 73 65 6c 65 63 74 20 7b 73 69 6d 70 6c 65 20 53  select {simple S
28df0 45 4c 45 43 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ELECT}</tcl>.<h3
28e00 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20 50  >Simple Select P
28e10 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a  rocessing</h3>..
28e20 3c 70 3e 54 68 65 20 63 6f 72 65 20 6f 66 20 61  <p>The core of a
28e30 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
28e40 74 20 69 73 20 61 20 22 73 69 6d 70 6c 65 20 53  t is a "simple S
28e50 45 4c 45 43 54 22 20 73 68 6f 77 6e 20 62 79 20  ELECT" shown by 
28e60 74 68 65 0a 5b 73 65 6c 65 63 74 2d 63 6f 72 65  the.[select-core
28e70 5d 20 61 6e 64 20 5b 73 69 6d 70 6c 65 2d 73 65  ] and [simple-se
28e80 6c 65 63 74 2d 73 74 6d 74 5d 20 73 79 6e 74 61  lect-stmt] synta
28e90 78 20 64 69 61 67 72 61 6d 73 20 62 65 6c 6f 77  x diagrams below
28ea0 2e 20 20 0a 49 6e 20 70 72 61 63 74 69 63 65 2c  .  .In practice,
28eb0 20 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74 61   most SELECT sta
28ec0 74 65 6d 65 6e 74 73 20 61 72 65 20 73 69 6d 70  tements are simp
28ed0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
28ee0 65 6e 74 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63  ents...<tcl>.Rec
28ef0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
28f00 72 61 6d 20 73 69 6d 70 6c 65 2d 73 65 6c 65 63  ram simple-selec
28f10 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63 6f  t-stmt select-co
28f20 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 47 65  re.</tcl>..<p>Ge
28f30 6e 65 72 61 74 69 6e 67 20 74 68 65 20 72 65 73  nerating the res
28f40 75 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c 65  ults of a simple
28f50 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e   SELECT.statemen
28f60 74 20 69 73 20 70 72 65 73 65 6e 74 65 64 20 61  t is presented a
28f70 73 20 61 20 66 6f 75 72 20 73 74 65 70 20 70 72  s a four step pr
28f80 6f 63 65 73 73 20 69 6e 20 74 68 65 20 64 65 73  ocess in the des
28f90 63 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a  cription below:.
28fa0 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  .<ol>.  <li> <p>
28fb0 5b 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72  [FROM clause] pr
28fc0 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e  ocessing: The in
28fd0 70 75 74 20 64 61 74 61 20 66 6f 72 20 74 68 65  put data for the
28fe0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69   simple SELECT i
28ff0 73 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d 69  s.       determi
29000 6e 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20 64  ned. The input d
29010 61 74 61 20 69 73 20 65 69 74 68 65 72 20 69 6d  ata is either im
29020 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c  plicitly a singl
29030 65 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20 20  e row with 0.   
29040 20 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20      columns (if 
29050 74 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d  there is no FROM
29060 20 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20 64   clause) or is d
29070 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
29080 20 46 52 4f 4d 0a 20 20 20 20 20 20 20 63 6c 61   FROM.       cla
29090 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  use..  <li> <p>[
290a0 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70 72  WHERE clause] pr
290b0 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e  ocessing: The in
290c0 70 75 74 20 64 61 74 61 20 69 73 20 66 69 6c 74  put data is filt
290d0 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20 57  ered using the W
290e0 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61 75  HERE.       clau
290f0 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  se expression.  
29100 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f 55  .  <li> <p>[GROU
29110 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20 48  P BY|GROUP BY, H
29120 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c 74  AVING and result
29130 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69  -column expressi
29140 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20  on] processing: 
29150 0a 20 20 20 20 20 20 20 54 68 65 20 73 65 74 20  .       The set 
29160 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 69  of result rows i
29170 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61 67  s computed by ag
29180 67 72 65 67 61 74 69 6e 67 20 74 68 65 20 64 61  gregating the da
29190 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a  ta according to.
291a0 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55 50         any GROUP
291b0 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20 63   BY clause and c
291c0 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20 72  alculating the r
291d0 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73  esult-set expres
291e0 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20 20  sions for the.  
291f0 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68 65       rows of the
29200 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20   filtered input 
29210 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c 69  dataset.  .  <li
29220 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c 44  > <p>[DISTINCT|D
29230 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79 77  ISTINCT/ALL keyw
29240 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  ord] processing:
29250 20 49 66 20 74 68 65 20 71 75 65 72 79 20 69 73   If the query is
29260 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20 20   a "SELECT.     
29270 20 20 44 49 53 54 49 4e 43 54 22 20 71 75 65 72    DISTINCT" quer
29280 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  y, duplicate row
29290 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72  s are removed fr
292a0 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72 65  om the set of re
292b0 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c 3e  sult rows..</ol>
292c0 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74  ..<p>There are t
292d0 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d 70  wo types of simp
292e0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
292f0 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65 20  ent - aggregate 
29300 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67 61  and .non-aggrega
29310 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20 73  te queries. ^A s
29320 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
29330 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67 67  tement is an agg
29340 72 65 67 61 74 65 20 71 75 65 72 79 20 69 66 0a  regate query if.
29350 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74 68  it contains eith
29360 65 72 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c  er a GROUP BY cl
29370 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20 6d  ause or one or m
29380 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
29390 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20 72  nctions.in the r
293a0 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68 65  esult-set. ^Othe
293b0 72 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d 70  rwise, if a simp
293c0 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61 69  le SELECT contai
293d0 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65 0a  ns no aggregate.
293e0 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47  functions or a G
293f0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c 20  ROUP BY clause, 
29400 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72  it is a non-aggr
29410 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c 70  egate query...<p
29420 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e 61  ><b>1. Determina
29430 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64 61  tion of input da
29440 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65 20  ta (FROM clause 
29450 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e  processing).</b>
29460 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
29470 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74 63  t fromclause</tc
29480 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
29490 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73 65  rds {FROM clause
294a0 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  }</tcl>..<p>The 
294b0 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20  input data used 
294c0 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  by a simple SELE
294d0 43 54 20 71 75 65 72 79 20 69 73 20 61 20 73 65  CT query is a se
294e0 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f  t of <i>N</i> ro
294f0 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f 69  ws .each <i>M</i
29500 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e 0a  > columns wide..
29510 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52 4f  .<p>^(If the FRO
29520 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74  M clause is omit
29530 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70 6c  ted from a simpl
29540 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
29550 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69 6e  nt, then the .in
29560 70 75 74 20 64 61 74 61 20 69 73 20 69 6d 70 6c  put data is impl
29570 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65 20  icitly a single 
29580 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e 73  row zero columns
29590 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c 69   wide)^ (i.e. <i
295a0 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69 3e  >N</i>=1 and.<i>
295b0 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49 66  M</i>=0)...<p>If
295c0 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69   a FROM clause i
295d0 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
295e0 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20 61   data on which a
295f0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71   simple SELECT q
29600 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63 6f  uery.operates co
29610 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e 65  mes from the one
29620 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
29630 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 28 53  or subqueries (S
29640 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
29650 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73 29  .in parenthesis)
29660 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c 6f   specified follo
29670 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65  wing the FROM ke
29680 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 71 75 65  yword. ^A subque
29690 72 79 20 73 70 65 63 69 66 69 65 64 0a 69 6e 20  ry specified.in 
296a0 74 68 65 20 74 61 62 6c 65 2d 6f 72 2d 73 75 62  the table-or-sub
296b0 71 75 65 72 79 20 66 6f 6c 6c 6f 77 69 6e 67 20  query following 
296c0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
296d0 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c  in a .simple SEL
296e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
296f0 0a 68 61 6e 64 6c 65 64 20 61 73 20 69 66 20 69  .handled as if i
29700 74 20 77 61 73 20 61 20 74 61 62 6c 65 20 63 6f  t was a table co
29710 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 61 74  ntaining the dat
29720 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 65 78  a returned by ex
29730 65 63 75 74 69 6e 67 20 74 68 65 0a 73 75 62 71  ecuting the.subq
29740 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 20  uery statement. 
29750 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20  ^Each column of 
29760 74 68 65 20 73 75 62 71 75 65 72 79 20 68 61 73  the subquery has
29770 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c   the.[collation|
29780 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
29790 63 65 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69 74  ce] and [affinit
297a0 79 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  y] of the corres
297b0 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69  ponding expressi
297c0 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62 71 75 65  on.in the subque
297d0 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  ry statement...<
297e0 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f  p>^If there is o
297f0 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62  nly a single tab
29800 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
29810 6e 20 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73  n the FROM.claus
29820 65 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 70 75  e, then the inpu
29830 74 20 64 61 74 61 20 75 73 65 64 20 62 79 20 74  t data used by t
29840 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
29850 65 6e 74 20 69 73 20 74 68 65 20 63 6f 6e 74 65  ent is the conte
29860 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64  nts of the.named
29870 20 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 72   table. ^If ther
29880 65 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f  e is more than o
29890 6e 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ne table or subq
298a0 75 65 72 79 20 69 6e 20 46 52 4f 4d 20 63 6c 61  uery in FROM cla
298b0 75 73 65 0a 74 68 65 6e 20 74 68 65 20 63 6f 6e  use.then the con
298c0 74 65 6e 74 73 20 6f 66 20 61 6c 6c 20 74 61 62  tents of all tab
298d0 6c 65 73 20 61 6e 64 2f 6f 72 20 73 75 62 71 75  les and/or subqu
298e0 65 72 69 65 73 0a 61 72 65 20 6a 6f 69 6e 65 64  eries.are joined
298f0 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 64   into a single d
29900 61 74 61 73 65 74 20 66 6f 72 20 74 68 65 20 73  ataset for the s
29910 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
29920 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61 74  tement to operat
29930 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f  e on..Exactly ho
29940 77 20 74 68 65 20 64 61 74 61 20 69 73 20 63 6f  w the data is co
29950 6d 62 69 6e 65 64 20 64 65 70 65 6e 64 73 20 6f  mbined depends o
29960 6e 20 74 68 65 20 73 70 65 63 69 66 69 63 20 5b  n the specific [
29970 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 5d 20 61  join-operator] a
29980 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61  nd.[join-constra
29990 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f 6e  int] used to con
299a0 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73 20  nect the tables 
299b0 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74 6f  or subqueries to
299c0 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c 20  gether...<p>All 
299d0 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65 20  joins in SQLite 
299e0 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65  are based on the
299f0 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
29a00 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ct of the left a
29a10 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64 61  nd.right-hand da
29a20 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f 6c  tasets. ^The col
29a30 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72 74  umns of the cart
29a40 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64 61  esian product da
29a50 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a 6f  taset are, in .o
29a60 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63 6f  rder, all the co
29a70 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66  lumns of the lef
29a80 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 66  t-hand dataset f
29a90 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 74  ollowed by all t
29aa0 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68  he columns.of th
29ab0 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
29ac0 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73 20  aset. ^There is 
29ad0 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61 72  a row in the car
29ae0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
29af0 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62 79  ataset.formed by
29b00 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68 20   combining each 
29b10 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69  unique combinati
29b20 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f 6d  on of a row from
29b30 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 0a   the left-hand .
29b40 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64  and right-hand d
29b50 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f 74  atasets. ^(In ot
29b60 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
29b70 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61  e left-hand data
29b80 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a  set consists of.
29b90 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>N<sub><small>
29ba0 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  left</small></su
29bb0 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20 0a  b></i> rows of .
29bc0 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>M<sub><small>
29bd0 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  left</small></su
29be0 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20  b></i> columns, 
29bf0 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68 61  and the right-ha
29c00 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c 69  nd dataset of.<i
29c10 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69  >N<sub><small>ri
29c20 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62  ght</small></sub
29c30 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 0a 3c 69  ></i> rows of.<i
29c40 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69  >M<sub><small>ri
29c50 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62  ght</small></sub
29c60 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 74  ></i> columns, t
29c70 68 65 6e 20 74 68 65 20 63 61 72 74 65 73 69 61  hen the cartesia
29c80 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61 0a 64  n product is a.d
29c90 61 74 61 73 65 74 20 6f 66 20 0a 3c 69 3e 4e 3c  ataset of .<i>N<
29ca0 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c  sub><small>left<
29cb0 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 26 74 69  /small></sub>&ti
29cc0 6d 65 73 3b 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c  mes;N<sub><small
29cd0 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
29ce0 73 75 62 3e 3c 2f 69 3e 0a 72 6f 77 73 2c 20 65  sub></i>.rows, e
29cf0 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 0a  ach containing .
29d00 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  <i>M<sub><small>
29d10 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  left</small></su
29d20 62 3e 2b 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e  b>+M<sub><small>
29d30 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  right</small></s
29d40 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e  ub></i> columns.
29d50 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6a  )^..<p>^If the j
29d60 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73 20  oin-operator is 
29d70 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22 49  "CROSS JOIN", "I
29d80 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49  NNER JOIN", "JOI
29d90 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28 22  N" or a comma.("
29da0 2c 22 29 20 61 6e 64 20 74 68 65 72 65 20 69 73  ,") and there is
29db0 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20   no ON or USING 
29dc0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
29dd0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6a   result of the j
29de0 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74 68  oin is.simply th
29df0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
29e00 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20  uct of the left 
29e10 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 64  and right-hand d
29e20 61 74 61 73 65 74 73 2e 20 0a 49 66 20 6a 6f 69  atasets. .If joi
29e30 6e 2d 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20  n-operator does 
29e40 68 61 76 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47  have ON or USING
29e50 20 63 6c 61 75 73 65 73 2c 20 74 68 6f 73 65 20   clauses, those 
29e60 61 72 65 20 68 61 6e 64 6c 65 64 20 61 63 63 6f  are handled acco
29e70 72 64 69 6e 67 20 74 6f 0a 74 68 65 20 66 6f 6c  rding to.the fol
29e80 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70 6f  lowing bullet po
29e90 69 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  ints:..<ul>.  <l
29ea0 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 72 65  i> <p>^(If there
29eb0 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65   is an ON clause
29ec0 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 65 78 70   then the ON exp
29ed0 72 65 73 73 69 6f 6e 20 69 73 0a 20 20 20 20 20  ression is.     
29ee0 20 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20    evaluated for 
29ef0 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
29f00 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
29f10 74 20 61 73 20 61 20 0a 20 20 20 20 20 20 20 5b  t as a .       [
29f20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
29f30 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66  on]. Only rows f
29f40 6f 72 20 77 68 69 63 68 20 74 68 65 20 65 78 70  or which the exp
29f50 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
29f60 73 20 74 6f 20 0a 20 20 20 20 20 20 20 74 72 75  s to .       tru
29f70 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66  e are included f
29f80 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 2e  rom the dataset.
29f90 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49  )^..  <li> <p>^I
29fa0 66 20 74 68 65 72 65 20 69 73 20 61 20 55 53 49  f there is a USI
29fb0 4e 47 20 63 6c 61 75 73 65 0a 20 20 20 20 20 20  NG clause.      
29fc0 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68   then each of th
29fd0 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73  e column names s
29fe0 70 65 63 69 66 69 65 64 20 6d 75 73 74 20 65 78  pecified must ex
29ff0 69 73 74 20 69 6e 20 74 68 65 20 64 61 74 61 73  ist in the datas
2a000 65 74 73 20 74 6f 20 0a 20 20 20 20 20 20 20 62  ets to .       b
2a010 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64  oth the left and
2a020 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 6a 6f   right of the jo
2a030 69 6e 2d 6f 70 65 72 61 74 6f 72 2e 20 5e 28 46  in-operator. ^(F
2a040 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66 20  or each pair of 
2a050 6e 61 6d 65 64 0a 20 20 20 20 20 20 20 63 6f 6c  named.       col
2a060 75 6d 6e 73 2c 20 74 68 65 20 65 78 70 72 65 73  umns, the expres
2a070 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72 68  sion "lhs.X = rh
2a080 73 2e 58 22 20 69 73 20 65 76 61 6c 75 61 74 65  s.X" is evaluate
2a090 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
2a0a0 66 0a 20 20 20 20 20 20 20 74 68 65 20 63 61 72  f.       the car
2a0b0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61  tesian product a
2a0c0 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70  s a [boolean exp
2a0d0 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72  ression]. Only r
2a0e0 6f 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20  ows for which.  
2a0f0 20 20 20 20 20 61 6c 6c 20 73 75 63 68 20 65 78       all such ex
2a100 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61  pressions evalua
2a110 74 65 73 20 74 6f 20 74 72 75 65 20 61 72 65 20  tes to true are 
2a120 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68  included from th
2a130 65 0a 20 20 20 20 20 20 20 72 65 73 75 6c 74 20  e.       result 
2a140 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d  set.)^ ^When com
2a150 70 61 72 69 6e 67 20 76 61 6c 75 65 73 20 61 73  paring values as
2a160 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61 20 55   a result of a U
2a170 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65  SING clause, the
2a180 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20 72  .       normal r
2a190 75 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e  ules for handlin
2a1a0 67 20 61 66 66 69 6e 69 74 69 65 73 2c 20 63 6f  g affinities, co
2a1b0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2a1c0 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20 20  s and NULL.     
2a1d0 20 20 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70    values in comp
2a1e0 61 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e  arisons apply. ^
2a1f0 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20  The column from 
2a200 74 68 65 20 64 61 74 61 73 65 74 20 6f 6e 20 74  the dataset on t
2a210 68 65 0a 20 20 20 20 20 20 20 6c 65 66 74 2d 68  he.       left-h
2a220 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65 20  and side of the 
2a230 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73  join-operator is
2a240 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
2a250 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61  e on the left-ha
2a260 6e 64 0a 20 20 20 20 20 20 20 73 69 64 65 20 6f  nd.       side o
2a270 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
2a280 20 6f 70 65 72 61 74 6f 72 20 28 3d 29 20 66 6f   operator (=) fo
2a290 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
2a2a0 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 20  f collation .   
2a2b0 20 20 20 20 73 65 71 75 65 6e 63 65 20 61 6e 64      sequence and
2a2c0 20 61 66 66 69 6e 69 74 79 20 70 72 65 63 65 64   affinity preced
2a2d0 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70  ence...       <p
2a2e0 3e 5e 46 6f 72 20 65 61 63 68 20 70 61 69 72 20  >^For each pair 
2a2f0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74  of columns ident
2a300 69 66 69 65 64 20 62 79 20 61 20 55 53 49 4e 47  ified by a USING
2a310 20 63 6c 61 75 73 65 2c 20 74 68 65 20 63 6f 6c   clause, the col
2a320 75 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d 20  umn.       from 
2a330 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64  the right-hand d
2a340 61 74 61 73 65 74 20 69 73 20 6f 6d 69 74 74 65  ataset is omitte
2a350 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65  d from the joine
2a360 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 69 73  d dataset. ^This
2a370 20 0a 20 20 20 20 20 20 20 69 73 20 74 68 65 20   .       is the 
2a380 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20  only difference 
2a390 62 65 74 77 65 65 6e 20 61 20 55 53 49 4e 47 20  between a USING 
2a3a0 63 6c 61 75 73 65 20 61 6e 64 20 69 74 73 20 65  clause and its e
2a3b0 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20  quivalent ON.   
2a3c0 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a      constraint..
2a3d0 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20  .  <li> <p>^(If 
2a3e0 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77  the NATURAL keyw
2a3f0 6f 72 64 20 69 73 20 69 6e 20 74 68 65 20 6a 6f  ord is in the jo
2a400 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74 68 65 6e  in-operator then
2a410 20 61 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c 69   an.       impli
2a420 63 69 74 20 55 53 49 4e 47 20 63 6c 61 75 73 65  cit USING clause
2a430 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
2a440 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74   join-constraint
2a450 73 2e 20 54 68 65 20 69 6d 70 6c 69 63 69 74 0a  s. The implicit.
2a460 20 20 20 20 20 20 20 55 53 49 4e 47 20 63 6c 61         USING cla
2a470 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 65 61 63  use contains eac
2a480 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  h of the column 
2a490 6e 61 6d 65 73 20 74 68 61 74 20 61 70 70 65 61  names that appea
2a4a0 72 20 69 6e 20 62 6f 74 68 0a 20 20 20 20 20 20  r in both.      
2a4b0 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
2a4c0 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 64  ght-hand input d
2a4d0 61 74 61 73 65 74 73 2e 29 5e 20 5e 49 66 20 74  atasets.)^ ^If t
2a4e0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
2a4f0 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 69 6e  t-hand.       in
2a500 70 75 74 20 64 61 74 61 73 65 74 73 20 66 65 61  put datasets fea
2a510 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63  ture no common c
2a520 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65  olumn names, the
2a530 6e 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65  n the NATURAL ke
2a540 79 77 6f 72 64 0a 20 20 20 20 20 20 20 68 61 73  yword.       has
2a550 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68   no effect on th
2a560 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
2a570 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20   join. ^A USING 
2a580 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79  or ON clause may
2a590 0a 20 20 20 20 20 20 20 6e 6f 74 20 62 65 20 61  .       not be a
2a5a0 64 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74  dded to a join t
2a5b0 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
2a5c0 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72  e NATURAL keywor
2a5d0 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28  d...  <li> <p>^(
2a5e0 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72  If the join-oper
2a5f0 61 74 6f 72 20 69 73 20 61 20 22 4c 45 46 54 20  ator is a "LEFT 
2a600 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20 4f  JOIN" or "LEFT O
2a610 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65 6e  UTER JOIN", then
2a620 0a 20 20 20 20 20 20 20 61 66 74 65 72 0a 20 20  .       after.  
2a630 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72 20 55       the ON or U
2a640 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67 20 63  SING filtering c
2a650 6c 61 75 73 65 73 20 68 61 76 65 20 62 65 65 6e  lauses have been
2a660 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65 78 74   applied, an ext
2a670 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20 20 20  ra row is .     
2a680 20 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6f    added to the o
2a690 75 74 70 75 74 20 66 6f 72 20 65 61 63 68 20 72  utput for each r
2a6a0 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ow in the origin
2a6b0 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e 70  al left-hand inp
2a6c0 75 74 20 0a 20 20 20 20 20 20 20 64 61 74 61 73  ut .       datas
2a6d0 65 74 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  et that correspo
2a6e0 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20 61  nds to no rows a
2a6f0 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f 6d  t all in the com
2a700 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20 64 61  posite.       da
2a710 74 61 73 65 74 20 28 69 66 20 61 6e 79 29 2e 29  taset (if any).)
2a720 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72 6f 77  ^ ^The added row
2a730 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20 76  s contain NULL v
2a740 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c  alues in the col
2a750 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68 61 74  umns.       that
2a760 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20   would normally 
2a770 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20 63  contain values c
2a780 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 72  opied from the r
2a790 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 0a  ight-hand input.
2a7a0 20 20 20 20 20 20 20 64 61 74 61 73 65 74 2e 20         dataset. 
2a7b0 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57 68   .</ul>..<p>^(Wh
2a7c0 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74 77 6f  en more than two
2a7d0 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f 69 6e   tables are join
2a7e0 65 64 20 74 6f 67 65 74 68 65 72 20 61 73 20 70  ed together as p
2a7f0 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20 63 6c  art of a FROM cl
2a800 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20 6f  ause,.the join o
2a810 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70 72  perations are pr
2a820 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64 65 72  ocessed in order
2a830 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
2a840 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a 77  ght. In other .w
2a850 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d 20 63  ords, the FROM c
2a860 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f 70  lause (A join-op
2a870 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43  -1 B join-op-2 C
2a880 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 73  ) is computed as
2a890 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20   .((A join-op-1 
2a8a0 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 2e  B) join-op-2 C).
2a8b0 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
2a8c0 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69 6e 20 7b  ment crossjoin {
2a8d0 74 72 65 61 74 73 20 74 68 65 20 43 52 4f 53 53  treats the CROSS
2a8e0 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f 72 20 73   JOIN operator s
2a8f0 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e 0a  pecially}</tcl>.
2a900 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65 3a  <p><b>Side note:
2a910 20 53 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e   Special handlin
2a920 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 2e  g of CROSS JOIN.
2a930 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69 73 20 6e  </b>.^There is n
2a940 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  o difference bet
2a950 77 65 65 6e 20 74 68 65 20 22 49 4e 4e 45 52 20  ween the "INNER 
2a960 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e  JOIN", "JOIN" an
2a970 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72 61  d "," join.opera
2a980 74 6f 72 73 2e 20 54 68 65 79 20 61 72 65 20 63  tors. They are c
2a990 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74 65 72 63  ompletely interc
2a9a0 68 61 6e 67 65 61 62 6c 65 20 69 6e 20 53 51 4c  hangeable in SQL
2a9b0 69 74 65 2e 0a 5e 28 54 68 65 20 22 43 52 4f 53  ite..^(The "CROS
2a9c0 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70 65  S JOIN" join ope
2a9d0 72 61 74 6f 72 20 70 72 6f 64 75 63 65 73 20 74  rator produces t
2a9e0 68 65 20 73 61 6d 65 20 72 65 73 75 6c 74 20 61  he same result a
2a9f0 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a 4f  s the ."INNER JO
2aa00 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20  IN", "JOIN" and 
2aa10 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29 5e 2c  "," operators)^,
2aa20 20 62 75 74 20 69 73 20 0a 5b 43 52 4f 53 53 20   but is .[CROSS 
2aa30 4a 4f 49 4e 7c 68 61 6e 64 6c 65 64 20 64 69 66  JOIN|handled dif
2aa40 66 65 72 65 6e 74 6c 79 20 62 79 20 74 68 65 20  ferently by the 
2aa50 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 5d  query optimizer]
2aa60 0a 69 6e 20 74 68 61 74 20 69 74 20 70 72 65 76  .in that it prev
2aa70 65 6e 74 73 20 74 68 65 20 71 75 65 72 79 20 6f  ents the query o
2aa80 70 74 69 6d 69 7a 65 72 20 66 72 6f 6d 20 72 65  ptimizer from re
2aa90 6f 72 64 65 72 69 6e 67 0a 74 68 65 20 74 61 62  ordering.the tab
2aaa0 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2e  les in the join.
2aab0 20 20 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e    An application
2aac0 20 70 72 6f 67 72 61 6d 6d 65 72 20 63 61 6e 20   programmer can 
2aad0 75 73 65 20 74 68 65 20 43 52 4f 53 53 20 4a 4f  use the CROSS JO
2aae0 49 4e 20 0a 6f 70 65 72 61 74 6f 72 20 74 6f 20  IN .operator to 
2aaf0 64 69 72 65 63 74 6c 79 20 69 6e 66 6c 75 65 6e  directly influen
2ab00 63 65 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d  ce the algorithm
2ab10 20 74 68 61 74 20 69 73 20 63 68 6f 73 65 6e 20   that is chosen 
2ab20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a 74 68 65  to implement.the
2ab30 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2ab40 74 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67 20  t.  Avoid using 
2ab50 43 52 4f 53 53 20 4a 4f 49 4e 20 65 78 63 65 70  CROSS JOIN excep
2ab60 74 20 69 6e 20 73 70 65 63 69 66 69 63 20 73 69  t in specific si
2ab70 74 75 61 74 69 6f 6e 73 20 0a 77 68 65 72 65 20  tuations .where 
2ab80 6d 61 6e 75 61 6c 20 63 6f 6e 74 72 6f 6c 20 6f  manual control o
2ab90 66 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  f the query opti
2aba0 6d 69 7a 65 72 20 69 73 20 64 65 73 69 72 65 64  mizer is desired
2abb0 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67 0a 43  .  Avoid using.C
2abc0 52 4f 53 53 20 4a 4f 49 4e 20 65 61 72 6c 79 20  ROSS JOIN early 
2abd0 69 6e 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65  in the developme
2abe0 6e 74 20 6f 66 20 61 6e 20 61 70 70 6c 69 63 61  nt of an applica
2abf0 74 69 6f 6e 20 61 73 20 64 6f 69 6e 67 20 73 6f  tion as doing so
2ac00 20 69 73 0a 61 20 3c 61 20 68 72 65 66 3d 22 68   is.a <a href="h
2ac10 74 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f 63 67 69  ttp://c2.com/cgi
2ac20 2f 77 69 6b 69 3f 50 72 65 6d 61 74 75 72 65 4f  /wiki?PrematureO
2ac30 70 74 69 6d 69 7a 61 74 69 6f 6e 22 3e 70 72 65  ptimization">pre
2ac40 6d 61 74 75 72 65 0a 6f 70 74 69 6d 69 7a 61 74  mature.optimizat
2ac50 69 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65 20 73 70  ion</a>.  The sp
2ac60 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f  ecial handling o
2ac70 66 20 43 52 4f 53 53 20 4a 4f 49 4e 20 69 73 20  f CROSS JOIN is 
2ac80 61 6e 20 53 51 4c 69 74 65 2d 73 70 65 63 69 66  an SQLite-specif
2ac90 69 63 0a 66 65 61 74 75 72 65 20 61 6e 64 20 69  ic.feature and i
2aca0 73 20 6e 6f 74 20 61 20 70 61 72 74 20 6f 66 20  s not a part of 
2acb0 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 20 20  standard SQL..  
2acc0 20 20 20 20 20 0a 0a 3c 74 63 6c 3e 68 64 5f 66       ..<tcl>hd_f
2acd0 72 61 67 6d 65 6e 74 20 77 68 65 72 65 63 6c 61  ragment wherecla
2ace0 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68  use</tcl>.<tcl>h
2acf0 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57 48 45 52  d_keywords {WHER
2ad00 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a  E clause}</tcl>.
2ad10 3c 70 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20 63  <p><b>2. WHERE c
2ad20 6c 61 75 73 65 20 66 69 6c 74 65 72 69 6e 67 2e  lause filtering.
2ad30 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61 20  </b>..<p>^(If a 
2ad40 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20  WHERE clause is 
2ad50 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 57  specified, the W
2ad60 48 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e 20  HERE expression 
2ad70 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  is evaluated for
2ad80 20 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68   .each row in th
2ad90 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 73 20  e input data as 
2ada0 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  a [boolean expre
2adb0 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77  ssion]. Only row
2adc0 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a  s for which the.
2add0 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70  WHERE clause exp
2ade0 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
2adf0 73 20 74 6f 20 74 72 75 65 20 61 72 65 20 69 6e  s to true are in
2ae00 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20  cluded from the 
2ae10 64 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a 63  dataset before.c
2ae20 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 20 20 52 6f  ontinuing.)^  Ro
2ae30 77 73 20 61 72 65 20 65 78 63 6c 75 64 65 64 20  ws are excluded 
2ae40 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20  from the result 
2ae50 69 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  if the WHERE cla
2ae60 75 73 65 0a 65 76 61 6c 75 61 74 65 73 20 74 6f  use.evaluates to
2ae70 20 65 69 74 68 65 72 20 66 61 6c 73 65 20 6f 72   either false or
2ae80 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f 72 20 61   NULL...<p>For a
2ae90 20 4a 4f 49 4e 20 6f 72 20 49 4e 4e 45 52 20 4a   JOIN or INNER J
2aea0 4f 49 4e 20 6f 72 20 43 52 4f 53 53 20 4a 4f 49  OIN or CROSS JOI
2aeb0 4e 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 64  N, there is no d
2aec0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
2aed0 6e 20 0a 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  n .a constraint 
2aee0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
2aef0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 61  e WHERE clause a
2af00 6e 64 20 6f 6e 65 20 69 6e 20 74 68 65 20 4f 4e  nd one in the ON
2af10 20 63 6c 61 75 73 65 2e 20 20 48 6f 77 65 76 65   clause.  Howeve
2af20 72 2c 0a 66 6f 72 20 61 20 4c 45 46 54 20 4a 4f  r,.for a LEFT JO
2af30 49 4e 20 6f 72 20 4c 45 46 54 20 4f 55 54 45 52  IN or LEFT OUTER
2af40 20 4a 4f 49 4e 2c 20 74 68 65 20 64 69 66 66 65   JOIN, the diffe
2af50 72 65 6e 63 65 20 69 73 20 76 65 72 79 20 69 6d  rence is very im
2af60 70 6f 72 74 61 6e 74 2e 20 20 0a 49 6e 20 61 20  portant.  .In a 
2af70 4c 45 46 54 20 4a 4f 49 4e 2c 0a 74 68 65 20 65  LEFT JOIN,.the e
2af80 78 74 72 61 20 4e 55 4c 4c 20 72 6f 77 20 66 6f  xtra NULL row fo
2af90 72 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  r the right-hand
2afa0 20 74 61 62 6c 65 20 69 73 20 61 64 64 65 64 20   table is added 
2afb0 61 66 74 65 72 20 4f 4e 20 63 6c 61 75 73 65 20  after ON clause 
2afc0 70 72 6f 63 65 73 73 69 6e 67 0a 62 75 74 20 62  processing.but b
2afd0 65 66 6f 72 65 20 57 48 45 52 45 20 63 6c 61 75  efore WHERE clau
2afe0 73 65 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20  se processing.  
2aff0 41 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66 20  A constraint of 
2b000 74 68 65 20 66 6f 72 6d 20 22 6c 65 66 74 2e 78  the form "left.x
2b010 3d 72 69 67 68 74 2e 79 22 0a 69 6e 20 61 6e 20  =right.y".in an 
2b020 4f 4e 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 74  ON clause will t
2b030 68 65 72 65 66 6f 72 65 20 61 6c 6c 6f 77 20 74  herefore allow t
2b040 68 72 6f 75 67 68 20 74 68 65 20 61 64 64 65 64  hrough the added
2b050 20 61 6c 6c 2d 4e 55 4c 4c 20 72 6f 77 73 20 6f   all-NULL rows o
2b060 66 20 74 68 65 0a 72 69 67 68 74 20 74 61 62 6c  f the.right tabl
2b070 65 2e 20 20 42 75 74 20 69 66 20 74 68 61 74 20  e.  But if that 
2b080 73 61 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  same constraint 
2b090 69 73 20 69 6e 20 74 68 65 20 57 48 45 52 45 20  is in the WHERE 
2b0a0 63 6c 61 75 73 65 20 61 20 4e 55 4c 4c 20 69 6e  clause a NULL in
2b0b0 0a 22 72 69 67 68 74 2e 79 22 20 77 69 6c 6c 20  ."right.y" will 
2b0c0 70 72 65 76 65 6e 74 20 74 68 65 20 65 78 70 72  prevent the expr
2b0d0 65 73 73 69 6f 6e 20 22 6c 65 66 74 2e 78 3d 72  ession "left.x=r
2b0e0 69 67 68 74 2e 79 22 20 66 72 6f 6d 20 62 65 69  ight.y" from bei
2b0f0 6e 67 20 74 72 75 65 2c 20 61 6e 64 0a 74 68 75  ng true, and.thu
2b100 73 20 65 78 63 6c 75 64 65 20 74 68 61 74 20 72  s exclude that r
2b110 6f 77 20 66 72 6f 6d 20 74 68 65 20 6f 75 74 70  ow from the outp
2b120 75 74 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47 65  ut...<p><b>3. Ge
2b130 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  neration of the 
2b140 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
2b150 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f  ws.</b>.<tcl>hd_
2b160 66 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74 73  fragment results
2b170 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64  et</tcl>.<tcl>hd
2b180 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75 6c  _keywords {resul
2b190 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e  t-set expression
2b1a0 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f 74  s} {GROUP BY}</t
2b1b0 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65  cl>..<p>Once the
2b1c0 20 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f 6d   input data from
2b1d0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
2b1e0 20 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65 72   has been filter
2b1f0 65 64 20 62 79 20 74 68 65 0a 57 48 45 52 45 20  ed by the.WHERE 
2b200 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f  clause expressio
2b210 6e 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65 20  n (if any), the 
2b220 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
2b230 77 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c  ws for the simpl
2b240 65 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63 61  e .SELECT are ca
2b250 6c 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74 6c  lculated. Exactl
2b260 79 20 68 6f 77 20 74 68 69 73 20 69 73 20 64 6f  y how this is do
2b270 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68  ne depends on wh
2b280 65 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c 65  ether the simple
2b290 20 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20 61   .SELECT is an a
2b2a0 67 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e 2d  ggregate or non-
2b2b0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2c  aggregate query,
2b2c0 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20   and whether or 
2b2d0 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20 63  not a GROUP.BY c
2b2e0 6c 61 75 73 65 20 77 61 73 20 73 70 65 63 69 66  lause was specif
2b2f0 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c 69  ied...<p> The li
2b300 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
2b310 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 53 45  s between the SE
2b320 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65  LECT and FROM ke
2b330 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e 20  ywords is known 
2b340 61 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65 78  as.the result ex
2b350 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20 20  pression list.  
2b360 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65 78 70  ^If a result exp
2b370 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 73  ression is the s
2b380 70 65 63 69 61 6c 20 65 78 70 72 65 73 73 69 6f  pecial expressio
2b390 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63  n."*" then all c
2b3a0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
2b3b0 70 75 74 20 64 61 74 61 20 61 72 65 20 73 75 62  put data are sub
2b3c0 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 61  stituted for tha
2b3d0 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e  t one expression
2b3e0 2e 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72 65  ..^(If the expre
2b3f0 73 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c 69  ssion is the ali
2b400 61 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72  as of a table or
2b410 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
2b420 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f 6c   FROM clause.fol
2b430 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74 68  lowed by ".*" th
2b440 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 66  en all columns f
2b450 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74 61  rom the named ta
2b460 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
2b470 61 72 65 0a 73 75 62 73 74 69 74 75 74 65 64 20  are.substituted 
2b480 66 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20 65  for the single e
2b490 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28 49  xpression.)^ ^(I
2b4a0 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f  t is an error to
2b4b0 20 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22 61   use a "*" or."a
2b4c0 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69  lias.*" expressi
2b4d0 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78  on in any contex
2b4e0 74 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  t other than a r
2b4f0 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
2b500 20 6c 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73   list.)^.^(It is
2b510 20 61 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20 74   also an error t
2b520 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 20 22  o use a "*" or "
2b530 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73  alias.*" express
2b540 69 6f 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65 20  ion in a simple 
2b550 53 45 4c 45 43 54 0a 71 75 65 72 79 20 74 68 61  SELECT.query tha
2b560 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  t does not have 
2b570 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e  a FROM clause.)^
2b580 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62  ..<p> ^(The numb
2b590 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
2b5a0 20 74 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e   the rows return
2b5b0 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53  ed by a simple S
2b5c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a  ELECT statement.
2b5d0 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  is equal to the 
2b5e0 6e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73  number of expres
2b5f0 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73  sions in the res
2b600 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
2b610 69 73 74 20 61 66 74 65 72 0a 73 75 62 73 74 69  ist after.substi
2b620 74 75 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20  tution of * and 
2b630 61 6c 69 61 73 2e 2a 20 65 78 70 72 65 73 73 69  alias.* expressi
2b640 6f 6e 73 2e 29 5e 20 45 61 63 68 20 72 65 73 75  ons.)^ Each resu
2b650 6c 74 20 72 6f 77 20 69 73 20 63 61 6c 63 75 6c  lt row is calcul
2b660 61 74 65 64 20 62 79 0a 65 76 61 6c 75 61 74 69  ated by.evaluati
2b670 6e 67 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ng the expressio
2b680 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
2b690 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
2b6a0 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f   with respect to
2b6b0 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a.single row of
2b6c0 20 69 6e 70 75 74 20 64 61 74 61 20 6f 72 2c 20   input data or, 
2b6d0 66 6f 72 20 61 67 67 72 65 67 61 74 65 20 71 75  for aggregate qu
2b6e0 65 72 69 65 73 2c 20 77 69 74 68 20 72 65 73 70  eries, with resp
2b6f0 65 63 74 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f  ect to a group.o
2b700 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20  f rows...<ul>.  
2b710 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53  <li><p>^If the S
2b720 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2b730 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72  is <b>a non-aggr
2b740 65 67 61 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c  egate query</b>,
2b750 20 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20   then .    each 
2b760 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
2b770 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
2b780 69 6f 6e 20 6c 69 73 74 20 69 73 20 65 76 61 6c  ion list is eval
2b790 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  uated for each r
2b7a0 6f 77 20 69 6e 0a 20 20 20 20 74 68 65 20 64 61  ow in.    the da
2b7b0 74 61 73 65 74 20 66 69 6c 74 65 72 65 64 20 62  taset filtered b
2b7c0 79 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  y the WHERE clau
2b7d0 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49  se...  <li><p>^I
2b7e0 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f the SELECT sta
2b7f0 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20  tement is <b>an 
2b800 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
2b810 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50 0a  without a GROUP.
2b820 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73      BY</b> claus
2b830 65 2c 20 74 68 65 6e 20 65 61 63 68 20 61 67 67  e, then each agg
2b840 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2b850 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  n in the result-
2b860 73 65 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c  set is .    eval
2b870 75 61 74 65 64 20 6f 6e 63 65 20 61 63 72 6f 73  uated once acros
2b880 73 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  s the entire dat
2b890 61 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d  aset. ^Each non-
2b8a0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2b8b0 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65 20  sion.    in the 
2b8c0 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65 76  result-set is ev
2b8d0 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72  aluated once for
2b8e0 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20   an arbitrarily 
2b8f0 73 65 6c 65 63 74 65 64 20 72 6f 77 20 6f 66 0a  selected row of.
2b900 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74 2e      the dataset.
2b910 20 5e 54 68 65 20 73 61 6d 65 20 61 72 62 69 74   ^The same arbit
2b920 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20  rarily selected 
2b930 72 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  row is used for 
2b940 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67  each.    non-agg
2b950 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2b960 6e 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 64  n. ^Or, if the d
2b970 61 74 61 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ataset contains 
2b980 7a 65 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20  zero rows, then 
2b990 0a 20 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67  .    each non-ag
2b9a0 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2b9b0 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  on is evaluated 
2b9c0 61 67 61 69 6e 73 74 20 61 20 72 6f 77 20 63 6f  against a row co
2b9d0 6e 73 69 73 74 69 6e 67 0a 20 20 20 20 65 6e 74  nsisting.    ent
2b9e0 69 72 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61  irely of NULL va
2b9f0 6c 75 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68  lues...   <p>^Th
2ba00 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  e single row of 
2ba10 72 65 73 75 6c 74 2d 73 65 74 20 64 61 74 61 20  result-set data 
2ba20 63 72 65 61 74 65 64 20 62 79 20 65 76 61 6c 75  created by evalu
2ba30 61 74 69 6e 67 20 74 68 65 20 61 67 67 72 65 67  ating the aggreg
2ba40 61 74 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d  ate.    and non-
2ba50 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2ba60 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73  sions in the res
2ba70 75 6c 74 2d 73 65 74 20 66 6f 72 6d 73 20 74 68  ult-set forms th
2ba80 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20  e result of an. 
2ba90 20 20 20 61 67 67 72 65 67 61 74 65 20 71 75 65     aggregate que
2baa0 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f  ry without a GRO
2bab0 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 41  UP BY clause. ^A
2bac0 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
2bad0 79 20 77 69 74 68 6f 75 74 20 61 0a 20 20 20 20  y without a.    
2bae0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
2baf0 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 65  always returns e
2bb00 78 61 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f  xactly one row o
2bb10 66 20 64 61 74 61 2c 20 65 76 65 6e 20 69 66 20  f data, even if 
2bb20 74 68 65 72 65 20 61 72 65 0a 20 20 20 20 7a 65  there are.    ze
2bb30 72 6f 20 72 6f 77 73 20 6f 66 20 69 6e 70 75 74  ro rows of input
2bb40 20 64 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70   data...  <li><p
2bb50 3e 5e 28 49 66 20 74 68 65 20 53 45 4c 45 43 54  >^(If the SELECT
2bb60 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62   statement is <b
2bb70 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75  >an aggregate qu
2bb80 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50  ery with a GROUP
2bb90 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75  .    BY</b> clau
2bba0 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 6f 66  se, then each of
2bbb0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
2bbc0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
2bbd0 72 74 20 6f 66 20 74 68 65 0a 20 20 20 20 47 52  rt of the.    GR
2bbe0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 69 73  OUP BY clause is
2bbf0 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
2bc00 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 64  ach row of the d
2bc10 61 74 61 73 65 74 2e 20 45 61 63 68 20 72 6f 77  ataset. Each row
2bc20 0a 20 20 20 20 69 73 20 74 68 65 6e 20 61 73 73  .    is then ass
2bc30 69 67 6e 65 64 20 74 6f 20 61 20 22 67 72 6f 75  igned to a "grou
2bc40 70 22 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  p" based on the 
2bc50 72 65 73 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f  results; rows fo
2bc60 72 20 77 68 69 63 68 0a 20 20 20 20 74 68 65 20  r which.    the 
2bc70 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75  results of evalu
2bc80 61 74 69 6e 67 20 74 68 65 20 47 52 4f 55 50 20  ating the GROUP 
2bc90 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  BY expressions a
2bca0 72 65 20 74 68 65 20 73 61 6d 65 20 67 65 74 0a  re the same get.
2bcb0 20 20 20 20 61 73 73 69 67 6e 65 64 20 74 6f 20      assigned to 
2bcc0 74 68 65 20 73 61 6d 65 20 67 72 6f 75 70 2e 29  the same group.)
2bcd0 5e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  ^ ^For the purpo
2bce0 73 65 73 20 6f 66 20 67 72 6f 75 70 69 6e 67 20  ses of grouping 
2bcf0 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20  rows, NULL .    
2bd00 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
2bd10 64 65 72 65 64 20 65 71 75 61 6c 2e 20 5e 54 68  dered equal. ^Th
2bd20 65 20 75 73 75 61 6c 20 72 75 6c 65 73 20 66 6f  e usual rules fo
2bd30 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c  r [collation|sel
2bd40 65 63 74 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c  ecting a.    col
2bd50 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d  lation sequence]
2bd60 20 77 69 74 68 20 77 68 69 63 68 20 74 6f 20 63   with which to c
2bd70 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c 75  ompare text valu
2bd80 65 73 20 61 70 70 6c 79 20 77 68 65 6e 20 65 76  es apply when ev
2bd90 61 6c 75 61 74 69 6e 67 0a 20 20 20 20 65 78 70  aluating.    exp
2bda0 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52  ressions in a GR
2bdb0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 20  OUP BY clause.  
2bdc0 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73  ^The expressions
2bdd0 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59   in the GROUP BY
2bde0 20 63 6c 61 75 73 65 0a 20 20 20 20 64 6f 20 3c   clause.    do <
2bdf0 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65  em>not</em> have
2be00 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f   to be expressio
2be10 6e 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  ns that appear i
2be20 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 5e 54  n the result. ^T
2be30 68 65 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  he.    expressio
2be40 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59  ns in a GROUP BY
2be50 20 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74 20   clause may not 
2be60 62 65 20 61 67 67 72 65 67 61 74 65 20 65 78 70  be aggregate exp
2be70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c  ressions...    <
2be80 70 3e 5e 28 49 66 20 61 20 48 41 56 49 4e 47 20  p>^(If a HAVING 
2be90 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
2bea0 69 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c 75  ied, it is evalu
2beb0 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61  ated once for ea
2bec0 63 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f 66  ch group .    of
2bed0 20 72 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c   rows as a [bool
2bee0 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  ean expression].
2bef0 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   If the result o
2bf00 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
2bf10 0a 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61 75  .    HAVING clau
2bf20 73 65 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  se is false, the
2bf30 20 67 72 6f 75 70 20 69 73 20 64 69 73 63 61 72   group is discar
2bf40 64 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 48  ded.)^ ^If the H
2bf50 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 0a  AVING clause is.
2bf60 20 20 20 20 61 6e 20 61 67 67 72 65 67 61 74 65      an aggregate
2bf70 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20   expression, it 
2bf80 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 63 72  is evaluated acr
2bf90 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20  oss all rows in 
2bfa0 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20  the group. ^If. 
2bfb0 20 20 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75     a HAVING clau
2bfc0 73 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72  se is a non-aggr
2bfd0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
2bfe0 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
2bff0 64 20 77 69 74 68 20 72 65 73 70 65 63 74 0a 20  d with respect. 
2c000 20 20 20 74 6f 20 61 6e 20 61 72 62 69 74 72 61     to an arbitra
2c010 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
2c020 77 20 66 72 6f 6d 20 74 68 65 20 67 72 6f 75 70  w from the group
2c030 2e 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65  .  ^The HAVING e
2c040 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20  xpression may.  
2c050 20 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65    refer to value
2c060 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61 74  s, even aggregat
2c070 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61  e functions, tha
2c080 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65  t are not in the
2c090 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20   result.</p>..  
2c0a0 20 20 3c 70 3e 5e 45 61 63 68 20 65 78 70 72 65    <p>^Each expre
2c0b0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73  ssion in the res
2c0c0 75 6c 74 2d 73 65 74 20 69 73 20 74 68 65 6e 20  ult-set is then 
2c0d0 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
2c0e0 6f 72 20 65 61 63 68 0a 20 20 20 20 67 72 6f 75  or each.    grou
2c0f0 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20 74  p of rows. ^If t
2c100 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
2c110 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78   an aggregate ex
2c120 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20  pression, it is 
2c130 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 61  .    evaluated a
2c140 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69  cross all rows i
2c150 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74  n the group. ^Ot
2c160 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 65  herwise, it is e
2c170 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74  valuated against
2c180 0a 20 20 20 20 61 20 73 69 6e 67 6c 65 20 61 72  .    a single ar
2c190 62 69 74 72 61 72 69 6c 79 20 63 68 6f 73 65 6e  bitrarily chosen
2c1a0 20 72 6f 77 20 66 72 6f 6d 20 77 69 74 68 69 6e   row from within
2c1b0 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 20   the group. ^If 
2c1c0 74 68 65 72 65 20 69 73 20 6d 6f 72 65 0a 20 20  there is more.  
2c1d0 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61    than one non-a
2c1e0 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
2c1f0 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
2c200 74 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20  t-set, then all 
2c210 73 75 63 68 0a 20 20 20 20 65 78 70 72 65 73 73  such.    express
2c220 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74  ions are evaluat
2c230 65 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20  ed for the same 
2c240 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61  row...    <p>^Ea
2c250 63 68 20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75  ch group of inpu
2c260 74 20 64 61 74 61 73 65 74 20 72 6f 77 73 20 63  t dataset rows c
2c270 6f 6e 74 72 69 62 75 74 65 73 20 61 20 73 69 6e  ontributes a sin
2c280 67 6c 65 20 72 6f 77 20 74 6f 20 74 68 65 20 0a  gle row to the .
2c290 20 20 20 20 73 65 74 20 6f 66 20 72 65 73 75 6c      set of resul
2c2a0 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74  t rows. ^Subject
2c2b0 20 74 6f 20 66 69 6c 74 65 72 69 6e 67 20 61 73   to filtering as
2c2c0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
2c2d0 65 20 44 49 53 54 49 4e 43 54 0a 20 20 20 20 6b  e DISTINCT.    k
2c2e0 65 79 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62  eyword, the numb
2c2f0 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72  er of rows retur
2c300 6e 65 64 20 62 79 20 61 6e 20 61 67 67 72 65 67  ned by an aggreg
2c310 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61  ate query with a
2c320 20 47 52 4f 55 50 0a 20 20 20 20 42 59 20 63 6c   GROUP.    BY cl
2c330 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65  ause is the same
2c340 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   as the number o
2c350 66 20 67 72 6f 75 70 73 20 6f 66 20 72 6f 77 73  f groups of rows
2c360 20 70 72 6f 64 75 63 65 64 20 62 79 20 61 70 70   produced by app
2c370 6c 79 69 6e 67 0a 20 20 20 20 74 68 65 20 47 52  lying.    the GR
2c380 4f 55 50 20 42 59 20 61 6e 64 20 48 41 56 49 4e  OUP BY and HAVIN
2c390 47 20 63 6c 61 75 73 65 73 20 74 6f 20 74 68 65  G clauses to the
2c3a0 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20   filtered input 
2c3b0 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a  dataset..</ul>..
2c3c0 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c  <p><b>4. Removal
2c3d0 20 6f 66 20 64 75 70 6c 69 63 61 74 65 20 72 6f   of duplicate ro
2c3e0 77 73 20 28 44 49 53 54 49 4e 43 54 20 70 72 6f  ws (DISTINCT pro
2c3f0 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74  cessing).</b>.<t
2c400 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64  cl>hd_fragment d
2c410 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74  istinct</tcl>.<t
2c420 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
2c430 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a  DISTINCT}</tcl>.
2c440 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20  .<p>^One of the 
2c450 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54 20  ALL or DISTINCT 
2c460 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c  keywords may fol
2c470 6c 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20 6b  low the SELECT k
2c480 65 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d  eyword in a .sim
2c490 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
2c4a0 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 73 69  ment. ^If the si
2c4b0 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61  mple SELECT is a
2c4c0 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65   SELECT ALL, the
2c4d0 6e 20 74 68 65 0a 65 6e 74 69 72 65 20 73 65 74  n the.entire set
2c4e0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
2c4f0 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  are returned by 
2c500 74 68 65 20 53 45 4c 45 43 54 2e 20 5e 49 66 20  the SELECT. ^If 
2c510 6e 65 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44  neither ALL or.D
2c520 49 53 54 49 4e 43 54 20 61 72 65 20 70 72 65 73  ISTINCT are pres
2c530 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62 65  ent, then the be
2c540 68 61 76 69 6f 72 20 69 73 20 61 73 20 69 66 20  havior is as if 
2c550 41 4c 4c 20 77 65 72 65 20 73 70 65 63 69 66 69  ALL were specifi
2c560 65 64 2e 20 0a 5e 49 66 20 74 68 65 20 73 69 6d  ed. .^If the sim
2c570 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61 20  ple SELECT is a 
2c580 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 2c  SELECT DISTINCT,
2c590 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65 20   then duplicate 
2c5a0 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
2c5b0 0a 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66  .from the set of
2c5c0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 62 65 66   result rows bef
2c5d0 6f 72 65 20 69 74 20 69 73 20 72 65 74 75 72 6e  ore it is return
2c5e0 65 64 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72  ed. ^For the pur
2c5f0 70 6f 73 65 73 20 6f 66 0a 64 65 74 65 63 74 69  poses of.detecti
2c600 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  ng duplicate row
2c610 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75  s, two NULL valu
2c620 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
2c630 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e  d to be equal. ^
2c640 54 68 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65 73  The.normal rules
2c650 20 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61   for selecting a
2c660 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
2c670 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  nce to compare t
2c680 65 78 74 20 76 61 6c 75 65 73 20 77 69 74 68 0a  ext values with.
2c690 61 70 70 6c 79 2e 0a 0a 3c 74 63 6c 3e 0a 68 64  apply...<tcl>.hd
2c6a0 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f 75  _fragment compou
2c6b0 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  nd {compound sel
2c6c0 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 71  ect} {compound q
2c6d0 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20  uery} {compound 
2c6e0 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f 75 6e  SELECT} {compoun
2c6f0 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f 74 63 6c  d SELECTs}.</tcl
2c700 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53  >.<h3>Compound S
2c710 65 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74 73  elect Statements
2c720 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72  </h3>..<p>Two or
2c730 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65 20 53 45   more [simple SE
2c740 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  LECT] statements
2c750 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74 65   may be connecte
2c760 64 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66 6f  d together to fo
2c770 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  rm.a compound SE
2c780 4c 45 43 54 20 75 73 69 6e 67 20 74 68 65 20 55  LECT using the U
2c790 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c  NION, UNION ALL,
2c7a0 20 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45 58   INTERSECT or EX
2c7b0 43 45 50 54 20 6f 70 65 72 61 74 6f 72 2c 0a 61  CEPT operator,.a
2c7c0 73 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66  s shown by the f
2c7d0 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d  ollowing diagram
2c7e0 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69  :..<tcl>.Recursi
2c7f0 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
2c800 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74 2d  compound-select-
2c810 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
2c820 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  ^In a compound S
2c830 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63  ELECT, all the c
2c840 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43  onstituent SELEC
2c850 54 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74  Ts must return t
2c860 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72 20  he same .number 
2c870 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  of result column
2c880 73 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d 70 6f  s. ^As the compo
2c890 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70 6f  nents of a compo
2c8a0 75 6e 64 20 53 45 4c 45 43 54 20 6d 75 73 74 0a  und SELECT must.
2c8b0 62 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  be simple SELECT
2c8c0 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68 65   statements, the
2c8d0 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69  y may not contai
2c8e0 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72 20  n [ORDER BY] or 
2c8f0 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 2e  [LIMIT] clauses.
2c900 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64  .^[ORDER BY] and
2c910 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73   [LIMIT] clauses
2c920 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72 20   may only occur 
2c930 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
2c940 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e  e entire compoun
2c950 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64 20 74 68  d.SELECT, and th
2c960 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66  en only if the f
2c970 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66 20  inal element of 
2c980 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20  the compound is 
2c990 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53 5d 20 63  not a [VALUES] c
2c9a0 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63 6f  lause...<p>^A co
2c9b0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63 72  mpound SELECT cr
2c9c0 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49 4f  eated using UNIO
2c9d0 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72  N ALL operator r
2c9e0 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20 72  eturns all the r
2c9f0 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c  ows.from the SEL
2ca00 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ECT to the left 
2ca10 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c  of the UNION ALL
2ca20 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20 61   operator, and a
2ca30 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d  ll the rows.from
2ca40 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74   the SELECT to t
2ca50 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e 20  he right of it. 
2ca60 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61  ^The UNION opera
2ca70 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73 61  tor works the sa
2ca80 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20  me way as.UNION 
2ca90 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61 74  ALL, except that
2caa0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
2cab0 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  are removed from
2cac0 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75 6c   the final resul
2cad0 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45  t set..^The INTE
2cae0 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 72  RSECT operator r
2caf0 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65 72  eturns the inter
2cb00 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  section of the r
2cb10 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c 65  esults of the le
2cb20 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45 4c  ft and.right SEL
2cb30 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43 45  ECTs.  ^The EXCE
2cb40 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75  PT operator retu
2cb50 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20 6f  rns the subset o
2cb60 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  f rows returned 
2cb70 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c 45  by the.left SELE
2cb80 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  CT that are not 
2cb90 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62 79  also returned by
2cba0 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
2cbb0 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63 61  SELECT. ^Duplica
2cbc0 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d 6f  te.rows are remo
2cbd0 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73  ved from the res
2cbe0 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45 43  ults of INTERSEC
2cbf0 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70 65  T and EXCEPT ope
2cc00 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74 68  rators before th
2cc10 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  e.result set is 
2cc20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46  returned...<p>^F
2cc30 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
2cc40 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 64  of determining d
2cc50 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66 6f  uplicate rows fo
2cc60 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  r the results of
2cc70 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54   compound.SELECT
2cc80 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c   operators, NULL
2cc90 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
2cca0 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f 20  idered equal to 
2ccb0 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65  other NULL value
2ccc0 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20 66  s and.distinct f
2ccd0 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c  rom all non-NULL
2cce0 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f   values. ^The co
2ccf0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2cd00 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
2cd10 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65   .two text value
2cd20 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
2cd30 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  as if the column
2cd40 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  s of the left an
2cd50 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c  d right-hand.SEL
2cd60 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ECT statements w
2cd70 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ere the left and
2cd80 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72   right-hand oper
2cd90 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75 61  ands of the equa
2cda0 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c  ls (=).operator,
2cdb0 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72 65   except that gre
2cdc0 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65 20  ater precedence 
2cdd0 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20  is not assigned 
2cde0 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a  to a collation .
2cdf0 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69  sequence specifi
2ce00 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73 74  ed with the post
2ce10 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  fix COLLATE oper
2ce20 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69  ator. ^No affini
2ce30 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  ty.transformatio
2ce40 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 74  ns are applied t
2ce50 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68 65  o any values whe
2ce60 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73  n comparing rows
2ce70 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63 6f   as part of a.co
2ce80 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a  mpound SELECT. .
2ce90 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65 65  .<p>^(When three
2cea0 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20   or more simple 
2ceb0 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e 6e  SELECTs are conn
2cec0 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d  ected into a com
2ced0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68  pound SELECT,.th
2cee0 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65  ey group from le
2cef0 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20  ft to right. In 
2cf00 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
2cf10 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43 22  "A", "B" and "C"
2cf20 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20   are all.simple 
2cf30 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2cf40 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43 29  s, (A op B op C)
2cf50 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
2cf60 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43 29   ((A op B) op C)
2cf70 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  .)^..</p>..<tcl>
2cf80 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 65  hd_fragment orde
2cf90 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 20 7b  rby {order by} {
2cfa0 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63 6c 3e 0a  ORDER BY}</tcl>.
2cfb0 3c 68 33 3e 54 68 65 20 4f 52 44 45 52 20 42 59  <h3>The ORDER BY
2cfc0 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70   clause</h3>..<p
2cfd0 3e 49 66 20 61 20 53 45 4c 45 43 54 20 73 74 61  >If a SELECT sta
2cfe0 74 65 6d 65 6e 74 20 74 68 61 74 20 72 65 74 75  tement that retu
2cff0 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  rns more than on
2d000 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68  e row does not h
2d010 61 76 65 20 61 6e 0a 4f 52 44 45 52 20 42 59 20  ave an.ORDER BY 
2d020 63 6c 61 75 73 65 2c 20 74 68 65 20 6f 72 64 65  clause, the orde
2d030 72 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 72  r in which the r
2d040 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
2d050 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 4f   is undefined..O
2d060 72 2c 20 69 66 20 61 20 53 45 4c 45 43 54 20 73  r, if a SELECT s
2d070 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 68 61  tatement does ha
2d080 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  ve an ORDER BY c
2d090 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
2d0a0 6c 69 73 74 20 6f 66 0a 65 78 70 72 65 73 73 69  list of.expressi
2d0b0 6f 6e 73 20 61 74 74 61 63 68 65 64 20 74 6f 20  ons attached to 
2d0c0 74 68 65 20 4f 52 44 45 52 20 42 59 20 64 65 74  the ORDER BY det
2d0d0 65 72 6d 69 6e 65 20 74 68 65 20 6f 72 64 65 72  ermine the order
2d0e0 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 61   in which rows.a
2d0f0 72 65 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  re returned to t
2d100 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a 5e 49  he user...<p>.^I
2d110 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
2d120 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
2d130 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 20 6f   only the last o
2d140 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69  r right-most [si
2d150 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61 79  mple SELECT].may
2d160 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
2d170 59 20 63 6c 61 75 73 65 2e 20 5e 54 68 61 74 20  Y clause. ^That 
2d180 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
2d190 77 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f 73  will apply acros
2d1a0 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 6f  s all elements o
2d1b0 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20  f.the compound. 
2d1c0 5e 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f  ^If the right-mo
2d1d0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
2d1e0 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2d1f0 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d 20  ] is a [VALUES] 
2d200 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f 20  clause,.then no 
2d210 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
2d220 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68  is allowed on th
2d230 61 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a  at statement....
2d240 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69 72  <p>^Rows are fir
2d250 73 74 20 73 6f 72 74 65 64 20 62 61 73 65 64 20  st sorted based 
2d260 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
2d270 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f.evaluating the
2d280 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65   left-most expre
2d290 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44  ssion in the ORD
2d2a0 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e  ER BY list, then
2d2b0 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e   ties are broken
2d2c0 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74  .by evaluating t
2d2d0 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d  he second left-m
2d2e0 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ost expression a
2d2f0 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72  nd so on. The or
2d300 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f  der in which.two
2d310 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
2d320 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70  all ORDER BY exp
2d330 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74  ressions evaluat
2d340 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65  e to equal value
2d350 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69  s are.returned i
2d360 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61  s undefined. ^Ea
2d370 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ch ORDER BY expr
2d380 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70  ession may be op
2d390 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
2d3a0 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  d.by one of the 
2d3b0 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d  keywords ASC (sm
2d3c0 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65  aller values are
2d3d0 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29   returned first)
2d3e0 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65 72   or DESC (larger
2d3f0 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75  .values are retu
2d400 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66  rned first). ^If
2d410 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72 20   neither ASC or 
2d420 44 45 53 43 20 61 72 65 20 73 70 65 63 69 66 69  DESC are specifi
2d430 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72  ed, rows.are sor
2d440 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ted in ascending
2d450 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73   (smaller values
2d460 20 66 69 72 73 74 29 20 6f 72 64 65 72 20 62 79   first) order by
2d470 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61   default...<p>Ea
2d480 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ch ORDER BY expr
2d490 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73  ession is proces
2d4a0 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  sed as follows:<
2d4b0 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ol>.<li><p
2d4c0 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
2d4d0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2d4e0 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67  a constant integ
2d4f0 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78  er K then the.ex
2d500 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73  pression is cons
2d510 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20  idered an alias 
2d520 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c  for the K-th col
2d530 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
2d540 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61  t set.(columns a
2d550 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d  re numbered from
2d560 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 73   left to right s
2d570 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e  tarting with 1).
2d580 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65  ..<li><p>^If the
2d590 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2d5a0 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74  sion is an ident
2d5b0 69 66 69 65 72 20 74 68 61 74 20 63 6f 72 72 65  ifier that corre
2d5c0 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c  sponds to.the al
2d5d0 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68  ias of one of th
2d5e0 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  e output columns
2d5f0 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65  , then the expre
2d600 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65  ssion is conside
2d610 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72  red.an alias for
2d620 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c   that column...<
2d630 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
2d640 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
2d650 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2d660 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65 73  any other expres
2d670 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61  sion, it .is eva
2d680 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72  luated and the r
2d690 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73  eturned value us
2d6a0 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20  ed to order the 
2d6b0 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66  output rows. ^If
2d6c0 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74  .the SELECT stat
2d6d0 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c  ement is a simpl
2d6e0 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61  e SELECT, then a
2d6f0 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63  n ORDER BY may c
2d700 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74  ontain any.arbit
2d710 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73  rary expressions
2d720 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74  . ^However, if t
2d730 68 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 63  he SELECT is a c
2d740 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20  ompound SELECT, 
2d750 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78  then.ORDER BY ex
2d760 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61  pressions that a
2d770 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74  re not aliases t
2d780 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  o output columns
2d790 20 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c 79   must be exactly
2d7a0 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20  .the same as an 
2d7b0 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20  expression used 
2d7c0 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c  as an output col
2d7d0 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e  umn..</ol>..<p>^
2d7e0 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
2d7f0 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73   of sorting rows
2d800 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  , values are com
2d810 70 61 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d  pared in the sam
2d820 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f  e way.as for [co
2d830 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73  mparison express
2d840 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61  ions]. The colla
2d850 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73  tion sequence us
2d860 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77  ed to compare.tw
2d870 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20 69 73  o text values is
2d880 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66   determined as f
2d890 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20  ollows:..<ol>.  
2d8a0 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f  <li><p>^If the O
2d8b0 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
2d8c0 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20 61  on is assigned a
2d8d0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
2d8e0 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20  nce using.  the 
2d8f0 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45  postfix [COLLATE
2d900 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e   operator], then
2d910 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
2d920 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2d930 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c  e is.  used..  <
2d940 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
2d950 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
2d960 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2d970 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65  an alias to an e
2d980 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74  xpression.  that
2d990 20 68 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e   has been assign
2d9a0 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ed a collation s
2d9b0 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68  equence using th
2d9c0 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f  e postfix .  [CO
2d9d0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c  LLATE operator],
2d9e0 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74   then the collat
2d9f0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73  ion sequence ass
2da00 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69  igned to the ali
2da10 61 73 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f  ased.  expressio
2da20 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69  n is used..  <li
2da30 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
2da40 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
2da50 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
2da60 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69  column or an ali
2da70 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65  as of.  an expre
2da80 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20  ssion that is a 
2da90 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65  column, then the
2daa0 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
2dab0 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a  on sequence for.
2dac0 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20    the column is 
2dad0 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e  used. .  <li><p>
2dae0 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
2daf0 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69  [BINARY] collati
2db00 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  on sequence is u
2db10 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49  sed..</ol>..<p>I
2db20 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
2db30 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
2db40 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
2db50 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61  pressions are ha
2db60 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73  ndled.as aliases
2db70 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20   for one of the 
2db80 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
2db90 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a  f the compound..
2dba0 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59  ^(If an ORDER BY
2dbb0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e   expression is n
2dbc0 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c  ot an integer al
2dbd0 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65  ias, then SQLite
2dbe0 20 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65   searches.the le
2dbf0 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69  ft-most SELECT i
2dc00 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66  n the compound f
2dc10 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dc20 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73 20  mn that matches 
2dc30 65 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e  either.the secon
2dc40 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73  d or third rules
2dc50 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74   above. If a mat
2dc60 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
2dc70 20 73 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e   search stops an
2dc80 64 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d.the expression
2dc90 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61   is handled as a
2dca0 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
2dcb0 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68  result column th
2dcc0 61 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d  at it has been.m
2dcd0 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20  atched against. 
2dce0 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e  Otherwise, the n
2dcf0 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68  ext SELECT to th
2dd00 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65 64  e right is tried
2dd10 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e  , and so on.)^.^
2dd20 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65  If no matching e
2dd30 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
2dd40 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65   found in the re
2dd50 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  sult columns of 
2dd60 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20  any.constituent 
2dd70 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e  SELECT, it is an
2dd80 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65   error. ^Each te
2dd90 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20  rm of the ORDER 
2dda0 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f  BY clause is.pro
2ddb0 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c  cessed separatel
2ddc0 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74  y and may be mat
2ddd0 63 68 65 64 20 61 67 61 69 6e 73 74 20 72 65 73  ched against res
2dde0 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d  ult columns from
2ddf0 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43   different.SELEC
2de00 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  T statements in 
2de10 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70  the compound.</p
2de20 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
2de30 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65 74 20  ent limitoffset 
2de40 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54 7d  {LIMIT} {OFFSET}
2de50 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c  </tcl>.<h3>The L
2de60 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68 33 3e  IMIT clause</h3>
2de70 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  ..<p>^The LIMIT 
2de80 63 6c 61 75 73 65 20 69 73 20 75 73 65 64 20 74  clause is used t
2de90 6f 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72  o place an upper
2dea0 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75   bound on the nu
2deb0 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74  mber of rows.ret
2dec0 75 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e 74  urned by the ent
2ded0 69 72 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ire SELECT state
2dee0 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  ment...<p>^In a 
2def0 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2df00 5d 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74  ], only the.last
2df10 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b   or right-most [
2df20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d  simple SELECT] m
2df30 61 79 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d  ay contain a LIM
2df40 49 54 20 63 6c 61 75 73 65 2e 20 20 0a 5e 49 6e  IT clause.  .^In
2df50 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
2df60 45 43 54 5d 2c 20 0a 74 68 65 20 4c 49 4d 49 54  ECT], .the LIMIT
2df70 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
2df80 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f  to the entire co
2df90 6d 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a 75 73 74  mpound, not just
2dfa0 20 74 68 65 20 66 69 6e 61 6c 20 53 45 4c 45 43   the final SELEC
2dfb0 54 2e 0a 5e 49 66 20 74 68 65 20 72 69 67 68 74  T..^If the right
2dfc0 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45  -most [simple SE
2dfd0 4c 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55  LECT] is a [VALU
2dfe0 45 53 20 63 6c 61 75 73 65 5d 20 74 68 65 6e 20  ES clause] then 
2dff0 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a  no LIMIT clause.
2e000 69 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70 3e  is allowed...<p>
2e010 5e 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72  ^Any scalar expr
2e020 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73  ession may be us
2e030 65 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54  ed in the .LIMIT
2e040 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67   clause, so long
2e050 20 61 73 20 69 74 20 65 76 61 6c 75 61 74 65 73   as it evaluates
2e060 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   to an integer o
2e070 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63  r a value that c
2e080 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79  an be.losslessly
2e090 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
2e0a0 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68   integer. ^If th
2e0b0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
2e0c0 6c 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c  luates to a NULL
2e0d0 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f   .value or any o
2e0e0 74 68 65 72 20 76 61 6c 75 65 20 74 68 61 74 20  ther value that 
2e0f0 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
2e100 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
2e110 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e  o an integer, an
2e120 0a 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e  .error is return
2e130 65 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49  ed. ^If the LIMI
2e140 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T expression eva
2e150 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61  luates to a nega
2e160 74 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e  tive value,.then
2e170 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70   there is no upp
2e180 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
2e190 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72  number of rows r
2e1a0 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77  eturned. ^Otherw
2e1b0 69 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20  ise, the.SELECT 
2e1c0 72 65 74 75 72 6e 73 20 74 68 65 20 66 69 72 73  returns the firs
2e1d0 74 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20  t N rows of its 
2e1e0 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c  result set only,
2e1f0 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20   where N is the 
2e200 76 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c  value.that the L
2e210 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
2e220 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f  evaluates to. ^O
2e230 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54  r, if the SELECT
2e240 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
2e250 0a 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61  .return less tha
2e260 6e 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74  n N rows without
2e270 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
2e280 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65   then the entire
2e290 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72   result set is.r
2e2a0 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54  eturned. ..<p>^T
2e2b0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74  he expression at
2e2c0 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70  tached to the op
2e2d0 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c  tional OFFSET cl
2e2e0 61 75 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f  ause that may fo
2e2f0 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61  llow a.LIMIT cla
2e300 75 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76  use must also ev
2e310 61 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74  aluate to an int
2e320 65 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65  eger, or a value
2e330 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73   that can be.los
2e340 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
2e350 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e  d to an integer.
2e360 20 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73 69   ^If an expressi
2e370 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  on has an OFFSET
2e380 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68   clause,.then th
2e390 65 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61  e first M rows a
2e3a0 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
2e3b0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 72  the result set r
2e3c0 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
2e3d0 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20  ELECT.statement 
2e3e0 61 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72  and the next N r
2e3f0 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
2e400 2c 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20  , where M and N 
2e410 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
2e420 68 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61  hat.the OFFSET a
2e430 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
2e440 20 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65   evaluate to, re
2e450 73 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c  spectively. ^Or,
2e460 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77   if the SELECT.w
2e470 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73  ould return less
2e480 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69   than M+N rows i
2e490 66 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76  f it did not hav
2e4a0 65 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  e a LIMIT clause
2e4b0 2c 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74  , then the.first
2e4c0 20 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70   M rows are skip
2e4d0 70 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61  ped and the rema
2e4e0 69 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61  ining rows (if a
2e4f0 6e 79 29 20 61 72 65 20 72 65 74 75 72 6e 65 64  ny) are returned
2e500 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54  . ^If the.OFFSET
2e510 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65   clause evaluate
2e520 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  s to a negative 
2e530 76 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c  value, the resul
2e540 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  ts are the same 
2e550 61 73 20 69 66 20 69 74 0a 68 61 64 20 65 76 61  as if it.had eva
2e560 6c 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a  luated to zero..
2e570 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20  .<p>^Instead of 
2e580 61 20 73 65 70 61 72 61 74 65 20 4f 46 46 53 45  a separate OFFSE
2e590 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49  T clause, the LI
2e5a0 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73  MIT clause may s
2e5b0 70 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61  pecify two.scala
2e5c0 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65  r expressions se
2e5d0 70 61 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d  parated by a com
2e5e0 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  ma. ^In this cas
2e5f0 65 2c 20 74 68 65 20 66 69 72 73 74 20 65 78 70  e, the first exp
2e600 72 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20  ression.is used 
2e610 61 73 20 74 68 65 20 4f 46 46 53 45 54 20 65 78  as the OFFSET ex
2e620 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
2e630 20 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c   second as the L
2e640 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
2e650 0a 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72  .This is counter
2e660 2d 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77  -intuitive, as w
2e670 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46  hen using the OF
2e680 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 65 20  FSET clause the 
2e690 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77  second of.the tw
2e6a0 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73  o expressions is
2e6b0 20 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20   the OFFSET and 
2e6c0 74 68 65 20 66 69 72 73 74 20 74 68 65 20 4c 49  the first the LI
2e6d0 4d 49 54 2e 20 0a 54 68 69 73 20 72 65 76 65 72  MIT. .This rever
2e6e0 73 61 6c 20 6f 66 20 74 68 65 20 6f 66 66 73 65  sal of the offse
2e6f0 74 20 61 6e 64 20 6c 69 6d 69 74 20 69 73 20 69  t and limit is i
2e700 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20  ntentional.- it 
2e710 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74  maximizes compat
2e720 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68  ibility with oth
2e730 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
2e740 73 79 73 74 65 6d 73 2e 0a 48 6f 77 65 76 65 72  systems..However
2e750 2c 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  , to avoid confu
2e760 73 69 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72  sion, programmer
2e770 73 20 61 72 65 20 73 74 72 6f 6e 67 6c 79 20 65  s are strongly e
2e780 6e 63 6f 75 72 61 67 65 64 20 74 6f 20 75 73 65  ncouraged to use
2e790 0a 74 68 65 20 66 6f 72 6d 20 6f 66 20 74 68 65  .the form of the
2e7a0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74 68   LIMIT clause th
2e7b0 61 74 20 75 73 65 73 20 74 68 65 20 22 4f 46 46  at uses the "OFF
2e7c0 53 45 54 22 20 6b 65 79 77 6f 72 64 20 61 6e 64  SET" keyword and
2e7d0 20 61 76 6f 69 64 0a 75 73 69 6e 67 20 61 20 4c   avoid.using a L
2e7e0 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69 74 68  IMIT clause with
2e7f0 20 61 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74   a comma-separat
2e800 65 64 20 6f 66 66 73 65 74 2e 0a 0a 3c 74 63 6c  ed offset...<tcl
2e810 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c  >hd_fragment val
2e820 75 65 73 20 7b 56 41 4c 55 45 53 20 63 6c 61 75  ues {VALUES clau
2e830 73 65 7d 20 56 41 4c 55 45 53 3c 2f 74 63 6c 3e  se} VALUES</tcl>
2e840 0a 3c 68 33 3e 54 68 65 20 56 41 4c 55 45 53 20  .<h3>The VALUES 
2e850 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e  clause</h3>..<p>
2e860 5e 28 54 68 65 20 70 68 72 61 73 65 20 22 56 41  ^(The phrase "VA
2e870 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73  LUES(<i>expr-lis
2e880 74 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68  t</i>)" means th
2e890 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 61 73 20  e same thing.as 
2e8a0 22 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d  "SELECT <i>expr-
2e8b0 6c 69 73 74 3c 2f 69 3e 22 2e 29 5e 20 20 5e 28  list</i>".)^  ^(
2e8c0 54 68 65 20 70 68 72 61 73 65 0a 22 56 41 4c 55  The phrase."VALU
2e8d0 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d  ES(<i>expr-list-
2e8e0 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c 69 3e 65  1</i>),...,(<i>e
2e8f0 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 29 22  xpr-list-N</i>)"
2e900 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 0a   means the same.
2e910 74 68 69 6e 67 20 61 73 20 22 53 45 4c 45 43 54  thing as "SELECT
2e920 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31 3c   <i>expr-list-1<
2e930 2f 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c 20 2e 2e  /i> UNION ALL ..
2e940 2e 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53 45 4c 45  . UNION ALL.SELE
2e950 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d  CT <i>expr-list-
2e960 4e 3c 2f 69 3e 22 2e 29 5e 20 20 42 6f 74 68 20  N</i>".)^  Both 
2e970 66 6f 72 6d 73 20 61 72 65 20 74 68 65 20 73 61  forms are the sa
2e980 6d 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 0a  me, except that.
2e990 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 53 45  the number of SE
2e9a0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
2e9b0 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 69 73  in a compound is
2e9c0 20 6c 69 6d 69 74 65 64 20 62 79 0a 5b 53 51 4c   limited by.[SQL
2e9d0 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55  ITE_LIMIT_COMPOU
2e9e0 4e 44 5f 53 45 4c 45 43 54 5d 20 77 68 65 72 65  ND_SELECT] where
2e9f0 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
2ea00 20 72 6f 77 73 20 69 6e 20 61 0a 56 41 4c 55 45   rows in a.VALUE
2ea10 53 20 63 6c 61 75 73 65 20 68 61 73 20 6e 6f 20  S clause has no 
2ea20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 2e  arbitrary limit.
2ea30 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 73  ..<p>There are s
2ea40 6f 6d 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ome restrictions
2ea50 20 6f 6e 20 74 68 65 20 75 73 65 20 6f 66 20 61   on the use of a
2ea60 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 74   VALUES clause t
2ea70 68 61 74 20 61 72 65 0a 6e 6f 74 20 73 68 6f 77  hat are.not show
2ea80 6e 20 6f 6e 20 74 68 65 20 73 79 6e 74 61 78 20  n on the syntax 
2ea90 64 69 61 67 72 61 6d 73 3a 0a 0a 3c 75 6c 3e 0a  diagrams:..<ul>.
2eaa0 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45  <li><p>.^A VALUE
2eab0 53 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20  S clause cannot 
2eac0 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b  be followed by [
2ead0 4f 52 44 45 52 20 42 59 5d 2e 0a 0a 3c 6c 69 3e  ORDER BY]...<li>
2eae0 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53 20 63 6c  <p>.^A VALUES cl
2eaf0 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 66  ause cannot be f
2eb00 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4c 49 4d 49  ollowed by [LIMI
2eb10 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c 68 33 3e  T]..</ul>...<h3>
2eb20 54 68 65 20 57 49 54 48 20 43 6c 61 75 73 65 3c  The WITH Clause<
2eb30 2f 68 33 3e 0a 0a 3c 70 3e 5e 53 45 4c 45 43 54  /h3>..<p>^SELECT
2eb40 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20   statements may 
2eb50 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 70 72  be optionally pr
2eb60 65 63 65 64 65 64 20 62 79 20 61 20 73 69 6e 67  eceded by a sing
2eb70 6c 65 0a 5b 57 49 54 48 20 63 6c 61 75 73 65 5d  le.[WITH clause]
2eb80 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 6f 6e   that defines on
2eb90 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6d 6d 6f  e or more [commo
2eba0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
2ebb0 6f 6e 73 5d 0a 66 6f 72 20 75 73 65 20 77 69 74  ons].for use wit
2ebc0 68 69 6e 20 74 68 65 20 53 45 4c 45 43 54 20 73  hin the SELECT s
2ebd0 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e  tatement...<tcl>
2ebe0 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 61 62 66  hd_fragment tabf
2ebf0 75 6e 63 31 20 7b 74 61 62 6c 65 2d 76 61 6c 75  unc1 {table-valu
2ec00 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  ed functions in 
2ec10 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 7d  the FROM clause}
2ec20 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 61 62 6c 65  </tcl>.<h3>Table
2ec30 2d 76 61 6c 75 65 64 20 46 75 6e 63 74 69 6f 6e  -valued Function
2ec40 73 20 49 6e 20 54 68 65 20 46 52 4f 4d 20 43 6c  s In The FROM Cl
2ec50 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20  ause</h3>..<p>A 
2ec60 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20  [virtual table] 
2ec70 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 5b 68  that contains [h
2ec80 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 5d 20 63  idden columns] c
2ec90 61 6e 20 62 65 20 75 73 65 64 20 6c 69 6b 65 0a  an be used like.
2eca0 61 20 5b 74 61 62 6c 65 2d 76 61 6c 75 65 64 20  a [table-valued 
2ecb0 66 75 6e 63 74 69 6f 6e 5d 20 69 6e 20 74 68 65  function] in the
2ecc0 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 20 20 54   FROM clause.  T
2ecd0 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  he arguments to 
2ece0 74 68 65 0a 74 61 62 6c 65 2d 76 61 6c 75 65 64  the.table-valued
2ecf0 20 66 75 6e 63 74 69 6f 6e 20 62 65 63 6f 6d 65   function become
2ed00 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20   constraints on 
2ed10 74 68 65 20 48 49 44 44 45 4e 20 63 6f 6c 75 6d  the HIDDEN colum
2ed20 6e 73 20 6f 66 0a 74 68 65 20 76 69 72 74 75 61  ns of.the virtua
2ed30 6c 20 74 61 62 6c 65 2e 20 20 41 64 64 69 74 69  l table.  Additi
2ed40 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
2ed50 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e   can be found in
2ed60 20 74 68 65 0a 5b 74 61 62 6c 65 2d 76 61 6c 75   the.[table-valu
2ed70 65 64 20 66 75 6e 63 74 69 6f 6e 73 7c 76 69 72  ed functions|vir
2ed80 74 75 61 6c 20 74 61 62 6c 65 20 64 6f 63 75 6d  tual table docum
2ed90 65 6e 74 61 74 69 6f 6e 5d 2e 0a 0a 3c 74 63 6c  entation]...<tcl
2eda0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
2edb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2edc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2edd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ede0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2edf0 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20  .Section UPDATE 
2ee00 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a  update {UPDATE *
2ee10 55 50 44 41 54 45 73 7d 0a 0a 52 65 63 75 72 73  UPDATEs}..Recurs
2ee20 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
2ee30 20 75 70 64 61 74 65 2d 73 74 6d 74 0a 3c 2f 74   update-stmt.</t
2ee40 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44 41  cl>..<p>^An UPDA
2ee50 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
2ee60 75 73 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 61  used to modify a
2ee70 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 76   subset of the v
2ee80 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 20  alues stored in 
2ee90 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f  .zero or more ro
2eea0 77 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ws of the databa
2eeb0 73 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66  se table identif
2eec0 69 65 64 20 62 79 20 74 68 65 20 0a 5b 71 75 61  ied by the .[qua
2eed0 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
2eee0 65 5d 20 73 70 65 63 69 66 69 65 64 20 61 73 20  e] specified as 
2eef0 70 61 72 74 20 6f 66 20 74 68 65 20 55 50 44 41  part of the UPDA
2ef00 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  TE statement...<
2ef10 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45  p>^If the UPDATE
2ef20 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20   statement does 
2ef30 6e 6f 74 20 68 61 76 65 20 61 20 57 48 45 52 45  not have a WHERE
2ef40 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77   clause, all row
2ef50 73 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20 61  s in the.table a
2ef60 72 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74  re modified by t
2ef70 68 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68 65  he UPDATE. ^Othe
2ef80 72 77 69 73 65 2c 20 74 68 65 20 55 50 44 41 54  rwise, the UPDAT
2ef90 45 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20 74  E affects only t
2efa0 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77 68  hose.rows for wh
2efb0 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  ich the WHERE cl
2efc0 61 75 73 65 0a 5b 62 6f 6f 6c 65 61 6e 20 65 78  ause.[boolean ex
2efd0 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61 6e  pression|boolean
2efe0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
2eff0 72 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e 6f 74  rue]. ^It is not
2f000 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
2f010 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 64 6f  .WHERE clause do
2f020 65 73 20 6e 6f 74 20 65 76 61 6c 75 61 74 65 20  es not evaluate 
2f030 74 6f 20 74 72 75 65 20 66 6f 72 20 61 6e 79 20  to true for any 
2f040 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65  row in the table
2f050 20 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d 65 61   - this just.mea
2f060 6e 73 20 74 68 61 74 20 74 68 65 20 55 50 44 41  ns that the UPDA
2f070 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 66 66  TE statement aff
2f080 65 63 74 73 20 7a 65 72 6f 20 72 6f 77 73 2e 0a  ects zero rows..
2f090 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69 63 61  .<p>The modifica
2f0a0 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20 65 61  tions made to ea
2f0b0 63 68 20 72 6f 77 20 61 66 66 65 63 74 65 64 20  ch row affected 
2f0c0 62 79 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  by an UPDATE sta
2f0d0 74 65 6d 65 6e 74 20 61 72 65 0a 64 65 74 65 72  tement are.deter
2f0e0 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6c 69 73  mined by the lis
2f0f0 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73  t of assignments
2f100 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 53   following the S
2f110 45 54 20 6b 65 79 77 6f 72 64 2e 20 45 61 63 68  ET keyword. Each
2f120 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73 70 65 63  .assignment spec
2f130 69 66 69 65 73 20 61 20 3c 79 79 74 65 72 6d 3e  ifies a <yyterm>
2f140 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74  column-name</yyt
2f150 65 72 6d 3e 20 74 6f 20 74 68 65 20 6c 65 66 74  erm> to the left
2f160 20 6f 66 20 74 68 65 20 0a 65 71 75 61 6c 73 20   of the .equals 
2f170 73 69 67 6e 20 61 6e 64 20 61 0a 73 63 61 6c 61  sign and a.scala
2f180 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  r expression to 
2f190 74 68 65 20 72 69 67 68 74 2e 20 5e 46 6f 72 20  the right. ^For 
2f1a0 65 61 63 68 20 61 66 66 65 63 74 65 64 20 72 6f  each affected ro
2f1b0 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c  w, the named col
2f1c0 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74 6f 20  umns.are set to 
2f1d0 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75 6e 64  the values found
2f1e0 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
2f1f0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2f200 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65 73 73   scalar .express
2f210 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e 67  ions. ^If a sing
2f220 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 61  le column-name a
2f230 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68 61 6e  ppears more than
2f240 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c 69 73   once in the lis
2f250 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74 20  t of.assignment 
2f260 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c 6c  expressions, all
2f270 20 62 75 74 20 74 68 65 20 72 69 67 68 74 6d 6f   but the rightmo
2f280 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 69 73  st occurrence is
2f290 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75 6d   ignored. ^Colum
2f2a0 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20 61  ns.that do not a
2f2b0 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c 69 73  ppear in the lis
2f2c0 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73  t of assignments
2f2d0 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64 69   are left unmodi
2f2e0 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61 6c 61  fied. ^The scala
2f2f0 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61  r.expressions ma
2f300 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d  y refer to colum
2f310 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65  ns of the row be
2f320 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e 49 6e  ing updated. ^In
2f330 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c 0a 73   this case all.s
2f340 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
2f350 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20  s are evaluated 
2f360 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67  before any assig
2f370 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e  nments are made.
2f380 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e  ..<p>^The option
2f390 61 6c 20 22 4f 52 20 3c 69 3e 61 63 74 69 6f 6e  al "OR <i>action
2f3a0 3c 2f 69 3e 22 20 63 6f 6e 66 6c 69 63 74 20 63  </i>" conflict c
2f3b0 6c 61 75 73 65 20 74 68 61 74 20 66 6f 6c 6c 6f  lause that follo
2f3c0 77 73 20 74 68 65 0a 55 50 44 41 54 45 20 6b 65  ws the.UPDATE ke
2f3d0 79 77 6f 72 64 20 61 6c 6c 6f 77 73 20 74 68 65  yword allows the
2f3e0 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74   user to nominat
2f3f0 65 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e  e a specific.con
2f400 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
2f410 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
2f420 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72  rithm to use dur
2f430 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44  ing this one UPD
2f440 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66  ATE command..Ref
2f450 65 72 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f  er to the sectio
2f460 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43  n entitled [ON C
2f470 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
2f480 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
2f490 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69  ion...<h3>Restri
2f4a0 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45  ctions on UPDATE
2f4b0 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
2f4c0 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45  in CREATE TRIGGE
2f4d0 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66  R</h3>..<p>The f
2f4e0 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f  ollowing additio
2f4f0 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72  nal syntax restr
2f500 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f  ictions apply to
2f510 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
2f520 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69  ts that.occur wi
2f530 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
2f540 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47   a [CREATE TRIGG
2f550 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ER] statement.  
2f560 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
2f570 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e 74 61 62  ^The <yyterm>tab
2f580 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
2f590 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
2f5a0 72 74 20 6f 66 20 61 6e 20 55 50 44 41 54 45 20  rt of an UPDATE 
2f5b0 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74  .      statement
2f5c0 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20   within.      a 
2f5d0 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73  trigger body mus
2f5e0 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64  t be unqualified
2f5f0 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  . ^(In other wor
2f600 64 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69  ds, the.      <i
2f610 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e  >schema-name</i>
2f620 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20  <b>.</b> prefix 
2f630 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  on the table nam
2f640 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
2f650 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c  is.      not all
2f660 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69 67  owed within trig
2f670 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20  gers.)^ ^Unless 
2f680 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69  the table to whi
2f690 63 68 20 74 68 65 20 74 72 69 67 67 65 72 0a 20  ch the trigger. 
2f6a0 20 20 20 20 20 69 73 20 61 74 74 61 63 68 65 64       is attached
2f6b0 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20   is in the TEMP 
2f6c0 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 61  database, the ta
2f6d0 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65  ble being update
2f6e0 64 20 62 79 20 74 68 65 0a 20 20 20 20 20 20 74  d by the.      t
2f6f0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d  rigger program m
2f700 75 73 74 20 72 65 73 69 64 65 20 69 6e 20 74 68  ust reside in th
2f710 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
2f720 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74  as it. ^If the t
2f730 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68  able.      to wh
2f740 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
2f750 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69  is attached is i
2f760 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  n the TEMP datab
2f770 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ase, then the.  
2f780 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20      unqualified 
2f790 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
2f7a0 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20  e being updated 
2f7b0 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74  is resolved in t
2f7c0 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20  he same way.    
2f7d0 20 20 61 73 20 69 74 20 69 73 20 66 6f 72 20 61    as it is for a
2f7e0 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
2f7f0 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
2f800 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
2f810 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20  P database,.    
2f820 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20    then the main 
2f830 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61  database, then a
2f840 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61 73  ny other databas
2f850 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  es in the order 
2f860 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 20 20  they were.      
2f870 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c  attached)...  <l
2f880 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
2f890 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
2f8a0 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
2f8b0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
2f8c0 55 50 44 41 54 45 0a 20 20 20 20 20 20 73 74 61  UPDATE.      sta
2f8d0 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
2f8e0 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20  riggers.</p>..  
2f8f0 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49  <li><p>^The LIMI
2f900 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63  T and ORDER BY c
2f910 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44 41 54  lauses for UPDAT
2f920 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  E are unsupporte
2f930 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74  d within.      t
2f940 72 69 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c  riggers, regardl
2f950 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
2f960 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75  lation options u
2f970 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c  sed to build SQL
2f980 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e  ite..</ul>..<h3>
2f990 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61  Optional LIMIT a
2f9a0 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75  nd ORDER BY Clau
2f9b0 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49  ses</h3>..<p>^(I
2f9c0 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c  f SQLite is buil
2f9d0 74 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  t with the [SQLI
2f9e0 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
2f9f0 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63  _DELETE_LIMIT].c
2fa00 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
2fa10 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  on then the synt
2fa20 61 78 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  ax of the UPDATE
2fa30 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
2fa40 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69  tended.with opti
2fa50 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e  onal ORDER BY an
2fa60 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29  d LIMIT clauses)
2fa70 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  ^ as follows:</p
2fa80 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
2fa90 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
2faa0 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a  t-limited</tcl>.
2fab0 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54  .<p>^If an UPDAT
2fac0 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
2fad0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
2fae0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
2faf0 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a  er of rows that.
2fb00 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20  will be updated 
2fb10 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c  is found by eval
2fb20 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d  uating the accom
2fb30 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69  panying expressi
2fb40 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69  on and casting.i
2fb50 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
2fb60 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69  value. ^A negati
2fb70 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65  ve value is inte
2fb80 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c  rpreted as "no l
2fb90 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74  imit"...<p>^If t
2fba0 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
2fbb0 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
2fbc0 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
2fbd0 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64  lue <i>N</i> and
2fbe0 20 74 68 65 0a 55 50 44 41 54 45 20 73 74 61 74   the.UPDATE stat
2fbf0 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44  ement has an ORD
2fc00 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
2fc10 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
2fc20 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65   would be update
2fc30 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65  d in.the absence
2fc40 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c   of the LIMIT cl
2fc50 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64 20  ause are sorted 
2fc60 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
2fc70 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 74 68   ORDER BY and th
2fc80 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e  e.first <i>N</i>
2fc90 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74   updated. ^(If t
2fca0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
2fcb0 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20  ent also has an 
2fcc0 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74  OFFSET clause,.t
2fcd0 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61  hen it is simila
2fce0 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e  rly evaluated an
2fcf0 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74  d cast to an int
2fd00 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74  eger value. If t
2fd10 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73  he OFFSET.expres
2fd20 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2fd30 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  o a non-negative
2fd40 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c   value <i>M</i>,
2fd50 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
2fd60 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72  <i>M</i>.rows ar
2fd70 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68  e skipped and th
2fd80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e  e following <i>N
2fd90 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65  </i> rows update
2fda0 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70  d instead.)^..<p
2fdb0 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45 20  >^If the UPDATE 
2fdc0 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f  statement has no
2fdd0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2fde0 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
2fdf0 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70  that.would be up
2fe00 64 61 74 65 64 20 69 6e 20 74 68 65 20 61 62 73  dated in the abs
2fe10 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49  ence of the LIMI
2fe20 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73 73  T clause are ass
2fe30 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62  embled in an.arb
2fe40 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65 66  itrary order bef
2fe50 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65  ore applying the
2fe60 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
2fe70 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74  T clauses to det
2fe80 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72  ermine .which ar
2fe90 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74  e actually updat
2fea0 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
2feb0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
2fec0 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
2fed0 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c  ment is used onl
2fee0 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  y to determine w
2fef0 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77  hich.rows fall w
2ff00 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e  ithin the LIMIT.
2ff10 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   The order in wh
2ff20 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64  ich rows are mod
2ff30 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72 61  ified is arbitra
2ff40 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e  ry.and is not in
2ff50 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65 20  fluenced by the 
2ff60 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
2ff70 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  )^..<tcl>.######
2ff80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ff90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ffa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ffb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ffc0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
2ffd0 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56   VACUUM vacuum V
2ffe0 41 43 55 55 4d 0a 0a 52 65 63 75 72 73 69 76 65  ACUUM..Recursive
2fff0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61  BubbleDiagram va
30000 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  cuum-stmt.</tcl>
30010 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55  ..<p>.  The VACU
30020 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69  UM command rebui
30030 6c 64 73 20 74 68 65 20 65 6e 74 69 72 65 20 64  lds the entire d
30040 61 74 61 62 61 73 65 2e 20 54 68 65 72 65 20 61  atabase. There a
30050 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65  re several .  re
30060 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61  asons an applica
30070 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68  tion might do th
30080 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  is:..<ul>.  <li>
30090 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c   <p> ^Unless SQL
300a0 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69  ite is running i
300b0 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46  n "auto_vacuum=F
300c0 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20  ULL" mode, when 
300d0 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f  a large.     amo
300e0 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64  unt of data is d
300f0 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
30100 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74  database file it
30110 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65   leaves behind e
30120 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c  mpty.     space,
30130 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62   or "free" datab
30140 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20  ase pages. This 
30150 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
30160 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20  se file might.  
30170 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61     be larger tha
30180 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73  n strictly neces
30190 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  sary. ^Running V
301a0 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64  ACUUM to rebuild
301b0 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62   the .     datab
301c0 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69  ase reclaims thi
301d0 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75  s space and redu
301e0 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ces the size of 
301f0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
30200 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  e...  <li> <p> ^
30210 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73  Frequent inserts
30220 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64  , updates, and d
30230 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65  eletes can cause
30240 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
30250 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d  le.     to becom
30260 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77  e fragmented - w
30270 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20  here data for a 
30280 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
30290 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72  index is scatter
302a0 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20  ed .     around 
302b0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
302c0 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  e. ^Running VACU
302d0 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  UM ensures that 
302e0 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20  each table and. 
302f0 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72      index is lar
30300 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74  gely stored cont
30310 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20  iguously within 
30320 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
30330 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20  e. ^In some.    
30340 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d   cases, VACUUM m
30350 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74  ay also reduce t
30360 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72  he number of par
30370 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
30380 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20  ges in.     the 
30390 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69  database, reduci
303a0 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ng the size of t
303b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
303c0 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69   further...  <li
303d0 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c  > <p> ^Normally,
303e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70   the database [p
303f0 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68  age_size] and wh
30400 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
30410 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73   database.     s
30420 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61  upports [auto_va
30430 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f  cuum] must be co
30440 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20  nfigured before 
30450 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
30460 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c  e is.     actual
30470 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77  ly created. ^How
30480 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69  ever, when not i
30490 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
304a0 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20  og] mode, the . 
304b0 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20      [page_size] 
304c0 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63  and/or [auto_vac
304d0 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20  uum] properties 
304e0 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  of an existing d
304f0 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20  atabase may be. 
30500 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75      changed by u
30510 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73  sing the [page_s
30520 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f  ize pragma|page_
30530 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20  size]  and/or . 
30540 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d      [auto_vacuum
30550 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63  |pragma auto_vac
30560 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64  uum] pragmas and
30570 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c   then immediatel
30580 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20  y VACUUMing.    
30590 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e   the database. ^
305a0 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61  When in [write-a
305b0 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20  head log] mode, 
305c0 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76  only the [auto_v
305d0 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70  acuum].     supp
305e0 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e  ort property can
305f0 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
30600 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a  g VACUUM..</ul>.
30610 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f 6e 6c  .<p>^(VACUUM onl
30620 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d  y works on the m
30630 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 74  ain database. It
30640 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
30650 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a 61 74   to VACUUM an.at
30660 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
30670 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  file.)^..<p>^The
30680 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
30690 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69 6e 67  works by copying
306a0 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
306b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
306c0 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 64  to.a temporary d
306d0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
306e0 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e   then overwritin
306f0 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  g the original w
30700 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65 6e 74  ith the .content
30710 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  s of the tempora
30720 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e 20 6f  ry file. ^When o
30730 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f  verwriting the o
30740 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62  riginal, a rollb
30750 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b  ack.journal or [
30760 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
30770 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75 73 65   WAL file is use
30780 64 20 6a 75 73 74 20 61 73 20 69 74 20 77 6f 75  d just as it wou
30790 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a 6f 74  ld be for any.ot
307a0 68 65 72 20 64 61 74 61 62 61 73 65 20 74 72 61  her database tra
307b0 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69 73 20  nsaction. ^This 
307c0 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20  means that when 
307d0 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61 74 61  VACUUMing a data
307e0 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68 20 61  base, .as much a
307f0 73 20 74 77 69 63 65 20 74 68 65 20 73 69 7a 65  s twice the size
30800 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
30810 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
30820 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 66 72  s required in fr
30830 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e 0a 0a  ee.disk space...
30840 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
30850 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67  ommand may chang
30860 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20 52  e the [ROWID | R
30870 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69 65  OWIDs] of entrie
30880 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73 20  s in any.tables 
30890 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76 65  that do not have
308a0 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e   an explicit [IN
308b0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
308c0 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  Y]..</p>..<p>^A 
308d0 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69 6c  VACUUM will fail
308e0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
308f0 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
30900 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
30910 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61 63  e one or.more ac
30920 74 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d 65  tive SQL stateme
30930 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73 20 72  nts when it is r
30940 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20  un...<p>^(As of 
30950 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
30960 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  .1, an alternati
30970 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20  ve to using the 
30980 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74  VACUUM command t
30990 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65 20  o.reclaim space 
309a0 61 66 74 65 72 20 64 61 74 61 20 68 61 73 20 62  after data has b
309b0 65 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20 61  een deleted is a
309c0 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c  uto-vacuum mode,
309d0 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a 74   enabled using.t
309e0 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  he [auto_vacuum]
309f0 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e   pragma.)^ ^When
30a00 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69   [auto_vacuum] i
30a10 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
30a20 64 61 74 61 62 61 73 65 0a 66 72 65 65 20 70 61  database.free pa
30a30 67 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c 61  ges may be recla
30a40 69 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65 74  imed after delet
30a50 69 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69 6e  ing data, causin
30a60 67 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 68  g the file to sh
30a70 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65  rink,.without re
30a80 62 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e 74  building the ent
30a90 69 72 65 20 64 61 74 61 62 61 73 65 20 75 73 69  ire database usi
30aa0 6e 67 20 56 41 43 55 55 4d 2e 20 20 48 6f 77 65  ng VACUUM.  Howe
30ab0 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f  ver, using.[auto
30ac0 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61  _vacuum] can lea
30ad0 64 20 74 6f 20 65 78 74 72 61 20 64 61 74 61 62  d to extra datab
30ae0 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e  ase file fragmen
30af0 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75  tation.  And [au
30b00 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20  to_vacuum].does 
30b10 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74  not compact part
30b20 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67  ially filled pag
30b30 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  es of the databa
30b40 73 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65  se as VACUUM doe
30b50 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  s...</p>...<tcl>
30b60 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
30b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
30bb0 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44  Section {INDEXED
30bc0 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b   BY} indexedby {
30bd0 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f  {INDEXED BY} {NO
30be0 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74  T INDEXED}}..</t
30bf0 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45  cl>.<p>^The INDE
30c00 58 45 44 20 42 59 20 70 68 72 61 73 65 20 66 6f  XED BY phrase fo
30c10 72 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74 65  rces the [SQLite
30c20 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20   query planner] 
30c30 74 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63 75  to use a.particu
30c40 6c 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78 20  lar named index 
30c50 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b  on a [DELETE], [
30c60 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44  SELECT], or [UPD
30c70 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ATE] statement..
30c80 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  The INDEXED BY p
30c90 68 72 61 73 65 20 69 73 20 61 6e 20 53 51 4c 69  hrase is an SQLi
30ca0 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 6e 64  te extension and
30cb0 0a 69 73 20 6e 6f 74 20 70 6f 72 74 61 62 6c 65  .is not portable
30cc0 20 74 6f 20 6f 74 68 65 72 20 53 51 4c 20 64 61   to other SQL da
30cd0 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 3c  tabase engines.<
30ce0 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72  /p>..<tcl>.Recur
30cf0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
30d00 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  m qualified-tabl
30d10 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-name.</tcl>..<
30d20 70 3e 5e 54 68 65 20 22 49 4e 44 45 58 45 44 20  p>^The "INDEXED 
30d30 42 59 20 3c 79 79 74 65 72 6d 3e 69 6e 64 65 78  BY <yyterm>index
30d40 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 22 20  -name</yyterm>" 
30d50 70 68 72 61 73 65 20 73 70 65 63 69 66 69 65 73  phrase specifies
30d60 20 0a 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64   .that the named
30d70 20 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20 75   index.must be u
30d80 73 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  sed in order to 
30d90 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20 6f  look up values o
30da0 6e 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20  n the preceding 
30db0 74 61 62 6c 65 2e 0a 5e 49 66 20 3c 79 79 74 65  table..^If <yyte
30dc0 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79  rm>index-name</y
30dd0 79 74 65 72 6d 3e 20 64 6f 65 73 20 6e 6f 74 20  yterm> does not 
30de0 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20  exist or cannot 
30df0 62 65 20 75 73 65 64 20 0a 66 6f 72 20 74 68 65  be used .for the
30e00 20 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68 65   query, then the
30e10 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66 20   preparation of 
30e20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
30e30 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22  t fails..^(The "
30e40 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61  NOT INDEXED" cla
30e50 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  use specifies th
30e60 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c  at no index shal
30e70 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61  l be used when.a
30e80 63 63 65 73 73 69 6e 67 20 74 68 65 20 70 72 65  ccessing the pre
30e90 63 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e  ceding table, in
30ea0 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20  cluding implied 
30eb0 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 20 62  indices create b
30ec0 79 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49  y.UNIQUE and PRI
30ed0 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
30ee0 69 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20  ints.  However, 
30ef0 74 68 65 20 5b 72 6f 77 69 64 5d 0a 63 61 6e 20  the [rowid].can 
30f00 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f  still be used to
30f10 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65 73   look up entries
30f20 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20   even when "NOT 
30f30 49 4e 44 45 58 45 44 22 20 69 73 20 73 70 65 63  INDEXED" is spec
30f40 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  ified.)^</p>..<p
30f50 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62 61  >Some SQL databa
30f60 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76 69  se engines provi
30f70 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20  de non-standard 
30f80 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d  "hint" mechanism
30f90 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20 75  s which.can be u
30fa0 73 65 64 20 74 6f 20 67 69 76 65 20 74 68 65 20  sed to give the 
30fb0 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
30fc0 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61 74  clues about what
30fd0 20 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f 75   indices it shou
30fe0 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61 72  ld.use for a par
30ff0 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65 6e  ticular statemen
31000 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42 59  t.  The INDEX BY
31010 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69 74   clause of SQLit
31020 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65  e is .<em>not</e
31030 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65 63  m> a hinting mec
31040 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73 68  hanism and it sh
31050 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
31060 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20 49   as such..^The I
31070 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
31080 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20 74   does not give t
31090 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e  he optimizer hin
310a0 74 73 20 61 62 6f 75 74 20 77 68 69 63 68 20 69  ts about which i
310b0 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74 20  ndex.to use; it 
310c0 67 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d 69  gives the optimi
310d0 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d 65 6e  zer a requiremen
310e0 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65 78  t of which index
310f0 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68 65   to use..^If the
31100 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
31110 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75 73   is unable to us
31120 65 20 74 68 65 20 69 6e 64 65 78 20 73 70 65 63  e the index spec
31130 69 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e 44  ified by the.IND
31140 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  EX BY clause, th
31150 65 6e 20 74 68 65 20 71 75 65 72 79 20 77 69 6c  en the query wil
31160 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
31170 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  rror.</p>..<p>Th
31180 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
31190 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f  use is <em>not</
311a0 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f 72  em> intended for
311b0 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74   use in tuning.t
311c0 68 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f  he performance o
311d0 66 20 61 20 71 75 65 72 79 2e 20 20 54 68 65 20  f a query.  The 
311e0 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49 4e  intent of the IN
311f0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
31200 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72 75  is.to raise a ru
31210 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66 20  n-time error if 
31220 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c  a schema change,
31230 20 73 75 63 68 20 61 73 20 64 72 6f 70 70 69 6e   such as droppin
31240 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61 6e  g or.creating an
31250 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20 74   index, causes t
31260 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66 6f  he query plan fo
31270 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74 69  r a time-sensiti
31280 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61 6e  ve query.to chan
31290 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44  ge.  The INDEXED
312a0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 64 65   BY clause is de
312b0 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20 64  signed to help d
312c0 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62 6c  etect.undesirabl
312d0 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68 61  e query plan cha
312e0 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65 67 72  nges during regr
312f0 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a  ession testing..
31300 41 70 70 6c 69 63 61 74 69 6f 6e 20 0a 64 65 76  Application .dev
31310 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f  elopers are admo
31320 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61  nished to omit a
31330 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45  ll use of INDEXE
31340 44 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c  D BY during.appl
31350 69 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20  ication design, 
31360 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
31370 74 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e  testing, and tun
31380 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44  ing.  If.INDEXED
31390 20 42 59 20 69 73 20 74 6f 20 62 65 20 75 73 65   BY is to be use
313a0 64 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f  d at all, it sho
313b0 75 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64 20  uld be inserted 
313c0 61 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20  at the very.end 
313d0 6f 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65  of the developme
313e0 6e 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20  nt process when 
313f0 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61  "locking down" a
31400 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68   design.</p>..<h
31410 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e  3>See Also:</h3>
31420 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68  ..<ol>.<li><p>Th
31430 65 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  e [query planner
31440 20 63 68 65 63 6b 6c 69 73 74 5d 20 64 65 73 63   checklist] desc
31450 72 69 62 65 73 20 73 74 65 70 73 20 74 68 61 74  ribes steps that
31460 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64 65 76   application.dev
31470 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 66  elopers should f
31480 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 68 65 6c 70  ollowing to help
31490 20 72 65 73 6f 6c 76 65 20 71 75 65 72 79 20 70   resolve query p
314a0 6c 61 6e 6e 65 72 20 70 72 6f 62 6c 65 6d 73 2e  lanner problems.
314b0 0a 4e 6f 74 69 63 65 20 74 68 65 20 74 68 61 74  .Notice the that
314c0 20 74 68 65 20 75 73 65 20 6f 66 20 49 4e 44 45   the use of INDE
314d0 58 45 44 20 42 59 20 69 73 20 61 20 6c 61 73 74  XED BY is a last
314e0 20 72 65 73 6f 72 74 2c 20 74 6f 20 62 65 20 75   resort, to be u
314f0 73 65 64 20 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c  sed only.when al
31500 6c 20 6f 74 68 65 72 20 6d 65 61 73 75 72 65 73  l other measures
31510 20 66 61 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e   fail.</p>..<li>
31520 3c 70 3e 5b 75 70 6c 75 73 63 6f 6e 74 72 6f 6c  <p>[upluscontrol
31530 7c 54 68 65 20 75 6e 61 72 79 20 22 2b 22 20 6f  |The unary "+" o
31540 70 65 72 61 74 6f 72 5d 0a 63 61 6e 20 62 65 20  perator].can be 
31550 75 73 65 64 20 74 6f 20 64 69 73 71 75 61 6c 69  used to disquali
31560 66 79 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20  fy terms in the 
31570 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 72 6f  WHERE clause fro
31580 6d 20 75 73 65 20 62 79 20 69 6e 64 69 63 65 73  m use by indices
31590 2e 0a 43 61 72 65 66 75 6c 20 75 73 65 20 6f 66  ..Careful use of
315a0 20 75 6e 61 72 79 20 2b 20 63 61 6e 20 73 6f 6d   unary + can som
315b0 65 74 69 6d 65 73 20 68 65 6c 70 20 70 72 65 76  etimes help prev
315c0 65 6e 74 20 74 68 65 20 71 75 65 72 79 20 70 6c  ent the query pl
315d0 61 6e 6e 65 72 20 66 72 6f 6d 0a 63 68 6f 6f 73  anner from.choos
315e0 69 6e 67 20 61 20 70 6f 6f 72 20 69 6e 64 65 78  ing a poor index
315f0 20 77 69 74 68 6f 75 74 20 72 65 73 74 72 69 63   without restric
31600 74 69 6e 67 20 69 74 20 74 6f 20 75 73 69 6e 67  ting it to using
31610 20 6f 6e 65 20 73 70 65 63 69 66 69 63 20 69 6e   one specific in
31620 64 65 78 2e 0a 43 61 72 65 66 75 6c 20 70 6c 61  dex..Careful pla
31630 63 65 6d 65 6e 74 20 6f 66 20 75 6e 61 72 79 20  cement of unary 
31640 2b 20 6f 70 65 72 61 74 6f 72 73 20 69 73 20 61  + operators is a
31650 20 62 65 74 74 65 72 20 6d 65 74 68 6f 64 20 66   better method f
31660 6f 72 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a  or controlling .
31670 77 68 69 63 68 20 69 6e 64 69 63 65 73 20 61 72  which indices ar
31680 65 20 75 73 65 64 20 62 79 20 61 20 71 75 65 72  e used by a quer
31690 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54  y.</p>..<li><p>T
316a0 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74  he [sqlite3_stmt
316b0 5f 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b  _status()] C/C++
316c0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65 74   interface toget
316d0 68 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53 51  her with the.[SQ
316e0 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
316f0 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61  FULLSCAN_STEP] a
31700 6e 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  nd [SQLITE_STMTS
31710 54 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72 62  TATUS_SORT] verb
31720 73 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s.can be used to
31730 20 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d 74   detect at run-t
31740 69 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c 20  ime when an SQL 
31750 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74  statement is not
31760 0a 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69 76  .making effectiv
31770 65 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65 73  e use of indices
31780 2e 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61 74  .  Many applicat
31790 69 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72 20  ions may prefer 
317a0 74 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c 69  to.use the [sqli
317b0 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
317c0 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  )] interface to 
317d0 64 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69 73  detect index mis
317e0 75 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e 20  use.rather than 
317f0 74 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  the INDEXED BY p
31800 68 72 61 73 65 20 64 65 73 63 72 69 62 65 64 20  hrase described 
31810 68 65 72 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a  here.</p>.</ol>.
31820 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
31830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31870 23 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f 66  ####.# A list of
31880 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73   keywords.  A as
31890 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66  terisk occurs af
318a0 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20  ter the keyword 
318b0 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68  if it is on.# th
318c0 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e  e fallback list.
318d0 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c  .#.set keyword_l
318e0 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20  ist [lsort {.   
318f0 41 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a  ABORT.   ACTION.
31900 20 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a     ADD.   AFTER.
31910 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a     ALL.   ALTER.
31920 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e     ANALYZE.   AN
31930 44 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20  D.   AS.   ASC. 
31940 20 20 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f    ATTACH.   AUTO
31950 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46  INCREMENT.   BEF
31960 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20  ORE.   BEGIN.   
31970 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20  BETWEEN.   BY.  
31980 20 43 41 53 43 41 44 45 0a 20 20 20 43 41 53 45   CASCADE.   CASE
31990 0a 20 20 20 43 41 53 54 0a 20 20 20 43 48 45 43  .   CAST.   CHEC
319a0 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20  K.   COLLATE.   
319b0 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54  COLUMN.   COMMIT
319c0 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20  .   CONFLICT.   
319d0 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52  CONSTRAINT.   CR
319e0 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20  EATE.   CROSS.  
319f0 20 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20   CURRENT_DATE.  
31a00 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20   CURRENT_TIME.  
31a10 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
31a20 4d 50 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20  MP.   DATABASE. 
31a30 20 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46    DEFAULT.   DEF
31a40 45 52 52 45 44 0a 20 20 20 44 45 46 45 52 52 41  ERRED.   DEFERRA
31a50 42 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20  BLE.   DELETE.  
31a60 20 44 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a   DESC.   DETACH.
31a70 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44     DISTINCT.   D
31a80 52 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41  ROP.   END.   EA
31a90 43 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53  CH.   ELSE.   ES
31aa0 43 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20  CAPE.   EXCEPT. 
31ab0 20 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45    EXCLUSIVE.   E
31ac0 58 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e  XISTS.   EXPLAIN
31ad0 0a 20 20 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a  .   FAIL.   FOR.
31ae0 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52     FOREIGN.   FR
31af0 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c  OM.   FULL.   GL
31b00 4f 42 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48  OB.   GROUP.   H
31b10 41 56 49 4e 47 0a 20 20 20 49 46 0a 20 20 20 49  AVING.   IF.   I
31b20 47 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49 41  GNORE.   IMMEDIA
31b30 54 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45  TE.   IN.   INDE
31b40 58 0a 20 20 20 49 4e 44 45 58 45 44 0a 20 20 20  X.   INDEXED.   
31b50 49 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e  INITIALLY.   INN
31b60 45 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20  ER.   INSERT.   
31b70 49 4e 53 54 45 41 44 0a 20 20 20 49 4e 54 45 52  INSTEAD.   INTER
31b80 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20  SECT.   INTO.   
31b90 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20  IS.   ISNULL.   
31ba0 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c  JOIN.   KEY.   L
31bb0 45 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c  EFT.   LIKE.   L
31bc0 49 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a 20 20  IMIT.   MATCH.  
31bd0 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20   NATURAL.   NO. 
31be0 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c    NOT.   NOTNULL
31bf0 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20  .   NULL.   OF. 
31c00 20 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20    OFFSET.   ON. 
31c10 20 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20    OR.   ORDER.  
31c20 20 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20   OUTER.   PLAN. 
31c30 20 20 50 52 41 47 4d 41 0a 20 20 20 50 52 49 4d    PRAGMA.   PRIM
31c40 41 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20  ARY.   QUERY.   
31c50 52 41 49 53 45 0a 20 20 20 52 45 43 55 52 53 49  RAISE.   RECURSI
31c60 56 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45 53  VE.   REFERENCES
31c70 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20 52 45  .   REGEXP.   RE
31c80 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53 45  INDEX.   RELEASE
31c90 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52 45  .   RENAME.   RE
31ca0 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49 43  PLACE.   RESTRIC
31cb0 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52 4f  T.   RIGHT.   RO
31cc0 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20  LLBACK.   ROW.  
31cd0 20 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53 45   SAVEPOINT.   SE
31ce0 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54  LECT.   SET.   T
31cf0 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20 20  ABLE.   TEMP.   
31d00 54 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48 45  TEMPORARY.   THE
31d10 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e 53  N.   TO.   TRANS
31d20 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47 45  ACTION.   TRIGGE
31d30 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e  R.   UNION.   UN
31d40 49 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20  IQUE.   UPDATE. 
31d50 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55    USING.   VACUU
31d60 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56  M.   VALUES.   V
31d70 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a 20  IEW.   VIRTUAL. 
31d80 20 20 57 49 54 48 0a 20 20 20 57 49 54 48 4f 55    WITH.   WITHOU
31d90 54 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45  T.   WHEN.   WHE
31da0 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b  RE.}]..hd_puts {
31db0 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f  <DIV class="pdf_
31dc0 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69  section">}.Secti
31dd0 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f  on {SQLite Keywo
31de0 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b  rds} keywords {{
31df0 2a 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53  *SQL keyword} {S
31e00 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64  QL keywords}}.hd
31e10 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c  _puts {</DIV>}.<
31e20 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  /tcl>..<p>The SQ
31e30 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69  L standard speci
31e40 66 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62  fies a huge numb
31e50 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77  er of keywords w
31e60 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20  hich may not.be 
31e70 75 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65  used as the name
31e80 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64  s of tables, ind
31e90 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64  ices, columns, d
31ea0 61 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64  atabases, user-d
31eb0 65 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73  efined.functions
31ec0 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69  , collations, vi
31ed0 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
31ee0 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65  les, or any othe
31ef0 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a  r named object..
31f00 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77  The list of keyw
31f10 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20  ords is so long 
31f20 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20  that few people 
31f30 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65  can remember the
31f40 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20  m all..For most 
31f50 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73  SQL code, your s
31f60 61 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20  afest bet is to 
31f70 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e  never use any En
31f80 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77  glish language.w
31f90 6f 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20  ord as the name 
31fa0 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  of a user-define
31fb0 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c  d object.</p>..<
31fc0 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f  p>If you want to
31fd0 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61   use a keyword a
31fe0 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65  s a name, you ne
31ff0 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20  ed to quote it. 
32000 20 54 68 65 72 65 0a 61 72 65 20 66 6f 75 72 20   There.are four 
32010 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20  ways of quoting 
32020 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69  keywords in SQLi
32030 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c  te:</p>..<p>.<bl
32040 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
32050 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
32060 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77  n="top"><b>'keyw
32070 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord'</b></td><td
32080 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
32090 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
320a0 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74  d in single quot
320b0 65 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c  es is a string l
320c0 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72  iteral.</td></tr
320d0 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
320e0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79  gn="top"><b>"key
320f0 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word"</b></td><t
32100 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
32110 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c  keyword in doubl
32120 65 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69  e-quotes is an i
32130 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c  dentifier.</td><
32140 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76  /tr>..<tr>.<td v
32150 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26  align="top"><b>&
32160 23 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b  #91;keyword&#93;
32170 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
32180 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
32190 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73  rd enclosed in s
321a0 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 69  quare brackets i
321b0 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  s .        an id
321c0 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
321d0 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
321e0 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
321f0 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
32200 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
32210 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51  MS Access and SQ
32220 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20  L Server and is 
32230 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69  included in SQLi
32240 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63  te for.        c
32250 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74  ompatibility.</t
32260 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74  d></tr>..<tr>.<t
32270 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
32280 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23  b>&#96;keyword&#
32290 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  96;</b></td><td>
322a0 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
322b0 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69  yword enclosed i
322c0 6e 20 67 72 61 76 65 20 61 63 63 65 6e 74 73 20  n grave accents 
322d0 28 41 53 43 49 49 20 63 6f 64 65 20 39 36 29 20  (ASCII code 96) 
322e0 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69  is .        an i
322f0 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73  dentifier.  This
32300 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64   is not standard
32310 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74   SQL.  This quot
32320 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20  ing mechanism.  
32330 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79        is used by
32340 20 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e   MySQL and is in
32350 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65  cluded in SQLite
32360 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d   for.        com
32370 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e  patibility.</td>
32380 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
32390 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70  /blockquote>.</p
323a0 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69  >..<p>For resili
323b0 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f  ence when confro
323c0 6e 74 65 64 20 77 69 74 68 20 68 69 73 74 6f 72  nted with histor
323d0 69 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65  ical SQL stateme
323e0 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c  nts, SQLite.will
323f0 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20   sometimes bend 
32400 74 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65  the quoting rule
32410 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75  s above:</p>..<u
32420 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20  l>.<li><p>^If a 
32430 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c  keyword in singl
32440 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62  e.quotes (ex: <b
32450 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62  >'key'</b> or <b
32460 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20  >'glob'</b>) is 
32470 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78  used in a contex
32480 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74  t where.an ident
32490 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64  ifier is allowed
324a0 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72   but where a str
324b0 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e  ing literal is n
324c0 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e  ot allowed, then
324d0 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e  .the token is un
324e0 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61  derstood to be a
324f0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73  n identifier ins
32500 74 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67  tead of a string
32510 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f   literal..</p></
32520 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  li>..<li><p>^If 
32530 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75  a keyword in dou
32540 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20  ble.quotes (ex: 
32550 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20  <b>"key"</b> or 
32560 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69  <b>"glob"</b>) i
32570 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74  s used in a cont
32580 65 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e  ext where.it can
32590 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20  not be resolved 
325a0 74 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  to an identifier
325b0 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72   but where a str
325c0 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61  ing literal.is a
325d0 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65  llowed, then the
325e0 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73   token is unders
325f0 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72  tood to be a str
32600 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74  ing literal inst
32610 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69  ead.of an identi
32620 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  fier.</p></li>.<
32630 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d  /ul>..<p>Program
32640 6d 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e  mers are caution
32650 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68  ed not to use th
32660 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73  e two exceptions
32670 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68   described in.th
32680 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65  e previous bulle
32690 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a  ts.  We emphasiz
326a0 65 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73  e that they exis
326b0 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f  t only so that o
326c0 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65  ld.and ill-forme
326d0 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  d SQL statements
326e0 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63   will run correc
326f0 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72  tly.  Future ver
32700 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
32710 6d 69 67 68 74 20 72 61 69 73 65 20 65 72 72 6f  might raise erro
32720 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63  rs instead of ac
32730 63 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c 66  cepting the malf
32740 6f 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74 73  ormed.statements
32750 20 63 6f 76 65 72 65 64 20 62 79 20 74 68 65 20   covered by the 
32760 65 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76 65  exceptions above
32770 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74  .</p>..<p>.SQLit
32780 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f  e adds new keywo
32790 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f  rds from time to
327a0 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61   time when it ta
327b0 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75  kes on new featu
327c0 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65  res..So to preve
327d0 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f  nt your code fro
327e0 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62  m being broken b
327f0 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65  y future enhance
32800 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c  ments, you shoul
32810 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65  d.normally quote
32820 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20   any identifier 
32830 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69  that is an Engli
32840 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64  sh language word
32850 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f  , even if.you do
32860 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f   not have to..</
32870 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74  p>..<p>.The list
32880 20 62 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c   below shows all
32890 20 70 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f 72   possible keywor
328a0 64 73 20 75 73 65 64 20 62 79 20 61 6e 79 20 62  ds used by any b
328b0 75 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20 72  uild of.SQLite r
328c0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f  egardless of [co
328d0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
328e0 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73  ns].  .Most reas
328f0 6f 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75 72 61  onable configura
32900 74 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f  tions use most o
32910 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b  r all of these k
32920 65 79 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d  eywords,.but som
32930 65 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 62  e keywords may b
32940 65 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 53  e omitted when S
32950 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74  QL language feat
32960 75 72 65 73 20 61 72 65 0a 64 69 73 61 62 6c 65  ures are.disable
32970 64 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73 73 20  d..^(Regardless 
32980 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  of the compile-t
32990 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ime configuratio
329a0 6e 2c 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65  n, any identifie
329b0 72 20 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e  r that is not on
329c0 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c  .the following <
329d0 74 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65  tcl>hd_puts [lle
329e0 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69  ngth $keyword_li
329f0 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e  st]</tcl> elemen
32a00 74 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20 61 20  t.list is not a 
32a10 6b 65 79 77 6f 72 64 20 74 6f 20 74 68 65 20 53  keyword to the S
32a20 51 4c 20 70 61 72 73 65 72 20 69 6e 20 53 51 4c  QL parser in SQL
32a30 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ite:.</p>..<bloc
32a40 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77  kquote>.<table w
32a50 69 64 74 68 3d 22 31 30 30 25 22 3e 3c 74 72 3e  idth="100%"><tr>
32a60 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74  .<td align="left
32a70 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77  " valign="top" w
32a80 69 64 74 68 3d 22 32 30 25 22 3e 0a 3c 74 63 6c  idth="20%">.<tcl
32a90 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68  >.set n [llength
32aa0 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a   $keyword_list].
32ab0 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e  set nCol 5.set n
32ac0 52 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24  Row [expr {($n+$
32ad0 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a  nCol-1)/$nCol}].
32ae0 73 65 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20  set i 0.foreach 
32af0 77 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69  word $keyword_li
32b00 73 74 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 24  st {.  if {$i==$
32b10 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70  nRow} {.    hd_p
32b20 75 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61  uts "</td><td va
32b30 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69  lign=\"top\" ali
32b40 67 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74  gn=\"left\" widt
32b50 68 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20  h=\"20%\">".    
32b60 73 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65  set i 1.  } else
32b70 20 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20   {.    incr i.  
32b80 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 24 77 6f  }.  hd_puts "$wo
32b90 72 64 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63  rd<br>\n".}.</tc
32ba0 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74  l>.</td></tr></t
32bb0 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  able></blockquot
32bc0 65 3e 29 5e 0a                                   e>)^.